From e5a372b0481bb244ccb86735208a3aa89c37500e Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Fri, 23 May 2025 00:05:03 +0800 Subject: [PATCH] =?UTF-8?q?fix(bukkit):=20=E4=BF=AE=E5=A4=8D=E4=B8=89?= =?UTF-8?q?=E5=8F=89=E6=88=9F=E6=98=BE=E7=A4=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../projectile/BukkitProjectileManager.java | 33 ++++++++----------- .../plugin/command/feature/TestCommand.java | 1 - .../plugin/network/PacketConsumers.java | 2 +- .../plugin/user/BukkitServerPlayer.java | 6 ++-- 4 files changed, 18 insertions(+), 24 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/projectile/BukkitProjectileManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/projectile/BukkitProjectileManager.java index 6bef2fecf..9fb5c698f 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/projectile/BukkitProjectileManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/entity/projectile/BukkitProjectileManager.java @@ -1,5 +1,6 @@ package net.momirealms.craftengine.bukkit.entity.projectile; +import com.destroystokyo.paper.event.entity.EntityAddToWorldEvent; import com.destroystokyo.paper.event.entity.EntityRemoveFromWorldEvent; import io.papermc.paper.event.player.PlayerStopUsingItemEvent; import net.momirealms.craftengine.bukkit.item.BukkitItemManager; @@ -21,6 +22,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.HandlerList; import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityPortalEvent; import org.bukkit.event.entity.ProjectileLaunchEvent; import org.bukkit.event.player.PlayerItemConsumeEvent; import org.bukkit.event.world.EntitiesLoadEvent; @@ -57,18 +59,15 @@ public class BukkitProjectileManager implements Listener, ProjectileManager { return Optional.ofNullable(this.projectiles.get(entityId)); } - @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) + @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) public void onProjectileLaunch(ProjectileLaunchEvent event) { - Projectile projectile = event.getEntity(); - handleProjectileLoad(projectile); + handleProjectileLoad(event.getEntity()); } - @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) - public void onEntitiesLoad(EntitiesLoadEvent event) { - for (Entity entity : event.getEntities()) { - if (entity instanceof Projectile projectile) { - handleProjectileLoad(projectile); - } + @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGH) + public void onEntityAdd(EntityAddToWorldEvent event) { + if (event.getEntity() instanceof Projectile projectile) { + handleProjectileLoad(projectile); } } @@ -99,10 +98,9 @@ public class BukkitProjectileManager implements Listener, ProjectileManager { @EventHandler public void onPlayerInteract(PlayerItemConsumeEvent event) { - ItemStack item = event.getItem(); - String type = getType(item); + String type = getType(event.getItem()); if (type == null) return; - if (type.equals("bow") || type.equals("spear")) { + if (type.equals("bow") || type.equals("trident")) { event.setCancelled(true); } } @@ -114,17 +112,14 @@ public class BukkitProjectileManager implements Listener, ProjectileManager { if (type == null) return; int ticksHeldFor = event.getTicksHeldFor(); Player player = event.getPlayer(); - if (type.equals("bow")) { - if (ticksHeldFor < 3) return; - // player.sendMessage("可以投出自定义弓: " + item.getType() + " 持续 " + ticksHeldFor + " 刻"); - } else if (type.equals("trident")) { + if (type.equals("trident")) { if (ticksHeldFor < 10) return; - // player.sendMessage("可以投出自定义三叉戟: " + item.getType() + " 持续 " + ticksHeldFor + " 刻"); Object nmsItemStack = FastNMS.INSTANCE.field$CraftItemStack$handle(item); Object nmsServerLevel = FastNMS.INSTANCE.field$CraftWorld$ServerLevel(player.getWorld()); Object nmsEntity = FastNMS.INSTANCE.method$CraftEntity$getHandle(player); - boolean success = TridentRelease.releaseUsing(nmsItemStack, nmsServerLevel, nmsEntity); - // player.sendMessage("释放成功: " + success); + TridentRelease.releaseUsing(nmsItemStack, nmsServerLevel, nmsEntity); + } else if (type.equals("bow")) { + if (ticksHeldFor < 3) return; } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/TestCommand.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/TestCommand.java index 8ce4d7495..00e8c84de 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/TestCommand.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/TestCommand.java @@ -1,7 +1,6 @@ package net.momirealms.craftengine.bukkit.plugin.command.feature; import net.momirealms.craftengine.bukkit.entity.furniture.BukkitFurnitureManager; -import net.momirealms.craftengine.bukkit.entity.furniture.LoadedFurniture; import net.momirealms.craftengine.bukkit.plugin.command.BukkitCommandFeature; import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer; import net.momirealms.craftengine.core.plugin.CraftEngine; 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 9a18a9994..2719be684 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 @@ -1617,7 +1617,7 @@ public class PacketConsumers { Object removePacket = Reflections.constructor$ClientboundRemoveEntitiesPacket.newInstance(entityIdsArray); DynamicPriorityTracker.UpdateResult result = user.visualFurnitureView().addOrUpdateElement(new DynamicPriorityTracker.Element(entityId, distance, removePacket)); for (DynamicPriorityTracker.Element element : result.getEntered()) { - LoadedFurniture updateFurniture = BukkitFurnitureManager.instance().loadedFurnitureByRealEntityId(element.entityId()); + BukkitFurniture updateFurniture = BukkitFurnitureManager.instance().loadedFurnitureByRealEntityId(element.entityId()); if (updateFurniture == null || !updateFurniture.isValid()) continue; user.sendPacket(updateFurniture.spawnPacket(player), false); } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java index debbbe0d0..b04238a43 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java @@ -4,8 +4,8 @@ import com.google.common.collect.Lists; import io.netty.channel.Channel; import net.kyori.adventure.text.Component; import net.momirealms.craftengine.bukkit.block.BukkitBlockManager; +import net.momirealms.craftengine.bukkit.entity.furniture.BukkitFurniture; import net.momirealms.craftengine.bukkit.entity.furniture.BukkitFurnitureManager; -import net.momirealms.craftengine.bukkit.entity.furniture.LoadedFurniture; import net.momirealms.craftengine.bukkit.item.BukkitItemManager; import net.momirealms.craftengine.bukkit.nms.FastNMS; import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine; @@ -382,13 +382,13 @@ public class BukkitServerPlayer extends Player { if (!Config.enableMaxVisibleFurniture()) return; if (visualFurnitureView().getTotalMembers() <= Config.maxVisibleFurniture()) return; for (DynamicPriorityTracker.Element element : visualFurnitureView().getAllElements()) { - LoadedFurniture furniture = BukkitFurnitureManager.instance().loadedFurnitureByRealEntityId(element.entityId()); + BukkitFurniture furniture = BukkitFurnitureManager.instance().loadedFurnitureByRealEntityId(element.entityId()); if (furniture == null || !furniture.isValid()) continue; double distance = furniture.location().distanceSquared(platformPlayer().getLocation()); DynamicPriorityTracker.Element newElement = new DynamicPriorityTracker.Element(element.entityId(), distance, element.removePacket()); DynamicPriorityTracker.UpdateResult result = visualFurnitureView().addOrUpdateElement(newElement); for (DynamicPriorityTracker.Element resultElement : result.getEntered()) { - LoadedFurniture updateFurniture = BukkitFurnitureManager.instance().loadedFurnitureByRealEntityId(resultElement.entityId()); + BukkitFurniture updateFurniture = BukkitFurnitureManager.instance().loadedFurnitureByRealEntityId(resultElement.entityId()); if (updateFurniture == null || !updateFurniture.isValid()) continue; sendPacket(updateFurniture.spawnPacket(platformPlayer()), false); }