diff --git a/UltimateTimber/Plugin/src/main/java/com/songoda/ultimatetimber/animation/TreeAnimation.java b/UltimateTimber/Plugin/src/main/java/com/songoda/ultimatetimber/animation/TreeAnimation.java index fac52f4..b58d64e 100644 --- a/UltimateTimber/Plugin/src/main/java/com/songoda/ultimatetimber/animation/TreeAnimation.java +++ b/UltimateTimber/Plugin/src/main/java/com/songoda/ultimatetimber/animation/TreeAnimation.java @@ -9,18 +9,24 @@ import com.songoda.ultimatetimber.tree.TreeDefinition; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.block.Block; +import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; public abstract class TreeAnimation { protected final TreeAnimationType treeAnimationType; protected final DetectedTree detectedTree; protected final Player player; + protected final boolean hasSilkTouch; TreeAnimation(TreeAnimationType treeAnimationType, DetectedTree detectedTree, Player player) { this.treeAnimationType = treeAnimationType; this.detectedTree = detectedTree; this.player = player; + + ItemStack itemInHand = UltimateTimber.getInstance().getVersionAdapter().getItemInHand(player); + this.hasSilkTouch = itemInHand != null && itemInHand.hasItemMeta() && itemInHand.getItemMeta().hasEnchant(Enchantment.SILK_TOUCH); } /** diff --git a/UltimateTimber/Plugin/src/main/java/com/songoda/ultimatetimber/animation/TreeAnimationDisintegrate.java b/UltimateTimber/Plugin/src/main/java/com/songoda/ultimatetimber/animation/TreeAnimationDisintegrate.java index 1b16b3e..24e1726 100644 --- a/UltimateTimber/Plugin/src/main/java/com/songoda/ultimatetimber/animation/TreeAnimationDisintegrate.java +++ b/UltimateTimber/Plugin/src/main/java/com/songoda/ultimatetimber/animation/TreeAnimationDisintegrate.java @@ -35,6 +35,7 @@ public class TreeAnimationDisintegrate extends TreeAnimation { Player p = this.player; TreeDefinition td = this.detectedTree.getTreeDefinition(); + boolean hst = this.hasSilkTouch; new BukkitRunnable() { @Override @@ -65,7 +66,7 @@ public class TreeAnimationDisintegrate extends TreeAnimation { for (ITreeBlock treeBlock : toDestroy) { if (useCustomParticles) versionAdapter.playFallingParticles(td, treeBlock); - treeDefinitionManager.dropTreeLoot(td, treeBlock, p); + treeDefinitionManager.dropTreeLoot(td, treeBlock, p, hst); TreeAnimationDisintegrate.this.replaceBlock(treeBlock.getBlock()); } } else { diff --git a/UltimateTimber/Plugin/src/main/java/com/songoda/ultimatetimber/animation/TreeAnimationNone.java b/UltimateTimber/Plugin/src/main/java/com/songoda/ultimatetimber/animation/TreeAnimationNone.java index 2238640..03cbb3d 100644 --- a/UltimateTimber/Plugin/src/main/java/com/songoda/ultimatetimber/animation/TreeAnimationNone.java +++ b/UltimateTimber/Plugin/src/main/java/com/songoda/ultimatetimber/animation/TreeAnimationNone.java @@ -30,7 +30,7 @@ public class TreeAnimationNone extends TreeAnimation { versionAdapter.playFallingParticles(this.detectedTree.getTreeDefinition(), treeBlock); for (ITreeBlock treeBlock : this.detectedTree.getDetectedTreeBlocks().getAllTreeBlocks()) { - treeDefinitionManager.dropTreeLoot(this.detectedTree.getTreeDefinition(), treeBlock, this.player); + treeDefinitionManager.dropTreeLoot(this.detectedTree.getTreeDefinition(), treeBlock, this.player, this.hasSilkTouch); this.replaceBlock(treeBlock.getBlock()); } } diff --git a/UltimateTimber/Plugin/src/main/java/com/songoda/ultimatetimber/manager/TreeDefinitionManager.java b/UltimateTimber/Plugin/src/main/java/com/songoda/ultimatetimber/manager/TreeDefinitionManager.java index 848fabc..343caaa 100644 --- a/UltimateTimber/Plugin/src/main/java/com/songoda/ultimatetimber/manager/TreeDefinitionManager.java +++ b/UltimateTimber/Plugin/src/main/java/com/songoda/ultimatetimber/manager/TreeDefinitionManager.java @@ -216,31 +216,33 @@ public class TreeDefinitionManager extends Manager { * @param treeBlock The TreeBlock to drop for * @param player The Player to drop for */ - public void dropTreeLoot(TreeDefinition treeDefinition, ITreeBlock treeBlock, Player player) { + public void dropTreeLoot(TreeDefinition treeDefinition, ITreeBlock treeBlock, Player player, boolean hasSilkTouch) { VersionAdapter versionAdapter = this.ultimateTimber.getVersionAdapter(); boolean addToInventory = ConfigurationManager.Setting.ADD_ITEMS_TO_INVENTORY.getBoolean(); - ItemStack itemInHand = this.ultimateTimber.getVersionAdapter().getItemInHand(player); - boolean hasSilkTouch = itemInHand != null && itemInHand.hasItemMeta() && itemInHand.getItemMeta().hasEnchant(Enchantment.SILK_TOUCH); boolean hasBonusChance = player.hasPermission("ultimatetimber.bonusloot"); Set lootedItems = new HashSet<>(); Set lootedCommands = new HashSet<>(); // Get the loot that we should try to drop Set toTry = new HashSet<>(); - switch (treeBlock.getTreeBlockType()) { - case LOG: - toTry.addAll(treeDefinition.getLogLoot()); - toTry.addAll(this.globalLogLoot); - if (treeDefinition.shouldDropOriginalLog() || hasSilkTouch) - lootedItems.addAll(versionAdapter.getBlockDrops(treeDefinition, treeBlock)); - break; - case LEAF: - toTry.addAll(treeDefinition.getLeafLoot()); - toTry.addAll(this.globalLeafLoot); - if (treeDefinition.shouldDropOriginalLeaf() || hasSilkTouch) - lootedItems.addAll(versionAdapter.getBlockDrops(treeDefinition, treeBlock)); - break; + if (hasSilkTouch) { + lootedItems.addAll(versionAdapter.getBlockDrops(treeDefinition, treeBlock)); + } else { + switch (treeBlock.getTreeBlockType()) { + case LOG: + toTry.addAll(treeDefinition.getLogLoot()); + toTry.addAll(this.globalLogLoot); + if (treeDefinition.shouldDropOriginalLog()) + lootedItems.addAll(versionAdapter.getBlockDrops(treeDefinition, treeBlock)); + break; + case LEAF: + toTry.addAll(treeDefinition.getLeafLoot()); + toTry.addAll(this.globalLeafLoot); + if (treeDefinition.shouldDropOriginalLeaf()) + lootedItems.addAll(versionAdapter.getBlockDrops(treeDefinition, treeBlock)); + break; + } } // Roll the dice