Silk touch fix

This commit is contained in:
Esophose 2019-03-31 13:48:03 -06:00
parent d47ebbb64b
commit 26c567bb56
4 changed files with 27 additions and 18 deletions

View File

@ -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);
}
/**

View File

@ -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<Block> 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 {

View File

@ -30,7 +30,7 @@ public class TreeAnimationNone extends TreeAnimation {
versionAdapter.playFallingParticles(this.detectedTree.getTreeDefinition(), treeBlock);
for (ITreeBlock<Block> 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());
}
}

View File

@ -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<ItemStack> lootedItems = new HashSet<>();
Set<String> lootedCommands = new HashSet<>();
// Get the loot that we should try to drop
Set<TreeLoot> 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