From 6c1502fc671855f5fc2475a19cdec6c33dc823ff Mon Sep 17 00:00:00 2001 From: nossr50 Date: Fri, 24 May 2024 13:07:45 -0700 Subject: [PATCH] refactoring --- .../woodcutting/WoodcuttingManager.java | 9 ++++--- .../com/gmail/nossr50/util/ItemUtils.java | 27 +++++++++++++------ .../skills/woodcutting/WoodcuttingTest.java | 6 ++++- 3 files changed, 29 insertions(+), 13 deletions(-) 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 76af4db6a..eeb7687bc 100644 --- a/src/main/java/com/gmail/nossr50/skills/woodcutting/WoodcuttingManager.java +++ b/src/main/java/com/gmail/nossr50/skills/woodcutting/WoodcuttingManager.java @@ -36,6 +36,7 @@ import java.util.List; import java.util.Set; import java.util.concurrent.ThreadLocalRandom; +import static com.gmail.nossr50.util.ItemUtils.spawnItemsFromCollection; import static com.gmail.nossr50.util.Misc.getBlockCenter; import static com.gmail.nossr50.util.ItemUtils.spawnItem; import static com.gmail.nossr50.util.skills.RankUtils.hasUnlockedSubskill; @@ -322,14 +323,14 @@ public class WoodcuttingManager extends SkillManager { xp += processTreeFellerXPGains(blockState, processedLogCount); //Drop displaced block - ItemUtils.spawnItemsFromCollection(player, getBlockCenter(blockState), block.getDrops(itemStack), ItemSpawnReason.TREE_FELLER_DISPLACED_BLOCK); + spawnItemsFromCollection(player, getBlockCenter(blockState), block.getDrops(itemStack), ItemSpawnReason.TREE_FELLER_DISPLACED_BLOCK); //Bonus Drops / Harvest lumber checks processBonusDropCheck(blockState); } else if (BlockUtils.isNonWoodPartOfTree(blockState)) { // 75% of the time do not drop leaf blocks if (ThreadLocalRandom.current().nextInt(100) > 75) { - ItemUtils.spawnItemsFromCollection(player, + spawnItemsFromCollection(player, getBlockCenter(blockState), block.getDrops(itemStack), ItemSpawnReason.TREE_FELLER_DISPLACED_BLOCK); @@ -421,8 +422,8 @@ public class WoodcuttingManager extends SkillManager { * * @param blockState Block being broken */ - protected void spawnHarvestLumberBonusDrops(@NotNull BlockState blockState) { - ItemUtils.spawnItemsFromCollection( + void spawnHarvestLumberBonusDrops(@NotNull BlockState blockState) { + spawnItemsFromCollection( getPlayer(), getBlockCenter(blockState), blockState.getBlock().getDrops(getPlayer().getInventory().getItemInMainHand()), diff --git a/src/main/java/com/gmail/nossr50/util/ItemUtils.java b/src/main/java/com/gmail/nossr50/util/ItemUtils.java index 094664cff..3573fc5ac 100644 --- a/src/main/java/com/gmail/nossr50/util/ItemUtils.java +++ b/src/main/java/com/gmail/nossr50/util/ItemUtils.java @@ -35,12 +35,11 @@ import java.util.function.Predicate; import static java.util.Objects.requireNonNull; public final class ItemUtils { - /** - * This is a static utility class, therefore we don't want any instances of - * this class. Making the constructor private prevents accidents like that. - */ - private ItemUtils() {} + private ItemUtils() { + // private constructor + } + // Reflection for setItemName only available in newer APIs private static final Method setItemName; static { @@ -899,7 +898,12 @@ public final class ItemUtils { * @param speed the speed that the item should travel * @return Dropped Item entity or null if invalid or cancelled */ - public static @Nullable Item spawnItemTowardsLocation(@Nullable Player player, @NotNull Location fromLocation, @NotNull Location toLocation, @NotNull ItemStack itemToSpawn, double speed, @NotNull ItemSpawnReason itemSpawnReason) { + public static @Nullable Item spawnItemTowardsLocation(@Nullable Player player, + @NotNull Location fromLocation, + @NotNull Location toLocation, + @NotNull ItemStack itemToSpawn, + double speed, + @NotNull ItemSpawnReason itemSpawnReason) { if (itemToSpawn.getType() == Material.AIR) { return null; } @@ -935,7 +939,10 @@ public final class ItemUtils { return spawnedItem; } - public static void spawnItemsFromCollection(@NotNull Player player, @NotNull Location location, @NotNull Collection drops, @NotNull ItemSpawnReason itemSpawnReason) { + public static void spawnItemsFromCollection(@NotNull Player player, + @NotNull Location location, + @NotNull Collection drops, + @NotNull ItemSpawnReason itemSpawnReason) { for (ItemStack drop : drops) { spawnItem(player, location, drop, itemSpawnReason); } @@ -949,7 +956,11 @@ public final class ItemUtils { * @param drops collection to iterate over * @param sizeLimit the number of drops to process */ - public static void spawnItemsFromCollection(@Nullable Player player, @NotNull Location location, @NotNull Collection drops, @NotNull ItemSpawnReason itemSpawnReason, int sizeLimit) { + public static void spawnItemsFromCollection(@Nullable Player player, + @NotNull Location location, + @NotNull Collection drops, + @NotNull ItemSpawnReason itemSpawnReason, + int sizeLimit) { ItemStack[] arrayDrops = drops.toArray(new ItemStack[0]); for(int i = 0; i < sizeLimit-1; i++) { diff --git a/src/test/java/com/gmail/nossr50/skills/woodcutting/WoodcuttingTest.java b/src/test/java/com/gmail/nossr50/skills/woodcutting/WoodcuttingTest.java index 6e533fbe8..46b615a19 100644 --- a/src/test/java/com/gmail/nossr50/skills/woodcutting/WoodcuttingTest.java +++ b/src/test/java/com/gmail/nossr50/skills/woodcutting/WoodcuttingTest.java @@ -17,6 +17,9 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.Mockito; +import java.util.Collections; +import java.util.List; + import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; @@ -68,7 +71,8 @@ class WoodcuttingTest extends MMOTestEnvironment { // wire block Mockito.when(blockState.getBlock()).thenReturn(block); - Mockito.when(blockState.getBlock().getDrops(any())).thenReturn(null); + // return empty collection if ItemStack + Mockito.when(blockState.getBlock().getDrops(any())).thenReturn(Collections.EMPTY_LIST); Mockito.when(blockState.getType()).thenReturn(Material.OAK_LOG); woodcuttingManager.processBonusDropCheck(blockState);