From 0293cafacb6d17d09230d623c292cfceda987d44 Mon Sep 17 00:00:00 2001 From: Th3Shadowbroker Date: Sun, 6 Sep 2020 17:31:55 +0200 Subject: [PATCH 01/14] Implemented components for drop-system --- .../ouroboros/mines/drops/Drop.java | 65 ++++++++++ .../ouroboros/mines/drops/DropGroup.java | 99 +++++++++++++++ .../ouroboros/mines/drops/DropManager.java | 113 ++++++++++++++++++ 3 files changed, 277 insertions(+) create mode 100644 src/main/java/dev/th3shadowbroker/ouroboros/mines/drops/Drop.java create mode 100644 src/main/java/dev/th3shadowbroker/ouroboros/mines/drops/DropGroup.java create mode 100644 src/main/java/dev/th3shadowbroker/ouroboros/mines/drops/DropManager.java diff --git a/src/main/java/dev/th3shadowbroker/ouroboros/mines/drops/Drop.java b/src/main/java/dev/th3shadowbroker/ouroboros/mines/drops/Drop.java new file mode 100644 index 0000000..77b51d1 --- /dev/null +++ b/src/main/java/dev/th3shadowbroker/ouroboros/mines/drops/Drop.java @@ -0,0 +1,65 @@ +/* + * Copyright 2020 Jens Fischer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated + * documentation files (the "Software"), to deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of + * the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package dev.th3shadowbroker.ouroboros.mines.drops; + +import dev.th3shadowbroker.ouroboros.mines.util.Range; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.inventory.ItemStack; + +public class Drop { + + private final ItemStack itemStack; + + private final double dropChance; + + private final Range dropAmount; + + public Drop(ItemStack itemStack, double dropChance, Range dropAmount) { + this.itemStack = itemStack; + this.dropChance = dropChance; + this.dropAmount = dropAmount; + } + + public ItemStack getItemStack() { + return itemStack; + } + + public double getDropChance() { + return dropChance; + } + + public Range getDropAmount() { + return dropAmount; + } + + public ItemStack drawDropstack() { + ItemStack dropStack = itemStack.clone(); + dropStack.setAmount(dropAmount.isRange() ? dropAmount.getRandomWithin() : dropAmount.getMin()); + return dropStack; + } + + public static Drop fromSection(ConfigurationSection section) { + ItemStack itemStack = section.getItemStack("item"); + double dropChance = section.getDouble("chance", 1); + Range dropAmount = Range.fromString(section.getString("amount", "1")); + return new Drop(itemStack, dropChance, dropAmount); + } + +} diff --git a/src/main/java/dev/th3shadowbroker/ouroboros/mines/drops/DropGroup.java b/src/main/java/dev/th3shadowbroker/ouroboros/mines/drops/DropGroup.java new file mode 100644 index 0000000..0156280 --- /dev/null +++ b/src/main/java/dev/th3shadowbroker/ouroboros/mines/drops/DropGroup.java @@ -0,0 +1,99 @@ +/* + * Copyright 2020 Jens Fischer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated + * documentation files (the "Software"), to deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of + * the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package dev.th3shadowbroker.ouroboros.mines.drops; + +import org.bukkit.inventory.ItemStack; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class DropGroup { + + private final List drops; + + private final boolean multidrop; + + public DropGroup(List drops, boolean multidrop) { + this.drops = drops; + this.multidrop = multidrop; + } + + public boolean isValid() { + return multidrop || drops.stream().mapToDouble(Drop::getDropChance).sum() <= 1; + } + + public List getDrops() { + return drops; + } + + public boolean isMultidrop() { + return multidrop; + } + + private ItemStack[] drawMultidrop() { + final List drops = new ArrayList<>(); + this.drops.forEach( + drop -> { + + // Drop chance 100 or higher + if (drop.getDropChance() >= 1) { + drops.add(drop.drawDropstack()); + + // Drop chance below 100 + } else { + Random rnd = new Random(); + boolean shallDrop = ((double) rnd.nextInt(100) / 100) <= drop.getDropChance(); + if (shallDrop) { + drops.add(drop.drawDropstack()); + } + } + + } + ); + return drops.stream().toArray(ItemStack[]::new); + } + + private ItemStack[] drawSingledrop() { + ItemStack dropStack = null; + Random rnd = new Random(); + + double drawnChance = ((double) rnd.nextInt(100) / 100); + double offset = 0; + + for (Drop drop : drops) { + boolean shallDrop = drawnChance <= drop.getDropChance() + offset; + + if (shallDrop) { + dropStack = drop.drawDropstack(); + break; + } else { + offset += drop.getDropChance(); + } + } + + return dropStack == null ? new ItemStack[0] : new ItemStack[]{ dropStack }; + } + + public ItemStack[] drawDrops() { + return multidrop ? drawMultidrop() : drawSingledrop(); + } + +} diff --git a/src/main/java/dev/th3shadowbroker/ouroboros/mines/drops/DropManager.java b/src/main/java/dev/th3shadowbroker/ouroboros/mines/drops/DropManager.java new file mode 100644 index 0000000..b0c8d72 --- /dev/null +++ b/src/main/java/dev/th3shadowbroker/ouroboros/mines/drops/DropManager.java @@ -0,0 +1,113 @@ +/* + * Copyright 2020 Jens Fischer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated + * documentation files (the "Software"), to deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of + * the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package dev.th3shadowbroker.ouroboros.mines.drops; + +import dev.th3shadowbroker.ouroboros.mines.OuroborosMines; +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.inventory.ItemStack; + +import java.io.File; +import java.io.IOException; +import java.util.*; +import java.util.logging.Logger; + +public class DropManager { + + private final File file; + + private final FileConfiguration configuration; + + private final Map dropGroups; + + private final Logger log; + + public DropManager(File dropFile) { + this.dropGroups = new HashMap<>(); + this.file = dropFile; + this.log = OuroborosMines.INSTANCE.getLogger(); + if (!dropFile.exists()) { + try { + boolean dropFileCreated = dropFile.createNewFile(); + if (dropFileCreated) log.info("Drop file created."); + } catch (IOException ex) { + log.warning("Failed to create drop file!"); + } + } + this.configuration = YamlConfiguration.loadConfiguration(dropFile); + loadGroups(); + } + + private void loadGroups() { + log.info(String.format("Loading drops from %s", file.getAbsolutePath())); + + for (String groupName : configuration.getKeys(false)) { + ConfigurationSection groupSection = configuration.getConfigurationSection(groupName); + if (groupSection == null) continue; + + try { + ConfigurationSection dropSection = groupSection.getConfigurationSection("drops"); + boolean multidrop = groupSection.getBoolean("multidrop", false); + + final List drops = new ArrayList<>(); + dropSection.getKeys(false).forEach( key -> { + drops.add(Drop.fromSection(dropSection.getConfigurationSection(key))); + } ); + + dropGroups.put(groupName, new DropGroup(drops, multidrop)); + } catch (Exception ex) { + log.warning(String.format("Unable to evaluate the %s section of %s. Please check the wiki. Skipping.", groupName, file.getAbsolutePath())); + } + } + + log.info(String.format("Loaded %s drop groups!", dropGroups.size())); + } + + public void reloadGroups() { + dropGroups.clear(); + loadGroups(); + } + + public void addGroup(String groupName, DropGroup group) { + dropGroups.put(groupName, group); + } + + public Optional getDropGroup(String groupName) { + return Optional.ofNullable(dropGroups.getOrDefault(groupName, null)); + } + + public String[] getGroupNames() { + return dropGroups.keySet().stream().toArray(String[]::new); + } + + public DropGroup[] getGroups() { + return dropGroups.values().stream().toArray(DropGroup[]::new); + } + + public File getFile() { + return file; + } + + public FileConfiguration getConfiguration() { + return configuration; + } +} From 4dba1618905c67b733856266f012e2beddb96394 Mon Sep 17 00:00:00 2001 From: Th3Shadowbroker Date: Sun, 6 Sep 2020 17:35:20 +0200 Subject: [PATCH 02/14] Implemented DropGroup into MinableMaterial and added drop support to BlockBreakListener --- .../ouroboros/mines/OuroborosMines.java | 12 ++++++++- .../mines/listeners/BlockBreakListener.java | 26 ++++++++++++++----- .../mines/util/MineableMaterial.java | 17 ++++++++++-- 3 files changed, 45 insertions(+), 10 deletions(-) diff --git a/src/main/java/dev/th3shadowbroker/ouroboros/mines/OuroborosMines.java b/src/main/java/dev/th3shadowbroker/ouroboros/mines/OuroborosMines.java index 7ca7ede..d7551b3 100644 --- a/src/main/java/dev/th3shadowbroker/ouroboros/mines/OuroborosMines.java +++ b/src/main/java/dev/th3shadowbroker/ouroboros/mines/OuroborosMines.java @@ -22,6 +22,7 @@ import com.sk89q.worldguard.WorldGuard; import com.sk89q.worldguard.protection.flags.StateFlag; import dev.th3shadowbroker.ouroboros.mines.commands.OmCommand; +import dev.th3shadowbroker.ouroboros.mines.drops.DropManager; import dev.th3shadowbroker.ouroboros.mines.exceptions.InvalidMineMaterialException; import dev.th3shadowbroker.ouroboros.mines.listeners.BlockBreakListener; import dev.th3shadowbroker.ouroboros.mines.listeners.DepositDiscoveryListener; @@ -42,6 +43,7 @@ import org.th3shadowbroker.ouroboros.update.comparison.Comparator; import org.th3shadowbroker.ouroboros.update.spiget.SpigetUpdater; +import java.io.File; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Arrays; @@ -64,6 +66,8 @@ public class OuroborosMines extends JavaPlugin { private AnnouncementManager announcementManager; + private DropManager dropManager; + private boolean worldGuardFound = false; @Override @@ -109,6 +113,8 @@ public void onEnable() { announcementManager = new AnnouncementManager(); announcementManager.createTasks(); + dropManager = new DropManager(new File(getDataFolder(), "drops.yml")); + getCommand("om").setExecutor(new OmCommand()); checkForSupportedPlugins(); @@ -271,5 +277,9 @@ public TaskManager getTaskManager() { public AnnouncementManager getAnnouncementManager() { return announcementManager; } - + + public DropManager getDropManager() { + return dropManager; + } + } diff --git a/src/main/java/dev/th3shadowbroker/ouroboros/mines/listeners/BlockBreakListener.java b/src/main/java/dev/th3shadowbroker/ouroboros/mines/listeners/BlockBreakListener.java index a4e5893..2a523e4 100644 --- a/src/main/java/dev/th3shadowbroker/ouroboros/mines/listeners/BlockBreakListener.java +++ b/src/main/java/dev/th3shadowbroker/ouroboros/mines/listeners/BlockBreakListener.java @@ -27,13 +27,13 @@ import dev.th3shadowbroker.ouroboros.mines.events.MaterialMinedEvent; import dev.th3shadowbroker.ouroboros.mines.util.*; import org.bukkit.Bukkit; +import org.bukkit.Material; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.inventory.ItemStack; -import java.util.Collection; import java.util.Map; import java.util.Optional; @@ -46,7 +46,6 @@ public class BlockBreakListener implements Listener { @EventHandler(priority = EventPriority.LOWEST) public void onBlockBreak(BlockBreakEvent event) { Optional blockRegions = WorldUtils.getBlockRegions(event.getBlock()); - if ( blockRegions.isPresent() && blockRegions.get().testState(null, OuroborosMines.FLAG)) { Optional minedMaterial = plugin.getMaterialManager().getMaterialProperties(event.getBlock().getType(), WorldUtils.getTopRegion(blockRegions.get()).get(), BukkitAdapter.adapt(event.getBlock().getWorld())); if (minedMaterial.isPresent()) { @@ -85,7 +84,7 @@ public void onBlockBreak(BlockBreakEvent event) { //If rich if (MetaUtils.isRich(event.getBlock())) { //event.getBlock().breakNaturally(event.getPlayer().getInventory().getItemInMainHand()); - breakBlock(event, event.getPlayer().getInventory().getItemInMainHand()); + breakBlock(event, minedMaterial.get(), event.getPlayer().getInventory().getItemInMainHand()); event.getBlock().setType(minedMaterial.get().getMaterial()); MetaUtils.decreaseRichness(event.getBlock()); @@ -107,7 +106,7 @@ public void onBlockBreak(BlockBreakEvent event) { //Break it! Replace it! //event.getBlock().breakNaturally(event.getPlayer().getInventory().getItemInMainHand()); - breakBlock(event, event.getPlayer().getInventory().getItemInMainHand()); + breakBlock(event, minedMaterial.get(), event.getPlayer().getInventory().getItemInMainHand()); event.getBlock().setType(minedMaterial.get().getReplacement()); } @@ -115,11 +114,24 @@ public void onBlockBreak(BlockBreakEvent event) { } } - private void breakBlock(BlockBreakEvent event, ItemStack tool) { + // @TODO Implement drops here! + private void breakBlock(BlockBreakEvent event, MineableMaterial mineableMaterial, ItemStack tool) { if (!autoPickup) { - event.getBlock().breakNaturally(event.getPlayer().getInventory().getItemInMainHand()); + // Check for drop group + if (mineableMaterial.getDropGroup().isPresent()) { + event.setDropItems(false); + + for (ItemStack drop : mineableMaterial.getDropGroup().get().drawDrops()) { + event.getBlock().getWorld().dropItem(event.getBlock().getLocation(), drop); + } + + // No drop-group assigned + } else { + event.getBlock().breakNaturally(event.getPlayer().getInventory().getItemInMainHand()); + } } else { - ItemStack[] drops = event.getBlock().getDrops(event.getPlayer().getInventory().getItemInMainHand()).stream().toArray(ItemStack[]::new); + // Modified in favour of drop feature + ItemStack[] drops = mineableMaterial.getDropGroup().isPresent() ? mineableMaterial.getDropGroup().get().drawDrops() : event.getBlock().getDrops(event.getPlayer().getInventory().getItemInMainHand()).stream().toArray(ItemStack[]::new); Map overflow = event.getPlayer().getInventory().addItem(drops); if (overflow.size() > 0) { overflow.forEach((slot, item) -> event.getBlock().getWorld().dropItemNaturally(event.getBlock().getLocation(), item)); diff --git a/src/main/java/dev/th3shadowbroker/ouroboros/mines/util/MineableMaterial.java b/src/main/java/dev/th3shadowbroker/ouroboros/mines/util/MineableMaterial.java index fd71238..e170831 100644 --- a/src/main/java/dev/th3shadowbroker/ouroboros/mines/util/MineableMaterial.java +++ b/src/main/java/dev/th3shadowbroker/ouroboros/mines/util/MineableMaterial.java @@ -20,6 +20,7 @@ package dev.th3shadowbroker.ouroboros.mines.util; import dev.th3shadowbroker.ouroboros.mines.OuroborosMines; +import dev.th3shadowbroker.ouroboros.mines.drops.DropGroup; import dev.th3shadowbroker.ouroboros.mines.exceptions.InvalidMineMaterialException; import org.bukkit.Material; import org.bukkit.configuration.ConfigurationSection; @@ -47,7 +48,9 @@ public class MineableMaterial { private final Range depositExperience; - public MineableMaterial(Material material, Material[] replacements, Range cooldown, double richChance, Range richAmount, Range experience, Range depositExperience) { + private final String dropGroup; + + public MineableMaterial(Material material, Material[] replacements, Range cooldown, double richChance, Range richAmount, Range experience, Range depositExperience, String dropGroup) { this.material = material; this.replacements = replacements; this.cooldown = cooldown; @@ -55,6 +58,7 @@ public MineableMaterial(Material material, Material[] replacements, Range cooldo this.richAmount = richAmount; this.experience = experience; this.depositExperience = depositExperience; + this.dropGroup = dropGroup; } public Material getMaterial() { @@ -109,6 +113,10 @@ public Material getReplacement() { return replacements[replRandom.nextInt(replacements.length)]; } + public Optional getDropGroup() { + return dropGroup == null ? Optional.empty() : OuroborosMines.INSTANCE.getDropManager().getDropGroup(dropGroup); + } + public static MineableMaterial fromSection(ConfigurationSection section) throws InvalidMineMaterialException { //Parse material Optional material = Optional.ofNullable(Material.getMaterial(section.getName().toUpperCase())); @@ -173,6 +181,9 @@ public static MineableMaterial fromSection(ConfigurationSection section) throws } } + //Parse drop group + String dropGroup = section.getString("dropGroup", null); + return new MineableMaterial( //Material and replacements @@ -185,8 +196,10 @@ public static MineableMaterial fromSection(ConfigurationSection section) throws //Add range-values richAmount == null ? Range.zero() : richAmount, experience == null ? Range.zero() : experience, - depositExperience == null ? Range.zero() : depositExperience + depositExperience == null ? Range.zero() : depositExperience, + //Drop group + dropGroup ); } From d6c5b8a96963e4b171ef6206281f934fba1e74d1 Mon Sep 17 00:00:00 2001 From: Th3Shadowbroker Date: Sun, 6 Sep 2020 17:36:07 +0200 Subject: [PATCH 03/14] Added drop groups to reload command --- .../dev/th3shadowbroker/ouroboros/mines/OuroborosMines.java | 4 +++- .../th3shadowbroker/ouroboros/mines/commands/OmCommand.java | 3 +++ src/main/resources/config.yml | 2 ++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/dev/th3shadowbroker/ouroboros/mines/OuroborosMines.java b/src/main/java/dev/th3shadowbroker/ouroboros/mines/OuroborosMines.java index d7551b3..4105bb0 100644 --- a/src/main/java/dev/th3shadowbroker/ouroboros/mines/OuroborosMines.java +++ b/src/main/java/dev/th3shadowbroker/ouroboros/mines/OuroborosMines.java @@ -217,7 +217,9 @@ private void updateConfig() { "autoPickup", "openingHours", "timezone", - "placeholders" + "placeholders", + "chat.messages.reloadingDropGroups", + "chat.messages.reloadedDropGroups" ); pathsToCopy.forEach(path -> { if (!getConfig().isSet(path)) { diff --git a/src/main/java/dev/th3shadowbroker/ouroboros/mines/commands/OmCommand.java b/src/main/java/dev/th3shadowbroker/ouroboros/mines/commands/OmCommand.java index 8c5a27e..f999517 100644 --- a/src/main/java/dev/th3shadowbroker/ouroboros/mines/commands/OmCommand.java +++ b/src/main/java/dev/th3shadowbroker/ouroboros/mines/commands/OmCommand.java @@ -95,6 +95,9 @@ public boolean onCommand(CommandSender sender, Command cmd, String cmdLabel, Str plugin.getMaterialManager().reloadRegionConfigurations(); sender.sendMessage(TemplateMessage.from("chat.messages.reloadedRegionConfigurations").insert("count", String.valueOf(plugin.getMaterialManager().getMineableMaterialOverrides().size())).colorize().toString()); plugin.getAnnouncementManager().flush(); + sender.sendMessage(TemplateMessage.from("chat.messages.reloadingDropGroups").colorize().toString()); + plugin.getDropManager().reloadGroups(); + sender.sendMessage(TemplateMessage.from("chat.messages.reloadedDropGroups").insert("count", String.valueOf(plugin.getDropManager().getGroups().length)).colorize().toString()); } catch (Exception ex) { sender.sendMessage(TemplateMessage.from("chat.messages.error").colorize().insert("error", ex.getMessage()).toString()); } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 11dec09..dabb11b 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -17,6 +17,8 @@ chat: reloadingConfig: "&2Reloading configuration..." reloadingRegionConfigurations: "&2Reloading region-configurations..." reloadedRegionConfigurations: "&2Loaded %count% region-specific configurations" + reloadingDropGroups: "&2Reloading drop groups..." + reloadedDropGroups: "&2Loaded %count% drop groups" worldNotFound: "&cWorld &e%world% &cnot found!" depositDiscovered: "&2You've discovered a %size% &e%material%&2 deposit!" depositSizes: From 090c7805a855acc3fa52c68163526145add20257 Mon Sep 17 00:00:00 2001 From: Th3Shadowbroker Date: Sun, 6 Sep 2020 17:36:27 +0200 Subject: [PATCH 04/14] Bumped spigot from 1.5.1 to 1.16.2 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1dba1e1..dabe161 100644 --- a/pom.xml +++ b/pom.xml @@ -63,7 +63,7 @@ org.spigotmc spigot-api - 1.15.1-R0.1-SNAPSHOT + 1.16.2-R0.1-SNAPSHOT provided From ec4cccb243e1b36d110dc9ceda0509766f7de7b1 Mon Sep 17 00:00:00 2001 From: Th3Shadowbroker Date: Sat, 12 Sep 2020 11:36:43 +0200 Subject: [PATCH 05/14] Implemented /om dropgroup command to generate droup-groups from chests --- .../ouroboros/mines/OuroborosMines.java | 13 +-- .../ouroboros/mines/commands/OmCommand.java | 34 ++++++++ .../mines/drops/DropGroupCreator.java | 87 +++++++++++++++++++ .../listeners/PlayerInteractListener.java | 66 ++++++++++++++ .../ouroboros/mines/util/Permissions.java | 3 +- src/main/resources/config.yml | 5 ++ src/main/resources/plugin.yml | 7 +- 7 files changed, 207 insertions(+), 8 deletions(-) create mode 100644 src/main/java/dev/th3shadowbroker/ouroboros/mines/drops/DropGroupCreator.java create mode 100644 src/main/java/dev/th3shadowbroker/ouroboros/mines/listeners/PlayerInteractListener.java diff --git a/src/main/java/dev/th3shadowbroker/ouroboros/mines/OuroborosMines.java b/src/main/java/dev/th3shadowbroker/ouroboros/mines/OuroborosMines.java index 4105bb0..133eceb 100644 --- a/src/main/java/dev/th3shadowbroker/ouroboros/mines/OuroborosMines.java +++ b/src/main/java/dev/th3shadowbroker/ouroboros/mines/OuroborosMines.java @@ -24,10 +24,7 @@ import dev.th3shadowbroker.ouroboros.mines.commands.OmCommand; import dev.th3shadowbroker.ouroboros.mines.drops.DropManager; import dev.th3shadowbroker.ouroboros.mines.exceptions.InvalidMineMaterialException; -import dev.th3shadowbroker.ouroboros.mines.listeners.BlockBreakListener; -import dev.th3shadowbroker.ouroboros.mines.listeners.DepositDiscoveryListener; -import dev.th3shadowbroker.ouroboros.mines.listeners.ExperienceListener; -import dev.th3shadowbroker.ouroboros.mines.listeners.TimeSkipListener; +import dev.th3shadowbroker.ouroboros.mines.listeners.*; import dev.th3shadowbroker.ouroboros.mines.thirdparty.JobsRebornSupport; import dev.th3shadowbroker.ouroboros.mines.thirdparty.PlaceholderAPISupport; import dev.th3shadowbroker.ouroboros.mines.thirdparty.QuestsSupport; @@ -109,6 +106,7 @@ public void onEnable() { getServer().getPluginManager().registerEvents( new DepositDiscoveryListener(), this ); getServer().getPluginManager().registerEvents( new ExperienceListener(), this ); getServer().getPluginManager().registerEvents( new TimeSkipListener(), this ); + getServer().getPluginManager().registerEvents( new PlayerInteractListener(), this ); announcementManager = new AnnouncementManager(); announcementManager.createTasks(); @@ -219,7 +217,12 @@ private void updateConfig() { "timezone", "placeholders", "chat.messages.reloadingDropGroups", - "chat.messages.reloadedDropGroups" + "chat.messages.reloadedDropGroups", + "chat.messages.awaitingRightClick", + "chat.messages.awaitingRightClickCancelled", + "chat.messages.dropGroupCreated", + "chat.messages.dropGroupExists", + "chat.messages.missingDropGroupName" ); pathsToCopy.forEach(path -> { if (!getConfig().isSet(path)) { diff --git a/src/main/java/dev/th3shadowbroker/ouroboros/mines/commands/OmCommand.java b/src/main/java/dev/th3shadowbroker/ouroboros/mines/commands/OmCommand.java index f999517..8a2cacc 100644 --- a/src/main/java/dev/th3shadowbroker/ouroboros/mines/commands/OmCommand.java +++ b/src/main/java/dev/th3shadowbroker/ouroboros/mines/commands/OmCommand.java @@ -22,6 +22,7 @@ import com.sk89q.worldguard.protection.ApplicableRegionSet; import com.sk89q.worldguard.protection.regions.ProtectedRegion; import dev.th3shadowbroker.ouroboros.mines.OuroborosMines; +import dev.th3shadowbroker.ouroboros.mines.drops.DropGroupCreator; import dev.th3shadowbroker.ouroboros.mines.util.Permissions; import dev.th3shadowbroker.ouroboros.mines.util.RegionConfiguration; import dev.th3shadowbroker.ouroboros.mines.util.TemplateMessage; @@ -33,6 +34,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import java.io.IOException; import java.util.Optional; public class OmCommand implements CommandExecutor { @@ -106,6 +108,38 @@ public boolean onCommand(CommandSender sender, Command cmd, String cmdLabel, Str } break; + case "dropgroup": + case "dg": + if (sender.hasPermission(Permissions.COMMAND_DROP_GROUP.permission)) { + if (sender instanceof Player) { + Player player = (Player) sender; + + if (args.length >= 2) { + String dropGroupName = args[1]; + + // Drop group does not exist + if (!OuroborosMines.INSTANCE.getDropManager().getDropGroup(dropGroupName).isPresent()) { + DropGroupCreator.awaitCreation(player, dropGroupName); + player.sendMessage(TemplateMessage.from("chat.messages.awaitingRightClick").colorize().toString()); + } else { + player.sendMessage(TemplateMessage.from("chat.messages.dropGroupExists").insert("name", dropGroupName).colorize().toString()); + } + } else { + if (DropGroupCreator.creationPending(player)) { + DropGroupCreator.clearCreationStatus(player); + sender.sendMessage(TemplateMessage.from("chat.messages.awaitingRightClickCancelled").colorize().toString()); + } else { + sender.sendMessage(TemplateMessage.from("chat.messages.missingDropGroupName").colorize().toString()); + } + } + } else { + plugin.getLogger().info(TemplateMessage.from("chat.messages.consoleOnly").colorize().toString()); + } + } else { + sender.sendMessage(cmd.getPermissionMessage()); + } + break; + default: sender.sendMessage(TemplateMessage.from("chat.messages.unrecognizedArgument").colorize().toString()); sender.sendMessage(cmd.getUsage()); diff --git a/src/main/java/dev/th3shadowbroker/ouroboros/mines/drops/DropGroupCreator.java b/src/main/java/dev/th3shadowbroker/ouroboros/mines/drops/DropGroupCreator.java new file mode 100644 index 0000000..8b62c8b --- /dev/null +++ b/src/main/java/dev/th3shadowbroker/ouroboros/mines/drops/DropGroupCreator.java @@ -0,0 +1,87 @@ +/* + * Copyright 2020 Jens Fischer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated + * documentation files (the "Software"), to deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of + * the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package dev.th3shadowbroker.ouroboros.mines.drops; + +import dev.th3shadowbroker.ouroboros.mines.OuroborosMines; +import dev.th3shadowbroker.ouroboros.mines.util.Range; +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.metadata.MetadataValue; + +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +public class DropGroupCreator { + + private static final String META_AWAITING_RIGHT_CLICK = "OM_AWAITING_RIGHT_CLICK"; + + private static final String META_DROP_GROUP_NAME = "OM_DROP_GROUP_NAME"; + + public static void awaitCreation(Player player, String dropGroupName) { + if (!creationPending(player)) { + player.setMetadata(META_AWAITING_RIGHT_CLICK, new FixedMetadataValue(OuroborosMines.INSTANCE, true)); + player.setMetadata(META_DROP_GROUP_NAME, new FixedMetadataValue(OuroborosMines.INSTANCE, dropGroupName)); + } + } + + public static void clearCreationStatus(Player player) { + player.removeMetadata(META_AWAITING_RIGHT_CLICK, OuroborosMines.INSTANCE); + player.removeMetadata(META_DROP_GROUP_NAME, OuroborosMines.INSTANCE); + } + + public static boolean creationPending(Player player) { + return player.hasMetadata(META_AWAITING_RIGHT_CLICK) && player.hasMetadata(META_DROP_GROUP_NAME); + } + + public static String getDropGroupName(Player player) { + List values = player.getMetadata(META_DROP_GROUP_NAME); + return values.isEmpty() ? null : values.get(0).asString(); + } + + public static void saveDropGroup(Inventory inventory, String dropGroupName) throws IOException { + DropManager dropManager = OuroborosMines.INSTANCE.getDropManager(); + + ConfigurationSection section = dropManager.getConfiguration().createSection(dropGroupName); + section.set("multidrop", true); + + ConfigurationSection dropsSection = section.createSection("drops"); + + List drops = Arrays.stream(inventory.getContents()).filter(itemStack -> itemStack != null).map(itemStack -> new Drop(itemStack, 1, new Range(1, 1))).collect(Collectors.toList()); + for (int i = 0; i < drops.size(); i++) { + ConfigurationSection dropSection = dropsSection.createSection(String.valueOf(i)); + + Drop drop = drops.get(i); + drop.getItemStack().setAmount(1); + + dropSection.set("chance", drop.getDropChance()); + dropSection.set("amount", Integer.valueOf(drop.getDropAmount().toString())); + dropSection.set("item", drop.getItemStack()); + } + + dropManager.getConfiguration().save(dropManager.getFile()); + } + +} diff --git a/src/main/java/dev/th3shadowbroker/ouroboros/mines/listeners/PlayerInteractListener.java b/src/main/java/dev/th3shadowbroker/ouroboros/mines/listeners/PlayerInteractListener.java new file mode 100644 index 0000000..d2af082 --- /dev/null +++ b/src/main/java/dev/th3shadowbroker/ouroboros/mines/listeners/PlayerInteractListener.java @@ -0,0 +1,66 @@ +/* + * Copyright 2020 Jens Fischer + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated + * documentation files (the "Software"), to deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or substantial portions of + * the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package dev.th3shadowbroker.ouroboros.mines.listeners; + +import dev.th3shadowbroker.ouroboros.mines.OuroborosMines; +import dev.th3shadowbroker.ouroboros.mines.drops.DropGroupCreator; +import dev.th3shadowbroker.ouroboros.mines.util.TemplateMessage; +import org.bukkit.Material; +import org.bukkit.block.Container; +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.player.PlayerInteractEvent; + +import java.io.IOException; + +public class PlayerInteractListener implements Listener { + + @EventHandler + public void onPlayerInteract(PlayerInteractEvent event) { + if (event.getAction() == Action.RIGHT_CLICK_BLOCK && event.getClickedBlock().getType() == Material.CHEST) { + if (DropGroupCreator.creationPending(event.getPlayer())) { + Player player = event.getPlayer(); + Container container = (Container) event.getClickedBlock().getState(); + String dropGroupName = DropGroupCreator.getDropGroupName(event.getPlayer()); + + // Drop group does not exist + if (!OuroborosMines.INSTANCE.getDropManager().getDropGroup(dropGroupName).isPresent()) { + try { + DropGroupCreator.saveDropGroup(container.getInventory(), dropGroupName); + player.sendMessage(TemplateMessage.from("chat.messages.dropGroupCreated").insert("name", dropGroupName).colorize().toString()); + } catch (IOException ex) { + player.sendMessage(TemplateMessage.from("chat.messages.error").insert("error", ex.getMessage()).colorize().toString()); + } + + // Done! + DropGroupCreator.clearCreationStatus(player); + // Drop group exists + } else { + player.sendMessage(TemplateMessage.from("chat.messages.dropGroupExists").insert("name", dropGroupName).colorize().toString()); + } + + event.setCancelled(true); + } + } + } + +} diff --git a/src/main/java/dev/th3shadowbroker/ouroboros/mines/util/Permissions.java b/src/main/java/dev/th3shadowbroker/ouroboros/mines/util/Permissions.java index a1c8fb5..3d6b9fb 100644 --- a/src/main/java/dev/th3shadowbroker/ouroboros/mines/util/Permissions.java +++ b/src/main/java/dev/th3shadowbroker/ouroboros/mines/util/Permissions.java @@ -27,7 +27,8 @@ public enum Permissions { COMMAND_ROOT("ouroboors.mines.command.*"), COMMAND_INFO("ouroboros.mines.command.info"), COMMAND_CUSTOMIZE("ouroboros.mines.command.customize"), - COMMAND_RELOAD("ouroboros.mines.command.reload"); + COMMAND_RELOAD("ouroboros.mines.command.reload"), + COMMAND_DROP_GROUP("ouroboros.mines.command.dropgroup"); public final String name; diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index dabb11b..0a0aad8 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -9,8 +9,13 @@ default: false chat: prefix: '&9[OM]' messages: + awaitingRightClick: "&2Right-click the block you want to create the drop group from!" + awaitingRightClickCancelled: "&cDrop group creation cancelled!" consoleOnly: "&cThis command can not be executed from console!" + dropGroupCreated: "&2Saved drop group &e%name%" + dropGroupExists: "&cThere's already a drop-group name &e%name%&c!" unrecognizedArgument: "&cUnrecognized argument" + missingDropGroupName: "&cMissing drop-group name!" regionCustomize: "&2A new configuration file for &b%region%&2 has been created!" regionAlreadyCustomized: "&cThere's already a configuration file for this region!" regionNotFound: "&cNo region found at your position!" diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index c3aa965..10510a5 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -10,7 +10,7 @@ api-version: 1.13 commands: om: description: General command for ${plugin.name} - usage: /om [customize:reload] + usage: /om [customize:reload] [world:name] [region] permission-message: §cYou're not allowed to do this! permissions: @@ -27,6 +27,7 @@ permissions: ouroboros.mines.command.info: true ouroboros.mines.command.customize: true ouroboros.mines.command.reload: true + ouroboros.mines.command.dropgroup: true ouroboros.mines.command.info: default: true @@ -35,4 +36,6 @@ permissions: default: op ouroboros.mines.command.reload: - default: op \ No newline at end of file + default: op + ouroboros.mines.command.dropgroup: + default: op From d363ca4ac771d655520777e6fed84971741d5c00 Mon Sep 17 00:00:00 2001 From: Th3Shadowbroker Date: Sat, 12 Sep 2020 11:37:29 +0200 Subject: [PATCH 06/14] Updated range to represent pseudo ranges as single number --- .../java/dev/th3shadowbroker/ouroboros/mines/util/Range.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/dev/th3shadowbroker/ouroboros/mines/util/Range.java b/src/main/java/dev/th3shadowbroker/ouroboros/mines/util/Range.java index 9833252..73cd753 100644 --- a/src/main/java/dev/th3shadowbroker/ouroboros/mines/util/Range.java +++ b/src/main/java/dev/th3shadowbroker/ouroboros/mines/util/Range.java @@ -64,7 +64,7 @@ public int getRandomWithin() { @Override public String toString() { - return String.format("%s-%s", min, max); + return isRange() ? String.format("%s-%s", min, max) : String.valueOf(min); } public static Range zero() { From 6fef8a5e35a2458de9ae20a54ebe12c0a75198b7 Mon Sep 17 00:00:00 2001 From: Th3Shadowbroker Date: Sat, 12 Sep 2020 11:53:56 +0200 Subject: [PATCH 07/14] Improved localization --- src/main/resources/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 0a0aad8..24db575 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -9,7 +9,7 @@ default: false chat: prefix: '&9[OM]' messages: - awaitingRightClick: "&2Right-click the block you want to create the drop group from!" + awaitingRightClick: "&2Right-click the chest you want to create the drop group from or type &e/om dg&2 to cancel!" awaitingRightClickCancelled: "&cDrop group creation cancelled!" consoleOnly: "&cThis command can not be executed from console!" dropGroupCreated: "&2Saved drop group &e%name%" From 8cef5e77eccc487e11f205bb5fc30c0123e0f236 Mon Sep 17 00:00:00 2001 From: Th3Shadowbroker Date: Sat, 12 Sep 2020 11:54:38 +0200 Subject: [PATCH 08/14] Fixed a bug that could cause changes to the original item stacks --- .../th3shadowbroker/ouroboros/mines/drops/DropGroupCreator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/dev/th3shadowbroker/ouroboros/mines/drops/DropGroupCreator.java b/src/main/java/dev/th3shadowbroker/ouroboros/mines/drops/DropGroupCreator.java index 8b62c8b..cbb1b8d 100644 --- a/src/main/java/dev/th3shadowbroker/ouroboros/mines/drops/DropGroupCreator.java +++ b/src/main/java/dev/th3shadowbroker/ouroboros/mines/drops/DropGroupCreator.java @@ -69,7 +69,7 @@ public static void saveDropGroup(Inventory inventory, String dropGroupName) thro ConfigurationSection dropsSection = section.createSection("drops"); - List drops = Arrays.stream(inventory.getContents()).filter(itemStack -> itemStack != null).map(itemStack -> new Drop(itemStack, 1, new Range(1, 1))).collect(Collectors.toList()); + List drops = Arrays.stream(inventory.getContents()).filter(itemStack -> itemStack != null).map(itemStack -> new Drop(itemStack.clone(), 1, new Range(1, 1))).collect(Collectors.toList()); for (int i = 0; i < drops.size(); i++) { ConfigurationSection dropSection = dropsSection.createSection(String.valueOf(i)); From 6009bc462689430545b13cd3e4b6f5b414e5b88d Mon Sep 17 00:00:00 2001 From: Th3Shadowbroker Date: Sat, 12 Sep 2020 11:55:28 +0200 Subject: [PATCH 09/14] Optimized imports --- .../th3shadowbroker/ouroboros/mines/drops/DropGroupCreator.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/dev/th3shadowbroker/ouroboros/mines/drops/DropGroupCreator.java b/src/main/java/dev/th3shadowbroker/ouroboros/mines/drops/DropGroupCreator.java index cbb1b8d..fdf5f92 100644 --- a/src/main/java/dev/th3shadowbroker/ouroboros/mines/drops/DropGroupCreator.java +++ b/src/main/java/dev/th3shadowbroker/ouroboros/mines/drops/DropGroupCreator.java @@ -21,7 +21,6 @@ import dev.th3shadowbroker.ouroboros.mines.OuroborosMines; import dev.th3shadowbroker.ouroboros.mines.util.Range; -import org.bukkit.Material; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; @@ -31,7 +30,6 @@ import java.io.IOException; import java.util.Arrays; import java.util.List; -import java.util.Objects; import java.util.stream.Collectors; public class DropGroupCreator { From e485f906352885a82a3c84e1b80096bc9990b484 Mon Sep 17 00:00:00 2001 From: Th3Shadowbroker Date: Sat, 19 Sep 2020 08:29:43 +0200 Subject: [PATCH 10/14] Removed todo regarding the implementation of #35 --- pom.xml | 2 +- .../ouroboros/mines/listeners/BlockBreakListener.java | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index dabe161..235166e 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ dev.th3shadowbroker.spigot OuroborosMines - 1.7.1-SNAPSHOT + 1.7.1-SNAPSHOT-EXPERIMENTAL ${project.artifactId} diff --git a/src/main/java/dev/th3shadowbroker/ouroboros/mines/listeners/BlockBreakListener.java b/src/main/java/dev/th3shadowbroker/ouroboros/mines/listeners/BlockBreakListener.java index 2a523e4..84b9311 100644 --- a/src/main/java/dev/th3shadowbroker/ouroboros/mines/listeners/BlockBreakListener.java +++ b/src/main/java/dev/th3shadowbroker/ouroboros/mines/listeners/BlockBreakListener.java @@ -114,7 +114,6 @@ public void onBlockBreak(BlockBreakEvent event) { } } - // @TODO Implement drops here! private void breakBlock(BlockBreakEvent event, MineableMaterial mineableMaterial, ItemStack tool) { if (!autoPickup) { // Check for drop group From 955e2281500683bcee99598415844fb328a87773 Mon Sep 17 00:00:00 2001 From: Th3Shadowbroker Date: Sat, 19 Sep 2020 08:30:46 +0200 Subject: [PATCH 11/14] Bumped 1.7.1 -> 1.8.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 235166e..ad2de02 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ dev.th3shadowbroker.spigot OuroborosMines - 1.7.1-SNAPSHOT-EXPERIMENTAL + 1.8.0-SNAPSHOT ${project.artifactId} From 6067f778e8f1308dd438098f301cd5307f5f05a4 Mon Sep 17 00:00:00 2001 From: Th3Shadowbroker Date: Sat, 19 Sep 2020 08:42:10 +0200 Subject: [PATCH 12/14] Deleted TODO.md --- TODO.md | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 TODO.md diff --git a/TODO.md b/TODO.md deleted file mode 100644 index c8c6461..0000000 --- a/TODO.md +++ /dev/null @@ -1,2 +0,0 @@ -- [ ] Block-Replacements are created even when a block is already queued for replacement. This should not happen! -- [ ] It should be possible to enable random respawning for blocks within certain regions marked by a specific flag (ouroboros-mines-random?) \ No newline at end of file From ed2d3b82ef04d1fc2a52271abcf7906784f6c9ff Mon Sep 17 00:00:00 2001 From: Th3Shadowbroker Date: Sat, 19 Sep 2020 08:47:01 +0200 Subject: [PATCH 13/14] Formatting --- src/main/resources/plugin.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 10510a5..bd235bf 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -37,5 +37,6 @@ permissions: ouroboros.mines.command.reload: default: op + ouroboros.mines.command.dropgroup: default: op From 45a6a15a4212d66069aae8540a8009c402493649 Mon Sep 17 00:00:00 2001 From: Th3Shadowbroker Date: Sat, 19 Sep 2020 08:56:02 +0200 Subject: [PATCH 14/14] Renamed `chat.messages.consoleOnly` to `chat.messages.consoleNotAllowed` --- .../dev/th3shadowbroker/ouroboros/mines/OuroborosMines.java | 3 ++- .../th3shadowbroker/ouroboros/mines/commands/OmCommand.java | 5 ++--- src/main/resources/config.yml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/dev/th3shadowbroker/ouroboros/mines/OuroborosMines.java b/src/main/java/dev/th3shadowbroker/ouroboros/mines/OuroborosMines.java index 133eceb..efda054 100644 --- a/src/main/java/dev/th3shadowbroker/ouroboros/mines/OuroborosMines.java +++ b/src/main/java/dev/th3shadowbroker/ouroboros/mines/OuroborosMines.java @@ -222,7 +222,8 @@ private void updateConfig() { "chat.messages.awaitingRightClickCancelled", "chat.messages.dropGroupCreated", "chat.messages.dropGroupExists", - "chat.messages.missingDropGroupName" + "chat.messages.missingDropGroupName", + "chat.messages.consoleNotAllowed" ); pathsToCopy.forEach(path -> { if (!getConfig().isSet(path)) { diff --git a/src/main/java/dev/th3shadowbroker/ouroboros/mines/commands/OmCommand.java b/src/main/java/dev/th3shadowbroker/ouroboros/mines/commands/OmCommand.java index 8a2cacc..cfdb029 100644 --- a/src/main/java/dev/th3shadowbroker/ouroboros/mines/commands/OmCommand.java +++ b/src/main/java/dev/th3shadowbroker/ouroboros/mines/commands/OmCommand.java @@ -34,12 +34,11 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import java.io.IOException; import java.util.Optional; public class OmCommand implements CommandExecutor { - private final String consoleNotAllowed = TemplateMessage.from("chat.messages.consoleOnly").colorize().toString(); + private final String consoleNotAllowed = TemplateMessage.from("chat.messages.consoleNotAllowed").colorize().toString(); private final OuroborosMines plugin = OuroborosMines.INSTANCE; @@ -133,7 +132,7 @@ public boolean onCommand(CommandSender sender, Command cmd, String cmdLabel, Str } } } else { - plugin.getLogger().info(TemplateMessage.from("chat.messages.consoleOnly").colorize().toString()); + sender.sendMessage(consoleNotAllowed); } } else { sender.sendMessage(cmd.getPermissionMessage()); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 24db575..46daf98 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -11,7 +11,7 @@ chat: messages: awaitingRightClick: "&2Right-click the chest you want to create the drop group from or type &e/om dg&2 to cancel!" awaitingRightClickCancelled: "&cDrop group creation cancelled!" - consoleOnly: "&cThis command can not be executed from console!" + consoleNotAllowed: "&cThis command can not be executed from console!" dropGroupCreated: "&2Saved drop group &e%name%" dropGroupExists: "&cThere's already a drop-group name &e%name%&c!" unrecognizedArgument: "&cUnrecognized argument"