Files
Fussball/README.md
2026-02-27 10:51:49 +00:00

21 KiB
Raw Blame History

Fußball Plugin — Vollständiges Minecraft Fußball-Minigame

Ein professionelles Fußball-Plugin für Spigot/Paper 1.21+ mit echtem Ball-Physics, Spielregeln und persistenten Statistiken.


📦 Installation

  1. Java 21+ und Spigot/Paper 1.21.x wird benötigt
  2. Plugin bauen: mvn packagetarget/Fussball.jar
  3. JAR in den /plugins/ Ordner deines Servers kopieren
  4. Server (neu)starten
  5. (Optional) PlaceholderAPI installieren für %fussball_...% Platzhalter

🎮 Features

Feature Beschreibung
Echter Ball ArmorStand mit Fußball-Textur, Physik & Reibung
👥 Teams Automatische Team-Zuweisung mit Auto-Balance (Rot vs. Blau)
👕 Team-Rüstung Spieler erhalten farbige Leder-Rüstung (Rot/Blau), Torwart bekommt orangefarbenes/hellblaues Trikot
🥅 Tor-Erkennung Region-basierte Tore mit Trajectory-Check (Schritt-für-Schritt Bahnverfolgung)
🎉 Tor-Effekte Feuerwerk, Titel, Action-Bar Tor-Replay, Sound
📊 Scoreboard Live-Spielstand, Zeit, Halbzeit-Anzeige, farbige Team-Namen über Kopf
🔴 BossBar Timer mit Farbwechsel (grün→gelb→rot) + Spielstand, Halbzeit-Label
⏸ Halbzeit 30s Pause nach der 1. Halbzeit + Seitenwechsel, danach 2. Halbzeit
Verlängerung 10 Minuten extra bei Gleichstand (Golden Goal wer zuerst trifft gewinnt)
🥊 Elfmeterschießen 5 Runden pro Team, Early-Termination, Sudden Death
💪 Aufladbarer Schuss Shift halten = Power aufbauen (0100%), Action-Bar zeigt Ladestand
🔁 Aus-Erkennung Einwurf / Ecke / Abstoß je nach Situation und letzter Berührung
🚩 Abseits Automatische Abseits-Erkennung mit Freistoß-Folge
🤲 Torwart-Mechanik Ball halten, fallen lassen oder werfen; Rückpass-Regel wird durchgesetzt
⚠️ Foul-Erkennung PvP-Angriffe = Foul; Gelbe/Rote Karte; Foul im Strafraum = Elfmeter
🎯 Freistoß Mindestabstand für Gegner wird aktiv durchgesetzt (Schubsen)
🦾 Kopfball Automatische Erkennung wenn Spieler in der Luft den Ball auf Kopfhöhe berührt
📏 Eigentor-Erkennung Wird separat gewertet und in Statistik gespeichert
🏅 Assist-Erkennung Vorlage (zweite Berührung vor dem Tor) wird automatisch erkannt
⏱ Nachspielzeit Wird bei Toren, Fouls, Karten und Aus-Situationen automatisch angesammelt
🏟 Strafraum Auto-berechnet aus Tor-Koordinaten oder manuell setzbar
📋 Matchbericht Minutengenaue Tore, Karten, Fouls und Abseits am Spielende
🏆 MVP-System Bester Torschütze wird nach dem Spiel bekannt gegeben
📈 Persistente Stats Tore, Eigentore, Vorlagen, Schüsse, Siege, Niederlagen, Siegquote
🔢 Warteschlange Automatische Queue wenn Arena voll; nächster Spieler rückt nach
👀 Zuschauer-Modus Spectator-Mode mit BossBar, Scoreboard und Team-Chat-Empfang
💬 Team-Chat Nachrichten nur ans eigene Team; Admins können global broadcasten
🚪 Schilder Join-Schilder mit Live-Status und automatischer Aktualisierung
🏷 PlaceholderAPI %fussball_goals%, %fussball_wins% etc. für andere Plugins
🛡 Anti-Grief Kein Block-Abbauen/-Platzieren, kein Item-Drop/-Pickup im Spiel
💊 God-Mode Spieler sterben nicht, Hunger eingefroren, Respawn an Team-Spawn
🔧 Debug-Befehl Region-Visualisierung, Ball-Position, Aus-Seite für Admins

🔧 Arena Setup (Schritt für Schritt)

1. Arena erstellen

/fb create StadionXL

2. Grundpositionen setzen

Gehe jeweils an die gewünschte Stelle und führe den Befehl aus:

/fb setup StadionXL lobby       → Lobby-Wartebereich (Spieler landen hier beim Joinen/Verlassen)
/fb setup StadionXL center      → Mittelpunkt des Spielfeldes
/fb setup StadionXL ballspawn   → Wo der Ball erscheint (Anstoss-Punkt, Mitte)
/fb setup StadionXL redspawn    → Startposition rotes Team
/fb setup StadionXL bluespawn   → Startposition blaues Team

3. Tore definieren (je 2 diagonal gegenüberliegende Ecken)

# Rotes Tor
/fb setup StadionXL redgoalmin    → Untere Ecke des roten Tors
/fb setup StadionXL redgoalmax    → Obere gegenüberliegende Ecke

# Blaues Tor
/fb setup StadionXL bluegoalmin   → Untere Ecke des blauen Tors
/fb setup StadionXL bluegoalmax   → Obere gegenüberliegende Ecke

Hinweis: Tor-Erkennung prüft X, Y und Z (3D). Die Tore müssen mindestens so hoch sein wie der Ball (ArmorStand-Helm) fliegen kann mindestens 2 Blöcke Höhe empfohlen.

4. Spielfeld-Grenzen setzen (optional, aber empfohlen)

Ohne Feldgrenzen gibt es keine Aus-Erkennung (Einwurf/Ecke/Abstoß) und keine Spieler-Grenzkontrolle.

/fb setup StadionXL fieldmin    → Eine Ecke des Spielfelds
/fb setup StadionXL fieldmax    → Die gegenüberliegende Ecke

5. Strafräume setzen (optional)

Wenn nicht gesetzt, werden die Strafräume automatisch aus den Tor-Koordinaten berechnet (Tiefe und Rand sind in config.yml einstellbar). Für mehr Kontrolle können sie manuell gesetzt werden:

/fb setup StadionXL redpenaltymin    → Untere Ecke des roten Strafraums
/fb setup StadionXL redpenaltymax    → Obere gegenüberliegende Ecke
/fb setup StadionXL bluepenaltymin   → Untere Ecke des blauen Strafraums
/fb setup StadionXL bluepenaltymax   → Obere gegenüberliegende Ecke

6. Spieler-Einstellungen anpassen (optional)

/fb setup StadionXL minplayers 2    → Mindestanzahl zum Starten (Standard: 2)
/fb setup StadionXL maxplayers 10   → Maximale Spielerzahl (Standard: 10)
/fb setup StadionXL duration 300    → Spielzeit in Sekunden, 1. + 2. Halbzeit zusammen (Standard: 300)

7. Setup überprüfen

/fb setup StadionXL info

Alle Pflichtfelder müssen §a✔ zeigen. Erst dann ist die Arena spielbereit.

Pflichtfelder: lobby, center, ballspawn, redspawn, bluespawn, redgoalmin, redgoalmax, bluegoalmin, bluegoalmax

Optionale Felder: fieldmin/fieldmax (Aus-Erkennung), redpenaltymin/max und bluepenaltymin/max (Strafraum)


📋 Alle Commands

Spieler-Commands

Command Beschreibung
/fb join <arena> Einem Spiel beitreten (bei voller Arena → Warteschlange)
/fb leave Spiel verlassen / Zuschauen beenden / Warteschlange verlassen
/fb spectate <arena> Einem laufenden Spiel als Zuschauer beiwohnen
/fb spec <arena> Alias für spectate
/fb list Alle Arenen mit Status und Spieleranzahl anzeigen
/fb stats [spieler] Eigene oder fremde Statistiken anzeigen (inkl. laufendes Spiel)
/fb top goals Top 10 Torschützen
/fb top wins Top 10 nach Siegen (inkl. Siegquote %)
/fb top kicks Top 10 nach Anzahl Schüssen
/fb, /soccer Aliase für /fussball

Admin-Commands (Berechtigung: fussball.admin)

Command Beschreibung
/fb create <name> Neue Arena erstellen
/fb delete <name> Arena löschen
/fb setup <arena> <option> Arena konfigurieren (siehe Setup-Guide)
/fb setup <arena> info Alle gesetzten Positionen und Status anzeigen
/fb stop <arena> Laufendes Spiel sofort beenden
/fb debug <arena> Tor-/Feld-Regionen, Ball-Position und Aus-Seite debuggen

Alle Commands unterstützen Tab-Completion für Arena-Namen und Optionen.


🎮 Spielablauf

Spieler joinen per Schild oder /fb join
    → Countdown startet (10 Sek.)  bricht ab bei zu wenig Spielern
    → Spieler teleportieren zu Team-Spawns
    → 5-Sekunden-Countdown mit Positions-Aufforderung
    → Fußball erscheint in der Mitte, Schonfrist von 3s

── 1. HALBZEIT ──────────────────────────────────────────
    Spieler laufen gegen den Ball → automatischer Kick
    Shift halten → Schuss lädt auf → loslassen = Powerschuss
    Ball ins Tor → Punkt! (Feuerwerk + Pause + Anstoß für gegnerisches Team)
    Bei Aus → Einwurf / Ecke / Abstoß je nach Situation
    Fouls, Karten, Abseits, Freistöße laufen automatisch

── HALBZEIT-PAUSE (30 Sek.) ─────────────────────────────
    Spielstand wird angezeigt
    Seiten werden getauscht (Teams spielen in die andere Richtung)

── 2. HALBZEIT ──────────────────────────────────────────
    Weitere 5-Sekunden-Countdown, dann Anstoß
    Spielzeit läuft ab...

── BEI GLEICHSTAND: VERLÄNGERUNG (10 Min.) ──────────────
    Golden Goal: Wer zuerst trifft, gewinnt sofort
    Bei weiterem Gleichstand...

── ELFMETER-SCHIEßEN ────────────────────────────────────
    5 Schüsse pro Team (abwechselnd, beginnend mit Rot)
    Schütze hat 15 Sekunden pro Versuch
    Early-Termination wenn Ergebnis mathematisch feststeht
    Dann: Sudden Death (je 1 Schuss) bis zur Entscheidung

── SPIELENDE ────────────────────────────────────────────
    Matchbericht mit minutengenauen Ereignissen
    Sieger + MVP werden bekannt gegeben
    Statistiken werden gespeichert
    Alle zurück zur Lobby (nach 5 Sek.)

💪 Aufladbarer Schuss

Aktion Effekt
Rechtsklick auf Ball Normaler Schuss
Linksklick auf Ball Normaler Schuss
Sprinten + Rechtsklick Schuss mit 1,8× Kraft
Shift halten (max 1,5s) Schuss lädt auf
Shift loslassen Schuss mit aufgebauter Power
100% Ladung erreicht Auto-Fire

Die Action-Bar zeigt den Ladefortschritt:

⚽ Schuss-Power: ████████░░ 80%

Ab 70% Ladung erscheinen Feuer-Partikel am Ball. Voller Schuss = 3,8× Kraft + mehr Loft + höherer Ton.

Power-Schwellwert-Übersicht:

  • < 40% → grüne Balken
  • 4080% → gelbe Balken
  • 80% → rote Balken + Feuer-Partikel bei 70%+


🤲 Torwart-System

Der erste Spieler jedes Teams wird automatisch als Torwart bestimmt und erhält ein spezielles andersfarbiges Trikot (Orange/Hellblau).

Torwart-Aktionen:

Aktion Effekt
Rechtsklick auf Ball (nah am Tor) Ball halten Ball folgt dem TW
Zweiter Rechtsklick (Ball gehalten) Ball werfen
Shift loslassen (Ball gehalten) Ball werfen

Regeln:

  • Ball kann nur innerhalb von 2 Blöcken um das eigene Tor gehalten werden
  • Ball kann nur in der eigenen Hälfte gehalten werden
  • Rückpass-Regel: Hat ein Mitspieler den Ball direkt mit dem Fuß zugespielt (kein Kopfball), darf der Torwart den Ball nicht mit den Händen nehmen

🚩 Spielregeln

Aus-Erkennung

Das Plugin unterscheidet automatisch zwischen den drei Aus-Situationen:

Situation Bedingung Folge
Einwurf Ball verlässt die Seitenlinie Gegnerisches Team hat den Einwurf
Ecke Verteidigendes Team spielt Ball über die eigene Grundlinie Angreifendes Team bekommt Ecke
Abstoß Angreifendes Team spielt Ball über die gegnerische Grundlinie Verteidigendes Team bekommt Abstoß

Abseits

Automatische Abseits-Erkennung bei jedem Schuss. Ein Spieler steht im Abseits wenn:

  • Er sich in der gegnerischen Hälfte befindet
  • Er hinter dem vorletzten Verteidiger steht
  • Er weiter in Richtung gegnerisches Tor steht als der Ball beim Schuss

Bei Abseits: Sofortige Spielunterbrechung, Freistoß für das verteidigende Team.

Fouls & Karten

Trifft ein Spieler den Gegner (Angriff oder Projektil), wird dies als Foul gewertet:

Situation Folge
Normales Foul Gelbe Karte + Freistoß für das gefoulte Team
2. Gelbe Karte Gelb-Rot → Disqualifikation
Grobes Foulspiel (hoher Schaden ≥ 8♥) Sofortige Rote Karte + Disqualifikation
Foul im Strafraum Elfmeter für das gefoulte Team

Kein PvP-Schaden der Angriff wird gecancelt, nur das Regelspiel greift.

Spielfeldgrenzen

Spieler die das Spielfeld verlassen (über die in fieldmin/fieldmax definierte Grenze + Toleranz) erhalten einen Countdown-Alarm. Bei Ablauf des Countdowns werden sie disqualifiziert.


⏱ Nachspielzeit

Nachspielzeit wird automatisch in folgenden Situationen angesammelt und nach der regulären Spielzeit zur ersten/zweiten Halbzeit angehängt:

Ereignis Sekunden
Tor +30s (konfigurierbar)
Gelb-Rote / Rote Karte +15s
Foul +5s
Ball im Aus +3s

Die angesammelte Nachspielzeit wird als +N' in der BossBar und im Scoreboard angezeigt.


💬 Team-Chat

Spieler im Spiel schreiben automatisch nur ans eigene Team:

§c[ROT] §fSpielerName§7: Ich stehe frei links!
§9[BLAU] §fAndereSpieler§7: Auf mich!
  • !Nachricht → Global-Broadcast an alle Spieler im Spiel (nur Admins, benötigt fussball.admin)
  • Zuschauer sehen alle Team-Chats mit [Zuschauer]-Label
  • Chat wird nur an Team-Mitglieder zugestellt kein Leck zum anderen Team

🚪 Join-Schilder erstellen

  1. Schild platzieren
  2. In die erste Zeile [Fussball] schreiben (benötigt fussball.admin)
  3. In die zweite Zeile den Arena-Namen schreiben
  4. Rechtsklick auf das fertige Schild → Spiel beitreten

Das Schild wird automatisch formatiert und aktualisiert:

[⚽]
StadionXL
§c● 4/10
Klick zum Joinen

Status-Farben:

Symbol Bedeutung
§a● grün Arena wartet auf Spieler
§e● gelb Countdown läuft
§c● rot Spiel läuft / Tor-Pause
§6● orange Halbzeit / Verlängerung / Elfmeter
§7● grau Spiel wird beendet

Schilder überleben Server-Neustarts (gespeichert in signs.yml). Beim Abbauen eines Schilds wird es automatisch aus der Liste entfernt.


📈 Statistiken & Bestenliste

/fb stats               → Eigene Statistiken
/fb stats Notch         → Statistiken von "Notch"
/fb top goals           → Top 10 Torschützen
/fb top wins            → Top 10 nach Siegen (inkl. Siegquote)
/fb top kicks           → Top 10 nach Anzahl Schüssen

Gespeicherte Werte pro Spieler:

Wert Beschreibung
Tore Erzielte Tore gesamt
🅾 Eigentore Eigentore (separat gewertet)
🎯 Vorlagen Assists (Ballberührung direkt vor dem Tor)
👟 Schüsse Alle Ball-Berührungen (Kicks, Kopfbälle etc.)
🏆 Siege Gewonnene Spiele
Niederlagen Verlorene Spiele
Unentschieden Unentschiedene Spiele
📊 Gespielte Spiele Gesamtanzahl Spiele
📈 Siegquote Siege / Spiele × 100 %

Alle Daten werden in plugins/Fussball/stats.yml dauerhaft gespeichert. Bei /fb stats wird der aktuelle Spielstand aus einem laufenden Spiel auch direkt angezeigt.


🏷 PlaceholderAPI

Wenn PlaceholderAPI installiert ist, sind folgende Platzhalter verfügbar:

Platzhalter Wert
%fussball_goals% Tore gesamt
%fussball_kicks% Schüsse gesamt
%fussball_wins% Siege gesamt
%fussball_losses% Niederlagen gesamt
%fussball_draws% Unentschieden gesamt
%fussball_games% Gespielte Spiele
%fussball_winrate% Siegquote (z.B. 67.5)
%fussball_ingame% true / false
%fussball_arena% Name der aktuellen Arena oder
%fussball_score% Aktueller Spielstand z.B. 2 : 1 oder

🔑 Berechtigungen

Permission Beschreibung Standard
fussball.admin Alle Admin-Commands (create, delete, setup, stop, debug, Schilder, Global-Chat) OP
fussball.play Spielen, Zuschauen, Stats anzeigen Alle

⚙ config.yml Alle Einstellungen

defaults:
  min-players: 2          # Mindestspielerzahl für den Start
  max-players: 10         # Maximale Spielerzahl pro Arena
  game-duration: 300      # Gesamtspielzeit in Sekunden (beide Halbzeiten zusammen)

ball:
  kick-power: 1.1                # Kraft eines normalen Schusses
  sprint-kick-power: 1.8         # Kraft beim Sprint-Schuss
  kick-vertical: 0.3             # Vertikale Komponente (Loft) beim Schuss
  charged-min-power: 1.3         # Minimale Kraft beim aufgeladenen Schuss
  charged-max-power: 3.8         # Maximale Kraft beim voll aufgeladenen Schuss

gameplay:
  offside-enabled: true          # Abseits an/aus
  foul-detection-enabled: true   # Foul-Erkennung an/aus
  freekick-distance: 5.0         # Mindestabstand Gegner beim Freistoß (Blöcke)
  freekick-duration: 600         # Ticks bis Freistoß automatisch freigegeben wird
  goalkeeper-hold-range: 2.5     # Wie nah der TW am Ball sein muss um ihn zu halten
  goalkeeper-throw-power: 1.8    # Wurfstärke des TW
  out-of-bounds-tolerance: 2.0   # Toleranz außerhalb Spielfeld (Blöcke) bevor Warnung
  out-of-bounds-countdown: 5     # Sekunden bis Disqualifikation bei Feldverlassen

  # Strafraum (wenn keine manuellen Punkte gesetzt)
  penalty-area-depth: 16         # Tiefe des Strafraums in Richtung Spielfeldmitte
  penalty-area-margin: 6         # Seitliche Ausdehnung über die Torpfosten hinaus

  # Kopfball
  header-range: 1.8              # Max. Abstand Spieler→Ball für Kopfball
  header-min-height: 0.8         # Min. Ballhöhe über Spielerfüßen
  header-max-height: 2.3         # Max. Ballhöhe über Spielerfüßen
  header-power: 1.3              # Kopfball-Stärke
  header-cooldown: 10            # Ticks Abklingzeit zwischen zwei Kopfbällen

  # Nachspielzeit
  injury-time-enabled: true
  injury-time-per-goal: 30       # Sekunden Nachspielzeit pro Tor
  injury-time-per-card: 15       # Sekunden pro Karte
  injury-time-per-foul: 5        # Sekunden pro Foul
  injury-time-per-out: 3         # Sekunden pro Aus-Situation

Alle messages-Einträge in der config.yml sind ebenfalls vollständig anpassbar. Verfügbare Platzhalter in Nachrichten: {player}, {team}, {score}, {time}, {reason}, {n}, {max}.


📁 Dateistruktur

plugins/Fussball/
├── config.yml      → Plugin-Einstellungen, Ball-Power, Nachrichten
├── arenas.yml      → Gespeicherte Arenen (auto-generiert)
├── signs.yml       → Gespeicherte Join-Schilder (auto-generiert)
└── stats.yml       → Spieler-Statistiken (auto-generiert)

🏟 Tipps für ein gutes Spielfeld

  • Feldgröße: Mindestens 30×20 Blöcke empfohlen (größer = mehr Spaß)
  • Tore: Ca. 5 Blöcke breit, 3 Blöcke hoch genug Platz für den ArmorStand-Ball; mindestens 2 Blöcke breit da der Ball sonst stecken bleiben kann
  • Tortiefe: Mindestens 2 Blöcke tief damit redgoalmin/redgoalmax ein echtes Volumen ergeben und Tor-Erkennung sauber funktioniert
  • Boden: Gras, Terrakotta oder Smaragd-Blöcke für Optik
  • Begrenzung: Zäune, Mauern oder Glas als Spielfeld-Rand
  • fieldmin/fieldmax immer setzen! Sonst gibt es weder Aus-Erkennung noch Spieler-Feldgrenzenkontrolle
  • Lobby außerhalb des Spielfelds platzieren, damit Spieler nach dem Spiel nicht auf dem Feld stehen
  • ballspawn genau in die Mitte er ist gleichzeitig der Anstoßpunkt und der Spawn nach einem Tor

📣 Matchbericht

Nach jedem Spiel wird automatisch ein Matchbericht ausgegeben, der minutengenau auflistet:

  • Tore (mit Torschütze, ggf. Vorlage und Eigentor-Markierung)
  • Karten (Gelb, Gelb-Rot, Rot mit Grund)
  • Fouls (Fouler → Geopferter)
  • Abseits-Situationen
  • MVP (Spieler mit den meisten Toren)

⚙ Kompatibilität

Anforderung Version
Spigot / Paper 1.21.x
Java 21+
PlaceholderAPI optional, jede Version

Mehrere Arenen können gleichzeitig laufen und arbeiten vollständig unabhängig voneinander.


🐛 Bekannte Eigenheiten

  • Der Ball ist ein ArmorStand er kann in engen Durchgängen (< 1 Block) stecken bleiben. Tore daher mindestens 2 Blöcke breit bauen. Ein automatischer Respawn greift nach 4 Sekunden falls der Ball verschwindet.
  • Spieler müssen im Adventure-Mode sein externe Plugins die den Spielmodus ändern, können das Spiel stören.
  • Die Halbzeit teilt die duration-Einstellung in zwei gleiche Hälften. duration: 300 = 2× 2:30 Minuten.
  • Torwart-Zuweisung: Der erste Spieler jedes Teams (nach Join-Reihenfolge) wird Torwart. Eine manuelle Zuweisung per Command existiert aktuell nicht.
  • Abseits erfordert fieldmin/fieldmax nicht, aber die Feld-Achse wird aus den Tor-Koordinaten berechnet. Ohne korrekt platzierte Tore ist Abseits deaktiviert.
  • Strafraum-Elfmeter: Der Elfmeter wird aktuell vom Ball-Spawn-Punkt (Feldmitte) ausgeführt, nicht von einem separaten Elfmeterpunkt. Ein dedizierter Elfmeterpunkt kann in einer zukünftigen Version hinzugefügt werden.

Erstellt mit ❤️ von M_Viper — viel Spaß beim Fußballspielen! 🏆