Newer
Older
ChallengeSystem / src / main / java / net / brennholz / challenges / Challenges.java
package net.brennholz.challenges;

import net.brennholz.commands.Challenges_Command;
import net.brennholz.commands.Coords_Command;
import net.brennholz.commands.HP_Command;
import net.brennholz.commands.Reset_Command;
import net.brennholz.commands.Revive_Command;
import net.brennholz.commands.Settings_Command;
import net.brennholz.commands.Timer_Command;
import net.brennholz.events.BlockCreateListener;
import net.brennholz.events.BlockDestroyListener;
import net.brennholz.events.DamageListener;
import net.brennholz.events.DeathListener;
import net.brennholz.events.InteractListener;
import net.brennholz.events.InventoryClickListener;
import net.brennholz.events.QuitJoinListener;
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.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.Plugin;
import org.bukkit.plugin.java.JavaPlugin;

import com.google.common.io.MoreFiles;
import com.google.common.io.RecursiveDeleteOption;

public class Challenges extends JavaPlugin {
  private static Challenges plugin;
  
  private File BackpackConfigFile;
  
  private FileConfiguration BackpackConfig;
  
  private File RndDropsConfigFile;
  
  private FileConfiguration RndDropsConfig;
  
  private Timer_Command Timer;
  
  private Backpack backpack;
  
  private SBManager sbManager;
  
  private RandomDrops rndDrops;
  
  public static Inventory SettingsGUI = Bukkit.createInventory(null, 45, "§6Settings");
  
  public static String GUIName = "§6Settings";
  
  public static Challenges getplugin() { return plugin; }
  
  
  public void onEnable() {
	    plugin = this;
	    this.Timer = new Timer_Command();
	    this.backpack = new Backpack();
	    this.rndDrops = new RandomDrops();
	    getCommand("hp").setExecutor(new HP_Command());
	    getCommand("settings").setExecutor(new Settings_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 InventoryClickListener(), (Plugin)this);
	    Bukkit.getPluginManager().registerEvents(new QuitJoinListener(), (Plugin)this);
	    Bukkit.getPluginManager().registerEvents(new BlockDestroyListener(), (Plugin)this);
	    Bukkit.getPluginManager().registerEvents(new BlockCreateListener(), (Plugin)this);
	    Bukkit.getPluginManager().registerEvents(new InteractListener(), (Plugin)this);
	    Bukkit.getPluginManager().registerEvents(new DamageListener(), (Plugin)this);
	    Bukkit.getPluginManager().registerEvents(new DeathListener(), (Plugin)this);
	    
	    saveDefaultConfig();
	    reloadConfig();
	    createRndDropsConfig();
	    createBackpackConfig();
	    if (getConfig().getBoolean("World_Reset")) {
	      getLogger().info("/Reset Command was executed!");
	      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(), new RecursiveDeleteOption[] { RecursiveDeleteOption.ALLOW_INSECURE });
	        MoreFiles.deleteRecursively(netherfolder.toPath(), new RecursiveDeleteOption[] { RecursiveDeleteOption.ALLOW_INSECURE });
	        MoreFiles.deleteRecursively(endfolder.toPath(), new RecursiveDeleteOption[] { RecursiveDeleteOption.ALLOW_INSECURE });
	        getLogger().info("World reset successful!");
	      } catch (IOException e) {
	        getLogger().info("World reset failed!");
	        e.printStackTrace();
	      } 
	      getConfig().set("World_Reset", Boolean.valueOf(false));
	      saveConfig();
	      this.backpack.clearConfig();
	      this.rndDrops.shuffleItems();
	      this.rndDrops.saveItems();
	      this.rndDrops.loadItems();
	    } else {
	      this.rndDrops.loadItems();
	    } 
	    this.backpack.loadInventoryFromConfig();
	    this.Timer.Run_Timer();
	    getLogger().info("Plugin loaded!");
	    this.sbManager = new SBManager();
	  }
  
  
  
  public void onDisable() {
    this.backpack.saveInventoryToConfig();
    try {
      this.BackpackConfig.save(this.BackpackConfigFile);
      this.RndDropsConfig.save(this.RndDropsConfigFile);
    } catch (IOException e) {
      e.printStackTrace();
    } 
    getLogger().info("Plugin unloaded");
  }
  
  public RandomDrops getRandomDropsManager() {
    return this.rndDrops;
  }
  
  public FileConfiguration getBackpackConfig() {
    return this.BackpackConfig;
  }
  
  private void createBackpackConfig() {
    this.BackpackConfigFile = new File(getDataFolder(), "backpack.yml");
    if (!this.BackpackConfigFile.exists()) {
      this.BackpackConfigFile.getParentFile().mkdirs();
      saveResource("backpack.yml", false);
    } 
    this.BackpackConfig = (FileConfiguration)new YamlConfiguration();
    try {
      this.BackpackConfig.load(this.BackpackConfigFile);
    } catch (IOException|org.bukkit.configuration.InvalidConfigurationException e) {
      e.printStackTrace();
    } 
  }
  
  public FileConfiguration getRndDropsConfig() {
    return this.RndDropsConfig;
  }
  
  private void createRndDropsConfig() {
    this.RndDropsConfigFile = new File(getDataFolder(), "rnddrops.yml");
    if (!this.RndDropsConfigFile.exists()) {
      this.RndDropsConfigFile.getParentFile().mkdirs();
      saveResource("rnddrops.yml", false);
    } 
    this.RndDropsConfig = (FileConfiguration)new YamlConfiguration();
    try {
      this.RndDropsConfig.load(this.RndDropsConfigFile);
    } catch (IOException|org.bukkit.configuration.InvalidConfigurationException e) {
      e.printStackTrace();
    } 
  }
  
 
  
  public void createGUI(Player p) {
	SettingsGUI.setItem(0, addGUIItem(Material.CRAFTING_TABLE, "§6Erlaube Crafting"));
	SettingsGUI.setItem(1, addGUIItem(Material.EMERALD, "§6Erlaube Handeln"));
	SettingsGUI.setItem(2, addGUIItem(Material.BONE, "§6Tod bei Fallschaden", "§cSpieler stirbt bei Fallschaden"));
	SettingsGUI.setItem(3, addGUIItem(Material.MAGMA_BLOCK, "§6Schaden bei Schleichen","§cSpieler erhält §6" + getConfig().getInt("sneakdmg") + " §cSchaden bei Schleichen"));
    SettingsGUI.setItem(4, addGUIItem(Material.DIAMOND_PICKAXE, "§6Drops", "§cRandom Drops"));
    SettingsGUI.setItem(5, addGUIItem(Material.GLISTERING_MELON_SLICE, "§6Geteilter Schaden","§cAlle Spieler erhalten den gleichen Schaden"));
	SettingsGUI.setItem(6, addGUIItem(Material.TOTEM_OF_UNDYING, "§6Respawn"));
	SettingsGUI.setItem(7, addGUIItem(Material.POPPY, "§6Ein Leben für alle", "§cStirbt ein Spieler ist die","§cChallenge fehlgeschlagen"));
	SettingsGUI.setItem(8, addGUIItem(Material.BOOK, "§6Schaden in Chat", "§cZeigt Spielerschaden im Chat an"));
	SettingsGUI.setItem(18, addGUIItem(Material.DIAMOND_BOOTS, "§6Tod bei Sprinten", "§cSpieler Stirbt beim Sprinten"));
	SettingsGUI.setItem(19, addGUIItem(Material.LEATHER_BOOTS, "§6Tod bei Springen", "§cSpieler Stirbt beim Springen"));
	SettingsGUI.setItem(20, addGUIItem(Material.BARRIER, "§6Inv Löschen bei DMG","§cLöscht das Inventar von allen wenn ein Spieler schaden bekommt!"));
	
	SettingsGUI.setItem(26, addGUIItem(Material.TNT, "§6Sterben durch TnT","§cTötet dich mit tnt bei der nicht Springen Schleichen und Jumpen Challenge"));
	
	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(9, addGUIItem(getDye("craftingtable"), getBool("craftingtable")));
	SettingsGUI.setItem(10, addGUIItem(getDye("allowtrading"), getBool("allowtrading")));
	SettingsGUI.setItem(11, addGUIItem(getDye("deathonfall"), getBool("deathonfall")));
	SettingsGUI.setItem(12, addGUIItem(getDye("damageonsneak"), getBool("damageonsneak")));
	SettingsGUI.setItem(13, addGUIItem(getDye("rnddrops"), getBool("rnddrops")));
	SettingsGUI.setItem(14, addGUIItem(getDye("sharedmg"), getBool("sharedmg")));
	SettingsGUI.setItem(15, addGUIItem(getDye("respawn"), getBool("respawn")));
	SettingsGUI.setItem(16, addGUIItem(getDye("onelife"), getBool("onelife")));
	SettingsGUI.setItem(17, addGUIItem(getDye("dmginchat"), getBool("dmginchat")));
	SettingsGUI.setItem(27, addGUIItem(getDye("deathonsprint"), getBool("deathonsprint")));
	SettingsGUI.setItem(28, addGUIItem(getDye("deathonjump"), getBool("deathonjump")));
	SettingsGUI.setItem(29, addGUIItem(getDye("clinvdmg"), getBool("clinvdmg")));
	
	SettingsGUI.setItem(35, addGUIItem(getDye("tntdeath"), getBool("tntdeath")));
	
	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.GRAY_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"; 
    return "§cFalse";
  }
  
  
  
  @SuppressWarnings("deprecation")
  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();
  }
  
  
  
  @SuppressWarnings("deprecation")
private String getgrBool(String gr) {
    World wld = Bukkit.getWorlds().get(0);
    if (wld.getGameRuleValue(gr).equals("true"))
      return "§aTrue"; 
    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<>();
    if (lore != null)
      for (String lorecomments : lore)
        metalore.add(lorecomments);  
    meta.setLore(metalore);
    item.setItemMeta(meta);
    return item;
  }
  
  public SBManager getSBManager() {
    return this.sbManager;
  }
}