From cb612da69e8f43c70789159b692cabf401dcad44 Mon Sep 17 00:00:00 2001 From: Aya <31237389+tal5@users.noreply.github.com> Date: Thu, 20 Jul 2023 13:44:12 +0200 Subject: [PATCH] Fishing helper cleanup (#2506) * Initial update/cleanup * Naming fixes * `getRandomReward` cleanups --- .../denizen/nms/interfaces/FishingHelper.java | 20 +--- .../nms/v1_20/helpers/FishingHelperImpl.java | 105 ++++++++---------- 2 files changed, 51 insertions(+), 74 deletions(-) diff --git a/plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/FishingHelper.java b/plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/FishingHelper.java index 1e0bfd90d1..7032e79f1c 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/FishingHelper.java +++ b/plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/FishingHelper.java @@ -13,23 +13,13 @@ enum CatchType {NONE, DEFAULT, JUNK, TREASURE, FISH} FishHook spawnHook(Location location, Player player); - default FishHook getHookFrom(Player player) { - throw new UnsupportedOperationException(); - } + FishHook getHookFrom(Player player); - default void setNibble(FishHook hook, int ticks) { - throw new UnsupportedOperationException(); - } + void setNibble(FishHook hook, int ticks); - default void setHookTime(FishHook hook, int ticks) { - throw new UnsupportedOperationException(); - } + void setHookTime(FishHook hook, int ticks); - default int getLureTime(FishHook hook) { - throw new UnsupportedOperationException(); - } + int getLureTime(FishHook hook); - default void setLureTime(FishHook hook, int ticks) { - throw new UnsupportedOperationException(); - } + void setLureTime(FishHook hook, int ticks); } diff --git a/v1_20/src/main/java/com/denizenscript/denizen/nms/v1_20/helpers/FishingHelperImpl.java b/v1_20/src/main/java/com/denizenscript/denizen/nms/v1_20/helpers/FishingHelperImpl.java index a37c7fdb9a..ff693ac965 100644 --- a/v1_20/src/main/java/com/denizenscript/denizen/nms/v1_20/helpers/FishingHelperImpl.java +++ b/v1_20/src/main/java/com/denizenscript/denizen/nms/v1_20/helpers/FishingHelperImpl.java @@ -2,8 +2,8 @@ import com.denizenscript.denizen.nms.interfaces.FishingHelper; import com.denizenscript.denizen.nms.v1_20.ReflectionMappingsInfo; -import com.denizenscript.denizencore.utilities.debugging.Debug; import com.denizenscript.denizencore.utilities.ReflectionHelper; +import com.denizenscript.denizencore.utilities.debugging.Debug; import com.google.common.collect.Maps; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; @@ -14,11 +14,8 @@ import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.item.enchantment.Enchantments; import net.minecraft.world.level.storage.loot.BuiltInLootTables; -import net.minecraft.world.level.storage.loot.LootContext; -import net.minecraft.world.level.storage.loot.LootDataManager; import net.minecraft.world.level.storage.loot.LootParams; import net.minecraft.world.level.storage.loot.parameters.LootContextParam; -import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.phys.Vec3; import org.bukkit.Location; @@ -38,56 +35,46 @@ public class FishingHelperImpl implements FishingHelper { @Override public org.bukkit.inventory.ItemStack getResult(FishHook fishHook, CatchType catchType) { - ItemStack result = null; FishingHook nmsHook = ((CraftFishHook) fishHook).getHandle(); - if (catchType == CatchType.DEFAULT) { - float f = ((CraftWorld) fishHook.getWorld()).getHandle().random.nextFloat(); - int i = EnchantmentHelper.getMobLooting(nmsHook.getPlayerOwner()); - int j = EnchantmentHelper.getEnchantmentLevel(Enchantments.FISHING_LUCK, nmsHook.getPlayerOwner()); - float f1 = 0.1F - (float) i * 0.025F - (float) j * 0.01F; - float f2 = 0.05F + (float) i * 0.01F - (float) j * 0.01F; - - f1 = Mth.clamp(f1, 0.0F, 1.0F); - f2 = Mth.clamp(f2, 0.0F, 1.0F); - if (f < f1) { - result = catchRandomJunk(nmsHook); - } - else { - f -= f1; - if (f < f2) { - result = catchRandomTreasure(nmsHook); + ItemStack result = switch (catchType) { + case DEFAULT -> { + float f = ((CraftWorld) fishHook.getWorld()).getHandle().random.nextFloat(); + int i = EnchantmentHelper.getMobLooting(nmsHook.getPlayerOwner()); + int j = EnchantmentHelper.getEnchantmentLevel(Enchantments.FISHING_LUCK, nmsHook.getPlayerOwner()); + float f1 = 0.1F - (float) i * 0.025F - (float) j * 0.01F; + float f2 = 0.05F + (float) i * 0.01F - (float) j * 0.01F; + + f1 = Mth.clamp(f1, 0.0F, 1.0F); + f2 = Mth.clamp(f2, 0.0F, 1.0F); + if (f < f1) { + yield catchRandomJunk(nmsHook); } else { - result = catchRandomFish(nmsHook); + f -= f1; + if (f < f2) { + yield catchRandomTreasure(nmsHook); + } + else { + yield catchRandomFish(nmsHook); + } } } - } - else if (catchType == CatchType.JUNK) { - result = catchRandomJunk(nmsHook); - } - else if (catchType == CatchType.TREASURE) { - result = catchRandomTreasure(nmsHook); - } - else if (catchType == CatchType.FISH) { - result = catchRandomFish(nmsHook); - } - if (result != null) { - return CraftItemStack.asBukkitCopy(result); - } - else { - return null; - } + case JUNK -> catchRandomJunk(nmsHook); + case TREASURE -> catchRandomTreasure(nmsHook); + case FISH -> catchRandomFish(nmsHook); + default -> null; + }; + return result != null ? CraftItemStack.asBukkitCopy(result) : null; } - public ItemStack getRandomReward(FishingHook hook, ResourceLocation key) { - ServerLevel worldServer = (ServerLevel) hook.level(); + public ItemStack getRandomReward(FishingHook nmsHook, ResourceLocation key) { + ServerLevel nmsWorld = (ServerLevel) nmsHook.level(); Map, Object> params = Maps.newIdentityHashMap(); - params.put(LootContextParams.ORIGIN, new Vec3(hook.getX(), hook.getY(), hook.getZ())); + params.put(LootContextParams.ORIGIN, new Vec3(nmsHook.getX(), nmsHook.getY(), nmsHook.getZ())); params.put(LootContextParams.TOOL, new ItemStack(Items.FISHING_ROD)); - LootParams playerFishEvent2 = new LootParams(worldServer, params, Maps.newHashMap(), 0); - LootDataManager registry = worldServer.getServer().getLootData(); - List itemStacks = registry.getLootTable(key).getRandomItems(playerFishEvent2); - return itemStacks.get(worldServer.random.nextInt(itemStacks.size())); + LootParams nmsLootParams = new LootParams(nmsWorld, params, Maps.newHashMap(), 0); + List nmsItems = nmsWorld.getServer().getLootData().getLootTable(key).getRandomItems(nmsLootParams); + return nmsItems.get(nmsWorld.random.nextInt(nmsItems.size())); } @Override @@ -110,24 +97,24 @@ private ItemStack catchRandomFish(FishingHook fishHook) { return getRandomReward(fishHook, BuiltInLootTables.FISHING_FISH); } - public static Field FISHING_HOOK_NIBBLE_SETTER = ReflectionHelper.getFields(FishingHook.class).get(ReflectionMappingsInfo.FishingHook_nibble, int.class); - public static Field FISHING_HOOK_LURE_TIME_SETTER = ReflectionHelper.getFields(FishingHook.class).get(ReflectionMappingsInfo.FishingHook_timeUntilLured, int.class); - public static Field FISHING_HOOK_HOOK_TIME_SETTER = ReflectionHelper.getFields(FishingHook.class).get(ReflectionMappingsInfo.FishingHook_timeUntilHooked, int.class); + public static final Field FISHING_HOOK_NIBBLE = ReflectionHelper.getFields(FishingHook.class).get(ReflectionMappingsInfo.FishingHook_nibble, int.class); + public static final Field FISHING_HOOK_LURE_TIME = ReflectionHelper.getFields(FishingHook.class).get(ReflectionMappingsInfo.FishingHook_timeUntilLured, int.class); + public static final Field FISHING_HOOK_HOOK_TIME = ReflectionHelper.getFields(FishingHook.class).get(ReflectionMappingsInfo.FishingHook_timeUntilHooked, int.class); @Override public FishHook getHookFrom(Player player) { - FishingHook hook = ((CraftPlayer) player).getHandle().fishing; - if (hook == null) { + FishingHook nmsHook = ((CraftPlayer) player).getHandle().fishing; + if (nmsHook == null) { return null; } - return (FishHook) hook.getBukkitEntity(); + return (FishHook) nmsHook.getBukkitEntity(); } @Override public void setNibble(FishHook hook, int ticks) { - FishingHook nmsEntity = ((CraftFishHook) hook).getHandle(); + FishingHook nmsHook = ((CraftFishHook) hook).getHandle(); try { - FISHING_HOOK_NIBBLE_SETTER.setInt(nmsEntity, ticks); + FISHING_HOOK_NIBBLE.setInt(nmsHook, ticks); } catch (Throwable ex) { Debug.echoError(ex); @@ -136,9 +123,9 @@ public void setNibble(FishHook hook, int ticks) { @Override public void setHookTime(FishHook hook, int ticks) { - FishingHook nmsEntity = ((CraftFishHook) hook).getHandle(); + FishingHook nmsHook = ((CraftFishHook) hook).getHandle(); try { - FISHING_HOOK_HOOK_TIME_SETTER.setInt(nmsEntity, ticks); + FISHING_HOOK_HOOK_TIME.setInt(nmsHook, ticks); } catch (Throwable ex) { Debug.echoError(ex); @@ -147,9 +134,9 @@ public void setHookTime(FishHook hook, int ticks) { @Override public int getLureTime(FishHook hook) { - FishingHook nmsEntity = ((CraftFishHook) hook).getHandle(); + FishingHook nmsHook = ((CraftFishHook) hook).getHandle(); try { - return FISHING_HOOK_LURE_TIME_SETTER.getInt(nmsEntity); + return FISHING_HOOK_LURE_TIME.getInt(nmsHook); } catch (Throwable ex) { Debug.echoError(ex); @@ -159,9 +146,9 @@ public int getLureTime(FishHook hook) { @Override public void setLureTime(FishHook hook, int ticks) { - FishingHook nmsEntity = ((CraftFishHook) hook).getHandle(); + FishingHook nmsHook = ((CraftFishHook) hook).getHandle(); try { - FISHING_HOOK_LURE_TIME_SETTER.setInt(nmsEntity, ticks); + FISHING_HOOK_LURE_TIME.setInt(nmsHook, ticks); } catch (Throwable ex) { Debug.echoError(ex);