From 1f1149b38392fc483c56c33a061ef9e29f6f94c3 Mon Sep 17 00:00:00 2001 From: steevLP Date: Sat, 7 Aug 2021 21:03:48 +0200 Subject: [PATCH] initial commit --- config.yml | 4 + plugin.yml | 6 + 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 +++++ 11 files changed, 704 insertions(+) create mode 100644 config.yml create mode 100644 plugin.yml create mode 100644 src/de/steev/tridentwar/command.java create mode 100644 src/de/steev/tridentwar/data/Items.java create mode 100644 src/de/steev/tridentwar/events/PlayerConnectionEvents.java create mode 100644 src/de/steev/tridentwar/events/itemDrop.java create mode 100644 src/de/steev/tridentwar/events/onHit.java create mode 100644 src/de/steev/tridentwar/events/onProjectileLaunch.java create mode 100644 src/de/steev/tridentwar/events/playerRespawn.java create mode 100644 src/de/steev/tridentwar/main.java create mode 100644 src/de/steev/tridentwar/warcontroller.java diff --git a/config.yml b/config.yml new file mode 100644 index 0000000..47386c4 --- /dev/null +++ b/config.yml @@ -0,0 +1,4 @@ +spawn: unset +spectator: unset +endLoc: unset +time: 600 diff --git a/plugin.yml b/plugin.yml new file mode 100644 index 0000000..867c11f --- /dev/null +++ b/plugin.yml @@ -0,0 +1,6 @@ +name: TridentWar +main: de.steev.tridentwar.main +version: 0.1 +api-version: 1.13 +commands: + tw: \ No newline at end of file diff --git a/src/de/steev/tridentwar/command.java b/src/de/steev/tridentwar/command.java new file mode 100644 index 0000000..157bdb3 --- /dev/null +++ b/src/de/steev/tridentwar/command.java @@ -0,0 +1,146 @@ +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 new file mode 100644 index 0000000..53ce3c3 --- /dev/null +++ b/src/de/steev/tridentwar/data/Items.java @@ -0,0 +1,15 @@ +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 new file mode 100644 index 0000000..574ffbc --- /dev/null +++ b/src/de/steev/tridentwar/events/PlayerConnectionEvents.java @@ -0,0 +1,95 @@ +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 new file mode 100644 index 0000000..c172eee --- /dev/null +++ b/src/de/steev/tridentwar/events/itemDrop.java @@ -0,0 +1,44 @@ +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 new file mode 100644 index 0000000..4a967c2 --- /dev/null +++ b/src/de/steev/tridentwar/events/onHit.java @@ -0,0 +1,161 @@ +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 new file mode 100644 index 0000000..4426287 --- /dev/null +++ b/src/de/steev/tridentwar/events/onProjectileLaunch.java @@ -0,0 +1,52 @@ +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 new file mode 100644 index 0000000..ca81629 --- /dev/null +++ b/src/de/steev/tridentwar/events/playerRespawn.java @@ -0,0 +1,51 @@ +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 new file mode 100644 index 0000000..d7b9ccc --- /dev/null +++ b/src/de/steev/tridentwar/main.java @@ -0,0 +1,84 @@ +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 new file mode 100644 index 0000000..21475bc --- /dev/null +++ b/src/de/steev/tridentwar/warcontroller.java @@ -0,0 +1,46 @@ +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(); + } +}