mirror of
https://github.com/songoda/UltimateTimber.git
synced 2025-02-14 02:31:24 +01:00
Silk touch fix
This commit is contained in:
parent
d47ebbb64b
commit
26c567bb56
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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 {
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user