From 7d85b89563f5d99ca74cd1873969ce614674c122 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Wed, 12 Feb 2025 21:33:59 +0800 Subject: [PATCH 1/9] =?UTF-8?q?feat(bukkit):=20=E6=B7=BB=E5=8A=A0=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E6=96=B9=E5=9D=97=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 BlockStartBreakEvent 和 CustomBlockBreakEvent 类 - 在 BlockEventListener 中添加自定义方块破坏事件的处理 - 在 PacketConsumers 中添加自定义方块开始破坏事件的处理 - 优化 BlockStateUtils 中的方块 ID 获取方法 --- .../api/event/BlockStartBreakEvent.java | 65 ++++++++++++++++ .../api/event/CustomBlockBreakEvent.java | 74 +++++++++++++++++++ .../bukkit/api/event/CustomBlockEvent.java | 10 +++ .../bukkit/block/BlockEventListener.java | 17 +++-- .../plugin/network/PacketConsumers.java | 12 +++ .../bukkit/util/BlockStateUtils.java | 15 +++- 6 files changed, 185 insertions(+), 8 deletions(-) create mode 100644 bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/BlockStartBreakEvent.java create mode 100644 bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockBreakEvent.java create mode 100644 bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockEvent.java diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/BlockStartBreakEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/BlockStartBreakEvent.java new file mode 100644 index 000000000..27cd56cc7 --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/BlockStartBreakEvent.java @@ -0,0 +1,65 @@ +package net.momirealms.craftengine.bukkit.api.event; + +import net.momirealms.craftengine.bukkit.util.BlockStateUtils; +import net.momirealms.craftengine.core.util.Key; +import net.momirealms.craftengine.core.world.BlockPos; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; + +public class BlockStartBreakEvent extends Event implements Cancellable { + private static final HandlerList handlerList = new HandlerList(); + private boolean cancelled; + private final Key blockId; + private final Location location; + private final Player optionalPlayer; + + public BlockStartBreakEvent(int stateId, Location location, Player optionalPlayer) { + super(true); + this.blockId = BlockStateUtils.getRealBlockIdFromStateId(stateId); + this.location = location; + this.optionalPlayer = optionalPlayer; + } + + public BlockPos blockPos() { + return new BlockPos(this.location.getBlockX(), this.location.getBlockY(), this.location.getBlockZ()); + } + + public Location location() { + return location; + } + + public Player optionalPlayer() { + return optionalPlayer; + } + + public Key blockId() { + return blockId; + } + + public boolean isCustomBlock() { + return blockId.namespace().equals("craftengine"); + } + + public static HandlerList getHandlerList() { + return handlerList; + } + + @Override + public @NotNull HandlerList getHandlers() { + return getHandlerList(); + } + + @Override + public boolean isCancelled() { + return this.cancelled; + } + + @Override + public void setCancelled(boolean cancel) { + this.cancelled = cancel; + } +} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockBreakEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockBreakEvent.java new file mode 100644 index 000000000..fff93b699 --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockBreakEvent.java @@ -0,0 +1,74 @@ +package net.momirealms.craftengine.bukkit.api.event; + +import net.momirealms.craftengine.core.block.BreakReason; +import net.momirealms.craftengine.core.block.CustomBlock; +import net.momirealms.craftengine.core.block.ImmutableBlockState; +import net.momirealms.craftengine.core.world.BlockPos; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public class CustomBlockBreakEvent extends Event implements Cancellable { + private static final HandlerList handlerList = new HandlerList(); + private boolean cancelled; + private final CustomBlock block; + private final ImmutableBlockState state; + private final Location location; + private final Player optionalPlayer; + private final BreakReason reason; + + public CustomBlockBreakEvent(ImmutableBlockState state, Location location, BreakReason reason, Player optionalPlayer) { + this.block = state.owner().value(); + this.state = state; + this.location = location; + this.optionalPlayer = optionalPlayer; + this.reason = reason; + } + + public CustomBlock block() { + return this.block; + } + + public BreakReason reason() { + return this.reason; + } + + public BlockPos blockPos() { + return new BlockPos(this.location.getBlockX(), this.location.getBlockY(), this.location.getBlockZ()); + } + + public Location location() { + return this.location; + } + + @Nullable + public Player optionalPlayer() { + return this.optionalPlayer; + } + + public ImmutableBlockState state() { + return this.state; + } + + public static HandlerList getHandlerList() { + return handlerList; + } + + @NotNull + public HandlerList getHandlers() { + return getHandlerList(); + } + + public boolean isCancelled() { + return this.cancelled; + } + + public void setCancelled(boolean cancel) { + this.cancelled = cancel; + } +} + diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockEvent.java new file mode 100644 index 000000000..9c5ef3cbe --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockEvent.java @@ -0,0 +1,10 @@ +package net.momirealms.craftengine.bukkit.api.event; + +import net.momirealms.craftengine.core.block.CustomBlock; + +public class CustomBlockEvent { + protected CustomBlock block; + + public CustomBlockEvent(CustomBlock block) { + } +} \ No newline at end of file diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BlockEventListener.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BlockEventListener.java index 2ccfa9e3d..15c41715a 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BlockEventListener.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BlockEventListener.java @@ -1,13 +1,12 @@ package net.momirealms.craftengine.bukkit.block; +import net.momirealms.craftengine.bukkit.api.event.CustomBlockBreakEvent; import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine; import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer; -import net.momirealms.craftengine.bukkit.util.BlockStateUtils; -import net.momirealms.craftengine.bukkit.util.EntityUtils; -import net.momirealms.craftengine.bukkit.util.NoteBlockChainUpdateUtils; -import net.momirealms.craftengine.bukkit.util.Reflections; +import net.momirealms.craftengine.bukkit.util.*; import net.momirealms.craftengine.bukkit.world.BukkitWorld; import net.momirealms.craftengine.bukkit.world.BukkitWorldManager; +import net.momirealms.craftengine.core.block.BreakReason; import net.momirealms.craftengine.core.block.EmptyBlock; import net.momirealms.craftengine.core.block.ImmutableBlockState; import net.momirealms.craftengine.core.block.PushReaction; @@ -16,6 +15,7 @@ import net.momirealms.craftengine.core.entity.player.InteractionHand; import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.item.ItemKeys; import net.momirealms.craftengine.core.loot.parameter.LootParameters; +import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.config.ConfigManager; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.context.ContextHolder; @@ -93,7 +93,10 @@ public class BlockEventListener implements Listener { } } - @EventHandler(ignoreCancelled = true) + @EventHandler( + ignoreCancelled = true, + priority = EventPriority.LOWEST + ) public void onPlayerBreak(BlockBreakEvent event) { org.bukkit.block.Block block = event.getBlock(); Object blockState = BlockStateUtils.blockDataToBlockState(block.getBlockData()); @@ -102,6 +105,9 @@ public class BlockEventListener implements Listener { ImmutableBlockState state = manager.getImmutableBlockStateUnsafe(stateId); if (!state.isEmpty()) { Location location = block.getLocation(); + CustomBlockBreakEvent customBreakEvent = new CustomBlockBreakEvent(state, location, BreakReason.PLAYER_BREAK, event.getPlayer()); + boolean isCancelled = EventUtils.fireAndCheckCancel(customBreakEvent); + if (isCancelled) event.setCancelled(true); net.momirealms.craftengine.core.world.World world = new BukkitWorld(location.getWorld()); // handle waterlogged blocks @SuppressWarnings("unchecked") @@ -129,6 +135,7 @@ public class BlockEventListener implements Listener { return; } // drop items + if (isCancelled) return; ContextHolder.Builder builder = ContextHolder.builder(); builder.withParameter(LootParameters.LOCATION, vec3d); builder.withParameter(LootParameters.PLAYER, plugin.adapt(player)); diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java index 86e42bb67..4216f7339 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java @@ -3,6 +3,7 @@ package net.momirealms.craftengine.bukkit.plugin.network; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import it.unimi.dsi.fastutil.ints.IntList; +import net.momirealms.craftengine.bukkit.api.event.BlockStartBreakEvent; import net.momirealms.craftengine.bukkit.block.BukkitBlockManager; import net.momirealms.craftengine.bukkit.entity.furniture.BukkitFurnitureManager; import net.momirealms.craftengine.bukkit.entity.furniture.LoadedFurniture; @@ -181,6 +182,17 @@ public class PacketConsumers { Object serverLevel = Reflections.field$CraftWorld$ServerLevel.get(world); Object blockState = Reflections.method$BlockGetter$getBlockState.invoke(serverLevel, blockPos); int stateId = BlockStateUtils.blockStateToId(blockState); + BlockStartBreakEvent BlockStartBreakEvent = new BlockStartBreakEvent( + stateId, + new Location(world, pos.x(), pos.y(), pos.z()), + platformPlayer + ); + if (EventUtils.fireAndCheckCancel(BlockStartBreakEvent) && player.isCreativeMode()) { + if (player.isMiningBlock()) { + player.stopMiningBlock(); + } + return; + } // not a custom block if (BlockStateUtils.isVanillaBlock(stateId)) { if (ConfigManager.enableSoundSystem()) { diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/BlockStateUtils.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/BlockStateUtils.java index 0325671bc..ff27ae340 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/BlockStateUtils.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/BlockStateUtils.java @@ -35,10 +35,19 @@ public class BlockStateUtils { public static Key getRealBlockId(Block block) { BlockData data = block.getBlockData(); Object blockState = blockDataToBlockState(data); + return getRealBlockIdFromState(blockState); + } + + public static Key getRealBlockIdFromStateId(int stateId) { + Object blockState = idToBlockState(stateId); Object owner = getBlockOwner(blockState); - String id = owner.toString(); - int first = id.indexOf('{'); - int last = id.indexOf('}'); + return getRealBlockIdFromState(owner); + } + + public static Key getRealBlockIdFromState(Object blockState) { + String id = blockState.toString(); + int first = id.indexOf(123); + int last = id.indexOf(125); if (first != -1 && last != -1 && last > first) { String blockId = id.substring(first + 1, last); return Key.of(blockId); From 2acbb42d22cd48b209420f9776f91dd446c04fb3 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Wed, 12 Feb 2025 22:00:47 +0800 Subject: [PATCH 2/9] =?UTF-8?q?refactor(bukkit):=20=E4=BC=98=E5=8C=96=20Bl?= =?UTF-8?q?ockStateUtils=20=E4=B8=AD=E7=9A=84=E4=BB=A3=E7=A0=81=E5=8F=AF?= =?UTF-8?q?=E8=AF=BB=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将 getRealBlockIdFromState 方法中的 magic number 123 和 125替换为对应的字符 '{' 和 '}' - 这个改动提高了代码的可读性和可维护性,避免了直接使用不直观的数字 --- .../momirealms/craftengine/bukkit/util/BlockStateUtils.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/BlockStateUtils.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/BlockStateUtils.java index ff27ae340..8baa2cdc6 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/BlockStateUtils.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/BlockStateUtils.java @@ -46,8 +46,8 @@ public class BlockStateUtils { public static Key getRealBlockIdFromState(Object blockState) { String id = blockState.toString(); - int first = id.indexOf(123); - int last = id.indexOf(125); + int first = id.indexOf('{'); + int last = id.indexOf('}'); if (first != -1 && last != -1 && last > first) { String blockId = id.substring(first + 1, last); return Key.of(blockId); From 9aa1a57aea8d4fd92acf5ee02582614c7a6f8530 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Wed, 12 Feb 2025 22:06:24 +0800 Subject: [PATCH 3/9] =?UTF-8?q?refactor(bukkit):=20=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E6=96=B9=E5=9D=97=E7=A0=B4=E5=9D=8F=E4=BA=8B=E4=BB=B6=E5=B9=B6?= =?UTF-8?q?=E4=BC=98=E5=8C=96=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除 CustomBlockBreakEvent 中的 BreakReason 参数 - 更新 BlockStartBreakEvent 中的 optionalPlayer 方法返回类型 - 优化 CustomBlockBreakEvent 类的结构和内容 --- .../bukkit/api/event/BlockStartBreakEvent.java | 2 +- .../bukkit/api/event/CustomBlockBreakEvent.java | 16 +++------------- .../bukkit/block/BlockEventListener.java | 2 +- 3 files changed, 5 insertions(+), 15 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/BlockStartBreakEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/BlockStartBreakEvent.java index 27cd56cc7..cf9de2c30 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/BlockStartBreakEvent.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/BlockStartBreakEvent.java @@ -32,6 +32,7 @@ public class BlockStartBreakEvent extends Event implements Cancellable { return location; } + @NotNull public Player optionalPlayer() { return optionalPlayer; } @@ -48,7 +49,6 @@ public class BlockStartBreakEvent extends Event implements Cancellable { return handlerList; } - @Override public @NotNull HandlerList getHandlers() { return getHandlerList(); } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockBreakEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockBreakEvent.java index fff93b699..74070fea4 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockBreakEvent.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockBreakEvent.java @@ -1,6 +1,5 @@ package net.momirealms.craftengine.bukkit.api.event; -import net.momirealms.craftengine.core.block.BreakReason; import net.momirealms.craftengine.core.block.CustomBlock; import net.momirealms.craftengine.core.block.ImmutableBlockState; import net.momirealms.craftengine.core.world.BlockPos; @@ -10,7 +9,6 @@ import org.bukkit.event.Cancellable; import org.bukkit.event.Event; import org.bukkit.event.HandlerList; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; public class CustomBlockBreakEvent extends Event implements Cancellable { private static final HandlerList handlerList = new HandlerList(); @@ -19,24 +17,18 @@ public class CustomBlockBreakEvent extends Event implements Cancellable { private final ImmutableBlockState state; private final Location location; private final Player optionalPlayer; - private final BreakReason reason; - public CustomBlockBreakEvent(ImmutableBlockState state, Location location, BreakReason reason, Player optionalPlayer) { + public CustomBlockBreakEvent(ImmutableBlockState state, Location location, Player optionalPlayer) { this.block = state.owner().value(); this.state = state; this.location = location; this.optionalPlayer = optionalPlayer; - this.reason = reason; } public CustomBlock block() { return this.block; } - public BreakReason reason() { - return this.reason; - } - public BlockPos blockPos() { return new BlockPos(this.location.getBlockX(), this.location.getBlockY(), this.location.getBlockZ()); } @@ -45,8 +37,7 @@ public class CustomBlockBreakEvent extends Event implements Cancellable { return this.location; } - @Nullable - public Player optionalPlayer() { + public @NotNull Player optionalPlayer() { return this.optionalPlayer; } @@ -58,8 +49,7 @@ public class CustomBlockBreakEvent extends Event implements Cancellable { return handlerList; } - @NotNull - public HandlerList getHandlers() { + public @NotNull HandlerList getHandlers() { return getHandlerList(); } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BlockEventListener.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BlockEventListener.java index 15c41715a..ba53f7519 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BlockEventListener.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BlockEventListener.java @@ -105,7 +105,7 @@ public class BlockEventListener implements Listener { ImmutableBlockState state = manager.getImmutableBlockStateUnsafe(stateId); if (!state.isEmpty()) { Location location = block.getLocation(); - CustomBlockBreakEvent customBreakEvent = new CustomBlockBreakEvent(state, location, BreakReason.PLAYER_BREAK, event.getPlayer()); + CustomBlockBreakEvent customBreakEvent = new CustomBlockBreakEvent(state, location, event.getPlayer()); boolean isCancelled = EventUtils.fireAndCheckCancel(customBreakEvent); if (isCancelled) event.setCancelled(true); net.momirealms.craftengine.core.world.World world = new BukkitWorld(location.getWorld()); From ca16d5a6096a32924a8c6edfdbd8a2696aa9be34 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Wed, 12 Feb 2025 22:43:27 +0800 Subject: [PATCH 4/9] =?UTF-8?q?feat(bukkit):=20=E6=B7=BB=E5=8A=A0=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E6=96=B9=E5=9D=97=E6=94=BE=E7=BD=AE=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6=E5=B9=B6=E9=87=8D=E6=9E=84=E6=96=B9=E5=9D=97=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 CustomBlockPlaceEvent 类用于处理自定义方块放置事件 - 重构 CustomBlockEvent 类,使其成为自定义方块事件的基类 - 修改 CustomBlockBreakEvent 类,使其继承自新的 CustomBlockEvent 基类 - 在 BlockItemBehavior 中添加对 CustomBlockPlaceEvent 的处理 --- .../api/event/CustomBlockBreakEvent.java | 56 +---------------- .../bukkit/api/event/CustomBlockEvent.java | 61 +++++++++++++++++-- .../api/event/CustomBlockPlaceEvent.java | 11 ++++ .../item/behavior/BlockItemBehavior.java | 10 +++ 4 files changed, 80 insertions(+), 58 deletions(-) create mode 100644 bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockPlaceEvent.java diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockBreakEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockBreakEvent.java index 74070fea4..aeec0a47d 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockBreakEvent.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockBreakEvent.java @@ -1,64 +1,12 @@ package net.momirealms.craftengine.bukkit.api.event; -import net.momirealms.craftengine.core.block.CustomBlock; import net.momirealms.craftengine.core.block.ImmutableBlockState; -import net.momirealms.craftengine.core.world.BlockPos; import org.bukkit.Location; import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; -import org.jetbrains.annotations.NotNull; - -public class CustomBlockBreakEvent extends Event implements Cancellable { - private static final HandlerList handlerList = new HandlerList(); - private boolean cancelled; - private final CustomBlock block; - private final ImmutableBlockState state; - private final Location location; - private final Player optionalPlayer; +public class CustomBlockBreakEvent extends CustomBlockEvent { public CustomBlockBreakEvent(ImmutableBlockState state, Location location, Player optionalPlayer) { - this.block = state.owner().value(); - this.state = state; - this.location = location; - this.optionalPlayer = optionalPlayer; - } - - public CustomBlock block() { - return this.block; - } - - public BlockPos blockPos() { - return new BlockPos(this.location.getBlockX(), this.location.getBlockY(), this.location.getBlockZ()); - } - - public Location location() { - return this.location; - } - - public @NotNull Player optionalPlayer() { - return this.optionalPlayer; - } - - public ImmutableBlockState state() { - return this.state; - } - - public static HandlerList getHandlerList() { - return handlerList; - } - - public @NotNull HandlerList getHandlers() { - return getHandlerList(); - } - - public boolean isCancelled() { - return this.cancelled; - } - - public void setCancelled(boolean cancel) { - this.cancelled = cancel; + super(state, location, optionalPlayer); } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockEvent.java index 9c5ef3cbe..fa386714b 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockEvent.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockEvent.java @@ -1,10 +1,63 @@ package net.momirealms.craftengine.bukkit.api.event; import net.momirealms.craftengine.core.block.CustomBlock; +import net.momirealms.craftengine.core.block.ImmutableBlockState; +import net.momirealms.craftengine.core.world.BlockPos; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; -public class CustomBlockEvent { - protected CustomBlock block; +public class CustomBlockEvent extends Event implements Cancellable { + private static final HandlerList handlerList = new HandlerList(); + private boolean cancelled; + private final CustomBlock block; + private final ImmutableBlockState state; + private final Location location; + private final Player optionalPlayer; - public CustomBlockEvent(CustomBlock block) { + public CustomBlockEvent(ImmutableBlockState state, Location location, Player optionalPlayer) { + this.block = state.owner().value(); + this.state = state; + this.location = location; + this.optionalPlayer = optionalPlayer; } -} \ No newline at end of file + + public CustomBlock block() { + return this.block; + } + + public BlockPos blockPos() { + return new BlockPos(this.location.getBlockX(), this.location.getBlockY(), this.location.getBlockZ()); + } + + public Location location() { + return this.location; + } + + public @NotNull Player optionalPlayer() { + return this.optionalPlayer; + } + + public ImmutableBlockState state() { + return this.state; + } + + public static HandlerList getHandlerList() { + return handlerList; + } + + public @NotNull HandlerList getHandlers() { + return getHandlerList(); + } + + public boolean isCancelled() { + return this.cancelled; + } + + public void setCancelled(boolean cancel) { + this.cancelled = cancel; + } +} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockPlaceEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockPlaceEvent.java new file mode 100644 index 000000000..269b3af1c --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockPlaceEvent.java @@ -0,0 +1,11 @@ +package net.momirealms.craftengine.bukkit.api.event; + +import net.momirealms.craftengine.core.block.ImmutableBlockState; +import org.bukkit.Location; +import org.bukkit.entity.Player; + +public class CustomBlockPlaceEvent extends CustomBlockEvent { + public CustomBlockPlaceEvent(ImmutableBlockState state, Location location, Player optionalPlayer) { + super(state, location, optionalPlayer); + } +} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/BlockItemBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/BlockItemBehavior.java index 7ab243057..48eb9695c 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/BlockItemBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/BlockItemBehavior.java @@ -1,7 +1,9 @@ package net.momirealms.craftengine.bukkit.item.behavior; import net.momirealms.craftengine.bukkit.api.CraftEngineBlocks; +import net.momirealms.craftengine.bukkit.api.event.CustomBlockPlaceEvent; import net.momirealms.craftengine.bukkit.block.BukkitBlockManager; +import net.momirealms.craftengine.bukkit.util.EventUtils; import net.momirealms.craftengine.bukkit.util.LocationUtils; import net.momirealms.craftengine.bukkit.util.Reflections; import net.momirealms.craftengine.core.block.CustomBlock; @@ -69,6 +71,14 @@ public class BlockItemBehavior extends ItemBehavior { BlockPos pos = placeContext.getClickedPos(); World world = (World) placeContext.getLevel().getHandle(); + CustomBlockPlaceEvent customBlockPlaceEvent = new CustomBlockPlaceEvent( + blockStateToPlace, + new Location(world, pos.x(), pos.y(), pos.z()), + (org.bukkit.entity.Player) placeContext.getPlayer().platformPlayer() + ); + if (EventUtils.fireAndCheckCancel(customBlockPlaceEvent)) { + return InteractionResult.FAIL; + } CraftEngineBlocks.place(new Location(world, pos.x(), pos.y(), pos.z()), blockStateToPlace, UpdateOption.UPDATE_ALL_IMMEDIATE); if (!player.isCreativeMode()) { From 310afc995c24c26c8a3875181d8a9887726a449a Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Thu, 13 Feb 2025 00:10:31 +0800 Subject: [PATCH 5/9] =?UTF-8?q?feat(bukkit):=20=E6=B7=BB=E5=8A=A0=E5=AE=B6?= =?UTF-8?q?=E5=85=B7=E7=9B=B8=E5=85=B3=E4=BA=8B=E4=BB=B6=E5=B9=B6=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E5=AE=B6=E5=85=B7=E4=BA=A4=E4=BA=92=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 FurnitureBreakEvent、FurnitureEvent、FurnitureInteractEvent等家具相关事件类 - 在 FurnitureItemBehavior 中添加家具放置事件处理逻辑 - 在 PacketConsumers 中添加家具破坏和交互事件处理 - 优化了 BlockStartBreakEvent、CustomBlockEvent 等事件类的命名和结构 --- .../api/event/BlockStartBreakEvent.java | 11 +++-- .../api/event/CustomBlockBreakEvent.java | 4 +- .../bukkit/api/event/CustomBlockEvent.java | 12 ++--- .../api/event/CustomBlockPlaceEvent.java | 4 +- .../bukkit/api/event/FurnitureBreakEvent.java | 10 +++++ .../bukkit/api/event/FurnitureEvent.java | 45 +++++++++++++++++++ .../api/event/FurnitureInteractEvent.java | 10 +++++ .../api/event/FurniturePlaceEndEvent.java | 34 ++++++++++++++ .../bukkit/api/event/FurniturePlaceEvent.java | 10 +++++ .../event/GenerateResourcePackEndEvent.java | 9 ++++ .../api/event/GenerateResourcePackEvent.java | 34 ++++++++++++++ .../event/GenerateResourcePackStartEvent.java | 23 ++++++++++ .../entity/furniture/LoadedFurniture.java | 4 ++ .../item/behavior/FurnitureItemBehavior.java | 28 +++++++++++- .../plugin/network/PacketConsumers.java | 6 +++ 15 files changed, 226 insertions(+), 18 deletions(-) create mode 100644 bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/FurnitureBreakEvent.java create mode 100644 bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/FurnitureEvent.java create mode 100644 bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/FurnitureInteractEvent.java create mode 100644 bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/FurniturePlaceEndEvent.java create mode 100644 bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/FurniturePlaceEvent.java create mode 100644 bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/GenerateResourcePackEndEvent.java create mode 100644 bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/GenerateResourcePackEvent.java create mode 100644 bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/GenerateResourcePackStartEvent.java diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/BlockStartBreakEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/BlockStartBreakEvent.java index cf9de2c30..1e56b10ec 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/BlockStartBreakEvent.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/BlockStartBreakEvent.java @@ -15,13 +15,13 @@ public class BlockStartBreakEvent extends Event implements Cancellable { private boolean cancelled; private final Key blockId; private final Location location; - private final Player optionalPlayer; + private final Player player; - public BlockStartBreakEvent(int stateId, Location location, Player optionalPlayer) { + public BlockStartBreakEvent(int stateId, Location location, Player player) { super(true); this.blockId = BlockStateUtils.getRealBlockIdFromStateId(stateId); this.location = location; - this.optionalPlayer = optionalPlayer; + this.player = player; } public BlockPos blockPos() { @@ -32,9 +32,8 @@ public class BlockStartBreakEvent extends Event implements Cancellable { return location; } - @NotNull - public Player optionalPlayer() { - return optionalPlayer; + public @NotNull Player player() { + return player; } public Key blockId() { diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockBreakEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockBreakEvent.java index aeec0a47d..ed178e255 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockBreakEvent.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockBreakEvent.java @@ -5,8 +5,8 @@ import org.bukkit.Location; import org.bukkit.entity.Player; public class CustomBlockBreakEvent extends CustomBlockEvent { - public CustomBlockBreakEvent(ImmutableBlockState state, Location location, Player optionalPlayer) { - super(state, location, optionalPlayer); + public CustomBlockBreakEvent(ImmutableBlockState state, Location location, Player player) { + super(state, location, player); } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockEvent.java index fa386714b..3861480fc 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockEvent.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockEvent.java @@ -10,19 +10,19 @@ import org.bukkit.event.Event; import org.bukkit.event.HandlerList; import org.jetbrains.annotations.NotNull; -public class CustomBlockEvent extends Event implements Cancellable { +public class CustomBlockEvent extends Event implements Cancellable { private static final HandlerList handlerList = new HandlerList(); private boolean cancelled; private final CustomBlock block; private final ImmutableBlockState state; private final Location location; - private final Player optionalPlayer; + private final Player player; - public CustomBlockEvent(ImmutableBlockState state, Location location, Player optionalPlayer) { + public CustomBlockEvent(ImmutableBlockState state, Location location, @NotNull Player player) { this.block = state.owner().value(); this.state = state; this.location = location; - this.optionalPlayer = optionalPlayer; + this.player = player; } public CustomBlock block() { @@ -37,8 +37,8 @@ public class CustomBlockEvent extends Event implements Cancellable { return this.location; } - public @NotNull Player optionalPlayer() { - return this.optionalPlayer; + public @NotNull Player player() { + return this.player; } public ImmutableBlockState state() { diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockPlaceEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockPlaceEvent.java index 269b3af1c..966e9d12d 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockPlaceEvent.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockPlaceEvent.java @@ -5,7 +5,7 @@ import org.bukkit.Location; import org.bukkit.entity.Player; public class CustomBlockPlaceEvent extends CustomBlockEvent { - public CustomBlockPlaceEvent(ImmutableBlockState state, Location location, Player optionalPlayer) { - super(state, location, optionalPlayer); + public CustomBlockPlaceEvent(ImmutableBlockState state, Location location, Player player) { + super(state, location, player); } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/FurnitureBreakEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/FurnitureBreakEvent.java new file mode 100644 index 000000000..87f692ab2 --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/FurnitureBreakEvent.java @@ -0,0 +1,10 @@ +package net.momirealms.craftengine.bukkit.api.event; + +import net.momirealms.craftengine.bukkit.entity.furniture.LoadedFurniture; +import org.bukkit.entity.Player; + +public class FurnitureBreakEvent extends FurnitureEvent { + public FurnitureBreakEvent(LoadedFurniture furniture, Player player) { + super(furniture, player); + } +} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/FurnitureEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/FurnitureEvent.java new file mode 100644 index 000000000..8cc875ae9 --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/FurnitureEvent.java @@ -0,0 +1,45 @@ +package net.momirealms.craftengine.bukkit.api.event; + +import net.momirealms.craftengine.bukkit.entity.furniture.LoadedFurniture; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public class FurnitureEvent extends Event implements Cancellable { + private static final HandlerList handlerList = new HandlerList(); + private boolean cancelled; + private final LoadedFurniture furniture; + private final Player player; + + public FurnitureEvent(LoadedFurniture furniture, @NotNull Player player) { + this.furniture = furniture; + this.player = player; + } + + public @Nullable LoadedFurniture furniture() { + return this.furniture; + } + + public @NotNull Player player() { + return this.player; + } + + public static HandlerList getHandlerList() { + return handlerList; + } + + public @NotNull HandlerList getHandlers() { + return getHandlerList(); + } + + public boolean isCancelled() { + return this.cancelled; + } + + public void setCancelled(boolean cancel) { + this.cancelled = cancel; + } +} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/FurnitureInteractEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/FurnitureInteractEvent.java new file mode 100644 index 000000000..f4699f2bf --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/FurnitureInteractEvent.java @@ -0,0 +1,10 @@ +package net.momirealms.craftengine.bukkit.api.event; + +import net.momirealms.craftengine.bukkit.entity.furniture.LoadedFurniture; +import org.bukkit.entity.Player; + +public class FurnitureInteractEvent extends FurnitureEvent { + public FurnitureInteractEvent(LoadedFurniture furniture, Player player) { + super(furniture, player); + } +} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/FurniturePlaceEndEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/FurniturePlaceEndEvent.java new file mode 100644 index 000000000..23d050ca8 --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/FurniturePlaceEndEvent.java @@ -0,0 +1,34 @@ +package net.momirealms.craftengine.bukkit.api.event; + +import net.momirealms.craftengine.bukkit.entity.furniture.LoadedFurniture; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; + +public class FurniturePlaceEndEvent extends Event { + private static final HandlerList handlerList = new HandlerList(); + private final LoadedFurniture furniture; + private final Player player; + + public FurniturePlaceEndEvent(LoadedFurniture furniture, @NotNull Player player) { + this.furniture = furniture; + this.player = player; + } + + public @NotNull LoadedFurniture furniture() { + return this.furniture; + } + + public @NotNull Player player() { + return this.player; + } + + public static HandlerList getHandlerList() { + return handlerList; + } + + public @NotNull HandlerList getHandlers() { + return getHandlerList(); + } +} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/FurniturePlaceEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/FurniturePlaceEvent.java new file mode 100644 index 000000000..eb9eb79a9 --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/FurniturePlaceEvent.java @@ -0,0 +1,10 @@ +package net.momirealms.craftengine.bukkit.api.event; + +import net.momirealms.craftengine.bukkit.entity.furniture.LoadedFurniture; +import org.bukkit.entity.Player; + +public class FurniturePlaceEvent extends FurnitureEvent { + public FurniturePlaceEvent(LoadedFurniture furniture, Player player) { + super(furniture, player); + } +} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/GenerateResourcePackEndEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/GenerateResourcePackEndEvent.java new file mode 100644 index 000000000..18f00411f --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/GenerateResourcePackEndEvent.java @@ -0,0 +1,9 @@ +package net.momirealms.craftengine.bukkit.api.event; + +import java.nio.file.Path; + +public class GenerateResourcePackEndEvent extends GenerateResourcePackEvent { + public GenerateResourcePackEndEvent(Path generatedPackPath, Path zipFile) { + super(generatedPackPath, zipFile); + } +} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/GenerateResourcePackEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/GenerateResourcePackEvent.java new file mode 100644 index 000000000..ab116afb2 --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/GenerateResourcePackEvent.java @@ -0,0 +1,34 @@ +package net.momirealms.craftengine.bukkit.api.event; + +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.jetbrains.annotations.NotNull; + +import java.nio.file.Path; + +public class GenerateResourcePackEvent extends Event { + private static final HandlerList handlerList = new HandlerList(); + private final Path generatedPackPath; + private final Path zipFile; + + public GenerateResourcePackEvent(Path generatedPackPath, Path zipFile) { + this.generatedPackPath = generatedPackPath; + this.zipFile = zipFile; + } + + public @NotNull Path generatedPackPath() { + return generatedPackPath; + } + + public @NotNull Path zipFile() { + return zipFile; + } + + public static HandlerList getHandlerList() { + return handlerList; + } + + public @NotNull HandlerList getHandlers() { + return getHandlerList(); + } +} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/GenerateResourcePackStartEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/GenerateResourcePackStartEvent.java new file mode 100644 index 000000000..3a7b9c465 --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/GenerateResourcePackStartEvent.java @@ -0,0 +1,23 @@ +package net.momirealms.craftengine.bukkit.api.event; + +import org.bukkit.event.Cancellable; + +import java.nio.file.Path; + +public class GenerateResourcePackStartEvent extends GenerateResourcePackEvent implements Cancellable { + private boolean cancelled; + + public GenerateResourcePackStartEvent(Path generatedPackPath, Path zipFile) { + super(generatedPackPath, zipFile); + } + + @Override + public boolean isCancelled() { + return this.cancelled; + } + + @Override + public void setCancelled(boolean cancel) { + this.cancelled = cancel; + } +} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/LoadedFurniture.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/LoadedFurniture.java index c753f725a..79b19ec46 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/LoadedFurniture.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/LoadedFurniture.java @@ -284,4 +284,8 @@ public class LoadedFurniture { this.addSeatEntity(seatEntity); seatEntity.addPassenger(player); } + + public Key getFurnitureId() { + return id; + } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/FurnitureItemBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/FurnitureItemBehavior.java index 5211baa62..cbe9b8775 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/FurnitureItemBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/FurnitureItemBehavior.java @@ -1,7 +1,11 @@ package net.momirealms.craftengine.bukkit.item.behavior; +import net.momirealms.craftengine.bukkit.api.event.FurniturePlaceEndEvent; +import net.momirealms.craftengine.bukkit.api.event.FurniturePlaceEvent; import net.momirealms.craftengine.bukkit.entity.furniture.BukkitFurnitureManager; +import net.momirealms.craftengine.bukkit.entity.furniture.LoadedFurniture; import net.momirealms.craftengine.bukkit.util.EntityUtils; +import net.momirealms.craftengine.bukkit.util.EventUtils; import net.momirealms.craftengine.core.block.BlockSounds; import net.momirealms.craftengine.core.entity.furniture.*; import net.momirealms.craftengine.core.entity.player.InteractionResult; @@ -16,6 +20,7 @@ import net.momirealms.craftengine.core.util.*; import net.momirealms.craftengine.core.world.Vec3d; import org.bukkit.Location; import org.bukkit.World; +import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.ItemDisplay; import org.bukkit.inventory.ItemStack; @@ -23,6 +28,7 @@ import org.bukkit.persistence.PersistentDataType; import org.bukkit.util.Transformation; import org.jetbrains.annotations.Nullable; import org.joml.Quaternionf; +import org.joml.Vector3d; import org.joml.Vector3f; import java.util.*; @@ -82,6 +88,13 @@ public class FurnitureItemBehavior extends ItemBehavior { if (!player.updateLastSuccessfulInteractionTick(gameTicks)) { return InteractionResult.FAIL; } + FurniturePlaceEvent furniturePlaceEvent = new FurniturePlaceEvent( + null, + (org.bukkit.entity.Player) player.platformPlayer() + ); + if (EventUtils.fireAndCheckCancel(furniturePlaceEvent)) { + return InteractionResult.FAIL; + } if (!player.isCreativeMode()) { Item item = context.getItem(); item.count(item.count() - 1); @@ -111,9 +124,9 @@ public class FurnitureItemBehavior extends ItemBehavior { } // spawn entity and load - EntityUtils.spawnEntity(world, new Location(world, finalPlacePosition.x(), finalPlacePosition.y(), finalPlacePosition.z()), EntityType.ITEM_DISPLAY, entity -> { + Quaternionf quaternion = QuaternionUtils.toQuaternionf(0, Math.toRadians(furnitureYaw), 0); + Entity furnitureEntity = EntityUtils.spawnEntity(world, new Location(world, finalPlacePosition.x(), finalPlacePosition.y(), finalPlacePosition.z()), EntityType.ITEM_DISPLAY, entity -> { ItemDisplay display = (ItemDisplay) entity; - Quaternionf quaternion = QuaternionUtils.toQuaternionf(0, Math.toRadians(furnitureYaw), 0); display.setTransformation( new Transformation( new Vector3f(), @@ -127,6 +140,17 @@ public class FurnitureItemBehavior extends ItemBehavior { BukkitFurnitureManager.instance().handleEntityLoadEarly(display); }); context.getLevel().playBlockSound(clickedPosition, sounds.placeSound(), 1f, 1f); + FurniturePlaceEndEvent furniturePlaceEndEvent = new FurniturePlaceEndEvent( + new LoadedFurniture(id, + furnitureEntity, + this, + anchorType, + new Vector3d(finalPlacePosition.x(), finalPlacePosition.y(), finalPlacePosition.z()), + quaternion + ), + (org.bukkit.entity.Player) player.platformPlayer() + ); + EventUtils.fireAndForget(furniturePlaceEndEvent); return InteractionResult.SUCCESS; } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java index 4216f7339..d63318a8e 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java @@ -4,6 +4,8 @@ import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import it.unimi.dsi.fastutil.ints.IntList; import net.momirealms.craftengine.bukkit.api.event.BlockStartBreakEvent; +import net.momirealms.craftengine.bukkit.api.event.FurnitureBreakEvent; +import net.momirealms.craftengine.bukkit.api.event.FurnitureInteractEvent; import net.momirealms.craftengine.bukkit.block.BukkitBlockManager; import net.momirealms.craftengine.bukkit.entity.furniture.BukkitFurnitureManager; import net.momirealms.craftengine.bukkit.entity.furniture.LoadedFurniture; @@ -564,12 +566,16 @@ public class PacketConsumers { BukkitCraftEngine.instance().scheduler().sync().run(() -> { if (actionType == Reflections.instance$ServerboundInteractPacket$ActionType$ATTACK) { if (furniture.isValid()) { + FurnitureBreakEvent furnitureBreakEvent = new FurnitureBreakEvent(furniture, serverPlayer.platformPlayer()); + if (EventUtils.fireAndCheckCancel(furnitureBreakEvent)) return; furniture.onPlayerDestroy(serverPlayer); } } else if (actionType == Reflections.instance$ServerboundInteractPacket$ActionType$INTERACT_AT) { if (player.isSneaking()) { return; } + FurnitureInteractEvent furnitureInteractEvent = new FurnitureInteractEvent(furniture, serverPlayer.platformPlayer()); + if (EventUtils.fireAndCheckCancel(furnitureInteractEvent)) return; furniture.getAvailableSeat(entityId).ifPresent(seatPos -> { if (furniture.occupySeat(seatPos)) { furniture.mountSeat(Objects.requireNonNull(player.getPlayer()), seatPos); From 40c86512107fe0ebfafabb841193e53ff6a45a8f Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Thu, 13 Feb 2025 02:31:13 +0800 Subject: [PATCH 6/9] =?UTF-8?q?feat(bukkit):=20=E6=B7=BB=E5=8A=A0=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E6=96=B9=E5=9D=97=E4=BA=A4=E4=BA=92=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6=20-=20=E6=96=B0=E5=A2=9E=20CustomBlockInteractEvent?= =?UTF-8?q?=20=E7=B1=BB=E7=94=A8=E4=BA=8E=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E6=96=B9=E5=9D=97=E4=BA=A4=E4=BA=92=E4=BA=8B=E4=BB=B6=20-=20?= =?UTF-8?q?=E5=9C=A8=20ItemEventListener=20=E4=B8=AD=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E6=96=B9=E5=9D=97=E4=BA=A4=E4=BA=92?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E7=9A=84=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91?= =?UTF-8?q?=20-=20=E5=BD=93=E7=8E=A9=E5=AE=B6=E4=BD=BF=E7=94=A8=E4=B8=BB?= =?UTF-8?q?=E6=89=8B=E5=8F=B3=E9=94=AE=E8=87=AA=E5=AE=9A=E4=B9=89=E6=96=B9?= =?UTF-8?q?=E5=9D=97=E6=97=B6=EF=BC=8C=E8=A7=A6=E5=8F=91=20CustomBlockInte?= =?UTF-8?q?ractEvent=20-=20=E5=A6=82=E6=9E=9C=E4=BA=8B=E4=BB=B6=E8=A2=AB?= =?UTF-8?q?=E5=8F=96=E6=B6=88=EF=BC=8C=E5=88=99=E5=8F=96=E6=B6=88=E7=8E=A9?= =?UTF-8?q?=E5=AE=B6=E7=9A=84=E4=BA=A4=E4=BA=92=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/event/CustomBlockInteractEvent.java | 12 +++++++++++ .../bukkit/item/ItemEventListener.java | 20 ++++++++++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockInteractEvent.java diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockInteractEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockInteractEvent.java new file mode 100644 index 000000000..f802ff1ff --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockInteractEvent.java @@ -0,0 +1,12 @@ +package net.momirealms.craftengine.bukkit.api.event; + +import net.momirealms.craftengine.core.block.ImmutableBlockState; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +public class CustomBlockInteractEvent extends CustomBlockEvent { + public CustomBlockInteractEvent(ImmutableBlockState state, Location location, @NotNull Player player) { + super(state, location, player); + } +} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/ItemEventListener.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/ItemEventListener.java index 214cc640a..036461741 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/ItemEventListener.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/ItemEventListener.java @@ -3,6 +3,7 @@ package net.momirealms.craftengine.bukkit.item; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.momirealms.craftengine.bukkit.api.CraftEngineBlocks; +import net.momirealms.craftengine.bukkit.api.event.CustomBlockInteractEvent; import net.momirealms.craftengine.bukkit.block.BukkitBlockManager; import net.momirealms.craftengine.bukkit.item.behavior.BlockItemBehavior; import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine; @@ -56,6 +57,24 @@ public class ItemEventListener implements Listener { Location interactionPoint = event.getInteractionPoint(); if (interactionPoint == null) return; Player bukkitPlayer = event.getPlayer(); + // TODO: 自定义方块交互事件 + Block clickedBlock = Objects.requireNonNull(event.getClickedBlock()); + if (event.getHand() == EquipmentSlot.HAND) { + Key blockKey = BlockStateUtils.getRealBlockId(clickedBlock); + if (blockKey.namespace().equals("craftengine")) { + int blockId = BlockStateUtils.blockDataToId(clickedBlock.getBlockData()); + ImmutableBlockState state = BukkitBlockManager.instance().getImmutableBlockState(blockId); + CustomBlockInteractEvent customBlockInteractEvent = new CustomBlockInteractEvent( + state, + clickedBlock.getLocation(), + bukkitPlayer + ); + if (EventUtils.fireAndCheckCancel(customBlockInteractEvent)) { + event.setCancelled(true); + return; + } + } + } BukkitServerPlayer player = this.plugin.adapt(bukkitPlayer); InteractionHand hand = event.getHand() == EquipmentSlot.HAND ? InteractionHand.MAIN_HAND : InteractionHand.OFF_HAND; if (hand == InteractionHand.OFF_HAND) { @@ -70,7 +89,6 @@ public class ItemEventListener implements Listener { if (itemInHand == null) return; Optional> customItem = itemInHand.getCustomItem(); - Block clickedBlock = Objects.requireNonNull(event.getClickedBlock()); Material material = itemInHand.getItem().getType(); // is custom item if (customItem.isPresent()) { From 5df5fa320fd0f33f7706f875963220dcec86741e Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Thu, 13 Feb 2025 02:31:25 +0800 Subject: [PATCH 7/9] =?UTF-8?q?feat(bukkit):=20=E6=B7=BB=E5=8A=A0=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E6=96=B9=E5=9D=97=E4=BA=A4=E4=BA=92=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6=20-=20=E6=96=B0=E5=A2=9E=20CustomBlockInteractEvent?= =?UTF-8?q?=20=E7=B1=BB=E7=94=A8=E4=BA=8E=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E6=96=B9=E5=9D=97=E4=BA=A4=E4=BA=92=E4=BA=8B=E4=BB=B6=20-=20?= =?UTF-8?q?=E5=9C=A8=20ItemEventListener=20=E4=B8=AD=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E6=96=B9=E5=9D=97=E4=BA=A4=E4=BA=92?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E7=9A=84=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91?= =?UTF-8?q?=20-=20=E5=BD=93=E7=8E=A9=E5=AE=B6=E4=BD=BF=E7=94=A8=E4=B8=BB?= =?UTF-8?q?=E6=89=8B=E5=8F=B3=E9=94=AE=E8=87=AA=E5=AE=9A=E4=B9=89=E6=96=B9?= =?UTF-8?q?=E5=9D=97=E6=97=B6=EF=BC=8C=E8=A7=A6=E5=8F=91=20CustomBlockInte?= =?UTF-8?q?ractEvent=20-=20=E5=A6=82=E6=9E=9C=E4=BA=8B=E4=BB=B6=E8=A2=AB?= =?UTF-8?q?=E5=8F=96=E6=B6=88=EF=BC=8C=E5=88=99=E5=8F=96=E6=B6=88=E7=8E=A9?= =?UTF-8?q?=E5=AE=B6=E7=9A=84=E4=BA=A4=E4=BA=92=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../momirealms/craftengine/bukkit/item/ItemEventListener.java | 1 - 1 file changed, 1 deletion(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/ItemEventListener.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/ItemEventListener.java index 036461741..021ce0fc6 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/ItemEventListener.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/ItemEventListener.java @@ -57,7 +57,6 @@ public class ItemEventListener implements Listener { Location interactionPoint = event.getInteractionPoint(); if (interactionPoint == null) return; Player bukkitPlayer = event.getPlayer(); - // TODO: 自定义方块交互事件 Block clickedBlock = Objects.requireNonNull(event.getClickedBlock()); if (event.getHand() == EquipmentSlot.HAND) { Key blockKey = BlockStateUtils.getRealBlockId(clickedBlock); From a4bff4981c89757f3f345f04889a98889ddf78bc Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Thu, 13 Feb 2025 03:25:31 +0800 Subject: [PATCH 8/9] =?UTF-8?q?refactor(pack):=20=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E5=BC=82=E6=AD=A5=E8=B5=84=E6=BA=90=E5=8C=85=E7=94=9F=E6=88=90?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将 GenerateResourcePackEvent 系列事件重命名为 AsyncGenerateResourcePackEvent - 在 CraftEngine 中添加 Platform 接口实现 - 在 PackManagerImpl 中集成 Platform 接口,用于处理异步事件 - 优化资源包生成流程,支持异步事件处理 --- .../AsyncGenerateResourcePackEndEvent.java | 9 ++++++++ ...va => AsyncGenerateResourcePackEvent.java} | 5 +++-- ... AsyncGenerateResourcePackStartEvent.java} | 4 ++-- .../event/GenerateResourcePackEndEvent.java | 9 -------- .../bukkit/platform/BukkitPlatform.java | 22 +++++++++++++++++++ .../bukkit/plugin/BukkitCraftEngine.java | 2 ++ .../core/pack/PackManagerImpl.java | 20 +++++++++++++---- .../craftengine/core/platform/Platform.java | 8 +++++++ .../craftengine/core/plugin/CraftEngine.java | 4 +++- 9 files changed, 65 insertions(+), 18 deletions(-) create mode 100644 bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncGenerateResourcePackEndEvent.java rename bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/{GenerateResourcePackEvent.java => AsyncGenerateResourcePackEvent.java} (82%) rename bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/{GenerateResourcePackStartEvent.java => AsyncGenerateResourcePackStartEvent.java} (66%) delete mode 100644 bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/GenerateResourcePackEndEvent.java create mode 100644 bukkit/src/main/java/net/momirealms/craftengine/bukkit/platform/BukkitPlatform.java create mode 100644 core/src/main/java/net/momirealms/craftengine/core/platform/Platform.java diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncGenerateResourcePackEndEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncGenerateResourcePackEndEvent.java new file mode 100644 index 000000000..a348ce22b --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncGenerateResourcePackEndEvent.java @@ -0,0 +1,9 @@ +package net.momirealms.craftengine.bukkit.api.event; + +import java.nio.file.Path; + +public class AsyncGenerateResourcePackEndEvent extends AsyncGenerateResourcePackEvent { + public AsyncGenerateResourcePackEndEvent(Path generatedPackPath, Path zipFile) { + super(generatedPackPath, zipFile); + } +} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/GenerateResourcePackEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncGenerateResourcePackEvent.java similarity index 82% rename from bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/GenerateResourcePackEvent.java rename to bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncGenerateResourcePackEvent.java index ab116afb2..dcfa09b0b 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/GenerateResourcePackEvent.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncGenerateResourcePackEvent.java @@ -6,12 +6,13 @@ import org.jetbrains.annotations.NotNull; import java.nio.file.Path; -public class GenerateResourcePackEvent extends Event { +public class AsyncGenerateResourcePackEvent extends Event { private static final HandlerList handlerList = new HandlerList(); private final Path generatedPackPath; private final Path zipFile; - public GenerateResourcePackEvent(Path generatedPackPath, Path zipFile) { + public AsyncGenerateResourcePackEvent(Path generatedPackPath, Path zipFile) { + super(true); this.generatedPackPath = generatedPackPath; this.zipFile = zipFile; } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/GenerateResourcePackStartEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncGenerateResourcePackStartEvent.java similarity index 66% rename from bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/GenerateResourcePackStartEvent.java rename to bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncGenerateResourcePackStartEvent.java index 3a7b9c465..832967a2b 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/GenerateResourcePackStartEvent.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncGenerateResourcePackStartEvent.java @@ -4,10 +4,10 @@ import org.bukkit.event.Cancellable; import java.nio.file.Path; -public class GenerateResourcePackStartEvent extends GenerateResourcePackEvent implements Cancellable { +public class AsyncGenerateResourcePackStartEvent extends AsyncGenerateResourcePackEvent implements Cancellable { private boolean cancelled; - public GenerateResourcePackStartEvent(Path generatedPackPath, Path zipFile) { + public AsyncGenerateResourcePackStartEvent(Path generatedPackPath, Path zipFile) { super(generatedPackPath, zipFile); } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/GenerateResourcePackEndEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/GenerateResourcePackEndEvent.java deleted file mode 100644 index 18f00411f..000000000 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/GenerateResourcePackEndEvent.java +++ /dev/null @@ -1,9 +0,0 @@ -package net.momirealms.craftengine.bukkit.api.event; - -import java.nio.file.Path; - -public class GenerateResourcePackEndEvent extends GenerateResourcePackEvent { - public GenerateResourcePackEndEvent(Path generatedPackPath, Path zipFile) { - super(generatedPackPath, zipFile); - } -} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/platform/BukkitPlatform.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/platform/BukkitPlatform.java new file mode 100644 index 000000000..014745235 --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/platform/BukkitPlatform.java @@ -0,0 +1,22 @@ +package net.momirealms.craftengine.bukkit.platform; + +import net.momirealms.craftengine.bukkit.api.event.AsyncGenerateResourcePackEndEvent; +import net.momirealms.craftengine.bukkit.api.event.AsyncGenerateResourcePackStartEvent; +import net.momirealms.craftengine.bukkit.util.EventUtils; +import net.momirealms.craftengine.core.platform.Platform; + +import java.nio.file.Path; + +public class BukkitPlatform implements Platform { + @Override + public boolean AsyncGenerateResourcePackStartEvent(Path generatedPackPath, Path zipFile) { + AsyncGenerateResourcePackStartEvent startEvent = new AsyncGenerateResourcePackStartEvent(generatedPackPath, zipFile); + return EventUtils.fireAndCheckCancel(startEvent); + } + + @Override + public void AsyncGenerateResourcePackEndEvent(Path generatedPackPath, Path zipFile) { + AsyncGenerateResourcePackEndEvent endEvent = new AsyncGenerateResourcePackEndEvent(generatedPackPath, zipFile); + EventUtils.fireAndForget(endEvent); + } +} \ No newline at end of file diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitCraftEngine.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitCraftEngine.java index f180504a6..cb5384fff 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitCraftEngine.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitCraftEngine.java @@ -1,5 +1,6 @@ package net.momirealms.craftengine.bukkit.plugin; +import net.momirealms.craftengine.bukkit.platform.BukkitPlatform; import net.momirealms.craftengine.bukkit.block.BukkitBlockManager; import net.momirealms.craftengine.bukkit.block.behavior.BukkitBlockBehaviors; import net.momirealms.craftengine.bukkit.entity.furniture.BukkitFurnitureManager; @@ -117,6 +118,7 @@ public class BukkitCraftEngine extends CraftEngine { } BukkitBlockBehaviors.init(); BukkitItemBehaviors.init(); + super.platform = new BukkitPlatform(); super.senderFactory = new BukkitSenderFactory(this); super.itemManager = new BukkitItemManager(this); super.recipeManager = new BukkitRecipeManager(this); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/PackManagerImpl.java b/core/src/main/java/net/momirealms/craftengine/core/pack/PackManagerImpl.java index eef7018e9..f734be2ec 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/PackManagerImpl.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/PackManagerImpl.java @@ -11,6 +11,7 @@ import net.momirealms.craftengine.core.font.Font; import net.momirealms.craftengine.core.pack.generator.ModelGeneration; import net.momirealms.craftengine.core.pack.generator.ModelGenerator; import net.momirealms.craftengine.core.pack.model.ItemModel; +import net.momirealms.craftengine.core.platform.Platform; import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.PluginProperties; import net.momirealms.craftengine.core.plugin.config.ConfigManager; @@ -35,12 +36,14 @@ public class PackManagerImpl implements PackManager { private static final String LEGACY_TEMPLATES = PluginProperties.getValue("legacy-templates").replace(".", "_"); private static final String LATEST_TEMPLATES = PluginProperties.getValue("latest-templates").replace(".", "_"); private final CraftEngine plugin; + private final Platform platform; private final Map loadedPacks = new HashMap<>(); private final Map sectionParsers = new HashMap<>(); private final TreeMap> cachedConfigs = new TreeMap<>(); - public PackManagerImpl(CraftEngine plugin) { + public PackManagerImpl(CraftEngine plugin, Platform platform) { this.plugin = plugin; + this.platform = platform; } @Override @@ -238,6 +241,16 @@ public class PackManagerImpl implements PackManager { .resolve("generated") .resolve("resource_pack"); + Path zipFile = plugin.dataFolderPath() + .resolve("generated") + .resolve("resource_pack.zip"); + + boolean isCancelled = platform.AsyncGenerateResourcePackStartEvent(generatedPackPath, zipFile); + if (isCancelled) { + plugin.logger().info("Resource pack generation cancelled by event"); + return; + } + try { org.apache.commons.io.FileUtils.deleteDirectory(generatedPackPath.toFile()); } catch (IOException e) { @@ -264,9 +277,6 @@ public class PackManagerImpl implements PackManager { this.generateItemModels(generatedPackPath, plugin.blockManager()); this.generateSounds(generatedPackPath); - Path zipFile = plugin.dataFolderPath() - .resolve("generated") - .resolve("resource_pack.zip"); try { ZipUtils.zipDirectory(generatedPackPath, zipFile); } catch (IOException e) { @@ -275,6 +285,8 @@ public class PackManagerImpl implements PackManager { long end = System.currentTimeMillis(); plugin.logger().info("Finished generating resource pack in " + (end - start) + "ms"); + + platform.AsyncGenerateResourcePackEndEvent(generatedPackPath, zipFile); } private void generateSounds(Path generatedPackPath) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/platform/Platform.java b/core/src/main/java/net/momirealms/craftengine/core/platform/Platform.java new file mode 100644 index 000000000..6344e9cb9 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/platform/Platform.java @@ -0,0 +1,8 @@ +package net.momirealms.craftengine.core.platform; + +import java.nio.file.Path; + +public interface Platform { + boolean AsyncGenerateResourcePackStartEvent(Path generatedPackPath, Path zipFile); + void AsyncGenerateResourcePackEndEvent(Path generatedPackPath, Path zipFile); +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/CraftEngine.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/CraftEngine.java index 03e310dac..68e62018e 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/CraftEngine.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/CraftEngine.java @@ -8,6 +8,7 @@ import net.momirealms.craftengine.core.item.ItemManager; import net.momirealms.craftengine.core.item.recipe.RecipeManager; import net.momirealms.craftengine.core.pack.PackManager; import net.momirealms.craftengine.core.pack.PackManagerImpl; +import net.momirealms.craftengine.core.platform.Platform; import net.momirealms.craftengine.core.plugin.classpath.ClassPathAppender; import net.momirealms.craftengine.core.plugin.command.CraftEngineCommandManager; import net.momirealms.craftengine.core.plugin.command.sender.SenderFactory; @@ -33,6 +34,7 @@ import java.util.List; public abstract class CraftEngine implements Plugin { public static final String NAMESPACE = "craftengine"; private static CraftEngine instance; + protected Platform platform; protected DependencyManager dependencyManager; protected SchedulerAdapter scheduler; protected NetworkManager networkManager; @@ -90,7 +92,7 @@ public abstract class CraftEngine implements Plugin { @Override public void enable() { this.networkManager.enable(); - this.packManager = new PackManagerImpl(this); + this.packManager = new PackManagerImpl(this, this.platform); this.fontManager = new FontManagerImpl(this); this.templateManager = new TemplateManagerImpl(this); this.commandManager.registerDefaultFeatures(); From 1350545057155ca333c61e9482875d1790abd029 Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Thu, 13 Feb 2025 04:05:52 +0800 Subject: [PATCH 9/9] =?UTF-8?q?refactor(bukkit):=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E8=B5=84=E6=BA=90=E5=8C=85=E7=94=9F=E6=88=90=E4=BA=8B=E4=BB=B6?= =?UTF-8?q?=E5=92=8C=E5=8F=96=E6=B6=88=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除了 AsyncGenerateResourcePackStartEvent 和 AsyncGenerateResourcePackEndEvent 类 - 新增了通用的 AsyncGenerateResourcePackEvent 类 - 更新了资源包生成事件的处理逻辑 - 优化了事件取消机制 --- .../AsyncGenerateResourcePackEndEvent.java | 9 --- .../event/AsyncGenerateResourcePackEvent.java | 2 +- .../AsyncGenerateResourcePackStartEvent.java | 23 ------- .../api/event/BlockStartBreakEvent.java | 64 ------------------- .../bukkit/api/event/CustomBlockEvent.java | 4 +- .../api/event/CustomBlockInteractEvent.java | 3 +- .../bukkit/api/event/FurnitureEvent.java | 4 +- .../api/event/FurniturePlaceEndEvent.java | 30 ++------- .../bukkit/block/BlockEventListener.java | 5 +- .../entity/furniture/LoadedFurniture.java | 2 +- .../bukkit/item/ItemEventListener.java | 19 +++--- .../item/behavior/FurnitureItemBehavior.java | 5 +- .../bukkit/platform/BukkitPlatform.java | 12 +--- .../plugin/network/PacketConsumers.java | 12 ---- .../core/pack/PackManagerImpl.java | 16 ++--- .../craftengine/core/platform/Platform.java | 4 +- 16 files changed, 35 insertions(+), 179 deletions(-) delete mode 100644 bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncGenerateResourcePackEndEvent.java delete mode 100644 bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncGenerateResourcePackStartEvent.java delete mode 100644 bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/BlockStartBreakEvent.java diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncGenerateResourcePackEndEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncGenerateResourcePackEndEvent.java deleted file mode 100644 index a348ce22b..000000000 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncGenerateResourcePackEndEvent.java +++ /dev/null @@ -1,9 +0,0 @@ -package net.momirealms.craftengine.bukkit.api.event; - -import java.nio.file.Path; - -public class AsyncGenerateResourcePackEndEvent extends AsyncGenerateResourcePackEvent { - public AsyncGenerateResourcePackEndEvent(Path generatedPackPath, Path zipFile) { - super(generatedPackPath, zipFile); - } -} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncGenerateResourcePackEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncGenerateResourcePackEvent.java index dcfa09b0b..8a73f048a 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncGenerateResourcePackEvent.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncGenerateResourcePackEvent.java @@ -11,7 +11,7 @@ public class AsyncGenerateResourcePackEvent extends Event { private final Path generatedPackPath; private final Path zipFile; - public AsyncGenerateResourcePackEvent(Path generatedPackPath, Path zipFile) { + public AsyncGenerateResourcePackEvent(@NotNull Path generatedPackPath, @NotNull Path zipFile) { super(true); this.generatedPackPath = generatedPackPath; this.zipFile = zipFile; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncGenerateResourcePackStartEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncGenerateResourcePackStartEvent.java deleted file mode 100644 index 832967a2b..000000000 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncGenerateResourcePackStartEvent.java +++ /dev/null @@ -1,23 +0,0 @@ -package net.momirealms.craftengine.bukkit.api.event; - -import org.bukkit.event.Cancellable; - -import java.nio.file.Path; - -public class AsyncGenerateResourcePackStartEvent extends AsyncGenerateResourcePackEvent implements Cancellable { - private boolean cancelled; - - public AsyncGenerateResourcePackStartEvent(Path generatedPackPath, Path zipFile) { - super(generatedPackPath, zipFile); - } - - @Override - public boolean isCancelled() { - return this.cancelled; - } - - @Override - public void setCancelled(boolean cancel) { - this.cancelled = cancel; - } -} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/BlockStartBreakEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/BlockStartBreakEvent.java deleted file mode 100644 index 1e56b10ec..000000000 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/BlockStartBreakEvent.java +++ /dev/null @@ -1,64 +0,0 @@ -package net.momirealms.craftengine.bukkit.api.event; - -import net.momirealms.craftengine.bukkit.util.BlockStateUtils; -import net.momirealms.craftengine.core.util.Key; -import net.momirealms.craftengine.core.world.BlockPos; -import org.bukkit.Location; -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; -import org.jetbrains.annotations.NotNull; - -public class BlockStartBreakEvent extends Event implements Cancellable { - private static final HandlerList handlerList = new HandlerList(); - private boolean cancelled; - private final Key blockId; - private final Location location; - private final Player player; - - public BlockStartBreakEvent(int stateId, Location location, Player player) { - super(true); - this.blockId = BlockStateUtils.getRealBlockIdFromStateId(stateId); - this.location = location; - this.player = player; - } - - public BlockPos blockPos() { - return new BlockPos(this.location.getBlockX(), this.location.getBlockY(), this.location.getBlockZ()); - } - - public Location location() { - return location; - } - - public @NotNull Player player() { - return player; - } - - public Key blockId() { - return blockId; - } - - public boolean isCustomBlock() { - return blockId.namespace().equals("craftengine"); - } - - public static HandlerList getHandlerList() { - return handlerList; - } - - public @NotNull HandlerList getHandlers() { - return getHandlerList(); - } - - @Override - public boolean isCancelled() { - return this.cancelled; - } - - @Override - public void setCancelled(boolean cancel) { - this.cancelled = cancel; - } -} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockEvent.java index 3861480fc..6f9794f80 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockEvent.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockEvent.java @@ -10,7 +10,7 @@ import org.bukkit.event.Event; import org.bukkit.event.HandlerList; import org.jetbrains.annotations.NotNull; -public class CustomBlockEvent extends Event implements Cancellable { +public abstract class CustomBlockEvent extends Event implements Cancellable { private static final HandlerList handlerList = new HandlerList(); private boolean cancelled; private final CustomBlock block; @@ -18,7 +18,7 @@ public class CustomBlockEvent extends Event implements Cancellable { private final Location location; private final Player player; - public CustomBlockEvent(ImmutableBlockState state, Location location, @NotNull Player player) { + public CustomBlockEvent(@NotNull ImmutableBlockState state, @NotNull Location location, @NotNull Player player) { this.block = state.owner().value(); this.state = state; this.location = location; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockInteractEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockInteractEvent.java index f802ff1ff..301ae3142 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockInteractEvent.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/CustomBlockInteractEvent.java @@ -3,10 +3,9 @@ package net.momirealms.craftengine.bukkit.api.event; import net.momirealms.craftengine.core.block.ImmutableBlockState; import org.bukkit.Location; import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; public class CustomBlockInteractEvent extends CustomBlockEvent { - public CustomBlockInteractEvent(ImmutableBlockState state, Location location, @NotNull Player player) { + public CustomBlockInteractEvent(ImmutableBlockState state, Location location, Player player) { super(state, location, player); } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/FurnitureEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/FurnitureEvent.java index 8cc875ae9..dfd63e26f 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/FurnitureEvent.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/FurnitureEvent.java @@ -8,13 +8,13 @@ import org.bukkit.event.HandlerList; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public class FurnitureEvent extends Event implements Cancellable { +public abstract class FurnitureEvent extends Event implements Cancellable { private static final HandlerList handlerList = new HandlerList(); private boolean cancelled; private final LoadedFurniture furniture; private final Player player; - public FurnitureEvent(LoadedFurniture furniture, @NotNull Player player) { + public FurnitureEvent(@Nullable LoadedFurniture furniture, @NotNull Player player) { this.furniture = furniture; this.player = player; } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/FurniturePlaceEndEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/FurniturePlaceEndEvent.java index 23d050ca8..2d3fd3e95 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/FurniturePlaceEndEvent.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/FurniturePlaceEndEvent.java @@ -2,33 +2,11 @@ package net.momirealms.craftengine.bukkit.api.event; import net.momirealms.craftengine.bukkit.entity.furniture.LoadedFurniture; import org.bukkit.entity.Player; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; -public class FurniturePlaceEndEvent extends Event { - private static final HandlerList handlerList = new HandlerList(); - private final LoadedFurniture furniture; - private final Player player; - - public FurniturePlaceEndEvent(LoadedFurniture furniture, @NotNull Player player) { - this.furniture = furniture; - this.player = player; - } - - public @NotNull LoadedFurniture furniture() { - return this.furniture; - } - - public @NotNull Player player() { - return this.player; - } - - public static HandlerList getHandlerList() { - return handlerList; - } - - public @NotNull HandlerList getHandlers() { - return getHandlerList(); +public class FurniturePlaceEndEvent extends FurnitureEvent { + public FurniturePlaceEndEvent(@Nullable LoadedFurniture furniture, @NotNull Player player) { + super(furniture, player); } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BlockEventListener.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BlockEventListener.java index ba53f7519..6358e4de1 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BlockEventListener.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BlockEventListener.java @@ -93,10 +93,7 @@ public class BlockEventListener implements Listener { } } - @EventHandler( - ignoreCancelled = true, - priority = EventPriority.LOWEST - ) + @EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST) public void onPlayerBreak(BlockBreakEvent event) { org.bukkit.block.Block block = event.getBlock(); Object blockState = BlockStateUtils.blockDataToBlockState(block.getBlockData()); diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/LoadedFurniture.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/LoadedFurniture.java index 79b19ec46..13f76fef6 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/LoadedFurniture.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/furniture/LoadedFurniture.java @@ -285,7 +285,7 @@ public class LoadedFurniture { seatEntity.addPassenger(player); } - public Key getFurnitureId() { + public Key furnitureId() { return id; } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/ItemEventListener.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/ItemEventListener.java index 021ce0fc6..eeff51ad4 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/ItemEventListener.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/ItemEventListener.java @@ -58,7 +58,15 @@ public class ItemEventListener implements Listener { if (interactionPoint == null) return; Player bukkitPlayer = event.getPlayer(); Block clickedBlock = Objects.requireNonNull(event.getClickedBlock()); - if (event.getHand() == EquipmentSlot.HAND) { + BukkitServerPlayer player = this.plugin.adapt(bukkitPlayer); + InteractionHand hand = event.getHand() == EquipmentSlot.HAND ? InteractionHand.MAIN_HAND : InteractionHand.OFF_HAND; + if (hand == InteractionHand.OFF_HAND) { + int currentTicks = player.gameTicks(); + if (!player.updateLastSuccessfulInteractionTick(currentTicks)) { + event.setCancelled(true); + return; + } + } else { Key blockKey = BlockStateUtils.getRealBlockId(clickedBlock); if (blockKey.namespace().equals("craftengine")) { int blockId = BlockStateUtils.blockDataToId(clickedBlock.getBlockData()); @@ -74,15 +82,6 @@ public class ItemEventListener implements Listener { } } } - BukkitServerPlayer player = this.plugin.adapt(bukkitPlayer); - InteractionHand hand = event.getHand() == EquipmentSlot.HAND ? InteractionHand.MAIN_HAND : InteractionHand.OFF_HAND; - if (hand == InteractionHand.OFF_HAND) { - int currentTicks = player.gameTicks(); - if (!player.updateLastSuccessfulInteractionTick(currentTicks)) { - event.setCancelled(true); - return; - } - } Item itemInHand = player.getItemInHand(hand); if (itemInHand == null) return; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/FurnitureItemBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/FurnitureItemBehavior.java index cbe9b8775..ee0e0133b 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/FurnitureItemBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/behavior/FurnitureItemBehavior.java @@ -150,7 +150,10 @@ public class FurnitureItemBehavior extends ItemBehavior { ), (org.bukkit.entity.Player) player.platformPlayer() ); - EventUtils.fireAndForget(furniturePlaceEndEvent); + if (EventUtils.fireAndCheckCancel(furniturePlaceEndEvent)) { + furnitureEntity.remove(); + return InteractionResult.FAIL; + } return InteractionResult.SUCCESS; } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/platform/BukkitPlatform.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/platform/BukkitPlatform.java index 014745235..d6b8ecbd8 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/platform/BukkitPlatform.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/platform/BukkitPlatform.java @@ -1,22 +1,16 @@ package net.momirealms.craftengine.bukkit.platform; -import net.momirealms.craftengine.bukkit.api.event.AsyncGenerateResourcePackEndEvent; -import net.momirealms.craftengine.bukkit.api.event.AsyncGenerateResourcePackStartEvent; +import net.momirealms.craftengine.bukkit.api.event.AsyncGenerateResourcePackEvent; import net.momirealms.craftengine.bukkit.util.EventUtils; import net.momirealms.craftengine.core.platform.Platform; import java.nio.file.Path; public class BukkitPlatform implements Platform { - @Override - public boolean AsyncGenerateResourcePackStartEvent(Path generatedPackPath, Path zipFile) { - AsyncGenerateResourcePackStartEvent startEvent = new AsyncGenerateResourcePackStartEvent(generatedPackPath, zipFile); - return EventUtils.fireAndCheckCancel(startEvent); - } @Override - public void AsyncGenerateResourcePackEndEvent(Path generatedPackPath, Path zipFile) { - AsyncGenerateResourcePackEndEvent endEvent = new AsyncGenerateResourcePackEndEvent(generatedPackPath, zipFile); + public void asyncGenerateResourcePackEvent(Path generatedPackPath, Path zipFile) { + AsyncGenerateResourcePackEvent endEvent = new AsyncGenerateResourcePackEvent(generatedPackPath, zipFile); EventUtils.fireAndForget(endEvent); } } \ No newline at end of file diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java index d63318a8e..b2f532447 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java @@ -3,7 +3,6 @@ package net.momirealms.craftengine.bukkit.plugin.network; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import it.unimi.dsi.fastutil.ints.IntList; -import net.momirealms.craftengine.bukkit.api.event.BlockStartBreakEvent; import net.momirealms.craftengine.bukkit.api.event.FurnitureBreakEvent; import net.momirealms.craftengine.bukkit.api.event.FurnitureInteractEvent; import net.momirealms.craftengine.bukkit.block.BukkitBlockManager; @@ -184,17 +183,6 @@ public class PacketConsumers { Object serverLevel = Reflections.field$CraftWorld$ServerLevel.get(world); Object blockState = Reflections.method$BlockGetter$getBlockState.invoke(serverLevel, blockPos); int stateId = BlockStateUtils.blockStateToId(blockState); - BlockStartBreakEvent BlockStartBreakEvent = new BlockStartBreakEvent( - stateId, - new Location(world, pos.x(), pos.y(), pos.z()), - platformPlayer - ); - if (EventUtils.fireAndCheckCancel(BlockStartBreakEvent) && player.isCreativeMode()) { - if (player.isMiningBlock()) { - player.stopMiningBlock(); - } - return; - } // not a custom block if (BlockStateUtils.isVanillaBlock(stateId)) { if (ConfigManager.enableSoundSystem()) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/PackManagerImpl.java b/core/src/main/java/net/momirealms/craftengine/core/pack/PackManagerImpl.java index f734be2ec..308915686 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/PackManagerImpl.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/PackManagerImpl.java @@ -241,16 +241,6 @@ public class PackManagerImpl implements PackManager { .resolve("generated") .resolve("resource_pack"); - Path zipFile = plugin.dataFolderPath() - .resolve("generated") - .resolve("resource_pack.zip"); - - boolean isCancelled = platform.AsyncGenerateResourcePackStartEvent(generatedPackPath, zipFile); - if (isCancelled) { - plugin.logger().info("Resource pack generation cancelled by event"); - return; - } - try { org.apache.commons.io.FileUtils.deleteDirectory(generatedPackPath.toFile()); } catch (IOException e) { @@ -277,6 +267,10 @@ public class PackManagerImpl implements PackManager { this.generateItemModels(generatedPackPath, plugin.blockManager()); this.generateSounds(generatedPackPath); + Path zipFile = plugin.dataFolderPath() + .resolve("generated") + .resolve("resource_pack.zip"); + try { ZipUtils.zipDirectory(generatedPackPath, zipFile); } catch (IOException e) { @@ -286,7 +280,7 @@ public class PackManagerImpl implements PackManager { long end = System.currentTimeMillis(); plugin.logger().info("Finished generating resource pack in " + (end - start) + "ms"); - platform.AsyncGenerateResourcePackEndEvent(generatedPackPath, zipFile); + platform.asyncGenerateResourcePackEvent(generatedPackPath, zipFile); } private void generateSounds(Path generatedPackPath) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/platform/Platform.java b/core/src/main/java/net/momirealms/craftengine/core/platform/Platform.java index 6344e9cb9..3e9eaa913 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/platform/Platform.java +++ b/core/src/main/java/net/momirealms/craftengine/core/platform/Platform.java @@ -3,6 +3,6 @@ package net.momirealms.craftengine.core.platform; import java.nio.file.Path; public interface Platform { - boolean AsyncGenerateResourcePackStartEvent(Path generatedPackPath, Path zipFile); - void AsyncGenerateResourcePackEndEvent(Path generatedPackPath, Path zipFile); + + void asyncGenerateResourcePackEvent(Path generatedPackPath, Path zipFile); }