Complete Rework, new Features.
Dieser Commit ist enthalten in:
Ursprung
ee83bf6177
Commit
9796266c29
@ -18,9 +18,5 @@
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.code.gson:gson:2.8.0" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: org.yaml:snakeyaml:1.19" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: net.md-5:bungeecord-chat:1.12-SNAPSHOT" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: warking:SpigotCore:1.0" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: warking:WorldEdit:1.0" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: warking:FAWE:1.0" level="project" />
|
||||
<orderEntry type="library" scope="PROVIDED" name="Maven: warking:ProtocolLib:1.0" level="project" />
|
||||
</component>
|
||||
</module>
|
7
pom.xml
7
pom.xml
@ -4,7 +4,7 @@
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>me.yaruma</groupId>
|
||||
<groupId>de.steamwar</groupId>
|
||||
<artifactId>FightSystem</artifactId>
|
||||
<version>1.0</version>
|
||||
<packaging>jar</packaging>
|
||||
@ -36,10 +36,9 @@
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.6.1</version>
|
||||
<configuration>
|
||||
<source>1.8</source>
|
||||
<target>1.8</target>
|
||||
<source>8</source>
|
||||
<target>8</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
|
235
src/de/steamwar/fightsystem/FightSystem.java
Normale Datei
235
src/de/steamwar/fightsystem/FightSystem.java
Normale Datei
@ -0,0 +1,235 @@
|
||||
package de.steamwar.fightsystem;
|
||||
|
||||
import de.steamwar.fightsystem.commands.*;
|
||||
import de.steamwar.fightsystem.countdown.*;
|
||||
import de.steamwar.fightsystem.fight.Fight;
|
||||
import de.steamwar.fightsystem.fight.FightPlayer;
|
||||
import de.steamwar.fightsystem.fight.FightState;
|
||||
import de.steamwar.fightsystem.fight.FightTeam;
|
||||
import de.steamwar.fightsystem.kit.KitManager;
|
||||
import de.steamwar.fightsystem.listener.*;
|
||||
import de.steamwar.fightsystem.utils.Config;
|
||||
import de.steamwar.fightsystem.utils.FightScoreboard;
|
||||
import de.steamwar.fightsystem.utils.TechHider;
|
||||
import de.steamwar.fightsystem.utils.WaterRemover;
|
||||
import de.steamwar.fightsystem.utils.sql.EventFight;
|
||||
import de.steamwar.fightsystem.winconditions.*;
|
||||
import javafx.util.Pair;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class FightSystem extends JavaPlugin {
|
||||
|
||||
public static final String PREFIX = "§eArena§8» ";
|
||||
private static FightSystem plugin;
|
||||
|
||||
private static FightState fightState = FightState.SETUP;
|
||||
private static int fightTime = 0;
|
||||
private static boolean entern = false;
|
||||
|
||||
private static EventFight eventFight;
|
||||
private static Player eventLeiter;
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
setPlugin(this);
|
||||
Config.load();
|
||||
KitManager.loadAllKits();
|
||||
|
||||
new EntityDamageListener();
|
||||
new EntityExplodeListener();
|
||||
new FoodLevelChangeListener();
|
||||
new InventoryListener();
|
||||
new PistonListener();
|
||||
new PlayerChatListener();
|
||||
new PlayerDeathListener();
|
||||
new HotbarGUIListener();
|
||||
new PlayerMoveListener();
|
||||
new PlayerConnectionListener();
|
||||
new PlayerRespawnListener();
|
||||
new PlayerTeleportListener();
|
||||
new ProjectileLaunchListener();
|
||||
|
||||
if(!Config.test()){
|
||||
new BlockListener();
|
||||
TechHider.init();
|
||||
}
|
||||
|
||||
FightScoreboard.init();
|
||||
|
||||
getCommand("leave").setExecutor(new LeaveCommand());
|
||||
getCommand("kit").setExecutor(new KitCommand());
|
||||
getCommand("remove").setExecutor(new RemoveCommand());
|
||||
getCommand("accept").setExecutor(new AcceptCommand());
|
||||
getCommand("decline").setExecutor(new DeclineCommand());
|
||||
getCommand("invite").setExecutor(new InviteCommand());
|
||||
getCommand("ready").setExecutor(new ReadyCommand());
|
||||
getCommand("ak").setExecutor(new AkCommand());
|
||||
getCommand("leader").setExecutor(new LeaderCommand());
|
||||
|
||||
if(Config.event()) {
|
||||
new EventJoinListener();
|
||||
|
||||
getCommand("invite").setExecutor(new EventDummyCommand());
|
||||
getCommand("ready").setExecutor(new EventDummyCommand());
|
||||
getCommand("ak").setExecutor(new EventDummyCommand());
|
||||
getCommand("leader").setExecutor(new EventDummyCommand());
|
||||
|
||||
new EventStartCountdown();
|
||||
}else if(Config.test()){
|
||||
new TestListener();
|
||||
|
||||
Bukkit.getScheduler().runTaskLater(this, Fight.getBlueTeam()::pasteDummy, 0);
|
||||
Bukkit.getScheduler().runTaskLater(this, Fight.getRedTeam()::pasteDummy, 0);
|
||||
|
||||
new NoPlayersOnlineCountdown();
|
||||
}else{
|
||||
new NormalJoinListener();
|
||||
|
||||
new NoPlayersOnlineCountdown();
|
||||
}
|
||||
}
|
||||
|
||||
public static void setPreRunningState() {
|
||||
if(fightState != FightState.SETUP)
|
||||
return;
|
||||
setFightState(FightState.PRE_RUNNING);
|
||||
Countdown.cancelAllTimers();
|
||||
|
||||
loadKits(Fight.getBlueTeam());
|
||||
loadKits(Fight.getRedTeam());
|
||||
setAllPlayersGM(GameMode.SURVIVAL);
|
||||
Bukkit.broadcastMessage(PREFIX + "§aDer Kampf beginnt!");
|
||||
|
||||
new WinconditionAllDead();
|
||||
new WinconditionCaptainDead();
|
||||
new WinconditionWaterTechKO();
|
||||
new WinconditionPercentSystem();
|
||||
|
||||
if(Config.event()){
|
||||
new EventTeamOffWincondition();
|
||||
}
|
||||
|
||||
new PreRunningCountdown();
|
||||
}
|
||||
|
||||
public static void setRunningState() {
|
||||
if(fightState != FightState.PRE_RUNNING)
|
||||
return;
|
||||
setFightState(FightState.RUNNING);
|
||||
Countdown.cancelAllTimers();
|
||||
|
||||
setAllPlayersGM(GameMode.SURVIVAL);
|
||||
|
||||
new WinconditionTechKO();
|
||||
new WinconditionTimeout();
|
||||
new WinconditionEntern();
|
||||
|
||||
WaterRemover.init();
|
||||
|
||||
Bukkit.broadcastMessage(PREFIX + "§aArena freigegeben!");
|
||||
}
|
||||
|
||||
public static void setSpectateState(FightTeam winFightTeam) {
|
||||
if(fightState != FightState.RUNNING && fightState != FightState.PRE_RUNNING)
|
||||
return;
|
||||
setFightState(FightState.SPECTATE);
|
||||
Countdown.cancelAllTimers();
|
||||
|
||||
setAllPlayersGM(GameMode.SPECTATOR);
|
||||
Fight.getBlueTeam().teleportToSpawn();
|
||||
Fight.getRedTeam().teleportToSpawn();
|
||||
Bukkit.getOnlinePlayers().forEach(player -> player.getInventory().clear());
|
||||
|
||||
Bukkit.broadcastMessage(" ");
|
||||
|
||||
if(winFightTeam != null) {
|
||||
Bukkit.broadcastMessage(PREFIX + "§aDas Team " + winFightTeam.getName() + " §ahat gewonnen!");
|
||||
} else {
|
||||
Bukkit.broadcastMessage(PREFIX + "§aKein Team hat gewonnen!");
|
||||
}
|
||||
|
||||
if(Config.event())
|
||||
eventFight.setErgebnis(winFightTeam);
|
||||
|
||||
if(!Config.test())
|
||||
new SpectateOverCountdown();
|
||||
}
|
||||
|
||||
public static void setFightTime(int fightTime) {
|
||||
FightSystem.fightTime = fightTime;
|
||||
}
|
||||
|
||||
public static void setEntern(boolean entern) {
|
||||
final List<Pair<Integer, Integer>> chunksBlue = TechHider.prepareChunkReload(Fight.getBlueTeam().getPlayers().iterator().next().getPlayer());
|
||||
final List<Pair<Integer, Integer>> chunksRed = TechHider.prepareChunkReload(Fight.getRedTeam().getPlayers().iterator().next().getPlayer());
|
||||
FightSystem.entern = entern;
|
||||
for(FightPlayer player : Fight.getBlueTeam().getPlayers()){
|
||||
TechHider.reloadChunks(player.getPlayer(), chunksBlue);
|
||||
}
|
||||
for(FightPlayer player : Fight.getRedTeam().getPlayers()){
|
||||
TechHider.reloadChunks(player.getPlayer(), chunksRed);
|
||||
}
|
||||
}
|
||||
|
||||
private static void loadKits(FightTeam team){
|
||||
for(FightPlayer allFightPlayers : team.getPlayers()) {
|
||||
allFightPlayers.getPlayer().getInventory().clear();
|
||||
allFightPlayers.getKit().loadToPlayer(allFightPlayers.getPlayer());
|
||||
}
|
||||
}
|
||||
|
||||
private static void setAllPlayersGM(GameMode gm) {
|
||||
for(FightPlayer fightPlayer: Fight.getBlueTeam().getPlayers()){
|
||||
fightPlayer.getPlayer().setGameMode(gm);
|
||||
}
|
||||
for(FightPlayer fightPlayer: Fight.getRedTeam().getPlayers()){
|
||||
fightPlayer.getPlayer().setGameMode(gm);
|
||||
}
|
||||
}
|
||||
|
||||
private static void setFightState(FightState state){
|
||||
fightState = state;
|
||||
BasicListener.fightStateChange(state);
|
||||
}
|
||||
|
||||
public static void setEventFight(EventFight ef){
|
||||
eventFight = ef;
|
||||
}
|
||||
|
||||
public static void setEventLeiter(Player el){
|
||||
eventLeiter = el;
|
||||
}
|
||||
|
||||
public static Player getEventLeiter(){
|
||||
return eventLeiter;
|
||||
}
|
||||
|
||||
public static EventFight getEventFight(){
|
||||
return eventFight;
|
||||
}
|
||||
|
||||
private static void setPlugin(FightSystem pl){
|
||||
plugin = pl;
|
||||
}
|
||||
|
||||
public static FightSystem getPlugin() {
|
||||
return plugin;
|
||||
}
|
||||
|
||||
public static FightState getFightState() {
|
||||
return fightState;
|
||||
}
|
||||
|
||||
public static int getFightTime() {
|
||||
return fightTime;
|
||||
}
|
||||
|
||||
public static boolean isEntern() {
|
||||
return entern;
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package me.yaruma.fightsystem.commands;
|
||||
package de.steamwar.fightsystem.commands;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
@ -1,14 +1,15 @@
|
||||
package me.yaruma.fightsystem.commands;
|
||||
package de.steamwar.fightsystem.commands;
|
||||
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.fight.Fight;
|
||||
import de.steamwar.fightsystem.fight.FightState;
|
||||
import de.steamwar.fightsystem.fight.FightTeam;
|
||||
import de.steamwar.fightsystem.kit.KitManager;
|
||||
import de.steamwar.fightsystem.utils.Config;
|
||||
import de.warking.hunjy.MySQL.Schematic;
|
||||
import de.warking.hunjy.MySQL.SchematicType;
|
||||
import de.warking.hunjy.MySQL.UserGroup;
|
||||
import de.warking.hunjy.MySQL.WarkingUser;
|
||||
import me.yaruma.fightsystem.FightSystem;
|
||||
import me.yaruma.fightsystem.fight.Fight;
|
||||
import me.yaruma.fightsystem.fight.FightState;
|
||||
import me.yaruma.fightsystem.fight.FightTeam;
|
||||
import me.yaruma.fightsystem.kit.KitManager;
|
||||
import me.yaruma.fightsystem.utils.Config;
|
||||
import net.md_5.bungee.api.ChatColor;
|
||||
import net.md_5.bungee.api.chat.ClickEvent;
|
||||
import net.md_5.bungee.api.chat.ComponentBuilder;
|
||||
@ -19,8 +20,14 @@ import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class AkCommand implements CommandExecutor {
|
||||
|
||||
private static final String SCHEMLIST_COMMAND = "/ak schemlist ";
|
||||
private static final int FILES_PER_PAGE = 15;
|
||||
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
|
||||
@ -31,25 +38,7 @@ public class AkCommand implements CommandExecutor {
|
||||
|
||||
switch(args.length){
|
||||
case 1:
|
||||
if(args[0].equalsIgnoreCase("ready"))
|
||||
Commands.toggleReady(player);
|
||||
else if(args[0].equalsIgnoreCase("accept"))
|
||||
Commands.acceptInvitation(player);
|
||||
else if(args[0].equalsIgnoreCase("decline"))
|
||||
Commands.declineInvitation(player);
|
||||
else if(args[0].equalsIgnoreCase("leave"))
|
||||
Commands.leaveTeam(player);
|
||||
else if(args[0].equalsIgnoreCase("leader")) {
|
||||
if (!Fight.getBlueTeam().hasTeamLeader()) {
|
||||
Fight.getBlueTeam().setLeader(Fight.getBlueTeam().addMember(player));
|
||||
player.sendMessage(FightSystem.PREFIX + "§aDu bist nun Leader von " + Fight.getBlueTeam().getName());
|
||||
} else if (!Fight.getRedTeam().hasTeamLeader()) {
|
||||
Fight.getRedTeam().setLeader(Fight.getRedTeam().addMember(player));
|
||||
player.sendMessage(FightSystem.PREFIX + "§aDu bist nun Leader von " + Fight.getRedTeam().getName());
|
||||
|
||||
} else
|
||||
player.sendMessage(FightSystem.PREFIX + "§cEs sind bereits zwei Leader vorhanden!");
|
||||
}else if(args[0].equalsIgnoreCase("schem") || args[0].equalsIgnoreCase("schemlist")){
|
||||
if(args[0].equalsIgnoreCase("schem") || args[0].equalsIgnoreCase("schemlist")){
|
||||
|
||||
//TEXT COMPONENTS
|
||||
TextComponent publicList = new TextComponent("PUBLIC");
|
||||
@ -71,13 +60,7 @@ public class AkCommand implements CommandExecutor {
|
||||
Commands.sendHelp(player);
|
||||
break;
|
||||
case 2:
|
||||
if(args[0].equalsIgnoreCase("invite")){
|
||||
Commands.invite(player, args[1]);
|
||||
}else if(args[0].equalsIgnoreCase("remove")){
|
||||
Commands.kick(player, args[1]);
|
||||
}else if(args[0].equalsIgnoreCase("kit")) {
|
||||
Commands.kit(player, args[1]);
|
||||
} else if(args[0].equalsIgnoreCase("addkit")){
|
||||
if(args[0].equalsIgnoreCase("addkit")){
|
||||
if(WarkingUser.get(player.getUniqueId()).getUserGroup() != UserGroup.Developer){
|
||||
Commands.sendHelp(player);
|
||||
return false;
|
||||
@ -88,16 +71,12 @@ public class AkCommand implements CommandExecutor {
|
||||
FightTeam fightTeam = Fight.getPlayerTeam(player);
|
||||
if(fightTeam != null && fightTeam.getFightPlayer(player).isLeader()) {
|
||||
if(args[1].equalsIgnoreCase("public")) {
|
||||
Fight.getPlayerTeam(player).sendPlayerSchematicList(true, 0, 15, player, Config.SchematicType);
|
||||
sendPlayerSchematicList(true, 0, player, Config.SchematicType);
|
||||
return false;
|
||||
} else {
|
||||
int page;
|
||||
try {
|
||||
page = Integer.parseInt(args[1]);
|
||||
} catch (NumberFormatException ex) {
|
||||
return false;
|
||||
}
|
||||
Fight.getPlayerTeam(player).sendPlayerSchematicList(false, page, 15, player, Config.SchematicType);
|
||||
sendPlayerSchematicList(false, page, player, Config.SchematicType);
|
||||
}
|
||||
}
|
||||
} catch (NumberFormatException ex) {
|
||||
@ -150,4 +129,82 @@ public class AkCommand implements CommandExecutor {
|
||||
return false;
|
||||
}
|
||||
|
||||
private void sendPlayerSchematicList(boolean publicSchematics, int currentPage, Player player, SchematicType schematicType) {
|
||||
List<Schematic> preSchematicList;
|
||||
List<Schematic> schematicList = new ArrayList<>();
|
||||
if(publicSchematics) {
|
||||
preSchematicList = Schematic.getSchemsAccessibleByUser(0);
|
||||
} else {
|
||||
preSchematicList = Schematic.getSchemsAccessibleByUser(player.getUniqueId());
|
||||
}
|
||||
|
||||
for(Schematic s : preSchematicList) {
|
||||
if(s.getSchemType() == schematicType)
|
||||
schematicList.add(s);
|
||||
}
|
||||
|
||||
if(schematicList.isEmpty()) {
|
||||
player.sendMessage(FightSystem.PREFIX + "§cDu hast noch keine Schematic(s)!");
|
||||
return;
|
||||
}
|
||||
|
||||
int pages;
|
||||
|
||||
double doublePages = (double) schematicList.size() / (double) FILES_PER_PAGE;
|
||||
int intPages = schematicList.size() / FILES_PER_PAGE;
|
||||
|
||||
if(schematicList.size() <= FILES_PER_PAGE) {
|
||||
pages = 1;
|
||||
} else if(doublePages > intPages) {
|
||||
pages = (intPages + 1);
|
||||
} else
|
||||
pages = intPages;
|
||||
|
||||
if(currentPage >= pages) return;
|
||||
|
||||
player.sendMessage("§5======§8[§dSeite " + (currentPage + 1) + " §7/ §d" + pages + " §7| §d" + schematicList.size() + " Schematic(s)§8]§5======");
|
||||
|
||||
for(int i = currentPage * FILES_PER_PAGE; i < (currentPage * FILES_PER_PAGE) + FILES_PER_PAGE; i++) {
|
||||
if(schematicList.size() <= i) break;
|
||||
|
||||
Schematic schem = schematicList.get(i);
|
||||
|
||||
TextComponent schematics = new TextComponent("§b" + schem.getSchemName());
|
||||
schematics.setBold(true);
|
||||
|
||||
schematics.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Schematic benutzen...").create()));
|
||||
schematics.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/ak schem " + schem.getSchemName() + (publicSchematics ? " public" : " private")));
|
||||
|
||||
player.spigot().sendMessage(schematics);
|
||||
}
|
||||
|
||||
if(pages <= 1) return;
|
||||
|
||||
if(currentPage == 0) {
|
||||
TextComponent nextPage = new TextComponent("Nächste Seite >>");
|
||||
nextPage.setColor(ChatColor.RED);
|
||||
nextPage.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§6Nächste Seite...").create()));
|
||||
nextPage.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, SCHEMLIST_COMMAND + "1"));
|
||||
player.spigot().sendMessage(nextPage);
|
||||
} else if((currentPage + 1) == pages) {
|
||||
TextComponent beforePage = new TextComponent("<< Vorherige Seite");
|
||||
beforePage.setColor(ChatColor.RED);
|
||||
beforePage.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§6Vorherige Seite...").create()));
|
||||
beforePage.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, SCHEMLIST_COMMAND + (currentPage - 1)));
|
||||
player.spigot().sendMessage(beforePage);
|
||||
} else {
|
||||
TextComponent beforePage = new TextComponent("<< Seite ");
|
||||
beforePage.setColor(ChatColor.RED);
|
||||
beforePage.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§6Vorherige Seite...").create()));
|
||||
beforePage.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, SCHEMLIST_COMMAND + (currentPage - 1)));
|
||||
|
||||
TextComponent nextPage = new TextComponent(">>");
|
||||
nextPage.setColor(ChatColor.RED);
|
||||
nextPage.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§6Nächste Seite...").create()));
|
||||
nextPage.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, SCHEMLIST_COMMAND + (currentPage + 1)));
|
||||
|
||||
beforePage.addExtra(nextPage);
|
||||
player.spigot().sendMessage(beforePage);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,12 +1,12 @@
|
||||
package me.yaruma.fightsystem.commands;
|
||||
package de.steamwar.fightsystem.commands;
|
||||
|
||||
import me.yaruma.fightsystem.FightSystem;
|
||||
import me.yaruma.fightsystem.fight.Fight;
|
||||
import me.yaruma.fightsystem.fight.FightPlayer;
|
||||
import me.yaruma.fightsystem.fight.FightState;
|
||||
import me.yaruma.fightsystem.fight.FightTeam;
|
||||
import me.yaruma.fightsystem.kit.Kit;
|
||||
import me.yaruma.fightsystem.kit.KitManager;
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.fight.Fight;
|
||||
import de.steamwar.fightsystem.fight.FightPlayer;
|
||||
import de.steamwar.fightsystem.fight.FightState;
|
||||
import de.steamwar.fightsystem.fight.FightTeam;
|
||||
import de.steamwar.fightsystem.kit.Kit;
|
||||
import de.steamwar.fightsystem.kit.KitManager;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
@ -18,13 +18,13 @@ class Commands {
|
||||
p.sendMessage(FightSystem.PREFIX + "§cDu bist in keinem Team!");
|
||||
}
|
||||
|
||||
private static boolean checkSetupOver(Player p){
|
||||
static boolean checkSetup(Player p){
|
||||
if(FightSystem.getFightState() != FightState.SETUP){
|
||||
p.sendMessage(FightSystem.PREFIX + "§cDer Kampf hat bereits begonnen!");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static FightTeam checkGetInvitedTeam(Player p){
|
||||
FightTeam fightTeam = Fight.getInvitedTeam(p);
|
||||
@ -68,7 +68,7 @@ class Commands {
|
||||
}
|
||||
|
||||
static void toggleReady(Player p){
|
||||
if(!checkSetupOver(p))
|
||||
if(checkSetup(p))
|
||||
return;
|
||||
|
||||
FightTeam fightTeam = checkGetTeam(p);
|
||||
@ -79,7 +79,7 @@ class Commands {
|
||||
}
|
||||
|
||||
static void acceptInvitation(Player p){
|
||||
if(!checkSetupOver(p))
|
||||
if(checkSetup(p))
|
||||
return;
|
||||
|
||||
FightTeam team = checkGetInvitedTeam(p);
|
||||
@ -93,7 +93,7 @@ class Commands {
|
||||
}
|
||||
|
||||
static void declineInvitation(Player p){
|
||||
if(!checkSetupOver(p))
|
||||
if(checkSetup(p))
|
||||
return;
|
||||
|
||||
FightTeam team = checkGetInvitedTeam(p);
|
||||
@ -107,7 +107,7 @@ class Commands {
|
||||
}
|
||||
|
||||
static void leaveTeam(Player p){
|
||||
if(!checkSetupOver(p))
|
||||
if(checkSetup(p))
|
||||
return;
|
||||
|
||||
FightTeam fightTeam = checkGetTeam(p);
|
||||
@ -119,7 +119,7 @@ class Commands {
|
||||
}
|
||||
|
||||
static void invite(Player p, String invited){
|
||||
if(!checkSetupOver(p))
|
||||
if(checkSetup(p))
|
||||
return;
|
||||
|
||||
FightTeam fightTeam = checkGetTeam(p);
|
||||
@ -151,7 +151,7 @@ class Commands {
|
||||
}
|
||||
|
||||
static void kick(Player p, String kicked){
|
||||
if(!checkSetupOver(p))
|
||||
if(checkSetup(p))
|
||||
return;
|
||||
|
||||
FightTeam fightTeam = checkGetTeam(p);
|
||||
@ -177,7 +177,7 @@ class Commands {
|
||||
}
|
||||
|
||||
static void kit(Player p, String kitName){
|
||||
if(!checkSetupOver(p))
|
||||
if(checkSetup(p))
|
||||
return;
|
||||
|
||||
FightPlayer fightPlayer = checkGetPlayer(p);
|
||||
@ -202,17 +202,18 @@ class Commands {
|
||||
|
||||
static void sendHelp(Player p) {
|
||||
p.sendMessage(FightSystem.PREFIX + "§7Hilfe für das Kampfsystem");
|
||||
p.sendMessage("§8/§eak help §8- §7Zeigt diese Hilfeseite");
|
||||
|
||||
FightPlayer fightPlayer = Fight.getFightPlayer(p);
|
||||
if(fightPlayer == null){
|
||||
p.sendMessage("§8/§eaccept §8- §7Einladung annehmen");
|
||||
p.sendMessage("§8/§edecline §8- §7Einladung ablehnen");
|
||||
p.sendMessage("§8/§eleader §8- §7Werde der Leader eines Teams");
|
||||
}else{
|
||||
if(fightPlayer.isLeader()){
|
||||
p.sendMessage("§8/§eak schem §8<§eSchematic§8> - §7Setze deine Schematic");
|
||||
p.sendMessage("§8/§eready §8- §7Setzt das eigene Team auf bereit");
|
||||
p.sendMessage("§8/§einvite §8<§eSpieler§8> - §7Lade einen Spieler in dein Team ein");
|
||||
p.sendMessage("§8/§eremove §8<§eSpieler§8> - §7Wirft einen Spieler aus dem Team");
|
||||
}
|
||||
p.sendMessage("§8/§ekit §8<§eKit§8> - §7Wähle ein Kit");
|
||||
p.sendMessage("§8/§eleave §8- §7Team verlassen");
|
@ -1,4 +1,4 @@
|
||||
package me.yaruma.fightsystem.commands;
|
||||
package de.steamwar.fightsystem.commands;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
14
src/de/steamwar/fightsystem/commands/EventDummyCommand.java
Normale Datei
14
src/de/steamwar/fightsystem/commands/EventDummyCommand.java
Normale Datei
@ -0,0 +1,14 @@
|
||||
package de.steamwar.fightsystem.commands;
|
||||
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
public class EventDummyCommand implements CommandExecutor {
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
sender.sendMessage(FightSystem.PREFIX + "§cWährend des Events ist der Befehl nicht verfügbar.");
|
||||
return false;
|
||||
}
|
||||
}
|
@ -1,18 +1,18 @@
|
||||
package me.yaruma.fightsystem.commands;
|
||||
package de.steamwar.fightsystem.commands;
|
||||
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.fight.Fight;
|
||||
import de.steamwar.fightsystem.fight.FightPlayer;
|
||||
import de.steamwar.fightsystem.fight.FightTeam;
|
||||
import de.steamwar.fightsystem.kit.Kit;
|
||||
import de.steamwar.fightsystem.kit.KitManager;
|
||||
import de.steamwar.fightsystem.utils.Config;
|
||||
import de.steamwar.inventory.SWInventory;
|
||||
import de.steamwar.inventory.SWItem;
|
||||
import de.steamwar.inventory.SWListInv;
|
||||
import de.warking.hunjy.MySQL.Schematic;
|
||||
import de.warking.hunjy.MySQL.WarkingUser;
|
||||
import javafx.util.Pair;
|
||||
import me.yaruma.fightsystem.FightSystem;
|
||||
import me.yaruma.fightsystem.fight.Fight;
|
||||
import me.yaruma.fightsystem.fight.FightPlayer;
|
||||
import me.yaruma.fightsystem.fight.FightTeam;
|
||||
import me.yaruma.fightsystem.kit.Kit;
|
||||
import me.yaruma.fightsystem.kit.KitManager;
|
||||
import me.yaruma.fightsystem.utils.Config;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
@ -29,11 +29,11 @@ public class GUI {
|
||||
static void invitation(Player p, Player target){
|
||||
SWInventory inv = new SWInventory(target, 9, "Einladung von " + p.getName());
|
||||
inv.setItem(0, Material.INK_SACK, (byte)10, "§aAnnehmen", (ClickType click) ->{
|
||||
target.performCommand("accept");
|
||||
Commands.acceptInvitation(target);
|
||||
target.closeInventory();
|
||||
});
|
||||
inv.setItem(8, Material.INK_SACK, (byte)1, "§cAblehnen", (ClickType click) ->{
|
||||
target.performCommand("decline");
|
||||
Commands.declineInvitation(target);
|
||||
target.closeInventory();
|
||||
});
|
||||
inv.addCloseCallback((ClickType click) ->{
|
||||
@ -50,7 +50,7 @@ public class GUI {
|
||||
List<Pair<SWItem, UUID>> players = SWListInv.createPlayerList(p);
|
||||
players.removeIf(swItemUUIDPair -> Fight.getFightPlayer(Bukkit.getPlayer(swItemUUIDPair.getValue())) != null);
|
||||
SWListInv<UUID> inv = new SWListInv<>(p, "Spieler einladen", (ClickType click, UUID player) -> {
|
||||
p.performCommand("invite " + WarkingUser.get(player).getUserName());
|
||||
Commands.invite(p, WarkingUser.get(player).getUserName());
|
||||
p.closeInventory();
|
||||
}, players);
|
||||
inv.setCallback(-999, (ClickType click) -> p.closeInventory());
|
||||
@ -60,9 +60,11 @@ public class GUI {
|
||||
public static void chooseRemove(Player p){
|
||||
List<Pair<SWItem, UUID>> players = SWListInv.createPlayerList(p);
|
||||
FightTeam team = Fight.getPlayerTeam(p);
|
||||
if(team == null)
|
||||
return;
|
||||
players.removeIf(swItemUUIDPair -> !team.equals(Fight.getPlayerTeam(Bukkit.getPlayer(swItemUUIDPair.getValue()))));
|
||||
SWListInv<UUID> inv = new SWListInv<>(p, "Spieler rauswerfen", (ClickType click, UUID player) -> {
|
||||
p.performCommand("ak remove " + WarkingUser.get(player).getUserName());
|
||||
Commands.kick(p, WarkingUser.get(player).getUserName());
|
||||
p.closeInventory();
|
||||
}, players);
|
||||
inv.setCallback(-999, (ClickType click) -> p.closeInventory());
|
||||
@ -71,6 +73,8 @@ public class GUI {
|
||||
|
||||
public static void kitSelection(Player p){
|
||||
FightPlayer fightPlayer = Fight.getFightPlayer(p);
|
||||
if(fightPlayer == null)
|
||||
return;
|
||||
List<Pair<SWItem, Kit>> iconList = new ArrayList<>();
|
||||
|
||||
List<Kit> kitList = KitManager.getKits(fightPlayer.isLeader());
|
||||
@ -79,7 +83,7 @@ public class GUI {
|
||||
}
|
||||
|
||||
SWListInv<Kit> inv = new SWListInv<>(p, "Kitauswahl", (ClickType click, Kit k) -> {
|
||||
p.performCommand("kit " + k.getName());
|
||||
Commands.kit(p, k.getName());
|
||||
p.closeInventory();
|
||||
}, iconList);
|
||||
inv.setCallback(-999, (ClickType click) -> p.closeInventory());
|
||||
@ -89,7 +93,9 @@ public class GUI {
|
||||
public static void preSchemDialog(Player p){
|
||||
SWInventory inv = new SWInventory(p, 9, Config.GameName + "-Auswahl");
|
||||
inv.setItem(8, Material.REDSTONE, "§eÖffentliches " + Config.GameName, (ClickType click) -> schemDialog(p, true));
|
||||
if(Schematic.getSchemsOfType(p.getUniqueId(), Config.SchematicType).isEmpty()){
|
||||
if(Config.OnlyPublicSchematics){
|
||||
inv.setItem(0, Material.INK_SACK, (byte)8, "§7Keine privaten Schematics erlaubt", (ClickType click)->{});
|
||||
}else if(Schematic.getSchemsOfType(p.getUniqueId(), Config.SchematicType).isEmpty()){
|
||||
inv.setItem(0, Material.INK_SACK, (byte)8, "§7Kein privates " + Config.GameName + " vorhanden", (ClickType click)->{});
|
||||
}else{
|
||||
inv.setItem(0, Material.CAULDRON_ITEM, "§ePrivates " + Config.GameName, (ClickType click) -> schemDialog(p, false));
|
||||
@ -102,10 +108,14 @@ public class GUI {
|
||||
List<Pair<SWItem, Schematic>> schems;
|
||||
if(publicSchems)
|
||||
schems = SWListInv.getSchemList(0, Config.SchematicType);
|
||||
else if(Config.test())
|
||||
schems = SWListInv.getSchemList(WarkingUser.get(p.getUniqueId()).getId(), null);
|
||||
else
|
||||
schems = SWListInv.getSchemList(WarkingUser.get(p.getUniqueId()).getId(), Config.SchematicType);
|
||||
SWListInv<Schematic> inv = new SWListInv<>(p, Config.GameName + "-Auswahl", (ClickType click, Schematic s) -> {
|
||||
FightTeam fightTeam = Fight.getPlayerTeam(p);
|
||||
if(fightTeam == null)
|
||||
return;
|
||||
fightTeam.setSchematic(s);
|
||||
p.closeInventory();
|
||||
}, schems);
|
@ -1,4 +1,4 @@
|
||||
package me.yaruma.fightsystem.commands;
|
||||
package de.steamwar.fightsystem.commands;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
@ -1,4 +1,4 @@
|
||||
package me.yaruma.fightsystem.commands;
|
||||
package de.steamwar.fightsystem.commands;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
35
src/de/steamwar/fightsystem/commands/LeaderCommand.java
Normale Datei
35
src/de/steamwar/fightsystem/commands/LeaderCommand.java
Normale Datei
@ -0,0 +1,35 @@
|
||||
package de.steamwar.fightsystem.commands;
|
||||
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.fight.Fight;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class LeaderCommand implements CommandExecutor {
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
if(!(sender instanceof Player))
|
||||
return false;
|
||||
Player player = (Player) sender;
|
||||
|
||||
if(Commands.checkSetup(player))
|
||||
return false;
|
||||
|
||||
if(args.length == 0){
|
||||
if(Fight.getFightPlayer(player) == null){
|
||||
if(!Fight.getBlueTeam().hasTeamLeader())
|
||||
Fight.getBlueTeam().setLeader(Fight.getBlueTeam().addMember(player));
|
||||
else if(!Fight.getRedTeam().hasTeamLeader())
|
||||
Fight.getRedTeam().setLeader(Fight.getRedTeam().addMember(player));
|
||||
else
|
||||
player.sendMessage(FightSystem.PREFIX + "§cEs sind bereits 2 Teamleader vorhanden");
|
||||
}else
|
||||
player.sendMessage(FightSystem.PREFIX + "§cDu bist bereits in einem Team");
|
||||
}else
|
||||
Commands.sendHelp(player);
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package me.yaruma.fightsystem.commands;
|
||||
package de.steamwar.fightsystem.commands;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
@ -1,4 +1,4 @@
|
||||
package me.yaruma.fightsystem.commands;
|
||||
package de.steamwar.fightsystem.commands;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
24
src/de/steamwar/fightsystem/commands/RemoveCommand.java
Normale Datei
24
src/de/steamwar/fightsystem/commands/RemoveCommand.java
Normale Datei
@ -0,0 +1,24 @@
|
||||
package de.steamwar.fightsystem.commands;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class RemoveCommand implements CommandExecutor {
|
||||
@Override
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
if(!(sender instanceof Player)) {
|
||||
return false;
|
||||
}
|
||||
Player player = (Player) sender;
|
||||
|
||||
if(args.length != 1){
|
||||
Commands.sendHelp(player);
|
||||
return false;
|
||||
}
|
||||
|
||||
Commands.kick(player, args[0]);
|
||||
return false;
|
||||
}
|
||||
}
|
91
src/de/steamwar/fightsystem/countdown/Countdown.java
Normale Datei
91
src/de/steamwar/fightsystem/countdown/Countdown.java
Normale Datei
@ -0,0 +1,91 @@
|
||||
package de.steamwar.fightsystem.countdown;
|
||||
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.fight.Fight;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.scheduler.BukkitScheduler;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.logging.Level;
|
||||
|
||||
public abstract class Countdown {
|
||||
|
||||
private static final ArrayList<Countdown> countdowns = new ArrayList<>();
|
||||
|
||||
private int time;
|
||||
private final int taskID;
|
||||
private final Sound sound;
|
||||
private final boolean level;
|
||||
|
||||
abstract String countdownCounting();
|
||||
abstract void countdownFinished();
|
||||
|
||||
Countdown(int time, Sound sound, boolean level) {
|
||||
this.time = time;
|
||||
this.sound = sound;
|
||||
this.level = level;
|
||||
countdowns.add(this);
|
||||
|
||||
BukkitScheduler bukkitScheduler = Bukkit.getServer().getScheduler();
|
||||
this.taskID = bukkitScheduler.scheduleSyncRepeatingTask(FightSystem.getPlugin(), this::count, 0, 20);
|
||||
}
|
||||
|
||||
public static void cancelAllTimers() {
|
||||
while (!countdowns.isEmpty()) {
|
||||
countdowns.get(0).cancelTimer();
|
||||
}
|
||||
}
|
||||
|
||||
public static void cancelTimerType(Class<? extends Countdown> type) {
|
||||
for(int i = countdowns.size() - 1; i >= 0; i--)
|
||||
if(type.isInstance(countdowns.get(i)))
|
||||
countdowns.get(i).cancelTimer();
|
||||
}
|
||||
|
||||
private void count(){
|
||||
switch (time) {
|
||||
case 900: case 600: case 300: case 180: case 120:
|
||||
Bukkit.broadcastMessage(FightSystem.PREFIX + "§7Noch §a" + time / 60 + " §7Minuten " + countdownCounting());
|
||||
break;
|
||||
case 60: case 30: case 20: case 15: case 10: case 5: case 4: case 3: case 2:
|
||||
if(this.sound != null)
|
||||
Fight.playSound(this.sound, 100.0F, 1.0F);
|
||||
|
||||
Bukkit.broadcastMessage(FightSystem.PREFIX + "§7Noch §a" + time + " §7Sekunden " + countdownCounting());
|
||||
break;
|
||||
case 1:
|
||||
if(this.sound != null)
|
||||
Fight.playSound(this.sound, 100.0F, 1.0F);
|
||||
|
||||
Bukkit.broadcastMessage(FightSystem.PREFIX + "§7Noch §aeine §7Sekunde " + countdownCounting());
|
||||
break;
|
||||
case 0:
|
||||
if(this.sound != null)
|
||||
Fight.playSound(this.sound, 100.0F, 2.0F);
|
||||
|
||||
cancelTimer();
|
||||
countdownFinished();
|
||||
break;
|
||||
default:
|
||||
}
|
||||
if(this.level)
|
||||
Fight.setLevel(time);
|
||||
|
||||
time--;
|
||||
onTime(time);
|
||||
}
|
||||
|
||||
void onTime(int time){
|
||||
//Unused
|
||||
}
|
||||
|
||||
public void cancelTimer() {
|
||||
try {
|
||||
Bukkit.getScheduler().cancelTask(this.taskID);
|
||||
} catch (AssertionError ex) {
|
||||
FightSystem.getPlugin().getLogger().log(Level.SEVERE, "Could not cancel timer", ex);
|
||||
}
|
||||
countdowns.remove(this);
|
||||
}
|
||||
}
|
@ -1,9 +1,15 @@
|
||||
package me.yaruma.fightsystem.utils.countdown;
|
||||
package de.steamwar.fightsystem.countdown;
|
||||
|
||||
import me.yaruma.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.utils.Config;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Sound;
|
||||
|
||||
public class FinishNoneEntern implements CountdownCallback {
|
||||
public class EnternCountdown extends Countdown {
|
||||
|
||||
public EnternCountdown() {
|
||||
super(Config.EnterPhaseBegin, Sound.BLOCK_NOTE_PLING, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String countdownCounting() {
|
||||
@ -15,9 +21,4 @@ public class FinishNoneEntern implements CountdownCallback {
|
||||
FightSystem.setEntern(true);
|
||||
Bukkit.broadcastMessage(FightSystem.PREFIX + "§aEntern ist nun erlaubt!");
|
||||
}
|
||||
|
||||
@Override
|
||||
public CountdownType getType() {
|
||||
return CountdownType.NO_ENTERN;
|
||||
}
|
||||
}
|
22
src/de/steamwar/fightsystem/countdown/EventStartCountdown.java
Normale Datei
22
src/de/steamwar/fightsystem/countdown/EventStartCountdown.java
Normale Datei
@ -0,0 +1,22 @@
|
||||
package de.steamwar.fightsystem.countdown;
|
||||
|
||||
import de.steamwar.fightsystem.utils.Config;
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import org.bukkit.Sound;
|
||||
|
||||
public class EventStartCountdown extends Countdown {
|
||||
|
||||
public EventStartCountdown() {
|
||||
super(Config.SetupDuration, Sound.BLOCK_NOTE_PLING, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
String countdownCounting() {
|
||||
return "bis der Kampf beginnt!";
|
||||
}
|
||||
|
||||
@Override
|
||||
void countdownFinished() {
|
||||
FightSystem.setPreRunningState();
|
||||
}
|
||||
}
|
21
src/de/steamwar/fightsystem/countdown/NoPlayersOnlineCountdown.java
Normale Datei
21
src/de/steamwar/fightsystem/countdown/NoPlayersOnlineCountdown.java
Normale Datei
@ -0,0 +1,21 @@
|
||||
package de.steamwar.fightsystem.countdown;
|
||||
|
||||
import de.steamwar.fightsystem.utils.Config;
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
public class NoPlayersOnlineCountdown extends Countdown {
|
||||
|
||||
public NoPlayersOnlineCountdown() {
|
||||
super(Config.NoPlayerOnlineDuration, null, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String countdownCounting() {
|
||||
return "bis der Server gestoppt wird!";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void countdownFinished() {
|
||||
Bukkit.getServer().shutdown();
|
||||
}
|
||||
}
|
22
src/de/steamwar/fightsystem/countdown/PreRunningCountdown.java
Normale Datei
22
src/de/steamwar/fightsystem/countdown/PreRunningCountdown.java
Normale Datei
@ -0,0 +1,22 @@
|
||||
package de.steamwar.fightsystem.countdown;
|
||||
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.utils.Config;
|
||||
import org.bukkit.Sound;
|
||||
|
||||
public class PreRunningCountdown extends Countdown {
|
||||
|
||||
public PreRunningCountdown() {
|
||||
super(Config.PreFightDuration, Sound.BLOCK_NOTE_PLING, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String countdownCounting() {
|
||||
return "bis die Arena freigegeben ist!";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void countdownFinished() {
|
||||
FightSystem.getPlugin().setRunningState();
|
||||
}
|
||||
}
|
@ -1,9 +1,14 @@
|
||||
package me.yaruma.fightsystem.utils.countdown;
|
||||
package de.steamwar.fightsystem.countdown;
|
||||
|
||||
import me.yaruma.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.utils.Config;
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
public class FinishSetupOver implements CountdownCallback {
|
||||
public class SetupOverCountdown extends Countdown {
|
||||
|
||||
public SetupOverCountdown() {
|
||||
super(Config.SetupDuration, null, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String countdownCounting() {
|
||||
@ -15,9 +20,4 @@ public class FinishSetupOver implements CountdownCallback {
|
||||
Bukkit.broadcastMessage(FightSystem.PREFIX + "§cKampf wird abgebrochen!");
|
||||
Bukkit.getServer().shutdown();
|
||||
}
|
||||
|
||||
@Override
|
||||
public CountdownType getType() {
|
||||
return CountdownType.SETUP_OVER;
|
||||
}
|
||||
}
|
22
src/de/steamwar/fightsystem/countdown/SpectateOverCountdown.java
Normale Datei
22
src/de/steamwar/fightsystem/countdown/SpectateOverCountdown.java
Normale Datei
@ -0,0 +1,22 @@
|
||||
package de.steamwar.fightsystem.countdown;
|
||||
|
||||
import de.steamwar.fightsystem.utils.Config;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Sound;
|
||||
|
||||
public class SpectateOverCountdown extends Countdown {
|
||||
|
||||
public SpectateOverCountdown() {
|
||||
super(Config.SpectatorDuration, Sound.BLOCK_NOTE_PLING, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String countdownCounting() {
|
||||
return "bis der Server gestoppt wird!";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void countdownFinished() {
|
||||
Bukkit.shutdown();
|
||||
}
|
||||
}
|
29
src/de/steamwar/fightsystem/countdown/TechKOCountdown.java
Normale Datei
29
src/de/steamwar/fightsystem/countdown/TechKOCountdown.java
Normale Datei
@ -0,0 +1,29 @@
|
||||
package de.steamwar.fightsystem.countdown;
|
||||
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.fight.Fight;
|
||||
import de.steamwar.fightsystem.fight.FightTeam;
|
||||
import de.steamwar.fightsystem.winconditions.WinconditionTechKO;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Sound;
|
||||
|
||||
public class TechKOCountdown extends Countdown {
|
||||
|
||||
private final FightTeam team;
|
||||
|
||||
public TechKOCountdown(FightTeam team) {
|
||||
super(WinconditionTechKO.TECH_KO_COUNTDOWN_TIME, Sound.BLOCK_NOTE_PLING, false);
|
||||
this.team = team;
|
||||
}
|
||||
|
||||
@Override
|
||||
final String countdownCounting() {
|
||||
return "bis " + team.getName() + " §7einen Schuss abgegeben haben muss!";
|
||||
}
|
||||
|
||||
@Override
|
||||
void countdownFinished() {
|
||||
Bukkit.broadcastMessage(FightSystem.PREFIX + team.getName() + "§7 ist §eTech K§8.§eO§8.!");
|
||||
FightSystem.setSpectateState(Fight.getOpposite(team));
|
||||
}
|
||||
}
|
29
src/de/steamwar/fightsystem/countdown/TimeOverCountdown.java
Normale Datei
29
src/de/steamwar/fightsystem/countdown/TimeOverCountdown.java
Normale Datei
@ -0,0 +1,29 @@
|
||||
package de.steamwar.fightsystem.countdown;
|
||||
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.utils.Config;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Sound;
|
||||
|
||||
public class TimeOverCountdown extends Countdown {
|
||||
|
||||
public TimeOverCountdown() {
|
||||
super(Config.TimeoutTime, Sound.BLOCK_NOTE_BASS, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String countdownCounting() {
|
||||
return "bis der Kampf vorbei ist!";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void countdownFinished() {
|
||||
Bukkit.broadcastMessage(FightSystem.PREFIX +"§aZeit abgelaufen!");
|
||||
FightSystem.setSpectateState(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
void onTime(int time) {
|
||||
FightSystem.setFightTime(time);
|
||||
}
|
||||
}
|
@ -1,15 +1,16 @@
|
||||
package me.yaruma.fightsystem.fight;
|
||||
package de.steamwar.fightsystem.fight;
|
||||
|
||||
import me.yaruma.fightsystem.utils.Config;
|
||||
import de.steamwar.fightsystem.utils.Config;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class Fight {
|
||||
|
||||
public static final FightTeam redTeam = new FightTeam(Config.TeamRedName, Config.TeamRedPrefix, Config.TeamRedSpawn, Config.TeamRedPaste, Config.TeamRedRotate, false);
|
||||
public static final FightTeam blueTeam = new FightTeam(Config.TeamBlueName, Config.TeamBluePrefix, Config.TeamBlueSpawn, Config.TeamBluePaste, Config.TeamBlueRotate, true);
|
||||
private Fight(){}
|
||||
|
||||
public static final FightTeam redTeam = new FightTeam(Config.TeamRedName, Config.TeamRedPrefix, Config.TeamRedSpawn, Config.TeamRedPaste, Config.TeamRedCorner, Config.TeamRedRotate, false);
|
||||
public static final FightTeam blueTeam = new FightTeam(Config.TeamBlueName, Config.TeamBluePrefix, Config.TeamBlueSpawn, Config.TeamBluePaste, Config.TeamBlueCorner, Config.TeamBlueRotate, true);
|
||||
|
||||
public static FightTeam getPlayerTeam(Player player) {
|
||||
if(redTeam.isPlayerInTeam(player))
|
||||
@ -20,11 +21,14 @@ public class Fight {
|
||||
}
|
||||
|
||||
public static FightTeam getOpposite(FightTeam fightTeam) {
|
||||
if(fightTeam == null){
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
|
||||
if(fightTeam == redTeam)
|
||||
return blueTeam;
|
||||
if(fightTeam == blueTeam)
|
||||
else
|
||||
return redTeam;
|
||||
return null;
|
||||
}
|
||||
|
||||
public static FightTeam getInvitedTeam(Player player){
|
||||
@ -52,14 +56,11 @@ public class Fight {
|
||||
}
|
||||
|
||||
public static void playSound(Sound sound, float volume, float pitch) {
|
||||
for(Player player : Bukkit.getServer().getOnlinePlayers()) {
|
||||
player.playSound(player.getLocation(), sound, volume, pitch); //volume: max. 100, pitch: max. 2
|
||||
}
|
||||
//volume: max. 100, pitch: max. 2
|
||||
Bukkit.getServer().getOnlinePlayers().forEach(player -> player.playSound(player.getLocation(), sound, volume, pitch));
|
||||
}
|
||||
|
||||
public static void setLevel(int level) {
|
||||
for(Player player : Bukkit.getServer().getOnlinePlayers()) {
|
||||
player.setLevel(level);
|
||||
}
|
||||
Bukkit.getServer().getOnlinePlayers().forEach(player -> player.setLevel(level));
|
||||
}
|
||||
}
|
@ -1,13 +1,14 @@
|
||||
package me.yaruma.fightsystem.fight;
|
||||
package de.steamwar.fightsystem.fight;
|
||||
|
||||
import me.yaruma.fightsystem.kit.Kit;
|
||||
import me.yaruma.fightsystem.kit.KitManager;
|
||||
import me.yaruma.fightsystem.utils.Config;
|
||||
import de.steamwar.fightsystem.kit.KitManager;
|
||||
import de.steamwar.fightsystem.utils.Config;
|
||||
import de.steamwar.fightsystem.kit.Kit;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class FightPlayer {
|
||||
|
||||
private final Player player;
|
||||
private final FightTeam team;
|
||||
private boolean isOut;
|
||||
private Kit kit;
|
||||
|
||||
@ -16,26 +17,27 @@ public class FightPlayer {
|
||||
this.player.sendMessage(message);
|
||||
}
|
||||
|
||||
FightPlayer(Player player, boolean isOut) {
|
||||
FightPlayer(Player player, FightTeam team) {
|
||||
this.player = player;
|
||||
this.isOut = isOut;
|
||||
this.team = team;
|
||||
this.isOut = false;
|
||||
kit = KitManager.getKitByName(Config.MemberDefault);
|
||||
}
|
||||
|
||||
public void setOut(boolean isOut) {
|
||||
this.isOut = isOut;
|
||||
public void setOut() {
|
||||
isOut = true;
|
||||
}
|
||||
|
||||
public Player getPlayer() {
|
||||
return this.player;
|
||||
}
|
||||
|
||||
public boolean isOut() {
|
||||
return this.isOut;
|
||||
public boolean isLiving() {
|
||||
return !this.isOut;
|
||||
}
|
||||
|
||||
public boolean isLeader() {
|
||||
FightPlayer leader = Fight.getPlayerTeam(player).getLeader();
|
||||
FightPlayer leader = team.getLeader();
|
||||
return leader != null && leader.getPlayer() == player;
|
||||
}
|
||||
|
||||
@ -46,4 +48,8 @@ public class FightPlayer {
|
||||
public void setKit(Kit kit) {
|
||||
this.kit = kit;
|
||||
}
|
||||
|
||||
public FightTeam getTeam(){
|
||||
return team;
|
||||
}
|
||||
}
|
@ -1,7 +1,6 @@
|
||||
package me.yaruma.fightsystem.fight;
|
||||
package de.steamwar.fightsystem.fight;
|
||||
|
||||
public enum FightState {
|
||||
|
||||
SETUP,
|
||||
PRE_RUNNING,
|
||||
RUNNING,
|
338
src/de/steamwar/fightsystem/fight/FightTeam.java
Normale Datei
338
src/de/steamwar/fightsystem/fight/FightTeam.java
Normale Datei
@ -0,0 +1,338 @@
|
||||
package de.steamwar.fightsystem.fight;
|
||||
|
||||
import com.boydti.fawe.FaweAPI;
|
||||
import com.sk89q.worldedit.EditSession;
|
||||
import com.sk89q.worldedit.MaxChangedBlocksException;
|
||||
import com.sk89q.worldedit.Vector;
|
||||
import com.sk89q.worldedit.blocks.BaseBlock;
|
||||
import com.sk89q.worldedit.bukkit.BukkitWorld;
|
||||
import com.sk89q.worldedit.math.transform.AffineTransform;
|
||||
import com.sk89q.worldedit.regions.CuboidRegion;
|
||||
import com.sk89q.worldedit.world.World;
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.kit.KitManager;
|
||||
import de.steamwar.fightsystem.utils.*;
|
||||
import de.warking.hunjy.MySQL.Schematic;
|
||||
import de.warking.hunjy.MySQL.WarkingUser;
|
||||
import javafx.util.Pair;
|
||||
import org.bukkit.*;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.scoreboard.Team;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.logging.Level;
|
||||
|
||||
|
||||
public class FightTeam {
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
private static final int COLOR_TO_REPLACE = DyeColor.PINK.getWoolData();
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
private static final BaseBlock WOOL = new BaseBlock(Material.WOOL.getId(), COLOR_TO_REPLACE);
|
||||
@SuppressWarnings("deprecation")
|
||||
private static final BaseBlock GLASS = new BaseBlock(Material.STAINED_GLASS.getId(), COLOR_TO_REPLACE);
|
||||
@SuppressWarnings("deprecation")
|
||||
private static final BaseBlock CLAY = new BaseBlock(Material.CLAY.getId(), COLOR_TO_REPLACE);
|
||||
@SuppressWarnings("deprecation")
|
||||
private static final BaseBlock GLASS_PANE = new BaseBlock(Material.STAINED_GLASS_PANE.getId(), COLOR_TO_REPLACE);
|
||||
@SuppressWarnings("deprecation")
|
||||
private static final BaseBlock CONCRETE = new BaseBlock(Material.CONCRETE.getId(), COLOR_TO_REPLACE);
|
||||
|
||||
private static final Set<BaseBlock> WOOL_SET = Collections.singleton(WOOL);
|
||||
private static final Set<BaseBlock> CONCRETE_SET = Collections.singleton(CONCRETE);
|
||||
private static final Set<BaseBlock> CLAY_SET = Collections.singleton(CLAY);
|
||||
private static final Set<BaseBlock> GLASS_SET = Collections.singleton(GLASS);
|
||||
private static final Set<BaseBlock> GLASS_PANE_SET = Collections.singleton(GLASS_PANE);
|
||||
|
||||
private FightPlayer leader;
|
||||
private final Set<FightPlayer> players = new HashSet<>();
|
||||
private boolean ready;
|
||||
private final Set<Player> invited = new HashSet<>();
|
||||
private final String name;
|
||||
private final String prefix;
|
||||
private final ChatColor color;
|
||||
private Schematic schematic;
|
||||
private final Team team;
|
||||
private final boolean blue;
|
||||
|
||||
private final Location spawn;
|
||||
private final Vector paste;
|
||||
private final Vector corner;
|
||||
private final boolean rotate;
|
||||
|
||||
public FightTeam(String name, String prefix, Location spawn, Vector paste, Vector corner, boolean rotate, boolean blue) {
|
||||
this.spawn = spawn;
|
||||
this.paste = paste;
|
||||
this.name = name;
|
||||
this.prefix = prefix;
|
||||
this.ready = false;
|
||||
this.rotate = rotate;
|
||||
this.corner = corner;
|
||||
this.blue = blue;
|
||||
color = ChatColor.getByChar(ChatColor.getLastColors(prefix).replace("§", ""));
|
||||
if(FightScoreboard.getScoreboard().getTeam(name) == null)
|
||||
team = FightScoreboard.getScoreboard().registerNewTeam(name);
|
||||
else
|
||||
team = FightScoreboard.getScoreboard().getTeam(name);
|
||||
team.setColor(color);
|
||||
team.setAllowFriendlyFire(false);
|
||||
team.setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.FOR_OWN_TEAM);
|
||||
}
|
||||
|
||||
public void teleportToSpawn(){
|
||||
for(FightPlayer player : players){
|
||||
player.getPlayer().teleport(spawn);
|
||||
}
|
||||
}
|
||||
|
||||
public FightPlayer getFightPlayer(Player player) {
|
||||
for(FightPlayer fightPlayer : players) {
|
||||
if(fightPlayer.getPlayer().equals(player))
|
||||
return fightPlayer;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean allPlayersOut() {
|
||||
for(FightPlayer fightPlayer : players) {
|
||||
if(fightPlayer.isLiving())
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean isPlayerInTeam(Player player) {
|
||||
for(FightPlayer fightPlayer : players) {
|
||||
if(fightPlayer.getPlayer().equals(player))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean isPlayerLeader(Player player) {
|
||||
if(leader != null)
|
||||
return leader.getPlayer().equals(player);
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
public void broadcast(String message) {
|
||||
for(FightPlayer fightPlayer : players) {
|
||||
fightPlayer.sendMessage(message);
|
||||
}
|
||||
}
|
||||
|
||||
public FightPlayer addMember(Player player) {
|
||||
final List<Pair<Integer, Integer>> chunksToReload = TechHider.prepareChunkReload(player);
|
||||
FightPlayer fightPlayer = new FightPlayer(player, this);
|
||||
players.add(fightPlayer);
|
||||
invited.remove(player);
|
||||
team.addEntry(player.getName());
|
||||
|
||||
player.setGameMode(GameMode.ADVENTURE);
|
||||
player.teleport(spawn);
|
||||
if(KitManager.getKits(false).size() > 1)
|
||||
player.getInventory().setItem(1, new ItemBuilder(Material.LEATHER_CHESTPLATE).removeAllAtributs().addEnchantment(Enchantment.DURABILITY, 1).setDisplayName("§eKit wählen").build());
|
||||
player.getInventory().setItem(4, new ItemBuilder(Material.BEACON).removeAllAtributs().setDisplayName("§eRespawn").build());
|
||||
TechHider.reloadChunks(player, chunksToReload);
|
||||
return fightPlayer;
|
||||
}
|
||||
|
||||
public void removePlayer(Player player) {
|
||||
FightPlayer fightPlayer = getFightPlayer(player);
|
||||
if(fightPlayer == null)
|
||||
return;
|
||||
|
||||
final List<Pair<Integer, Integer>> chunksToReload = TechHider.prepareChunkReload(player);
|
||||
players.remove(fightPlayer);
|
||||
team.removeEntry(player.getName());
|
||||
fightPlayer.getPlayer().getInventory().clear();
|
||||
if(fightPlayer.equals(leader) && FightSystem.getFightState() == FightState.SETUP){
|
||||
this.leader = null;
|
||||
if(!players.isEmpty()) {
|
||||
setLeader(players.iterator().next());
|
||||
Bukkit.broadcastMessage(FightSystem.PREFIX + "§aDer Spieler §e" + leader.getPlayer().getName() + " §aist nun Leader von Team " + getName() + "§a!");
|
||||
}else if(!Config.event()){
|
||||
Bukkit.broadcastMessage(FightSystem.PREFIX + "§cTeam " + getName() + " §chat keine Spieler mehr.\n Arena schließt...");
|
||||
Bukkit.shutdown();
|
||||
}else{
|
||||
setLeader(null);
|
||||
}
|
||||
}
|
||||
|
||||
player.setGameMode(GameMode.SPECTATOR);
|
||||
player.teleport(Config.SpecSpawn);
|
||||
TechHider.reloadChunks(player, chunksToReload);
|
||||
}
|
||||
|
||||
public boolean hasTeamLeader() {
|
||||
return leader != null;
|
||||
}
|
||||
|
||||
public boolean isBlue(){
|
||||
return blue;
|
||||
}
|
||||
|
||||
public FightPlayer getLeader() {
|
||||
return leader;
|
||||
}
|
||||
|
||||
public void setLeader(FightPlayer leader) {
|
||||
this.leader = leader;
|
||||
if (leader == null)
|
||||
return;
|
||||
|
||||
leader.setKit(KitManager.getKitByName(Config.LeaderDefault));
|
||||
Inventory inventory = leader.getPlayer().getInventory();
|
||||
if (KitManager.getKits(true).size() > 1)
|
||||
inventory.setItem(1, new ItemBuilder(Material.LEATHER_CHESTPLATE).removeAllAtributs().addEnchantment(Enchantment.DURABILITY, 1).setDisplayName("§eKit wählen").build());
|
||||
else
|
||||
inventory.setItem(1, new ItemBuilder(Material.AIR).build());
|
||||
if(!Config.event()){
|
||||
inventory.setItem(0, new ItemBuilder(Material.PAPER).removeAllAtributs().setDisplayName("§eSpieler einladen").build());
|
||||
inventory.setItem(2, new ItemBuilder(Material.FIREWORK_CHARGE).removeAllAtributs().setDisplayName("§cSpieler rauswerfen").build());
|
||||
inventory.setItem(3, new ItemBuilder(Material.INK_SACK, (short) 10).removeAllAtributs().addEnchantment(Enchantment.DURABILITY, 1).setDisplayName("§cNicht bereit").build());
|
||||
inventory.setItem(5, new ItemBuilder(Material.INK_SACK, (short) 1).removeAllAtributs().addEnchantment(Enchantment.DURABILITY, 1).setDisplayName("§4Abbrechen").build());
|
||||
}
|
||||
inventory.setItem(7, new ItemBuilder(Material.CAULDRON_ITEM).removeAllAtributs().addEnchantment(Enchantment.DURABILITY, 1).setDisplayName("§e" + Config.GameName + " wählen").build());
|
||||
}
|
||||
|
||||
public Set<FightPlayer> getPlayers() {
|
||||
return players;
|
||||
}
|
||||
|
||||
public boolean isReady() {
|
||||
return ready;
|
||||
}
|
||||
|
||||
private void pasteSchematic(){
|
||||
File file = new File(Config.SchematicDirectory + WarkingUser.get(schematic.getSchemOwner()).getUUID().toString(), schematic.getSchemName() + ".schematic");
|
||||
com.boydti.fawe.object.schematic.Schematic schem;
|
||||
try {
|
||||
schem = FaweAPI.load(file);
|
||||
if(schem.getClipboard() == null)
|
||||
throw new IOException();
|
||||
}catch(IOException e){
|
||||
Bukkit.getLogger().log(Level.SEVERE, "Failed loading Schematic", e);
|
||||
return;
|
||||
}
|
||||
|
||||
World w = new BukkitWorld(Bukkit.getWorlds().get(0));
|
||||
Vector dimensions = schem.getClipboard().getDimensions();
|
||||
Vector v;
|
||||
Vector offset = new Vector(schem.getClipboard().getRegion().getMinimumPoint()).subtract(schem.getClipboard().getOrigin());
|
||||
AffineTransform aT = new AffineTransform();
|
||||
if(rotate){
|
||||
aT = aT.rotateY(180);
|
||||
v = paste.add(dimensions.getX()/2 + dimensions.getX()%2, 0, dimensions.getZ()/2 + dimensions.getZ()%2).subtract(offset.multiply(-1, 1, -1)).subtract(1, 0, 1);
|
||||
}else{
|
||||
v = paste.subtract(dimensions.getX()/2 - dimensions.getX()%2, 0, dimensions.getZ()/2 - dimensions.getZ()%2).subtract(offset);
|
||||
}
|
||||
|
||||
if(Config.AlignWater){
|
||||
Vector it = schem.getClipboard().getMinimumPoint();
|
||||
int depth = 0;
|
||||
while(!schem.getClipboard().getBlock(it).isAir()){
|
||||
depth++;
|
||||
it = it.setY(it.getY()+1);
|
||||
}
|
||||
v = v.add(0, Config.WaterDepth - depth, 0);
|
||||
}
|
||||
|
||||
EditSession e = schem.paste(w, v, false, true, aT);
|
||||
replaceTeamColor(e);
|
||||
Bukkit.getScheduler().runTaskLater(FightSystem.getPlugin(), this::teleportToSpawn,40);
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
private void replaceTeamColor(EditSession e){
|
||||
CuboidRegion region = new CuboidRegion(corner, corner.add(Config.Schemsize));
|
||||
|
||||
DyeColor c = ColorConverter.chat2dye(color);
|
||||
|
||||
try {
|
||||
e.replaceBlocks(region, WOOL_SET, new BaseBlock(WOOL.getId(), c.getWoolData()));
|
||||
e.replaceBlocks(region, CONCRETE_SET, new BaseBlock(CONCRETE.getId(), c.getWoolData()));
|
||||
e.replaceBlocks(region, CLAY_SET, new BaseBlock(CLAY.getId(), c.getWoolData()));
|
||||
e.replaceBlocks(region, GLASS_SET, new BaseBlock(GLASS.getId(), c.getWoolData()));
|
||||
e.replaceBlocks(region, GLASS_PANE_SET, new BaseBlock(GLASS_PANE.getId(), c.getWoolData()));
|
||||
} catch (MaxChangedBlocksException ex) {
|
||||
// ignore, will never occur
|
||||
}
|
||||
|
||||
e.flushQueue();
|
||||
}
|
||||
|
||||
public void pasteDummy(){
|
||||
List<Schematic> publics = Schematic.getSchemsOfType(0, Config.SchematicType);
|
||||
if(publics.isEmpty())
|
||||
return;
|
||||
|
||||
schematic = publics.get(0);
|
||||
pasteSchematic();
|
||||
}
|
||||
|
||||
public void setSchematic(Schematic schematic){
|
||||
this.schematic = schematic;
|
||||
broadcast(FightSystem.PREFIX + "§7Das §e" + Config.GameName + " " + schematic.getSchemName() + " §7wird für den Kampf verwendet!");
|
||||
|
||||
if(!Config.test())
|
||||
leader.getPlayer().getInventory().clear(7);
|
||||
|
||||
if(Config.test())
|
||||
pasteSchematic();
|
||||
else if(Fight.getOpposite(this).hasSchematic()){
|
||||
pasteSchematic();
|
||||
Fight.getOpposite(this).pasteSchematic();
|
||||
}
|
||||
}
|
||||
|
||||
public boolean hasSchematic(){
|
||||
return schematic != null;
|
||||
}
|
||||
|
||||
public void setReady(boolean ready) {
|
||||
Player l = leader.getPlayer();
|
||||
|
||||
if(schematic == null){
|
||||
l.sendMessage(FightSystem.PREFIX + "§cZuerst muss eine Schematic gewählt sein!");
|
||||
return;
|
||||
}
|
||||
|
||||
this.ready = ready;
|
||||
if(ready) {
|
||||
l.getInventory().setItem(3, new ItemBuilder(Material.INK_SACK, (short) 8).removeAllAtributs().addEnchantment(Enchantment.DURABILITY,1 ).setDisplayName("§aBereit").build());
|
||||
broadcast(FightSystem.PREFIX + "§aEuer Team ist nun bereit!");
|
||||
if(Fight.getOpposite(this).isReady() || Config.test()) {
|
||||
FightSystem.setPreRunningState();
|
||||
}
|
||||
} else {
|
||||
l.getInventory().setItem(3, new ItemBuilder(Material.INK_SACK, (short) 10).removeAllAtributs().addEnchantment(Enchantment.DURABILITY, 1).setDisplayName("§cNicht bereit").build());
|
||||
broadcast(FightSystem.PREFIX + "§cEuer Team ist nicht mehr bereit!");
|
||||
}
|
||||
}
|
||||
|
||||
public Set<Player> getInvited() {
|
||||
return invited;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return prefix + name;
|
||||
}
|
||||
|
||||
public String getPrefix() {
|
||||
return prefix;
|
||||
}
|
||||
|
||||
public Location getSpawn() {
|
||||
return spawn;
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package me.yaruma.fightsystem.kit;
|
||||
package de.steamwar.fightsystem.kit;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
@ -6,14 +6,12 @@ import org.bukkit.inventory.ItemStack;
|
||||
public class Kit {
|
||||
|
||||
private String name;
|
||||
private int price;
|
||||
private boolean leaderAllowed;
|
||||
private boolean memberAllowed;
|
||||
private ItemStack[] inventory;
|
||||
|
||||
public Kit(String name, int price, boolean leaderAllowed, boolean memberAllowed, ItemStack[] inventory) {
|
||||
Kit(String name, boolean leaderAllowed, boolean memberAllowed, ItemStack[] inventory) {
|
||||
this.name = name;
|
||||
this.price = price;
|
||||
this.leaderAllowed = leaderAllowed;
|
||||
this.memberAllowed = memberAllowed;
|
||||
this.inventory = inventory;
|
||||
@ -23,10 +21,6 @@ public class Kit {
|
||||
return name;
|
||||
}
|
||||
|
||||
public int getPrice() {
|
||||
return price;
|
||||
}
|
||||
|
||||
public boolean isLeaderAllowed() {
|
||||
return leaderAllowed;
|
||||
}
|
||||
@ -35,7 +29,7 @@ public class Kit {
|
||||
return memberAllowed;
|
||||
}
|
||||
|
||||
public ItemStack[] getInventory() {
|
||||
ItemStack[] getInventory() {
|
||||
return inventory;
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
package me.yaruma.fightsystem.kit;
|
||||
package de.steamwar.fightsystem.kit;
|
||||
|
||||
import de.warking.hunjy.CoinSystem.CoinSystem;
|
||||
import me.yaruma.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
@ -11,53 +11,46 @@ import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
|
||||
public class KitManager {
|
||||
|
||||
public static final FightSystem instance = FightSystem.getPlugin();
|
||||
private static final String kitsPath = "plugins/" + FightSystem.getPlugin().getName() + "/kits.data";
|
||||
private KitManager(){}
|
||||
|
||||
private static final String KITS_PATH = "plugins/" + FightSystem.getPlugin().getName() + "/kits.data";
|
||||
private static final File kits = new File(KITS_PATH);
|
||||
private static final FileConfiguration kitData = YamlConfiguration.loadConfiguration(kits);
|
||||
|
||||
private static final ArrayList<Kit> loadedKits = new ArrayList<>();
|
||||
|
||||
public static void saveInventory(String kitName, Player player){
|
||||
loadedKits.add(new Kit(kitName, 0, true, true, player.getInventory().getContents()));
|
||||
loadedKits.add(new Kit(kitName, true, true, player.getInventory().getContents()));
|
||||
saveAllKits();
|
||||
}
|
||||
|
||||
public static boolean canBuy(Player player, String kitName) {
|
||||
if(getKitByName(kitName).getPrice() <= CoinSystem.getCoinsManager(player).getCoins()) {
|
||||
return true;
|
||||
} else
|
||||
return false;
|
||||
}
|
||||
|
||||
public void buyKit() {
|
||||
//wird spaeter gemacht
|
||||
}
|
||||
|
||||
public static boolean ownsKit(Player player) {
|
||||
return true; //wird spaeter gemacht
|
||||
}
|
||||
|
||||
public static Kit loadKitFromConfig(String name) {
|
||||
FileConfiguration data = instance.getKitData();
|
||||
private static Kit loadKitFromConfig(String name) {
|
||||
String path = "Kits." + name;
|
||||
if(data.contains(path)) {
|
||||
List<ItemStack> items = (List<ItemStack>) data.getList(path + ".Items");
|
||||
if(kitData.contains(path)) {
|
||||
List<ItemStack> items = (List<ItemStack>) kitData.getList(path + ".Items");
|
||||
|
||||
int price = data.getInt(path + ".Price");
|
||||
boolean leaderAllowed = data.getBoolean(path + ".LeaderAllowed");
|
||||
boolean memberAllowed = data.getBoolean(path + ".MemberAllowed");
|
||||
boolean leaderAllowed = kitData.getBoolean(path + ".LeaderAllowed");
|
||||
boolean memberAllowed = kitData.getBoolean(path + ".MemberAllowed");
|
||||
|
||||
Kit kit = new Kit(name, price, leaderAllowed, memberAllowed, items.toArray(new ItemStack[1]));
|
||||
return kit;
|
||||
return new Kit(name, leaderAllowed, memberAllowed, items.toArray(new ItemStack[1]));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void loadAllKits() {
|
||||
if(instance.getKitData().getConfigurationSection("Kits") != null) {
|
||||
for(String key : instance.getKitData().getConfigurationSection("Kits").getKeys(false)) {
|
||||
if(!new File(KITS_PATH).exists()) {
|
||||
saveAllKits();
|
||||
Bukkit.getLogger().log(Level.INFO, "kits.data erstellt!");
|
||||
Bukkit.shutdown();
|
||||
return;
|
||||
}
|
||||
|
||||
if(kitData.getConfigurationSection("Kits") != null) {
|
||||
for(String key : kitData.getConfigurationSection("Kits").getKeys(false)) {
|
||||
loadedKits.add(loadKitFromConfig(key));
|
||||
}
|
||||
}
|
||||
@ -68,13 +61,15 @@ public class KitManager {
|
||||
for(Kit k : loadedKits){
|
||||
String path = "Kits." + k.getName();
|
||||
yamlConfiguration.set(path + ".Items", k.getInventory());
|
||||
yamlConfiguration.set(path + ".Price", k.getPrice());
|
||||
yamlConfiguration.set(path + ".LeaderAllowed", k.isLeaderAllowed());
|
||||
yamlConfiguration.set(path + ".MemberAllowed", k.isMemberAllowed());
|
||||
}
|
||||
|
||||
try {
|
||||
yamlConfiguration.save(new File(kitsPath));
|
||||
}catch(IOException ignored){}
|
||||
yamlConfiguration.save(kits);
|
||||
}catch(IOException e){
|
||||
Bukkit.getLogger().log(Level.SEVERE, "Failed to save kits.data", e);
|
||||
}
|
||||
}
|
||||
|
||||
public static Kit getKitByName(String kitName) {
|
45
src/de/steamwar/fightsystem/listener/BasicListener.java
Normale Datei
45
src/de/steamwar/fightsystem/listener/BasicListener.java
Normale Datei
@ -0,0 +1,45 @@
|
||||
package de.steamwar.fightsystem.listener;
|
||||
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.fight.Fight;
|
||||
import de.steamwar.fightsystem.fight.FightState;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.HandlerList;
|
||||
import org.bukkit.event.Listener;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
public abstract class BasicListener implements Listener {
|
||||
|
||||
private static final List<BasicListener> listeners = new LinkedList<>();
|
||||
|
||||
BasicListener(){
|
||||
Bukkit.getPluginManager().registerEvents(this, FightSystem.getPlugin());
|
||||
listeners.add(this);
|
||||
}
|
||||
|
||||
public static void fightStateChange(FightState state){
|
||||
for (int i = listeners.size() - 1; i >= 0; i--) {
|
||||
listeners.get(i).stateChange(state);
|
||||
}
|
||||
}
|
||||
|
||||
boolean notRunning(){
|
||||
return FightSystem.getFightState() != FightState.RUNNING;
|
||||
}
|
||||
|
||||
boolean notFighting(Player p){
|
||||
return Fight.getFightPlayer(p) == null;
|
||||
}
|
||||
|
||||
void stateChange(FightState state){
|
||||
//Unused
|
||||
}
|
||||
|
||||
void disable(){
|
||||
HandlerList.unregisterAll(this);
|
||||
listeners.remove(this);
|
||||
}
|
||||
}
|
31
src/de/steamwar/fightsystem/listener/BlockListener.java
Normale Datei
31
src/de/steamwar/fightsystem/listener/BlockListener.java
Normale Datei
@ -0,0 +1,31 @@
|
||||
package de.steamwar.fightsystem.listener;
|
||||
|
||||
import net.md_5.bungee.api.ChatMessageType;
|
||||
import net.md_5.bungee.api.chat.TextComponent;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
|
||||
public class BlockListener extends BasicListener {
|
||||
|
||||
@EventHandler
|
||||
public void handleBlockBreak(BlockBreakEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if(notRunning() || notFighting(player)){
|
||||
event.setCancelled(true);
|
||||
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText("§cDu darfst erst nach Fightbeginn Blöcke abbauen!"));
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void handleBlockPlace(BlockPlaceEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if(notRunning() || notFighting(player)) {
|
||||
event.setCancelled(true);
|
||||
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText("§cDu darfst erst nach Fightbeginn Blöcke setzen!"));
|
||||
}
|
||||
}
|
||||
}
|
69
src/de/steamwar/fightsystem/listener/EntityDamageListener.java
Normale Datei
69
src/de/steamwar/fightsystem/listener/EntityDamageListener.java
Normale Datei
@ -0,0 +1,69 @@
|
||||
package de.steamwar.fightsystem.listener;
|
||||
|
||||
import de.steamwar.fightsystem.fight.Fight;
|
||||
import net.md_5.bungee.api.ChatMessageType;
|
||||
import net.md_5.bungee.api.chat.TextComponent;
|
||||
import org.bukkit.entity.Arrow;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import org.bukkit.event.entity.EntityDamageEvent;
|
||||
|
||||
public class EntityDamageListener extends BasicListener {
|
||||
|
||||
@EventHandler
|
||||
public void handleEntityDamage(EntityDamageEvent event) {
|
||||
if(notRunning()){
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if(!(event.getEntity() instanceof Player))
|
||||
return;
|
||||
|
||||
if(notFighting((Player)event.getEntity()))
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void handleEntityDamageByEntity(EntityDamageByEntityEvent event) {
|
||||
if(notRunning()) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if(!(event.getEntity() instanceof Player))
|
||||
//Target is not a player
|
||||
return;
|
||||
|
||||
Player player = ((Player) event.getEntity()).getPlayer();
|
||||
Player damager;
|
||||
|
||||
if(event.getDamager() instanceof Player) {
|
||||
damager = ((Player) event.getDamager()).getPlayer();
|
||||
}else if(event.getDamager() instanceof Arrow) {
|
||||
Arrow damagerArrow = (Arrow) event.getDamager();
|
||||
if(!(damagerArrow.getShooter() instanceof Player))
|
||||
//Shooter is not a player
|
||||
return;
|
||||
|
||||
damagerArrow.setFireTicks(0);
|
||||
player.setFireTicks(0);
|
||||
damager = (Player) damagerArrow.getShooter();
|
||||
}else{
|
||||
//Damager is not a player
|
||||
return;
|
||||
}
|
||||
|
||||
if(notFighting(damager)){
|
||||
event.setCancelled(true);
|
||||
//Damager is not fighting
|
||||
return;
|
||||
}
|
||||
|
||||
if(Fight.getPlayerTeam(player) == Fight.getPlayerTeam(damager)) {
|
||||
event.setCancelled(true);
|
||||
damager.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText("§cDu darfst deinen Teamkollegen keinen Schaden zufügen!"));
|
||||
}
|
||||
}
|
||||
}
|
19
src/de/steamwar/fightsystem/listener/EntityExplodeListener.java
Normale Datei
19
src/de/steamwar/fightsystem/listener/EntityExplodeListener.java
Normale Datei
@ -0,0 +1,19 @@
|
||||
package de.steamwar.fightsystem.listener;
|
||||
|
||||
import de.steamwar.fightsystem.utils.WaterRemover;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.EntityExplodeEvent;
|
||||
|
||||
public class EntityExplodeListener extends BasicListener {
|
||||
|
||||
@EventHandler
|
||||
public void handleEntityExplode(EntityExplodeEvent event) {
|
||||
if(notRunning()){
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
event.setYield(0); //No drops (additionally to world config
|
||||
WaterRemover.add(event.blockList());
|
||||
}
|
||||
}
|
50
src/de/steamwar/fightsystem/listener/EventJoinListener.java
Normale Datei
50
src/de/steamwar/fightsystem/listener/EventJoinListener.java
Normale Datei
@ -0,0 +1,50 @@
|
||||
package de.steamwar.fightsystem.listener;
|
||||
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.fight.Fight;
|
||||
import de.steamwar.fightsystem.fight.FightPlayer;
|
||||
import de.steamwar.fightsystem.fight.FightState;
|
||||
import de.steamwar.fightsystem.fight.FightTeam;
|
||||
import de.steamwar.fightsystem.utils.Config;
|
||||
import de.warking.hunjy.MySQL.WarkingUser;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
|
||||
public class EventJoinListener extends BasicListener {
|
||||
|
||||
@EventHandler
|
||||
public void handlePlayerJoin(PlayerJoinEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
WarkingUser user = WarkingUser.get(player.getUniqueId());
|
||||
|
||||
FightTeam team = null;
|
||||
if(user.getTeam() == Config.EventTeamBlueID)
|
||||
team = Fight.getBlueTeam();
|
||||
else if(user.getTeam() == Config.EventTeamRedID)
|
||||
team = Fight.getRedTeam();
|
||||
|
||||
if(team != null && team.getPlayers().size() < Config.MaximumTeamMembers){
|
||||
FightPlayer fp = team.addMember(player);
|
||||
if(!team.hasTeamLeader())
|
||||
team.setLeader(fp);
|
||||
}
|
||||
|
||||
if(user.getId() == FightSystem.getEventFight().getKampfleiter())
|
||||
FightSystem.setEventLeiter(player);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void handlePlayerLeave(PlayerQuitEvent event){
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if(player == FightSystem.getEventLeiter())
|
||||
FightSystem.setEventLeiter(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
void stateChange(FightState state){
|
||||
disable();
|
||||
}
|
||||
}
|
@ -1,10 +1,9 @@
|
||||
package me.yaruma.fightsystem.listener;
|
||||
package de.steamwar.fightsystem.listener;
|
||||
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.FoodLevelChangeEvent;
|
||||
|
||||
public class FoodLevelChangeListener implements Listener {
|
||||
public class FoodLevelChangeListener extends BasicListener {
|
||||
|
||||
@EventHandler
|
||||
public void handleFoodLevelChange(FoodLevelChangeEvent event) {
|
@ -1,34 +1,35 @@
|
||||
package me.yaruma.fightsystem.listener;
|
||||
package de.steamwar.fightsystem.listener;
|
||||
|
||||
import me.yaruma.fightsystem.FightSystem;
|
||||
import me.yaruma.fightsystem.commands.GUI;
|
||||
import me.yaruma.fightsystem.fight.Fight;
|
||||
import me.yaruma.fightsystem.fight.FightState;
|
||||
import me.yaruma.fightsystem.fight.FightTeam;
|
||||
import me.yaruma.fightsystem.utils.Config;
|
||||
import de.steamwar.fightsystem.fight.Fight;
|
||||
import de.steamwar.fightsystem.fight.FightTeam;
|
||||
import de.steamwar.fightsystem.utils.Config;
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.commands.GUI;
|
||||
import de.steamwar.fightsystem.fight.FightState;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
public class PlayerInteractListener implements Listener {
|
||||
public class HotbarGUIListener extends BasicListener {
|
||||
|
||||
@EventHandler
|
||||
public void handlePlayerInteract(PlayerInteractEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
if(FightSystem.getFightState() == FightState.SETUP &&
|
||||
event.getItem() != null &&
|
||||
Fight.getPlayerTeam(player) != null) {
|
||||
if(event.getItem() != null) {
|
||||
FightTeam fightTeam = Fight.getPlayerTeam(player);
|
||||
if(fightTeam == null)
|
||||
return;
|
||||
|
||||
ItemMeta itemMeta = event.getItem().getItemMeta();
|
||||
String displayName = itemMeta.getDisplayName();
|
||||
event.setCancelled(true);
|
||||
|
||||
if(displayName == null)
|
||||
return;
|
||||
|
||||
FightTeam fightTeam = Fight.getPlayerTeam(player);
|
||||
event.setCancelled(true);
|
||||
|
||||
if(displayName.equals("§e" + Config.GameName + " wählen")){
|
||||
GUI.preSchemDialog(player);
|
||||
return;
|
||||
@ -54,9 +55,15 @@ public class PlayerInteractListener implements Listener {
|
||||
case "§eKit wählen":
|
||||
GUI.kitSelection(player);
|
||||
break;
|
||||
case "§eRespawn":
|
||||
player.teleport(fightTeam.getSpawn());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
void stateChange(FightState state){
|
||||
disable();
|
||||
}
|
||||
}
|
@ -1,17 +1,17 @@
|
||||
package me.yaruma.fightsystem.listener;
|
||||
package de.steamwar.fightsystem.listener;
|
||||
|
||||
import me.yaruma.fightsystem.FightSystem;
|
||||
import me.yaruma.fightsystem.fight.FightState;
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.fight.FightState;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.inventory.InventoryDragEvent;
|
||||
import org.bukkit.event.inventory.InventoryPickupItemEvent;
|
||||
import org.bukkit.event.inventory.InventoryType;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class InventoryListener implements Listener {
|
||||
public class InventoryListener extends BasicListener {
|
||||
|
||||
@EventHandler
|
||||
public void onInventoryClick(InventoryClickEvent event) {
|
||||
@ -21,21 +21,22 @@ public class InventoryListener implements Listener {
|
||||
}
|
||||
|
||||
Inventory clicked = event.getClickedInventory();
|
||||
if (event.getClick().isShiftClick()) {
|
||||
if(event.getClick().isShiftClick()){
|
||||
ItemStack clickedOn = event.getCurrentItem();
|
||||
|
||||
if (clickedOn != null && event.getView().getTopInventory().getType() != InventoryType.CRAFTING && clicked == event.getWhoClicked().getInventory()) {
|
||||
if(
|
||||
clickedOn != null &&
|
||||
event.getView().getTopInventory().getType() != InventoryType.CRAFTING &&
|
||||
clicked == event.getWhoClicked().getInventory())
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}else if (
|
||||
clicked != event.getWhoClicked().getInventory() &&
|
||||
clicked != null &&
|
||||
clicked.getType() != InventoryType.PLAYER &&
|
||||
event.getCursor() != null &&
|
||||
event.getCursor().getType() != Material.AIR){
|
||||
event.getCursor().getType() != Material.AIR)
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onInventoryDrag(InventoryDragEvent event) {
|
||||
@ -55,4 +56,9 @@ public class InventoryListener implements Listener {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onDropPickup(InventoryPickupItemEvent e){
|
||||
e.setCancelled(true);
|
||||
}
|
||||
}
|
39
src/de/steamwar/fightsystem/listener/NormalJoinListener.java
Normale Datei
39
src/de/steamwar/fightsystem/listener/NormalJoinListener.java
Normale Datei
@ -0,0 +1,39 @@
|
||||
package de.steamwar.fightsystem.listener;
|
||||
|
||||
import de.steamwar.fightsystem.countdown.Countdown;
|
||||
import de.steamwar.fightsystem.countdown.NoPlayersOnlineCountdown;
|
||||
import de.steamwar.fightsystem.countdown.SetupOverCountdown;
|
||||
import de.steamwar.fightsystem.fight.Fight;
|
||||
import de.steamwar.fightsystem.fight.FightState;
|
||||
import de.steamwar.fightsystem.fight.FightTeam;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
|
||||
public class NormalJoinListener extends BasicListener {
|
||||
|
||||
@EventHandler
|
||||
public void handlePlayerJoin(PlayerJoinEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
FightTeam fightTeam = Fight.getPlayerTeam(player);
|
||||
|
||||
if (fightTeam == null) {
|
||||
if(!Fight.getRedTeam().hasTeamLeader()) {
|
||||
Fight.getRedTeam().setLeader(Fight.getRedTeam().addMember(player));
|
||||
} else if(!Fight.getBlueTeam().hasTeamLeader()) {
|
||||
Fight.getBlueTeam().setLeader(Fight.getBlueTeam().addMember(player));
|
||||
}
|
||||
}
|
||||
|
||||
if(Fight.getRedTeam().hasTeamLeader() && Fight.getBlueTeam().hasTeamLeader()
|
||||
&& (Fight.getRedTeam().getLeader().getPlayer() == player || Fight.getBlueTeam().getLeader().getPlayer() == player)) {
|
||||
Countdown.cancelTimerType(NoPlayersOnlineCountdown.class);
|
||||
new SetupOverCountdown();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
void stateChange(FightState state){
|
||||
disable();
|
||||
}
|
||||
}
|
@ -1,17 +1,16 @@
|
||||
package me.yaruma.fightsystem.listener;
|
||||
package de.steamwar.fightsystem.listener;
|
||||
|
||||
import me.yaruma.fightsystem.FightSystem;
|
||||
import me.yaruma.fightsystem.fight.FightState;
|
||||
import me.yaruma.fightsystem.utils.Config;
|
||||
import me.yaruma.fightsystem.utils.Region;
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.fight.FightState;
|
||||
import de.steamwar.fightsystem.utils.Config;
|
||||
import de.steamwar.fightsystem.utils.Region;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.BlockPistonExtendEvent;
|
||||
import org.bukkit.event.block.BlockPistonRetractEvent;
|
||||
|
||||
public class PistonListener implements Listener {
|
||||
public class PistonListener extends BasicListener {
|
||||
|
||||
@EventHandler
|
||||
public void handlePistonExtend(BlockPistonExtendEvent e){
|
@ -1,15 +1,15 @@
|
||||
package me.yaruma.fightsystem.listener;
|
||||
package de.steamwar.fightsystem.listener;
|
||||
|
||||
import me.yaruma.fightsystem.fight.Fight;
|
||||
import me.yaruma.fightsystem.fight.FightTeam;
|
||||
import me.yaruma.fightsystem.utils.Config;
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.fight.Fight;
|
||||
import de.steamwar.fightsystem.fight.FightTeam;
|
||||
import de.steamwar.fightsystem.utils.Config;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerChatEvent;
|
||||
|
||||
public class PlayerChatListener implements Listener {
|
||||
public class PlayerChatListener extends BasicListener {
|
||||
|
||||
@EventHandler
|
||||
public void handlePlayerChat(PlayerChatEvent event) {
|
||||
@ -25,6 +25,8 @@ public class PlayerChatListener implements Listener {
|
||||
} else {
|
||||
Bukkit.broadcastMessage(teamName + " " + player.getName() + "§8» §7" + message);
|
||||
}
|
||||
}else if(player == FightSystem.getEventLeiter()){
|
||||
Bukkit.broadcastMessage("§e" + player.getName() + "§8» §e" + message);
|
||||
}else{
|
||||
Bukkit.broadcastMessage("§7" + player.getName() + "§8» §7" + message);
|
||||
}
|
61
src/de/steamwar/fightsystem/listener/PlayerConnectionListener.java
Normale Datei
61
src/de/steamwar/fightsystem/listener/PlayerConnectionListener.java
Normale Datei
@ -0,0 +1,61 @@
|
||||
package de.steamwar.fightsystem.listener;
|
||||
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.fight.Fight;
|
||||
import de.steamwar.fightsystem.fight.FightTeam;
|
||||
import de.steamwar.fightsystem.utils.Config;
|
||||
import de.steamwar.fightsystem.fight.FightPlayer;
|
||||
import de.steamwar.fightsystem.fight.FightState;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
|
||||
public class PlayerConnectionListener extends BasicListener{
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void handlePlayerJoin(PlayerJoinEvent event) {
|
||||
event.setJoinMessage(null);
|
||||
|
||||
Player player = event.getPlayer();
|
||||
player.setHealth(20);
|
||||
player.setFoodLevel(20);
|
||||
|
||||
FightTeam fightTeam = Fight.getPlayerTeam(player);
|
||||
|
||||
if (fightTeam == null) {
|
||||
player.setGameMode(GameMode.SPECTATOR);
|
||||
player.teleport(Config.SpecSpawn);
|
||||
} else {
|
||||
player.teleport(fightTeam.getSpawn());
|
||||
if(FightSystem.getFightState() == FightState.SETUP)
|
||||
player.setGameMode(GameMode.ADVENTURE);
|
||||
else
|
||||
player.setGameMode(GameMode.SPECTATOR);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void handlePlayerQuit(PlayerQuitEvent event) {
|
||||
event.setQuitMessage(null);
|
||||
|
||||
Player player = event.getPlayer();
|
||||
FightTeam fightTeam = Fight.getPlayerTeam(player);
|
||||
if(fightTeam == null)
|
||||
return;
|
||||
|
||||
FightState fightState = FightSystem.getFightState();
|
||||
if(fightState == FightState.SETUP){
|
||||
fightTeam.removePlayer(player);
|
||||
}else if(fightState == FightState.PRE_RUNNING || fightState == FightState.RUNNING){
|
||||
FightPlayer fightPlayer = fightTeam.getFightPlayer(player);
|
||||
if(fightPlayer.isLiving()) {
|
||||
fightTeam.getFightPlayer(player).setOut();
|
||||
Bukkit.broadcastMessage(FightSystem.PREFIX + "§cDer Spieler " + fightTeam.getPrefix() + player.getName() + " §chat den Kampf verlassen!");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
29
src/de/steamwar/fightsystem/listener/PlayerDeathListener.java
Normale Datei
29
src/de/steamwar/fightsystem/listener/PlayerDeathListener.java
Normale Datei
@ -0,0 +1,29 @@
|
||||
package de.steamwar.fightsystem.listener;
|
||||
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.fight.Fight;
|
||||
import de.steamwar.fightsystem.fight.FightTeam;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
|
||||
public class PlayerDeathListener extends BasicListener {
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void handlePlayerDeath(PlayerDeathEvent event) {
|
||||
Player player = event.getEntity().getPlayer();
|
||||
FightTeam fightTeam = Fight.getPlayerTeam(player);
|
||||
|
||||
if(fightTeam == null)
|
||||
return;
|
||||
|
||||
event.setDeathMessage(FightSystem.PREFIX + "§cDer Spieler " + fightTeam.getPrefix() + player.getName() + " §cist gestorben!");
|
||||
fightTeam.getFightPlayer(player).setOut();
|
||||
player.setGameMode(GameMode.SPECTATOR);
|
||||
player.teleport(fightTeam.getSpawn());
|
||||
Fight.playSound(Sound.ENTITY_WITHER_DEATH, 100.0F, 1.0F);
|
||||
}
|
||||
}
|
79
src/de/steamwar/fightsystem/listener/PlayerMoveListener.java
Normale Datei
79
src/de/steamwar/fightsystem/listener/PlayerMoveListener.java
Normale Datei
@ -0,0 +1,79 @@
|
||||
package de.steamwar.fightsystem.listener;
|
||||
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.fight.Fight;
|
||||
import de.steamwar.fightsystem.fight.FightState;
|
||||
import de.steamwar.fightsystem.fight.FightTeam;
|
||||
import de.steamwar.fightsystem.utils.Config;
|
||||
import de.steamwar.fightsystem.utils.Region;
|
||||
import net.md_5.bungee.api.ChatMessageType;
|
||||
import net.md_5.bungee.api.chat.TextComponent;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.player.PlayerMoveEvent;
|
||||
|
||||
public class PlayerMoveListener extends BasicListener {
|
||||
|
||||
private static final String DENY_ARENA = "§cDu darfst die Arena nicht verlassen";
|
||||
private static final String DENY_TEAM = "§cDu darfst nicht zu den Teams";
|
||||
private static final String DENY_ENTERN = "§cDu darfst nicht entern";
|
||||
|
||||
@EventHandler
|
||||
public void teamAreas(PlayerMoveEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
if(player == FightSystem.getEventLeiter() || Config.test())
|
||||
return;
|
||||
|
||||
Location to = event.getTo();
|
||||
FightTeam fightTeam = Fight.getPlayerTeam(player);
|
||||
|
||||
boolean inArenaY = to.getY() + 1.8 <= Config.upperArenaBorder;
|
||||
|
||||
boolean inBlueArea = inArenaY && Region.isIn2DRange(to, Config.TeamBlueCornerX, Config.TeamBlueCornerZ, Config.SchemsizeX, Config.SchemsizeZ, Config.BorderFromSchematic);
|
||||
boolean inRedArea = inArenaY && Region.isIn2DRange(to, Config.TeamRedCornerX, Config.TeamRedCornerZ, Config.SchemsizeX, Config.SchemsizeZ, Config.BorderFromSchematic);
|
||||
|
||||
if(inBlueArea || inRedArea) {
|
||||
if(fightTeam == null)
|
||||
reset(event, DENY_TEAM);
|
||||
}else if(fightTeam != null && (
|
||||
!FightSystem.isEntern() || player.getGameMode() == GameMode.SPECTATOR)){
|
||||
reset(event, DENY_ENTERN);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void arenaBorder(PlayerMoveEvent event){
|
||||
Player player = event.getPlayer();
|
||||
Location to = event.getTo();
|
||||
|
||||
//Check in Arena
|
||||
if(!Region.isIn2DRegion(to, Config.ArenaMinX, Config.ArenaMinZ, Config.ArenaMaxX, Config.ArenaMaxZ)){
|
||||
reset(event, DENY_ARENA);
|
||||
return;
|
||||
}
|
||||
|
||||
FightTeam team = Fight.getPlayerTeam(player);
|
||||
boolean inArenaY = to.getY() + 1.8 <= Config.upperArenaBorder;
|
||||
|
||||
if(to.getY() <= Config.underArenaBorder) {
|
||||
if(player.getGameMode() == GameMode.SPECTATOR){
|
||||
reset(event, DENY_ARENA);
|
||||
}else if(FightSystem.getFightState() == FightState.RUNNING)
|
||||
player.damage(2);
|
||||
else if(team != null){
|
||||
player.teleport(team.getSpawn());
|
||||
}else
|
||||
reset(event, DENY_ARENA);
|
||||
}else if(team != null && !inArenaY){
|
||||
reset(event, DENY_ARENA);
|
||||
}
|
||||
}
|
||||
|
||||
private void reset(PlayerMoveEvent event, String message){
|
||||
Player player = event.getPlayer();
|
||||
player.teleport(event.getFrom());
|
||||
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(message));
|
||||
}
|
||||
}
|
@ -1,14 +1,13 @@
|
||||
package me.yaruma.fightsystem.listener;
|
||||
package de.steamwar.fightsystem.listener;
|
||||
|
||||
import me.yaruma.fightsystem.fight.Fight;
|
||||
import me.yaruma.fightsystem.fight.FightTeam;
|
||||
import me.yaruma.fightsystem.utils.Config;
|
||||
import de.steamwar.fightsystem.fight.Fight;
|
||||
import de.steamwar.fightsystem.fight.FightTeam;
|
||||
import de.steamwar.fightsystem.utils.Config;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerRespawnEvent;
|
||||
|
||||
public class PlayerRespawnListener implements Listener {
|
||||
public class PlayerRespawnListener extends BasicListener {
|
||||
|
||||
@EventHandler
|
||||
public void handlePlayerRespawn(PlayerRespawnEvent event) {
|
17
src/de/steamwar/fightsystem/listener/PlayerTeleportListener.java
Normale Datei
17
src/de/steamwar/fightsystem/listener/PlayerTeleportListener.java
Normale Datei
@ -0,0 +1,17 @@
|
||||
package de.steamwar.fightsystem.listener;
|
||||
|
||||
import net.md_5.bungee.api.ChatMessageType;
|
||||
import net.md_5.bungee.api.chat.TextComponent;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.player.PlayerTeleportEvent;
|
||||
|
||||
public class PlayerTeleportListener extends BasicListener {
|
||||
|
||||
@EventHandler
|
||||
public void onTpGM3(PlayerTeleportEvent e) {
|
||||
if (e.getCause() == PlayerTeleportEvent.TeleportCause.SPECTATE) {
|
||||
e.setCancelled(true);
|
||||
e.getPlayer().spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText("§cDu darfst diese Teleportfunktion nicht benutzen!"));
|
||||
}
|
||||
}
|
||||
}
|
@ -1,13 +1,14 @@
|
||||
package me.yaruma.fightsystem.listener;
|
||||
package de.steamwar.fightsystem.listener;
|
||||
|
||||
import me.yaruma.fightsystem.FightSystem;
|
||||
import me.yaruma.fightsystem.fight.FightState;
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.fight.FightState;
|
||||
import net.md_5.bungee.api.ChatMessageType;
|
||||
import net.md_5.bungee.api.chat.TextComponent;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.ProjectileLaunchEvent;
|
||||
|
||||
public class ProjectileLaunchListener implements Listener {
|
||||
public class ProjectileLaunchListener extends BasicListener {
|
||||
|
||||
@EventHandler
|
||||
public void handleProjectileLaunch(ProjectileLaunchEvent event) {
|
||||
@ -15,7 +16,7 @@ public class ProjectileLaunchListener implements Listener {
|
||||
event.setCancelled(true);
|
||||
if(event.getEntity().getShooter() instanceof Player){
|
||||
Player player = (Player) event.getEntity().getShooter();
|
||||
player.sendMessage(FightSystem.PREFIX + "§cDu kannst den Bogen erst nach Fightbeginn nutzen!");
|
||||
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText("§cDu darfst den Bogen erst nach Fightbeginn nutzen!"));
|
||||
}
|
||||
}
|
||||
}
|
48
src/de/steamwar/fightsystem/listener/TestListener.java
Normale Datei
48
src/de/steamwar/fightsystem/listener/TestListener.java
Normale Datei
@ -0,0 +1,48 @@
|
||||
package de.steamwar.fightsystem.listener;
|
||||
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.countdown.Countdown;
|
||||
import de.steamwar.fightsystem.countdown.NoPlayersOnlineCountdown;
|
||||
import de.steamwar.fightsystem.fight.Fight;
|
||||
import de.steamwar.fightsystem.fight.FightState;
|
||||
import de.steamwar.fightsystem.fight.FightTeam;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.permissions.PermissionAttachment;
|
||||
|
||||
public class TestListener extends BasicListener {
|
||||
|
||||
@EventHandler
|
||||
public void handlePlayerJoin(PlayerJoinEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
FightTeam fightTeam = Fight.getPlayerTeam(player);
|
||||
|
||||
if (fightTeam == null && (!Fight.getRedTeam().hasTeamLeader() || !Fight.getBlueTeam().hasTeamLeader())) {
|
||||
player.sendMessage(FightSystem.PREFIX + "§7Werde zum Teamleader mit §8/§eleader");
|
||||
}
|
||||
|
||||
Countdown.cancelTimerType(NoPlayersOnlineCountdown.class);
|
||||
|
||||
|
||||
PermissionAttachment attachment = player.addAttachment(FightSystem.getPlugin());
|
||||
attachment.setPermission("fawe.permpack.basic", true);
|
||||
attachment.setPermission("bukkit.command.gamemode", true);
|
||||
attachment.setPermission("bukkit.command.teleport", true);
|
||||
attachment.setPermission("worldedit.navigation.jumpto.tool", true);
|
||||
attachment.setPermission("worldedit.navigation.thru.tool", true);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void handlePlayerQuit(PlayerQuitEvent event){
|
||||
if(Bukkit.getOnlinePlayers().isEmpty())
|
||||
Bukkit.shutdown();
|
||||
}
|
||||
|
||||
@Override
|
||||
void stateChange(FightState state){
|
||||
disable();
|
||||
}
|
||||
}
|
38
src/de/steamwar/fightsystem/utils/ColorConverter.java
Normale Datei
38
src/de/steamwar/fightsystem/utils/ColorConverter.java
Normale Datei
@ -0,0 +1,38 @@
|
||||
package de.steamwar.fightsystem.utils;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.DyeColor;
|
||||
|
||||
import java.util.EnumMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class ColorConverter {
|
||||
private ColorConverter(){}
|
||||
|
||||
private static final Map<ChatColor, DyeColor> chat2dye = new EnumMap<>(ChatColor.class);
|
||||
|
||||
static{
|
||||
chat2dye.put(ChatColor.WHITE, DyeColor.WHITE);
|
||||
chat2dye.put(ChatColor.GOLD, DyeColor.ORANGE);
|
||||
chat2dye.put(ChatColor.LIGHT_PURPLE, DyeColor.MAGENTA);
|
||||
chat2dye.put(ChatColor.BLUE, DyeColor.LIGHT_BLUE);
|
||||
chat2dye.put(ChatColor.YELLOW, DyeColor.YELLOW);
|
||||
chat2dye.put(ChatColor.GREEN, DyeColor.LIME);
|
||||
chat2dye.put(ChatColor.RED, DyeColor.RED);
|
||||
chat2dye.put(ChatColor.DARK_GRAY, DyeColor.GRAY);
|
||||
chat2dye.put(ChatColor.GRAY, DyeColor.SILVER);
|
||||
chat2dye.put(ChatColor.DARK_AQUA, DyeColor.CYAN);
|
||||
chat2dye.put(ChatColor.DARK_PURPLE, DyeColor.PURPLE);
|
||||
chat2dye.put(ChatColor.DARK_BLUE, DyeColor.BLUE);
|
||||
chat2dye.put(ChatColor.AQUA, DyeColor.CYAN);
|
||||
chat2dye.put(ChatColor.DARK_GREEN, DyeColor.GREEN);
|
||||
chat2dye.put(ChatColor.DARK_RED, DyeColor.RED);
|
||||
chat2dye.put(ChatColor.BLACK, DyeColor.BLACK);
|
||||
|
||||
//Rosa 9pink, Braun 3brown
|
||||
}
|
||||
|
||||
public static DyeColor chat2dye(ChatColor color){
|
||||
return chat2dye.get(color);
|
||||
}
|
||||
}
|
@ -1,8 +1,11 @@
|
||||
package me.yaruma.fightsystem.utils;
|
||||
package de.steamwar.fightsystem.utils;
|
||||
|
||||
import com.sk89q.worldedit.Vector;
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.utils.sql.Event;
|
||||
import de.steamwar.fightsystem.utils.sql.EventFight;
|
||||
import de.steamwar.fightsystem.utils.sql.Team;
|
||||
import de.warking.hunjy.MySQL.SchematicType;
|
||||
import me.yaruma.fightsystem.FightSystem;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
@ -11,9 +14,12 @@ import org.bukkit.configuration.file.YamlConfiguration;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
|
||||
public class Config {
|
||||
|
||||
private Config(){}
|
||||
|
||||
public static int NoPlayerOnlineDuration;
|
||||
public static int SetupDuration;
|
||||
public static int PreFightDuration;
|
||||
@ -55,6 +61,7 @@ public class Config {
|
||||
public static boolean PercentSystem;
|
||||
public static boolean Entern;
|
||||
public static boolean TechKO;
|
||||
public static boolean WaterTechKO = false;
|
||||
|
||||
public static int TimeoutTime;
|
||||
public static int EnterPhaseBegin;
|
||||
@ -77,6 +84,9 @@ public class Config {
|
||||
|
||||
public static Vector TeamBluePaste;
|
||||
public static Vector TeamRedPaste;
|
||||
public static Vector TeamBlueCorner;
|
||||
public static Vector TeamRedCorner;
|
||||
public static Vector Schemsize;
|
||||
|
||||
public static int ArenaMinX;
|
||||
public static int ArenaMinZ;
|
||||
@ -87,6 +97,11 @@ public class Config {
|
||||
public static List<String> HiddenBlockEntities;
|
||||
public static int ObfuscateWith;
|
||||
|
||||
public static int EventKampfID;
|
||||
public static int EventTeamBlueID;
|
||||
public static int EventTeamRedID;
|
||||
public static int MaximumTeamMembers = Integer.MAX_VALUE;
|
||||
|
||||
public static void load(){
|
||||
if(!new File(Bukkit.getWorldContainer().getPath() + '/' + Bukkit.getWorlds().get(0).getName() + "/config.yml").exists()) {
|
||||
FightSystem.getPlugin().saveDefaultConfig();
|
||||
@ -181,14 +196,17 @@ public class Config {
|
||||
|
||||
TeamBluePaste = new Vector(teamBluePasteX, TeamBlueCornerY, teamBluePasteZ);
|
||||
TeamRedPaste = new Vector(teamRedPasteX, TeamRedCornerY, teamRedPasteZ);
|
||||
Schemsize = new Vector(SchemsizeX, SchemsizeY, SchemsizeZ);
|
||||
TeamBlueCorner = new Vector(TeamBlueCornerX, TeamBlueCornerY, TeamBlueCornerZ);
|
||||
TeamRedCorner = new Vector(TeamRedCornerX, TeamRedCornerY, TeamRedCornerZ);
|
||||
|
||||
World world = Bukkit.getWorlds().get(0);
|
||||
TeamBlueSpawn = new Location(world, teamBluePasteX + 0.5, TeamBlueCornerY + SchemsizeY, teamBluePasteZ + 0.5);
|
||||
TeamRedSpawn = new Location(world, teamRedPasteX + 0.5, TeamRedCornerY + SchemsizeY, teamRedPasteZ + 0.5);
|
||||
SpecSpawn = new Location(world,
|
||||
teamBluePasteX + TeamBluetoReddistanceX/2,
|
||||
TeamBlueCornerY + TeamBluetoReddistanceY/2 + SchemsizeY/2,
|
||||
teamBluePasteZ + TeamBluetoReddistanceZ/2);
|
||||
teamBluePasteX + TeamBluetoReddistanceX/2.0,
|
||||
TeamBlueCornerY + TeamBluetoReddistanceY/2.0 + SchemsizeY/2.0,
|
||||
teamBluePasteZ + TeamBluetoReddistanceZ/2.0);
|
||||
|
||||
if(TeamBluetoReddistanceX > 0){
|
||||
ArenaMinX = TeamBlueCornerX - Schem2BorderX;
|
||||
@ -219,5 +237,42 @@ public class Config {
|
||||
TeamRedRotate = false;
|
||||
TeamBlueRotate = false;
|
||||
}
|
||||
|
||||
EventKampfID = Integer.parseInt(System.getProperty("fightID", "0"));
|
||||
if(event()){
|
||||
EventFight eventFight = EventFight.get(EventKampfID);
|
||||
if(eventFight == null){
|
||||
Bukkit.getLogger().log(Level.SEVERE, "Failed to load EventFight");
|
||||
Bukkit.shutdown();
|
||||
return;
|
||||
}
|
||||
|
||||
Team team1 = Team.get(eventFight.getTeamBlue());
|
||||
Team team2 = Team.get(eventFight.getTeamRed());
|
||||
|
||||
if(team1 == null || team2 == null){
|
||||
Bukkit.getLogger().log(Level.SEVERE, "Failed to load Team");
|
||||
Bukkit.shutdown();
|
||||
return;
|
||||
}
|
||||
|
||||
TeamBlueName = team1.getTeamKuerzel();
|
||||
TeamRedName = team2.getTeamKuerzel();
|
||||
EventTeamBlueID = team1.getTeamId();
|
||||
EventTeamRedID = team2.getTeamId();
|
||||
|
||||
FightSystem.setEventFight(eventFight);
|
||||
|
||||
Event event = Event.get(eventFight.getEventID());
|
||||
MaximumTeamMembers = event.getMaximumTeamMembers();
|
||||
OnlyPublicSchematics = event.publicSchemsOnly();
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean event(){
|
||||
return EventKampfID >= 1;
|
||||
}
|
||||
public static boolean test(){
|
||||
return EventKampfID == -1;
|
||||
}
|
||||
}
|
86
src/de/steamwar/fightsystem/utils/FightScoreboard.java
Normale Datei
86
src/de/steamwar/fightsystem/utils/FightScoreboard.java
Normale Datei
@ -0,0 +1,86 @@
|
||||
package de.steamwar.fightsystem.utils;
|
||||
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.fight.Fight;
|
||||
import de.steamwar.fightsystem.fight.FightTeam;
|
||||
import de.steamwar.fightsystem.winconditions.WinconditionPercentSystem;
|
||||
import de.steamwar.fightsystem.winconditions.WinconditionWaterTechKO;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.scoreboard.DisplaySlot;
|
||||
import org.bukkit.scoreboard.Objective;
|
||||
import org.bukkit.scoreboard.Scoreboard;
|
||||
|
||||
public class FightScoreboard {
|
||||
|
||||
private FightScoreboard(){}
|
||||
|
||||
private static final Scoreboard scoreboard = Bukkit.getScoreboardManager().getMainScoreboard();
|
||||
private static final Objective objective;
|
||||
private static int index = 0;
|
||||
|
||||
static{
|
||||
if(scoreboard.getObjective("AAA") == null)
|
||||
objective = scoreboard.registerNewObjective("AAA", "BBB");
|
||||
else
|
||||
objective = scoreboard.getObjective("AAA");
|
||||
}
|
||||
|
||||
public static void init(){
|
||||
Bukkit.getScheduler().scheduleSyncRepeatingTask(FightSystem.getPlugin(), () -> {
|
||||
objective.unregister();
|
||||
scoreboard.registerNewObjective("AAA", "BBB");
|
||||
objective.setDisplaySlot(DisplaySlot.SIDEBAR);
|
||||
|
||||
FightTeam fightTeam = getIndexDisplay();
|
||||
if(fightTeam != null)
|
||||
teamScoreboard(fightTeam);
|
||||
else
|
||||
generalScoreboard();
|
||||
|
||||
Bukkit.getOnlinePlayers().forEach(player -> player.setScoreboard(scoreboard));
|
||||
}, 0, 200);
|
||||
}
|
||||
|
||||
public static Scoreboard getScoreboard() {
|
||||
return scoreboard;
|
||||
}
|
||||
|
||||
private static void teamScoreboard(FightTeam fightTeam){
|
||||
objective.setDisplayName(fightTeam.getName());
|
||||
fightTeam.getPlayers().forEach(fp -> {
|
||||
if(fp.isLiving())
|
||||
objective.getScore(fightTeam.getPrefix() + fp.getPlayer().getName()).setScore((int) fp.getPlayer().getHealth());
|
||||
});
|
||||
}
|
||||
|
||||
private static void generalScoreboard(){
|
||||
objective.setDisplayName("§6Kampf");
|
||||
if (Config.Timeout) {
|
||||
int fightTime = FightSystem.getFightTime();
|
||||
if (fightTime >= 60)
|
||||
objective.getScore("§7Zeit: §a" + fightTime / 60 + "m " + fightTime % 60 + "s").setScore(3);
|
||||
else
|
||||
objective.getScore("§7Zeit: §a" + fightTime + "s").setScore(3);
|
||||
}
|
||||
if (Config.Entern)
|
||||
objective.getScore("§7Entern: " + (FightSystem.isEntern() ? "§aja" : "§cnein")).setScore(2);
|
||||
if (Config.PercentSystem){
|
||||
objective.getScore(Fight.getRedTeam().getPrefix() + "Schaden: " + (Math.round(100.0 * WinconditionPercentSystem.getRedPercent()) / 100.0) + "%").setScore(1);
|
||||
objective.getScore(Fight.getBlueTeam().getPrefix() + "Schaden: " + (Math.round(100.0 * WinconditionPercentSystem.getBluePercent()) / 100.0) + "%").setScore(0);
|
||||
}else if(Config.WaterTechKO){
|
||||
objective.getScore(Fight.getRedTeam().getPrefix() + "Wasser: " + WinconditionWaterTechKO.getTeamRedWater()).setScore(1);
|
||||
objective.getScore(Fight.getBlueTeam().getPrefix() + "Wasser: " + WinconditionWaterTechKO.getTeamBlueWater()).setScore(0);
|
||||
}
|
||||
}
|
||||
|
||||
private static FightTeam getIndexDisplay() {
|
||||
index++;
|
||||
if(index == 1)
|
||||
return Fight.redTeam;
|
||||
if(index == 2)
|
||||
return Fight.blueTeam;
|
||||
index = 0;
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package me.yaruma.fightsystem.utils;
|
||||
package de.steamwar.fightsystem.utils;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.enchantments.Enchantment;
|
@ -1,4 +1,4 @@
|
||||
package me.yaruma.fightsystem.utils;
|
||||
package de.steamwar.fightsystem.utils;
|
||||
|
||||
import org.bukkit.Location;
|
||||
|
@ -1,4 +1,4 @@
|
||||
package me.yaruma.fightsystem.utils;
|
||||
package de.steamwar.fightsystem.utils;
|
||||
|
||||
import com.comphenix.protocol.PacketType;
|
||||
import com.comphenix.protocol.ProtocolLibrary;
|
||||
@ -13,10 +13,10 @@ import com.comphenix.protocol.wrappers.WrappedBlockData;
|
||||
import com.comphenix.protocol.wrappers.nbt.NbtCompound;
|
||||
import com.comphenix.protocol.wrappers.nbt.NbtFactory;
|
||||
import com.google.common.primitives.Bytes;
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.fight.Fight;
|
||||
import de.steamwar.fightsystem.fight.FightTeam;
|
||||
import javafx.util.Pair;
|
||||
import me.yaruma.fightsystem.FightSystem;
|
||||
import me.yaruma.fightsystem.fight.Fight;
|
||||
import me.yaruma.fightsystem.fight.FightTeam;
|
||||
import net.minecraft.server.v1_12_R1.PacketPlayOutMapChunk;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.GameMode;
|
||||
@ -66,6 +66,10 @@ public class TechHider {
|
||||
obfuscateShift4 = (short)(Config.ObfuscateWith << 4);
|
||||
obfuscateMaterial = Material.getMaterial(Config.ObfuscateWith);
|
||||
|
||||
int threadMultiplier = 1;
|
||||
if(Config.event())
|
||||
threadMultiplier = 4;
|
||||
|
||||
ProtocolLibrary.getProtocolManager().getAsynchronousManager().registerAsyncHandler(new PacketAdapter(FightSystem.getPlugin(), PacketType.Play.Server.MAP_CHUNK) {
|
||||
@Override
|
||||
public void onPacketSending(PacketEvent e) {
|
||||
@ -134,7 +138,6 @@ public class TechHider {
|
||||
i += readVarIntLength(Bytes.toArray(newData), i);
|
||||
i += dataArrayLength * 8;
|
||||
}else{
|
||||
//System.out.println("Full chunk " + chunkX + " " + chunkZ + " " + chunkX*16 + " " + chunkZ*16);
|
||||
int dataArrayLength = readVarInt(Bytes.toArray(newData), i);
|
||||
i += readVarIntLength(Bytes.toArray(newData), i);
|
||||
/*int arrayEnd = dataArrayLength * 8 + i;
|
||||
@ -165,8 +168,7 @@ public class TechHider {
|
||||
byteArray.write(0, Bytes.toArray(newData));
|
||||
}
|
||||
}
|
||||
}).start(4);
|
||||
|
||||
}).start(4 * threadMultiplier);
|
||||
ProtocolLibrary.getProtocolManager().getAsynchronousManager().registerAsyncHandler(new PacketAdapter(FightSystem.getPlugin(), PacketType.Play.Server.BLOCK_CHANGE) {
|
||||
@Override
|
||||
public void onPacketSending(PacketEvent e) {
|
||||
@ -186,7 +188,7 @@ public class TechHider {
|
||||
blockStructure.write(0, block);
|
||||
}
|
||||
}
|
||||
}).start();
|
||||
}).start(threadMultiplier);
|
||||
ProtocolLibrary.getProtocolManager().getAsynchronousManager().registerAsyncHandler(new PacketAdapter(FightSystem.getPlugin(), PacketType.Play.Server.MULTI_BLOCK_CHANGE) {
|
||||
@Override
|
||||
public void onPacketSending(PacketEvent e) {
|
||||
@ -215,7 +217,7 @@ public class TechHider {
|
||||
blockStructure.write(0, changes);
|
||||
}
|
||||
}
|
||||
}).start();
|
||||
}).start(threadMultiplier);
|
||||
ProtocolLibrary.getProtocolManager().getAsynchronousManager().registerAsyncHandler(new PacketAdapter(FightSystem.getPlugin(), PacketType.Play.Server.BLOCK_ACTION) {
|
||||
@Override
|
||||
public void onPacketSending(PacketEvent e) {
|
||||
@ -238,7 +240,7 @@ public class TechHider {
|
||||
e.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}).start();
|
||||
}).start(threadMultiplier);
|
||||
ProtocolLibrary.getProtocolManager().getAsynchronousManager().registerAsyncHandler(new PacketAdapter(FightSystem.getPlugin(), PacketType.Play.Client.USE_ENTITY) {
|
||||
@Override
|
||||
public void onPacketReceiving(PacketEvent e) {
|
||||
@ -248,10 +250,13 @@ public class TechHider {
|
||||
e.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}).start();
|
||||
}).start(threadMultiplier);
|
||||
}
|
||||
|
||||
private static boolean bypass(Player p, int chunkX, int chunkZ){
|
||||
if(p == FightSystem.getEventLeiter())
|
||||
return true;
|
||||
|
||||
FightTeam ft = Fight.getPlayerTeam(p);
|
||||
if(ft == null){
|
||||
//Außerhalb der Arena
|
97
src/de/steamwar/fightsystem/utils/WaterRemover.java
Normale Datei
97
src/de/steamwar/fightsystem/utils/WaterRemover.java
Normale Datei
@ -0,0 +1,97 @@
|
||||
package de.steamwar.fightsystem.utils;
|
||||
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.winconditions.WinconditionWaterTechKO;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class WaterRemover {
|
||||
|
||||
private WaterRemover(){}
|
||||
|
||||
private static Map<Location, Integer> explodedBlocks = new HashMap<>();
|
||||
private static Set<Block> waterList = new HashSet<>();
|
||||
|
||||
public static void init() {
|
||||
Bukkit.getScheduler().runTaskTimerAsynchronously(FightSystem.getPlugin(), () -> {
|
||||
wateredCheck();
|
||||
removeWater();
|
||||
}, 0, 20);
|
||||
}
|
||||
|
||||
public static void add(List<Block> l) {
|
||||
l.forEach((Block b) -> explodedBlocks.put(b.getLocation(), 0));
|
||||
}
|
||||
|
||||
private static void wateredCheck() {
|
||||
Iterator<Map.Entry<Location, Integer>> it = explodedBlocks.entrySet().iterator();
|
||||
while (it.hasNext()) {
|
||||
Map.Entry<Location, Integer> e = it.next();
|
||||
Block b = e.getKey().getBlock();
|
||||
if (b.getType() == Material.WATER || b.getType() == Material.STATIONARY_WATER) {
|
||||
waterList.add(b);
|
||||
}
|
||||
|
||||
if(b.getType() != Material.AIR){
|
||||
it.remove();
|
||||
continue;
|
||||
}
|
||||
explodedBlocks.replace(e.getKey(), e.getValue() + 1);
|
||||
|
||||
if(explodedBlocks.get(e.getKey()) > 15){
|
||||
it.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void removeWater() {
|
||||
List<Block> blocksToRemove = new LinkedList<>();
|
||||
Iterator<Block> it = waterList.iterator();
|
||||
while(it.hasNext()){
|
||||
Block b = it.next();
|
||||
blocksToRemove.addAll(getSourceBlocksOfWater(b));
|
||||
if (b.getType() != Material.WATER && b.getType() != Material.STATIONARY_WATER) {
|
||||
it.remove();
|
||||
}
|
||||
}
|
||||
|
||||
Bukkit.getScheduler().runTask(FightSystem.getPlugin(), () -> {
|
||||
blocksToRemove.forEach((Block b) -> b.setType(Material.AIR));
|
||||
WinconditionWaterTechKO.removeWater();
|
||||
});
|
||||
}
|
||||
|
||||
private static Set<Block> getSourceBlocksOfWater(Block startBlock) {
|
||||
Set<Block> water = new HashSet<>();
|
||||
collectBlocks(startBlock, water, new HashSet<>());
|
||||
return water;
|
||||
}
|
||||
|
||||
private static void collectBlocks(Block anchor, Set<Block> collected, Set<Block> visitedBlocks) {
|
||||
if(
|
||||
(anchor.getType() != Material.WATER && anchor.getType() != Material.STATIONARY_WATER) ||
|
||||
visitedBlocks.contains(anchor)
|
||||
)
|
||||
return;
|
||||
|
||||
visitedBlocks.add(anchor);
|
||||
if (anchor.getType() == Material.STATIONARY_WATER)
|
||||
collected.add(anchor);
|
||||
|
||||
if(visitedBlocks.size() > 50) {
|
||||
collected.clear();
|
||||
return;
|
||||
}
|
||||
collectBlocks(anchor.getRelative(BlockFace.UP), collected, visitedBlocks);
|
||||
collectBlocks(anchor.getRelative(BlockFace.NORTH), collected, visitedBlocks);
|
||||
collectBlocks(anchor.getRelative(BlockFace.EAST), collected, visitedBlocks);
|
||||
collectBlocks(anchor.getRelative(BlockFace.SOUTH), collected, visitedBlocks);
|
||||
collectBlocks(anchor.getRelative(BlockFace.WEST), collected, visitedBlocks);
|
||||
}
|
||||
|
||||
}
|
61
src/de/steamwar/fightsystem/utils/sql/Event.java
Normale Datei
61
src/de/steamwar/fightsystem/utils/sql/Event.java
Normale Datei
@ -0,0 +1,61 @@
|
||||
package de.steamwar.fightsystem.utils.sql;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Timestamp;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import static de.warking.hunjy.Core.sql;
|
||||
|
||||
public class Event {
|
||||
|
||||
private final int eventID;
|
||||
private final String eventName;
|
||||
private final Timestamp start;
|
||||
private final Timestamp end;
|
||||
private final int maximumTeamMembers;
|
||||
private final boolean publicSchemsOnly;
|
||||
|
||||
private Event(int eventID, String eventName, Timestamp start, Timestamp end, int maximumTeamMembers, boolean publicSchemsOnly){
|
||||
this.eventID = eventID;
|
||||
this.eventName = eventName;
|
||||
this.start = start;
|
||||
this.end = end;
|
||||
this.maximumTeamMembers = maximumTeamMembers;
|
||||
this.publicSchemsOnly = publicSchemsOnly;
|
||||
}
|
||||
|
||||
public static Event get(int eventID){
|
||||
ResultSet rs = sql.select("SELECT * FROM Event WHERE EventID = " + eventID);
|
||||
try{
|
||||
if(!rs.next())
|
||||
throw new IllegalArgumentException();
|
||||
|
||||
return new Event(eventID, rs.getString("EventName"), rs.getTimestamp("Start"), rs.getTimestamp("End"), rs.getInt("MaximumTeamMembers"), rs.getBoolean("PublicSchemsOnly"));
|
||||
}catch (SQLException e){
|
||||
Bukkit.getLogger().log(Level.SEVERE, "Failed to load Event", e);
|
||||
throw new SecurityException();
|
||||
}
|
||||
}
|
||||
|
||||
public int getEventID() {
|
||||
return eventID;
|
||||
}
|
||||
public String getEventName() {
|
||||
return eventName;
|
||||
}
|
||||
public Timestamp getStart() {
|
||||
return start;
|
||||
}
|
||||
public Timestamp getEnd() {
|
||||
return end;
|
||||
}
|
||||
public int getMaximumTeamMembers() {
|
||||
return maximumTeamMembers;
|
||||
}
|
||||
public boolean publicSchemsOnly() {
|
||||
return publicSchemsOnly;
|
||||
}
|
||||
}
|
77
src/de/steamwar/fightsystem/utils/sql/EventFight.java
Normale Datei
77
src/de/steamwar/fightsystem/utils/sql/EventFight.java
Normale Datei
@ -0,0 +1,77 @@
|
||||
package de.steamwar.fightsystem.utils.sql;
|
||||
|
||||
import de.steamwar.fightsystem.fight.FightTeam;
|
||||
import de.warking.hunjy.Core;
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.logging.Level;
|
||||
|
||||
public class EventFight {
|
||||
private int eventID;
|
||||
private int fightID;
|
||||
private int teamBlue;
|
||||
private int teamRed;
|
||||
private int kampfleiter;
|
||||
private int ergebnis;
|
||||
|
||||
private EventFight(int eventID, int fightID, int teamBlue, int teamRed, int kampfleiter, int ergebnis){
|
||||
this.eventID = eventID;
|
||||
this.fightID = fightID;
|
||||
this.teamBlue = teamBlue;
|
||||
this.teamRed = teamRed;
|
||||
this.kampfleiter = kampfleiter;
|
||||
this.ergebnis = ergebnis;
|
||||
}
|
||||
|
||||
public static EventFight get(int fightID){
|
||||
ResultSet rs = Core.sql.select("SELECT * FROM EventFight WHERE FightID = " + fightID);
|
||||
try{
|
||||
return new EventFight(
|
||||
rs.getInt("EventID"),
|
||||
fightID,
|
||||
rs.getInt("TeamBlue"),
|
||||
rs.getInt("TeamRed"),
|
||||
rs.getInt("Kampfleiter"),
|
||||
rs.getInt("Ergebnis"));
|
||||
}catch (SQLException e){
|
||||
Bukkit.getLogger().log(Level.SEVERE, "Failed to load EventFight", e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void setErgebnis(FightTeam winner){
|
||||
if (winner == null)
|
||||
ergebnis = 0;
|
||||
else if (winner.isBlue())
|
||||
ergebnis = 1;
|
||||
else
|
||||
ergebnis = 2;
|
||||
Core.sql.update("UPDATE EventFight SET Ergebnis = " + ergebnis + " WHERE FightID = " + fightID);
|
||||
}
|
||||
|
||||
public int getTeamBlue() {
|
||||
return teamBlue;
|
||||
}
|
||||
|
||||
public int getTeamRed() {
|
||||
return teamRed;
|
||||
}
|
||||
|
||||
public int getEventID() {
|
||||
return eventID;
|
||||
}
|
||||
|
||||
public int getFightID() {
|
||||
return fightID;
|
||||
}
|
||||
|
||||
public int getKampfleiter() {
|
||||
return kampfleiter;
|
||||
}
|
||||
|
||||
public int getErgebnis() {
|
||||
return ergebnis;
|
||||
}
|
||||
}
|
75
src/de/steamwar/fightsystem/utils/sql/Team.java
Normale Datei
75
src/de/steamwar/fightsystem/utils/sql/Team.java
Normale Datei
@ -0,0 +1,75 @@
|
||||
package de.steamwar.fightsystem.utils.sql;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import static de.warking.hunjy.Core.sql;
|
||||
|
||||
public class Team {
|
||||
private final int teamId;
|
||||
private String teamKuerzel;
|
||||
private String teamName;
|
||||
private int teamLeader;
|
||||
|
||||
private Team(int id, String kuerzel, String name, int leader){
|
||||
teamId = id;
|
||||
teamKuerzel = kuerzel;
|
||||
teamName = name;
|
||||
teamLeader = leader;
|
||||
}
|
||||
|
||||
public static Team get(int id){
|
||||
return load(sql.select("SELECT * FROM Team WHERE TeamID = " + id));
|
||||
}
|
||||
|
||||
private static Team load(ResultSet dbteam){
|
||||
try {
|
||||
if(!dbteam.next()){
|
||||
return null;
|
||||
}
|
||||
int id = dbteam.getInt("TeamID");
|
||||
String kuerzel = dbteam.getString("TeamKuerzel");
|
||||
String name = dbteam.getString("TeamName");
|
||||
int leader = dbteam.getInt("TeamLeader");
|
||||
return new Team(id, kuerzel, name, leader);
|
||||
} catch (SQLException e) {
|
||||
Bukkit.getLogger().log(Level.SEVERE, "Could not load teammembers", e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public int getTeamId() {
|
||||
return teamId;
|
||||
}
|
||||
|
||||
public String getTeamKuerzel() {
|
||||
return teamKuerzel;
|
||||
}
|
||||
|
||||
public String getTeamName() {
|
||||
return teamName;
|
||||
}
|
||||
|
||||
public int getTeamLeader() {
|
||||
return teamLeader;
|
||||
}
|
||||
|
||||
public List<Integer> getMembers(){
|
||||
try{
|
||||
ResultSet memberlist = sql.select("SELECT id FROM UserData WHERE Team = '" + teamId + "'");
|
||||
List<Integer> members = new ArrayList<>();
|
||||
while(memberlist.next()){
|
||||
members.add(memberlist.getInt("id"));
|
||||
}
|
||||
return members;
|
||||
}catch(SQLException e){
|
||||
Bukkit.getLogger().log(Level.SEVERE, "Could not load Teammembers", e);
|
||||
}
|
||||
return new ArrayList<>();
|
||||
}
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
package de.steamwar.fightsystem.winconditions;
|
||||
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.fight.Fight;
|
||||
import de.steamwar.fightsystem.fight.FightTeam;
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
public class EventTeamOffWincondition {
|
||||
|
||||
public EventTeamOffWincondition(){
|
||||
teamOff(Fight.getBlueTeam());
|
||||
teamOff(Fight.getRedTeam());
|
||||
}
|
||||
|
||||
private void teamOff(FightTeam team){
|
||||
if(team.allPlayersOut()){
|
||||
Bukkit.broadcastMessage(FightSystem.PREFIX + "§6Das Team " + team.getName() + " §6ist Offline!");
|
||||
FightSystem.setSpectateState(team);
|
||||
}
|
||||
}
|
||||
}
|
15
src/de/steamwar/fightsystem/winconditions/ListenerWincondition.java
Normale Datei
15
src/de/steamwar/fightsystem/winconditions/ListenerWincondition.java
Normale Datei
@ -0,0 +1,15 @@
|
||||
package de.steamwar.fightsystem.winconditions;
|
||||
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.event.Listener;
|
||||
|
||||
abstract class ListenerWincondition implements Listener {
|
||||
|
||||
void init(boolean condition){
|
||||
if(!condition)
|
||||
return;
|
||||
|
||||
Bukkit.getPluginManager().registerEvents(this, FightSystem.getPlugin());
|
||||
}
|
||||
}
|
22
src/de/steamwar/fightsystem/winconditions/PlayerWincondition.java
Normale Datei
22
src/de/steamwar/fightsystem/winconditions/PlayerWincondition.java
Normale Datei
@ -0,0 +1,22 @@
|
||||
package de.steamwar.fightsystem.winconditions;
|
||||
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.fight.Fight;
|
||||
import de.steamwar.fightsystem.fight.FightTeam;
|
||||
import de.steamwar.fightsystem.fight.FightState;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
abstract class PlayerWincondition extends ListenerWincondition {
|
||||
|
||||
boolean isTarget(Player player){
|
||||
if(FightSystem.getFightState() != FightState.PRE_RUNNING && FightSystem.getFightState() != FightState.RUNNING)
|
||||
return false;
|
||||
|
||||
FightTeam fightTeam = Fight.getPlayerTeam(player);
|
||||
if(fightTeam == null)
|
||||
return false;
|
||||
|
||||
fightTeam.getFightPlayer(player).setOut();
|
||||
return true;
|
||||
}
|
||||
}
|
46
src/de/steamwar/fightsystem/winconditions/WinconditionAllDead.java
Normale Datei
46
src/de/steamwar/fightsystem/winconditions/WinconditionAllDead.java
Normale Datei
@ -0,0 +1,46 @@
|
||||
package de.steamwar.fightsystem.winconditions;
|
||||
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.fight.Fight;
|
||||
import de.steamwar.fightsystem.fight.FightTeam;
|
||||
import de.steamwar.fightsystem.utils.Config;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
|
||||
public class WinconditionAllDead extends PlayerWincondition {
|
||||
|
||||
public WinconditionAllDead(){
|
||||
init(Config.AllDead);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void handlePlayerDeath(PlayerDeathEvent event) {
|
||||
Player player = event.getEntity().getPlayer();
|
||||
|
||||
if(!isTarget(player))
|
||||
return;
|
||||
|
||||
FightTeam fightTeam = Fight.getPlayerTeam(player);
|
||||
if(fightTeam.allPlayersOut()) {
|
||||
Bukkit.broadcastMessage(FightSystem.PREFIX + "§cDer letzte Spieler aus " + fightTeam.getPrefix() + fightTeam.getName() + " §cist gestorben!");
|
||||
FightSystem.setSpectateState(Fight.getOpposite(fightTeam));
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void handlePlayerQuit(PlayerQuitEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if(!isTarget(player))
|
||||
return;
|
||||
|
||||
FightTeam fightTeam = Fight.getPlayerTeam(player);
|
||||
if(fightTeam.allPlayersOut()) {
|
||||
Bukkit.broadcastMessage(FightSystem.PREFIX + "§cDer letzte Spieler aus §6" + fightTeam.getPrefix() + fightTeam.getName() + " §chat den Kampf verlassen!");
|
||||
FightSystem.setSpectateState(Fight.getOpposite(fightTeam));
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
package de.steamwar.fightsystem.winconditions;
|
||||
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.fight.Fight;
|
||||
import de.steamwar.fightsystem.fight.FightTeam;
|
||||
import de.steamwar.fightsystem.utils.Config;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
|
||||
public class WinconditionCaptainDead extends PlayerWincondition {
|
||||
|
||||
public WinconditionCaptainDead(){
|
||||
init(Config.CaptainDead);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void handlePlayerDeath(PlayerDeathEvent event) {
|
||||
Player player = event.getEntity().getPlayer();
|
||||
|
||||
if(!isTarget(player))
|
||||
return;
|
||||
|
||||
FightTeam fightTeam = Fight.getPlayerTeam(player);
|
||||
if(fightTeam.isPlayerLeader(player)) {
|
||||
Bukkit.broadcastMessage(FightSystem.PREFIX + "§cDer Leader von " + fightTeam.getPrefix() + fightTeam.getName() + " §cist gestorben!");
|
||||
FightSystem.setSpectateState(Fight.getOpposite(fightTeam));
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void handlePlayerQuit(PlayerQuitEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if(!isTarget(player))
|
||||
return;
|
||||
|
||||
FightTeam fightTeam = Fight.getPlayerTeam(player);
|
||||
if(fightTeam.isPlayerLeader(player)) {
|
||||
Bukkit.broadcastMessage(FightSystem.PREFIX + "§cDer Leader von " + fightTeam.getPrefix() + fightTeam.getName() + " §chat den Kampf verlassen!");
|
||||
FightSystem.setSpectateState(Fight.getOpposite(fightTeam));
|
||||
}
|
||||
}
|
||||
}
|
13
src/de/steamwar/fightsystem/winconditions/WinconditionEntern.java
Normale Datei
13
src/de/steamwar/fightsystem/winconditions/WinconditionEntern.java
Normale Datei
@ -0,0 +1,13 @@
|
||||
package de.steamwar.fightsystem.winconditions;
|
||||
|
||||
import de.steamwar.fightsystem.countdown.EnternCountdown;
|
||||
import de.steamwar.fightsystem.utils.Config;
|
||||
|
||||
public class WinconditionEntern {
|
||||
public WinconditionEntern() {
|
||||
if(!Config.Entern)
|
||||
return;
|
||||
|
||||
new EnternCountdown();
|
||||
}
|
||||
}
|
@ -1,16 +1,15 @@
|
||||
package me.yaruma.fightsystem.winconditions;
|
||||
package de.steamwar.fightsystem.winconditions;
|
||||
|
||||
import me.yaruma.fightsystem.FightSystem;
|
||||
import me.yaruma.fightsystem.fight.Fight;
|
||||
import me.yaruma.fightsystem.fight.FightState;
|
||||
import me.yaruma.fightsystem.utils.Config;
|
||||
import me.yaruma.fightsystem.utils.Region;
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.fight.Fight;
|
||||
import de.steamwar.fightsystem.fight.FightState;
|
||||
import de.steamwar.fightsystem.utils.Config;
|
||||
import de.steamwar.fightsystem.utils.Region;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.EntityExplodeEvent;
|
||||
|
||||
public class WinconditionPercentSystem implements Listener {
|
||||
public class WinconditionPercentSystem extends ListenerWincondition {
|
||||
|
||||
private static double bluePercent = 0D;
|
||||
private static double redPercent = 0D;
|
||||
@ -21,12 +20,13 @@ public class WinconditionPercentSystem implements Listener {
|
||||
private static int schematicSize;
|
||||
|
||||
public WinconditionPercentSystem() {
|
||||
init(Config.PercentSystem);
|
||||
|
||||
schematicSize = Math.abs(Config.SchemsizeX * Config.SchemsizeY * Config.SchemsizeZ);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void handleEntityExplode(EntityExplodeEvent event) {
|
||||
if(!Config.PercentSystem) return;
|
||||
if(FightSystem.getFightState() != FightState.PRE_RUNNING && FightSystem.getFightState() != FightState.RUNNING) return;
|
||||
Entity entity = event.getEntity();
|
||||
|
||||
@ -37,7 +37,7 @@ public class WinconditionPercentSystem implements Listener {
|
||||
double destroyPercent = doubleBlueDestroyedBlocks * 100 / schematicSize;
|
||||
bluePercent = destroyPercent;
|
||||
if(destroyPercent >= Config.PercentWin) {
|
||||
FightSystem.getPlugin().setSpectateState(Fight.blueTeam);
|
||||
FightSystem.setSpectateState(Fight.redTeam);
|
||||
}
|
||||
//Team Red
|
||||
}else if(Region.isInRange(entity.getLocation(), Config.TeamRedCornerX, Config.TeamRedCornerY, Config.TeamRedCornerZ, Config.SchemsizeX, Config.SchemsizeY, Config.SchemsizeZ, Config.BorderFromSchematic)) {
|
||||
@ -46,7 +46,7 @@ public class WinconditionPercentSystem implements Listener {
|
||||
double destroyPercent = doubleRedDestroyedBlocks * 100 / schematicSize;
|
||||
redPercent = destroyPercent;
|
||||
if(destroyPercent >= Config.PercentWin) {
|
||||
FightSystem.getPlugin().setSpectateState(Fight.redTeam);
|
||||
FightSystem.setSpectateState(Fight.blueTeam);
|
||||
}
|
||||
}
|
||||
}
|
95
src/de/steamwar/fightsystem/winconditions/WinconditionTechKO.java
Normale Datei
95
src/de/steamwar/fightsystem/winconditions/WinconditionTechKO.java
Normale Datei
@ -0,0 +1,95 @@
|
||||
package de.steamwar.fightsystem.winconditions;
|
||||
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.countdown.TechKOCountdown;
|
||||
import de.steamwar.fightsystem.fight.Fight;
|
||||
import de.steamwar.fightsystem.fight.FightTeam;
|
||||
import de.steamwar.fightsystem.utils.Config;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.TNTPrimed;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.EntityExplodeEvent;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class WinconditionTechKO implements Listener {
|
||||
|
||||
private static final int TECH_KO_TIME_IN_S = 90;
|
||||
private static final int TECH_KO_HALF_TIME = TECH_KO_TIME_IN_S*10;
|
||||
public static final int TECH_KO_COUNTDOWN_TIME = TECH_KO_HALF_TIME/20;
|
||||
|
||||
private World world;
|
||||
private Map<Integer, Boolean> map = new HashMap<>(400);
|
||||
private double toggle;
|
||||
private int smallerZtime;
|
||||
private int biggerZtime;
|
||||
private TechKOCountdown smallerZcountdown = null;
|
||||
private TechKOCountdown biggerZcountdown = null;
|
||||
|
||||
//Works only for z-Axis fight direction for performance reasons
|
||||
public WinconditionTechKO(){
|
||||
if(!Config.TechKO)
|
||||
return;
|
||||
|
||||
world = Bukkit.getWorlds().get(0);
|
||||
toggle = Config.SpecSpawn.getZ();
|
||||
smallerZtime=TECH_KO_HALF_TIME;
|
||||
biggerZtime=TECH_KO_HALF_TIME;
|
||||
|
||||
Bukkit.getScheduler().runTaskTimerAsynchronously(FightSystem.getPlugin(), this::run, 1, 1);
|
||||
Bukkit.getPluginManager().registerEvents(this, FightSystem.getPlugin());
|
||||
}
|
||||
|
||||
private void run(){
|
||||
for(TNTPrimed tnt : world.getEntitiesByClass(TNTPrimed.class)){
|
||||
int id = tnt.getEntityId();
|
||||
boolean smallerZ = tnt.getLocation().getZ() < toggle;
|
||||
Boolean old = map.put(id, smallerZ);
|
||||
if(old != null && old != smallerZ){
|
||||
if(old)
|
||||
smallerZtime = TECH_KO_HALF_TIME;
|
||||
else
|
||||
biggerZtime = TECH_KO_HALF_TIME;
|
||||
}
|
||||
}
|
||||
|
||||
if(smallerZtime == TECH_KO_HALF_TIME && smallerZcountdown != null){
|
||||
smallerZcountdown.cancelTimer();
|
||||
smallerZcountdown = null;
|
||||
}else if(smallerZtime == 0){
|
||||
smallerZcountdown = new TechKOCountdown(smallerTeam());
|
||||
}
|
||||
|
||||
if(biggerZtime == TECH_KO_HALF_TIME && biggerZcountdown != null){
|
||||
biggerZcountdown.cancelTimer();
|
||||
biggerZcountdown = null;
|
||||
}else if(biggerZtime == 0){
|
||||
biggerZcountdown = new TechKOCountdown(biggerTeam());
|
||||
}
|
||||
|
||||
smallerZtime--;
|
||||
biggerZtime--;
|
||||
}
|
||||
|
||||
private FightTeam smallerTeam(){
|
||||
if(Config.TeamBluetoReddistanceZ > 0)
|
||||
return Fight.getBlueTeam();
|
||||
else
|
||||
return Fight.getRedTeam();
|
||||
}
|
||||
|
||||
private FightTeam biggerTeam(){
|
||||
if(Config.TeamBluetoReddistanceZ < 0)
|
||||
return Fight.getBlueTeam();
|
||||
else
|
||||
return Fight.getRedTeam();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onEntityDead(EntityExplodeEvent event){
|
||||
map.remove(event.getEntity().getEntityId());
|
||||
}
|
||||
}
|
13
src/de/steamwar/fightsystem/winconditions/WinconditionTimeout.java
Normale Datei
13
src/de/steamwar/fightsystem/winconditions/WinconditionTimeout.java
Normale Datei
@ -0,0 +1,13 @@
|
||||
package de.steamwar.fightsystem.winconditions;
|
||||
|
||||
import de.steamwar.fightsystem.countdown.TimeOverCountdown;
|
||||
import de.steamwar.fightsystem.utils.Config;
|
||||
|
||||
public class WinconditionTimeout {
|
||||
public WinconditionTimeout() {
|
||||
if(!Config.Timeout)
|
||||
return;
|
||||
|
||||
new TimeOverCountdown();
|
||||
}
|
||||
}
|
@ -0,0 +1,95 @@
|
||||
package de.steamwar.fightsystem.winconditions;
|
||||
|
||||
import de.steamwar.fightsystem.FightSystem;
|
||||
import de.steamwar.fightsystem.fight.Fight;
|
||||
import de.steamwar.fightsystem.fight.FightState;
|
||||
import de.steamwar.fightsystem.fight.FightTeam;
|
||||
import de.steamwar.fightsystem.utils.Config;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
public class WinconditionWaterTechKO {
|
||||
|
||||
private static final Set<Location> teamRedWater = new HashSet<>();
|
||||
private static final Set<Location> teamBlueWater = new HashSet<>();
|
||||
|
||||
public WinconditionWaterTechKO() {
|
||||
if(!Config.WaterTechKO)
|
||||
return;
|
||||
|
||||
Bukkit.getScheduler().runTaskTimerAsynchronously(FightSystem.getPlugin(), this::addWater, 0, 200);
|
||||
}
|
||||
|
||||
private void addWater() {
|
||||
if(FightSystem.getFightState() != FightState.PRE_RUNNING && FightSystem.getFightState() != FightState.RUNNING)
|
||||
return;
|
||||
|
||||
checkForWater(teamRedWater,
|
||||
Config.TeamRedCornerX,
|
||||
Config.TeamRedCornerY,
|
||||
Config.TeamRedCornerZ,
|
||||
Config.TeamRedCornerX + Config.SchemsizeX,
|
||||
Config.TeamRedCornerY + Config.SchemsizeY,
|
||||
Config.TeamRedCornerZ + Config.SchemsizeZ);
|
||||
checkForWater(teamBlueWater,
|
||||
Config.TeamBlueCornerX,
|
||||
Config.TeamBlueCornerY,
|
||||
Config.TeamBlueCornerZ,
|
||||
Config.TeamBlueCornerX + Config.SchemsizeX,
|
||||
Config.TeamBlueCornerY + Config.SchemsizeY,
|
||||
Config.TeamBlueCornerZ + Config.SchemsizeZ);
|
||||
|
||||
checkEmpty(Fight.getRedTeam(), teamRedWater);
|
||||
checkEmpty(Fight.getBlueTeam(), teamBlueWater);
|
||||
}
|
||||
|
||||
public static void removeWater() {
|
||||
if(!Config.WaterTechKO)
|
||||
return;
|
||||
if(FightSystem.getFightState() != FightState.PRE_RUNNING && FightSystem.getFightState() != FightState.RUNNING)
|
||||
return;
|
||||
|
||||
checkWaterspots(teamRedWater);
|
||||
checkWaterspots(teamBlueWater);
|
||||
|
||||
checkEmpty(Fight.getRedTeam(), teamRedWater);
|
||||
checkEmpty(Fight.getBlueTeam(), teamBlueWater);
|
||||
}
|
||||
|
||||
public static int getTeamBlueWater() {
|
||||
return teamBlueWater.size();
|
||||
}
|
||||
|
||||
public static int getTeamRedWater() {
|
||||
return teamRedWater.size();
|
||||
}
|
||||
|
||||
private void checkForWater(Set<Location> teamWater, int minX, int minY, int minZ, int maxX, int maxY, int maxZ){
|
||||
teamWater.clear();
|
||||
|
||||
for(int x = minX; x <= maxX; x++) {
|
||||
for(int y = minY; y <= maxY; y++) {
|
||||
for (int z = minZ; z <= maxZ; z++) {
|
||||
Location location = new Location(Bukkit.getWorlds().get(0), x, y, z);
|
||||
if (location.getBlock().getType() == Material.STATIONARY_WATER)
|
||||
teamRedWater.add(location);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void checkWaterspots(Set<Location> teamWater){
|
||||
teamWater.removeIf(location -> location.getBlock().getType() != Material.STATIONARY_WATER);
|
||||
}
|
||||
|
||||
private static void checkEmpty(FightTeam team, Set<Location> teamWater){
|
||||
if(teamWater.isEmpty()){
|
||||
Bukkit.broadcastMessage(FightSystem.PREFIX + "§6Das Team " + team.getName() + " §6ist Tech K.O.!");
|
||||
FightSystem.setSpectateState(team);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,251 +0,0 @@
|
||||
package me.yaruma.fightsystem;
|
||||
|
||||
import de.warking.hunjy.CoinSystem.CoinSystem;
|
||||
import javafx.util.Pair;
|
||||
import me.yaruma.fightsystem.commands.*;
|
||||
import me.yaruma.fightsystem.fight.*;
|
||||
import me.yaruma.fightsystem.kit.KitManager;
|
||||
import me.yaruma.fightsystem.listener.*;
|
||||
import me.yaruma.fightsystem.utils.Config;
|
||||
import me.yaruma.fightsystem.utils.TechHider;
|
||||
import me.yaruma.fightsystem.utils.countdown.Countdown;
|
||||
import me.yaruma.fightsystem.utils.countdown.FinishNoPlayersOnline;
|
||||
import me.yaruma.fightsystem.utils.countdown.FinishPreRunning;
|
||||
import me.yaruma.fightsystem.utils.countdown.FinishSpectateOver;
|
||||
import me.yaruma.fightsystem.utils.scoreboard.Scoreboard;
|
||||
import me.yaruma.fightsystem.winconditions.*;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.PluginManager;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
|
||||
public class FightSystem extends JavaPlugin {
|
||||
|
||||
public static final String PREFIX = "§eArena§8» ";
|
||||
|
||||
private static FightSystem plugin;
|
||||
private static Scoreboard scoreboard;
|
||||
private static WaterRemover waterRemover;
|
||||
|
||||
private static FightState fightState = FightState.SETUP;
|
||||
private static int fightTime = 0;
|
||||
|
||||
|
||||
private static boolean entern = false;
|
||||
|
||||
private final File kits = new File("plugins/" + this.getName(), "kits.data");
|
||||
private final FileConfiguration getKitData = YamlConfiguration.loadConfiguration(kits);
|
||||
|
||||
private void saveKitData() {
|
||||
try { getKitData.save(kits); } catch (Exception ignored) { }
|
||||
}
|
||||
|
||||
public FileConfiguration getKitData() {
|
||||
return getKitData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
|
||||
plugin = this;
|
||||
Config.load();
|
||||
|
||||
scoreboard = new Scoreboard();
|
||||
waterRemover = new WaterRemover();
|
||||
entern = false;
|
||||
|
||||
loadConfig();
|
||||
|
||||
KitManager.loadAllKits();
|
||||
|
||||
PluginManager pm = Bukkit.getPluginManager();
|
||||
pm.registerEvents(new PlayerJoinListener(), plugin);
|
||||
pm.registerEvents(new PlayerQuitListener(), plugin);
|
||||
pm.registerEvents(new PlayerDeathListener(), plugin);
|
||||
pm.registerEvents(new PlayerInteractListener(), plugin);
|
||||
pm.registerEvents(new PlayerChatListener(), plugin);
|
||||
pm.registerEvents(new BlockPlaceListener(), plugin);
|
||||
pm.registerEvents(new BlockBreakListener(), plugin);
|
||||
pm.registerEvents(new PlayerMoveListener(), plugin);
|
||||
pm.registerEvents(new EntityDamageByEntityListener(), plugin);
|
||||
pm.registerEvents(new FoodLevelChangeListener(), plugin);
|
||||
pm.registerEvents(new PlayerRespawnListener(), plugin);
|
||||
pm.registerEvents(new EntityDamageListener(), plugin);
|
||||
pm.registerEvents(new EntityExplodeListener(), plugin);
|
||||
pm.registerEvents(new PlayerTeleportListener(), plugin);
|
||||
pm.registerEvents(new ProjectileLaunchListener(), plugin);
|
||||
pm.registerEvents(new PistonListener(), plugin);
|
||||
pm.registerEvents(new InventoryListener(), plugin);
|
||||
|
||||
//WinConditions
|
||||
if(Config.AllDead) pm.registerEvents(new WinconditionAllDead(), plugin);
|
||||
if(Config.CaptainDead) pm.registerEvents(new WinconditionCaptainDead(), plugin);
|
||||
if(Config.PercentSystem) pm.registerEvents(new WinconditionPercentSystem(), plugin);
|
||||
|
||||
getCommand("ak").setExecutor(new AkCommand());
|
||||
getCommand("invite").setExecutor(new InviteCommand());
|
||||
getCommand("leave").setExecutor(new LeaveCommand());
|
||||
getCommand("accept").setExecutor(new AcceptCommand());
|
||||
getCommand("decline").setExecutor(new DeclineCommand());
|
||||
getCommand("ready").setExecutor(new ReadyCommand());
|
||||
getCommand("kit").setExecutor(new KitCommand());
|
||||
|
||||
Countdown countdown = new Countdown(Config.NoPlayerOnlineDuration, new FinishNoPlayersOnline(), null, false);
|
||||
countdown.startTimer(getPlugin());
|
||||
|
||||
TechHider.init();
|
||||
}
|
||||
|
||||
private void loadConfig() {
|
||||
if(!new File("plugins/" + this.getName() + "/kits.data").exists()) {
|
||||
saveKitData();
|
||||
System.out.println(PREFIX + "kits.data erstellt und geladen!");
|
||||
Bukkit.shutdown();
|
||||
}
|
||||
}
|
||||
|
||||
public static FightSystem getPlugin() {
|
||||
return plugin;
|
||||
}
|
||||
|
||||
public static FightState getFightState() {
|
||||
return fightState;
|
||||
}
|
||||
|
||||
public Scoreboard getScoreboard() {
|
||||
return scoreboard;
|
||||
}
|
||||
|
||||
public WaterRemover getWaterRemover() {
|
||||
return waterRemover;
|
||||
}
|
||||
|
||||
public void setPreRunningState() {
|
||||
if(fightState != FightState.SETUP)
|
||||
return;
|
||||
fightState = FightState.PRE_RUNNING;
|
||||
Countdown.cancelAllTimers();
|
||||
|
||||
Countdown countdown = new Countdown(Config.PreFightDuration, new FinishPreRunning(), Sound.BLOCK_NOTE_PLING, true);
|
||||
countdown.startTimer(this);
|
||||
for(FightPlayer allFightPlayers : Fight.getBlueTeam().getPlayers()) {
|
||||
allFightPlayers.getPlayer().getInventory().clear();
|
||||
allFightPlayers.getKit().loadToPlayer(allFightPlayers.getPlayer());
|
||||
}
|
||||
for(FightPlayer allFightPlayers : Fight.getRedTeam().getPlayers()) {
|
||||
allFightPlayers.getPlayer().getInventory().clear();
|
||||
allFightPlayers.getKit().loadToPlayer(allFightPlayers.getPlayer());
|
||||
}
|
||||
|
||||
teleportAllToFightSpawn();
|
||||
setAllPlayersGM(GameMode.SURVIVAL);
|
||||
Bukkit.broadcastMessage(PREFIX + "§aDer Kampf beginnt!");
|
||||
WinconditionTechKO.startAutoChecker();
|
||||
}
|
||||
|
||||
private void setAllPlayersGM(GameMode gm) {
|
||||
for(FightPlayer fightPlayer: Fight.getBlueTeam().getPlayers()){
|
||||
fightPlayer.getPlayer().setGameMode(gm);
|
||||
}
|
||||
for(FightPlayer fightPlayer: Fight.getRedTeam().getPlayers()){
|
||||
fightPlayer.getPlayer().setGameMode(gm);
|
||||
}
|
||||
}
|
||||
|
||||
public void setRunningState() {
|
||||
if(fightState != FightState.PRE_RUNNING)
|
||||
return;
|
||||
fightState = FightState.RUNNING;
|
||||
Countdown.cancelAllTimers();
|
||||
|
||||
getWaterRemover().start();
|
||||
|
||||
setAllPlayersGM(GameMode.SURVIVAL);
|
||||
|
||||
WinconditionTimeout.timeout();
|
||||
WinconditionEntern.entern();
|
||||
|
||||
Bukkit.broadcastMessage(PREFIX + "§aArena freigegeben!");
|
||||
}
|
||||
|
||||
public void setSpectateState(FightTeam winFightTeam) {
|
||||
if(fightState != FightState.RUNNING)
|
||||
return;
|
||||
fightState = FightState.SPECTATE;
|
||||
Countdown.cancelAllTimers();
|
||||
Bukkit.getScheduler().cancelTask(WinconditionTechKO.getTaskID());
|
||||
|
||||
setAllPlayersGM(GameMode.SPECTATOR);
|
||||
for(Player p : Bukkit.getOnlinePlayers()){
|
||||
p.getInventory().clear();
|
||||
}
|
||||
Bukkit.broadcastMessage(" ");
|
||||
|
||||
if(winFightTeam != null) {
|
||||
Bukkit.broadcastMessage(PREFIX + "§aDas Team " + winFightTeam.getName() + " §ahat gewonnen!");
|
||||
teleportAllToFightSpawn();
|
||||
|
||||
for(FightPlayer fightPlayer : winFightTeam.getPlayers()) {
|
||||
CoinSystem.getCoinsManager(fightPlayer.getPlayer()).addCoins(Config.MoneyWin);
|
||||
}
|
||||
|
||||
for(FightPlayer fightPlayer : Fight.getOpposite(winFightTeam).getPlayers()) {
|
||||
CoinSystem.getCoinsManager(fightPlayer.getPlayer()).addCoins(Config.MoneyLose);
|
||||
}
|
||||
} else {
|
||||
Bukkit.broadcastMessage(PREFIX + "§aKein Team hat gewonnen!");
|
||||
for(FightPlayer fightPlayer : Fight.getBlueTeam().getPlayers()) {
|
||||
CoinSystem.getCoinsManager(fightPlayer.getPlayer()).addCoins(Config.MoneyDraw);
|
||||
}
|
||||
|
||||
for(FightPlayer fightPlayer : Fight.getRedTeam().getPlayers()) {
|
||||
CoinSystem.getCoinsManager(fightPlayer.getPlayer()).addCoins(Config.MoneyDraw);
|
||||
}
|
||||
}
|
||||
|
||||
Countdown countdown = new Countdown(Config.SpectatorDuration, new FinishSpectateOver(), Sound.BLOCK_NOTE_PLING, false);
|
||||
countdown.startTimer(FightSystem.getPlugin());
|
||||
}
|
||||
|
||||
public int getFightTime() {
|
||||
return fightTime;
|
||||
}
|
||||
|
||||
public static boolean isEntern() {
|
||||
return entern;
|
||||
}
|
||||
|
||||
private void teleportAllToFightSpawn() {
|
||||
Fight.getBlueTeam().teleportToSpawn();
|
||||
Fight.getRedTeam().teleportToSpawn();
|
||||
|
||||
for(Player player : Bukkit.getServer().getOnlinePlayers()) {
|
||||
FightTeam fightTeam = Fight.getPlayerTeam(player);
|
||||
if(fightTeam == null) player.teleport(Config.SpecSpawn);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static void setFightTime(int fightTime) {
|
||||
FightSystem.fightTime = fightTime;
|
||||
}
|
||||
|
||||
public static void setEntern(boolean entern) {
|
||||
final List<Pair<Integer, Integer>> chunksBlue = TechHider.prepareChunkReload(Fight.getBlueTeam().getPlayers().get(0).getPlayer());
|
||||
final List<Pair<Integer, Integer>> chunksRed = TechHider.prepareChunkReload(Fight.getRedTeam().getPlayers().get(0).getPlayer());
|
||||
FightSystem.entern = entern;
|
||||
for(FightPlayer player : Fight.getBlueTeam().getPlayers()){
|
||||
TechHider.reloadChunks(player.getPlayer(), chunksBlue);
|
||||
}
|
||||
for(FightPlayer player : Fight.getRedTeam().getPlayers()){
|
||||
TechHider.reloadChunks(player.getPlayer(), chunksRed);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,343 +0,0 @@
|
||||
package me.yaruma.fightsystem.fight;
|
||||
|
||||
import com.boydti.fawe.FaweAPI;
|
||||
import com.sk89q.worldedit.Vector;
|
||||
import com.sk89q.worldedit.bukkit.BukkitWorld;
|
||||
import com.sk89q.worldedit.math.transform.AffineTransform;
|
||||
import com.sk89q.worldedit.world.World;
|
||||
import de.warking.hunjy.MySQL.Schematic;
|
||||
import de.warking.hunjy.MySQL.SchematicType;
|
||||
import de.warking.hunjy.MySQL.WarkingUser;
|
||||
import javafx.util.Pair;
|
||||
import me.yaruma.fightsystem.FightSystem;
|
||||
import me.yaruma.fightsystem.kit.KitManager;
|
||||
import me.yaruma.fightsystem.utils.Config;
|
||||
import me.yaruma.fightsystem.utils.ItemBuilder;
|
||||
import me.yaruma.fightsystem.utils.TechHider;
|
||||
import me.yaruma.fightsystem.winconditions.WinconditionTechKO;
|
||||
import net.md_5.bungee.api.ChatColor;
|
||||
import net.md_5.bungee.api.chat.ClickEvent;
|
||||
import net.md_5.bungee.api.chat.ComponentBuilder;
|
||||
import net.md_5.bungee.api.chat.HoverEvent;
|
||||
import net.md_5.bungee.api.chat.TextComponent;
|
||||
import org.bukkit.*;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class FightTeam {
|
||||
|
||||
private FightPlayer leader;
|
||||
private final List<FightPlayer> players = new ArrayList<>();
|
||||
private boolean ready;
|
||||
private final List<Player> invited = new ArrayList<>();
|
||||
private final String name;
|
||||
private final String prefix;
|
||||
private Schematic schematic;
|
||||
private final boolean blue;
|
||||
|
||||
private final Location spawn;
|
||||
private final Vector paste;
|
||||
private final boolean rotate;
|
||||
|
||||
public FightTeam(String Name, String Prefix, Location Spawn, Vector Paste, boolean Rotate, boolean Blue) {
|
||||
spawn = Spawn;
|
||||
paste = Paste;
|
||||
name = Name;
|
||||
prefix = Prefix;
|
||||
ready = false;
|
||||
rotate = Rotate;
|
||||
blue = Blue;
|
||||
}
|
||||
|
||||
public void teleportToSpawn(){
|
||||
for(FightPlayer player : players){
|
||||
player.getPlayer().teleport(spawn);
|
||||
}
|
||||
}
|
||||
|
||||
public FightPlayer getFightPlayer(Player player) {
|
||||
for(FightPlayer fightPlayer : players) {
|
||||
if(fightPlayer.getPlayer().equals(player))
|
||||
return fightPlayer;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean allPlayersOut() {
|
||||
for(FightPlayer fightPlayer : players) {
|
||||
if(!fightPlayer.isOut())
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean isPlayerInTeam(Player player) {
|
||||
for(FightPlayer fightPlayer : players) {
|
||||
if(fightPlayer.getPlayer().equals(player))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean isPlayerLeader(Player player) {
|
||||
if(leader != null)
|
||||
return leader.getPlayer().equals(player);
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
public void broadcast(String message) {
|
||||
for(FightPlayer fightPlayer : players) {
|
||||
fightPlayer.sendMessage(message);
|
||||
}
|
||||
}
|
||||
|
||||
public FightPlayer addMember(Player player) {
|
||||
final List<Pair<Integer, Integer>> chunksToReload = TechHider.prepareChunkReload(player);
|
||||
FightPlayer fightPlayer = new FightPlayer(player, false);
|
||||
players.add(fightPlayer);
|
||||
invited.remove(player);
|
||||
|
||||
player.setGameMode(GameMode.ADVENTURE);
|
||||
player.teleport(spawn);
|
||||
if(KitManager.getKits(false).size() > 1)
|
||||
player.getInventory().setItem(1, new ItemBuilder(Material.LEATHER_CHESTPLATE).removeAllAtributs().addEnchantment(Enchantment.DURABILITY, 1).setDisplayName("§eKit wählen").build());
|
||||
TechHider.reloadChunks(player, chunksToReload);
|
||||
return fightPlayer;
|
||||
}
|
||||
|
||||
public void removePlayer(Player player) {
|
||||
FightPlayer fightPlayer = getFightPlayer(player);
|
||||
if(fightPlayer == null)
|
||||
return;
|
||||
|
||||
final List<Pair<Integer, Integer>> chunksToReload = TechHider.prepareChunkReload(player);
|
||||
players.remove(fightPlayer);
|
||||
fightPlayer.getPlayer().getInventory().clear();
|
||||
if(fightPlayer.equals(leader) && FightSystem.getFightState() == FightState.SETUP){
|
||||
this.leader = null;
|
||||
if(!players.isEmpty()) {
|
||||
setLeader(players.get(0));
|
||||
Bukkit.broadcastMessage(FightSystem.PREFIX + "§aDer Spieler §e" + leader.getPlayer().getName() + " §aist nun Leader von Team " + getName() + "§a!");
|
||||
}else{
|
||||
Bukkit.broadcastMessage(FightSystem.PREFIX + "§cTeam " + getName() + " §chat keine Spieler mehr.\n Arena schließt...");
|
||||
Bukkit.shutdown();
|
||||
}
|
||||
}
|
||||
|
||||
player.setGameMode(GameMode.SPECTATOR);
|
||||
player.teleport(Config.SpecSpawn);
|
||||
TechHider.reloadChunks(player, chunksToReload);
|
||||
}
|
||||
|
||||
public boolean hasTeamLeader() {
|
||||
return leader != null;
|
||||
}
|
||||
|
||||
public boolean isBlue(){
|
||||
return blue;
|
||||
}
|
||||
public boolean isRed(){
|
||||
return !blue;
|
||||
}
|
||||
|
||||
public FightPlayer getLeader() {
|
||||
return leader;
|
||||
}
|
||||
|
||||
public void setLeader(FightPlayer leader) {
|
||||
this.leader = leader;
|
||||
leader.setKit(KitManager.getKitByName(Config.LeaderDefault));
|
||||
Inventory inventory = leader.getPlayer().getInventory();
|
||||
inventory.setItem(0, new ItemBuilder(Material.PAPER).removeAllAtributs().setDisplayName("§eSpieler einladen").build());
|
||||
if(KitManager.getKits(true).size() > 1)
|
||||
inventory.setItem(1, new ItemBuilder(Material.LEATHER_CHESTPLATE).removeAllAtributs().addEnchantment(Enchantment.DURABILITY, 1).setDisplayName("§eKit wählen").build());
|
||||
else
|
||||
inventory.setItem(1, new ItemBuilder(Material.AIR).build());
|
||||
inventory.setItem(2, new ItemBuilder(Material.FIREWORK_CHARGE).removeAllAtributs().setDisplayName("§cSpieler rauswerfen").build());
|
||||
inventory.setItem(3, new ItemBuilder(Material.INK_SACK, (short) 10).removeAllAtributs().addEnchantment(Enchantment.DURABILITY, 1).setDisplayName("§cNicht bereit").build());
|
||||
inventory.setItem(5, new ItemBuilder(Material.INK_SACK, (short) 1).removeAllAtributs().addEnchantment(Enchantment.DURABILITY, 1).setDisplayName("§4Abbrechen").build());
|
||||
inventory.setItem(7, new ItemBuilder(Material.CAULDRON_ITEM).removeAllAtributs().addEnchantment(Enchantment.DURABILITY, 1).setDisplayName("§e" + Config.GameName + " wählen").build());
|
||||
}
|
||||
|
||||
public List<FightPlayer> getPlayers() {
|
||||
return players;
|
||||
}
|
||||
|
||||
public boolean isReady() {
|
||||
return ready;
|
||||
}
|
||||
|
||||
private void pasteSchematic(){
|
||||
File file = new File(Config.SchematicDirectory + WarkingUser.get(schematic.getSchemOwner()).getUUID().toString() + "/" + schematic.getSchemName() + ".schematic");
|
||||
com.boydti.fawe.object.schematic.Schematic schem;
|
||||
try {
|
||||
schem = FaweAPI.load(file);
|
||||
}catch(IOException e){
|
||||
e.printStackTrace();
|
||||
return;
|
||||
}
|
||||
World w = new BukkitWorld(Bukkit.getWorlds().get(0));
|
||||
Vector dimensions = schem.getClipboard().getDimensions();
|
||||
Vector v;
|
||||
Vector offset = new Vector(schem.getClipboard().getRegion().getMinimumPoint()).subtract(schem.getClipboard().getOrigin());
|
||||
AffineTransform aT = new AffineTransform();
|
||||
if(rotate){
|
||||
aT = aT.rotateY(180);
|
||||
v = paste.add(dimensions.getX()/2 + dimensions.getX()%2, 0, dimensions.getZ()/2 + dimensions.getZ()%2).subtract(offset.multiply(-1, 1, -1)).subtract(1, 0, 1);
|
||||
}else{
|
||||
v = paste.subtract(dimensions.getX()/2 - dimensions.getX()%2, 0, dimensions.getZ()/2 - dimensions.getZ()%2).subtract(offset);
|
||||
}
|
||||
if(Config.AlignWater){
|
||||
Vector it = schem.getClipboard().getMinimumPoint();
|
||||
int depth = 0;
|
||||
while(!schem.getClipboard().getBlock(it).isAir()){
|
||||
depth++;
|
||||
it = it.setY(it.getY()+1);
|
||||
}
|
||||
System.out.println(name + " " + Config.WaterDepth + " " + depth + " " + schem.getClipboard().getBlock(new Vector(0, 0, 0)));
|
||||
v = v.add(0, Config.WaterDepth - depth, 0);
|
||||
}
|
||||
schem.paste(w, v, false, true, aT).flushQueue();
|
||||
Bukkit.getScheduler().runTaskLater(FightSystem.getPlugin(), () ->{
|
||||
teleportToSpawn();
|
||||
},20);
|
||||
}
|
||||
|
||||
public void setSchematic(Schematic schematic){
|
||||
this.schematic = schematic;
|
||||
broadcast(FightSystem.PREFIX + "§7Das §e" + Config.GameName + " " + schematic.getSchemName() + " §7wird für den Kampf verwendet!");
|
||||
leader.getPlayer().getInventory().clear(7);
|
||||
if(Fight.getOpposite(this).hasSchematic()){
|
||||
pasteSchematic();
|
||||
Fight.getOpposite(this).pasteSchematic();
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(FightSystem.getPlugin(), WinconditionTechKO::addWater, 20*10L);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean hasSchematic(){
|
||||
return schematic != null;
|
||||
}
|
||||
|
||||
public void setReady(boolean ready) {
|
||||
Player leader = getLeader().getPlayer();
|
||||
|
||||
if(schematic == null){
|
||||
leader.sendMessage(FightSystem.PREFIX + "§cZuerst muss eine Schematic gewählt sein!");
|
||||
return;
|
||||
}
|
||||
|
||||
this.ready = ready;
|
||||
if(ready) {
|
||||
leader.getInventory().setItem(3, new ItemBuilder(Material.INK_SACK, (short) 8).removeAllAtributs().addEnchantment(Enchantment.DURABILITY,1 ).setDisplayName("§aBereit").build());
|
||||
broadcast(FightSystem.PREFIX + "§aEuer Team ist nun bereit!");
|
||||
if(Fight.getOpposite(this).isReady()) {
|
||||
FightSystem.getPlugin().setPreRunningState();
|
||||
}
|
||||
} else {
|
||||
leader.getInventory().setItem(3, new ItemBuilder(Material.INK_SACK, (short) 10).removeAllAtributs().addEnchantment(Enchantment.DURABILITY, 1).setDisplayName("§cNicht bereit").build());
|
||||
broadcast(FightSystem.PREFIX + "§cEuer Team ist nicht mehr bereit!");
|
||||
}
|
||||
}
|
||||
|
||||
public List<Player> getInvited() {
|
||||
return invited;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return prefix + name;
|
||||
}
|
||||
|
||||
public String getPrefix() {
|
||||
return prefix;
|
||||
}
|
||||
|
||||
public Location getSpawn() {
|
||||
return spawn;
|
||||
}
|
||||
|
||||
public void sendPlayerSchematicList(boolean publicSchematics, int currentPage, int filesPerPage, Player player, SchematicType schematicType) {
|
||||
List<Schematic> preSchematicList;
|
||||
List<Schematic> schematicList = new ArrayList<>();
|
||||
if(publicSchematics) {
|
||||
preSchematicList = Schematic.getSchemsAccessibleByUser(0);
|
||||
} else {
|
||||
preSchematicList = Schematic.getSchemsAccessibleByUser(player.getUniqueId());
|
||||
}
|
||||
|
||||
for(Schematic s : preSchematicList) {
|
||||
if(s.getSchemType() == schematicType)
|
||||
schematicList.add(s);
|
||||
}
|
||||
|
||||
if(schematicList.isEmpty()) {
|
||||
player.sendMessage(FightSystem.PREFIX + "§cDu hast noch keine Schematic(s)!");
|
||||
return;
|
||||
}
|
||||
|
||||
int pages;
|
||||
|
||||
double doublePages = (double) schematicList.size() / (double) filesPerPage;
|
||||
int intPages = schematicList.size() / filesPerPage;
|
||||
|
||||
if(schematicList.size() <= filesPerPage) {
|
||||
pages = 1;
|
||||
} else if(doublePages > intPages) {
|
||||
pages = (intPages + 1);
|
||||
} else
|
||||
pages = intPages;
|
||||
|
||||
if(currentPage >= pages) return;
|
||||
|
||||
player.sendMessage("§5======§8[§dSeite " + (currentPage + 1) + " §7/ §d" + pages + " §7| §d" + schematicList.size() + " Schematic(s)§8]§5======");
|
||||
|
||||
for(int i = currentPage * filesPerPage; i < (currentPage * filesPerPage) + filesPerPage; i++) {
|
||||
if(schematicList.size() <= i) break;
|
||||
|
||||
Schematic schematic = schematicList.get(i);
|
||||
|
||||
TextComponent schematics = new TextComponent("§b" + schematic.getSchemName());
|
||||
schematics.setBold(true);
|
||||
|
||||
schematics.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Schematic benutzen...").create()));
|
||||
schematics.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/ak schem " + schematic.getSchemName() + (publicSchematics ? " public" : " private")));
|
||||
|
||||
player.spigot().sendMessage(schematics);
|
||||
}
|
||||
|
||||
if(pages <= 1) return;
|
||||
|
||||
if(currentPage == 0) {
|
||||
TextComponent nextPage = new TextComponent("Nächste Seite >>");
|
||||
nextPage.setColor(ChatColor.RED);
|
||||
nextPage.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§6Nächste Seite...").create()));
|
||||
nextPage.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/ak schemlist 1"));
|
||||
player.spigot().sendMessage(nextPage);
|
||||
} else if((currentPage + 1) == pages) {
|
||||
TextComponent beforePage = new TextComponent("<< Vorherige Seite");
|
||||
beforePage.setColor(ChatColor.RED);
|
||||
beforePage.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§6Vorherige Seite...").create()));
|
||||
beforePage.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/ak schemlist " + (currentPage - 1)));
|
||||
player.spigot().sendMessage(beforePage);
|
||||
} else {
|
||||
TextComponent beforePage = new TextComponent("<< Seite ");
|
||||
beforePage.setColor(ChatColor.RED);
|
||||
beforePage.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§6Vorherige Seite...").create()));
|
||||
beforePage.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/ak schemlist " + (currentPage - 1)));
|
||||
|
||||
TextComponent nextPage = new TextComponent(">>");
|
||||
nextPage.setColor(ChatColor.RED);
|
||||
nextPage.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§6Nächste Seite...").create()));
|
||||
nextPage.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/ak schemlist " + (currentPage + 1)));
|
||||
|
||||
beforePage.addExtra(nextPage);
|
||||
player.spigot().sendMessage(beforePage);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,106 +0,0 @@
|
||||
package me.yaruma.fightsystem.fight;
|
||||
|
||||
import me.yaruma.fightsystem.FightSystem;
|
||||
import me.yaruma.fightsystem.winconditions.WinconditionTechKO;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
|
||||
import java.util.AbstractMap;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class WaterRemover {
|
||||
|
||||
private List<AbstractMap.SimpleEntry<Location, Integer>> explodedBlocks = new ArrayList<>();
|
||||
private List<Block> waterList = new ArrayList<>();
|
||||
private BukkitTask task;
|
||||
|
||||
public void start() {
|
||||
this.stop();
|
||||
this.explodedBlocks = new ArrayList<>();
|
||||
this.waterList = new ArrayList<>();
|
||||
this.task = Bukkit.getScheduler().runTaskTimerAsynchronously((Plugin)FightSystem.getPlugin(), () -> {
|
||||
try {
|
||||
WaterRemover.this.wateredCheck();
|
||||
WaterRemover.this.removeWater();
|
||||
}
|
||||
catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}, 0L, 20L);
|
||||
}
|
||||
|
||||
public void stop() {
|
||||
if (this.task != null) {
|
||||
this.task.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
public void add(Location loc) {
|
||||
this.explodedBlocks.add(new AbstractMap.SimpleEntry<>(loc, 0));
|
||||
}
|
||||
|
||||
private void wateredCheck() {
|
||||
for (int i = this.explodedBlocks.size() - 1; i >= 0; i--) {
|
||||
if (this.explodedBlocks.get(i).getValue() >= 15) {
|
||||
Block b = this.explodedBlocks.get(i).getKey().getBlock();
|
||||
if (b.getType() == Material.WATER || b.getType() == Material.STATIONARY_WATER) {
|
||||
this.waterList.add(b);
|
||||
}
|
||||
this.explodedBlocks.remove(i);
|
||||
continue;
|
||||
}
|
||||
this.explodedBlocks.get(i).setValue(this.explodedBlocks.get(i).getValue() + 1);
|
||||
}
|
||||
}
|
||||
|
||||
private void removeWater() {
|
||||
ArrayList<Block> blocksToRemove = new ArrayList<>();
|
||||
for (int i = this.waterList.size() - 1; i > -1; --i) {
|
||||
Block current = this.waterList.get(i);
|
||||
blocksToRemove.addAll(this.getSourceBlocksOfWater(current));
|
||||
if (current.getType() != Material.AIR) continue;
|
||||
this.waterList.remove(i);
|
||||
}
|
||||
Bukkit.getScheduler().runTask((Plugin)FightSystem.getPlugin(), () -> {
|
||||
for (Block block : blocksToRemove) {
|
||||
block.setType(Material.AIR);
|
||||
}
|
||||
WinconditionTechKO.removeWater();
|
||||
});
|
||||
}
|
||||
|
||||
private List<Block> getSourceBlocksOfWater(Block startBlock) {
|
||||
ArrayList<Block> water = new ArrayList<>();
|
||||
this.collectBlocks(startBlock, water, new ArrayList<>());
|
||||
return water;
|
||||
}
|
||||
|
||||
private void collectBlocks(Block anchor, List<Block> collected, List<Block> visitedBlocks) {
|
||||
if (anchor.getType() != Material.WATER && anchor.getType() != Material.STATIONARY_WATER) {
|
||||
return;
|
||||
}
|
||||
if (visitedBlocks.contains((Object)anchor)) {
|
||||
return;
|
||||
}
|
||||
visitedBlocks.add(anchor);
|
||||
if (anchor.getType() == Material.STATIONARY_WATER) {
|
||||
collected.add(anchor);
|
||||
}
|
||||
if(visitedBlocks.size() > 50) {
|
||||
collected.clear();
|
||||
return;
|
||||
}
|
||||
this.collectBlocks(anchor.getRelative(BlockFace.UP), collected, visitedBlocks);
|
||||
this.collectBlocks(anchor.getRelative(BlockFace.NORTH), collected, visitedBlocks);
|
||||
this.collectBlocks(anchor.getRelative(BlockFace.EAST), collected, visitedBlocks);
|
||||
this.collectBlocks(anchor.getRelative(BlockFace.SOUTH), collected, visitedBlocks);
|
||||
this.collectBlocks(anchor.getRelative(BlockFace.WEST), collected, visitedBlocks);
|
||||
}
|
||||
|
||||
}
|
@ -1,28 +0,0 @@
|
||||
package me.yaruma.fightsystem.listener;
|
||||
|
||||
import me.yaruma.fightsystem.FightSystem;
|
||||
import me.yaruma.fightsystem.fight.Fight;
|
||||
import me.yaruma.fightsystem.fight.FightState;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
|
||||
public class BlockBreakListener implements Listener {
|
||||
|
||||
@EventHandler
|
||||
public void handleBlockBreak(BlockBreakEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if(Fight.getPlayerTeam(player) == null)
|
||||
event.setCancelled(true);
|
||||
else if(FightSystem.getFightState() != FightState.RUNNING) {
|
||||
event.setCancelled(true);
|
||||
if(FightSystem.getFightState() == FightState.SETUP || FightSystem.getFightState() == FightState.PRE_RUNNING) {
|
||||
player.sendMessage(FightSystem.PREFIX + "§cDu darfst erst nach Fightbeginn Blöcke abbauen!");
|
||||
} else
|
||||
player.sendMessage(FightSystem.PREFIX + "§cDu darfst keine Blöcke mehr abbauen!");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -1,27 +0,0 @@
|
||||
package me.yaruma.fightsystem.listener;
|
||||
|
||||
import me.yaruma.fightsystem.FightSystem;
|
||||
import me.yaruma.fightsystem.fight.Fight;
|
||||
import me.yaruma.fightsystem.fight.FightState;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
|
||||
public class BlockPlaceListener implements Listener {
|
||||
|
||||
@EventHandler
|
||||
public void handleBlockPlace(BlockPlaceEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if(Fight.getPlayerTeam(player) == null)
|
||||
event.setCancelled(true);
|
||||
else if(FightSystem.getFightState() != FightState.RUNNING) {
|
||||
event.setCancelled(true);
|
||||
if(FightSystem.getFightState() == FightState.PRE_RUNNING || FightSystem.getFightState() == FightState.SETUP) {
|
||||
player.sendMessage(FightSystem.PREFIX + "§cDu darfst erst nach Fightbeginn Blöcke setzen!");
|
||||
} else
|
||||
player.sendMessage(FightSystem.PREFIX + "§cDu darfst keine Blöcke mehr setzen!");
|
||||
}
|
||||
}
|
||||
}
|
@ -1,50 +0,0 @@
|
||||
package me.yaruma.fightsystem.listener;
|
||||
|
||||
import me.yaruma.fightsystem.FightSystem;
|
||||
import me.yaruma.fightsystem.fight.Fight;
|
||||
import me.yaruma.fightsystem.fight.FightState;
|
||||
import org.bukkit.entity.Arrow;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
|
||||
public class EntityDamageByEntityListener implements Listener {
|
||||
|
||||
private final FightSystem instance = FightSystem.getPlugin();
|
||||
|
||||
@EventHandler
|
||||
public void handleEntityDamageByEntity(EntityDamageByEntityEvent event) {
|
||||
if(instance.getFightState() != FightState.RUNNING) {
|
||||
event.setCancelled(true);
|
||||
} else if(event.getEntity() instanceof Player) {
|
||||
Player player = ((Player) event.getEntity()).getPlayer();
|
||||
|
||||
if(event.getDamager() instanceof Player) {
|
||||
Player damager = ((Player) event.getDamager()).getPlayer();
|
||||
|
||||
if(Fight.getPlayerTeam(player) != null) {
|
||||
if(Fight.getPlayerTeam(player) == Fight.getPlayerTeam(damager)) {
|
||||
event.setCancelled(true);
|
||||
damager.sendMessage(FightSystem.PREFIX + "§cDu darfst deinen Teamkollegen keinen Schaden zufügen!");
|
||||
}
|
||||
} else
|
||||
event.setCancelled(true);
|
||||
}else if(event.getDamager() instanceof Arrow) {
|
||||
Arrow damagerArrow = (Arrow) event.getDamager();
|
||||
if(!(damagerArrow.getShooter() instanceof Player)) {
|
||||
return;
|
||||
}
|
||||
Player damager = (Player) damagerArrow.getShooter();
|
||||
if(Fight.getPlayerTeam(player) == Fight.getPlayerTeam(damager)) {
|
||||
event.setCancelled(true);
|
||||
damager.sendMessage(FightSystem.PREFIX + "§cDu darfst deinen Teamkollegen keinen Schaden zufügen!");
|
||||
damagerArrow.setFireTicks(0);
|
||||
player.setFireTicks(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,24 +0,0 @@
|
||||
package me.yaruma.fightsystem.listener;
|
||||
|
||||
import me.yaruma.fightsystem.FightSystem;
|
||||
import me.yaruma.fightsystem.fight.Fight;
|
||||
import me.yaruma.fightsystem.fight.FightState;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.EntityDamageEvent;
|
||||
|
||||
public class EntityDamageListener implements Listener {
|
||||
|
||||
@EventHandler
|
||||
public void handleEntityDamage(EntityDamageEvent event) {
|
||||
if(!(event.getEntity() instanceof Player)) return;
|
||||
Player player = (Player) event.getEntity();
|
||||
if(Fight.getPlayerTeam(player) != null) {
|
||||
if(FightSystem.getPlugin().getFightState() != FightState.RUNNING) event.setCancelled(true);
|
||||
} else
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,26 +0,0 @@
|
||||
package me.yaruma.fightsystem.listener;
|
||||
|
||||
import me.yaruma.fightsystem.FightSystem;
|
||||
import me.yaruma.fightsystem.fight.FightState;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.EntityExplodeEvent;
|
||||
|
||||
public class EntityExplodeListener implements Listener {
|
||||
|
||||
@EventHandler
|
||||
public void handleEntityExplode(EntityExplodeEvent event) {
|
||||
if(FightSystem.getFightState() != FightState.RUNNING){
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
for(Block block : event.blockList()) {
|
||||
if(block.getType() != Material.WATER || block.getType() != Material.STATIONARY_WATER)
|
||||
FightSystem.getPlugin().getWaterRemover().add(block.getLocation());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,36 +0,0 @@
|
||||
package me.yaruma.fightsystem.listener;
|
||||
|
||||
import me.yaruma.fightsystem.FightSystem;
|
||||
import me.yaruma.fightsystem.fight.Fight;
|
||||
import me.yaruma.fightsystem.fight.FightTeam;
|
||||
import me.yaruma.fightsystem.utils.Config;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
|
||||
public class PlayerDeathListener implements Listener {
|
||||
|
||||
FightSystem instance = FightSystem.getPlugin();
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void handlePlayerDeath(PlayerDeathEvent event) {
|
||||
Player player = event.getEntity().getPlayer();
|
||||
if(Fight.getPlayerTeam(player) == null) return;
|
||||
FightTeam fightTeam = Fight.getPlayerTeam(player);
|
||||
event.setDeathMessage(FightSystem.PREFIX + "§cDer Spieler §6" + player.getName() + " §cist gestorben!");
|
||||
fightTeam.getFightPlayer(player).setOut(true);
|
||||
player.setGameMode(GameMode.SPECTATOR);
|
||||
if(fightTeam == Fight.redTeam)
|
||||
player.teleport(Config.TeamRedSpawn);
|
||||
else
|
||||
player.teleport(Config.TeamBlueSpawn);
|
||||
|
||||
Fight.playSound(Sound.ENTITY_WITHER_DEATH, 100.0F, 1.0F);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,54 +0,0 @@
|
||||
package me.yaruma.fightsystem.listener;
|
||||
|
||||
import me.yaruma.fightsystem.FightSystem;
|
||||
import me.yaruma.fightsystem.fight.Fight;
|
||||
import me.yaruma.fightsystem.fight.FightState;
|
||||
import me.yaruma.fightsystem.fight.FightTeam;
|
||||
import me.yaruma.fightsystem.utils.Config;
|
||||
import me.yaruma.fightsystem.utils.countdown.Countdown;
|
||||
import me.yaruma.fightsystem.utils.countdown.CountdownType;
|
||||
import me.yaruma.fightsystem.utils.countdown.FinishSetupOver;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
|
||||
public class PlayerJoinListener implements Listener {
|
||||
|
||||
@EventHandler
|
||||
public void handlePlayerJoin(PlayerJoinEvent event) {
|
||||
event.setJoinMessage(null);
|
||||
|
||||
Player player = event.getPlayer();
|
||||
player.setHealth(20);
|
||||
player.setFoodLevel(20);
|
||||
player.getInventory().clear();
|
||||
|
||||
FightTeam fightTeam = Fight.getPlayerTeam(player);
|
||||
|
||||
if (fightTeam == null) {
|
||||
if(!Fight.getRedTeam().hasTeamLeader() && FightSystem.getFightState() == FightState.SETUP) {
|
||||
Fight.getRedTeam().setLeader(Fight.getRedTeam().addMember(player));
|
||||
} else if(!Fight.getBlueTeam().hasTeamLeader() && FightSystem.getFightState() == FightState.SETUP) {
|
||||
Fight.getBlueTeam().setLeader(Fight.getBlueTeam().addMember(player));
|
||||
} else {
|
||||
player.setGameMode(GameMode.SPECTATOR);
|
||||
player.teleport(Config.SpecSpawn);
|
||||
}
|
||||
} else {
|
||||
player.teleport(fightTeam.getSpawn());
|
||||
player.setGameMode(GameMode.SPECTATOR);
|
||||
}
|
||||
|
||||
if(Fight.getRedTeam().hasTeamLeader() && Fight.getBlueTeam().hasTeamLeader() && FightSystem.getFightState() == FightState.SETUP
|
||||
&& (Fight.getRedTeam().getLeader().getPlayer() == player || Fight.getBlueTeam().getLeader().getPlayer() == player)) {
|
||||
Countdown.cancelTimerType(CountdownType.NO_PLAYERS_ONLINE);
|
||||
new Countdown(Config.SetupDuration, new FinishSetupOver(), null, false).startTimer(FightSystem.getPlugin());
|
||||
}
|
||||
|
||||
FightSystem.getPlugin().getScoreboard().setAutoScoreboard(20*10, player);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,69 +0,0 @@
|
||||
package me.yaruma.fightsystem.listener;
|
||||
|
||||
import me.yaruma.fightsystem.FightSystem;
|
||||
import me.yaruma.fightsystem.fight.Fight;
|
||||
import me.yaruma.fightsystem.fight.FightState;
|
||||
import me.yaruma.fightsystem.fight.FightTeam;
|
||||
import me.yaruma.fightsystem.utils.Config;
|
||||
import me.yaruma.fightsystem.utils.Region;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerMoveEvent;
|
||||
|
||||
public class PlayerMoveListener implements Listener {
|
||||
|
||||
private final FightSystem instance = FightSystem.getPlugin();
|
||||
|
||||
@EventHandler
|
||||
public void handlePlayerMove(PlayerMoveEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
Location to = event.getTo();
|
||||
Location from = event.getFrom();
|
||||
FightTeam fightTeam = Fight.getPlayerTeam(player);
|
||||
|
||||
//Check in Arena
|
||||
if(!Region.isIn2DRegion(to, Config.ArenaMinX, Config.ArenaMinZ, Config.ArenaMaxX, Config.ArenaMaxZ)){
|
||||
player.teleport(from);
|
||||
player.sendMessage(FightSystem.PREFIX + "§cDu darfst die Arena nicht verlassen!");
|
||||
return;
|
||||
}
|
||||
|
||||
boolean inArenaY = to.getY() + 1.8 <= Config.upperArenaBorder;
|
||||
|
||||
//Check under Arena
|
||||
if(to.getY() <= Config.underArenaBorder) {
|
||||
if(fightTeam == null){
|
||||
player.teleport(from);
|
||||
player.sendMessage(FightSystem.PREFIX + "§cDu darfst die Arena nicht verlassen!");
|
||||
}else if(FightSystem.getFightState() == FightState.RUNNING)
|
||||
player.damage(2);
|
||||
else if(fightTeam == Fight.redTeam)
|
||||
player.teleport(Config.TeamRedSpawn);
|
||||
else
|
||||
player.teleport(Config.TeamBlueSpawn);
|
||||
return;
|
||||
}else if(fightTeam != null && !inArenaY){
|
||||
player.teleport(from);
|
||||
player.sendMessage(FightSystem.PREFIX + "§cDu darfst die Arena nicht verlassen!");
|
||||
return;
|
||||
}
|
||||
|
||||
//Check TeamAreas
|
||||
boolean inBlueArea = inArenaY && Region.isIn2DRange(to, Config.TeamBlueCornerX, Config.TeamBlueCornerZ, Config.SchemsizeX, Config.SchemsizeZ, Config.BorderFromSchematic);
|
||||
boolean inRedArea = inArenaY && Region.isIn2DRange(to, Config.TeamRedCornerX, Config.TeamRedCornerZ, Config.SchemsizeX, Config.SchemsizeZ, Config.BorderFromSchematic);
|
||||
|
||||
if(inBlueArea || inRedArea) {
|
||||
if(fightTeam == null){
|
||||
player.teleport(from);
|
||||
player.sendMessage(FightSystem.PREFIX + "§cDu darfst nicht weiter zu den Kämpfern!");
|
||||
}
|
||||
}else if(fightTeam != null && (
|
||||
(!FightSystem.isEntern() && !fightTeam.getFightPlayer(player).isOut()) ||
|
||||
FightSystem.getFightState() == FightState.SPECTATE)){
|
||||
player.teleport(from);
|
||||
player.sendMessage(FightSystem.PREFIX + "§cDu darfst nicht zu " + Fight.getOpposite(fightTeam).getName() + "§c!");
|
||||
}
|
||||
}
|
||||
}
|
@ -1,37 +0,0 @@
|
||||
package me.yaruma.fightsystem.listener;
|
||||
|
||||
import me.yaruma.fightsystem.FightSystem;
|
||||
import me.yaruma.fightsystem.fight.Fight;
|
||||
import me.yaruma.fightsystem.fight.FightPlayer;
|
||||
import me.yaruma.fightsystem.fight.FightState;
|
||||
import me.yaruma.fightsystem.fight.FightTeam;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
|
||||
public class PlayerQuitListener implements Listener {
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void handlePlayerQuit(PlayerQuitEvent event) {
|
||||
event.setQuitMessage(null);
|
||||
|
||||
Player player = event.getPlayer();
|
||||
FightTeam fightTeam = Fight.getPlayerTeam(player);
|
||||
if(fightTeam == null)
|
||||
return;
|
||||
|
||||
FightState fightState = FightSystem.getFightState();
|
||||
if(fightState == FightState.SETUP){
|
||||
fightTeam.removePlayer(player);
|
||||
}else if(fightState == FightState.PRE_RUNNING || fightState == FightState.RUNNING){
|
||||
FightPlayer fightPlayer = fightTeam.getFightPlayer(player);
|
||||
if(!fightPlayer.isOut()) {
|
||||
fightTeam.getFightPlayer(player).setOut(true);
|
||||
Bukkit.broadcastMessage(FightSystem.PREFIX + "§cDer Spieler §6" + player.getName() + " §chat den Kampf verlassen!");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,19 +0,0 @@
|
||||
package me.yaruma.fightsystem.listener;
|
||||
|
||||
import me.yaruma.fightsystem.FightSystem;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerTeleportEvent;
|
||||
|
||||
public class PlayerTeleportListener implements Listener {
|
||||
|
||||
@EventHandler
|
||||
public void onTpGM3(PlayerTeleportEvent e) {
|
||||
if (e.getCause() == PlayerTeleportEvent.TeleportCause.SPECTATE) {
|
||||
e.setCancelled(true);
|
||||
e.getPlayer().sendMessage(FightSystem.PREFIX + "§cDu darfst die GM3 Teleportfunktion nicht benutzen!");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,92 +0,0 @@
|
||||
package me.yaruma.fightsystem.utils.countdown;
|
||||
|
||||
import me.yaruma.fightsystem.FightSystem;
|
||||
import me.yaruma.fightsystem.fight.Fight;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.scheduler.BukkitScheduler;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class Countdown {
|
||||
|
||||
private static final ArrayList<Countdown> countdowns = new ArrayList<>();
|
||||
|
||||
private int time;
|
||||
private final CountdownCallback countdownCallback;
|
||||
private int taskID;
|
||||
private Sound sound;
|
||||
private boolean level;
|
||||
|
||||
public Countdown(int time, CountdownCallback countdownCallback, Sound sound, boolean level) {
|
||||
this.time = time;
|
||||
this.countdownCallback = countdownCallback;
|
||||
this.sound = sound;
|
||||
this.level = level;
|
||||
countdowns.add(this);
|
||||
}
|
||||
|
||||
|
||||
public void startTimer(FightSystem plugin) {
|
||||
BukkitScheduler bukkitScheduler = Bukkit.getServer().getScheduler();
|
||||
this.taskID = bukkitScheduler.scheduleSyncRepeatingTask(plugin, () -> {
|
||||
|
||||
switch (time) {
|
||||
case 900: case 600: case 300: case 180: case 120:
|
||||
Bukkit.broadcastMessage(FightSystem.PREFIX + "§7Noch §a" + time / 60 + " §7Minuten " + countdownCallback.countdownCounting());
|
||||
break;
|
||||
case 60: case 30: case 20: case 15: case 10: case 5: case 4: case 3: case 2:
|
||||
if(this.sound != null)
|
||||
Fight.playSound(this.sound, 100.0F, 1.0F);
|
||||
|
||||
Bukkit.broadcastMessage(FightSystem.PREFIX + "§7Noch §a" + time + " §7Sekunden " + countdownCallback.countdownCounting());
|
||||
break;
|
||||
case 1:
|
||||
if(this.sound != null)
|
||||
Fight.playSound(this.sound, 100.0F, 1.0F);
|
||||
|
||||
Bukkit.broadcastMessage(FightSystem.PREFIX + "§7Noch §aeine §7Sekunde " + countdownCallback.countdownCounting());
|
||||
break;
|
||||
case 0:
|
||||
if(this.sound != null)
|
||||
Fight.playSound(this.sound, 100.0F, 2.0F);
|
||||
|
||||
cancelTimer();
|
||||
countdownCallback.countdownFinished();
|
||||
break;
|
||||
}
|
||||
if(this.level)
|
||||
Fight.setLevel(time);
|
||||
|
||||
time--;
|
||||
if(countdownCallback instanceof FinishTimeOver) FightSystem.setFightTime(time);
|
||||
}, 0, 20);
|
||||
}
|
||||
|
||||
private void cancelTimer() {
|
||||
|
||||
try {
|
||||
Bukkit.getScheduler().cancelTask(this.taskID);
|
||||
} catch (AssertionError ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
countdowns.remove(this);
|
||||
}
|
||||
|
||||
public static void cancelAllTimers() {
|
||||
while (!countdowns.isEmpty()) {
|
||||
countdowns.get(0).cancelTimer();
|
||||
}
|
||||
}
|
||||
|
||||
public static void cancelTimerType(CountdownType countdownType) {
|
||||
for(int i = countdowns.size() - 1; i >= 0; i--) {
|
||||
|
||||
if(countdowns.get(i).getType() == countdownType) countdowns.get(i).cancelTimer();
|
||||
}
|
||||
}
|
||||
|
||||
private CountdownType getType() {
|
||||
return countdownCallback.getType();
|
||||
}
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
package me.yaruma.fightsystem.utils.countdown;
|
||||
|
||||
interface CountdownCallback {
|
||||
String countdownCounting();
|
||||
void countdownFinished();
|
||||
CountdownType getType();
|
||||
}
|
@ -1,13 +0,0 @@
|
||||
package me.yaruma.fightsystem.utils.countdown;
|
||||
|
||||
public enum CountdownType {
|
||||
|
||||
NO_ENTERN,
|
||||
NO_PLAYERS_ONLINE,
|
||||
PRE_RUNNING,
|
||||
SETUP_OVER,
|
||||
SPECTATE_OVER,
|
||||
TIME_OVER
|
||||
|
||||
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
package me.yaruma.fightsystem.utils.countdown;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
public class FinishNoPlayersOnline implements CountdownCallback {
|
||||
|
||||
@Override
|
||||
public String countdownCounting() {
|
||||
return "bis der Server gestoppt wird!";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void countdownFinished() {
|
||||
Bukkit.getServer().shutdown();
|
||||
}
|
||||
|
||||
@Override
|
||||
public CountdownType getType() {
|
||||
return CountdownType.NO_PLAYERS_ONLINE;
|
||||
}
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
package me.yaruma.fightsystem.utils.countdown;
|
||||
|
||||
import me.yaruma.fightsystem.FightSystem;
|
||||
|
||||
public class FinishPreRunning implements CountdownCallback {
|
||||
|
||||
@Override
|
||||
public String countdownCounting() {
|
||||
return "bis die Arena freigegeben ist!";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void countdownFinished() {
|
||||
FightSystem.getPlugin().setRunningState();
|
||||
}
|
||||
|
||||
@Override
|
||||
public CountdownType getType() {
|
||||
return CountdownType.PRE_RUNNING;
|
||||
}
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
package me.yaruma.fightsystem.utils.countdown;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
public class FinishSpectateOver implements CountdownCallback {
|
||||
|
||||
@Override
|
||||
public String countdownCounting() {
|
||||
return "bis der Server gestoppt wird!";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void countdownFinished() {
|
||||
Bukkit.getServer().shutdown();
|
||||
}
|
||||
|
||||
@Override
|
||||
public CountdownType getType() {
|
||||
return CountdownType.SPECTATE_OVER;
|
||||
}
|
||||
}
|
@ -1,23 +0,0 @@
|
||||
package me.yaruma.fightsystem.utils.countdown;
|
||||
|
||||
import me.yaruma.fightsystem.FightSystem;
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
public class FinishTimeOver implements CountdownCallback {
|
||||
|
||||
@Override
|
||||
public String countdownCounting() {
|
||||
return "bis der Kampf vorbei ist!";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void countdownFinished() {
|
||||
Bukkit.broadcastMessage(FightSystem.PREFIX +"§aZeit abgelaufen!");
|
||||
FightSystem.getPlugin().setSpectateState(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CountdownType getType() {
|
||||
return CountdownType.TIME_OVER;
|
||||
}
|
||||
}
|
@ -1,88 +0,0 @@
|
||||
package me.yaruma.fightsystem.utils.scoreboard;
|
||||
|
||||
import me.yaruma.fightsystem.FightSystem;
|
||||
import me.yaruma.fightsystem.fight.Fight;
|
||||
import me.yaruma.fightsystem.fight.FightPlayer;
|
||||
import me.yaruma.fightsystem.fight.FightTeam;
|
||||
import me.yaruma.fightsystem.utils.Config;
|
||||
import me.yaruma.fightsystem.winconditions.WinconditionPercentSystem;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scoreboard.DisplaySlot;
|
||||
import org.bukkit.scoreboard.Objective;
|
||||
import org.bukkit.scoreboard.ScoreboardManager;
|
||||
|
||||
public class Scoreboard {
|
||||
|
||||
private final org.bukkit.scoreboard.Scoreboard scoreboard;
|
||||
private final Objective objective;
|
||||
|
||||
public Scoreboard() {
|
||||
ScoreboardManager scoreboardManager = Bukkit.getScoreboardManager();
|
||||
this.scoreboard = scoreboardManager.getNewScoreboard();
|
||||
this.objective = scoreboard.registerNewObjective("AAA", "BBB");
|
||||
}
|
||||
|
||||
public void setAutoScoreboard(int delay, Player player) {
|
||||
Bukkit.getScheduler().scheduleSyncRepeatingTask(FightSystem.getPlugin(), new Runnable() {
|
||||
|
||||
private int index = 0;
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
FightTeam fightTeam = getIndexDisplay(index);
|
||||
if (fightTeam != null) {
|
||||
objective.unregister();
|
||||
scoreboard.registerNewObjective("AAA", "BBB");
|
||||
|
||||
objective.setDisplaySlot(DisplaySlot.SIDEBAR);
|
||||
objective.setDisplayName(fightTeam.getName());
|
||||
|
||||
for (FightPlayer fp : fightTeam.getPlayers()) {
|
||||
if(!fp.isOut())
|
||||
objective.getScore(fightTeam.getPrefix() + fp.getPlayer().getName()).setScore((int) fp.getPlayer().getHealth());
|
||||
}
|
||||
|
||||
index++;
|
||||
|
||||
} else {
|
||||
|
||||
objective.unregister();
|
||||
scoreboard.registerNewObjective("AAA", "BBB");
|
||||
|
||||
objective.setDisplaySlot(DisplaySlot.SIDEBAR);
|
||||
objective.setDisplayName("§6Kampf");
|
||||
if (Config.Timeout) {
|
||||
int fightTime = FightSystem.getPlugin().getFightTime();
|
||||
if (fightTime >= 60)
|
||||
objective.getScore("§7Zeit: §a" + fightTime / 60 + "m " + fightTime % 60 + "s").setScore(3);
|
||||
else
|
||||
objective.getScore("§7Zeit: §a" + fightTime + "s").setScore(3);
|
||||
}
|
||||
if (Config.Entern)
|
||||
objective.getScore("§7Entern: " + (FightSystem.getPlugin().isEntern() ? "§aja" : "§cnein")).setScore(2);
|
||||
if (Config.PercentSystem){
|
||||
objective.getScore(Fight.getRedTeam().getPrefix() + "Schaden: §c" + (Math.round(100.0 * WinconditionPercentSystem.getRedPercent()) / 100.0) + "%").setScore(1);
|
||||
objective.getScore(Fight.getBlueTeam().getPrefix() + "Schaden: §c" + (Math.round(100.0 * WinconditionPercentSystem.getBluePercent()) / 100.0) + "%").setScore(0);
|
||||
}
|
||||
index = 0;
|
||||
}
|
||||
player.setScoreboard(scoreboard);
|
||||
}
|
||||
}, 0, delay);
|
||||
}
|
||||
|
||||
private FightTeam getIndexDisplay(int index) {
|
||||
if(index == 0) {
|
||||
return Fight.redTeam;
|
||||
}
|
||||
if(index == 1) {
|
||||
return Fight.blueTeam;
|
||||
}
|
||||
if(index == 2) {
|
||||
return null;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
@ -1,50 +0,0 @@
|
||||
package me.yaruma.fightsystem.winconditions;
|
||||
|
||||
import me.yaruma.fightsystem.FightSystem;
|
||||
import me.yaruma.fightsystem.fight.Fight;
|
||||
import me.yaruma.fightsystem.fight.FightState;
|
||||
import me.yaruma.fightsystem.fight.FightTeam;
|
||||
import me.yaruma.fightsystem.utils.Config;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
|
||||
public class WinconditionAllDead implements Listener {
|
||||
|
||||
private final FightSystem instance = FightSystem.getPlugin();
|
||||
|
||||
@EventHandler
|
||||
public void handlePlayerDeath(PlayerDeathEvent event) {
|
||||
if(!Config.AllDead) return;
|
||||
if(instance.getFightState() != FightState.PRE_RUNNING && instance.getFightState() != FightState.RUNNING) return;
|
||||
Player player = event.getEntity().getPlayer();
|
||||
if(Fight.getPlayerTeam(player) == null) return;
|
||||
FightTeam fightTeam = Fight.getPlayerTeam(player);
|
||||
fightTeam.getFightPlayer(player).setOut(true);
|
||||
|
||||
if(fightTeam.allPlayersOut()) {
|
||||
Bukkit.broadcastMessage(FightSystem.PREFIX + "§cDer letzte Spieler aus " + fightTeam.getPrefix() + fightTeam.getName() + " §cist gestorben!");
|
||||
instance.setSpectateState(Fight.getOpposite(fightTeam));
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void handlePlayerQuit(PlayerQuitEvent event) {
|
||||
if(!Config.AllDead) return;
|
||||
if(instance.getFightState() != FightState.PRE_RUNNING && instance.getFightState() != FightState.RUNNING) return;
|
||||
Player player = event.getPlayer();
|
||||
if(Fight.getPlayerTeam(player) == null) return;
|
||||
FightTeam fightTeam = Fight.getPlayerTeam(player);
|
||||
fightTeam.getFightPlayer(player).setOut(true);
|
||||
|
||||
if(fightTeam.allPlayersOut()) {
|
||||
Bukkit.broadcastMessage(FightSystem.PREFIX + "§cDer letzte Spieler aus §6" + fightTeam.getPrefix() + fightTeam.getName() + " §chat den Kampf verlassen!");
|
||||
instance.setSpectateState(Fight.getOpposite(fightTeam));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,51 +0,0 @@
|
||||
package me.yaruma.fightsystem.winconditions;
|
||||
|
||||
import me.yaruma.fightsystem.FightSystem;
|
||||
import me.yaruma.fightsystem.fight.Fight;
|
||||
import me.yaruma.fightsystem.fight.FightState;
|
||||
import me.yaruma.fightsystem.fight.FightTeam;
|
||||
import me.yaruma.fightsystem.utils.Config;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
|
||||
public class WinconditionCaptainDead implements Listener {
|
||||
|
||||
private final FightSystem instance = FightSystem.getPlugin();
|
||||
|
||||
@EventHandler
|
||||
public void handlePlayerDeath(PlayerDeathEvent event) {
|
||||
if(!Config.CaptainDead) return;
|
||||
if(FightSystem.getFightState() != FightState.PRE_RUNNING && FightSystem.getFightState() != FightState.RUNNING) return;
|
||||
Player player = event.getEntity().getPlayer();
|
||||
if(Fight.getPlayerTeam(player) == null) return;
|
||||
FightTeam fightTeam = Fight.getPlayerTeam(player);
|
||||
fightTeam.getFightPlayer(player).setOut(true);
|
||||
|
||||
if(fightTeam.isPlayerLeader(player)) {
|
||||
Bukkit.broadcastMessage(FightSystem.PREFIX + "§cDer Leader von " + fightTeam.getPrefix() + fightTeam.getName() + " §cist gestorben!");
|
||||
instance.setSpectateState(Fight.getOpposite(fightTeam));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void handlePlayerQuit(PlayerQuitEvent event) {
|
||||
if(!Config.CaptainDead) return;
|
||||
if(FightSystem.getFightState() != FightState.PRE_RUNNING && FightSystem.getFightState() != FightState.RUNNING) return;
|
||||
Player player = event.getPlayer();
|
||||
if(Fight.getPlayerTeam(player) == null) return;
|
||||
FightTeam fightTeam = Fight.getPlayerTeam(player);
|
||||
fightTeam.getFightPlayer(player).setOut(true);
|
||||
|
||||
if(fightTeam.isPlayerLeader(player)) {
|
||||
Bukkit.broadcastMessage(FightSystem.PREFIX + "§cDer Leader von " + fightTeam.getPrefix() + fightTeam.getName() + " §chat den Kampf verlassen!");
|
||||
instance.setSpectateState(Fight.getOpposite(fightTeam));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
package me.yaruma.fightsystem.winconditions;
|
||||
|
||||
import me.yaruma.fightsystem.FightSystem;
|
||||
import me.yaruma.fightsystem.utils.Config;
|
||||
import me.yaruma.fightsystem.utils.countdown.Countdown;
|
||||
import me.yaruma.fightsystem.utils.countdown.FinishNoneEntern;
|
||||
import org.bukkit.Sound;
|
||||
|
||||
public class WinconditionEntern {
|
||||
|
||||
private static final FightSystem instance = FightSystem.getPlugin();
|
||||
|
||||
public static void entern() {
|
||||
if(!Config.Entern) return;
|
||||
|
||||
Countdown countdownTimeOver = new Countdown(Config.EnterPhaseBegin, new FinishNoneEntern(), Sound.BLOCK_NOTE_PLING, false);
|
||||
countdownTimeOver.startTimer(instance);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,121 +0,0 @@
|
||||
package me.yaruma.fightsystem.winconditions;
|
||||
|
||||
import me.yaruma.fightsystem.FightSystem;
|
||||
import me.yaruma.fightsystem.fight.Fight;
|
||||
import me.yaruma.fightsystem.fight.FightState;
|
||||
import me.yaruma.fightsystem.utils.Config;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
|
||||
public class WinconditionTechKO {
|
||||
|
||||
private static HashSet<Location> teamRedWater = new HashSet<>();
|
||||
private static HashSet<Location> teamBlueWater = new HashSet<>();
|
||||
private static int taskID;
|
||||
|
||||
public static void addWater() {
|
||||
if(!Config.TechKO) return;
|
||||
if(FightSystem.getFightState() != FightState.PRE_RUNNING && FightSystem.getFightState() != FightState.RUNNING) return;
|
||||
|
||||
teamRedWater.clear();
|
||||
teamBlueWater.clear();
|
||||
|
||||
int redMinX = Config.TeamRedCornerX;
|
||||
int redMinY = Config.TeamRedCornerY;
|
||||
int redMinZ = Config.TeamRedCornerZ;
|
||||
int redMaxX = (redMinX + Config.SchemsizeX);
|
||||
int redMaxY = (redMinY+ Config.SchemsizeY);
|
||||
int redMaxZ = (redMinZ + Config.SchemsizeZ);
|
||||
|
||||
int blueMinX = Config.TeamBlueCornerX;
|
||||
int blueMinY = Config.TeamBlueCornerY;
|
||||
int blueMinZ = Config.TeamBlueCornerZ;
|
||||
int blueMaxX = (blueMinX + Config.SchemsizeX);
|
||||
int blueMaxY = (blueMinY + Config.SchemsizeY);
|
||||
int blueMaxZ = (blueMinZ + Config.SchemsizeZ);
|
||||
|
||||
//Team Red
|
||||
for(int x = redMinX; x <= redMaxX; x++) {
|
||||
for(int y = redMinY; y <= redMaxY; y++) {
|
||||
for(int z = redMinZ; z <= redMaxZ; z++) {
|
||||
Location location = new Location(Bukkit.getWorlds().get(0), x, y, z);
|
||||
if(location.getBlock().getType() == Material.WATER
|
||||
|| location.getBlock().getType() == Material.STATIONARY_WATER)
|
||||
teamRedWater.add(location);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Team Blue
|
||||
for(int x = blueMinX; x <= blueMaxX; x++) {
|
||||
for(int y = blueMinY; y <= blueMaxY; y++) {
|
||||
for(int z = blueMinZ; z <= blueMaxZ; z++) {
|
||||
Location location = new Location(Bukkit.getWorlds().get(0), x, y, z);
|
||||
if(location.getBlock().getType() == Material.WATER
|
||||
|| location.getBlock().getType() == Material.STATIONARY_WATER)
|
||||
teamBlueWater.add(location);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(teamRedWater.isEmpty()) {
|
||||
Bukkit.getScheduler().cancelTask(getTaskID());
|
||||
Bukkit.broadcastMessage(FightSystem.PREFIX + "§6Das Team " + Config.TeamRedPrefix + Config.TeamRedName + " §6ist Tech K.O.!");
|
||||
FightSystem.getPlugin().setSpectateState(Fight.getBlueTeam());
|
||||
FightSystem.getPlugin().getWaterRemover().stop();
|
||||
} else if(teamBlueWater.isEmpty()) {
|
||||
Bukkit.getScheduler().cancelTask(getTaskID());
|
||||
Bukkit.broadcastMessage(FightSystem.PREFIX + "§6Das Team " + Config.TeamBluePrefix + Config.TeamBlueName + " §6ist Tech K.O.!");
|
||||
FightSystem.getPlugin().setSpectateState(Fight.getRedTeam());
|
||||
FightSystem.getPlugin().getWaterRemover().stop();
|
||||
}
|
||||
}
|
||||
|
||||
public static void removeWater() {
|
||||
if(!Config.TechKO) return;
|
||||
if(FightSystem.getFightState() != FightState.PRE_RUNNING && FightSystem.getFightState() != FightState.RUNNING) return;
|
||||
|
||||
//Team Red
|
||||
Iterator itrRed = teamRedWater.iterator();
|
||||
while (itrRed.hasNext()) {
|
||||
Location location = (Location) itrRed.next();
|
||||
if(location.getBlock().getType() != Material.WATER && location.getBlock().getType() != Material.STATIONARY_WATER) {
|
||||
itrRed.remove();
|
||||
}
|
||||
}
|
||||
if(teamRedWater.isEmpty()) {
|
||||
Bukkit.getScheduler().cancelTask(getTaskID());
|
||||
Bukkit.broadcastMessage(FightSystem.PREFIX + "§6Das Team " + Config.TeamRedPrefix + Config.TeamRedName + " §6ist Tech K.O.!");
|
||||
FightSystem.getPlugin().setSpectateState(Fight.getBlueTeam());
|
||||
FightSystem.getPlugin().getWaterRemover().stop();
|
||||
}
|
||||
|
||||
//Team Blue
|
||||
Iterator itrBlue = teamBlueWater.iterator();
|
||||
while (itrBlue.hasNext()) {
|
||||
Location location = (Location) itrBlue.next();
|
||||
if(location.getBlock().getType() != Material.WATER && location.getBlock().getType() != Material.STATIONARY_WATER) {
|
||||
itrBlue.remove();
|
||||
}
|
||||
}
|
||||
if(teamBlueWater.isEmpty()) {
|
||||
Bukkit.getScheduler().cancelTask(getTaskID());
|
||||
Bukkit.broadcastMessage(FightSystem.PREFIX + "§6Das Team " + Config.TeamBluePrefix + Config.TeamBlueName + " §6ist Tech K.O.!");
|
||||
FightSystem.getPlugin().setSpectateState(Fight.getRedTeam());
|
||||
FightSystem.getPlugin().getWaterRemover().stop();
|
||||
}
|
||||
}
|
||||
|
||||
public static void startAutoChecker() {
|
||||
if(!Config.TechKO) return;
|
||||
taskID = Bukkit.getScheduler().scheduleAsyncRepeatingTask(FightSystem.getPlugin(), WinconditionTechKO::addWater, 400, 400);
|
||||
}
|
||||
|
||||
public static int getTaskID() {
|
||||
return taskID;
|
||||
}
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
package me.yaruma.fightsystem.winconditions;
|
||||
|
||||
import me.yaruma.fightsystem.FightSystem;
|
||||
import me.yaruma.fightsystem.utils.Config;
|
||||
import me.yaruma.fightsystem.utils.countdown.Countdown;
|
||||
import me.yaruma.fightsystem.utils.countdown.FinishTimeOver;
|
||||
import org.bukkit.Sound;
|
||||
|
||||
public class WinconditionTimeout {
|
||||
|
||||
private static final FightSystem instance = FightSystem.getPlugin();
|
||||
|
||||
public static void timeout() {
|
||||
if(!Config.Timeout) return;
|
||||
|
||||
Countdown countdownTimeOver = new Countdown(Config.TimeoutTime, new FinishTimeOver(), Sound.BLOCK_NOTE_BASS, false);
|
||||
countdownTimeOver.startTimer(instance);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
name: FightSystem
|
||||
version: 1.0
|
||||
author: [Yaruma3341, Lixfel]
|
||||
main: me.yaruma.fightsystem.FightSystem
|
||||
main: de.steamwar.fightsystem.FightSystem
|
||||
depend: [CoreSystem, WorldEdit, FastAsyncWorldEdit, ProtocolLib]
|
||||
|
||||
commands:
|
||||
@ -12,3 +12,5 @@ commands:
|
||||
invite:
|
||||
ready:
|
||||
kit:
|
||||
remove:
|
||||
leader:
|
In neuem Issue referenzieren
Einen Benutzer sperren