diff --git a/src/main/java/com/gmail/nossr50/skills/woodcutting/WoodcuttingManager.java b/src/main/java/com/gmail/nossr50/skills/woodcutting/WoodcuttingManager.java index e9d4623f3..34644086d 100644 --- a/src/main/java/com/gmail/nossr50/skills/woodcutting/WoodcuttingManager.java +++ b/src/main/java/com/gmail/nossr50/skills/woodcutting/WoodcuttingManager.java @@ -322,13 +322,17 @@ public class WoodcuttingManager extends SkillManager { processBonusDropCheck(blockState); } else if (BlockUtils.isNonWoodPartOfTree(blockState)) { // 75% of the time do not drop leaf blocks - if (blockState.getType().getKey().getKey().toLowerCase().contains("sapling") - || ThreadLocalRandom.current().nextInt(100) > 75) { + if (ThreadLocalRandom.current().nextInt(100) > 75) { Misc.spawnItemsFromCollection(getPlayer(), Misc.getBlockCenter(blockState), block.getDrops(itemStack), ItemSpawnReason.TREE_FELLER_DISPLACED_BLOCK); } + // drop saplings as occur in rest if Knock on Wood unlocked. + else if (RankUtils.hasUnlockedSubskill(player, SubSkillType.WOODCUTTING_KNOCK_ON_WOOD)) { + Misc.spawnItemIfSapling(getPlayer(), Misc.getBlockCenter(blockState), + block.getDrops(itemStack),ItemSpawnReason.TREE_FELLER_DISPLACED_BLOCK);; + } //Drop displaced non-woodcutting XP blocks if (RankUtils.hasUnlockedSubskill(player, SubSkillType.WOODCUTTING_KNOCK_ON_WOOD)) { diff --git a/src/main/java/com/gmail/nossr50/util/Misc.java b/src/main/java/com/gmail/nossr50/util/Misc.java index a289315cb..a57aaf7ee 100644 --- a/src/main/java/com/gmail/nossr50/util/Misc.java +++ b/src/main/java/com/gmail/nossr50/util/Misc.java @@ -128,6 +128,20 @@ public final class Misc { } } + /** + * Drops the item from the item stack only if it is a sapling (or equivalent) + * Needed for TreeFeller + */ + public static void spawnItemIfSapling(@NotNull Player player, @NotNull Location location, @NotNull Collection < ItemStack > drops, @NotNull ItemSpawnReason itemSpawnReason) { + String dropString; + for (ItemStack drop : drops) { + dropString = drop.getType().getKey().getKey(); + if (dropString.contains("sapling") || dropString.contains("propagule")) { + Misc.spawnItem(player, location, drop, itemSpawnReason); + } + } + } + /** * Drop items at a given location. *