From 5632bf8bad73fbdf242bdfee74bf1016026585a0 Mon Sep 17 00:00:00 2001 From: XiaoMoMi <70987828+Xiao-MoMi@users.noreply.github.com> Date: Fri, 6 Sep 2024 01:48:07 +0800 Subject: [PATCH] Fix some bugs --- README.md | 2 +- .../customcrops/api/action/builtin/ActionBreak.java | 4 ++-- .../customcrops/api/core/block/CropBlock.java | 4 ++++ .../api/core/mechanic/crop/CropConfigImpl.java | 9 ++++++--- .../api/core/wrapper/WrappedBreakEvent.java | 11 ++++++++++- .../customcrops/bukkit/item/BukkitItemManager.java | 10 +++++----- 6 files changed, 28 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 6696858..84a9bac 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ Get the artifact under /target folder ## Support the developer Polymart: https://polymart.org/resource/customfishing.2723 \ -Afdian: https://afdian.net/@xiaomomi +Afdian: https://afdian.com/@xiaomomi ## CustomCrops API diff --git a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionBreak.java b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionBreak.java index 1608f50..91629a6 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionBreak.java +++ b/api/src/main/java/net/momirealms/customcrops/api/action/builtin/ActionBreak.java @@ -83,9 +83,9 @@ public class ActionBreak extends AbstractBuiltInAction { if (player != null) { EquipmentSlot slot = requireNonNull(context.arg(ContextKeys.SLOT)); ItemStack itemStack = player.getInventory().getItem(slot); - state.type().onBreak(new WrappedBreakEvent(player, null, world, location, stageConfig.stageID(), itemStack, plugin.getItemManager().id(itemStack), BreakReason.ACTION, dummyCancellable)); + state.type().onBreak(new WrappedBreakEvent(player, null, context.arg(ContextKeys.SLOT), location, stageConfig.stageID(), itemStack, plugin.getItemManager().id(itemStack), BreakReason.ACTION, world, dummyCancellable)); } else { - state.type().onBreak(new WrappedBreakEvent(null, null, world, location, stageConfig.stageID(), null, null, BreakReason.ACTION, dummyCancellable)); + state.type().onBreak(new WrappedBreakEvent(null, null, null, location, stageConfig.stageID(), null, null, BreakReason.ACTION, world, dummyCancellable)); } if (dummyCancellable.isCancelled()) { return; diff --git a/api/src/main/java/net/momirealms/customcrops/api/core/block/CropBlock.java b/api/src/main/java/net/momirealms/customcrops/api/core/block/CropBlock.java index ca8b120..400ac53 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/core/block/CropBlock.java +++ b/api/src/main/java/net/momirealms/customcrops/api/core/block/CropBlock.java @@ -45,6 +45,7 @@ import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.entity.Player; +import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; import java.util.List; @@ -103,6 +104,9 @@ public class CropBlock extends AbstractCustomCropsBlock { final Player player = event.playerBreaker(); Context context = Context.player(player); + if (event.hand() != null) { + context.arg(ContextKeys.SLOT, event.hand()); + } context.updateLocation(location); diff --git a/api/src/main/java/net/momirealms/customcrops/api/core/mechanic/crop/CropConfigImpl.java b/api/src/main/java/net/momirealms/customcrops/api/core/mechanic/crop/CropConfigImpl.java index d62ba32..471ddfd 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/core/mechanic/crop/CropConfigImpl.java +++ b/api/src/main/java/net/momirealms/customcrops/api/core/mechanic/crop/CropConfigImpl.java @@ -93,8 +93,11 @@ public class CropConfigImpl implements CropConfig { point2Stages.put(config.point(), config); navigablePoint2Stages.put(config.point(), config); String stageID = config.stageID(); - id2Stages.put(stageID, config); - stageIDs.add(stageID); + if (stageID != null) { + id2Stages.put(stageID, config); + stageIDs.add(stageID); + cropStageWithModelMap.put(config.point(), config); + } } CropStageConfig tempConfig = null; for (int i = 0; i <= maxPoints; i++) { @@ -206,7 +209,7 @@ public class CropConfigImpl implements CropConfig { @Override public CropStageConfig stageWithModelByPoint(int point) { - return cropStageWithModelMap.get(Math.min(maxPoints, point)); + return cropStageWithModelMap.get(point); } @Override diff --git a/api/src/main/java/net/momirealms/customcrops/api/core/wrapper/WrappedBreakEvent.java b/api/src/main/java/net/momirealms/customcrops/api/core/wrapper/WrappedBreakEvent.java index 5d28aac..fa463a8 100644 --- a/api/src/main/java/net/momirealms/customcrops/api/core/wrapper/WrappedBreakEvent.java +++ b/api/src/main/java/net/momirealms/customcrops/api/core/wrapper/WrappedBreakEvent.java @@ -24,6 +24,7 @@ import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.event.Cancellable; +import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -39,22 +40,25 @@ public class WrappedBreakEvent { private final Cancellable event; private final CustomCropsWorld world; private final BreakReason reason; + private final EquipmentSlot hand; public WrappedBreakEvent( @Nullable Entity entityBreaker, @Nullable Block blockBreaker, - CustomCropsWorld world, + @Nullable EquipmentSlot hand, Location location, String brokenID, ItemStack itemInHand, String itemID, BreakReason reason, + CustomCropsWorld world, Cancellable event ) { this.entity = entityBreaker; this.block = blockBreaker; this.location = location; this.brokenID = brokenID; + this.hand = hand; this.itemInHand = itemInHand; this.itemID = itemID; this.event = event; @@ -92,6 +96,11 @@ public class WrappedBreakEvent { return itemID; } + @Nullable + public EquipmentSlot hand() { + return hand; + } + public boolean isCancelled() { return event.isCancelled(); } diff --git a/plugin/src/main/java/net/momirealms/customcrops/bukkit/item/BukkitItemManager.java b/plugin/src/main/java/net/momirealms/customcrops/bukkit/item/BukkitItemManager.java index 1d73b2d..7d5cf9d 100644 --- a/plugin/src/main/java/net/momirealms/customcrops/bukkit/item/BukkitItemManager.java +++ b/plugin/src/main/java/net/momirealms/customcrops/bukkit/item/BukkitItemManager.java @@ -466,7 +466,7 @@ public class BukkitItemManager extends AbstractItemManager { String itemID = id(itemInHand); CustomCropsWorld world = optionalWorld.get(); - WrappedBreakEvent wrapped = new WrappedBreakEvent(player, null, world, location, brokenID, itemInHand, itemID, BreakReason.BREAK, event); + WrappedBreakEvent wrapped = new WrappedBreakEvent(player, null, EquipmentSlot.HAND, location, brokenID, itemInHand, itemID, BreakReason.BREAK, world, event); CustomCropsBlock customCropsBlock = Registries.BLOCKS.get(brokenID); if (customCropsBlock != null) { customCropsBlock.onBreak(wrapped); @@ -481,7 +481,7 @@ public class BukkitItemManager extends AbstractItemManager { } CustomCropsWorld world = optionalWorld.get(); - WrappedBreakEvent wrapped = new WrappedBreakEvent(null, null, world, location, brokenID, null, null, BreakReason.PHYSICS, event); + WrappedBreakEvent wrapped = new WrappedBreakEvent(null, null, null, location, brokenID, null, null, BreakReason.PHYSICS, world, event); CustomCropsBlock customCropsBlock = Registries.BLOCKS.get(brokenID); if (customCropsBlock != null) { customCropsBlock.onBreak(wrapped); @@ -496,7 +496,7 @@ public class BukkitItemManager extends AbstractItemManager { } CustomCropsWorld world = optionalWorld.get(); - WrappedBreakEvent wrapped = new WrappedBreakEvent(entity, null, world, location, brokenID, null, null, BreakReason.TRAMPLE, event); + WrappedBreakEvent wrapped = new WrappedBreakEvent(entity, null, null, location, brokenID, null, null, BreakReason.TRAMPLE, world, event); CustomCropsBlock customCropsBlock = Registries.BLOCKS.get(brokenID); if (customCropsBlock != null) { customCropsBlock.onBreak(wrapped); @@ -511,7 +511,7 @@ public class BukkitItemManager extends AbstractItemManager { } CustomCropsWorld world = optionalWorld.get(); - WrappedBreakEvent wrapped = new WrappedBreakEvent(entity, null, world, location, brokenID, null, null, BreakReason.EXPLODE, event); + WrappedBreakEvent wrapped = new WrappedBreakEvent(entity, null, null, location, brokenID, null, null, BreakReason.EXPLODE, world, event); CustomCropsBlock customCropsBlock = Registries.BLOCKS.get(brokenID); if (customCropsBlock != null) { customCropsBlock.onBreak(wrapped); @@ -526,7 +526,7 @@ public class BukkitItemManager extends AbstractItemManager { } CustomCropsWorld world = optionalWorld.get(); - WrappedBreakEvent wrapped = new WrappedBreakEvent(null, block, world, location, brokenID, null, null, BreakReason.EXPLODE, event); + WrappedBreakEvent wrapped = new WrappedBreakEvent(null, block, null, location, brokenID, null, null, BreakReason.EXPLODE, world, event); CustomCropsBlock customCropsBlock = Registries.BLOCKS.get(brokenID); if (customCropsBlock != null) { customCropsBlock.onBreak(wrapped);