mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-25 09:59:20 +00:00
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user