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;
Veraltet
Review

Fehlender License-Header

Fehlender License-Header
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;
Veraltet
Review

Warum hier ein TNT Spawnen und nicht einfach die Explosionsstärke des Fireballs hochdrehen?

Warum hier ein TNT Spawnen und nicht einfach die Explosionsstärke des Fireballs hochdrehen?
Veraltet
Review

Damit Wasser mit weggeht? Das geht nur bei TNT Schaden weg, und ich weiß nicht ob es so gut ist (für Feuerbälle) dies zu erweitern.

Damit Wasser mit weggeht? Das geht nur bei TNT Schaden weg, und ich weiß nicht ob es so gut ist (für Feuerbälle) dies zu erweitern.
Veraltet
Review
Das ist FUD. Der WaterRemover schert sich nicht darum, ob es Feuerball oder TNT ist: https://steamwar.de/devlabs/SteamWar/FightSystem/src/branch/master/FightSystem_Core/src/de/steamwar/fightsystem/listener/WaterRemover.java
Veraltet
Review

Aber wenn ich einfach eine Explosion mache, macht er es nicht weg, dass war es nämlich vorher. Werden nicht auch die beiden arten von Explosionen, anders berechnet intern, muss ich mir mal angucken.

Aber wenn ich einfach eine Explosion mache, macht er es nicht weg, dass war es nämlich vorher. Werden nicht auch die beiden arten von Explosionen, anders berechnet intern, muss ich mir mal angucken.
Veraltet
Review

Es macht einen Unterschied, ob du einen Fireball oder einen Large_Fireball (o.ä.) spawnst. Der eine ist ein Dispenser-Fireball, der andere ein Ghast-/MissileWars-Fireball!

Es macht einen Unterschied, ob du einen Fireball oder einen Large_Fireball (o.ä.) spawnst. Der eine ist ein Dispenser-Fireball, der andere ein Ghast-/MissileWars-Fireball!
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
}