From b5554d5b3eeb8fb081e628be140a274544768095 Mon Sep 17 00:00:00 2001 From: Steev Date: Mon, 29 Nov 2021 17:05:10 +0100 Subject: [PATCH] rewrote entire plugin with new backend --- .idea/.gitignore | 3 + .idea/compiler.xml | 13 ++ .idea/jarRepositories.xml | 25 +++ .idea/misc.xml | 19 +++ .idea/runConfigurations.xml | 10 ++ Tridentwar.iml | 12 ++ config.yml | 4 - pom.xml | 44 +++++ src/de/steev/tridentwar/command.java | 146 ---------------- src/de/steev/tridentwar/data/Items.java | 15 -- .../events/PlayerConnectionEvents.java | 95 ----------- src/de/steev/tridentwar/events/itemDrop.java | 44 ----- src/de/steev/tridentwar/events/onHit.java | 161 ------------------ .../tridentwar/events/onProjectileLaunch.java | 52 ------ .../tridentwar/events/playerRespawn.java | 51 ------ src/de/steev/tridentwar/main.java | 84 --------- src/de/steev/tridentwar/warcontroller.java | 46 ----- .../java/de/steev/Tridentwar/Tridentwar.java | 26 +++ .../commands/TridentwarCommand.java | 27 +++ .../listeners/ProjectileHitListener.java | 31 ++++ .../listeners/ProjectileLaunchListener.java | 28 +++ .../steev/Tridentwar/manager/GameManager.java | 45 +++++ .../steev/Tridentwar/manager/GameState.java | 5 + .../Tridentwar/manager/PlayerManager.java | 23 +++ .../Tridentwar/manager/TridentManager.java | 16 ++ .../tasks/GameStartCountdownTask.java | 26 +++ .../Tridentwar/tasks/TridentResetTask.java | 23 +++ 27 files changed, 376 insertions(+), 698 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/runConfigurations.xml create mode 100644 Tridentwar.iml delete mode 100644 config.yml create mode 100644 pom.xml delete mode 100644 src/de/steev/tridentwar/command.java delete mode 100644 src/de/steev/tridentwar/data/Items.java delete mode 100644 src/de/steev/tridentwar/events/PlayerConnectionEvents.java delete mode 100644 src/de/steev/tridentwar/events/itemDrop.java delete mode 100644 src/de/steev/tridentwar/events/onHit.java delete mode 100644 src/de/steev/tridentwar/events/onProjectileLaunch.java delete mode 100644 src/de/steev/tridentwar/events/playerRespawn.java delete mode 100644 src/de/steev/tridentwar/main.java delete mode 100644 src/de/steev/tridentwar/warcontroller.java create mode 100644 src/main/java/de/steev/Tridentwar/Tridentwar.java create mode 100644 src/main/java/de/steev/Tridentwar/commands/TridentwarCommand.java create mode 100644 src/main/java/de/steev/Tridentwar/listeners/ProjectileHitListener.java create mode 100644 src/main/java/de/steev/Tridentwar/listeners/ProjectileLaunchListener.java create mode 100644 src/main/java/de/steev/Tridentwar/manager/GameManager.java create mode 100644 src/main/java/de/steev/Tridentwar/manager/GameState.java create mode 100644 src/main/java/de/steev/Tridentwar/manager/PlayerManager.java create mode 100644 src/main/java/de/steev/Tridentwar/manager/TridentManager.java create mode 100644 src/main/java/de/steev/Tridentwar/tasks/GameStartCountdownTask.java create mode 100644 src/main/java/de/steev/Tridentwar/tasks/TridentResetTask.java diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..b64efbf --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..f44ba7b --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..3aa65dd --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..797acea --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/Tridentwar.iml b/Tridentwar.iml new file mode 100644 index 0000000..fa63d4b --- /dev/null +++ b/Tridentwar.iml @@ -0,0 +1,12 @@ + + + + + + + SPIGOT + + + + + \ No newline at end of file diff --git a/config.yml b/config.yml deleted file mode 100644 index 47386c4..0000000 --- a/config.yml +++ /dev/null @@ -1,4 +0,0 @@ -spawn: unset -spectator: unset -endLoc: unset -time: 600 diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..d94d5ab --- /dev/null +++ b/pom.xml @@ -0,0 +1,44 @@ + + + 4.0.0 + + de.steev + Tridentwar + 1.0 + + + + org.apache.maven.plugins + maven-compiler-plugin + + 16 + 16 + + + + + + + 17 + 17 + + + + + spigot-repo + https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + + + + + + org.spigotmc + spigot-api + 1.17.1-R0.1-SNAPSHOT + provided + + + \ No newline at end of file diff --git a/src/de/steev/tridentwar/command.java b/src/de/steev/tridentwar/command.java deleted file mode 100644 index 157bdb3..0000000 --- a/src/de/steev/tridentwar/command.java +++ /dev/null @@ -1,146 +0,0 @@ -package de.steev.tridentwar; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Location; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -public class command implements CommandExecutor { - // TODO: add permissions to the commands - private main plugin; - public command(main plugin){ this.plugin = plugin; } - - @Override - public boolean onCommand(CommandSender commandSender, Command command, String s, String[] args) { - Player player = (Player) commandSender; - - if(args.length > 0){ - switch (args[0].toLowerCase()){ - default: - commandSender.sendMessage(ChatColor.AQUA + "Steev's Trident War: " + ChatColor.RED + " Dieser Befehl ist nicht bekannt bitte gib /tw help ein"); - break; - case "help": - player.sendMessage("======================= " + ChatColor.AQUA + "Steev's Trident War" + " =======================\n" + - ChatColor.AQUA + ChatColor.BOLD + "help: " + ChatColor.RESET + "Listet dir eine Hilfe des plugins auf\n" + - ChatColor.AQUA + ChatColor.BOLD + "start: " + ChatColor.RESET + "Zum starten eines Trident Wars\n" + - ChatColor.AQUA + ChatColor.BOLD + "stop: " + ChatColor.RESET + "Zum stopen eines Trident Wars\n"+ - ChatColor.AQUA + ChatColor.BOLD + "leave: " + ChatColor.RESET + "Verlässt den Trident War\n"+ - ChatColor.AQUA + ChatColor.BOLD + "setSpawn: " + ChatColor.RESET + "Setzt den anfangspunkt für alle Spieler\n" + - ChatColor.AQUA + ChatColor.BOLD + "setSpectate: " + ChatColor.RESET + "Setzt den spawn für gestorbene Spieler\n" + - ChatColor.AQUA + ChatColor.BOLD + "setEndLocation: " + ChatColor.RESET + "Setzt den spawn für alle Spieler nach dem Trident War"); - break; - case "start": - if(commandSender.hasPermission("tw.admin")){ - // checks if more then 1 person is online - if(Bukkit.getServer().getOnlinePlayers().size() >= 2){ - // ensures that no war already is active - if(!plugin.eventActive){ - plugin.eventActive = true; // Tells the plugin there is a war ongoing - for(Player p : Bukkit.getServer().getOnlinePlayers()){ - p.sendMessage(ChatColor.AQUA + "Steev's Trident War: " + ChatColor.RED + " Ein Trident War beginnt!"); - p.sendTitle(ChatColor.GREEN + "Beginnt!", ChatColor.GOLD + "Der Trident War beginnt.", 1, 20, 1); - - // Teleports players to Spawn - if(plugin.playerDataConfig.get("spectator") != null){ - p.teleport(((Location) plugin.playerDataConfig.get("spectator"))); - } - } - warcontroller.StartTridentWar(plugin); - } else { - commandSender.sendMessage(ChatColor.AQUA + "Steev's Trident War: " + ChatColor.RED + " Ein Trident War ist bereits im Gange"); - } - } else { - commandSender.sendMessage(ChatColor.AQUA + "Steev's Trident War: " + ChatColor.RED + "Allein kanst du keinen Trident War starten"); - } - } else { - commandSender.sendMessage(ChatColor.AQUA + "Steev's Trident War: " + ChatColor.RED + " dir fehlen die Rechte dazu"); - } - break; - case "stop": - if(commandSender.hasPermission("tw.admin")){ - if(plugin.eventActive){ - plugin.eventActive = false; - for(Player p : Bukkit.getOnlinePlayers()){ - p.sendMessage(ChatColor.AQUA + "Steev's Trident War: " + ChatColor.RED + " Der Trident War endet!"); - p.sendTitle("Ende!", "Der Trident war Endet.", 1, 20, 1); - } - warcontroller.StopTridentWar(plugin); - } else { - commandSender.sendMessage(ChatColor.AQUA + "Steev's Trident War: " + ChatColor.RED + " es ist kein Trident im Gange"); - } - } else { - commandSender.sendMessage(ChatColor.AQUA + "Steev's Trident War: " + ChatColor.RED + " dir fehlen die Rechte dazu"); - } - break; - case "leave": - plugin.playerDataConfig.set(((Player) commandSender).getPlayer().getUniqueId() + "", null); - if(plugin.playerDataConfig.get("endLoc") != "unset"){ - ((Player) commandSender).getPlayer().teleport(((Location)plugin.playerDataConfig.get("endLoc"))); - } - - // Check if enough players are in for a trident war - if(plugin.playerDataConfig.getKeys(false).size() < 2){ - warcontroller.StopTridentWar(plugin); - - // Message and teleport everyone if not - for(Player p : Bukkit.getServer().getOnlinePlayers()){ - if(plugin.playerDataConfig.getString(p.getUniqueId() + ".name") != null){ - p.sendMessage(ChatColor.AQUA + "Steev's Trident War: " + ChatColor.RED + " Ein Trident War beginnt!"); - p.sendTitle(ChatColor.RED + "Abgebrochen!", ChatColor.RED + "Zu wenig Spieler.", 1, 20, 1); - - // Teleports players to Spawn - if(plugin.playerDataConfig.get("endLoc") != null){ - p.teleport(((Location) plugin.playerDataConfig.get("endLoc"))); - } - } - } - } - commandSender.sendMessage(ChatColor.AQUA + "Steev's Trident War: " + ChatColor.RED + "Du hast den Trident war verlassen"); - break; - case "setspawn": - if(commandSender.hasPermission("tw.admin")){ - if(args[1].toLowerCase() == "unset"){ - plugin.config.set("spawn", "unset"); - plugin.saveDefaultConfig(); - } else { - plugin.config.set("spawn", player.getLocation()); - plugin.saveDefaultConfig(); - } - } else { - commandSender.sendMessage(ChatColor.AQUA + "Steev's Trident War: " + ChatColor.RED + " dir fehlen die Rechte dazu"); - } - break; - case "setspectate": - if(commandSender.hasPermission("tw.admin")){ - if(args[1].toLowerCase() == "unset"){ - plugin.config.set("spectator", "unset"); - plugin.saveDefaultConfig(); - } else { - plugin.config.set("spectator", player.getLocation()); - plugin.saveDefaultConfig(); - } - } else { - commandSender.sendMessage(ChatColor.AQUA + "Steev's Trident War: " + ChatColor.RED + " dir fehlen die Rechte dazu"); - } - break; - case "setendlocation": - if(commandSender.hasPermission("tw.admin")){ - if(args[1].toLowerCase() == "unset"){ - plugin.config.set("endLoc", "unset"); - plugin.saveDefaultConfig(); - } else { - plugin.config.set("endLoc", player.getLocation()); - plugin.saveDefaultConfig(); - } - } else { - commandSender.sendMessage(ChatColor.AQUA + "Steev's Trident War: " + ChatColor.RED + " dir fehlen die Rechte dazu"); - } - break; - } - } - return false; - } -} diff --git a/src/de/steev/tridentwar/data/Items.java b/src/de/steev/tridentwar/data/Items.java deleted file mode 100644 index 53ce3c3..0000000 --- a/src/de/steev/tridentwar/data/Items.java +++ /dev/null @@ -1,15 +0,0 @@ -package de.steev.tridentwar.data; - -import org.bukkit.Material; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; - -public class Items { - public static ItemStack trident(){ - ItemStack trident = new ItemStack(Material.TRIDENT); - ItemMeta meta = trident.getItemMeta(); - meta.setDisplayName("Kriegs Dreizack"); - trident.setItemMeta(meta); - return trident; - } -} diff --git a/src/de/steev/tridentwar/events/PlayerConnectionEvents.java b/src/de/steev/tridentwar/events/PlayerConnectionEvents.java deleted file mode 100644 index 574ffbc..0000000 --- a/src/de/steev/tridentwar/events/PlayerConnectionEvents.java +++ /dev/null @@ -1,95 +0,0 @@ -package de.steev.tridentwar.events; - -import de.steev.tridentwar.data.Items; -import de.steev.tridentwar.main; -import de.steev.tridentwar.warcontroller; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Location; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.inventory.ItemStack; - -import java.util.UUID; - -public class PlayerConnectionEvents implements Listener { - private main plugin; - - public PlayerConnectionEvents(main plugin){ - this.plugin = plugin; - } - - @EventHandler - public void onPlayerJoin(PlayerJoinEvent event){ - - if(plugin.eventActive) { - - // Scans player inventory for tridents to prevent multiple tridents - for(ItemStack is : event.getPlayer().getInventory()) { - try { - if(is.getItemMeta().getDisplayName().contains("Kriegs Dreizack")){ - return; - } - } catch (Exception e){ - // nothing happens - } - } - - // Gives player needed tools for war - event.getPlayer().getInventory().addItem(Items.trident()); - - // messages the player about ongoing round - event.getPlayer().sendMessage(ChatColor.AQUA + "Steev's Trident War: " + "Achtung hier herscht grade krieg"); - - // Add player to the game - plugin.playerDataConfig.set( event.getPlayer().getUniqueId() + ".life", 4 ); - plugin.playerDataConfig.set( event.getPlayer().getUniqueId() + ".name", event.getPlayer().getDisplayName()); - plugin.saveplayerdata(); - } else { - for(ItemStack is : event.getPlayer().getInventory().getContents()){ - try { - if(is.getItemMeta() != null){ - if(is.getItemMeta().getDisplayName().contains("Kriegs Dreizack")){ - // System.out.println( is.getItemMeta().getDisplayName().contains("Kriegs Dreizack")); - event.getPlayer().getInventory().remove(is); - } - } - } catch (Exception e){ - // this wont be catched - } - } - } - } - - @EventHandler - public void onPlayerLeave(PlayerQuitEvent event){ - if(plugin.eventActive) { - // stops war when less then 2 players are online - if(Bukkit.getServer().getOnlinePlayers().size() < 2){ - warcontroller.StopTridentWar(plugin); - - // Message and teleport everyone if not - for(Player p : Bukkit.getServer().getOnlinePlayers()){ - if(plugin.playerDataConfig.getString(p.getUniqueId() + ".name") != null){ - p.sendMessage(ChatColor.AQUA + "Steev's Trident War: " + ChatColor.RED + " Ein Trident War beginnt!"); - p.sendTitle(ChatColor.RED + "Abgebrochen!", ChatColor.RED + "Zu wenig Spieler.", 1, 20, 1); - - // Teleports players to Spawn - if(plugin.playerDataConfig.get("endLoc") != null){ - p.teleport(((Location) plugin.playerDataConfig.get("endLoc"))); - } - } - } - } - // Removes player from game - UUID uuid = event.getPlayer().getUniqueId(); - plugin.playerDataConfig.set( "" + uuid, null); - plugin.saveplayerdata(); - }else{ - return; - } - } -} diff --git a/src/de/steev/tridentwar/events/itemDrop.java b/src/de/steev/tridentwar/events/itemDrop.java deleted file mode 100644 index c172eee..0000000 --- a/src/de/steev/tridentwar/events/itemDrop.java +++ /dev/null @@ -1,44 +0,0 @@ -package de.steev.tridentwar.events; - -import de.steev.tridentwar.main; -import org.bukkit.Material; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.player.PlayerDropItemEvent; -import org.bukkit.inventory.ItemStack; - -public class itemDrop implements Listener { - private main plugin; - - public itemDrop(main plugin){ - this.plugin = plugin; - } - - // deletes trident from player drops - @EventHandler - public void onItemDrop(PlayerDeathEvent event){ - for(ItemStack item : event.getDrops()){ - try { - if(item.getItemMeta().getDisplayName() == "Kriegs Dreizack"){ - item.setType(Material.AIR); - } - } catch (Exception e){ - // Nothing gets handled here - } - } - - } - - // Stops players from droping the war trident - @EventHandler - public void onItemDrop(PlayerDropItemEvent event){ - if(plugin.eventActive){ - if(plugin.playerDataConfig.get(event.getPlayer().getUniqueId() + ".name") != null){ - event.setCancelled(true); - } else { - return; - } - } - } -} diff --git a/src/de/steev/tridentwar/events/onHit.java b/src/de/steev/tridentwar/events/onHit.java deleted file mode 100644 index 4a967c2..0000000 --- a/src/de/steev/tridentwar/events/onHit.java +++ /dev/null @@ -1,161 +0,0 @@ -package de.steev.tridentwar.events; - -import de.steev.tridentwar.data.Items; -import de.steev.tridentwar.main; -import de.steev.tridentwar.warcontroller; -import net.md_5.bungee.api.ChatMessageType; -import net.md_5.bungee.api.chat.TextComponent; -import org.bukkit.*; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Player; -import org.bukkit.entity.Trident; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.ProjectileHitEvent; -import org.bukkit.inventory.ItemStack; - -import java.util.UUID; - -public class onHit implements Listener { - private main plugin; - public onHit(main plugin){ - this.plugin = plugin; - } - - @EventHandler - public void onTridentHit(ProjectileHitEvent event){ - if(plugin.eventActive){ - try { - if(event.getEntity().getShooter() instanceof Player){ - if(event.getEntityType() == EntityType.TRIDENT){ - if(event.getHitEntity() instanceof Player){ - - if(plugin.playerDataConfig.getString(((Player)event.getHitEntity()).getUniqueId() + ".life") != null){ - - UUID uuid = ((Player)event.getHitEntity()).getUniqueId(); - int life = plugin.playerDataConfig.getInt(uuid + ".life") - 1; - - // Detects when trident hits a not player block - event.getEntity().remove(); - - // Gives Player a Trident - ((Player) event.getEntity().getShooter()).getInventory().addItem(Items.trident()); - - // play a "Ding" sound on the attackers side at hit - if(life == 4) { - ((Player)event.getEntity().getShooter()).playSound(((Player)event.getEntity().getShooter()).getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1f, 0.5f); - } else if(life == 3) { - ((Player)event.getEntity().getShooter()).playSound(((Player)event.getEntity().getShooter()).getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1f, 1f); - } else if(life == 2) { - ((Player)event.getEntity().getShooter()).playSound(((Player)event.getEntity().getShooter()).getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1f, 1.5f); - } else if(life == 1) { - ((Player)event.getEntity().getShooter()).playSound(((Player)event.getEntity().getShooter()).getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1f, 2f); - } - - // Runs sound when a player gets hit - ((Player)event.getHitEntity()).playSound(((Player)event.getHitEntity()).getLocation(), Sound.ENTITY_PLAYER_DEATH, 1f, 1f); - - // Subtracts life and spams the chat with debug messages - plugin.playerDataConfig.set( uuid + ".life", life); - ((Player)event.getHitEntity()).sendMessage(ChatColor.AQUA + "Steev's Trident War: " + ChatColor.RED + " du wurdest getroffen und hast noch: " + ChatColor.BOLD + life + ChatColor.RESET + ChatColor.RED + " Leben"); - if(life == 4) { - ((Player)event.getHitEntity()).spigot().sendMessage(ChatMessageType.ACTION_BAR, new TextComponent(ChatColor.GREEN + "Leben: " + life)); - } else if(life < 1) { - ((Player)event.getHitEntity()).spigot().sendMessage(ChatMessageType.ACTION_BAR, new TextComponent(ChatColor.YELLOW + "Leben: " + life)); - } else if(life <= 1) { - ((Player)event.getHitEntity()).spigot().sendMessage(ChatMessageType.ACTION_BAR, new TextComponent(ChatColor.RED + "Leben: " + life)); - } - - plugin.saveplayerdata(); - - // Handles Death - if( life == 0){ - // Deletes player from Database - plugin.playerDataConfig.set(uuid.toString(), null); - plugin.saveplayerdata(); - - // Messages Player about Death - ((Player)event.getHitEntity()).playSound(((Player)event.getHitEntity()).getLocation(), Sound.ENTITY_ENDER_DRAGON_GROWL, 1f, 1f); - ((Player)event.getHitEntity()).sendTitle(ChatColor.RED + "Ausgeschieden!", ChatColor.RED + "Du bist aus dem Trident War ausgeschieden", 1, 20, 1); - - // Deletes trident of people who died - for(Trident t : ((Player)event.getHitEntity()).getWorld().getEntitiesByClass(Trident.class)){ - for(String pd : plugin.playerDataConfig.getKeys(false)) { - if(((Player)t.getShooter()).getDisplayName() == plugin.playerDataConfig.getString(pd + ".name")){ - return; - } - } - t.remove(); - } - - // Checks if only one is alive - Bukkit.getLogger().info(ChatColor.GRAY + "[" + ChatColor.YELLOW + ChatColor.BOLD + "DEBUG" + ChatColor.RESET + ChatColor.GRAY + "]: is alive: " + plugin.playerDataConfig.getKeys(false).size()); - if(plugin.playerDataConfig.getKeys(false).size() <= 1){ - - if(plugin.playerDataConfig.getKeys(false).size() > 0){ - for(String pd : plugin.playerDataConfig.getKeys(false)) { - for (Player p : Bukkit.getOnlinePlayers()) { - - // Message players about the winner - p.playSound(p.getLocation(), Sound.ENTITY_VILLAGER_YES, 1f, 1f); - p.sendTitle(ChatColor.GREEN + "ENDE!",ChatColor.GOLD + plugin.playerDataConfig.getString(pd + ".name") +" Hat den Trident War gewonnen!"); - } - - // for security loop all players once more and remove all tridents with meeting criteria - for(ItemStack is : Bukkit.getServer().getPlayer(plugin.playerDataConfig.getString(pd + ".name")).getInventory()) { - try { - if(is.getItemMeta().getDisplayName().contains("Kriegs Dreizack")){ - Bukkit.getServer().getPlayer(plugin.playerDataConfig.getString(pd + ".name")).getInventory().remove(is); - } - } catch (Exception e){ - // nothing happens - } - } - - // Remove trident entity - for(Trident t : ((Player)event.getHitEntity()).getWorld().getEntitiesByClass(Trident.class)){ - t.remove(); - } - } - - // TODO: make endlocation lobby porting - - warcontroller.StopTridentWar(plugin); - } else { - ((Player)event.getHitEntity()).sendMessage(ChatColor.AQUA + "Steev's Trident War: " + ChatColor.RED + " es gibt keinen Sieger!"); - warcontroller.StopTridentWar(plugin); - } - } - - // Sends Player to Spawn - if(plugin.config.get("spectator") != "unset"){ ((Player)event.getHitEntity()).teleport(((Location)plugin.config.get("spectator"))); } - - } - - } else { - event.setCancelled(true); - return; - } - - } else { - // Detects when trident hits a not player block - event.getEntity().remove(); - - // Gives Player a Trident - ((Player) event.getEntity().getShooter()).getInventory().addItem(Items.trident()); - } - - } - } - } catch (Exception e){ - // Nothing to print here - // this would only happen when no entity should be an entity - } - - // disables damage - event.setCancelled(true); - } else { - return; - } - } -} diff --git a/src/de/steev/tridentwar/events/onProjectileLaunch.java b/src/de/steev/tridentwar/events/onProjectileLaunch.java deleted file mode 100644 index 4426287..0000000 --- a/src/de/steev/tridentwar/events/onProjectileLaunch.java +++ /dev/null @@ -1,52 +0,0 @@ -package de.steev.tridentwar.events; - -import de.steev.tridentwar.data.Items; -import de.steev.tridentwar.main; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.ProjectileLaunchEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.scheduler.BukkitTask; - -import java.util.HashMap; -import java.util.UUID; - -public class onProjectileLaunch implements Listener { - private main plugin; - public HashMap tasks = new HashMap(); - - public onProjectileLaunch(main plugin){ - this.plugin = plugin; - } - - @EventHandler - public void onProjectileLaunch(ProjectileLaunchEvent event){ - try { - tasks.get(((Player)event.getEntity().getShooter()).getUniqueId()).cancel(); - } catch (Exception e){ - // eigentlich sollte hier jetzt error handling passieren, aber nö. - } - BukkitTask task = Bukkit.getScheduler().runTaskLater(plugin, new Runnable() { - @Override - public void run() { - if(plugin.eventActive){ - for(ItemStack is : ((Player)event.getEntity().getShooter()).getInventory()) { - try { - if(is.getItemMeta().getDisplayName().contains("Kriegs Dreizack")){ - return; - } - } catch (Exception e){ - // nothing happens - } - } - - // When no trident was found give a new trident to the player - ((Player)event.getEntity().getShooter()).getInventory().addItem(Items.trident()); - } - } - },200); - tasks.put(((Player)event.getEntity().getShooter()).getUniqueId(), task); - } -} diff --git a/src/de/steev/tridentwar/events/playerRespawn.java b/src/de/steev/tridentwar/events/playerRespawn.java deleted file mode 100644 index ca81629..0000000 --- a/src/de/steev/tridentwar/events/playerRespawn.java +++ /dev/null @@ -1,51 +0,0 @@ -package de.steev.tridentwar.events; - -import de.steev.tridentwar.data.Items; -import de.steev.tridentwar.main; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerRespawnEvent; -import org.bukkit.inventory.ItemStack; - -public class playerRespawn implements Listener { - - private main plugin; - public playerRespawn(main plugin) { - this.plugin = plugin; - } - - @EventHandler - public void onPlayerRespawn(PlayerRespawnEvent event){ - Player p = event.getPlayer(); - - for(String pd : plugin.playerDataConfig.getKeys(false)){ - if(plugin.playerDataConfig.getString(event.getPlayer().getUniqueId() + ".name") == p.getDisplayName()){ - - for(ItemStack is : p.getInventory()) { - try { - if(is.getItemMeta().getDisplayName().contains("Kriegs Dreizack")){ - return; - } - } catch (Exception e){ - // nothing happens - } - } - - p.getInventory().addItem(Items.trident()); - - return; - } - } - // when a player respawns remove trident from inventory - for(ItemStack is : p.getInventory()) { - try { - if(is.getItemMeta().getDisplayName().contains("Kriegs Dreizack")){ - p.getInventory().remove(is); - } - } catch (Exception e){ - // nothing happens - } - } - } -} diff --git a/src/de/steev/tridentwar/main.java b/src/de/steev/tridentwar/main.java deleted file mode 100644 index d7b9ccc..0000000 --- a/src/de/steev/tridentwar/main.java +++ /dev/null @@ -1,84 +0,0 @@ -package de.steev.tridentwar; - -import de.steev.tridentwar.events.*; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.event.Listener; -import org.bukkit.plugin.java.JavaPlugin; - -import java.io.File; -import java.io.IOException; - -public class main extends JavaPlugin implements Listener { - - public static boolean eventActive = false; - public FileConfiguration config = this.getConfig(); - public static int alive = 0; - - // Custom Playerdata File - public static File playerdata; - public static FileConfiguration playerDataConfig; - public static final String playerdatafilename = "game.yml"; - - public void onEnable(){ - this.getLogger().info(ChatColor.AQUA + "Steev's Trident War: " + ChatColor.YELLOW + " Plugin lädt"); - - // Registers Events - this.getLogger().info(ChatColor.AQUA + "Steev's Trident War: " + ChatColor.YELLOW + " Registriere Events"); - this.getServer().getPluginManager().registerEvents(this, this); - this.getServer().getPluginManager().registerEvents(new onHit(this), this); - this.getServer().getPluginManager().registerEvents(new itemDrop(this), this); - this.getServer().getPluginManager().registerEvents(new onProjectileLaunch(this), this); - this.getServer().getPluginManager().registerEvents(new PlayerConnectionEvents(this), this); - this.getServer().getPluginManager().registerEvents(new playerRespawn(this), this); - - - // Registers Commands - this.getLogger().info(ChatColor.AQUA + "Steev's Trident War: " + ChatColor.YELLOW + " Lade Befehle"); - this.getCommand("tw").setExecutor(new command(this)); - - /* - * ==================================================== - * # Deletes old game.yml from previus plugin session # - * ==================================================== - */ - // Writes a file with playername, uuid and playermods - playerdata = new File(this.getDataFolder(), playerdatafilename); - - try{ - // Check for already existing file - if(playerdata.exists()){ - // Delete the file if it does exist - playerdata.delete(); - this.getLogger().info(ChatColor.AQUA + "Steev's Trident War: " + ChatColor.YELLOW + " game.yml wird neu erstellt"); - } - }catch (Exception e){ - this.getLogger().warning("Error while creating File\n===================================================\n" + e); - } - - playerDataConfig = YamlConfiguration.loadConfiguration(playerdata); - saveplayerdata(); - saveDefaultConfig(); - } - - public void onDisable(){ - this.getLogger().info(ChatColor.AQUA + "Steev's Trident War: " + ChatColor.YELLOW + " Plugin fährt runter"); - } - - /* - * ================================ - * # File Handler # - * ================================ - */ - /** Handles Player data */ - public static void saveplayerdata(){ - try { - playerDataConfig.save(playerdata); - } catch (IOException e) { - Bukkit.getLogger().warning("Unable to save " + playerdatafilename); // shouldn't really happen, but save throws the exception - } - } -} - diff --git a/src/de/steev/tridentwar/warcontroller.java b/src/de/steev/tridentwar/warcontroller.java deleted file mode 100644 index 21475bc..0000000 --- a/src/de/steev/tridentwar/warcontroller.java +++ /dev/null @@ -1,46 +0,0 @@ -package de.steev.tridentwar; - -import de.steev.tridentwar.data.Items; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; - -public class warcontroller { - /** Handles Starting the Trident War */ - public static void StartTridentWar(main plugin) { - // TODO: set everyone in adventure - plugin.alive = Bukkit.getOnlinePlayers().size(); - // TODO: Create Bossbar with timer in it - for (Player p : Bukkit.getOnlinePlayers()) { - p.getInventory().addItem(Items.trident()); - plugin.playerDataConfig.set(p.getUniqueId() + ".life", 4); - plugin.playerDataConfig.set(p.getUniqueId() + ".name", p.getDisplayName()); - } - plugin.saveplayerdata(); - } - - /** Handles stoping a trident war */ - public static void StopTridentWar(main plugin) { - - // TODO set everyone to default gamemode - plugin.alive = 0; - plugin.eventActive = false; - - for (Player p : Bukkit.getOnlinePlayers()) { - for(ItemStack is : p.getInventory().getContents()){ - try { - if(is.getItemMeta() != null){ - if(is.getItemMeta().getDisplayName().contains("Kriegs Dreizack")){ - p.getInventory().remove(is); - } - } - } catch (Exception e){ - // this wont be catched - } - } - - plugin.playerDataConfig.set(p.getUniqueId() + "", null); - } - plugin.saveplayerdata(); - } -} diff --git a/src/main/java/de/steev/Tridentwar/Tridentwar.java b/src/main/java/de/steev/Tridentwar/Tridentwar.java new file mode 100644 index 0000000..a9184b8 --- /dev/null +++ b/src/main/java/de/steev/Tridentwar/Tridentwar.java @@ -0,0 +1,26 @@ +package de.steev.Tridentwar; + +import de.steev.Tridentwar.commands.TridentwarCommand; +import de.steev.Tridentwar.listeners.ProjectileHitListener; +import de.steev.Tridentwar.listeners.ProjectileLaunchListener; +import de.steev.Tridentwar.manager.GameManager; +import org.bukkit.plugin.java.JavaPlugin; + +public class Tridentwar extends JavaPlugin { + private GameManager gameManager; + + @Override + public void onEnable(){ + super.onEnable(); + this.gameManager = new GameManager(this); + getServer().getPluginManager().registerEvents(new ProjectileLaunchListener(this.gameManager, this), this); + getServer().getPluginManager().registerEvents(new ProjectileHitListener(this.gameManager), this); + getCommand("tw").setExecutor(new TridentwarCommand(gameManager)); + } + + @Override + public void onDisable(){ + super.onDisable(); + gameManager.cleanup(); + } +} diff --git a/src/main/java/de/steev/Tridentwar/commands/TridentwarCommand.java b/src/main/java/de/steev/Tridentwar/commands/TridentwarCommand.java new file mode 100644 index 0000000..1cfb345 --- /dev/null +++ b/src/main/java/de/steev/Tridentwar/commands/TridentwarCommand.java @@ -0,0 +1,27 @@ +package de.steev.Tridentwar.commands; + +import de.steev.Tridentwar.manager.GameManager; +import de.steev.Tridentwar.manager.GameState; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; + +public class TridentwarCommand implements CommandExecutor { + + private GameManager gameManager; + + public TridentwarCommand(GameManager gameManager){ + this.gameManager = gameManager; + } + + public boolean onCommand(CommandSender commandSender, Command command, String s, String[] args) { + if (args[0] == null) return false; + + switch (args[0].toLowerCase()){ + case "start": + gameManager.setGameState(GameState.STARTING); + break; + } + return false; + } +} diff --git a/src/main/java/de/steev/Tridentwar/listeners/ProjectileHitListener.java b/src/main/java/de/steev/Tridentwar/listeners/ProjectileHitListener.java new file mode 100644 index 0000000..44a1cd7 --- /dev/null +++ b/src/main/java/de/steev/Tridentwar/listeners/ProjectileHitListener.java @@ -0,0 +1,31 @@ +package de.steev.Tridentwar.listeners; + +import de.steev.Tridentwar.manager.GameManager; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.ProjectileHitEvent; +import org.bukkit.inventory.ItemStack; + +public class ProjectileHitListener implements Listener { + private GameManager gameManager; + + public ProjectileHitListener(GameManager gameManager){ + this.gameManager = gameManager; + } + + @EventHandler + public void onTridentHit(ProjectileHitEvent event){ + if(this.gameManager.getTridentManager().getTask((Player)event.getEntity().getShooter()) != null) { + this.gameManager.getTridentManager().getTask((Player) event.getEntity().getShooter()).cancel(); + this.gameManager.getTridentManager().removeTridentTast((Player) event.getEntity().getShooter()); + } + + if(event.getHitEntity() instanceof Player) ((Player) event.getEntity().getShooter()).playSound(((Player) event.getEntity().getShooter()).getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1f, 0.5f); + + event.getEntity().remove(); + ((Player) event.getEntity().getShooter()).getInventory().addItem(new ItemStack(Material.TRIDENT)); + } +} diff --git a/src/main/java/de/steev/Tridentwar/listeners/ProjectileLaunchListener.java b/src/main/java/de/steev/Tridentwar/listeners/ProjectileLaunchListener.java new file mode 100644 index 0000000..99967af --- /dev/null +++ b/src/main/java/de/steev/Tridentwar/listeners/ProjectileLaunchListener.java @@ -0,0 +1,28 @@ +package de.steev.Tridentwar.listeners; + +import de.steev.Tridentwar.Tridentwar; +import de.steev.Tridentwar.manager.GameManager; +import de.steev.Tridentwar.tasks.TridentResetTask; +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 { + + private GameManager gameManager; + private TridentResetTask tridentResetTask; + private Tridentwar plugin; + + public ProjectileLaunchListener(GameManager gameManager, Tridentwar plugin){ + this.gameManager = gameManager; + this.plugin = plugin; + } + + @EventHandler + public void OnProjectileLaunch(ProjectileLaunchEvent event){ + this.tridentResetTask = new TridentResetTask(this.gameManager, (Player)event.getEntity().getShooter()); + this.tridentResetTask.runTaskLater(plugin, 300); + gameManager.getTridentManager().setTasks((Player)event.getEntity().getShooter(), this.tridentResetTask); + } +} diff --git a/src/main/java/de/steev/Tridentwar/manager/GameManager.java b/src/main/java/de/steev/Tridentwar/manager/GameManager.java new file mode 100644 index 0000000..9fefac3 --- /dev/null +++ b/src/main/java/de/steev/Tridentwar/manager/GameManager.java @@ -0,0 +1,45 @@ +package de.steev.Tridentwar.manager; + +import de.steev.Tridentwar.Tridentwar; +import de.steev.Tridentwar.tasks.GameStartCountdownTask; +import org.bukkit.Bukkit; + +public class GameManager { + private final Tridentwar plugin; + private TridentManager tridentManager; + private GameStartCountdownTask gameStartCountdownTask; + public GameState gameState = GameState.LOBBY; + private PlayerManager playerManager; + + + public GameManager(Tridentwar plugin) { + this.plugin = plugin; + this.tridentManager = new TridentManager(this); + this.playerManager = new PlayerManager(this); + } + + public void setGameState(GameState gameState){ + if(this.gameState == GameState.ACTIVE && gameState == GameState.STARTING) return; + this.gameState = gameState; + + switch (gameState){ + case ACTIVE: + Bukkit.broadcastMessage("Active!"); + this.playerManager.giveKits(); + break; + case STARTING: + Bukkit.broadcastMessage("Starting!"); + this.gameStartCountdownTask = new GameStartCountdownTask(this); + this.gameStartCountdownTask.runTaskTimer(plugin, 0 , 20); + // teleport players + // clear inventories + break; + } + } + + public void cleanup(){} + + public TridentManager getTridentManager() { return tridentManager; } + public PlayerManager getPlayerManager() { return playerManager; } + public GameState getGameState() { return gameState; } +} diff --git a/src/main/java/de/steev/Tridentwar/manager/GameState.java b/src/main/java/de/steev/Tridentwar/manager/GameState.java new file mode 100644 index 0000000..0f36861 --- /dev/null +++ b/src/main/java/de/steev/Tridentwar/manager/GameState.java @@ -0,0 +1,5 @@ +package de.steev.Tridentwar.manager; + +public enum GameState { + LOBBY, STARTING, ACTIVE, WON, RESTARTING, STOPPING; +} diff --git a/src/main/java/de/steev/Tridentwar/manager/PlayerManager.java b/src/main/java/de/steev/Tridentwar/manager/PlayerManager.java new file mode 100644 index 0000000..964aa59 --- /dev/null +++ b/src/main/java/de/steev/Tridentwar/manager/PlayerManager.java @@ -0,0 +1,23 @@ +package de.steev.Tridentwar.manager; + +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +public class PlayerManager { + private GameManager gameManager; + + public PlayerManager(GameManager gameManager) { + this.gameManager = gameManager; + } + + public void giveKits() { + Bukkit.getOnlinePlayers().stream().filter(player -> player.getGameMode() == GameMode.SURVIVAL).forEach(this::giveKit); + } + + public void giveKit(Player player){ + player.getInventory().addItem(new ItemStack(Material.TRIDENT)); + } +} diff --git a/src/main/java/de/steev/Tridentwar/manager/TridentManager.java b/src/main/java/de/steev/Tridentwar/manager/TridentManager.java new file mode 100644 index 0000000..cbb1c8c --- /dev/null +++ b/src/main/java/de/steev/Tridentwar/manager/TridentManager.java @@ -0,0 +1,16 @@ +package de.steev.Tridentwar.manager; + +import de.steev.Tridentwar.tasks.TridentResetTask; +import org.bukkit.entity.Player; + +import java.util.HashMap; + +public class TridentManager { + private HashMap tasks; + private GameManager gameManager; + + public TridentManager(GameManager gameManager) { this.gameManager = gameManager; } + public void setTasks(Player thrower, TridentResetTask task) { this.tasks.put(thrower, task); } + public TridentResetTask getTask (Player thrower) { return tasks.get(thrower); } + public void removeTridentTast(Player thrower) { tasks.remove(thrower); } +} diff --git a/src/main/java/de/steev/Tridentwar/tasks/GameStartCountdownTask.java b/src/main/java/de/steev/Tridentwar/tasks/GameStartCountdownTask.java new file mode 100644 index 0000000..9b32b3a --- /dev/null +++ b/src/main/java/de/steev/Tridentwar/tasks/GameStartCountdownTask.java @@ -0,0 +1,26 @@ +package de.steev.Tridentwar.tasks; + +import de.steev.Tridentwar.manager.GameManager; +import de.steev.Tridentwar.manager.GameState; +import org.bukkit.Bukkit; +import org.bukkit.scheduler.BukkitRunnable; + +public class GameStartCountdownTask extends BukkitRunnable { + private GameManager gameManager; + public GameStartCountdownTask (GameManager gameManager) { + this.gameManager = gameManager; + } + + private int timeLeft = 10; + + @Override + public void run() { + timeLeft--; + if(timeLeft <= 0) { + cancel(); + gameManager.setGameState(GameState.ACTIVE); + return; + } + Bukkit.broadcastMessage(timeLeft + " seconds Until game starts!"); + } +} diff --git a/src/main/java/de/steev/Tridentwar/tasks/TridentResetTask.java b/src/main/java/de/steev/Tridentwar/tasks/TridentResetTask.java new file mode 100644 index 0000000..5bce939 --- /dev/null +++ b/src/main/java/de/steev/Tridentwar/tasks/TridentResetTask.java @@ -0,0 +1,23 @@ +package de.steev.Tridentwar.tasks; + +import de.steev.Tridentwar.manager.GameManager; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.scheduler.BukkitRunnable; + +public class TridentResetTask extends BukkitRunnable { + + private GameManager gameManager; + private Player thrower; + + public TridentResetTask (GameManager gameManager, Player thrower) { + this.gameManager = gameManager; + this.thrower = thrower; + } + + @Override + public void run() { + thrower.getInventory().addItem(new ItemStack(Material.TRIDENT)); + } +}