12
1

Meteor #324

Zusammengeführt
Lixfel hat 24 Commits von Meteor nach master 2022-02-11 22:48:17 +01:00 zusammengeführt
5 geänderte Dateien mit 298 neuen und 133 gelöschten Zeilen
Nur Änderungen aus Commit 02ac3cd665 werden angezeigt - Alle Commits anzeigen

Datei anzeigen

@ -108,6 +108,7 @@ WinConditions: # defaults to none if missing
# - PUMPKIN_TECH_KO # - PUMPKIN_TECH_KO
# - HELLS_BELLS # - HELLS_BELLS
# - METEOR
WinConditionParams: WinConditionParams:
# The time of any of the timeout win conditions in seconds # The time of any of the timeout win conditions in seconds

Datei anzeigen

@ -22,6 +22,7 @@ package de.steamwar.fightsystem;
import de.steamwar.fightsystem.commands.*; import de.steamwar.fightsystem.commands.*;
import de.steamwar.fightsystem.countdown.*; import de.steamwar.fightsystem.countdown.*;
import de.steamwar.fightsystem.event.HellsBells; import de.steamwar.fightsystem.event.HellsBells;
import de.steamwar.fightsystem.event.Meteor;
import de.steamwar.fightsystem.fight.Fight; import de.steamwar.fightsystem.fight.Fight;
import de.steamwar.fightsystem.fight.FightTeam; import de.steamwar.fightsystem.fight.FightTeam;
import de.steamwar.fightsystem.fight.FightWorld; import de.steamwar.fightsystem.fight.FightWorld;
@ -109,6 +110,7 @@ public class FightSystem extends JavaPlugin {
new WinconditionPercentTimeout(); new WinconditionPercentTimeout();
new HellsBells(); new HellsBells();
new Meteor();
new NoPlayersOnlineCountdown(); new NoPlayersOnlineCountdown();
new PreSchemCountdown(); new PreSchemCountdown();

Datei anzeigen

@ -17,204 +17,205 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>. # along with this program. If not, see <https://www.gnu.org/licenses/>.
# #
PREFIX=§eArena§8» PREFIX=<EFBFBD>eArena<EFBFBD>8<EFBFBD>
# Commands # Commands
NO_TEAM=§cDu bist in keinem Team NO_TEAM=<EFBFBD>cDu bist in keinem Team
FIGHT_ALREADY_STARTED=§cDer Kampf hat bereits begonnen FIGHT_ALREADY_STARTED=<EFBFBD>cDer Kampf hat bereits begonnen
NOT_LEADER=§cDu bist kein Leader NOT_LEADER=<EFBFBD>cDu bist kein Leader
PLAYER_UNAVAILABLE=§cDer Spieler ist nicht in der Arena PLAYER_UNAVAILABLE=<EFBFBD>cDer Spieler ist nicht in der Arena
NO_INVITATION=§cDu wurdest von keinem Team eingeladen NO_INVITATION=<EFBFBD>cDu wurdest von keinem Team eingeladen
INVITATION_DECLINED=§cEinladung abgelehnt INVITATION_DECLINED=<EFBFBD>cEinladung abgelehnt
INVITATION_DECLINED_TEAM=§e{0} §chat die Einladung abgelehnt INVITATION_DECLINED_TEAM=<EFBFBD>e{0} <20>chat die Einladung abgelehnt
PLAYER_IN_TEAM=§e{0} §cist bereits in einem Team PLAYER_IN_TEAM=<EFBFBD>e{0} <20>cist bereits in einem Team
ALREADY_INVITED=§e{0} §cwurde bereits eingeladen ALREADY_INVITED=<EFBFBD>e{0} <20>cwurde bereits eingeladen
INVITATION_SENT=§e{0} §7eingeladen INVITATION_SENT=<EFBFBD>e{0} <20>7eingeladen
NOT_IN_TEAM=§e{0} §cist nicht in deinem Team NOT_IN_TEAM=<EFBFBD>e{0} <20>cist nicht in deinem Team
KIT_UNAVAILABLE=§cDieses Kit gibt es nicht KIT_UNAVAILABLE=<EFBFBD>cDieses Kit gibt es nicht
KIT_CHOSEN=§7Kit §e{0} §7gewählt KIT_CHOSEN=<EFBFBD>7Kit <20>e{0} <20>7gew<65>hlt
GAMEMODE_NOT_ALLOWED=§cSpielmodusänderung verboten GAMEMODE_NOT_ALLOWED=<EFBFBD>cSpielmodus<EFBFBD>nderung verboten
GAMEMODE_UNKNOWN=§cUnbekannter Spielmodus {0} GAMEMODE_UNKNOWN=<EFBFBD>cUnbekannter Spielmodus {0}
GAMEMODE_HELP=§8/§7gm §8[§eSpielmodus§8] GAMEMODE_HELP=<EFBFBD>8/<2F>7gm <20>8[<5B>eSpielmodus<75>8]
INVITE_HELP=§8/§einvite §8[§eSpieler§8] INVITE_HELP=<EFBFBD>8/<2F>einvite <20>8[<5B>eSpieler<65>8]
LEADER_FULL=§cAlle Teams haben bereits einen Leader LEADER_FULL=<EFBFBD>cAlle Teams haben bereits einen Leader
ALREADY_IN_TEAM=§cDu bist bereits in einem Team ALREADY_IN_TEAM=<EFBFBD>cDu bist bereits in einem Team
LOCKSCHEM_HELP=§8/§7lockschem §8[§eTeam§8] LOCKSCHEM_HELP=<EFBFBD>8/<2F>7lockschem <20>8[<5B>eTeam<61>8]
UNKNOWN_TEAM=§cDieses Team existiert nicht UNKNOWN_TEAM=<EFBFBD>cDieses Team existiert nicht
LOCKSCHEM_LOCKED=§7Schematic gesperrt LOCKSCHEM_LOCKED=<EFBFBD>7Schematic gesperrt
LOCKSCHEM_LOCKED_BY=§cDie Schematic wurde von §e{0} §cgesperrt LOCKSCHEM_LOCKED_BY=<EFBFBD>cDie Schematic wurde von <20>e{0} <20>cgesperrt
REMOVE_HELP=§8/§eremove §8[§eSpieler§8] REMOVE_HELP=<EFBFBD>8/<2F>eremove <20>8[<5B>eSpieler<65>8]
REPLAY_LOCKED=§7Replaywiedergabe für 1 Monat gesperrt REPLAY_LOCKED=<EFBFBD>7Replaywiedergabe f<>r 1 Monat gesperrt
NOT_FIGHTLEADER=§cDu bist nicht Kampfleiter NOT_FIGHTLEADER=<EFBFBD>cDu bist nicht Kampfleiter
WIN_HELP=§8/§7win §8[§eTeam §8or §etie§8] WIN_HELP=<EFBFBD>8/<2F>7win <20>8[<5B>eTeam <20>8or <20>etie<69>8]
# GUI # GUI
INVITATION_TITLE=Einladung von {0} INVITATION_TITLE=Einladung von {0}
INVITATION_ACCEPT=§aAnnehmen INVITATION_ACCEPT=<EFBFBD>aAnnehmen
INVITATION_DECLINE=§cAblehnen INVITATION_DECLINE=<EFBFBD>cAblehnen
INVITATION_CHAT_ACCEPT=§8/§aaccept§8, §7um die Einladung §aanzunehmen INVITATION_CHAT_ACCEPT=<EFBFBD>8/<2F>aaccept<70>8, <20>7um die Einladung <20>aanzunehmen
INVITATION_CHAT_DECLINE=§8/§cdecline§8, §7um die Einladung §cabzulehnen INVITATION_CHAT_DECLINE=<EFBFBD>8/<2F>cdecline<6E>8, <20>7um die Einladung <20>cabzulehnen
STATE_TITLE=Kampfstatus STATE_TITLE=Kampfstatus
STATE_PRE_LEADER_SETUP=§7Teamleaderwartephase STATE_PRE_LEADER_SETUP=<EFBFBD>7Teamleaderwartephase
STATE_PRE_SCHEM_SETUP=§7Schemauswahlphase STATE_PRE_SCHEM_SETUP=<EFBFBD>7Schemauswahlphase
STATE_POST_SCHEM_SETUP=§7Vorbereitungsphase STATE_POST_SCHEM_SETUP=<EFBFBD>7Vorbereitungsphase
STATE_PRE_RUNNING=§eKitausgabe STATE_PRE_RUNNING=<EFBFBD>eKitausgabe
STATE_RUNNING=§eKampfphase STATE_RUNNING=<EFBFBD>eKampfphase
STATE_SPECTATE_WIN=§7Sieg {0} STATE_SPECTATE_WIN=<EFBFBD>7Sieg {0}
STATE_SPECTATE_TIE=§7Unentschieden STATE_SPECTATE_TIE=<EFBFBD>7Unentschieden
INVITE_TITLE=Spieler einladen INVITE_TITLE=Spieler einladen
REMOVE_TITLE=Spieler rauswerfen REMOVE_TITLE=Spieler rauswerfen
KIT_SELECTION_TITLE=Kitauswahl KIT_SELECTION_TITLE=Kitauswahl
KIT_NO_KITS=§cKeine Kits gefunden KIT_NO_KITS=<EFBFBD>cKeine Kits gefunden
KIT_CREATE=§eNeues Kit KIT_CREATE=<EFBFBD>eNeues Kit
KITNAME_TITLE=Kitname eingeben KITNAME_TITLE=Kitname eingeben
KITNAME_IN_USE=§cDieser Kitname wird bereits genutzt KITNAME_IN_USE=<EFBFBD>cDieser Kitname wird bereits genutzt
KIT_SEARCH=§eSuchen KIT_SEARCH=<EFBFBD>eSuchen
KITSEARCH_TITLE=Nach Kit suchen KITSEARCH_TITLE=Nach Kit suchen
SCHEM_NO_ENEMY=§cKeine Schematicwahl ohne Gegner SCHEM_NO_ENEMY=<EFBFBD>cKeine Schematicwahl ohne Gegner
SCHEM_TITLE={0}-Auswahl SCHEM_TITLE={0}-Auswahl
SCHEM_PUBLIC=§eÖffentliches {0} SCHEM_PUBLIC=<EFBFBD>e<EFBFBD>ffentliches {0}
SCHEM_PRIVATE=§ePrivates {0} SCHEM_PRIVATE=<EFBFBD>ePrivates {0}
SCHEM_NO_PRIVATE=§7Kein privates {0} vorhanden SCHEM_NO_PRIVATE=<EFBFBD>7Kein privates {0} vorhanden
SCHEM_PRIVATE_FORBIDDEN=§7Kein privates {0} erlaubt SCHEM_PRIVATE_FORBIDDEN=<EFBFBD>7Kein privates {0} erlaubt
# Countdowns # Countdowns
COUNTDOWN_MINUTES=§e{0} §7Minuten {1} COUNTDOWN_MINUTES=<EFBFBD>e{0} <20>7Minuten {1}
COUNTDOWN_SECONDS=§e{0} §7Sekunden {1} COUNTDOWN_SECONDS=<EFBFBD>e{0} <20>7Sekunden {1}
COUNTDOWN_SECOND=§eEine §7Sekunde {1} COUNTDOWN_SECOND=<EFBFBD>eEine <20>7Sekunde {1}
ENTERN_COUNTDOWN=bis Entern erlaubt ist ENTERN_COUNTDOWN=bis Entern erlaubt ist
ENTERN_ALLOWED=§eEntern §7ist nun erlaubt ENTERN_ALLOWED=<EFBFBD>eEntern <20>7ist nun erlaubt
SHUTDOWN_COUNTDOWN=bis der Server gestoppt wird SHUTDOWN_COUNTDOWN=bis der Server gestoppt wird
PRE_SCHEM_COUNTDOWN=bis eine Public-Schematic gewählt wird PRE_SCHEM_COUNTDOWN=bis eine Public-Schematic gew<EFBFBD>hlt wird
POST_SCHEM_COUNTDOWN=bis die Kits verteilt werden POST_SCHEM_COUNTDOWN=bis die Kits verteilt werden
PRE_RUNNING_COUNTDOWN=bis die Arena freigegeben ist PRE_RUNNING_COUNTDOWN=bis die Arena freigegeben ist
RUNNING_COUNTDOWN=bis der Kampf vorbei ist RUNNING_COUNTDOWN=bis der Kampf vorbei ist
SPECTATE_COUNTDOWN=bis die Arena zurückgesetzt wird SPECTATE_COUNTDOWN=bis die Arena zur<EFBFBD>ckgesetzt wird
# Fight # Fight
SCHEMATIC_UNLOADABLE=§cSchematic konnte nicht geladen werden SCHEMATIC_UNLOADABLE=<EFBFBD>cSchematic konnte nicht geladen werden
SCHEMATIC_CHOSEN=§7{0} §e{1} §7gewählt SCHEMATIC_CHOSEN=<EFBFBD>7{0} <20>e{1} <20>7gew<65>hlt
TEAM_READY=§aTeam bereit TEAM_READY=<EFBFBD>aTeam bereit
TEAM_NOT_READY=§c§mTeam bereit TEAM_NOT_READY=<EFBFBD>c<EFBFBD>mTeam bereit
SKIP_READY=§aBeschleunigung zum nächsten Event SKIP_READY=<EFBFBD>aBeschleunigung zum n<>chsten Event
SKIP_NOT_READY=§c§mBeschleunigung zum nächsten Event SKIP_NOT_READY=<EFBFBD>c<EFBFBD>mBeschleunigung zum n<>chsten Event
TEAM_CHAT={0}{1}§8» {0}{2} TEAM_CHAT={0}{1}<EFBFBD>8<EFBFBD> {0}{2}
CHOOSE_KIT=§eKit wählen CHOOSE_KIT=<EFBFBD>eKit w<>hlen
RESPAWN=§eRespawn RESPAWN=<EFBFBD>eRespawn
INVITE_PLAYERS=§eSpieler einladen INVITE_PLAYERS=<EFBFBD>eSpieler einladen
REMOVE_PLAYERS=§cSpieler rauswerfen REMOVE_PLAYERS=<EFBFBD>cSpieler rauswerfen
CHOOSE_SCHEMATIC=§e{0} wählen CHOOSE_SCHEMATIC=<EFBFBD>e{0} w<>hlen
SCHEMATIC_REQUIRED=§cZuerst muss eine Schematic gewählt sein SCHEMATIC_REQUIRED=<EFBFBD>cZuerst muss eine Schematic gew<65>hlt sein
KIT_PREVIEW_EDIT=§7Kit bearbeiten KIT_PREVIEW_EDIT=<EFBFBD>7Kit bearbeiten
KIT_PREVIEW_CHOOSE=§aKit wählen KIT_PREVIEW_CHOOSE=<EFBFBD>aKit w<>hlen
KIT_PREVIEW_BACK=§cZurück KIT_PREVIEW_BACK=<EFBFBD>cZur<EFBFBD>ck
KIT_PREVIEW_DELETE=§cKit löschen KIT_PREVIEW_DELETE=<EFBFBD>cKit l<>schen
KIT_DELETION_CONFIRMATION=Kit wirklich löschen? KIT_DELETION_CONFIRMATION=Kit wirklich l<EFBFBD>schen?
KIT_DELETION_ABORT=§cAbbrechen KIT_DELETION_ABORT=<EFBFBD>cAbbrechen
KIT_DELETION_DELETE=§aLöschen KIT_DELETION_DELETE=<EFBFBD>aL<EFBFBD>schen
# Listener # Listener
NO_ARENA_LEAVING=§cDu darfst die Arena nicht verlassen NO_ARENA_LEAVING=<EFBFBD>cDu darfst die Arena nicht verlassen
CHECK_JOIN_DENIED=§cAuf diesem Server wird momentan eine Schematic geprüft! CHECK_JOIN_DENIED=<EFBFBD>cAuf diesem Server wird momentan eine Schematic gepr<70>ft!
CHECK_COMMAND_LOCKED=§cDieser Befehl ist beim Prüfen gesperrt! Admin wird benachrichtigt. CHECK_COMMAND_LOCKED=<EFBFBD>cDieser Befehl ist beim Pr<50>fen gesperrt! Admin wird benachrichtigt.
NO_BLOCK_BREAK=§cDu darfst hier derzeit keine Blöcke abbauen NO_BLOCK_BREAK=<EFBFBD>cDu darfst hier derzeit keine Bl<42>cke abbauen
NO_BLOCK_PLACE=§cDu darfst hier derzeit keine Blöcke setzen NO_BLOCK_PLACE=<EFBFBD>cDu darfst hier derzeit keine Bl<42>cke setzen
NO_BOW_USAGE=§cDu darfst den Bogen erst nach Kampfbeginn nutzen NO_BOW_USAGE=<EFBFBD>cDu darfst den Bogen erst nach Kampfbeginn nutzen
NO_PARTICIPANT=§cDu bist kein Kampfteilnehmer NO_PARTICIPANT=<EFBFBD>cDu bist kein Kampfteilnehmer
NO_FRIENDLY_FIRE=§cDu darfst deinen Teamkollegen keinen Schaden zufügen NO_FRIENDLY_FIRE=<EFBFBD>cDu darfst deinen Teamkollegen keinen Schaden zuf<75>gen
NO_TNT_PLACE=§cDu darfst kein TNT setzen NO_TNT_PLACE=<EFBFBD>cDu darfst kein TNT setzen
NO_TELEPORT=§cDu darfst diese Teleportfunktion nicht benutzen NO_TELEPORT=<EFBFBD>cDu darfst diese Teleportfunktion nicht benutzen
OPEN_INVENTORY_TO_CUSTOMIZE=§eInventar zum Anpassen des Kits öffnen OPEN_INVENTORY_TO_CUSTOMIZE=<EFBFBD>eInventar zum Anpassen des Kits <20>ffnen
RESOURCEPACK_REQUIRED=§cAuf Eventserver kann nur mit dem SteamWar-Resourcepack beigetreten werden\n§cDa du abgelehnt hast, musst du nun in der Serverliste erst einmal wieder Ressourcenpakete von SteamWar aktivieren RESOURCEPACK_REQUIRED=<EFBFBD>cAuf Eventserver kann nur mit dem SteamWar-Resourcepack beigetreten werden\n<>cDa du abgelehnt hast, musst du nun in der Serverliste erst einmal wieder Ressourcenpakete von SteamWar aktivieren
NO_ENTERN=§cDu darfst nicht entern NO_ENTERN=<EFBFBD>cDu darfst nicht entern
NO_TEAMAREA=§cDu darfst nicht zu den Teams NO_TEAMAREA=<EFBFBD>cDu darfst nicht zu den Teams
TEST_BECOME_LEADER=§7Werde zum Teamleader mit §8/§eleader TEST_BECOME_LEADER=<EFBFBD>7Werde zum Teamleader mit <20>8/<2F>eleader
PREPARE_SCHEM_DELETED=§cAnscheinend wurde die auszufahrende Schematic gelöscht, Einsenden wird abgebrochen. PREPARE_SCHEM_DELETED=<EFBFBD>cAnscheinend wurde die auszufahrende Schematic gel<65>scht, Einsenden wird abgebrochen.
PREPARE_ACTIVE_PISTON=§cIm Teambereich wurden sich noch bewegende Pistons gefunden, Einsenden wird abgebrochen. PREPARE_ACTIVE_PISTON=<EFBFBD>cIm Teambereich wurden sich noch bewegende Pistons gefunden, Einsenden wird abgebrochen.
PREPARE_FAILED_SAVING=§cDie Schematic konnte nicht gespeichert werden, Einsenden wird abgebrochen. PREPARE_FAILED_SAVING=<EFBFBD>cDie Schematic konnte nicht gespeichert werden, Einsenden wird abgebrochen.
PREPARE_SENT_IN=§aDie Schematic wird nun zeitnah von einem Teammitglied überprüft PREPARE_SENT_IN=<EFBFBD>aDie Schematic wird nun zeitnah von einem Teammitglied <20>berpr<70>ft
PARTICIPANT_CHAT={0} {1}§8» §7{2} PARTICIPANT_CHAT={0} {1}<EFBFBD>8<EFBFBD> <20>7{2}
FIGHTLEADER_CHAT=§e{0}§8» §e{1} FIGHTLEADER_CHAT=<EFBFBD>e{0}<7D>8<EFBFBD> <20>e{1}
SPECTATOR_CHAT=§7{0}§8» §7{1} SPECTATOR_CHAT=<EFBFBD>7{0}<7D>8<EFBFBD> <20>7{1}
# Replay # Replay
REPLAY_ENDS=§cReplay beendet REPLAY_ENDS=<EFBFBD>cReplay beendet
OLD_STRING={0} OLD_STRING={0}
# States # States
COMMAND_CURRENTLY_UNAVAILABLE=§cDieser Befehl ist zu diesem Kampfzeitpunkt nicht verfügbar COMMAND_CURRENTLY_UNAVAILABLE=<EFBFBD>cDieser Befehl ist zu diesem Kampfzeitpunkt nicht verf<72>gbar
# Utils # Utils
TPS_WARNING=§c{0} §7TPS TPS_WARNING=<EFBFBD>c{0} <20>7TPS
UI_PRE_RUNNING=§7Kits verteilt UI_PRE_RUNNING=<EFBFBD>7Kits verteilt
UI_RUNNING=§aArena freigegeben UI_RUNNING=<EFBFBD>aArena freigegeben
UI_SKIP=§7Sprung zum nächsten Ereignis UI_SKIP=<EFBFBD>7Sprung zum n<>chsten Ereignis
UI_PLAYER_JOINS=§a§l» {0}{1} UI_PLAYER_JOINS=<EFBFBD>a<EFBFBD>l<EFBFBD> {0}{1}
UI_PLAYER_LEAVES=§c§l« {0}{1} UI_PLAYER_LEAVES=<EFBFBD>c<EFBFBD>l<EFBFBD> {0}{1}
UI_LEADER_JOINS=§a§l» {0}Leader {1} UI_LEADER_JOINS=<EFBFBD>a<EFBFBD>l<EFBFBD> {0}Leader {1}
UI_PLAYER_DEATH={0}{1} §7ist gestorben UI_PLAYER_DEATH={0}{1} <EFBFBD>7ist gestorben
UI_PLAYER_LEAVE={0}{1} §7hat den Kampf verlassen UI_PLAYER_LEAVE={0}{1} <EFBFBD>7hat den Kampf verlassen
UI_ELO=§7ELO von {0}{1}§8: §7{2}§8»§e{3} UI_ELO=<EFBFBD>7ELO von {0}{1}<7D>8: <20>7{2}<7D>8<EFBFBD><38>e{3}
UI_WIN={0}Sieg {1} UI_WIN={0}Sieg {1}
UI_DRAW=§7Unentschieden UI_DRAW=<EFBFBD>7Unentschieden
BAR_PRE_LEADER=§7Warten auf Teamleader BAR_PRE_LEADER=<EFBFBD>7Warten auf Teamleader
BAR_PRE_SCHEM={1} §7Schemauswahl {0} {2} BAR_PRE_SCHEM={1} <EFBFBD>7Schemauswahl {0} {2}
BAR_PREPARE={1} {3} §7Vorbereitung {0} {4} {2} BAR_PREPARE={1} {3} <EFBFBD>7Vorbereitung {0} {4} {2}
BAR_PRE_RUNNING={1} {3} §7Kampfbeginn in {0} {4} {2} BAR_PRE_RUNNING={1} {3} <EFBFBD>7Kampfbeginn in {0} {4} {2}
BAR_RUNNING0={1} {3} {0} {4} {2} BAR_RUNNING0={1} {3} {0} {4} {2}
BAR_RUNNING1={1} {3} {5} {0} {6} {4} {2} BAR_RUNNING1={1} {3} {5} {0} {6} {4} {2}
BAR_RUNNING2={1} {3} {5} {7} {0} {6} {8} {4} {2} BAR_RUNNING2={1} {3} {5} {7} {0} {6} {8} {4} {2}
BAR_RUNNING3={1} {3} {5} {7} {9} {0} {6} {8} {10} {4} {2} BAR_RUNNING3={1} {3} {5} {7} {9} {0} {6} {8} {10} {4} {2}
BAR_SPECTATE={1} §7Kampf vorbei {0} {2} BAR_SPECTATE={1} <EFBFBD>7Kampf vorbei {0} {2}
BAR_TIE={1} §7Unentschieden {0} {2} BAR_TIE={1} <EFBFBD>7Unentschieden {0} {2}
BAR_WIN={1} §7Sieg {3} {0} {2} BAR_WIN={1} <EFBFBD>7Sieg {3} {0} {2}
BAR_POINTS={0} §8Punkte BAR_POINTS={0} <EFBFBD>8Punkte
BAR_PERCENT={0}§8% BAR_PERCENT={0}<EFBFBD>8%
BAR_CANNONS={0} §8Kanonen BAR_CANNONS={0} <EFBFBD>8Kanonen
BAR_WATER={0} §8Wasser BAR_WATER={0} <EFBFBD>8Wasser
# Winconditions # Winconditions
HELLS_BELLS_COUNTDOWN=bis die Bomben fallen HELLS_BELLS_COUNTDOWN=bis die Bomben fallen
TECHKO_COUNTDOWN=bis {0} §7einen Schuss abgegeben haben muss METEOR_COUNTDOWN=bis es Meteore regnet
TECHKO_COUNTDOWN=bis {0} <20>7einen Schuss abgegeben haben muss
WIN_FIGHTLEADER=§7Kampfleiterentscheidung WIN_FIGHTLEADER=<EFBFBD>7Kampfleiterentscheidung
WIN_PERCENT={0} §7zu beschädigt WIN_PERCENT={0} <EFBFBD>7zu besch<63>digt
WIN_OFFLINE_BOTH=§7Beide Teams offline WIN_OFFLINE_BOTH=<EFBFBD>7Beide Teams offline
WIN_OFFLINE={0} §7offline WIN_OFFLINE={0} <EFBFBD>7offline
WIN_RANKED_LEFT={0} §7hat den Kampf verlassen WIN_RANKED_LEFT={0} <EFBFBD>7hat den Kampf verlassen
WIN_ALL_DEAD={0}Alle Spieler kampfunfähig WIN_ALL_DEAD={0}Alle Spieler kampfunf<EFBFBD>hig
WIN_LEADER_DEAD={0} kampfunfähig WIN_LEADER_DEAD={0} kampfunf<EFBFBD>hig
WIN_TIME_OVER=§7Zeit abgelaufen WIN_TIME_OVER=<EFBFBD>7Zeit abgelaufen
WIN_MORE_HEALTH={0}Mehr verbleibende Leben WIN_MORE_HEALTH={0}Mehr verbleibende Leben
WIN_LESS_DAMAGE={0} §7weniger beschädigt WIN_LESS_DAMAGE={0} <EFBFBD>7weniger besch<63>digt
WIN_POINTS={0} hat mehr Punkte WIN_POINTS={0} hat mehr Punkte
WIN_POINTS_EQUAL=§7Gleicher Punktestand WIN_POINTS_EQUAL=<EFBFBD>7Gleicher Punktestand
WIN_TECHKO={0} §7ist Tech K.O. WIN_TECHKO={0} <EFBFBD>7ist Tech K.O.

Datei anzeigen

@ -0,0 +1,160 @@
package de.steamwar.fightsystem.event;
import de.steamwar.fightsystem.Config;
import de.steamwar.fightsystem.countdown.Countdown;
import de.steamwar.fightsystem.states.FightState;
import de.steamwar.fightsystem.states.StateDependent;
import de.steamwar.fightsystem.utils.Message;
import de.steamwar.fightsystem.utils.SWSound;
import de.steamwar.fightsystem.winconditions.Winconditions;
import java.util.Random;
import java.util.logging.Level;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Fireball;
import org.bukkit.util.Vector;
public class Meteor {
public static final Random random = new Random();
private final World world = Bukkit.getWorlds().get(0);
private final int xLength = Config.RedExtendRegion.getMaxX() - Config.RedExtendRegion.getMinX();
private final int zLength = Config.RedExtendRegion.getMaxZ() - Config.RedExtendRegion.getMinZ();
private Meteor.State current = Meteor.State.PRE;
private int currentDrops = 0;
private Meteor.MeteorCountdown currentCountdown;
public void startCountdown() {
if (current == Meteor.State.PRE) {
current = current.getNext();
} else if (current != Meteor.State.LAST && currentDrops >= current.SWITCH_AFTER) {
currentDrops = 0;
}
currentDrops++;
currentCountdown = new Meteor.MeteorCountdown(current.MIN_TIME + random.nextInt(current.MAX_TIME - current.MIN_TIME));
currentCountdown.enable();
}
public void drop() {
int xOffset = getStart(xLength);
int zOffset = getStart(zLength);
int yOffset = getHeightStart();
Meteor.Point redStart = new Meteor.Point(Config.RedExtendRegion.getMinX() + xOffset, Config.RedExtendRegion.getMaxY() + yOffset, Config.RedExtendRegion.getMaxZ() - zOffset);
Meteor.Point blueStart = new Meteor.Point(Config.BlueExtendRegion.getMinX() + xOffset, Config.BlueExtendRegion.getMaxY() + yOffset, Config.BlueExtendRegion.getMinZ() + zOffset);
Fireball fireballRed = world.spawn(redStart.toLocation(world), Fireball.class);
fireballRed.setDirection(new Vector(0, -1, 0));
fireballRed.setBounce(false);
fireballRed.setIsIncendiary(false);
fireballRed.setYield(current.minExplosion + random.nextInt(current.maxExplosion - current.minExplosion));
Fireball fireballBlue = world.spawn(blueStart.toLocation(world), Fireball.class);
fireballBlue.setDirection(new Vector(0, -1, 0));
fireballBlue.setBounce(false);
fireballBlue.setIsIncendiary(false);
fireballBlue.setYield(current.minExplosion + random.nextInt(current.maxExplosion - current.minExplosion));
}
private int getStart(int regionSize) {
double randomNumber = (random.nextDouble() - random.nextDouble()) / 2 + 0.5;
Bukkit.getLogger().log(Level.INFO, "Calculated Start: " + (int) (randomNumber * (regionSize - 1)));
return Math.max(Math.min((int) (randomNumber * (regionSize - 1)), regionSize - 1), 0);
}
private int getHeightStart() {
return 5 + random.nextInt(15);
}
public Meteor() {
new StateDependent(Winconditions.METEOR, FightState.Running) {
@Override
public void enable() {
startCountdown();
}
@Override
public void disable() {
currentCountdown.disable();
}
}.register();
}
private class MeteorCountdown extends Countdown {
public MeteorCountdown(int time) {
super(time, new Message("METEOR_COUNTDOWN"), SWSound.BLOCK_NOTE_BASS, true);
}
@Override
public void countdownFinished() {
drop();
startCountdown();
}
}
private static class Point {
private final int x;
private final int y;
private final int z;
public Point(int x, int y, int z) {
this.x = x;
this.y = y;
this.z = z;
}
public Location toLocation(World world) {
return new Location(world, this.x, this.y, this.z); //NOSONAR
}
}
private enum State {
PRE(60, 80, 1, 0, 0),
FIRST(40, 60, 3, 1, 3),
SECOND(30, 40, 4, 2, 4),
THIRD(20, 30, 4, 3, 6),
FOURTH(10, 20, 5, 4, 7),
LAST(5, 10, 0, 5, 10);
State(int minTime, int maxTime, int switchAfter, int minExplosion, int maxExplosion) {
this.MIN_TIME = minTime;
this.MAX_TIME = maxTime;
this.SWITCH_AFTER = switchAfter;
this.minExplosion = minExplosion;
this.maxExplosion = maxExplosion;
}
private final int MIN_TIME; //NOSONAR
private final int MAX_TIME; //NOSONAR
Lixfel markierte diese Unterhaltung als gelöst
Review

Du instanzierst den Countdown nur an einer Stelle und brauchst sonst nie Spezialfunktionalität - kannst du eigentlich zu einer Lambda-Klasse verkürzen/einfachen.

Du instanzierst den Countdown nur an einer Stelle und brauchst sonst nie Spezialfunktionalität - kannst du eigentlich zu einer Lambda-Klasse verkürzen/einfachen.
Review

das ist einfach so aus HellsBells übernommen.

das ist einfach so aus HellsBells übernommen.
private final int SWITCH_AFTER; //NOSONAR
private final int minExplosion; //NOSONAR
private final int maxExplosion; //NOSONAR
public Meteor.State getNext() {
switch (this) {
case PRE:
return FIRST;
case FIRST:
return SECOND;
case SECOND:
return THIRD;
Lixfel markierte diese Unterhaltung als gelöst
Review

Gibts die Klasse nicht schon in HellsBells?

Gibts die Klasse nicht schon in HellsBells?
Review

Vermutlich schon.

Vermutlich schon.
case THIRD:
return FOURTH;
case FOURTH:
case LAST:
return LAST;
default:
return PRE;
}
}
}
}

Datei anzeigen

@ -36,5 +36,6 @@ public enum Winconditions {
WATER_TECH_KO, WATER_TECH_KO,
PUMPKIN_TECH_KO, PUMPKIN_TECH_KO,
HELLS_BELLS HELLS_BELLS,
METEOR
} }