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

Merge pull request #183 from jhqwqmc/dev

fix(bukkit): 修复问题
This commit is contained in:
XiaoMoMi
2025-05-23 04:59:23 +08:00
committed by GitHub
3 changed files with 24 additions and 21 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,20 @@ 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.HIGHEST)
public void onEntityPortal(EntityPortalEvent event) {
this.projectiles.remove(event.getEntity().getEntityId());
}
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGH)
public void onEntityAdd(EntityAddToWorldEvent event) {
if (event.getEntity() instanceof Projectile projectile) {
handleProjectileLoad(projectile);
}
}
@@ -99,10 +103,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 +117,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

@@ -7,6 +7,7 @@ import net.momirealms.craftengine.bukkit.util.LegacyInventoryUtils;
import net.momirealms.craftengine.bukkit.util.Reflections;
import net.momirealms.craftengine.core.plugin.CraftEngine;
import net.momirealms.craftengine.core.plugin.gui.*;
import net.momirealms.craftengine.core.util.ReflectionUtils;
import net.momirealms.craftengine.core.util.VersionHelper;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
@@ -16,9 +17,11 @@ import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryDragEvent;
import org.bukkit.inventory.InventoryView;
import org.bukkit.inventory.MenuType;
public class BukkitGuiManager implements GuiManager, Listener {
private static final boolean useNewOpenInventory = ReflectionUtils.getDeclaredMethod(InventoryView.class, void.class, new String[]{"open"}) != null;
private final BukkitCraftEngine plugin;
public BukkitGuiManager(BukkitCraftEngine plugin) {
@@ -39,7 +42,7 @@ public class BukkitGuiManager implements GuiManager, Listener {
@Override
public void openInventory(net.momirealms.craftengine.core.entity.player.Player player, GuiType guiType) {
Player bukkitPlayer = (Player) player.platformPlayer();
if (VersionHelper.isOrAbove1_21_4()) {
if (useNewOpenInventory) {
switch (guiType) {
case ANVIL -> MenuType.ANVIL.create(bukkitPlayer).open();
case LOOM -> MenuType.LOOM.create(bukkitPlayer).open();

View File

@@ -1728,7 +1728,7 @@ public class PacketConsumers {
.withParameter(DirectContextParameters.FURNITURE, furniture)
.withParameter(DirectContextParameters.POSITION, furniture.position())
);
furniture.config().execute(context, EventTrigger.RIGHT_CLICK);;
furniture.config().execute(context, EventTrigger.RIGHT_CLICK);
if (player.isSneaking()) {
// try placing another furniture above it