diff --git a/README.md b/README.md index e61f8d2..03b96ce 100644 --- a/README.md +++ b/README.md @@ -20,32 +20,40 @@ Ein professionelles Fußball-Plugin für Spigot/Paper 1.21+ mit echtem Ball-Phys |---|---| | ⚽ 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 | +| 🙋 Teamwahl | Spieler können per `/fb team rot|blau` ihr Wunsch-Team wählen (vor Spielstart) | +| 👕 Team-Rüstung | Farbige Leder-Rüstung mit **Trikot-Nummer** (#1, #2, …) auf dem Brustpanzer | | 🥅 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 | +| 🎶 Stadionatmosphäre | Jubel-Sounds & mehrfache Feuerwerke beim Tor; Enttäuschungs-Sound für das andere Team | +| 📊 Scoreboard | Live-Spielstand, Zeit, Halbzeit-Anzeige, Ballbesitz, farbige Spielernamen über Kopf | +| 🔴 BossBar | Timer mit Farbwechsel (grün→gelb→rot) + Spielstand, Nachspielzeit in Sekunden | | ⏸ 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 (0–100%), Action-Bar zeigt Ladestand | | 🔁 Aus-Erkennung | Einwurf / Ecke / Abstoß je nach Situation und letzter Berührung | +| ⭕ Anstoß-Kreis | Gegner werden beim Anstoß aus dem Kreis (9,15m) herausgeschoben | | 🚩 Abseits | Automatische Abseits-Erkennung mit Freistoß-Folge | | 🤲 Torwart-Mechanik | Ball halten, fallen lassen oder werfen; Rückpass-Regel wird durchgesetzt | +| ✋ Handball | Kauernder Spieler berührt Ball auf Armhöhe = Freistoß/Elfmeter | | ⚠️ Foul-Erkennung | PvP-Angriffe = Foul; Gelbe/Rote Karte; Foul im Strafraum = Elfmeter | | 🎯 Freistoß | Mindestabstand für Gegner wird aktiv durchgesetzt (Schubsen) | +| ⬇ Drop Ball | Admin kann per `/fb dropball` einen Schiedsrichterball ausführen | | 🦾 Kopfball | Automatische Erkennung wenn Spieler in der Luft den Ball auf Kopfhöhe berührt | +| 📏 Kurz-/Langpass | Pässe über 20 Blöcke werden als Langpass in der Action-Bar angezeigt | | 📏 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 | +| ⏱ Nachspielzeit | Akkumuliert bei Toren, Fouls, Karten und Aus-Situationen; Anzeige in Sekunden | +| 📈 Ballbesitz | Live-Tracking im Scoreboard + Anzeige im Matchbericht am Spielende | | 🏟 Strafraum | Auto-berechnet aus Tor-Koordinaten oder manuell setzbar | -| 📋 Matchbericht | Minutengenaue Tore, Karten, Fouls und Abseits am Spielende | +| 📋 Matchbericht | Tore, Karten, Fouls, Abseits, Ballbesitz und MVP am Spielende | | 🏆 MVP-System | Bester Torschütze wird nach dem Spiel bekannt gegeben | | 📈 Persistente Stats | Tore, Eigentore, Vorlagen, Schüsse, Siege, Niederlagen, Siegquote | +| 📋 Match-History | Letzte 50 Spiele dauerhaft gespeichert, abrufbar per `/fb history` | | 🔢 Warteschlange | Automatische Queue wenn Arena voll; nächster Spieler rückt nach | -| 👀 Zuschauer-Modus | Sichtbarer Zuschauer-Bereich außerhalb des Feldes mit BossBar, Scoreboard und Team-Chat-Empfang | +| 👀 Zuschauer-Modus | Sichtbarer Zuschauer-Bereich außerhalb des Feldes mit BossBar und Scoreboard | | 💬 Team-Chat | Nachrichten nur ans eigene Team; Admins können global broadcasten | -| 🚪 Schilder | Join-Schilder mit Live-Status und automatischer Aktualisierung | +| 🚪 Schilder | Join-Schilder und Zuschauer-Schilder mit Live-Status | | 🏷 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 | @@ -65,7 +73,7 @@ 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 center → Mittelpunkt des Spielfeldes (auch Anstoß-Kreis-Zentrum) /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 @@ -136,11 +144,13 @@ Alle Pflichtfelder müssen **§a✔** zeigen. Erst dann ist die Arena spielberei | `/fb leave` | Spiel verlassen / Zuschauen beenden / Warteschlange verlassen | | `/fb spectate ` | Einem laufenden Spiel als Zuschauer beiwohnen | | `/fb spec ` | Alias für `spectate` | +| `/fb team rot\|blau` | Wunsch-Team wählen (nur vor Spielstart, wird nach Möglichkeit berücksichtigt) | | `/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 history [n]` | Letzte n Spiele anzeigen (Standard: 5, max. 20) | | `/fb`, `/soccer` | Aliase für `/fussball` | ### Admin-Commands *(Berechtigung: `fussball.admin`)* @@ -152,6 +162,7 @@ Alle Pflichtfelder müssen **§a✔** zeigen. Erst dann ist die Arena spielberei | `/fb setup info` | Alle gesetzten Positionen und Status anzeigen | | `/fb stop ` | Laufendes Spiel sofort beenden | | `/fb setgk ` | Torwart eines laufenden Spiels manuell neu zuweisen | +| `/fb dropball ` | Schiedsrichterball – Ball neutral spawnen, beide Teams dürfen spielen | | `/fb debug ` | Tor-/Feld-Regionen, Ball-Position und Aus-Seite debuggen | Alle Commands unterstützen **Tab-Completion** für Arena-Namen und Optionen. @@ -161,21 +172,23 @@ Alle Commands unterstützen **Tab-Completion** für Arena-Namen und Optionen. ## 🎮 Spielablauf ``` -Spieler joinen per Schild oder /fb join +Spieler joinen per Schild oder /fb join → optional /fb team rot|blau vor Spielstart → Countdown startet (10 Sek.) – bricht ab bei zu wenig Spielern - → Spieler teleportieren zu Team-Spawns + → Spieler teleportieren zu Team-Spawns (Trikot mit Nummer #1, #2, …) → 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) + Langpässe (>20 Blöcke) werden in der Action-Bar angezeigt + Anstoß nach Tor: Gegner bleiben außerhalb des Anstoß-Kreises (9,15m, 10s) + Ball ins Tor → Punkt! (Feuerwerk + Jubel-Sounds + Pause + Anstoß) Bei Aus → Einwurf / Ecke / Abstoß je nach Situation - Fouls, Karten, Abseits, Freistöße laufen automatisch + Fouls, Karten, Abseits, Handball, Freistöße laufen automatisch ── HALBZEIT-PAUSE (30 Sek.) ───────────────────────────── - Spielstand wird angezeigt + Spielstand + Ballbesitz wird angezeigt Seiten werden getauscht (Teams spielen in die andere Richtung) ── 2. HALBZEIT ────────────────────────────────────────── @@ -193,9 +206,9 @@ Spieler joinen per Schild oder /fb join Dann: Sudden Death (je 1 Schuss) bis zur Entscheidung ── SPIELENDE ──────────────────────────────────────────── - Matchbericht mit minutengenauen Ereignissen + Matchbericht mit minutengenauen Ereignissen + Ballbesitz Sieger + MVP werden bekannt gegeben - Statistiken werden gespeichert + Ergebnis wird in matchhistory.yml gespeichert Alle zurück zur Lobby (nach 5 Sek.) ``` @@ -261,7 +274,14 @@ Automatische Abseits-Erkennung bei jedem Schuss. Ein Spieler steht im Abseits we - 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. +### Anstoß-Kreis +Nach jedem Tor müssen Gegner für **10 Sekunden** außerhalb des Anstoß-Kreises (Radius: 9,15 Blöcke, konfigurierbar) bleiben. Wer zu nah kommt, wird automatisch herausgeschoben. + +### Handball +Kauert ein Spieler (`Shift`) und berührt den Ball auf Armhöhe (0,5–1,5 Blöcke), gilt dies als **Handspiel**: +- Im offenen Feld → Freistoß für das gegnerische Team +- Im Strafraum → Elfmeter für das gegnerische Team +- Ein-/Ausschaltbar per `gameplay.handball-enabled` ### Fouls & Karten Trifft ein Spieler den Gegner (Angriff oder Projektil), wird dies als Foul gewertet: @@ -273,25 +293,57 @@ Trifft ein Spieler den Gegner (Angriff oder Projektil), wird dies als Foul gewer | 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. +### Kurz-/Langpass +Wird ein Pass über mehr als **20 Blöcke** (konfigurierbar) an einen Mitspieler gespielt, erscheint in der Action-Bar eine Meldung: +``` +⚽ Langpass von Hans zu Fritz (34 Blöcke) +``` -### 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. +### Drop Ball (Schiedsrichterball) +Ein Admin kann mit `/fb dropball ` das Spiel neutral fortsetzen. Der Ball wird an der Adminposition (oder Feldmitte) gespawnt – beide Teams dürfen sofort spielen. + +--- + +## 📈 Ballbesitz + +Das Plugin trackt automatisch, welches Team den Ball zuletzt berührt hat, und berechnet daraus den prozentualen Ballbesitz: + +- **Scoreboard:** Live-Anzeige `§cR 58% │ §942% B` +- **Matchbericht:** Anzeige am Spielende z. B. `Ballbesitz: 62% (Rot) vs 38% (Blau)` +- **Match-History:** Wird zusammen mit dem Ergebnis gespeichert --- ## ⏱ Nachspielzeit -Nachspielzeit wird automatisch in folgenden Situationen angesammelt und nach der regulären Spielzeit zur ersten/zweiten Halbzeit angehängt: +Nachspielzeit wird automatisch in folgenden Situationen angesammelt und nach der regulären Spielzeit angehängt. Die Anzeige erfolgt nun in **Sekunden** (z. B. `+45s` oder `+1:30`) statt gerundeten Minuten: | Ereignis | Sekunden | |---|---| | Tor | +30s (konfigurierbar) | | Gelb-Rote / Rote Karte | +15s | -| Foul | +5s | +| Foul / Handball | +5s | | Ball im Aus | +3s | +| Drop Ball | +5s | -Die angesammelte Nachspielzeit wird als `+N'` in der BossBar und im Scoreboard angezeigt. +--- + +## 📋 Match-History + +Nach jedem Spiel wird das Ergebnis automatisch in `matchhistory.yml` gespeichert (max. 50 Einträge): + +``` +/fb history → Letzte 5 Spiele anzeigen +/fb history 10 → Letzte 10 Spiele anzeigen +``` + +**Anzeige-Format:** +``` +#1 [28.02.2026 14:22] StadionXL 3:1 │ §cRot │ Besitz 62% / 38% +#2 [28.02.2026 13:55] StadionXL 2:2 (Elfm. §c4§8:§93) │ §9Blau │ Besitz 49% / 51% +``` + +Gespeicherte Werte pro Spiel: Arena, Datum, Ergebnis, Sieger, Spielzeit, Ballbesitz, Elfmeter-Ergebnis, Tor-Events. --- @@ -305,27 +357,25 @@ Spieler im Spiel schreiben automatisch nur ans eigene Team: - **`!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 - Kompatibel mit Chat-Formatter-Plugins (EssentialsChat, CMI etc.) – keine Doppelnachrichten --- ## 🚪 Join-Schilder erstellen +**Join-Schild:** 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 +2. Zeile 1: `[Fussball]` (benötigt `fussball.admin`) +3. Zeile 2: Arena-Name +4. Rechtsklick → Spiel beitreten -Das Schild wird automatisch formatiert und aktualisiert: -``` -[⚽] -StadionXL -§c● 4/10 -Klick zum Joinen -``` +**Zuschauer-Schild:** +1. Schild platzieren +2. Zeile 1: `[FussballSpec]` (benötigt `fussball.admin`) +3. Zeile 2: Arena-Name +4. Rechtsklick → als Zuschauer beitreten -**Status-Farben:** +Das Schild wird automatisch formatiert und mit Live-Status aktualisiert: | Symbol | Bedeutung | |---|---| @@ -335,8 +385,6 @@ Klick zum Joinen | `§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 @@ -347,6 +395,7 @@ Schilder überleben Server-Neustarts (gespeichert in `signs.yml`). Beim Abbauen /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 history [n] → Letzte n Spiele ``` **Gespeicherte Werte pro Spieler:** @@ -363,7 +412,7 @@ Schilder überleben Server-Neustarts (gespeichert in `signs.yml`). Beim Abbauen | 📊 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. +Alle Daten werden in `plugins/Fussball/stats.yml` dauerhaft gespeichert. --- @@ -374,6 +423,8 @@ Wenn PlaceholderAPI installiert ist, sind folgende Platzhalter verfügbar: | Platzhalter | Wert | |---|---| | `%fussball_goals%` | Tore gesamt | +| `%fussball_owngoals%` | Eigentore gesamt | +| `%fussball_assists%` | Assists gesamt | | `%fussball_kicks%` | Schüsse gesamt | | `%fussball_wins%` | Siege gesamt | | `%fussball_losses%` | Niederlagen gesamt | @@ -383,6 +434,8 @@ Wenn PlaceholderAPI installiert ist, sind folgende Platzhalter verfügbar: | `%fussball_ingame%` | `true` / `false` | | `%fussball_arena%` | Name der aktuellen Arena oder `–` | | `%fussball_score%` | Aktueller Spielstand z.B. `2 : 1` oder `–` | +| `%fussball_team%` | Team des Spielers (`Rot` / `Blau` / `–`) | +| `%fussball_injurytime%` | Aktuelle Nachspielzeit in Sekunden (0 = keine) | --- @@ -390,7 +443,7 @@ Wenn PlaceholderAPI installiert ist, sind folgende Platzhalter verfügbar: | Permission | Beschreibung | Standard | |---|---|---| -| `fussball.admin` | Alle Admin-Commands (create, delete, setup, stop, setgk, debug, Schilder, Global-Chat) | OP | +| `fussball.admin` | Alle Admin-Commands (create, delete, setup, stop, setgk, dropball, debug, Schilder, Global-Chat) | OP | | `fussball.play` | Spielen, Zuschauen, Stats anzeigen | Alle | --- @@ -404,42 +457,46 @@ defaults: 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 + kick-power: 1.1 + sprint-kick-power: 1.8 + kick-vertical: 0.3 + charged-min-power: 1.3 + charged-max-power: 3.8 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 + offside-enabled: true + foul-detection-enabled: true + handball-enabled: true # Handspiel-Erkennung (Shift + Ball auf Armhöhe) + freekick-distance: 5.0 + freekick-duration: 600 + goalkeeper-hold-range: 2.5 + goalkeeper-throw-power: 1.8 + out-of-bounds-tolerance: 2.0 + out-of-bounds-countdown: 5 + kickoff-circle-radius: 9.15 # Anstoß-Kreis Radius (FIFA: 9,15m) + long-pass-distance: 20.0 # Ab wann ein Pass als „Langpass" gilt (Blöcke) + penalty-area-depth: 16 + penalty-area-margin: 6 + header-range: 1.8 + header-min-height: 0.8 + header-max-height: 2.3 + header-power: 1.3 + header-cooldown: 10 + afk-warn-seconds: 20 + afk-kick-seconds: 40 + afk-move-threshold: 0.5 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 + injury-time-per-goal: 30 + injury-time-per-card: 15 + injury-time-per-foul: 5 + injury-time-per-out: 3 + +atmosphere: + enabled: true + goal-fireworks: 5 # Feuerwerke pro Tor (0 = deaktiviert) ``` -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}`. +Alle `messages`-Einträge sind ebenfalls vollständig anpassbar. Platzhalter: `{player}`, `{team}`, `{score}`, `{time}`, `{reason}`, `{n}`, `{max}`. --- @@ -447,10 +504,12 @@ Alle `messages`-Einträge in der `config.yml` sind ebenfalls vollständig anpass ``` 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) +├── config.yml → Plugin-Einstellungen, Ball-Power, Nachrichten +├── arenas.yml → Gespeicherte Arenen (auto-generiert) +├── signs.yml → Gespeicherte Join-/Zuschauer-Schilder (auto-generiert) +├── stats.yml → Spieler-Statistiken (auto-generiert) +├── matchhistory.yml → Letzte 50 Spiele (auto-generiert) +└── holograms.yml → Statistik-Hologramme (auto-generiert) ``` --- @@ -458,12 +517,10 @@ plugins/Fussball/ ## 🏟 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 +- **Tore:** Ca. **5 Blöcke breit, 3 Blöcke hoch** – mindestens **2 Blöcke breit** da der Ball sonst stecken bleiben kann +- **Tortiefe:** Mindestens **2 Blöcke tief** damit Tor-Erkennung sauber funktioniert - **`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 +- **`center` genau in die Feldmitte setzen** – wird für den Anstoß-Kreis verwendet - **`ballspawn` genau in die Mitte** – er ist gleichzeitig der Anstoßpunkt und der Spawn nach einem Tor - **`redpenaltyspot` / `bluepenaltyspot` setzen** für realistische Elfmeter-Positionen ca. 11 Meter vor dem jeweiligen Tor @@ -471,34 +528,24 @@ plugins/Fussball/ ## 📣 Matchbericht -Nach jedem Spiel wird automatisch ein Matchbericht ausgegeben, der minutengenau auflistet: +Nach jedem Spiel wird automatisch ein Matchbericht ausgegeben: +- **Endergebnis** und ggf. Elfmeter-Ergebnis +- **Ballbesitz** beider Teams in Prozent - **Tore** (mit Torschütze, ggf. Vorlage und Eigentor-Markierung) - **Karten** (Gelb, Gelb-Rot, Rot mit Grund) -- **Fouls** (Fouler → Geopferter) +- **Fouls** (Fouler → Opfer) - **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. Zuschauer laufen ebenfalls im Adventure-Mode und sind für alle sichtbar; Feld-Betretung wird durch automatische Grenzprüfung verhindert. +- Der Ball ist ein **ArmorStand** – er kann in engen Durchgängen (< 1 Block) stecken bleiben. Ein automatischer Respawn greift nach 4 Sekunden falls der Ball verschwindet. - Die Halbzeit teilt die `duration`-Einstellung in zwei gleiche Hälften. `duration: 300` = 2× 2:30 Minuten. -- **Abseits** erfordert `fieldmin`/`fieldmax` **nicht**, aber die Feld-Achse wird aus den Tor-Koordinaten berechnet. Ohne korrekt platzierte Tore ist Abseits deaktiviert. -- **Strafraum-Elfmeter:** Ohne gesetzte `redpenaltyspot`/`bluepenaltyspot` wird der Elfmeter vom `ballspawn`-Punkt (Feldmitte) ausgeführt. Für realistische Elfmeterpositionen diese Punkte im Setup setzen. +- **Abseits** erfordert `fieldmin`/`fieldmax` **nicht**, aber die Feld-Achse wird aus den Tor-Koordinaten berechnet. +- **Handball** erkennt kauernde Spieler (`Shift`) die den Ball auf Armhöhe berühren. Bei Torwarten greift stattdessen die Torwart-Halte-Mechanik. +- **Strafraum-Elfmeter:** Ohne gesetzte `redpenaltyspot`/`bluepenaltyspot` wird der Elfmeter vom `ballspawn`-Punkt ausgeführt. ---