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
# - HELLS_BELLS
# - METEOR
WinConditionParams:
# 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.countdown.*;
import de.steamwar.fightsystem.event.HellsBells;
import de.steamwar.fightsystem.event.Meteor;
import de.steamwar.fightsystem.fight.Fight;
import de.steamwar.fightsystem.fight.FightTeam;
import de.steamwar.fightsystem.fight.FightWorld;
@ -109,6 +110,7 @@ public class FightSystem extends JavaPlugin {
new WinconditionPercentTimeout();
new HellsBells();
new Meteor();
new NoPlayersOnlineCountdown();
new PreSchemCountdown();

Datei anzeigen

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