From e020a9648868e9ee0ade8f2e2f2273e0b1c27425 Mon Sep 17 00:00:00 2001 From: Brianna Date: Sun, 28 Jun 2020 19:18:23 -0500 Subject: [PATCH] Added 1.16 support. --- UltimateTimber-Adapter/Current/pom.xml | 6 + .../CurrentAdapter.java | 9 +- UltimateTimber/Plugin/pom.xml | 2 +- .../Plugin/resources/config-current.yml | 43 +++++++ UltimateTimber/Plugin/resources/en_US.lang | 4 +- UltimateTimber/Plugin/resources/plugin.yml | 4 +- .../ultimatetimber/UltimateTimber.java | 50 +++----- .../commands/CommandReload.java | 45 +++++++ .../commands/CommandToggle.java | 49 ++++++++ .../manager/CommandManager.java | 115 ------------------ .../manager/TreeDefinitionManager.java | 59 +++++---- 11 files changed, 205 insertions(+), 181 deletions(-) create mode 100644 UltimateTimber/Plugin/src/com/songoda/ultimatetimber/commands/CommandReload.java create mode 100644 UltimateTimber/Plugin/src/com/songoda/ultimatetimber/commands/CommandToggle.java delete mode 100644 UltimateTimber/Plugin/src/com/songoda/ultimatetimber/manager/CommandManager.java diff --git a/UltimateTimber-Adapter/Current/pom.xml b/UltimateTimber-Adapter/Current/pom.xml index 19db6f4..106ad4c 100644 --- a/UltimateTimber-Adapter/Current/pom.xml +++ b/UltimateTimber-Adapter/Current/pom.xml @@ -25,5 +25,11 @@ ${project.version} compile + + com.songoda + SongodaCore + LATEST + compile + \ No newline at end of file diff --git a/UltimateTimber-Adapter/Current/src/com.songoda.ultimatetimber.adapter.current/CurrentAdapter.java b/UltimateTimber-Adapter/Current/src/com.songoda.ultimatetimber.adapter.current/CurrentAdapter.java index b8859fb..3620755 100644 --- a/UltimateTimber-Adapter/Current/src/com.songoda.ultimatetimber.adapter.current/CurrentAdapter.java +++ b/UltimateTimber-Adapter/Current/src/com.songoda.ultimatetimber.adapter.current/CurrentAdapter.java @@ -1,5 +1,6 @@ package com.songoda.ultimatetimber.adapter.current; +import com.songoda.core.compatibility.CompatibleMaterial; import com.songoda.ultimatetimber.adapter.IBlockData; import com.songoda.ultimatetimber.adapter.VersionAdapter; import com.songoda.ultimatetimber.adapter.VersionAdapterType; @@ -34,12 +35,16 @@ public class CurrentAdapter implements VersionAdapter { @Override public IBlockData parseBlockDataFromString(String blockDataString) { - return new CurrentBlockData(Material.matchMaterial(blockDataString)); + Material material = Material.matchMaterial(blockDataString); + if (material == null) return null; + return new CurrentBlockData(material); } @Override public ItemStack parseItemStackFromString(String itemStackString) { - return new ItemStack(Material.matchMaterial(itemStackString)); + CompatibleMaterial compatibleMaterial = CompatibleMaterial.getMaterial(itemStackString); + if (compatibleMaterial == null) return null; + return compatibleMaterial.getItem(); } @Override diff --git a/UltimateTimber/Plugin/pom.xml b/UltimateTimber/Plugin/pom.xml index 4f47a39..65cf498 100644 --- a/UltimateTimber/Plugin/pom.xml +++ b/UltimateTimber/Plugin/pom.xml @@ -74,7 +74,7 @@ org.spigotmc spigot - 1.15 + 1.16.1 provided diff --git a/UltimateTimber/Plugin/resources/config-current.yml b/UltimateTimber/Plugin/resources/config-current.yml index c71d0e3..91d3e6e 100644 --- a/UltimateTimber/Plugin/resources/config-current.yml +++ b/UltimateTimber/Plugin/resources/config-current.yml @@ -360,6 +360,48 @@ trees: chance: 25 entire-tree-loot: [] required-tools: [] + huge_crimson_fungus: + logs: + - CRIMSON_STEM + - STRIPPED_CRIMSON_STEM + - CRIMSON_HYPHAE + - STRIPPED_CRIMSON_HYPHAE + leaves: + - NETHER_WART_BLOCK + - SHROOMLIGHT + sapling: CRIMSON_FUNGUS + plantable-soil: + - CRIMSON_NYLIUM + max-log-distance-from-trunk: 27 + max-leaf-distance-from-log: 5 + search-for-leaves-diagonally: false + drop-original-log: true + drop-original-leaf: true + log-loot: [] + leaf-loot: [] + entire-tree-loot: [] + required-tools: [] + huge_warpped_fungus: + logs: + - WARPED_STEM + - STRIPPED_WARPED_STEM + - WARPED_HYPHAE + - STRIPPED_WARPED_HYPHAE + leaves: + - WARPED_WART_BLOCK + - SHROOMLIGHT + sapling: CRIMSON_FUNGUS + plantable-soil: + - WARPED_NYLIUM + max-log-distance-from-trunk: 27 + max-leaf-distance-from-log: 5 + search-for-leaves-diagonally: false + drop-original-log: true + drop-original-leaf: true + log-loot: [] + leaf-loot: [] + entire-tree-loot: [] + required-tools: [] # All soil types that the tree type's saplings can be planted on global-plantable-soil: @@ -414,3 +456,4 @@ global-required-tools: - IRON_AXE - GOLDEN_AXE - DIAMOND_AXE + - NETHERITE_AXE diff --git a/UltimateTimber/Plugin/resources/en_US.lang b/UltimateTimber/Plugin/resources/en_US.lang index 91db9e5..3e09c8f 100644 --- a/UltimateTimber/Plugin/resources/en_US.lang +++ b/UltimateTimber/Plugin/resources/en_US.lang @@ -9,10 +9,10 @@ general: command: reload: - description: '&8 - &a/ut reload &7 - Reloads the config.' + description: 'Reloads the config.' reloaded: '&7Configuration and locale files have been reloaded.' toggle: - description: '&8 - &a/ut toggle &7 - Toggles your chopping mode' + description: 'Toggles your chopping mode' enabled: '&7Chopping Mode: &aEnabled' disabled: '&7Chopping Mode: &cDisabled' diff --git a/UltimateTimber/Plugin/resources/plugin.yml b/UltimateTimber/Plugin/resources/plugin.yml index 2386d65..a478fa1 100644 --- a/UltimateTimber/Plugin/resources/plugin.yml +++ b/UltimateTimber/Plugin/resources/plugin.yml @@ -5,10 +5,10 @@ main: com.songoda.ultimatetimber.UltimateTimber api-version: 1.13 softdepend: [mcMMO, Jobs] commands: - ultimatetimber: + ut: description: Reloads the configuration file usage: /ultimatetimber reload - aliases: [ut] + aliases: [ultimatetimber] permissions: ultimatetimber.*: description: Inherits all plugin permissions diff --git a/UltimateTimber/Plugin/src/com/songoda/ultimatetimber/UltimateTimber.java b/UltimateTimber/Plugin/src/com/songoda/ultimatetimber/UltimateTimber.java index 268ce7d..344eadf 100644 --- a/UltimateTimber/Plugin/src/com/songoda/ultimatetimber/UltimateTimber.java +++ b/UltimateTimber/Plugin/src/com/songoda/ultimatetimber/UltimateTimber.java @@ -7,17 +7,9 @@ import com.songoda.core.configuration.Config; import com.songoda.ultimatetimber.adapter.VersionAdapter; import com.songoda.ultimatetimber.adapter.current.CurrentAdapter; import com.songoda.ultimatetimber.adapter.legacy.LegacyAdapter; -import com.songoda.ultimatetimber.manager.ChoppingManager; -import com.songoda.ultimatetimber.manager.CommandManager; -import com.songoda.ultimatetimber.manager.ConfigurationManager; -import com.songoda.ultimatetimber.manager.HookManager; -import com.songoda.ultimatetimber.manager.Manager; -import com.songoda.ultimatetimber.manager.PlacedBlockManager; -import com.songoda.ultimatetimber.manager.SaplingManager; -import com.songoda.ultimatetimber.manager.TreeAnimationManager; -import com.songoda.ultimatetimber.manager.TreeDefinitionManager; -import com.songoda.ultimatetimber.manager.TreeDetectionManager; -import com.songoda.ultimatetimber.manager.TreeFallManager; +import com.songoda.ultimatetimber.commands.CommandReload; +import com.songoda.ultimatetimber.commands.CommandToggle; +import com.songoda.ultimatetimber.manager.*; import com.songoda.ultimatetimber.utils.NMSUtil; import java.util.HashSet; @@ -35,9 +27,9 @@ public class UltimateTimber extends SongodaPlugin { private VersionAdapter versionAdapter; private ChoppingManager choppingManager; - private CommandManager commandManager; private ConfigurationManager configurationManager; private HookManager hookManager; + private com.songoda.core.commands.CommandManager commandManager; private PlacedBlockManager placedBlockManager; private SaplingManager saplingManager; private TreeAnimationManager treeAnimationManager; @@ -59,10 +51,16 @@ public class UltimateTimber extends SongodaPlugin { // Run Songoda Updater SongodaCore.registerPlugin(this, 18, CompatibleMaterial.IRON_AXE); + // Setup plugin commands + this.commandManager = new com.songoda.core.commands.CommandManager(this); + this.commandManager.addMainCommand("ut") + .addSubCommands(new CommandReload(this), + new CommandToggle(this) + ); + // Register managers this.managers = new HashSet<>(); this.choppingManager = this.registerManager(ChoppingManager.class); - this.commandManager = this.registerManager(CommandManager.class); this.configurationManager = new ConfigurationManager(this); this.hookManager = this.registerManager(HookManager.class); this.placedBlockManager = this.registerManager(PlacedBlockManager.class); @@ -74,7 +72,7 @@ public class UltimateTimber extends SongodaPlugin { // Load version adapter and managers this.setupVersionAdapter(); - this.reload(); + this.reloadConfig(); } @Override @@ -84,7 +82,9 @@ public class UltimateTimber extends SongodaPlugin { @Override public void onConfigReload() { - reload(); + this.configurationManager.reload(); + this.managers.forEach(Manager::reload); + this.setLocale(getConfig().getString("locale"), true); } @Override @@ -92,15 +92,6 @@ public class UltimateTimber extends SongodaPlugin { return null; } - /** - * Reloads the plugin's settings - */ - public void reload() { - this.configurationManager.reload(); - this.managers.forEach(Manager::reload); - this.setLocale(getConfig().getString("locale"), true); - } - /** * Disables most of the plugin */ @@ -124,7 +115,7 @@ public class UltimateTimber extends SongodaPlugin { * Registers a manager * * @param managerClass The class of the manager to create a new instance of - * @param extends Manager + * @param extends Manager * @return A new instance of the given manager class */ private T registerManager(Class managerClass) { @@ -156,15 +147,6 @@ public class UltimateTimber extends SongodaPlugin { return this.choppingManager; } - /** - * Gets the command manager - * - * @return The CommandManager instance - */ - public CommandManager getCommandManager() { - return this.commandManager; - } - /** * Gets the configuration manager * diff --git a/UltimateTimber/Plugin/src/com/songoda/ultimatetimber/commands/CommandReload.java b/UltimateTimber/Plugin/src/com/songoda/ultimatetimber/commands/CommandReload.java new file mode 100644 index 0000000..95f3d1d --- /dev/null +++ b/UltimateTimber/Plugin/src/com/songoda/ultimatetimber/commands/CommandReload.java @@ -0,0 +1,45 @@ +package com.songoda.ultimatetimber.commands; + +import com.songoda.core.commands.AbstractCommand; +import com.songoda.ultimatetimber.UltimateTimber; +import org.bukkit.command.CommandSender; + +import java.util.List; + +public class CommandReload extends AbstractCommand { + + private final UltimateTimber plugin; + + public CommandReload(UltimateTimber plugin) { + super(CommandType.CONSOLE_OK, "reload"); + this.plugin = plugin; + } + + @Override + protected ReturnType runCommand(CommandSender sender, String... args) { + plugin.reloadConfig(); + plugin.getLocale().getMessage("command.reload.reloaded").sendPrefixedMessage(sender); + return ReturnType.SUCCESS; + } + + @Override + protected List onTab(CommandSender sender, String... args) { + return null; + } + + @Override + public String getPermissionNode() { + return "ultimatetimber.reload"; + } + + @Override + public String getSyntax() { + return "reload"; + } + + @Override + public String getDescription() { + return plugin.getLocale().getMessage("command.reload.description").getMessage(); + } + +} diff --git a/UltimateTimber/Plugin/src/com/songoda/ultimatetimber/commands/CommandToggle.java b/UltimateTimber/Plugin/src/com/songoda/ultimatetimber/commands/CommandToggle.java new file mode 100644 index 0000000..aa1cdfd --- /dev/null +++ b/UltimateTimber/Plugin/src/com/songoda/ultimatetimber/commands/CommandToggle.java @@ -0,0 +1,49 @@ +package com.songoda.ultimatetimber.commands; + +import com.songoda.core.commands.AbstractCommand; +import com.songoda.ultimatetimber.UltimateTimber; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.List; + +public class CommandToggle extends AbstractCommand { + + private final UltimateTimber plugin; + + public CommandToggle(UltimateTimber plugin) { + super(CommandType.CONSOLE_OK, "toggle"); + this.plugin = plugin; + } + + @Override + protected ReturnType runCommand(CommandSender sender, String... args) { + if (UltimateTimber.getInstance().getChoppingManager().togglePlayer((Player) sender)) { + plugin.getLocale().getMessage("command.toggle.enabled").sendPrefixedMessage(sender); + } else { + plugin.getLocale().getMessage("command.toggle.disabled").sendPrefixedMessage(sender); + } + return ReturnType.SUCCESS; + } + + @Override + protected List onTab(CommandSender sender, String... args) { + return null; + } + + @Override + public String getPermissionNode() { + return "ultimatetimber.toggle"; + } + + @Override + public String getSyntax() { + return "toggle"; + } + + @Override + public String getDescription() { + return plugin.getLocale().getMessage("command.toggle.description").getMessage(); + } + +} diff --git a/UltimateTimber/Plugin/src/com/songoda/ultimatetimber/manager/CommandManager.java b/UltimateTimber/Plugin/src/com/songoda/ultimatetimber/manager/CommandManager.java deleted file mode 100644 index d7cd71e..0000000 --- a/UltimateTimber/Plugin/src/com/songoda/ultimatetimber/manager/CommandManager.java +++ /dev/null @@ -1,115 +0,0 @@ -package com.songoda.ultimatetimber.manager; - -import com.songoda.core.locale.Locale; -import com.songoda.ultimatetimber.UltimateTimber; -import com.songoda.ultimatetimber.utils.Methods; -import org.bukkit.command.*; -import org.bukkit.entity.Player; -import org.bukkit.util.StringUtil; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -public class CommandManager extends Manager implements CommandExecutor, TabCompleter { - - public CommandManager(UltimateTimber plugin) { - super(plugin); - - PluginCommand command = plugin.getCommand("ultimatetimber"); - if (command != null) { - command.setExecutor(this); - command.setTabCompleter(this); - } - } - - @Override - public void reload() { - - } - - @Override - public void disable() { - - } - - @Override - public boolean onCommand(CommandSender commandSender, Command command, String s, String[] args) { - Locale locale = this.plugin.getLocale(); - - if (args.length > 0) { - if (args[0].equalsIgnoreCase("reload")) { - if (commandSender instanceof Player && this.doesntHavePermission(commandSender, "ultimatetimber.reload", locale)) - return true; - - UltimateTimber.getInstance().reload(); - locale.getMessage("command.reload.reloaded").sendPrefixedMessage(commandSender); - return true; - } else if (args[0].equalsIgnoreCase("toggle")) { - if (!(commandSender instanceof Player)) { - commandSender.sendMessage(Methods.formatText("&cConsole cannot toggle chopping mode!")); - return true; - } - - if (this.doesntHavePermission(commandSender, "ultimatetimber.toggle", locale)) - return true; - - if (UltimateTimber.getInstance().getChoppingManager().togglePlayer((Player) commandSender)) { - locale.getMessage("command.toggle.enabled").sendPrefixedMessage(commandSender); - } else { - locale.getMessage("command.toggle.disabled").sendPrefixedMessage(commandSender); - } - - return true; - } - } - - commandSender.sendMessage(""); - locale.newMessage("&7Version " + plugin.getDescription().getVersion() - + " Created with <3 by &5&l&oSongoda").sendPrefixedMessage(commandSender); - locale.getMessage("command.reload.description").sendMessage(commandSender); - locale.getMessage("command.toggle.description").sendMessage(commandSender); - commandSender.sendMessage(""); - - return true; - } - - @Override - public List onTabComplete(CommandSender commandSender, Command command, String s, String[] args) { - List completions = new ArrayList<>(); - - if (args.length < 1) - return completions; - - Set possibleCompletions = new HashSet<>(); - - if (commandSender.hasPermission("ultimatetimber.reload")) - possibleCompletions.add("reload"); - - if (commandSender.hasPermission("ultimatetimber.toggle") && commandSender instanceof Player) - possibleCompletions.add("toggle"); - - StringUtil.copyPartialMatches(args[0], possibleCompletions, completions); - - return completions; - } - - /** - * Checks if a player does have a permission - * Sends them an error message if they don't - * - * @param sender The CommandSender to check - * @param permission The permission to check for - * @param locale The LocaleManager instance - * @return True if the player has permission, otherwise false and sends a message - */ - private boolean doesntHavePermission(CommandSender sender, String permission, Locale locale) { - if (!sender.hasPermission(permission)) { - locale.getMessage("general.nopermission").sendPrefixedMessage(sender); - return true; - } - return false; - } - -} diff --git a/UltimateTimber/Plugin/src/com/songoda/ultimatetimber/manager/TreeDefinitionManager.java b/UltimateTimber/Plugin/src/com/songoda/ultimatetimber/manager/TreeDefinitionManager.java index 12faa4c..524957e 100644 --- a/UltimateTimber/Plugin/src/com/songoda/ultimatetimber/manager/TreeDefinitionManager.java +++ b/UltimateTimber/Plugin/src/com/songoda/ultimatetimber/manager/TreeDefinitionManager.java @@ -15,11 +15,7 @@ import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Random; -import java.util.Set; +import java.util.*; public class TreeDefinitionManager extends Manager { @@ -55,6 +51,7 @@ public class TreeDefinitionManager extends Manager { // Load tree settings ConfigurationSection treeSection = config.getConfigurationSection("trees"); + top: for (String key : treeSection.getKeys(false)) { ConfigurationSection tree = treeSection.getConfigurationSection(key); @@ -72,11 +69,17 @@ public class TreeDefinitionManager extends Manager { Set entireTreeLoot = new HashSet<>(); Set requiredTools = new HashSet<>(); - for (String blockDataString : tree.getStringList("logs")) - logBlockData.add(versionAdapter.parseBlockDataFromString(blockDataString)); + for (String blockDataString : tree.getStringList("logs")) { + IBlockData blockData = versionAdapter.parseBlockDataFromString(blockDataString); + if (blockData == null || blockData.getMaterial() == null) continue top; + logBlockData.add(blockData); + } - for (String blockDataString : tree.getStringList("leaves")) - leafBlockData.add(versionAdapter.parseBlockDataFromString(blockDataString)); + for (String blockDataString : tree.getStringList("leaves")) { + IBlockData blockData = versionAdapter.parseBlockDataFromString(blockDataString); + if (blockData == null || blockData.getMaterial() == null) continue top; + leafBlockData.add(blockData); + } saplingBlockData = versionAdapter.parseBlockDataFromString(tree.getString("sapling")); @@ -104,8 +107,11 @@ public class TreeDefinitionManager extends Manager { for (String lootKey : entireTreeLootSection.getKeys(false)) entireTreeLoot.add(this.getTreeLootEntry(versionAdapter, TreeBlockType.LEAF, entireTreeLootSection.getConfigurationSection(lootKey))); - for (String itemStackString : tree.getStringList("required-tools")) - requiredTools.add(versionAdapter.parseItemStackFromString(itemStackString)); + for (String itemStackString : tree.getStringList("required-tools")) { + ItemStack tool = versionAdapter.parseItemStackFromString(itemStackString); + if (tool == null) continue top; + requiredTools.add(tool); + } this.treeDefinitions.add(new TreeDefinition(key, logBlockData, leafBlockData, saplingBlockData, plantableSoilBlockData, maxLogDistanceFromTrunk, maxLeafDistanceFromLog, detectLeavesDiagonally, dropOriginalLog, dropOriginalLeaf, logLoot, leafLoot, entireTreeLoot, requiredTools)); @@ -134,8 +140,11 @@ public class TreeDefinitionManager extends Manager { this.globalEntireTreeLoot.add(this.getTreeLootEntry(versionAdapter, TreeBlockType.LOG, entireTreeSection.getConfigurationSection(lootKey))); // Load global tools - for (String itemStackString : config.getStringList("global-required-tools")) - this.globalRequiredTools.add(versionAdapter.parseItemStackFromString(itemStackString)); + for (String itemStackString : config.getStringList("global-required-tools")) { + ItemStack tool = versionAdapter.parseItemStackFromString(itemStackString); + if (tool == null) continue; + this.globalRequiredTools.add(tool); + } } @Override @@ -157,8 +166,8 @@ public class TreeDefinitionManager extends Manager { * Narrows a Set of TreeDefinitions down to ones matching the given Block and TreeBlockType * * @param possibleTreeDefinitions The possible TreeDefinitions - * @param block The Block to narrow to - * @param treeBlockType The TreeBlockType of the given Block + * @param block The Block to narrow to + * @param treeBlockType The TreeBlockType of the given Block * @return A Set of TreeDefinitions narrowed down */ public Set narrowTreeDefinition(Set possibleTreeDefinitions, Block block, TreeBlockType treeBlockType) { @@ -212,7 +221,7 @@ public class TreeDefinitionManager extends Manager { * Checks if a given tool is valid for a given tree definition, also takes into account global tools * * @param treeDefinition The TreeDefinition to use - * @param tool The tool to check + * @param tool The tool to check * @return True if the tool is allowed for toppling the given TreeDefinition */ public boolean isToolValidForTreeDefinition(TreeDefinition treeDefinition, ItemStack tool) { @@ -230,9 +239,9 @@ public class TreeDefinitionManager extends Manager { /** * Tries to spawn loot for a given TreeBlock with the given TreeDefinition for a given Player * - * @param treeDefinition The TreeDefinition to use - * @param treeBlock The TreeBlock to drop for - * @param player The Player to drop for + * @param treeDefinition The TreeDefinition to use + * @param treeBlock The TreeBlock to drop for + * @param player The Player to drop for * @param isForEntireTree If the loot is for the entire tree */ public void dropTreeLoot(TreeDefinition treeDefinition, ITreeBlock treeBlock, Player player, boolean hasSilkTouch, boolean isForEntireTree) { @@ -316,10 +325,10 @@ public class TreeDefinitionManager extends Manager { for (String lootedCommand : lootedCommands) Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), lootedCommand.replace("%player%", player.getName()) - .replace("%type%", treeDefinition.getKey()) - .replace("%xPos%", treeBlock.getLocation().getBlockX() + "") - .replace("%yPos%", treeBlock.getLocation().getBlockY() + "") - .replace("%zPos%", treeBlock.getLocation().getBlockZ() + "")); + .replace("%type%", treeDefinition.getKey()) + .replace("%xPos%", treeBlock.getLocation().getBlockX() + "") + .replace("%yPos%", treeBlock.getLocation().getBlockY() + "") + .replace("%zPos%", treeBlock.getLocation().getBlockZ() + "")); } /** @@ -338,8 +347,8 @@ public class TreeDefinitionManager extends Manager { /** * Gets a TreeLoot entry from a ConfigurationSection * - * @param versionAdapter The VersionAdapter to use - * @param treeBlockType The TreeBlockType to use + * @param versionAdapter The VersionAdapter to use + * @param treeBlockType The TreeBlockType to use * @param configurationSection The ConfigurationSection * @return A TreeLoot entry from the section */