diff --git a/src/main/java/de/fanta/challenges/Challenges.java b/src/main/java/de/fanta/challenges/Challenges.java index c2db8fd..5b19fd4 100644 --- a/src/main/java/de/fanta/challenges/Challenges.java +++ b/src/main/java/de/fanta/challenges/Challenges.java @@ -27,14 +27,11 @@ import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.plugin.java.JavaPlugin; import java.io.File; import java.io.IOException; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.Random; import java.util.UUID; @@ -75,6 +72,12 @@ private int protocolVersion; + public FileConfiguration ItemConfig; + public File ItemConfigFile; + + private static ArrayList not_available_materials = new ArrayList<>(); + private static ArrayList materials = new ArrayList<>(); + public static Challenges getPlugin() { return plugin; } @@ -96,6 +99,7 @@ saveDefaultConfig(); reloadConfig(); createServerConfig(); + createItemConfig(); serverType = ServerType.valueOf(getServerConfig().getString("servertype")); @@ -183,6 +187,16 @@ if (getConfig().getBoolean("allitems")) { AllItemsChallenge.start(); } + for (String string : getItemConfig().getStringList("items")) { + Material material = Material.valueOf(string); + not_available_materials.add(material); + } + + for (Material material : Material.values()) { + if (material.isItem() && !material.isAir()) { + materials.add(material); + } + } Bukkit.getScheduler().scheduleSyncDelayedTask(this, () -> { EventRegistration.pM.callEvent(new ServerStatusChangedEvent(true)); @@ -301,6 +315,23 @@ } } + public FileConfiguration getItemConfig() { + return ItemConfig; + } + private void createItemConfig() { + ItemConfigFile = new File(getDataFolder(), "items.yml"); + if (!ItemConfigFile.exists()) { + ItemConfigFile.getParentFile().mkdirs(); + saveResource("items.yml", false); + } + this.ItemConfig = new YamlConfiguration(); + try { + ItemConfig.load(ItemConfigFile); + } catch (IOException | org.bukkit.configuration.InvalidConfigurationException e) { + e.printStackTrace(); + } + } + public ScoreBoardManager getSBManager() { return this.sbManager; } @@ -437,4 +468,12 @@ public int getProtocolVersion() { return protocolVersion; } + + public ArrayList getNotAvailableMaterials() { + return not_available_materials; + } + + public ArrayList getMaterials() { + return materials; + } } diff --git a/src/main/java/de/fanta/challenges/commands/CommandRegistration.java b/src/main/java/de/fanta/challenges/commands/CommandRegistration.java index 682a802..e132f42 100644 --- a/src/main/java/de/fanta/challenges/commands/CommandRegistration.java +++ b/src/main/java/de/fanta/challenges/commands/CommandRegistration.java @@ -10,6 +10,7 @@ import de.fanta.challenges.commands.challenges.ChallengesSaveCommand; import de.fanta.challenges.commands.challenges.ChallengesSpeedCommand; import de.fanta.challenges.commands.challenges.TeleportCommand; +import de.fanta.challenges.commands.challenges.CheckItemsCommand; import de.fanta.challenges.commands.coords.CoordsCommand; import de.fanta.challenges.commands.coords.CoordsDeleteCommand; import de.fanta.challenges.commands.coords.CoordsGetCommand; @@ -57,6 +58,7 @@ challengesRouter.addCommandMapping(new ChallengesSpeedCommand(), "speed"); challengesRouter.addCommandMapping(new TeleportCommand(plugin), "tp"); challengesRouter.addCommandMapping(new ChallengeMaxPlayersCommand(), "maxplayer"); + challengesRouter.addCommandMapping(new CheckItemsCommand(), "checkitems"); CommandRouter resetRouter = new CommandRouter(plugin.getCommand("reset")); resetRouter.addCommandMapping(new ResetCommand(plugin)); diff --git a/src/main/java/de/fanta/challenges/commands/challenges/CheckItemsCommand.java b/src/main/java/de/fanta/challenges/commands/challenges/CheckItemsCommand.java new file mode 100644 index 0000000..6f69396 --- /dev/null +++ b/src/main/java/de/fanta/challenges/commands/challenges/CheckItemsCommand.java @@ -0,0 +1,28 @@ +package de.fanta.challenges.commands.challenges; + +import de.fanta.challenges.guis.CheckItemsGUI; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class CheckItemsCommand extends SubCommand { + + public CheckItemsCommand() { + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player player)) { + return true; + } + CheckItemsGUI.createCheckItemGUI(player); + return true; + } + + @Override + public String getRequiredPermission() { + return "challenges.temp"; + } +} diff --git a/src/main/java/de/fanta/challenges/guis/CheckItemsGUI.java b/src/main/java/de/fanta/challenges/guis/CheckItemsGUI.java new file mode 100644 index 0000000..99d1f24 --- /dev/null +++ b/src/main/java/de/fanta/challenges/guis/CheckItemsGUI.java @@ -0,0 +1,94 @@ +package de.fanta.challenges.guis; + +import de.fanta.challenges.Challenges; +import de.fanta.challenges.utils.ChatUtil; +import de.fanta.challenges.utils.guiutils.GUIUtils; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryType; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +import java.io.IOException; +import java.util.List; + +public class CheckItemsGUI implements Listener { + private static final Challenges plugin = Challenges.getPlugin(); + + private static final int JA_INDEX = 0; + private static final int ITEM_INDEX = 2; + private static final int NEIN_INDEX = 4; + + public static final int INVENTORY_SIZE = 5; + public static Inventory TEMP_GUI; + + public static void createCheckItemGUI(Player p) { + if (plugin.getMaterials().isEmpty()) { + p.closeInventory(); + ChatUtil.sendNormalMessage(p, "Lol fertig :>"); + return; + } + TEMP_GUI = Bukkit.createInventory(null, InventoryType.HOPPER, plugin.getGUIPREFIX() + " >> geht das?? (" + plugin.getMaterials().size() + ")"); + ItemStack stack = new ItemStack(plugin.getMaterials().get(0)); + try { + TEMP_GUI.setItem(JA_INDEX, GUIUtils.createGuiItem(Material.LIME_CONCRETE, "Ja",true)); + + Bukkit.getLogger().info("" + stack); + TEMP_GUI.setItem(ITEM_INDEX, GUIUtils.createGuiItem(stack.getType(), stack.getI18NDisplayName(),false)); + TEMP_GUI.setItem(NEIN_INDEX, GUIUtils.createGuiItem(Material.RED_CONCRETE, "Nein",true)); + for (int i = 0; i < INVENTORY_SIZE; i++) { + ItemStack item = TEMP_GUI.getItem(i); + if (item == null || item.getType() == Material.AIR) { + TEMP_GUI.setItem(i, GUIUtils.EMPTY_ICON); + } + } + p.openInventory(TEMP_GUI); + } catch (Exception e) { + Bukkit.getLogger().info("Skip " + stack); + plugin.getMaterials().remove(stack.getType()); + addItem(stack.getType()); + createCheckItemGUI(p); + } + + + } + + @EventHandler + public void onInventoryClick(InventoryClickEvent e) { + int slot = e.getRawSlot(); + Player player = (Player) e.getWhoClicked(); + if (TEMP_GUI.equals(e.getClickedInventory())) { + if (slot == JA_INDEX) { + plugin.getMaterials().remove(e.getClickedInventory().getItem(ITEM_INDEX).getType()); + player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1.0F, 2.0F); + createCheckItemGUI(player); + } + if (slot == NEIN_INDEX) { + Material material = e.getClickedInventory().getItem(ITEM_INDEX).getType(); + addItem(material); + plugin.getMaterials().remove(material); + player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_BASS, 1.0F, 2.0F); + createCheckItemGUI(player); + } + e.setCancelled(true); + } + } + + public static void addItem(Material material) { + FileConfiguration config = Challenges.getPlugin().getItemConfig(); + List list = config.getStringList("items"); + list.add(material.name()); + config.set("items", list); + try { + Challenges.getPlugin().ItemConfig.save(Challenges.getPlugin().ItemConfigFile); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/de/fanta/challenges/listeners/EventRegistration.java b/src/main/java/de/fanta/challenges/listeners/EventRegistration.java index c4ac625..fd93065 100644 --- a/src/main/java/de/fanta/challenges/listeners/EventRegistration.java +++ b/src/main/java/de/fanta/challenges/listeners/EventRegistration.java @@ -3,6 +3,7 @@ import de.fanta.challenges.Challenges; import de.fanta.challenges.challenges.*; import de.fanta.challenges.gravestones.GravestoneListener; +import de.fanta.challenges.guis.CheckItemsGUI; import de.fanta.challenges.guis.coordsgui.CoordsDeleteGUI; import de.fanta.challenges.guis.coordsgui.CoordsGUI; import de.fanta.challenges.guis.ResetGui; @@ -78,5 +79,7 @@ pM.registerEvents(new WorldBorderLevelChallenge(), plugin); pM.registerEvents(new SammelFieberChallengeEvent(), plugin); pM.registerEvents(new OreBattle(), plugin); + + pM.registerEvents(new CheckItemsGUI(), plugin); } } diff --git a/src/main/resources/items.yml b/src/main/resources/items.yml new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/main/resources/items.yml