diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..078f79b --- /dev/null +++ b/pom.xml @@ -0,0 +1,69 @@ + + + 4.0.0 + + net.brennholz.challenges + Challenges + 1.9 + + + UTF-8 + UTF-8 + UTF-8 + UTF-8 + 1.8 + 1.8 + + + + + clean package + + + org.apache.maven.plugins + maven-jar-plugin + 3.0.2 + + ${project.artifactId} + + + + maven-compiler-plugin + 3.6.1 + + 8 + 8 + + + + + + src/main/resources + true + + + + + + + spigot-repo + https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + + + + org.spigotmc + spigot-api + 1.13.2-R0.1-SNAPSHOT + provided + + + org.projectlombok + lombok + 1.16.22 + provided + + + + diff --git a/src/main/java/net/brennholz/challenges/Actionbar.java b/src/main/java/net/brennholz/challenges/Actionbar.java new file mode 100644 index 0000000..4eaa9e7 --- /dev/null +++ b/src/main/java/net/brennholz/challenges/Actionbar.java @@ -0,0 +1,25 @@ +package net.brennholz.challenges; + + + +import org.bukkit.entity.Player; + +public class Actionbar { + + public static void sendActionBarMessage(Player p, String message) { + try { + Object chat = ReflectionUtil.getClassbyName("ChatSerializer").getMethod("a", String.class).invoke(null, + "{\"text\":\"" + message + "\"}"); + Object packet = ReflectionUtil.getClassbyName("PacketPlayOutChat") + .getConstructor(ReflectionUtil.getClassbyName("IChatBaseComponent"), + ReflectionUtil.getClassbyName("ChatMessageType")) + .newInstance(chat, (Object) ReflectionUtil.getClassbyName("ChatMessageType").getEnumConstants()[2]); + Object player = p.getClass().getMethod("getHandle").invoke(p); + Object connection = player.getClass().getField("playerConnection").get(player); + connection.getClass().getMethod("sendPacket", ReflectionUtil.getClassbyName("Packet")).invoke(connection, + packet); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/net/brennholz/challenges/Backpack.java b/src/main/java/net/brennholz/challenges/Backpack.java new file mode 100644 index 0000000..8e15ddc --- /dev/null +++ b/src/main/java/net/brennholz/challenges/Backpack.java @@ -0,0 +1,75 @@ +package net.brennholz.challenges; + + + +import java.util.Iterator; +import java.util.Map; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.MemorySection; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +public class Backpack implements CommandExecutor { + + private Challenges chl = Challenges.getplugin(); + + public static Inventory Backpack = Bukkit.createInventory(null, 27, "�6Backpack"); + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (sender instanceof Player) { + Player p = (Player) sender; + if (p.hasPermission("challenges.backpack")) { + p.openInventory(Backpack); + } else + p.sendMessage("�cDu hast hierf�r keine Berechtigung"); + } else + sender.sendMessage("�cKein Konsolenbefehl!"); + return true; + } + + public void clearConfig() { + Iterator var2 = chl.getBackpackConfig().getKeys(false).iterator(); + while (var2.hasNext()) { + String main_path = (String) var2.next(); + chl.getBackpackConfig().set(main_path, null); + } + } + + public void saveInventoryToConfig() { + clearConfig(); + for (int slot = 0; slot < this.Backpack.getSize(); slot++) { + ItemStack stack = this.Backpack.getItem(slot); + if ((stack != null) && (stack.getType() != Material.AIR)) { + chl.getBackpackConfig().set(String.valueOf(slot), stack.serialize()); + } + } + } + + public void loadInventoryFromConfig() { + Iterator var2 = chl.getBackpackConfig().getValues(false).entrySet().iterator(); + int slot; + while (var2.hasNext()) { + Map.Entry entry = (Map.Entry) var2.next(); + try { + slot = Integer.parseInt((String) entry.getKey()); + } catch (NumberFormatException var6) { + chl.getServer().broadcastMessage("Fehler! Slot: " + (String) entry.getKey()); + continue; + } + if (slot >= this.Backpack.getSize()) { + chl.getServer().broadcastMessage("�cSlot " + slot + " befindet sich au�erhalb des Inventars!"); + } else { + MemorySection memorySection = (MemorySection) entry.getValue(); + ItemStack deserialized = ItemStack.deserialize(memorySection.getValues(false)); + this.Backpack.setItem(slot, deserialized); + } + } + } +} diff --git a/src/main/java/net/brennholz/challenges/Challenges.java b/src/main/java/net/brennholz/challenges/Challenges.java new file mode 100644 index 0000000..aa2a7a9 --- /dev/null +++ b/src/main/java/net/brennholz/challenges/Challenges.java @@ -0,0 +1,284 @@ +package net.brennholz.challenges; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.plugin.java.JavaPlugin; + +import com.google.common.io.MoreFiles; +import com.google.common.io.RecursiveDeleteOption; + +import net.brennholz.challenges.Timer_Command; + +public class Challenges extends JavaPlugin { + + private static Challenges plugin; + + private File BackpackConfigFile; + private FileConfiguration BackpackConfig; + + Timer_Command Timer; + Backpack backpack; + + public static Inventory SettingsGUI = Bukkit.createInventory(null, 45, "�6Settings"); + + public static String GUIName = "�6Settings"; + + public static Challenges getplugin() { + return plugin; + } + + @Override + public void onEnable() { + this.plugin = this; + this.Timer = new Timer_Command(); + this.backpack = new Backpack(); + getCommand("settings").setExecutor(this); + getCommand("hp").setExecutor(new HP_Command()); + getCommand("coords").setExecutor(new Coords_Command()); + getCommand("revive").setExecutor(new Revive_Command()); + getCommand("timer").setExecutor(new Timer_Command()); + getCommand("challenges").setExecutor(new Challenges_Command()); + getCommand("backpack").setExecutor(new Backpack()); + getCommand("reset").setExecutor(new Reset_Command()); + Bukkit.getPluginManager().registerEvents(new EventListener(), this); + saveDefaultConfig(); + reloadConfig(); + if (getConfig().getBoolean("World_Reset")) { + this.getLogger().info("/Reset Command was executed!"); + this.getLogger().info("Preparing world reset!"); + String worldname = getConfig().getString("World_Name"); + String nethername = worldname + "_nether"; + String endname = worldname + "_the_end"; + File worldfolder = new File(Bukkit.getWorldContainer().getPath() + "/" + worldname); + File netherfolder = new File(Bukkit.getWorldContainer().getPath() + "/" + nethername); + File endfolder = new File(Bukkit.getWorldContainer().getPath() + "/" + endname); + + try { + MoreFiles.deleteRecursively(worldfolder.toPath(), RecursiveDeleteOption.ALLOW_INSECURE); + MoreFiles.deleteRecursively(netherfolder.toPath(), RecursiveDeleteOption.ALLOW_INSECURE); + MoreFiles.deleteRecursively(endfolder.toPath(), RecursiveDeleteOption.ALLOW_INSECURE); + this.getLogger().info("World reset successful!"); + } catch (IOException e) { + this.getLogger().info("World reset failed!"); + e.printStackTrace(); + } + getConfig().set("World_Reset", false); + saveConfig(); + } + createBackpackConfig(); + backpack.loadInventoryFromConfig(); + Timer.Run_Timer(); + this.getLogger().info("Plugin loaded!"); + } + + @Override + public void onDisable() { + backpack.saveInventoryToConfig(); + try { + BackpackConfig.save(BackpackConfigFile); + } catch (IOException e) { + e.printStackTrace(); + } + this.getLogger().info("Plugin unloaded"); + } + + public FileConfiguration getBackpackConfig() { + return this.BackpackConfig; + } + + private void createBackpackConfig() { + BackpackConfigFile = new File(getDataFolder(), "backpack.yml"); + if (!BackpackConfigFile.exists()) { + BackpackConfigFile.getParentFile().mkdirs(); + saveResource("backpack.yml", false); + } + BackpackConfig = new YamlConfiguration(); + try { + BackpackConfig.load(BackpackConfigFile); + } catch (IOException | InvalidConfigurationException e) { + e.printStackTrace(); + } + } + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + if (sender instanceof Player) { + Player p = (Player) sender; + if (args.length == 0) { + if (p.hasPermission("challenges.settings.view")) { + createGUI(p); + } else + p.sendMessage("�cDu hast hierf�r keine Berechtigung"); + } else if (args.length == 1) { + if (args[0].equalsIgnoreCase("get")) { + if (p.hasPermission("challenges.settings.get")) { + p.sendMessage("�c~~~~~ �6Aktuelle Einstellungen �c~~~~~"); + p.sendMessage("�6Erlaube Crafting = �c" + getConfig().getBoolean("craftingtable")); + p.sendMessage("�6Erlaube Handeln = �c" + getConfig().getBoolean("allowtrading")); + p.sendMessage("�6Tod bei Fallschaden = �c" + getConfig().getBoolean("deathonfall")); + p.sendMessage("�6Schaden bei Schleichen = �c" + getConfig().getBoolean("damageonsneak")); + p.sendMessage("�6Menge Schaden bei Schleichen = �c" + getConfig().getInt("sneakdmg")); + p.sendMessage("�6Geteilter Schaden = �c" + getConfig().getBoolean("sharedmg")); + p.sendMessage("�6Ein Leben f�r alle = �c" + getConfig().getBoolean("onelife")); + p.sendMessage("�6Schaden in Chat = �c" + getConfig().getBoolean("dmginchat")); + p.sendMessage("�6Respawn = �c" + getConfig().getBoolean("respawn")); + } else + p.sendMessage("�cDu hast hierf�r keine Berechtigung"); + } else + p.sendMessage( + "�cBenutze /settings Get/Crafting/Trading/DeathFall/DMGOnSneak/ShareDMG/Respawn/OneLife/ChatDMG [True/False]"); + } else if (args.length >= 2) { + if (p.hasPermission("challenges.settings.modify")) { + Boolean Bwert = Boolean.parseBoolean(args[1]); + if (args[0].equalsIgnoreCase("crafting")) { + getConfig().set("craftingtable", Bwert); + saveConfig(); + p.sendMessage("�6Erlaube Crafting = �c" + getConfig().getBoolean("craftingtable")); + } else if (args[0].equalsIgnoreCase("deathfall")) { + getConfig().set("deathonfall", Bwert); + saveConfig(); + p.sendMessage("�6Tod bei Fallschaden = �c" + getConfig().getBoolean("deathonfall")); + } else if (args[0].equalsIgnoreCase("trading")) { + getConfig().set("allowtrading", Bwert); + saveConfig(); + p.sendMessage("�6Erlaube Handeln = �c" + getConfig().getBoolean("allowtrading")); + } else if (args[0].equalsIgnoreCase("dmgonsneak")) { + getConfig().set("damageonsneak", Bwert); + saveConfig(); + p.sendMessage("�6Schaden bei Schleichen = �c" + getConfig().getBoolean("damageonsneak")); + } else if (args[0].equalsIgnoreCase("sneakdmg")) { + Double Dwert = Double.parseDouble(args[1]); + getConfig().set("sneakdmg", Dwert); + saveConfig(); + p.sendMessage("�6Menge Schaden bei Schleichen = �c" + getConfig().getString("sneakdmg")); + } else if (args[0].equalsIgnoreCase("sharedmg")) { + getConfig().set("sharehp", Bwert); + saveConfig(); + p.sendMessage("�6Teile Schaden = �c" + getConfig().getBoolean("sharedmg")); + } else if (args[0].equalsIgnoreCase("respawn")) { + getConfig().set("respawn", Bwert); + saveConfig(); + p.sendMessage("�6Respawn = �c" + getConfig().getBoolean("respawn")); + } else if (args[0].equalsIgnoreCase("onelife")) { + getConfig().set("onelife", Bwert); + saveConfig(); + p.sendMessage("�6Ein Leben f�r alle = �c" + getConfig().getBoolean("onelife")); + } else if (args[0].equalsIgnoreCase("chatdmg")) { + getConfig().set("dmginchat", Bwert); + saveConfig(); + p.sendMessage("�6Schaden in Chat = �c" + getConfig().getBoolean("dmginchat")); + } else + p.sendMessage("�cFalsche Parameter!"); + } else + p.sendMessage("�cDu hast hierf�r keine Berechtigung"); + } else + p.sendMessage( + "�cBenutze /settings Get/Crafting/Trading/DeathFall/DMGOnSneak/ShareDMG/Respawn/OneLife/ChatDMG [True/False]"); + } else + sender.sendMessage("�cKein Konsolenbefehl!"); + return true; + + } + + public void createGUI(Player p) { + SettingsGUI.setItem(9, addGUIItem(Material.CRAFTING_TABLE, "�6Erlaube Crafting")); + SettingsGUI.setItem(10, addGUIItem(Material.EMERALD, "�6Erlaube Handeln")); + SettingsGUI.setItem(11, addGUIItem(Material.BONE, "�6Tod bei Fallschaden", "�cSpieler stirbt bei Fallschaden")); + SettingsGUI.setItem(12, addGUIItem(Material.MAGMA_BLOCK, "�6Schaden bei Schleichen", + "�cSpieler erh�lt �6" + getConfig().getInt("sneakdmg") + " �cSchaden bei Schleichen")); + SettingsGUI.setItem(14, addGUIItem(Material.GLISTERING_MELON_SLICE, "�6Geteilter Schaden", + "�cAlle Spieler erhalten den gleichen Schaden")); + SettingsGUI.setItem(15, addGUIItem(Material.TOTEM_OF_UNDYING, "�6Respawn")); + SettingsGUI.setItem(16, addGUIItem(Material.POPPY, "�6Ein Leben f�r alle", "�cStirbt ein Spieler ist die", + "�cChallenge fehlgeschlagen")); + SettingsGUI.setItem(17, addGUIItem(Material.BOOK, "�6Schaden in Chat", "�cZeigt Spielerschaden im Chat an")); + SettingsGUI.setItem(36, + addGUIItem(Material.CHEST, "�6KeepInventory", "�cStirbst du, beh�lst du dein Inventar")); + SettingsGUI.setItem(44, + addGUIItem(Material.GOLDEN_APPLE, "�6Nat�rliche Regeneration", "�cSchalte nat�rliche Regeneration um")); + + SettingsGUI.setItem(18, addGUIItem(getDye("craftingtable"), getBool("craftingtable"))); + SettingsGUI.setItem(19, addGUIItem(getDye("allowtrading"), getBool("allowtrading"))); + SettingsGUI.setItem(20, addGUIItem(getDye("deathonfall"), getBool("deathonfall"))); + SettingsGUI.setItem(21, addGUIItem(getDye("damageonsneak"), getBool("damageonsneak"))); + SettingsGUI.setItem(23, addGUIItem(getDye("sharedmg"), getBool("sharedmg"))); + SettingsGUI.setItem(24, addGUIItem(getDye("respawn"), getBool("respawn"))); + SettingsGUI.setItem(25, addGUIItem(getDye("onelife"), getBool("onelife"))); + SettingsGUI.setItem(26, addGUIItem(getDye("dmginchat"), getBool("dmginchat"))); + SettingsGUI.setItem(37, addGUIItem(getgrDye("keepInventory"), getgrBool("keepInventory"))); + SettingsGUI.setItem(43, addGUIItem(getgrDye("naturalRegeneration"), getgrBool("naturalRegeneration"))); + for (int i = 0; i < 45; i++) { + if (SettingsGUI.getItem(i) == null) { + SettingsGUI.setItem(i, addGUIItem(Material.ORANGE_STAINED_GLASS_PANE, "")); + } + } + p.openInventory(SettingsGUI); + } + + private Material getDye(String cnfpath) { + ItemStack mat = new ItemStack(Material.GRAY_DYE); + if (getConfig().getBoolean(cnfpath) == true) { + mat.setType(Material.LIME_DYE); + } else + mat.setType(Material.ROSE_RED); + return mat.getType(); + } + + private String getBool(String cnfpath) { + if (getConfig().getBoolean(cnfpath) == true) { + return "�aTrue"; + } else + return "�cFalse"; + } + + private Material getgrDye(String gr) { + ItemStack mat = new ItemStack(Material.GRAY_DYE); + World wld = Bukkit.getWorlds().get(0); + if (wld.getGameRuleValue(gr).equals("true")) { + mat.setType(Material.LIME_DYE); + } else if (wld.getGameRuleValue(gr).equals("false")) { + mat.setType(Material.ROSE_RED); + } + return mat.getType(); + } + + private String getgrBool(String gr) { + World wld = Bukkit.getWorlds().get(0); + if (wld.getGameRuleValue(gr).equals("true")) { + return "�aTrue"; + } else if (wld.getGameRuleValue(gr).equals("false")) { + return "�cFalse"; + } + return "�7Unknown"; + } + + private ItemStack addGUIItem(Material mat, String name, String... lore) { + ItemStack item = new ItemStack(mat, 1); + ItemMeta meta = item.getItemMeta(); + meta.setDisplayName(name); + ArrayList metalore = new ArrayList(); + if (lore != null) { + for (String lorecomments : lore) { + metalore.add(lorecomments); + } + } + meta.setLore(metalore); + item.setItemMeta(meta); + + return item; + } +} \ No newline at end of file diff --git a/src/main/java/net/brennholz/challenges/Challenges_Command.java b/src/main/java/net/brennholz/challenges/Challenges_Command.java new file mode 100644 index 0000000..75f6654 --- /dev/null +++ b/src/main/java/net/brennholz/challenges/Challenges_Command.java @@ -0,0 +1,28 @@ +package net.brennholz.challenges; + + + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; + +public class Challenges_Command implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String lable, String[] args) { + if (sender.hasPermission("challenges.challenges")) { + sender.sendMessage("�6Challenges Ver 1.9 by Brennholz3000"); + sender.sendMessage("�6Verf�gbare Befehle:"); + sender.sendMessage("�c/HP �4- �6Verwalte die HP einzelner Spieler"); + sender.sendMessage("�c/Coords �4- �6Teile oder speichere Coordinaten"); + sender.sendMessage("�c/Settings �4- �6Verwalte die Challenges Einstellungen"); + sender.sendMessage("�c/Timer �4- �6Verwalte den Timer"); + sender.sendMessage("�c/Revive �4- �6Wiederbelebe Spieler"); + sender.sendMessage("�c/Backpack �6| �c/bp �4- �6�ffne das Backpack"); + sender.sendMessage( + "�c/Reset �4- �6Generiert eine neue Welt, setzt den Timer zur�ck und l�scht gespeicherte Positionen"); + } else + sender.sendMessage("�cDu hast hierf�r keine Berechtigung"); + return true; + } +} diff --git a/src/main/java/net/brennholz/challenges/Coords_Command.java b/src/main/java/net/brennholz/challenges/Coords_Command.java new file mode 100644 index 0000000..6af0e8d --- /dev/null +++ b/src/main/java/net/brennholz/challenges/Coords_Command.java @@ -0,0 +1,166 @@ +package net.brennholz.challenges; + + + +import java.util.ArrayList; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +public class Coords_Command implements CommandExecutor { + + private Challenges chl = Challenges.getplugin(); + + public static Inventory CoordsGUI = Bukkit.createInventory(null, 45, "�6Koordinaten"); + public static Inventory CoordsDeleteGUI = Bukkit.createInventory(null, 9, "�6Entferne Koordinate"); + + public static String CGUIN = "�6Koordinaten"; + public static String CDGUIN = "�6Entferne Koordinate"; + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String lable, String[] args) { + if (sender instanceof Player) { + Player p = (Player) sender; + if (args.length == 0) { + if (p.hasPermission("challenges.coords.view")) { + createMainGUI(p); + } else + p.sendMessage("�cDu hast hierf�r keine Berechtigung"); + } else if (args.length == 1) { + if (args[0].equalsIgnoreCase("share")) { + if (p.hasPermission("challenges.coords.share")) { + chl.getServer() + .broadcastMessage("�c" + p.getName() + " �6ist bei �c" + p.getLocation().getBlockX() + + " " + p.getLocation().getBlockY() + " " + p.getLocation().getBlockZ() + + " �6in Welt �6" + p.getWorld().getName()); + } else + p.sendMessage("�cDu hast hierf�r keine Berechtigung"); + } else if (args[0].equalsIgnoreCase("get")) { + if (p.hasPermission("challenges.coords.get")) { + p.sendMessage("�6Verf�gbare Positionen:"); + for (String key : chl.getConfig().getConfigurationSection("Saved_Locations").getKeys(false)) { + p.sendMessage("�c" + key); + } + } else + p.sendMessage("�cDu hast hierf�r keine Berechtigung"); + } else + p.sendMessage("�cBenutze: /coords share/save/get/delete [Name]"); + } else if (args.length >= 2) { + if (args[0].equalsIgnoreCase("save")) { + if (p.hasPermission("challenges.coords.save")) { + if (!chl.getConfig().contains("Saved_Locations." + args[1])) { + chl.getServer() + .broadcastMessage("�6Die Position �c" + args[1] + " �6(�c" + p.getWorld().getName() + + " " + p.getLocation().getBlockX() + " " + p.getLocation().getBlockY() + + " " + p.getLocation().getBlockZ() + "�6) wurde von �c" + p.getName() + + " �6gespeichert"); + chl.getConfig().set("Saved_Locations." + args[1] + ".World", p.getWorld().getName()); + chl.getConfig().set("Saved_Locations." + args[1] + ".BlockX", p.getLocation().getBlockX()); + chl.getConfig().set("Saved_Locations." + args[1] + ".BlockY", p.getLocation().getBlockY()); + chl.getConfig().set("Saved_Locations." + args[1] + ".BlockZ", p.getLocation().getBlockZ()); + chl.saveConfig(); + } else + p.sendMessage( + "�cDiese Position existiert bereits! Benutze einen anderen Namen oder l�sche die alte zuerst mit /coords delete " + + args[1]); + } else + p.sendMessage("�cDu hast hierf�r keine Berechtigung"); + } else if (args[0].equalsIgnoreCase("get")) { + if (p.hasPermission("challenges.coords.get")) { + if (chl.getConfig().contains("Saved_Locations." + args[1])) { + String w = chl.getConfig().getString("Saved_Locations." + args[1] + ".World"); + String x = chl.getConfig().getString("Saved_Locations." + args[1] + ".BlockX"); + String y = chl.getConfig().getString("Saved_Locations." + args[1] + ".BlockY"); + String z = chl.getConfig().getString("Saved_Locations." + args[1] + ".BlockZ"); + p.sendMessage("�6" + args[1] + ": �c" + w + " " + x + " " + y + " " + z); + } else + p.sendMessage("�cDiese Position existiert nicht!"); + } else + p.sendMessage("�cDu hast hierf�r keine Berechtigung"); + } else if (args[0].equalsIgnoreCase("delete")) { + if (p.hasPermission("challenges.coords.delete")) { + if (chl.getConfig().contains("Saved_Locations." + args[1])) { + createDeleteGUI(p, args[1]); + p.openInventory(CoordsDeleteGUI); + } else + p.sendMessage("�cDiese Position existiert nicht!"); + } else + p.sendMessage("�cDu hast hierf�r keine Berechtigung"); + } else + p.sendMessage("�cBenutze: /coords share/save/get/delete [Name]"); + } + } else + sender.sendMessage("�cKein Konsolenbefehl!"); + return true; + } + + public void createMainGUI(Player p) { + int i = 0; + String w; + String x; + String y; + String z; + for (String key : chl.getConfig().getConfigurationSection("Saved_Locations").getKeys(false)) { + if (i >= 45) { + break; + } + w = chl.getConfig().getString("Saved_Locations." + key + ".World"); + x = chl.getConfig().getString("Saved_Locations." + key + ".BlockX"); + y = chl.getConfig().getString("Saved_Locations." + key + ".BlockY"); + z = chl.getConfig().getString("Saved_Locations." + key + ".BlockZ"); + CoordsGUI.setItem(i, addGUIItem(getBlock(w), key, "�c" + x, "�c" + y, "�c" + z)); + i++; + } + for (int ii = i; ii < 45; ii++) { + CoordsGUI.setItem(ii, addGUIItem(Material.AIR, "")); + } + p.openInventory(CoordsGUI); + } + + public void createDeleteGUI(Player p, String dname) { + CoordsDeleteGUI.setItem(0, addGUIItem(Material.LIME_TERRACOTTA, "�aL�schen best�tigen", "�f" + dname)); + CoordsDeleteGUI.setItem(4, addGUIItem(Material.ORANGE_BANNER, dname)); + for (int i = 1; i < 8; i++) { + if (CoordsDeleteGUI.getItem(i) == null) { + CoordsDeleteGUI.setItem(i, addGUIItem(Material.ORANGE_STAINED_GLASS_PANE, "")); + } + } + CoordsDeleteGUI.setItem(8, addGUIItem(Material.RED_TERRACOTTA, "�cL�schen abbrechen", dname)); + p.openInventory(CoordsDeleteGUI); + } + + private ItemStack addGUIItem(Material mat, String name, String... lore) { + ItemStack item = new ItemStack(mat, 1); + ItemMeta meta = item.getItemMeta(); + if (mat != Material.AIR) { + meta.setDisplayName(name); + ArrayList metalore = new ArrayList(); + if (lore != null) { + for (String lorecomments : lore) { + metalore.add(lorecomments); + } + } + meta.setLore(metalore); + item.setItemMeta(meta); + } + return item; + } + + private Material getBlock(String wname) { + ItemStack mat = new ItemStack(Material.GRASS_BLOCK); + if (wname.equals(Bukkit.getWorlds().get(1).getName())) { + mat.setType(Material.NETHERRACK); + } else if (wname.equals(Bukkit.getWorlds().get(2).getName())) { + mat.setType(Material.END_STONE); + } + return mat.getType(); + } + +} \ No newline at end of file diff --git a/src/main/java/net/brennholz/challenges/EventListener.java b/src/main/java/net/brennholz/challenges/EventListener.java new file mode 100644 index 0000000..ac53ceb --- /dev/null +++ b/src/main/java/net/brennholz/challenges/EventListener.java @@ -0,0 +1,286 @@ +package net.brennholz.challenges; + + + +import java.text.DecimalFormat; +import java.util.Random; + +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.entity.EnderDragon; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.entity.EntityDeathEvent; +import org.bukkit.event.entity.PlayerDeathEvent; +import org.bukkit.event.player.PlayerInteractEntityEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.event.player.PlayerRespawnEvent; +import org.bukkit.event.player.PlayerToggleSneakEvent; + +public class EventListener implements Listener { + + private Challenges chl = Challenges.getplugin(); + + Challenges chall; + Coords_Command coco; + + @EventHandler + public void PlayerJoinEvent(PlayerJoinEvent e) { + Player p = e.getPlayer(); + e.setJoinMessage("�6" + p.getName() + " �chat den Server betreten!"); + if (chl.getConfig().getBoolean("sharedmg") == true) { + int rnd = new Random().nextInt(Bukkit.getOnlinePlayers().size()); + Player rp = (Player) Bukkit.getServer().getOnlinePlayers().toArray()[rnd]; + p.setHealth(rp.getHealth()); + } + } + + @EventHandler + public void PlayerQuitEvent(PlayerQuitEvent e) { + Player p = e.getPlayer(); + e.setQuitMessage("�6" + p.getName() + " �chat den Server verlassen!"); + } + + @EventHandler + public void onBlockClick(PlayerInteractEvent e) { + if (e.getAction() == Action.RIGHT_CLICK_BLOCK) { + if (e.getClickedBlock().getType() == Material.CRAFTING_TABLE) { + if (chl.getConfig().getBoolean("craftingtable") == false) { + e.setCancelled(true); + } + } + } + } + + @EventHandler + public void onEntityClick(PlayerInteractEntityEvent e) { + if (e.getRightClicked().getType() == EntityType.VILLAGER) { + if (chl.getConfig().getBoolean("allowtrading") == false) { + e.setCancelled(true); + } + } + } + + @EventHandler + public void onPlayerDeath(PlayerDeathEvent e) { + if (chl.getConfig().getBoolean("onelife") == true) { + chl.getConfig().set("timer.enabled", false); + chl.saveConfig(); + for (Player p : Bukkit.getOnlinePlayers()) { + p.setGameMode(GameMode.SPECTATOR); + } + chl.getServer().broadcastMessage(""); + chl.getServer().broadcastMessage(""); + e.setDeathMessage("�6" + e.getEntity().getName() + " �cist gestorben!"); + chl.getServer() + .broadcastMessage("�cDie Challenge wurde nach �6" + chl.getConfig().getInt("timer.hrs") + ":" + + chl.getConfig().getString("timer.min") + ":" + chl.getConfig().getString("timer.sek") + + " �cabgebrochen!"); + chl.getServer().broadcastMessage("�aSeed: �b" + Bukkit.getWorlds().get(0).getSeed()); + chl.getServer().broadcastMessage("�6Um alle wiederzubeleben benutze �c/revive ALL"); + } else { + e.setDeathMessage("�6" + e.getEntity().getName() + " �cist gestorben! �6(" + + e.getEntity().getWorld().getName() + " " + e.getEntity().getLocation().getBlockX() + " " + + e.getEntity().getLocation().getBlockY() + " " + e.getEntity().getLocation().getBlockZ() + "�c)"); + if (chl.getConfig().getBoolean("respawn") == false) { + Bukkit.getServer().broadcastMessage("�6Benutze �c/revive " + e.getEntity().getName() + + " [world] [x] [y] [z] �6um ihn wiederzubeleben!"); + } + } + } + + @EventHandler + public void onPlayerRespawn(PlayerRespawnEvent e) { + Player p = e.getPlayer(); + if (chl.getConfig().getBoolean("respawn") == false) { + e.getPlayer().sendTitle("�cDu bist gestorben!", "�4Du bist nun Zuschauer", 10, 80, 10); + Bukkit.getScheduler().scheduleSyncDelayedTask(chl, new Runnable() { + @Override + public void run() { + e.getPlayer().setGameMode(GameMode.SPECTATOR); + } + }, 1); + } + } + + @EventHandler + public void PlayerSneak(PlayerToggleSneakEvent e) { + Player p = (Player) e.getPlayer(); + if (!p.isSneaking()) { + if (chl.getConfig().getBoolean("damageonsneak") == true) { + p.damage(chl.getConfig().getDouble("sneakdmg")); + } + } + } + + @EventHandler + public void onDamage(EntityDamageEvent e) { + if (e.getEntity() instanceof Player) { + Player p = (Player) e.getEntity(); + String dmg = new DecimalFormat("#.##").format(e.getFinalDamage()); + if (e.getFinalDamage() > 0) { + if (e.getCause() == DamageCause.FALL) { + if (chl.getConfig().getBoolean("deathonfall") == true) { + if (chl.getConfig().getBoolean("dmginchat") == true) { + Bukkit.broadcastMessage("�6" + p.getName() + " �chat �4" + p.getHealth() + + " �cHP Schaden genommen durch �4" + e.getCause()); + } + Bukkit.getScheduler().scheduleSyncDelayedTask(chl, new Runnable() { + @Override + public void run() { + p.setHealth(0); + } + }, 1); + } else if (chl.getConfig().getBoolean("dmginchat") == true) { + Bukkit.broadcastMessage("�6" + p.getName() + " �chat �4" + dmg + + " �cHP Schaden genommen durch �4" + e.getCause()); + } + } else if (e.getCause() == DamageCause.CUSTOM) { + if (!p.isSneaking() && (chl.getConfig().getBoolean("dmginchat") == true)) { + Bukkit.broadcastMessage("�6" + p.getName() + " �chat �4" + chl.getConfig().getDouble("sneakdmg") + + " �cHP Schaden genommen durch �4SNEAKING"); + } + } else if (e.getCause() == DamageCause.ENTITY_ATTACK || e.getCause() == DamageCause.ENTITY_EXPLOSION) { + + } else if (chl.getConfig().getBoolean("dmginchat") == true) { + Bukkit.broadcastMessage( + "�6" + p.getName() + " �chat �4" + dmg + " �cHP Schaden genommen durch �4" + e.getCause()); + } + if (chl.getConfig().getBoolean("sharedmg") == true) { + for (Player pp : Bukkit.getOnlinePlayers()) { + if (pp != p) { + pp.setHealth(pp.getHealth() - e.getFinalDamage()); + } + } + } + } + } + } + + @EventHandler + public void onEntityDamage(EntityDamageByEntityEvent e) { + if ((e.getEntity() instanceof Player) && (e.getFinalDamage() > 0)) { + Player p = (Player) e.getEntity(); + String dmg = new DecimalFormat("#.##").format(e.getFinalDamage()); + if ((e.getCause() == DamageCause.ENTITY_ATTACK || e.getCause() == DamageCause.ENTITY_EXPLOSION) + && chl.getConfig().getBoolean("dmginchat") == true) { + Bukkit.broadcastMessage("�6" + p.getName() + " �chat �4" + dmg + " �cHP Schaden genommen durch �4" + + e.getDamager().getName()); + } + } + } + + @EventHandler + public void DragonDeath(EntityDeathEvent e) { + if (e.getEntity() instanceof EnderDragon) { + chl.getConfig().set("timer.enabled", false); + chl.getServer().broadcastMessage("�6�kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"); + chl.getServer().broadcastMessage(""); + chl.getServer().broadcastMessage("�dGRATULATION! IHR HABT DIE CHALLENGE ERFOLGREICH ABGESCHLOSSEN!"); + chl.getServer().broadcastMessage("�aBen�tigte Zeit: �b" + chl.getConfig().getInt("timer.hrs") + ":" + + chl.getConfig().getString("timer.min") + ":" + chl.getConfig().getString("timer.sek")); + chl.getServer().broadcastMessage("�aSeed: �b" + Bukkit.getWorlds().get(0).getSeed()); + chl.getServer().broadcastMessage(""); + chl.getServer().broadcastMessage("�6�kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"); + } + } + + @EventHandler + public void InvClick(InventoryClickEvent e) { + World wld = Bukkit.getWorlds().get(0); + World nth = Bukkit.getWorlds().get(1); + World end = Bukkit.getWorlds().get(2); + String invname = e.getView().getTitle(); + Player p = (Player) e.getWhoClicked(); + int slot = e.getRawSlot(); + if (invname.equals(chall.GUIName)) { + e.setCancelled(true); + if (p.hasPermission("challenges.settings.modify")) { + switch (slot) { + case 18: + chl.getConfig().set("craftingtable", !(chl.getConfig().getBoolean("craftingtable"))); + break; + case 19: + chl.getConfig().set("allowtrading", !(chl.getConfig().getBoolean("allowtrading"))); + break; + case 20: + chl.getConfig().set("deathonfall", !(chl.getConfig().getBoolean("deathonfall"))); + break; + case 21: + chl.getConfig().set("damageonsneak", !(chl.getConfig().getBoolean("damageonsneak"))); + break; + case 23: + chl.getConfig().set("sharedmg", !(chl.getConfig().getBoolean("sharedmg"))); + break; + case 24: + chl.getConfig().set("respawn", !(chl.getConfig().getBoolean("respawn"))); + break; + case 25: + chl.getConfig().set("onelife", !(chl.getConfig().getBoolean("onelife"))); + break; + case 26: + chl.getConfig().set("dmginchat", !(chl.getConfig().getBoolean("dmginchat"))); + break; + case 37: + if (wld.getGameRuleValue("keepInventory").equals("true")) { + wld.setGameRuleValue("keepInventory", "false"); + nth.setGameRuleValue("keepInventory", "false"); + end.setGameRuleValue("keepInventory", "false"); + } else if (wld.getGameRuleValue("keepInventory").equals("false")) { + wld.setGameRuleValue("keepInventory", "true"); + nth.setGameRuleValue("keepInventory", "true"); + end.setGameRuleValue("keepInventory", "true"); + } + break; + case 43: + if (wld.getGameRuleValue("naturalRegeneration").equals("true")) { + wld.setGameRuleValue("naturalRegeneration", "false"); + nth.setGameRuleValue("naturalRegeneration", "false"); + end.setGameRuleValue("naturalRegeneration", "false"); + } else if (wld.getGameRuleValue("naturalRegeneration").equals("false")) { + wld.setGameRuleValue("naturalRegeneration", "true"); + nth.setGameRuleValue("naturalRegeneration", "true"); + end.setGameRuleValue("naturalRegeneration", "true"); + } + break; + default: + break; + } + chl.saveConfig(); + p.performCommand("settings"); + } + } + if (invname.equals(coco.CGUIN)) { + e.setCancelled(true); + if (slot >= 0 && slot <= 44) { + if (coco.CoordsGUI.getItem(slot) != null && p.hasPermission("challenges.coords.delete")) { + p.performCommand("coords delete " + e.getCurrentItem().getItemMeta().getDisplayName()); + } + } + } + if (invname.equals(coco.CDGUIN)) { + e.setCancelled(true); + if (slot == 0) { + String cname = coco.CoordsDeleteGUI.getItem(4).getItemMeta().getDisplayName(); + chl.getConfig().set("Saved_Locations." + cname, null); + chl.saveConfig(); + p.sendMessage("�cPosition �6" + cname + " �cwurde gel�scht!"); + p.closeInventory(); + } + if (slot == 8) { + p.performCommand("coords"); + } + } + } +} diff --git a/src/main/java/net/brennholz/challenges/HP_Command.java b/src/main/java/net/brennholz/challenges/HP_Command.java new file mode 100644 index 0000000..292e678 --- /dev/null +++ b/src/main/java/net/brennholz/challenges/HP_Command.java @@ -0,0 +1,96 @@ +package net.brennholz.challenges; + + + +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class HP_Command implements CommandExecutor { + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String lable, String[] args) { + if (sender.hasPermission("challenges.hp.modify")) { + if (args.length >= 2) { + if (args[0].equalsIgnoreCase("max")) { + if (Double.parseDouble(args[1]) > 0) { + for (Player pp : Bukkit.getOnlinePlayers()) { + pp.setMaxHealth(Double.parseDouble(args[1])); + pp.setHealth(pp.getMaxHealth()); + } + sender.sendMessage("�6Du hast die maximalen HP auf �c" + args[1] + " �6gesetzt!"); + } + } else if (args[0].equalsIgnoreCase("get")) { + OfflinePlayer other = (Bukkit.getServer().getOfflinePlayer(args[1])); + if (other.isOnline()) { + Player p = (Player) other; + sender.sendMessage("�6" + p.getName() + " �ebesitzt derzeit �6" + p.getHealth() + "HP�e!"); + } else + sender.sendMessage("�cDieser Spieler ist nicht online!"); + } else if (args.length >= 3) { + OfflinePlayer other = (Bukkit.getServer().getOfflinePlayer(args[1])); + if (other.isOnline()) { + Player p = (Player) other; + double finaladdhp = p.getHealth() + Double.parseDouble(args[2]); + double finalremhp = p.getHealth() - Double.parseDouble(args[2]); + if (args[0].equalsIgnoreCase("add")) { + if (!(finaladdhp > p.getMaxHealth()) && !(finaladdhp < 0)) { + p.setHealth(finaladdhp); + p.sendMessage("�aDu wurdest von �b" + sender.getName() + " �aum �c" + args[2] + + "HP �ageheilt!"); + sender.sendMessage( + "�aDu hast �b" + p.getName() + " �aum �c" + args[2] + "HP �ageheilt!"); + } else + sender.sendMessage("�cUnm�gliche Operation"); + } + if (args[0].equalsIgnoreCase("remove")) { + if (!(finalremhp > p.getMaxHealth()) && !(finalremhp < 0)) { + p.setHealth(finalremhp); + p.sendMessage("�4" + sender.getName() + " �chat dir �4" + args[2] + "HP �centfernt!"); + sender.sendMessage("�cDu hast �4" + p.getName() + " " + args[2] + "HP �centfernt!"); + } else + sender.sendMessage("�cUnm�gliche Operation!"); + } + if (args[0].equalsIgnoreCase("set")) { + if (!(Double.parseDouble(args[2]) > p.getMaxHealth()) + && !(Double.parseDouble(args[2]) < 0)) { + p.setHealth(Double.parseDouble(args[2])); + p.sendMessage( + "�6" + sender.getName() + " �ehat deine HP auf �6" + args[2] + " �egesetzt!"); + sender.sendMessage("�eDu hast die HP von �6" + p.getName() + " �eauf �6" + args[2] + + " �egesetzt!"); + } else + sender.sendMessage("�cUnm�gliche Operation"); + } + } else + sender.sendMessage("�cDieser Spieler ist nicht online!"); + } else { + sender.sendMessage("�c~~~~~ �6HP command �c~~~~~"); + sender.sendMessage("�c/HP Get �4- �6Erhalte die aktuelen HP eines Spielers"); + sender.sendMessage( + "�c/HP Add �4- �6F�ge einem Spieler die angegebene Zahl an Herzen hinzu"); + sender.sendMessage( + "�c/HP Remove �4- �6Entferne einem Spieler die angegebene Zahl an Herzen"); + sender.sendMessage( + "�c/HP Set �4- �6Setze die Herzen eines Spieler auf die angegebene Zahl"); + sender.sendMessage("�c/HP Max �4- �6Setze die maximalen HP aller Spieler"); + } + } else { + sender.sendMessage("�c~~~~~ �6HP command �c~~~~~"); + sender.sendMessage("�c/HP Get �4- �6Erhalte die aktuelen HP eines Spielers"); + sender.sendMessage( + "�c/HP Add �4- �6F�ge einem Spieler die angegebene Zahl an Herzen hinzu"); + sender.sendMessage( + "�c/HP Remove �4- �6Entferne einem Spieler die angegebene Zahl an Herzen"); + sender.sendMessage( + "�c/HP Set �4- �6Setze die Herzen eines Spieler auf die angegebene Zahl"); + sender.sendMessage("�c/HP Max �4- �6Setze die maximalen HP aller Spieler"); + } + } else + sender.sendMessage("�cDu hast hierf�r keine Berechtigung"); + return true; + } +} diff --git a/src/main/java/net/brennholz/challenges/ReflectionUtil.java b/src/main/java/net/brennholz/challenges/ReflectionUtil.java new file mode 100644 index 0000000..4b6b875 --- /dev/null +++ b/src/main/java/net/brennholz/challenges/ReflectionUtil.java @@ -0,0 +1,34 @@ +package net.brennholz.challenges; + + + +import lombok.Getter; +import org.bukkit.Bukkit; + +public class ReflectionUtil { + + private static String packet = Bukkit.getServer().getClass().getPackage().getName(); + @Getter + private static String NMSVersion = packet.substring(packet.lastIndexOf('.') + 1); + + public static Class getClassbyName(String ClassName) { + try { + if (ClassName.equals("ChatSerializer") && !NMSVersion.equals("v1_8_R1")) { + ClassName = "IChatBaseComponent$ChatSerializer"; + } + return Class.forName("net.minecraft.server." + NMSVersion + "." + ClassName); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static Class getCBClass(String className) { + try { + return Class.forName("org.bukkit.craftbukkit." + NMSVersion + "." + className); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/src/main/java/net/brennholz/challenges/Reset_Command.java b/src/main/java/net/brennholz/challenges/Reset_Command.java new file mode 100644 index 0000000..f3f7baf --- /dev/null +++ b/src/main/java/net/brennholz/challenges/Reset_Command.java @@ -0,0 +1,46 @@ +package net.brennholz.challenges; + + + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.command.ConsoleCommandSender; +import org.bukkit.entity.Player; + +public class Reset_Command implements CommandExecutor { + + private Challenges chl = Challenges.getplugin(); + Backpack backpack; + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { + for (Player p : Bukkit.getOnlinePlayers()) { + p.sendTitle("�cWelt wird zur�ckgesetzt!", "�6Du wirst nun gekickt!", 10, 60, 10); + } + chl.getConfig().set("World_Name", Bukkit.getWorlds().get(0).getName()); + chl.getConfig().set("World_Reset", true); + chl.getConfig().set("timer.enabled", false); + chl.getConfig().set("timer.time", 0); + chl.getConfig().set("timer.sek", "00"); + chl.getConfig().set("timer.min", "00"); + chl.getConfig().set("timer.hrs", 0); + for (String key : chl.getConfig().getConfigurationSection("Saved_Locations").getKeys(false)) { + chl.getConfig().set("Saved_Locations." + key, null); + } + chl.saveConfig(); + + Bukkit.getScheduler().scheduleSyncDelayedTask(chl, new Runnable() { + @Override + public void run() { + for (Player p : Bukkit.getOnlinePlayers()) { + p.kickPlayer("�cWelt wird zur�ckgesetzt! \n Bitte warte einen Moment..."); + } + ConsoleCommandSender console = Bukkit.getServer().getConsoleSender(); + Bukkit.dispatchCommand(console, "restart"); + } + }, 60); + return true; + } +} diff --git a/src/main/java/net/brennholz/challenges/Revive_Command.java b/src/main/java/net/brennholz/challenges/Revive_Command.java new file mode 100644 index 0000000..e7a34c7 --- /dev/null +++ b/src/main/java/net/brennholz/challenges/Revive_Command.java @@ -0,0 +1,72 @@ +package net.brennholz.challenges; + + + +import org.bukkit.Bukkit; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.OfflinePlayer; +import org.bukkit.World; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class Revive_Command implements CommandExecutor { + + private Challenges chl = Challenges.getplugin(); + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String lable, String[] args) { + if (sender.hasPermission("challenges.revive")) { + if (args.length == 1) { + if (args[0].equalsIgnoreCase("all")) { + for (Player p : Bukkit.getOnlinePlayers()) { + p.setHealth(p.getMaxHealth()); + p.setGameMode(GameMode.SURVIVAL); + } + chl.getServer().broadcastMessage("�bAlle Spieler wurden wiederbelebt! �aEs kann weiter gehen!"); + } else { + OfflinePlayer other = (Bukkit.getServer().getOfflinePlayer(args[0])); + if (other.isOnline()) { + Player p = (Player) other; + p.setHealth(p.getMaxHealth()); + p.setGameMode(GameMode.SURVIVAL); + chl.getServer().broadcastMessage( + "�b" + p.getName() + " �awurde von �b" + sender.getName() + " �awiederbelebt!"); + } else + sender.sendMessage("�cDieser Spieler ist nicht online!"); + } + } else if (args.length >= 4) { + World w = Bukkit.getWorld(args[1]); + double x = Double.parseDouble(args[2]); + double y = Double.parseDouble(args[3]); + double z = Double.parseDouble(args[4]); + Location loc = new Location(w, x, y, z); + if (args[0].equalsIgnoreCase("all")) { + for (Player p : Bukkit.getOnlinePlayers()) { + p.teleport(loc); + p.setHealth(p.getMaxHealth()); + p.setGameMode(GameMode.SURVIVAL); + } + chl.getServer().broadcastMessage("�bAlle Spieler wurden bei �c" + w.getName() + " " + x + " " + y + + " " + z + " �bwiederbelebt! �aEs kann weiter gehen!"); + } else { + OfflinePlayer other = (Bukkit.getServer().getOfflinePlayer(args[0])); + if (other.isOnline()) { + Player p = (Player) other; + p.teleport(loc); + p.setHealth(p.getMaxHealth()); + p.setGameMode(GameMode.SURVIVAL); + chl.getServer().broadcastMessage("�b" + p.getName() + " �awurde von �b" + sender.getName() + + " �abei �c" + w.getName() + " " + x + " " + y + " " + z + " �awiederbelebt!"); + } else + sender.sendMessage("�cDieser Spieler ist nicht online!"); + } + } else + sender.sendMessage("�cBenutze: /revive [world] [x] [y] [z]"); + } else + sender.sendMessage("�cDu hast hierf�r keine Berechtigung"); + return true; + } +} diff --git a/src/main/java/net/brennholz/challenges/Timer_Command.java b/src/main/java/net/brennholz/challenges/Timer_Command.java new file mode 100644 index 0000000..721ca92 --- /dev/null +++ b/src/main/java/net/brennholz/challenges/Timer_Command.java @@ -0,0 +1,124 @@ +package net.brennholz.challenges; + + + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class Timer_Command implements CommandExecutor { + + private Challenges chl = Challenges.getplugin(); + public boolean timer; + private int zeit = chl.getConfig().getInt("timer.time"); + private int sek; + private int min; + private int hrs; + private String ssek; + private String smin; + + @Override + public boolean onCommand(CommandSender sender, Command cmd, String lable, String[] args) { + timer = chl.getConfig().getBoolean("timer.enabled"); + if (sender.hasPermission("challenges.timer")) { + if (args.length >= 1) { + if (args[0].equalsIgnoreCase("resume")) { + if (timer == false) { + timer = true; + chl.getServer().broadcastMessage("�aDer Timer wird fortgesetzt!"); + chl.getConfig().set("timer.enabled", timer); + chl.saveConfig(); + } else + sender.sendMessage("�cDer Timer l�uft bereits!"); + } else if (args[0].equalsIgnoreCase("pause")) { + if (timer == true) { + timer = false; + chl.getServer().broadcastMessage("�6Der Timer wurde angehalten"); + chl.getConfig().set("timer.enabled", timer); + chl.saveConfig(); + } else + sender.sendMessage("�cDer Timer ist bereits pausiert!"); + } else if (args[0].equalsIgnoreCase("reset")) { + timer = false; + chl.getConfig().set("timer.enabled", timer); + chl.saveConfig(); + zeit = 0; + sek = 0; + min = 0; + hrs = 0; + RefreshConfig(); + chl.getServer().broadcastMessage("�cDer Timer wurde zur�ckgesetzt!"); + } else if (args.length >= 2) { + if (args[0].equalsIgnoreCase("set")) { + timer = false; + chl.getConfig().set("timer.enabled", timer); + chl.saveConfig(); + zeit = Integer.parseInt(args[1]); + RefreshConfig(); + chl.getServer().broadcastMessage( + "�bDer Timer wurde auf �a" + hrs + ":" + smin + ":" + ssek + " �bgesetzt!"); + } + } else + sender.sendMessage("�cBenutze: /timer resume/pause/reset/set [Zeit in Sekunden]"); + } else { + sender.sendMessage("�c~~~~~ �6Timer command �c~~~~~"); + sender.sendMessage("�c/timer resume �4- �6Setze den Timer fort"); + sender.sendMessage("�c/timer pause �4- �6Pausiere den Timer"); + sender.sendMessage("�c/timer reset �4- �6Setze den Timer zur�ck"); + sender.sendMessage("�c/timer set [Zeit in Sekunden] �4- �6Setze den Timer auf eine bestimmte Zeit"); + } + } else + sender.sendMessage("�cDu hast hierf�r keine Berechtigung"); + return true; + + } + + @SuppressWarnings("deprecation") + public void Run_Timer() { + Bukkit.getScheduler().scheduleAsyncRepeatingTask(chl, new Runnable() { + @Override + public void run() { + boolean ttimer = chl.getConfig().getBoolean("timer.enabled"); + int ttime = chl.getConfig().getInt("timer.time"); + int thrs = chl.getConfig().getInt("timer.hrs"); + String tsek = chl.getConfig().getString("timer.sek"); + String tmin = chl.getConfig().getString("timer.min"); + if (ttimer) { + ttime = ttime + 1; + zeit = ttime; + RefreshConfig(); + for (Player p : chl.getServer().getOnlinePlayers()) { + Actionbar.sendActionBarMessage(p, "�aIn Challenge: �b" + thrs + ":" + tmin + ":" + tsek); + } + } else { + for (Player p : chl.getServer().getOnlinePlayers()) { + Actionbar.sendActionBarMessage(p, "�6Timer pausiert..."); + } + } + } + }, 1 * 20L, 1 * 20L); + } + + public void RefreshConfig() { + min = zeit / 60; + hrs = min / 60; + min = min % 60; + sek = zeit % 60; + if (sek >= 10) { + ssek = Integer.toString(sek); + } else + ssek = '0' + Integer.toString(sek); + if (min >= 10) { + smin = Integer.toString(min); + } else + smin = '0' + Integer.toString(min); + chl.getConfig().set("timer.time", zeit); + chl.getConfig().set("timer.sek", ssek); + chl.getConfig().set("timer.min", smin); + chl.getConfig().set("timer.hrs", hrs); + chl.saveConfig(); + } + +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml new file mode 100644 index 0000000..c49869d --- /dev/null +++ b/src/main/resources/config.yml @@ -0,0 +1,31 @@ +#Erlaube Spielern eine Werkbank zu benutzen +craftingtable: true +#Erlaube Spielern mit Dorfbewohnern zu handeln +allowtrading: true +#Wenn "true" stirbt ein Spieler sobald er Fallschaden erh�lt +deathonfall: false +#Wenn "true" erh�lt ein Spieler Schaden wenn er Schleicht +damageonsneak: false +#Verwalte wie viel Schaden ein Spieler beim Schleichen bekommen soll +#1 = 0.5 Herzen ; 2 = 1 Herz ; ... +#Soll ein Spieler beim Schleichen sterben, setze den Schaden auf die Maximalzahl an Spielerleben +sneakdmg: 2 +#Alle Spieler bekommen Schaden sobald ein Spieler Schaden bekommt +sharedmg: false +#Erlaube Spielern das Respawnen +respawn: true +#Ein Leben f�r alle. Stirbt ein Spieler, wird die Challenge abgebrochen +onelife: false +#Wenn "true" wird im Chat angezeigt, sobald ein Spieler Schaden erh�lt +dmginchat: false +timer: + enabled: false + time: 0 + sek: '00' + min: '00' + hrs: 0 +Saved_Locations: {} + +#Nicht ver�ndern! Der Server benutzt diesen Wert zum Welt-Reset! +World_Name: world +World_Reset: false \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml new file mode 100644 index 0000000..0c9ec1c --- /dev/null +++ b/src/main/resources/plugin.yml @@ -0,0 +1,87 @@ +name: Challenges +main: net.brennholz.challenges.Challenges +version: 1.9 +api-version: 1.13 +load: STARTUP +author: Brennholz3000 +commands: + hp: + description: Verwalte die HP eines Spielers + usage: Benutze /hp get/add/remove/set/max [Spieler] [Wert] + permission: challenges.hp + coords: + description: Teile oder speichere deine Position! + usage: Benutze /coords share/get/save/delete [Name] + permission: challenges.coords + settings: + description: Verwalte die Plugineinstellungen + usage: Benutze /settings Get/Crafting/Trading/DeathFall/DMGOnSneak/Respawn/OneLife/ChatDMG [True/False] + permission: challenges.settings + revive: + description: Wiederbelebe einen gestorbenen Spieler! + usage: Benutze /revive [world] [x] [y] [z] + permission: challenges.revive + timer: + description: Verwalte den Timer + usage: Benutze /timer resume/pause/reset/set [Zeit in Sekunden] + permission: challenges.timer + challenges: + description: Main Command + usage: Benutze /Challenges + permission: challenges.challenges + backpack: + description: Oeffne ein Backpack + usage: Benutze /backpack oder /bp + permission: challenges.backpack + aliases: [bp] + reset: + description: Setzte die Welt zurueck + usage: Benutze /Reset + permission: challenges.reset + +permissions: + challenges.*: + description: Voller Zugriff auf das Challenge Plugin + default: op + children: + challenges.hp: true + challenges.coords: true + challenges.settings: true + challenges.revive: true + challenges.timer: true + challenges.challenges: true + challenges.reset: true + challenges.hp: + description: Verwalte die HP eines Spielers + default: op + challenges.coords: + description: Teile oder speichere deine Position! + default: op + children: + challenges.coords.view: true + challenges.coords.share: true + challenges.coords.get: true + challenges.coords.save: true + challenges.coords.delete: true + challenges.settings: + description: Verwalte die Plugineinstellungen + default: op + children: + challenges.settings.view: true + challenges.settings.get: true + challenges.settings.modify: true + challenges.revive: + description: Wiederbelebe einen gestorbenen Spieler! + default: op + challenges.timer: + description: Verwalte den Timer + default: op + challenges.challenges: + description: Main Command + default: op + challenges.backpack: + description: Oeffne ein Backpack + default: op + challenges.reset: + description: Setze die Welt zurueck + default: op \ No newline at end of file