From 127b4d1e81e1039c0335e40e3c6de1374a2c656f Mon Sep 17 00:00:00 2001 From: zimzaza4 <3625282098@qq.com> Date: Sun, 21 Apr 2024 01:42:23 +0800 Subject: [PATCH] fix --- .../geysermodelengine/GeyserModelEngine.java | 2 - .../listener/AddEntityPacketListener.java | 4 ++ .../listener/InteractPacketListener.java | 39 ------------------- .../listener/ModelListener.java | 5 ++- .../geysermodelengine/model/EntityTask.java | 17 ++++---- 5 files changed, 18 insertions(+), 49 deletions(-) delete mode 100644 src/main/java/re/imc/geysermodelengine/listener/InteractPacketListener.java diff --git a/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java b/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java index 08e3fd3..9d76dcf 100644 --- a/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java +++ b/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java @@ -15,7 +15,6 @@ import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; import re.imc.geysermodelengine.listener.AddEntityPacketListener; -import re.imc.geysermodelengine.listener.InteractPacketListener; import re.imc.geysermodelengine.listener.ModelListener; import re.imc.geysermodelengine.model.ModelEntity; @@ -70,7 +69,6 @@ public final class GeyserModelEngine extends JavaPlugin { .expireAfterWrite(joinSendDelay * 50L, TimeUnit.MILLISECONDS).build(); } instance = this; - ProtocolLibrary.getProtocolManager().addPacketListener(new InteractPacketListener()); ProtocolLibrary.getProtocolManager().addPacketListener(new AddEntityPacketListener()); Bukkit.getPluginManager().registerEvents(new ModelListener(), this); diff --git a/src/main/java/re/imc/geysermodelengine/listener/AddEntityPacketListener.java b/src/main/java/re/imc/geysermodelengine/listener/AddEntityPacketListener.java index a8fad89..8e13905 100644 --- a/src/main/java/re/imc/geysermodelengine/listener/AddEntityPacketListener.java +++ b/src/main/java/re/imc/geysermodelengine/listener/AddEntityPacketListener.java @@ -36,9 +36,13 @@ public class AddEntityPacketListener extends PacketAdapter { StructureModifier modifier = packet.getEntityModifier(event); Entity entity = modifier.readSafely(0); + if (entity == null) { + return; + } boolean isBedrock = FloodgateApi.getInstance().isFloodgatePlayer(event.getPlayer().getUniqueId()); ModelEntity model = ModelEntity.MODEL_ENTITIES.get(entity.getEntityId()); + if (model != null) { if (isBedrock) { if (packet.getMeta("delayed").isPresent()) { diff --git a/src/main/java/re/imc/geysermodelengine/listener/InteractPacketListener.java b/src/main/java/re/imc/geysermodelengine/listener/InteractPacketListener.java deleted file mode 100644 index 596286f..0000000 --- a/src/main/java/re/imc/geysermodelengine/listener/InteractPacketListener.java +++ /dev/null @@ -1,39 +0,0 @@ -package re.imc.geysermodelengine.listener; - -import com.comphenix.protocol.PacketType; -import com.comphenix.protocol.events.*; -import com.comphenix.protocol.reflect.StructureModifier; -import com.ticxo.modelengine.api.entity.BukkitEntity; -import com.ticxo.modelengine.api.entity.BukkitPlayer; -import org.bukkit.entity.Entity; -import re.imc.geysermodelengine.GeyserModelEngine; -import re.imc.geysermodelengine.model.ModelEntity; - -import java.util.Set; - -public class InteractPacketListener extends PacketAdapter { - public InteractPacketListener() { - super(GeyserModelEngine.getInstance(), ListenerPriority.HIGHEST, Set.of(PacketType.Play.Client.USE_ENTITY), ListenerOptions.SYNC); - } - - - @Override - public void onPacketReceiving(PacketEvent event) { - PacketContainer packet = event.getPacket(); - StructureModifier modifier = packet.getEntityModifier(event); - Entity entity = modifier.readSafely(0); - if (entity == null) { - return; - } - ModelEntity model = ModelEntity.MODEL_ENTITIES.get(entity.getEntityId()); - - if (model != null && model.getModeledEntity().getBase() instanceof BukkitEntity bukkitEntity) { - modifier.writeSafely(0, bukkitEntity.getOriginal()); - - event.setPacket(packet); - } - - } - - -} diff --git a/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java b/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java index 3dfc81c..f0e75a8 100644 --- a/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java +++ b/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java @@ -35,7 +35,10 @@ public class ModelListener implements Listener { public void onAddModel(AddModelEvent event) { if (event.isCancelled()) { return; + } + if (event.getTarget().getModel(event.getModel().getBlueprint().getName()).isPresent()) { + return; } Bukkit.getScheduler().runTask(GeyserModelEngine.getInstance(), () -> { @@ -117,7 +120,7 @@ public class ModelListener implements Listener { for (Player onlinePlayer : Bukkit.getOnlinePlayers()) { if (FloodgateApi.getInstance().isFloodgatePlayer(onlinePlayer.getUniqueId())) { - PlayerUtils.setCustomEntity(onlinePlayer, entity.getEntityId(), "modelengine:" + model.getActiveModel().getBlueprint().getName()); + PlayerUtils.setCustomEntity(onlinePlayer, entity.getEntityId(), "modelengine:" + model.getActiveModel().getBlueprint().getName().toLowerCase()); } } } diff --git a/src/main/java/re/imc/geysermodelengine/model/EntityTask.java b/src/main/java/re/imc/geysermodelengine/model/EntityTask.java index f09e3fc..6775974 100644 --- a/src/main/java/re/imc/geysermodelengine/model/EntityTask.java +++ b/src/main/java/re/imc/geysermodelengine/model/EntityTask.java @@ -66,10 +66,12 @@ public class EntityTask { } } } - if (model.getEntity().isDead() && model.getModeledEntity().getBase().isAlive()) { + + if (model.getEntity().isDead() && model.getModeledEntity().getBase().isAlive() && !model.getActiveModel().isRemoved()) { model.spawnEntity(); } + model.getEntity().setVisualFire(false); model.teleportToModel(); } @@ -78,17 +80,17 @@ public class EntityTask { Set viewers = model.getViewers(); ActiveModel activeModel = model.getActiveModel(); ModeledEntity modeledEntity = model.getModeledEntity(); - if (modeledEntity.isDestroyed() || !modeledEntity.getBase().isAlive()) { + if (activeModel.isRemoved() || !modeledEntity.getBase().isAlive()) { if (!modeledEntity.getBase().isAlive()) { - if (!modeledEntity.isDestroyed()) { + if (!activeModel.isRemoved()) { String animation = hasAnimation("death") ? "death" : "idle"; new BukkitRunnable() { @Override public void run() { entity.remove(); } - }.runTaskLater(GeyserModelEngine.getInstance(), Math.min(Math.max(playAnimation(animation, 99, 5f) - 1, 0), 200)); + }.runTaskLater(GeyserModelEngine.getInstance(), Math.min(Math.max(playAnimation(animation, 999, 0f) - 3, 0), 200)); } else { new BukkitRunnable() { @Override @@ -199,7 +201,8 @@ public class EntityTask { } public void sendEntityData(Player player, int delay) { - PlayerUtils.setCustomEntity(player, model.getEntity().getEntityId(), "modelengine:" + model.getActiveModel().getBlueprint().getName()); + // System.out.println("TYPE: " + "modelengine:" + model.getActiveModel().getBlueprint().getName().toLowerCase()); + PlayerUtils.setCustomEntity(player, model.getEntity().getEntityId(), "modelengine:" + model.getActiveModel().getBlueprint().getName().toLowerCase()); Bukkit.getScheduler().runTaskLaterAsynchronously(GeyserModelEngine.getInstance(), () -> { // PlayerUtils.sendCustomSkin(player, model.getEntity(), model.getActiveModel().getBlueprint().getName()); playBedrockAnimation("animation." + model.getActiveModel().getBlueprint().getName() + "." + lastAnimation, looping, 0f); @@ -234,7 +237,7 @@ public class EntityTask { } public int playAnimation(String animation, int p) { - return playAnimation(animation, p, 0f); + return playAnimation(animation, p, 0); } public int playAnimation(String animation, int p, float blendTime) { @@ -284,7 +287,7 @@ public class EntityTask { animationCooldown.set((int) (animationProperty.getLength() * 20)); if (delaySend) { - Bukkit.getScheduler().runTaskLaterAsynchronously(GeyserModelEngine.getInstance(), () -> playBedrockAnimation("animation." + activeModel.getBlueprint().getName() + "." + animationProperty.getName(), looping, blendTime), 2); + Bukkit.getScheduler().runTaskLaterAsynchronously(GeyserModelEngine.getInstance(), () -> playBedrockAnimation("animation." + activeModel.getBlueprint().getName() + "." + animationProperty.getName(), looping, blendTime), 0); } else { playBedrockAnimation(id, looping, blendTime); }