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;
}
@SuppressWarnings("static-access")
@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.RED_DYE);
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.RED_DYE);
}
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<String> metalore = new ArrayList<String>();
if (lore != null) {
for (String lorecomments : lore) {
metalore.add(lorecomments);
}
}
meta.setLore(metalore);
item.setItemMeta(meta);
return item;
}
}