SteamWar/FightSystem
Archiviert
13
1
Dieses Repository wurde am 2024-08-05 archiviert. Du kannst Dateien ansehen und es klonen, aber nicht pushen oder Issues/Pull-Requests öffnen.
FightSystem/src/me/yaruma/fightsystem/FightSystem.java

443 Zeilen
15 KiB
Java

package me.yaruma.fightsystem;
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
import de.diamant.hunjy.CoinSystem.CoinSystem;
import me.yaruma.fightsystem.commands.AkCommand;
import me.yaruma.fightsystem.fight.*;
import me.yaruma.fightsystem.kit.KitManager;
import me.yaruma.fightsystem.listener.*;
import me.yaruma.fightsystem.manager.FileManager;
import me.yaruma.fightsystem.utils.WorldEdit;
import me.yaruma.fightsystem.utils.countdown.*;
import me.yaruma.fightsystem.utils.scoreboard.Scoreboard;
import me.yaruma.fightsystem.winconditions.*;
import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.World;
import java.io.File;
public class FightSystem extends JavaPlugin {
public static String PREFIX = "[FightSystem] ";
public static String NOPERM = PREFIX + "§4Du darfst das nicht!";
private static FightSystem plugin;
private FileManager fileManager;
private FightManager fightManager;
private Scoreboard scoreboard;
private KitManager kitManager;
private WaterRemover waterRemover;
private FightState fightState;
public Location Team1SpawnLoc = null;
public Location Team2SpawnLoc = null;
public Location SpecSpawnLoc = null;
public Location Team1PasteLoc = null;
public Location Team2PasteLoc = null;
public int ArenaMinX;
public int ArenaMaxX;
public int ArenaMinZ;
public int ArenaMaxZ;
public int schemsizeX;
public int schemsizeY;
public int schemsizeZ;
public int team1cornerX;
public int team1cornerY;
public int team1cornerZ;
public int team2cornerX;
public int team2cornerY;
public int team2cornerZ;
public int underArenaBorder;
public int fightTime = 0;
public double damageRed = 0D;
public double getDamageBlue = 0D;
public boolean entern = false;
public File kits = new File("plugins/" + this.getName(), "kits.data");
public FileConfiguration getKitData = YamlConfiguration.loadConfiguration(kits);
public void saveKitData() {
try { getKitData.save(kits); } catch (Exception ex) { }
}
public void onEnable() {
plugin = this;
this.fileManager = new FileManager(plugin);
this.fightManager = new FightManager();
this.scoreboard = new Scoreboard(plugin);
this.kitManager = new KitManager();
this.waterRemover = new WaterRemover();
Fight.getRedTeam().setName(fileManager.getStringFromConfig("Output.TeamRedName"));
Fight.getRedTeam().setPrefix(fileManager.getStringFromConfig("Output.TeamRedColor"));
Fight.getBlueTeam().setName(fileManager.getStringFromConfig("Output.TeamBlueName"));
Fight.getBlueTeam().setPrefix(fileManager.getStringFromConfig("Output.TeamBlueColor"));
//Load config
schemsizeX = fileManager.getIntegerFromConfig("Arena.Schemsize.x");
schemsizeY = fileManager.getIntegerFromConfig("Arena.Schemsize.y");
schemsizeZ = fileManager.getIntegerFromConfig("Arena.Schemsize.z");
team1cornerX = fileManager.getIntegerFromConfig("Arena.Team1corner.x");
team1cornerY = fileManager.getIntegerFromConfig("Arena.Team1corner.y");
team1cornerZ = fileManager.getIntegerFromConfig("Arena.Team1corner.z");
int team1toTeam2distanceX = fileManager.getIntegerFromConfig("Arena.Team1toTeam2distance.x");
int team1toTeam2distanceY = fileManager.getIntegerFromConfig("Arena.Team1toTeam2distance.y");
int team1toTeam2distanceZ = fileManager.getIntegerFromConfig("Arena.Team1toTeam2distance.z");
int schem2BorderX = fileManager.getIntegerFromConfig("Arena.Schem2Border.x");
int schem2BorderZ = fileManager.getIntegerFromConfig("Arena.Schem2Border.z");
World world = Bukkit.getWorlds().get(0);
underArenaBorder = fileManager.getIntegerFromConfig("Arena.underArenaBorder");
//Rotate team1corner to edge (min. x, min. y, min. z)
if(schemsizeX < 0){
schemsizeX = -schemsizeX;
team1cornerX -= schemsizeX;
}
if(schemsizeY < 0){
schemsizeY = -schemsizeY;
team1cornerY -= schemsizeY;
}
if(schemsizeZ < 0){
schemsizeZ = -schemsizeZ;
team1cornerZ -= schemsizeZ;
}
//Compute various positions
team2cornerX = team1toTeam2distanceX + team1cornerX;
team2cornerY = team1toTeam2distanceY + team1cornerY;
team2cornerZ = team1toTeam2distanceZ + team1cornerZ;
int Team1centerX = team1cornerX + schemsizeX/2;
int Team1centerY = team1cornerY;
int Team1centerZ = team1cornerZ + schemsizeZ/2;
int Team2centerX = Team1centerX + team1toTeam2distanceX;
int Team2centerY = Team1centerY + team1toTeam2distanceY;
int Team2centerZ = Team1centerZ + team1toTeam2distanceZ;
Team1SpawnLoc = new Location(world, Team1centerX, Team1centerY + schemsizeY, Team1centerZ);
Team2SpawnLoc = new Location(world, Team2centerX, Team2centerY + schemsizeY, Team2centerZ);
SpecSpawnLoc = new Location(world, Team1centerX + team1toTeam2distanceX/2,
Team1centerY + team1toTeam2distanceY/2 + schemsizeY/2,
Team1centerZ + team1toTeam2distanceZ/2);
Team1PasteLoc = new Location(world, Team1centerX, Team1centerY, Team1centerZ);
Team2PasteLoc = new Location(world, Team2centerX, Team2centerY, Team2centerZ);
if(team1toTeam2distanceX > 0){
ArenaMinX = team1cornerX - schem2BorderX;
ArenaMaxX = team1cornerX + team1toTeam2distanceX + schemsizeX + schem2BorderX;
}else{
ArenaMinX = team1cornerX + team1toTeam2distanceX - schem2BorderX;
ArenaMaxX = team1cornerX + schemsizeX + schem2BorderX;
}
if(team1toTeam2distanceZ > 0){
ArenaMinZ = team1cornerZ - schem2BorderZ;
ArenaMaxZ = team1cornerZ + team1toTeam2distanceZ + schemsizeZ + schem2BorderZ;
}else{
ArenaMinZ = team1cornerZ + team1toTeam2distanceZ - schem2BorderZ;
ArenaMaxZ = team1cornerZ + schemsizeZ + schem2BorderZ;
}
loadConfig();
init();
fightState = FightState.SETUP;
int setupDuration = fileManager.getIntegerFromConfig("Times.NoPlayersOnlineDuration");
Countdown countdown = new Countdown(setupDuration, new FinishNoPlayersOnline());
countdown.startTimer(getPlugin());
System.out.println(PREFIX + "§aPlugin gestartet!");
}
public void onDisable() {
System.out.println(PREFIX + "§cPlugin deaktiviert!");
}
private void init() {
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);
//WinConditions
if(fileManager.getBooleanFromConfig("WinConditions.AllDead")) pm.registerEvents(new WinconditionAllDead(), plugin);
if(fileManager.getBooleanFromConfig("WinConditions.CaptainDead")) pm.registerEvents(new WinconditionCaptainDead(), plugin);
if(fileManager.getBooleanFromConfig("WinConditions.AllDead")) pm.registerEvents(new WinconditionAllDead(), plugin);
if(fileManager.getBooleanFromConfig("WinConditions.PercentSystem")) pm.registerEvents(new WinconditionPercentSystem(), plugin);
getCommand("ak").setExecutor(new AkCommand());
}
private void loadConfig() {
if(!new File("plugins/" + this.getName() + "/config.yml").exists()) {
saveDefaultConfig();
System.out.println(PREFIX + "config.yml erstellt und geladen!");
}
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 FightState getCurrentFightState() {
return fightState;
}
public FileManager getFileManager() {
return this.fileManager;
}
public FightManager getFightManager() {
return this.fightManager;
}
public FightState getFightState() {
return fightState;
}
public Scoreboard getScoreboard() {
return scoreboard;
}
public KitManager getKitManager() {
return kitManager;
}
public WaterRemover getWaterRemover() {
return waterRemover;
}
public void setSetupState() {
if(this.fightState == null) {
this.fightState = FightState.SETUP;
}
}
public void setPreRunningState() {
if(this.fightState != FightState.SETUP)
return;
this.fightState = FightState.PRE_RUNNING;
Countdown.cancelAllTimers();
int time = fileManager.getIntegerFromConfig("Times.PreFightDuration");
Countdown countdown = new Countdown(time, new FinishPreRunning());
countdown.startTimer(this);
for(FightPlayer allFightPlayers : Fight.getBlueTeam().getPlayers()) {
allFightPlayers.getPlayer().getInventory().clear();
}
for(FightPlayer allFightPlayers : Fight.getRedTeam().getPlayers()) {
allFightPlayers.getPlayer().getInventory().clear();
}
getFightManager().teleportAllToFightSpawn();
WorldEdit.replace(Fight.getBlueTeam().getLeader().getPlayer(), team1cornerX, team1cornerY, team1cornerZ, team1cornerX + schemsizeX, team1cornerY + schemsizeY, team1cornerZ + schemsizeZ);
WorldEdit.replace(Fight.getRedTeam().getLeader().getPlayer(), team2cornerX, team2cornerY, team2cornerZ, team2cornerX + schemsizeX, team2cornerY + schemsizeY, team2cornerZ + schemsizeZ);
}
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(this.fightState != FightState.PRE_RUNNING)
return;
this.fightState = FightState.RUNNING;
Countdown.cancelAllTimers();
getWaterRemover().start();
setAllPlayersGM(GameMode.SURVIVAL);
if(fileManager.getBooleanFromConfig("WinConditions.Timeout")) {
WinconditionTimeout.timeout();
WinconditionEntern.entern();
}
Bukkit.broadcastMessage("§aArena freigegeben!");
}
public void setSpectateState(FightTeam winFightTeam) {
if(this.fightState != FightState.RUNNING)
return;
this.fightState = FightState.SPECTATE;
Countdown.cancelAllTimers();
setAllPlayersGM(GameMode.SPECTATOR);
Bukkit.broadcastMessage(" ");
if(winFightTeam != null) {
Bukkit.broadcastMessage(PREFIX + "§aDas Team von §6" + winFightTeam.getLeader().getPlayer().getName() + " §ahat gewonnen!");
plugin.getFightManager().teleportAllToFightSpawn();
for(FightPlayer fightPlayer : winFightTeam.getPlayers()) {
CoinSystem.getCoinsManager(fightPlayer.getPlayer()).addCoins(getMoneyToPay("Money.Win"));
}
for(FightPlayer fightPlayer : Fight.getOpposite(winFightTeam).getPlayers()) {
CoinSystem.getCoinsManager(fightPlayer.getPlayer()).addCoins(getMoneyToPay("Money.Lose"));
}
} else {
//Keine Message! Wird in FinishTimeOver gesendet!
for(FightPlayer fightPlayer : winFightTeam.getPlayers()) {
CoinSystem.getCoinsManager(fightPlayer.getPlayer()).addCoins(getMoneyToPay("Money.Undecided"));
}
for(FightPlayer fightPlayer : Fight.getOpposite(winFightTeam).getPlayers()) {
CoinSystem.getCoinsManager(fightPlayer.getPlayer()).addCoins(getMoneyToPay("Money.Undecided"));
}
}
Countdown.cancelAllTimers();
Countdown countdown = new Countdown(20*60, new FinishSpectateOver());
countdown.startTimer(FightSystem.getPlugin());
}
public int getMoneyToPay(String moneyPath) {
return fileManager.getIntegerFromConfig(moneyPath);
}
public static WorldEditPlugin getWorldEditPlugin() {
return (WorldEditPlugin) Bukkit.getPluginManager().getPlugin("WorldEdit");
}
public Location getTeam1SpawnLoc() {
return Team1SpawnLoc;
}
public Location getTeam2SpawnLoc() {
return Team2SpawnLoc;
}
public Location getSpecSpawnLoc() {
return SpecSpawnLoc;
}
public Location getTeam1PasteLoc() {
return Team1PasteLoc;
}
public Location getTeam2PasteLoc() {
return Team2PasteLoc;
}
public int getArenaMinX() {
return ArenaMinX;
}
public int getArenaMaxX() {
return ArenaMaxX;
}
public int getArenaMinZ() {
return ArenaMinZ;
}
public int getArenaMaxZ() {
return ArenaMaxZ;
}
public int getSchemsizeX() {
return schemsizeX;
}
public int getSchemsizeY() {
return schemsizeY;
}
public int getSchemsizeZ() {
return schemsizeZ;
}
public int getTeam1cornerX() {
return team1cornerX;
}
public int getTeam1cornerY() {
return team1cornerY;
}
public int getTeam1cornerZ() {
return team1cornerZ;
}
public int getTeam2cornerX() {
return team2cornerX;
}
public int getTeam2cornerY() {
return team2cornerY;
}
public int getTeam2cornerZ() {
return team2cornerZ;
}
public int getUnderArenaBorder() {
return underArenaBorder;
}
public int getFightTime() {
return fightTime;
}
public double getDamageRed() {
return damageRed;
}
public double getGetDamageBlue() {
return getDamageBlue;
}
public boolean isEntern() {
return entern;
}
}