9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-29 11:59:11 +00:00

fix(bukkit): 修复三叉戟显示问题

This commit is contained in:
jhqwqmc
2025-05-23 00:05:03 +08:00
parent 423f94db93
commit e5a372b048
4 changed files with 18 additions and 24 deletions

View File

@@ -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;
}
}

View File

@@ -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;

View File

@@ -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);
}

View File

@@ -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);
}