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
*/