README.md aktualisiert
This commit is contained in:
235
README.md
235
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 |
|
| ⚽ Echter Ball | ArmorStand mit Fußball-Textur, Physik & Reibung |
|
||||||
| 👥 Teams | Automatische Team-Zuweisung mit Auto-Balance (Rot vs. Blau) |
|
| 👥 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-Erkennung | Region-basierte Tore mit Trajectory-Check (Schritt-für-Schritt Bahnverfolgung) |
|
||||||
| 🎉 Tor-Effekte | Feuerwerk, Titel, Action-Bar Tor-Replay, Sound |
|
| 🎉 Tor-Effekte | Feuerwerk, Titel, Action-Bar Tor-Replay, Sound |
|
||||||
| 📊 Scoreboard | Live-Spielstand, Zeit, Halbzeit-Anzeige, farbige Team-Namen über Kopf |
|
| 🎶 Stadionatmosphäre | Jubel-Sounds & mehrfache Feuerwerke beim Tor; Enttäuschungs-Sound für das andere Team |
|
||||||
| 🔴 BossBar | Timer mit Farbwechsel (grün→gelb→rot) + Spielstand, Halbzeit-Label |
|
| 📊 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 |
|
| ⏸ Halbzeit | 30s Pause nach der 1. Halbzeit + Seitenwechsel, danach 2. Halbzeit |
|
||||||
| ⏰ Verlängerung | 10 Minuten extra bei Gleichstand (Golden Goal – wer zuerst trifft gewinnt) |
|
| ⏰ Verlängerung | 10 Minuten extra bei Gleichstand (Golden Goal – wer zuerst trifft gewinnt) |
|
||||||
| 🥊 Elfmeterschießen | 5 Runden pro Team, Early-Termination, Sudden Death |
|
| 🥊 Elfmeterschießen | 5 Runden pro Team, Early-Termination, Sudden Death |
|
||||||
| 💪 Aufladbarer Schuss | Shift halten = Power aufbauen (0–100%), Action-Bar zeigt Ladestand |
|
| 💪 Aufladbarer Schuss | Shift halten = Power aufbauen (0–100%), Action-Bar zeigt Ladestand |
|
||||||
| 🔁 Aus-Erkennung | Einwurf / Ecke / Abstoß je nach Situation und letzter Berührung |
|
| 🔁 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 |
|
| 🚩 Abseits | Automatische Abseits-Erkennung mit Freistoß-Folge |
|
||||||
| 🤲 Torwart-Mechanik | Ball halten, fallen lassen oder werfen; Rückpass-Regel wird durchgesetzt |
|
| 🤲 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 |
|
| ⚠️ Foul-Erkennung | PvP-Angriffe = Foul; Gelbe/Rote Karte; Foul im Strafraum = Elfmeter |
|
||||||
| 🎯 Freistoß | Mindestabstand für Gegner wird aktiv durchgesetzt (Schubsen) |
|
| 🎯 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 |
|
| 🦾 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 |
|
| 📏 Eigentor-Erkennung | Wird separat gewertet und in Statistik gespeichert |
|
||||||
| 🏅 Assist-Erkennung | Vorlage (zweite Berührung vor dem Tor) wird automatisch erkannt |
|
| 🏅 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 |
|
| 🏟 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 |
|
| 🏆 MVP-System | Bester Torschütze wird nach dem Spiel bekannt gegeben |
|
||||||
| 📈 Persistente Stats | Tore, Eigentore, Vorlagen, Schüsse, Siege, Niederlagen, Siegquote |
|
| 📈 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 |
|
| 🔢 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 |
|
| 💬 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 |
|
| 🏷 PlaceholderAPI | `%fussball_goals%`, `%fussball_wins%` etc. für andere Plugins |
|
||||||
| 🛡 Anti-Grief | Kein Block-Abbauen/-Platzieren, kein Item-Drop/-Pickup im Spiel |
|
| 🛡 Anti-Grief | Kein Block-Abbauen/-Platzieren, kein Item-Drop/-Pickup im Spiel |
|
||||||
| 💊 God-Mode | Spieler sterben nicht, Hunger eingefroren, Respawn an Team-Spawn |
|
| 💊 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 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 ballspawn → Wo der Ball erscheint (Anstoss-Punkt, Mitte)
|
||||||
/fb setup StadionXL redspawn → Startposition rotes Team
|
/fb setup StadionXL redspawn → Startposition rotes Team
|
||||||
/fb setup StadionXL bluespawn → Startposition blaues 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 leave` | Spiel verlassen / Zuschauen beenden / Warteschlange verlassen |
|
||||||
| `/fb spectate <arena>` | Einem laufenden Spiel als Zuschauer beiwohnen |
|
| `/fb spectate <arena>` | Einem laufenden Spiel als Zuschauer beiwohnen |
|
||||||
| `/fb spec <arena>` | Alias für `spectate` |
|
| `/fb spec <arena>` | 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 list` | Alle Arenen mit Status und Spieleranzahl anzeigen |
|
||||||
| `/fb stats [spieler]` | Eigene oder fremde Statistiken anzeigen (inkl. laufendes Spiel) |
|
| `/fb stats [spieler]` | Eigene oder fremde Statistiken anzeigen (inkl. laufendes Spiel) |
|
||||||
| `/fb top goals` | Top 10 Torschützen |
|
| `/fb top goals` | Top 10 Torschützen |
|
||||||
| `/fb top wins` | Top 10 nach Siegen (inkl. Siegquote %) |
|
| `/fb top wins` | Top 10 nach Siegen (inkl. Siegquote %) |
|
||||||
| `/fb top kicks` | Top 10 nach Anzahl Schüssen |
|
| `/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` |
|
| `/fb`, `/soccer` | Aliase für `/fussball` |
|
||||||
|
|
||||||
### Admin-Commands *(Berechtigung: `fussball.admin`)*
|
### Admin-Commands *(Berechtigung: `fussball.admin`)*
|
||||||
@@ -152,6 +162,7 @@ Alle Pflichtfelder müssen **§a✔** zeigen. Erst dann ist die Arena spielberei
|
|||||||
| `/fb setup <arena> info` | Alle gesetzten Positionen und Status anzeigen |
|
| `/fb setup <arena> info` | Alle gesetzten Positionen und Status anzeigen |
|
||||||
| `/fb stop <arena>` | Laufendes Spiel sofort beenden |
|
| `/fb stop <arena>` | Laufendes Spiel sofort beenden |
|
||||||
| `/fb setgk <arena> <spieler>` | Torwart eines laufenden Spiels manuell neu zuweisen |
|
| `/fb setgk <arena> <spieler>` | Torwart eines laufenden Spiels manuell neu zuweisen |
|
||||||
|
| `/fb dropball <arena>` | Schiedsrichterball – Ball neutral spawnen, beide Teams dürfen spielen |
|
||||||
| `/fb debug <arena>` | Tor-/Feld-Regionen, Ball-Position und Aus-Seite debuggen |
|
| `/fb debug <arena>` | Tor-/Feld-Regionen, Ball-Position und Aus-Seite debuggen |
|
||||||
|
|
||||||
Alle Commands unterstützen **Tab-Completion** für Arena-Namen und Optionen.
|
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
|
## 🎮 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
|
→ 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
|
→ 5-Sekunden-Countdown mit Positions-Aufforderung
|
||||||
→ Fußball erscheint in der Mitte, Schonfrist von 3s
|
→ Fußball erscheint in der Mitte, Schonfrist von 3s
|
||||||
|
|
||||||
── 1. HALBZEIT ──────────────────────────────────────────
|
── 1. HALBZEIT ──────────────────────────────────────────
|
||||||
Spieler laufen gegen den Ball → automatischer Kick
|
Spieler laufen gegen den Ball → automatischer Kick
|
||||||
Shift halten → Schuss lädt auf → loslassen = Powerschuss
|
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
|
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.) ─────────────────────────────
|
── HALBZEIT-PAUSE (30 Sek.) ─────────────────────────────
|
||||||
Spielstand wird angezeigt
|
Spielstand + Ballbesitz wird angezeigt
|
||||||
Seiten werden getauscht (Teams spielen in die andere Richtung)
|
Seiten werden getauscht (Teams spielen in die andere Richtung)
|
||||||
|
|
||||||
── 2. HALBZEIT ──────────────────────────────────────────
|
── 2. HALBZEIT ──────────────────────────────────────────
|
||||||
@@ -193,9 +206,9 @@ Spieler joinen per Schild oder /fb join
|
|||||||
Dann: Sudden Death (je 1 Schuss) bis zur Entscheidung
|
Dann: Sudden Death (je 1 Schuss) bis zur Entscheidung
|
||||||
|
|
||||||
── SPIELENDE ────────────────────────────────────────────
|
── SPIELENDE ────────────────────────────────────────────
|
||||||
Matchbericht mit minutengenauen Ereignissen
|
Matchbericht mit minutengenauen Ereignissen + Ballbesitz
|
||||||
Sieger + MVP werden bekannt gegeben
|
Sieger + MVP werden bekannt gegeben
|
||||||
Statistiken werden gespeichert
|
Ergebnis wird in matchhistory.yml gespeichert
|
||||||
Alle zurück zur Lobby (nach 5 Sek.)
|
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 hinter dem vorletzten Verteidiger steht
|
||||||
- Er weiter in Richtung gegnerisches Tor steht als der Ball beim Schuss
|
- 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
|
### Fouls & Karten
|
||||||
Trifft ein Spieler den Gegner (Angriff oder Projektil), wird dies als Foul gewertet:
|
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 |
|
| Grobes Foulspiel (hoher Schaden ≥ 8♥) | Sofortige Rote Karte + Disqualifikation |
|
||||||
| Foul im Strafraum | Elfmeter für das gefoulte Team |
|
| 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
|
### Drop Ball (Schiedsrichterball)
|
||||||
Spieler die das Spielfeld verlassen (über die in `fieldmin/fieldmax` definierte Grenze + Toleranz) erhalten einen Countdown-Alarm. Bei Ablauf des Countdowns werden sie disqualifiziert.
|
Ein Admin kann mit `/fb dropball <arena>` 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
|
||||||
|
|
||||||
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 |
|
| Ereignis | Sekunden |
|
||||||
|---|---|
|
|---|---|
|
||||||
| Tor | +30s (konfigurierbar) |
|
| Tor | +30s (konfigurierbar) |
|
||||||
| Gelb-Rote / Rote Karte | +15s |
|
| Gelb-Rote / Rote Karte | +15s |
|
||||||
| Foul | +5s |
|
| Foul / Handball | +5s |
|
||||||
| Ball im Aus | +3s |
|
| 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`)
|
- **`!Nachricht`** → Global-Broadcast an alle Spieler im Spiel (nur Admins, benötigt `fussball.admin`)
|
||||||
- Zuschauer sehen alle Team-Chats mit `[Zuschauer]`-Label
|
- 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
|
- Kompatibel mit Chat-Formatter-Plugins (EssentialsChat, CMI etc.) – keine Doppelnachrichten
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🚪 Join-Schilder erstellen
|
## 🚪 Join-Schilder erstellen
|
||||||
|
|
||||||
|
**Join-Schild:**
|
||||||
1. Schild platzieren
|
1. Schild platzieren
|
||||||
2. In die erste Zeile **`[Fussball]`** schreiben (benötigt `fussball.admin`)
|
2. Zeile 1: `[Fussball]` (benötigt `fussball.admin`)
|
||||||
3. In die zweite Zeile den Arena-Namen schreiben
|
3. Zeile 2: Arena-Name
|
||||||
4. Rechtsklick auf das fertige Schild → Spiel beitreten
|
4. Rechtsklick → Spiel beitreten
|
||||||
|
|
||||||
Das Schild wird automatisch formatiert und aktualisiert:
|
**Zuschauer-Schild:**
|
||||||
```
|
1. Schild platzieren
|
||||||
[⚽]
|
2. Zeile 1: `[FussballSpec]` (benötigt `fussball.admin`)
|
||||||
StadionXL
|
3. Zeile 2: Arena-Name
|
||||||
§c● 4/10
|
4. Rechtsklick → als Zuschauer beitreten
|
||||||
Klick zum Joinen
|
|
||||||
```
|
|
||||||
|
|
||||||
**Status-Farben:**
|
Das Schild wird automatisch formatiert und mit Live-Status aktualisiert:
|
||||||
|
|
||||||
| Symbol | Bedeutung |
|
| Symbol | Bedeutung |
|
||||||
|---|---|
|
|---|---|
|
||||||
@@ -335,8 +385,6 @@ Klick zum Joinen
|
|||||||
| `§6●` orange | Halbzeit / Verlängerung / Elfmeter |
|
| `§6●` orange | Halbzeit / Verlängerung / Elfmeter |
|
||||||
| `§7●` grau | Spiel wird beendet |
|
| `§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
|
## 📈 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 goals → Top 10 Torschützen
|
||||||
/fb top wins → Top 10 nach Siegen (inkl. Siegquote)
|
/fb top wins → Top 10 nach Siegen (inkl. Siegquote)
|
||||||
/fb top kicks → Top 10 nach Anzahl Schüssen
|
/fb top kicks → Top 10 nach Anzahl Schüssen
|
||||||
|
/fb history [n] → Letzte n Spiele
|
||||||
```
|
```
|
||||||
|
|
||||||
**Gespeicherte Werte pro Spieler:**
|
**Gespeicherte Werte pro Spieler:**
|
||||||
@@ -363,7 +412,7 @@ Schilder überleben Server-Neustarts (gespeichert in `signs.yml`). Beim Abbauen
|
|||||||
| 📊 Gespielte Spiele | Gesamtanzahl Spiele |
|
| 📊 Gespielte Spiele | Gesamtanzahl Spiele |
|
||||||
| 📈 Siegquote | Siege / Spiele × 100 % |
|
| 📈 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 |
|
| Platzhalter | Wert |
|
||||||
|---|---|
|
|---|---|
|
||||||
| `%fussball_goals%` | Tore gesamt |
|
| `%fussball_goals%` | Tore gesamt |
|
||||||
|
| `%fussball_owngoals%` | Eigentore gesamt |
|
||||||
|
| `%fussball_assists%` | Assists gesamt |
|
||||||
| `%fussball_kicks%` | Schüsse gesamt |
|
| `%fussball_kicks%` | Schüsse gesamt |
|
||||||
| `%fussball_wins%` | Siege gesamt |
|
| `%fussball_wins%` | Siege gesamt |
|
||||||
| `%fussball_losses%` | Niederlagen gesamt |
|
| `%fussball_losses%` | Niederlagen gesamt |
|
||||||
@@ -383,6 +434,8 @@ Wenn PlaceholderAPI installiert ist, sind folgende Platzhalter verfügbar:
|
|||||||
| `%fussball_ingame%` | `true` / `false` |
|
| `%fussball_ingame%` | `true` / `false` |
|
||||||
| `%fussball_arena%` | Name der aktuellen Arena oder `–` |
|
| `%fussball_arena%` | Name der aktuellen Arena oder `–` |
|
||||||
| `%fussball_score%` | Aktueller Spielstand z.B. `2 : 1` 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 |
|
| 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 |
|
| `fussball.play` | Spielen, Zuschauen, Stats anzeigen | Alle |
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -404,42 +457,46 @@ defaults:
|
|||||||
game-duration: 300 # Gesamtspielzeit in Sekunden (beide Halbzeiten zusammen)
|
game-duration: 300 # Gesamtspielzeit in Sekunden (beide Halbzeiten zusammen)
|
||||||
|
|
||||||
ball:
|
ball:
|
||||||
kick-power: 1.1 # Kraft eines normalen Schusses
|
kick-power: 1.1
|
||||||
sprint-kick-power: 1.8 # Kraft beim Sprint-Schuss
|
sprint-kick-power: 1.8
|
||||||
kick-vertical: 0.3 # Vertikale Komponente (Loft) beim Schuss
|
kick-vertical: 0.3
|
||||||
charged-min-power: 1.3 # Minimale Kraft beim aufgeladenen Schuss
|
charged-min-power: 1.3
|
||||||
charged-max-power: 3.8 # Maximale Kraft beim voll aufgeladenen Schuss
|
charged-max-power: 3.8
|
||||||
|
|
||||||
gameplay:
|
gameplay:
|
||||||
offside-enabled: true # Abseits an/aus
|
offside-enabled: true
|
||||||
foul-detection-enabled: true # Foul-Erkennung an/aus
|
foul-detection-enabled: true
|
||||||
freekick-distance: 5.0 # Mindestabstand Gegner beim Freistoß (Blöcke)
|
handball-enabled: true # Handspiel-Erkennung (Shift + Ball auf Armhöhe)
|
||||||
freekick-duration: 600 # Ticks bis Freistoß automatisch freigegeben wird
|
freekick-distance: 5.0
|
||||||
goalkeeper-hold-range: 2.5 # Wie nah der TW am Ball sein muss um ihn zu halten
|
freekick-duration: 600
|
||||||
goalkeeper-throw-power: 1.8 # Wurfstärke des TW
|
goalkeeper-hold-range: 2.5
|
||||||
out-of-bounds-tolerance: 2.0 # Toleranz außerhalb Spielfeld (Blöcke) bevor Warnung
|
goalkeeper-throw-power: 1.8
|
||||||
out-of-bounds-countdown: 5 # Sekunden bis Disqualifikation bei Feldverlassen
|
out-of-bounds-tolerance: 2.0
|
||||||
|
out-of-bounds-countdown: 5
|
||||||
# Strafraum (wenn keine manuellen Punkte gesetzt)
|
kickoff-circle-radius: 9.15 # Anstoß-Kreis Radius (FIFA: 9,15m)
|
||||||
penalty-area-depth: 16 # Tiefe des Strafraums in Richtung Spielfeldmitte
|
long-pass-distance: 20.0 # Ab wann ein Pass als „Langpass" gilt (Blöcke)
|
||||||
penalty-area-margin: 6 # Seitliche Ausdehnung über die Torpfosten hinaus
|
penalty-area-depth: 16
|
||||||
|
penalty-area-margin: 6
|
||||||
# Kopfball
|
header-range: 1.8
|
||||||
header-range: 1.8 # Max. Abstand Spieler→Ball für Kopfball
|
header-min-height: 0.8
|
||||||
header-min-height: 0.8 # Min. Ballhöhe über Spielerfüßen
|
header-max-height: 2.3
|
||||||
header-max-height: 2.3 # Max. Ballhöhe über Spielerfüßen
|
header-power: 1.3
|
||||||
header-power: 1.3 # Kopfball-Stärke
|
header-cooldown: 10
|
||||||
header-cooldown: 10 # Ticks Abklingzeit zwischen zwei Kopfbällen
|
afk-warn-seconds: 20
|
||||||
|
afk-kick-seconds: 40
|
||||||
# Nachspielzeit
|
afk-move-threshold: 0.5
|
||||||
injury-time-enabled: true
|
injury-time-enabled: true
|
||||||
injury-time-per-goal: 30 # Sekunden Nachspielzeit pro Tor
|
injury-time-per-goal: 30
|
||||||
injury-time-per-card: 15 # Sekunden pro Karte
|
injury-time-per-card: 15
|
||||||
injury-time-per-foul: 5 # Sekunden pro Foul
|
injury-time-per-foul: 5
|
||||||
injury-time-per-out: 3 # Sekunden pro Aus-Situation
|
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}`.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -449,8 +506,10 @@ Alle `messages`-Einträge in der `config.yml` sind ebenfalls vollständig anpass
|
|||||||
plugins/Fussball/
|
plugins/Fussball/
|
||||||
├── config.yml → Plugin-Einstellungen, Ball-Power, Nachrichten
|
├── config.yml → Plugin-Einstellungen, Ball-Power, Nachrichten
|
||||||
├── arenas.yml → Gespeicherte Arenen (auto-generiert)
|
├── arenas.yml → Gespeicherte Arenen (auto-generiert)
|
||||||
├── signs.yml → Gespeicherte Join-Schilder (auto-generiert)
|
├── signs.yml → Gespeicherte Join-/Zuschauer-Schilder (auto-generiert)
|
||||||
└── stats.yml → Spieler-Statistiken (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
|
## 🏟 Tipps für ein gutes Spielfeld
|
||||||
|
|
||||||
- **Feldgröße:** Mindestens **30×20 Blöcke** empfohlen (größer = mehr Spaß)
|
- **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
|
- **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 `redgoalmin`/`redgoalmax` ein echtes Volumen ergeben und Tor-Erkennung sauber funktioniert
|
- **Tortiefe:** Mindestens **2 Blöcke tief** damit 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
|
- **`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
|
- **`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
|
- **`redpenaltyspot` / `bluepenaltyspot` setzen** für realistische Elfmeter-Positionen ca. 11 Meter vor dem jeweiligen Tor
|
||||||
|
|
||||||
@@ -471,34 +528,24 @@ plugins/Fussball/
|
|||||||
|
|
||||||
## 📣 Matchbericht
|
## 📣 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)
|
- **Tore** (mit Torschütze, ggf. Vorlage und Eigentor-Markierung)
|
||||||
- **Karten** (Gelb, Gelb-Rot, Rot mit Grund)
|
- **Karten** (Gelb, Gelb-Rot, Rot mit Grund)
|
||||||
- **Fouls** (Fouler → Geopferter)
|
- **Fouls** (Fouler → Opfer)
|
||||||
- **Abseits-Situationen**
|
- **Abseits-Situationen**
|
||||||
- **MVP** (Spieler mit den meisten Toren)
|
- **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
|
## 🐛 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.
|
- 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.
|
||||||
- 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.
|
|
||||||
- Die Halbzeit teilt die `duration`-Einstellung in zwei gleiche Hälften. `duration: 300` = 2× 2:30 Minuten.
|
- 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.
|
- **Abseits** erfordert `fieldmin`/`fieldmax` **nicht**, aber die Feld-Achse wird aus den Tor-Koordinaten berechnet.
|
||||||
- **Strafraum-Elfmeter:** Ohne gesetzte `redpenaltyspot`/`bluepenaltyspot` wird der Elfmeter vom `ballspawn`-Punkt (Feldmitte) ausgeführt. Für realistische Elfmeterpositionen diese Punkte im Setup setzen.
|
- **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.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user