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