From 2a263f60d5dc16328862882fd31c5b32f65b1ff7 Mon Sep 17 00:00:00 2001 From: zimzaza4 <3625282098@qq.com> Date: Sun, 14 Apr 2024 19:37:25 +0800 Subject: [PATCH 01/11] custom entity --- libs/geyserutils-spigot-1.0-SNAPSHOT.jar | Bin 6549098 -> 6549618 bytes pom.xml | 2 +- .../listener/AddEntityPacketListener.java | 22 +++++++++--- .../geysermodelengine/model/EntityTask.java | 34 ++++++++++++------ .../geysermodelengine/model/ModelEntity.java | 33 +++++++++++++---- 5 files changed, 70 insertions(+), 21 deletions(-) diff --git a/libs/geyserutils-spigot-1.0-SNAPSHOT.jar b/libs/geyserutils-spigot-1.0-SNAPSHOT.jar index d5781c36f638e9399087d987e0dc8fca9306cd40..c6bf260af497b4128b12bf086fc0b218c0a160e7 100644 GIT binary patch delta 71222 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

|p*=0yO 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 n!X&xytI|s}!eEh{RyDjs? me.zimzaza4 geyserutils-spigot - 1.0.1 + 1.0.0 system ${project.basedir}/libs/geyserutils-spigot-1.0-SNAPSHOT.jar diff --git a/src/main/java/re/imc/geysermodelengine/listener/AddEntityPacketListener.java b/src/main/java/re/imc/geysermodelengine/listener/AddEntityPacketListener.java index 2bb30ee..14363c9 100644 --- a/src/main/java/re/imc/geysermodelengine/listener/AddEntityPacketListener.java +++ b/src/main/java/re/imc/geysermodelengine/listener/AddEntityPacketListener.java @@ -1,13 +1,16 @@ package re.imc.geysermodelengine.listener; import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.events.*; import com.comphenix.protocol.reflect.StructureModifier; import com.ticxo.modelengine.api.entity.BukkitEntity; +import org.bukkit.Bukkit; import org.bukkit.entity.Entity; import org.geysermc.floodgate.api.FloodgateApi; import org.jetbrains.annotations.NotNull; import re.imc.geysermodelengine.GeyserModelEngine; +import re.imc.geysermodelengine.model.EntityTask; import re.imc.geysermodelengine.model.ModelEntity; import java.util.Set; @@ -29,11 +32,22 @@ public class AddEntityPacketListener extends PacketAdapter { if (model != null) { if (FloodgateApi.getInstance().isFloodgatePlayer(event.getPlayer().getUniqueId())) { - if (GeyserModelEngine.getInstance().getJoinedPlayer() != null && GeyserModelEngine.getInstance().getJoinedPlayer().getIfPresent(event.getPlayer()) != null) { - model.getTask().sendEntityData(event.getPlayer(), GeyserModelEngine.getInstance().getJoinSendDelay()); - } else { - model.getTask().sendEntityData(event.getPlayer(), GeyserModelEngine.getInstance().getSkinSendDelay()); + if (packet.getMeta("delayed").isPresent()) { + return; } + EntityTask task = model.getTask(); + if (task == null) { + Bukkit.getScheduler().runTaskLater(GeyserModelEngine.getInstance(), () -> { + model.getTask().sendEntityData(event.getPlayer(), GeyserModelEngine.getInstance().getSkinSendDelay()); + }, 1); + } else { + task.sendEntityData(event.getPlayer(), GeyserModelEngine.getInstance().getSkinSendDelay()); + } + event.setCancelled(true); + Bukkit.getScheduler().runTaskLater(GeyserModelEngine.getInstance(), () -> { + packet.setMeta("delayed", 1); + ProtocolLibrary.getProtocolManager().sendServerPacket(event.getPlayer(), packet); + }, 2); } else { event.setCancelled(true); } diff --git a/src/main/java/re/imc/geysermodelengine/model/EntityTask.java b/src/main/java/re/imc/geysermodelengine/model/EntityTask.java index 4c6c473..1e1c912 100644 --- a/src/main/java/re/imc/geysermodelengine/model/EntityTask.java +++ b/src/main/java/re/imc/geysermodelengine/model/EntityTask.java @@ -59,6 +59,7 @@ public class EntityTask { } if (syncTick % 5 == 0) { + for (Player onlinePlayer : Bukkit.getOnlinePlayers()) { if (!FloodgateApi.getInstance().isFloodgatePlayer(onlinePlayer.getUniqueId())) { onlinePlayer.hideEntity(GeyserModelEngine.getInstance(), model.getEntity()); @@ -78,16 +79,24 @@ public class EntityTask { ActiveModel activeModel = model.getActiveModel(); ModeledEntity modeledEntity = model.getModeledEntity(); if (modeledEntity.isDestroyed() || !modeledEntity.getBase().isAlive()) { - if (!modeledEntity.isDestroyed() && !modeledEntity.getBase().isAlive()) { - - String animation = hasAnimation("death") ? "death" : "idle"; - new BukkitRunnable() { - @Override - public void run() { - entity.remove(); - } - }.runTaskLater(GeyserModelEngine.getInstance(), Math.max(playAnimation(animation, 99) - 1, 0)); + if (!modeledEntity.getBase().isAlive()) { + if (!modeledEntity.isDestroyed()) { + String animation = hasAnimation("death") ? "death" : "idle"; + new BukkitRunnable() { + @Override + public void run() { + entity.remove(); + } + }.runTaskLater(GeyserModelEngine.getInstance(), Math.min(Math.max(playAnimation(animation, 99) - 1, 0), 200)); + } else { + new BukkitRunnable() { + @Override + public void run() { + entity.remove(); + } + }.runTask(GeyserModelEngine.getInstance()); + } } ENTITIES.remove(modeledEntity.getBase().getEntityId()); MODEL_ENTITIES.remove(entity.getEntityId()); @@ -190,8 +199,11 @@ public class EntityTask { } public void sendEntityData(Player player, int delay) { + GeyserModelEngine.getInstance().getLogger() + .info("SEND ENTITY"); + PlayerUtils.setCustomEntity(player, model.getEntity().getEntityId(), "modelengine:" + model.getActiveModel().getBlueprint().getName()); Bukkit.getScheduler().runTaskLaterAsynchronously(GeyserModelEngine.getInstance(), () -> { - PlayerUtils.sendCustomSkin(player, model.getEntity(), model.getActiveModel().getBlueprint().getName()); + // PlayerUtils.sendCustomSkin(player, model.getEntity(), model.getActiveModel().getBlueprint().getName()); playBedrockAnimation("animation." + model.getActiveModel().getBlueprint().getName() + "." + lastAnimation, looping); sendHitBox(player); Bukkit.getScheduler().runTaskLaterAsynchronously(GeyserModelEngine.getInstance(), () -> { @@ -363,6 +375,8 @@ public class EntityTask { } public void run(GeyserModelEngine instance, int i) { + + sendHitBoxToAll(); syncTask = new BukkitRunnable() { @Override public void run() { diff --git a/src/main/java/re/imc/geysermodelengine/model/ModelEntity.java b/src/main/java/re/imc/geysermodelengine/model/ModelEntity.java index 31b4b0b..96e5b86 100644 --- a/src/main/java/re/imc/geysermodelengine/model/ModelEntity.java +++ b/src/main/java/re/imc/geysermodelengine/model/ModelEntity.java @@ -6,9 +6,16 @@ import com.ticxo.modelengine.api.model.ActiveModel; import com.ticxo.modelengine.api.model.ModeledEntity; import lombok.Getter; import me.libraryaddict.disguise.DisguiseAPI; +import me.libraryaddict.disguise.disguisetypes.DisguiseType; +import me.libraryaddict.disguise.disguisetypes.MiscDisguise; +import me.libraryaddict.disguise.disguisetypes.MobDisguise; import me.libraryaddict.disguise.disguisetypes.PlayerDisguise; +import me.libraryaddict.disguise.utilities.reflection.ReflectionManager; +import me.zimzaza4.geyserutils.spigot.api.PlayerUtils; import org.bukkit.Bukkit; import org.bukkit.Location; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.geysermc.floodgate.api.FloodgateApi; @@ -74,11 +81,23 @@ public class ModelEntity { } public LivingEntity spawnEntity() { - entity = (LivingEntity) modeledEntity.getBase().getLocation().getWorld().spawnEntity(modeledEntity.getBase().getLocation(), GeyserModelEngine.getInstance().getModelEntityType()); - applyFeatures(entity, "model." + activeModel.getBlueprint().getName()); ModelEntity model = this; + int lastEntityId = ReflectionManager.getNewEntityId(); + // System.out.println("RID:" + entityId); + for (Player onlinePlayer : Bukkit.getOnlinePlayers()) { + if (FloodgateApi.getInstance().isFloodgatePlayer(onlinePlayer.getUniqueId())) { + PlayerUtils.setCustomEntity(onlinePlayer, lastEntityId + 1, "modelengine:" + model.getActiveModel().getBlueprint().getName()); + + } + } + + entity = (LivingEntity) modeledEntity.getBase().getLocation().getWorld().spawnEntity(modeledEntity.getBase().getLocation(), GeyserModelEngine.getInstance().getModelEntityType()); + int id = entity.getEntityId(); + MODEL_ENTITIES.put(id, model); + applyFeatures(entity, "model." + activeModel.getBlueprint().getName()); + controllerEntity = new BukkitEntity(entity); return entity; } @@ -102,15 +121,17 @@ public class ModelEntity { display.setPersistent(false); // armorStand.setVisible(false); + + /* String uuid = UUID.randomUUID().toString(); - PlayerDisguise disguise = new PlayerDisguise(name + "_" + uuid); + MobDisguise disguise = new MobDisguise(DisguiseType.getType(entity.getType())); + disguise.setDisguiseName(uuid); - DisguiseAPI.disguiseEntity(display, disguise.setNameVisible(false)); + DisguiseAPI.disguiseEntity(display, disguise); + */ } - - } From e722c3b07f4f0c4364c90e2c5941dcdd829f45fd Mon Sep 17 00:00:00 2001 From: zimzaza4 <3625282098@qq.com> Date: Mon, 15 Apr 2024 22:44:03 +0800 Subject: [PATCH 02/11] custom entity --- .../listener/AddEntityPacketListener.java | 15 ++++++++++++--- .../geysermodelengine/listener/ModelListener.java | 3 +++ .../imc/geysermodelengine/model/EntityTask.java | 3 +-- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/main/java/re/imc/geysermodelengine/listener/AddEntityPacketListener.java b/src/main/java/re/imc/geysermodelengine/listener/AddEntityPacketListener.java index 14363c9..7aa7681 100644 --- a/src/main/java/re/imc/geysermodelengine/listener/AddEntityPacketListener.java +++ b/src/main/java/re/imc/geysermodelengine/listener/AddEntityPacketListener.java @@ -33,21 +33,30 @@ public class AddEntityPacketListener extends PacketAdapter { if (model != null) { if (FloodgateApi.getInstance().isFloodgatePlayer(event.getPlayer().getUniqueId())) { if (packet.getMeta("delayed").isPresent()) { + System.out.println("SENT"); return; } + EntityTask task = model.getTask(); - if (task == null) { + int delay = 1; + boolean firstJoined = GeyserModelEngine.getInstance().getJoinedPlayer().getIfPresent(event.getPlayer()) != null; + if (firstJoined) { + delay = GeyserModelEngine.getInstance().getJoinSendDelay(); + } + if (task == null || firstJoined) { Bukkit.getScheduler().runTaskLater(GeyserModelEngine.getInstance(), () -> { model.getTask().sendEntityData(event.getPlayer(), GeyserModelEngine.getInstance().getSkinSendDelay()); - }, 1); + }, delay); } else { task.sendEntityData(event.getPlayer(), GeyserModelEngine.getInstance().getSkinSendDelay()); } + event.setCancelled(true); + Bukkit.getScheduler().runTaskLater(GeyserModelEngine.getInstance(), () -> { packet.setMeta("delayed", 1); ProtocolLibrary.getProtocolManager().sendServerPacket(event.getPlayer(), packet); - }, 2); + }, delay + 2); } else { event.setCancelled(true); } diff --git a/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java b/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java index 3b0c2a9..3100fea 100644 --- a/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java +++ b/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java @@ -62,6 +62,9 @@ public class ModelListener implements Listener { @EventHandler public void onAnimationPlay(AnimationPlayEvent event) { + if (event.getModel().getModeledEntity() == null) { + return; + } Map map = ModelEntity.ENTITIES.get(event.getModel().getModeledEntity().getBase().getEntityId()); if (map == null) { return; diff --git a/src/main/java/re/imc/geysermodelengine/model/EntityTask.java b/src/main/java/re/imc/geysermodelengine/model/EntityTask.java index 1e1c912..7032223 100644 --- a/src/main/java/re/imc/geysermodelengine/model/EntityTask.java +++ b/src/main/java/re/imc/geysermodelengine/model/EntityTask.java @@ -199,8 +199,7 @@ public class EntityTask { } public void sendEntityData(Player player, int delay) { - GeyserModelEngine.getInstance().getLogger() - .info("SEND ENTITY"); + System.out.println("SEND CUSTOM ENTITY"); PlayerUtils.setCustomEntity(player, model.getEntity().getEntityId(), "modelengine:" + model.getActiveModel().getBlueprint().getName()); Bukkit.getScheduler().runTaskLaterAsynchronously(GeyserModelEngine.getInstance(), () -> { // PlayerUtils.sendCustomSkin(player, model.getEntity(), model.getActiveModel().getBlueprint().getName()); From 90f3c699cb654d93f2d68897181b49662db8da76 Mon Sep 17 00:00:00 2001 From: zimzaza4 <3625282098@qq.com> Date: Sat, 20 Apr 2024 13:26:39 +0800 Subject: [PATCH 03/11] custom entity --- libs/geyserutils-spigot-1.0-SNAPSHOT.jar | Bin 6549618 -> 6549852 bytes .../geysermodelengine/GeyserModelEngine.java | 11 ++++++ .../listener/AddEntityPacketListener.java | 18 ++++++--- .../listener/ModelListener.java | 31 ++++++++++++++- .../geysermodelengine/model/EntityTask.java | 36 +++++++++--------- .../geysermodelengine/model/ModelEntity.java | 31 ++------------- 6 files changed, 77 insertions(+), 50 deletions(-) diff --git a/libs/geyserutils-spigot-1.0-SNAPSHOT.jar b/libs/geyserutils-spigot-1.0-SNAPSHOT.jar index c6bf260af497b4128b12bf086fc0b218c0a160e7..ec7de3a5875053c7a37a0a0fd24fdc95c218ce43 100644 GIT binary patch delta 67873 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 S;yw08<)|N|#<(#9*8c%|a8Q^4 delta 67865 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

{Al4pSF#w?s&PCD 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 PdEFWK)UuRWFya3PDmgrC diff --git a/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java b/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java index 30a02a8..08e3fd3 100644 --- a/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java +++ b/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java @@ -7,6 +7,7 @@ import com.ticxo.modelengine.api.ModelEngineAPI; import com.ticxo.modelengine.api.model.ActiveModel; import com.ticxo.modelengine.api.model.ModeledEntity; import lombok.Getter; +import lombok.Setter; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.entity.Entity; @@ -42,6 +43,16 @@ public final class GeyserModelEngine extends JavaPlugin { @Getter private Cache joinedPlayer; + @Getter + @Setter + private boolean spawningModelEntity = false; + + + @Getter + @Setter + private ModelEntity currentModel = null; + + @Getter private int joinSendDelay; diff --git a/src/main/java/re/imc/geysermodelengine/listener/AddEntityPacketListener.java b/src/main/java/re/imc/geysermodelengine/listener/AddEntityPacketListener.java index 7aa7681..a8fad89 100644 --- a/src/main/java/re/imc/geysermodelengine/listener/AddEntityPacketListener.java +++ b/src/main/java/re/imc/geysermodelengine/listener/AddEntityPacketListener.java @@ -4,9 +4,17 @@ import com.comphenix.protocol.PacketType; import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.events.*; import com.comphenix.protocol.reflect.StructureModifier; +import com.comphenix.protocol.wrappers.WrappedWatchableObject; +import com.ticxo.modelengine.api.ModelEngineAPI; import com.ticxo.modelengine.api.entity.BukkitEntity; +import com.ticxo.modelengine.api.entity.Hitbox; +import com.ticxo.modelengine.api.interaction.DynamicHitbox; +import com.ticxo.modelengine.api.interaction.InteractionTracker; +import com.ticxo.modelengine.api.model.bone.type.SubHitbox; +import com.ticxo.modelengine.api.nms.entity.HitboxEntity; import org.bukkit.Bukkit; import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; import org.geysermc.floodgate.api.FloodgateApi; import org.jetbrains.annotations.NotNull; import re.imc.geysermodelengine.GeyserModelEngine; @@ -14,6 +22,7 @@ import re.imc.geysermodelengine.model.EntityTask; import re.imc.geysermodelengine.model.ModelEntity; import java.util.Set; +import java.util.UUID; public class AddEntityPacketListener extends PacketAdapter { public AddEntityPacketListener() { @@ -22,18 +31,17 @@ public class AddEntityPacketListener extends PacketAdapter { @Override public void onPacketSending(PacketEvent event) { + PacketContainer packet = event.getPacket(); 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 (FloodgateApi.getInstance().isFloodgatePlayer(event.getPlayer().getUniqueId())) { + if (isBedrock) { if (packet.getMeta("delayed").isPresent()) { - System.out.println("SENT"); return; } diff --git a/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java b/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java index 3100fea..3dfc81c 100644 --- a/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java +++ b/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java @@ -7,16 +7,21 @@ import com.ticxo.modelengine.api.events.AnimationPlayEvent; import com.ticxo.modelengine.api.events.RemoveModelEvent; import com.ticxo.modelengine.api.model.ActiveModel; import com.ticxo.modelengine.api.model.ModeledEntity; +import me.zimzaza4.geyserutils.spigot.api.PlayerUtils; import org.bukkit.Bukkit; import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntitySpawnEvent; import org.bukkit.event.entity.ProjectileHitEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.world.EntitiesLoadEvent; import org.bukkit.metadata.FixedMetadataValue; +import org.geysermc.floodgate.api.FloodgateApi; import re.imc.geysermodelengine.GeyserModelEngine; import re.imc.geysermodelengine.model.EntityTask; import re.imc.geysermodelengine.model.ModelEntity; @@ -30,6 +35,7 @@ public class ModelListener implements Listener { public void onAddModel(AddModelEvent event) { if (event.isCancelled()) { return; + } Bukkit.getScheduler().runTask(GeyserModelEngine.getInstance(), () -> { @@ -37,10 +43,11 @@ public class ModelListener implements Listener { }); } + @EventHandler public void onRemoveModel(RemoveModelEvent event) { event.getTarget().getBase(); - + // todo? } @EventHandler @@ -94,6 +101,28 @@ public class ModelListener implements Listener { } } + @EventHandler(priority = EventPriority.HIGHEST) + public void onModelEntitySpawn(EntitySpawnEvent event) { + if (GeyserModelEngine.getInstance().isSpawningModelEntity() && event.getEntity() instanceof LivingEntity entity) { + if (event.isCancelled()) { + event.setCancelled(false); + } + ModelEntity model = GeyserModelEngine.getInstance().getCurrentModel(); + int id = entity.getEntityId(); + ActiveModel activeModel = model.getActiveModel(); + ModelEntity.MODEL_ENTITIES.put(id, model); + model.applyFeatures(entity, "model." + activeModel.getBlueprint().getName()); + GeyserModelEngine.getInstance().setCurrentModel(null); + GeyserModelEngine.getInstance().setSpawningModelEntity(false); + + for (Player onlinePlayer : Bukkit.getOnlinePlayers()) { + if (FloodgateApi.getInstance().isFloodgatePlayer(onlinePlayer.getUniqueId())) { + PlayerUtils.setCustomEntity(onlinePlayer, entity.getEntityId(), "modelengine:" + model.getActiveModel().getBlueprint().getName()); + } + } + } + } + @EventHandler public void onModelEntityHurt(EntityDamageEvent event) { Map model = ModelEntity.ENTITIES.get(event.getEntity().getEntityId()); diff --git a/src/main/java/re/imc/geysermodelengine/model/EntityTask.java b/src/main/java/re/imc/geysermodelengine/model/EntityTask.java index 7032223..3156a66 100644 --- a/src/main/java/re/imc/geysermodelengine/model/EntityTask.java +++ b/src/main/java/re/imc/geysermodelengine/model/EntityTask.java @@ -88,7 +88,7 @@ public class EntityTask { public void run() { entity.remove(); } - }.runTaskLater(GeyserModelEngine.getInstance(), Math.min(Math.max(playAnimation(animation, 99) - 1, 0), 200)); + }.runTaskLater(GeyserModelEngine.getInstance(), Math.min(Math.max(playAnimation(animation, 99, 50f) - 1, 0), 200)); } else { new BukkitRunnable() { @Override @@ -199,34 +199,32 @@ public class EntityTask { } public void sendEntityData(Player player, int delay) { - System.out.println("SEND CUSTOM ENTITY"); PlayerUtils.setCustomEntity(player, model.getEntity().getEntityId(), "modelengine:" + model.getActiveModel().getBlueprint().getName()); Bukkit.getScheduler().runTaskLaterAsynchronously(GeyserModelEngine.getInstance(), () -> { // PlayerUtils.sendCustomSkin(player, model.getEntity(), model.getActiveModel().getBlueprint().getName()); - playBedrockAnimation("animation." + model.getActiveModel().getBlueprint().getName() + "." + lastAnimation, looping); + playBedrockAnimation("animation." + model.getActiveModel().getBlueprint().getName() + "." + lastAnimation, looping, 0f); sendHitBox(player); + sendScale(player); Bukkit.getScheduler().runTaskLaterAsynchronously(GeyserModelEngine.getInstance(), () -> { sendHitBox(player); }, 8); }, delay); } + + public void sendScale(Player player) { + // todo? + } + public void sendHitBoxToAll() { for (Player viewer : model.getViewers()) { - if (model.getModeledEntity().getBase() instanceof BukkitEntity bukkitEntity) { - @NotNull BoundingBox box = bukkitEntity.getOriginal().getBoundingBox(); - PlayerUtils.sendCustomHitBox(viewer, model.getEntity(), (float) box.getHeight(), (float) ((box.getWidthX() + box.getWidthZ()) / 2f)); - // huh i dont know how to deal with width - } + PlayerUtils.sendCustomHitBox(viewer, model.getEntity(), 0.01f, 0.01f); } } public void sendHitBox(Player viewer) { - if (model.getModeledEntity().getBase() instanceof BukkitEntity bukkitEntity) { - @NotNull BoundingBox box = bukkitEntity.getOriginal().getBoundingBox(); - PlayerUtils.sendCustomHitBox(viewer, model.getEntity(), (float) box.getHeight(), (float) ((box.getWidthX() + box.getWidthZ()) / 2f)); - // huh i dont know how to deal with width - } + PlayerUtils.sendCustomHitBox(viewer, model.getEntity(), 0.01f, 0.01f); + } public boolean hasAnimation(String animation) { @@ -234,7 +232,11 @@ public class EntityTask { BlueprintAnimation animationProperty = activeModel.getBlueprint().getAnimations().get(animation); return !(animationProperty == null); } + public int playAnimation(String animation, int p) { + return playAnimation(animation, p, 5f); + } + public int playAnimation(String animation, int p, float blendTime) { ActiveModel activeModel = model.getActiveModel(); @@ -282,9 +284,9 @@ public class EntityTask { animationCooldown.set((int) (animationProperty.getLength() * 20)); if (delaySend) { - Bukkit.getScheduler().runTaskLaterAsynchronously(GeyserModelEngine.getInstance(), () -> playBedrockAnimation("animation." + activeModel.getBlueprint().getName() + "." + animationProperty.getName(), looping), 2); + Bukkit.getScheduler().runTaskLaterAsynchronously(GeyserModelEngine.getInstance(), () -> playBedrockAnimation("animation." + activeModel.getBlueprint().getName() + "." + animationProperty.getName(), looping, blendTime), 2); } else { - playBedrockAnimation(id, looping); + playBedrockAnimation(id, looping, blendTime); } } return animationCooldown.get(); @@ -319,7 +321,7 @@ public class EntityTask { */ - private void playBedrockAnimation(String animationId, boolean loop) { + private void playBedrockAnimation(String animationId, boolean loop, float blendTime) { // model.getViewers().forEach(viewer -> viewer.sendActionBar("CURRENT AN:" + animationId)); @@ -328,7 +330,7 @@ public class EntityTask { Animation.AnimationBuilder animation = Animation.builder() .animation(animationId) - .blendOutTime(0f) + .blendOutTime(blendTime) .controller("controller.animation.armor_stand.wiggle"); if (loop) { diff --git a/src/main/java/re/imc/geysermodelengine/model/ModelEntity.java b/src/main/java/re/imc/geysermodelengine/model/ModelEntity.java index 96e5b86..723ab17 100644 --- a/src/main/java/re/imc/geysermodelengine/model/ModelEntity.java +++ b/src/main/java/re/imc/geysermodelengine/model/ModelEntity.java @@ -5,26 +5,14 @@ import com.ticxo.modelengine.api.entity.BukkitEntity; import com.ticxo.modelengine.api.model.ActiveModel; import com.ticxo.modelengine.api.model.ModeledEntity; import lombok.Getter; -import me.libraryaddict.disguise.DisguiseAPI; -import me.libraryaddict.disguise.disguisetypes.DisguiseType; -import me.libraryaddict.disguise.disguisetypes.MiscDisguise; -import me.libraryaddict.disguise.disguisetypes.MobDisguise; -import me.libraryaddict.disguise.disguisetypes.PlayerDisguise; -import me.libraryaddict.disguise.utilities.reflection.ReflectionManager; -import me.zimzaza4.geyserutils.spigot.api.PlayerUtils; -import org.bukkit.Bukkit; import org.bukkit.Location; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; -import org.geysermc.floodgate.api.FloodgateApi; import re.imc.geysermodelengine.GeyserModelEngine; import java.util.HashMap; import java.util.Map; import java.util.Set; -import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; @Getter @@ -82,22 +70,11 @@ public class ModelEntity { public LivingEntity spawnEntity() { ModelEntity model = this; - int lastEntityId = ReflectionManager.getNewEntityId(); + // int lastEntityId = ReflectionManager.getNewEntityId(); // System.out.println("RID:" + entityId); - for (Player onlinePlayer : Bukkit.getOnlinePlayers()) { - if (FloodgateApi.getInstance().isFloodgatePlayer(onlinePlayer.getUniqueId())) { - PlayerUtils.setCustomEntity(onlinePlayer, lastEntityId + 1, "modelengine:" + model.getActiveModel().getBlueprint().getName()); - - } - } - + GeyserModelEngine.getInstance().setSpawningModelEntity(true); + GeyserModelEngine.getInstance().setCurrentModel(model); entity = (LivingEntity) modeledEntity.getBase().getLocation().getWorld().spawnEntity(modeledEntity.getBase().getLocation(), GeyserModelEngine.getInstance().getModelEntityType()); - - int id = entity.getEntityId(); - - MODEL_ENTITIES.put(id, model); - applyFeatures(entity, "model." + activeModel.getBlueprint().getName()); - controllerEntity = new BukkitEntity(entity); return entity; } @@ -108,7 +85,7 @@ public class ModelEntity { } - private void applyFeatures(LivingEntity display, String name) { + public void applyFeatures(LivingEntity display, String name) { display.setGravity(false); display.setMaxHealth(2048); display.setHealth(2048); From 2228d2f9e3ac909a0622291604e3e26bb9633a39 Mon Sep 17 00:00:00 2001 From: zimzaza4 <3625282098@qq.com> Date: Sat, 20 Apr 2024 21:44:53 +0800 Subject: [PATCH 04/11] custom entity --- .../java/re/imc/geysermodelengine/model/EntityTask.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/re/imc/geysermodelengine/model/EntityTask.java b/src/main/java/re/imc/geysermodelengine/model/EntityTask.java index 3156a66..f09e3fc 100644 --- a/src/main/java/re/imc/geysermodelengine/model/EntityTask.java +++ b/src/main/java/re/imc/geysermodelengine/model/EntityTask.java @@ -66,7 +66,7 @@ public class EntityTask { } } } - if (model.getEntity().isDead()) { + if (model.getEntity().isDead() && model.getModeledEntity().getBase().isAlive()) { model.spawnEntity(); } @@ -88,7 +88,7 @@ public class EntityTask { public void run() { entity.remove(); } - }.runTaskLater(GeyserModelEngine.getInstance(), Math.min(Math.max(playAnimation(animation, 99, 50f) - 1, 0), 200)); + }.runTaskLater(GeyserModelEngine.getInstance(), Math.min(Math.max(playAnimation(animation, 99, 5f) - 1, 0), 200)); } else { new BukkitRunnable() { @Override @@ -234,7 +234,7 @@ public class EntityTask { } public int playAnimation(String animation, int p) { - return playAnimation(animation, p, 5f); + return playAnimation(animation, p, 0f); } public int playAnimation(String animation, int p, float blendTime) { From 943e083edda7bfd28d21f3e89b0e17da53165c26 Mon Sep 17 00:00:00 2001 From: zimzaza4 <3625282098@qq.com> Date: Sat, 20 Apr 2024 21:46:34 +0800 Subject: [PATCH 05/11] delete libsdisguige --- src/main/resources/plugin.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 2cbdd53..c7c9df6 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -4,5 +4,4 @@ main: re.imc.geysermodelengine.GeyserModelEngine api-version: '1.19' depend: - ModelEngine - - LibsDisguises - floodgate \ No newline at end of file From ce5ac8ec3d6865b0245cfd4e9bd188d78fdba6ad Mon Sep 17 00:00:00 2001 From: zimzaza4 <3625282098@qq.com> Date: Sat, 20 Apr 2024 21:46:42 +0800 Subject: [PATCH 06/11] delete libsdisguige --- pom.xml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/pom.xml b/pom.xml index 43938ba..dc30351 100644 --- a/pom.xml +++ b/pom.xml @@ -122,12 +122,6 @@ 2.2.2-SNAPSHOT provided - - LibsDisguises - LibsDisguises - 10.0.35 - provided - com.comphenix.protocol ProtocolLib 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 07/11] 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); } From 18b4008c9c55c2aeb8c731e52a806d9798c9503c Mon Sep 17 00:00:00 2001 From: zimzaza4 <3625282098@qq.com> Date: Sun, 21 Apr 2024 14:00:48 +0800 Subject: [PATCH 08/11] fix --- .../listener/ModelListener.java | 14 +++++++---- .../geysermodelengine/model/EntityTask.java | 23 +++++++++++-------- src/main/resources/config.yml | 3 ++- 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java b/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java index f0e75a8..937b88a 100644 --- a/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java +++ b/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java @@ -5,16 +5,19 @@ import com.ticxo.modelengine.api.events.AddModelEvent; import com.ticxo.modelengine.api.events.AnimationEndEvent; import com.ticxo.modelengine.api.events.AnimationPlayEvent; import com.ticxo.modelengine.api.events.RemoveModelEvent; +import com.ticxo.modelengine.api.generator.blueprint.ModelBlueprint; import com.ticxo.modelengine.api.model.ActiveModel; import com.ticxo.modelengine.api.model.ModeledEntity; import me.zimzaza4.geyserutils.spigot.api.PlayerUtils; import org.bukkit.Bukkit; import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityChangeBlockEvent; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntitySpawnEvent; import org.bukkit.event.entity.ProjectileHitEvent; @@ -28,6 +31,8 @@ import re.imc.geysermodelengine.model.ModelEntity; import java.util.Map; import java.util.Optional; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; public class ModelListener implements Listener { @@ -37,9 +42,9 @@ public class ModelListener implements Listener { return; } - if (event.getTarget().getModel(event.getModel().getBlueprint().getName()).isPresent()) { - return; - } + + UUID entityId = event.getTarget().getBase().getUUID(); + ModelBlueprint blueprint = event.getModel().getBlueprint(); Bukkit.getScheduler().runTask(GeyserModelEngine.getInstance(), () -> { ModelEntity.create(event.getTarget(), event.getModel()); @@ -47,10 +52,9 @@ public class ModelListener implements Listener { } + @EventHandler public void onRemoveModel(RemoveModelEvent event) { - event.getTarget().getBase(); - // todo? } @EventHandler diff --git a/src/main/java/re/imc/geysermodelengine/model/EntityTask.java b/src/main/java/re/imc/geysermodelengine/model/EntityTask.java index 6775974..4fff2ea 100644 --- a/src/main/java/re/imc/geysermodelengine/model/EntityTask.java +++ b/src/main/java/re/imc/geysermodelengine/model/EntityTask.java @@ -17,6 +17,7 @@ import org.bukkit.util.BoundingBox; import org.geysermc.floodgate.api.FloodgateApi; import org.jetbrains.annotations.NotNull; import re.imc.geysermodelengine.GeyserModelEngine; +import re.imc.geysermodelengine.listener.ModelListener; import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; @@ -83,14 +84,13 @@ public class EntityTask { if (activeModel.isRemoved() || !modeledEntity.getBase().isAlive()) { if (!modeledEntity.getBase().isAlive()) { - if (!activeModel.isRemoved()) { - String animation = hasAnimation("death") ? "death" : "idle"; + if (!activeModel.isRemoved() && hasAnimation("death")) { new BukkitRunnable() { @Override public void run() { entity.remove(); } - }.runTaskLater(GeyserModelEngine.getInstance(), Math.min(Math.max(playAnimation(animation, 999, 0f) - 3, 0), 200)); + }.runTaskLater(GeyserModelEngine.getInstance(), Math.min(Math.max(playAnimation("death", 999, 5f, true) - 3, 0), 200)); } else { new BukkitRunnable() { @Override @@ -154,6 +154,7 @@ public class EntityTask { playAnimation("idle", 0); } } + if (tick % 40 == 0) { for (Player viewer : Set.copyOf(viewers)) { @@ -205,7 +206,9 @@ public class EntityTask { 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); + if (looping) { + playBedrockAnimation("animation." + model.getActiveModel().getBlueprint().getName() + "." + lastAnimation, looping, 0f); + } sendHitBox(player); sendScale(player); Bukkit.getScheduler().runTaskLaterAsynchronously(GeyserModelEngine.getInstance(), () -> { @@ -237,9 +240,9 @@ public class EntityTask { } public int playAnimation(String animation, int p) { - return playAnimation(animation, p, 0); + return playAnimation(animation, p, 0, false); } - public int playAnimation(String animation, int p, float blendTime) { + public int playAnimation(String animation, int p, float blendTime, boolean forceLoop) { ActiveModel activeModel = model.getActiveModel(); @@ -264,7 +267,7 @@ public class EntityTask { firstAnimation = false; } boolean lastLoopState = looping; - looping = animationProperty.getLoopMode() == BlueprintAnimation.LoopMode.LOOP;; + looping = forceLoop || animationProperty.getLoopMode() == BlueprintAnimation.LoopMode.LOOP;; if (lastAnimation.equals(animation)) { if (looping) { @@ -274,6 +277,7 @@ public class EntityTask { } + if (play) { currentAnimationPriority.set(p); @@ -326,15 +330,14 @@ public class EntityTask { */ private void playBedrockAnimation(String animationId, boolean loop, float blendTime) { - // model.getViewers().forEach(viewer -> viewer.sendActionBar("CURRENT AN:" + animationId)); + model.getViewers().forEach(viewer -> viewer.sendActionBar("CURRENT AN:" + animationId)); Entity entity = model.getEntity(); Set viewers = model.getViewers(); Animation.AnimationBuilder animation = Animation.builder() .animation(animationId) - .blendOutTime(blendTime) - .controller("controller.animation.armor_stand.wiggle"); + .blendOutTime(blendTime); if (loop) { animation.nextState(animationId); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index a1a80e5..eee40f1 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,4 +1,5 @@ skin-send-delay: 0 skin-view-distance: 50 join-send-delay: 20 -model-entity-type: BAT # must be a living entity \ No newline at end of file +model-entity-type: BAT # must be a living entity +debug: false \ No newline at end of file From a9ed339af9416750b63ede16952777f05a1ced13 Mon Sep 17 00:00:00 2001 From: zimzaza4 <3625282098@qq.com> Date: Wed, 1 May 2024 22:43:01 +0800 Subject: [PATCH 09/11] mount --- .../geysermodelengine/GeyserModelEngine.java | 15 +++ .../listener/AddEntityPacketListener.java | 7 +- .../listener/ModelListener.java | 46 ++++++--- .../listener/MountPacketListener.java | 65 +++++++++++++ .../geysermodelengine/model/EntityTask.java | 97 ++++++++++--------- .../geysermodelengine/model/ModelEntity.java | 9 +- 6 files changed, 179 insertions(+), 60 deletions(-) create mode 100644 src/main/java/re/imc/geysermodelengine/listener/MountPacketListener.java diff --git a/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java b/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java index 9d76dcf..49b3fed 100644 --- a/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java +++ b/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java @@ -1,11 +1,14 @@ package re.imc.geysermodelengine; import com.comphenix.protocol.ProtocolLibrary; +import com.comphenix.protocol.wrappers.Pair; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; +import com.google.common.collect.Sets; import com.ticxo.modelengine.api.ModelEngineAPI; import com.ticxo.modelengine.api.model.ActiveModel; import com.ticxo.modelengine.api.model.ModeledEntity; +import com.ticxo.modelengine.api.model.bone.type.Mount; import lombok.Getter; import lombok.Setter; import org.bukkit.Bukkit; @@ -16,10 +19,14 @@ import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; import re.imc.geysermodelengine.listener.AddEntityPacketListener; import re.imc.geysermodelengine.listener.ModelListener; +import re.imc.geysermodelengine.listener.MountPacketListener; import re.imc.geysermodelengine.model.ModelEntity; +import java.util.HashSet; import java.util.Map; import java.util.Optional; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; public final class GeyserModelEngine extends JavaPlugin { @@ -55,6 +62,12 @@ public final class GeyserModelEngine extends JavaPlugin { @Getter private int joinSendDelay; + @Getter + private boolean debug; + + @Getter + private Map> drivers = new ConcurrentHashMap<>(); + @Override public void onEnable() { // Plugin startup logic @@ -62,6 +75,7 @@ public final class GeyserModelEngine extends JavaPlugin { // alwaysSendSkin = getConfig().getBoolean("always-send-skin"); skinSendDelay = getConfig().getInt("skin-send-delay", 0); viewDistance = getConfig().getInt("skin-view-distance", 60); + debug = getConfig().getBoolean("debug", false); modelEntityType = EntityType.valueOf(getConfig().getString("model-entity-type", "BAT")); joinSendDelay = getConfig().getInt("join-send-delay", 20); if (joinSendDelay > 0) { @@ -70,6 +84,7 @@ public final class GeyserModelEngine extends JavaPlugin { } instance = this; ProtocolLibrary.getProtocolManager().addPacketListener(new AddEntityPacketListener()); + ProtocolLibrary.getProtocolManager().addPacketListener(new MountPacketListener()); Bukkit.getPluginManager().registerEvents(new ModelListener(), this); Bukkit.getScheduler() diff --git a/src/main/java/re/imc/geysermodelengine/listener/AddEntityPacketListener.java b/src/main/java/re/imc/geysermodelengine/listener/AddEntityPacketListener.java index 8e13905..fb22064 100644 --- a/src/main/java/re/imc/geysermodelengine/listener/AddEntityPacketListener.java +++ b/src/main/java/re/imc/geysermodelengine/listener/AddEntityPacketListener.java @@ -46,6 +46,11 @@ public class AddEntityPacketListener extends PacketAdapter { if (model != null) { if (isBedrock) { if (packet.getMeta("delayed").isPresent()) { + if (model.getTask().isLooping()) { + + String lastAnimation = model.getTask().getLastAnimation(); + model.getTask().playBedrockAnimation(lastAnimation, Set.of(event.getPlayer()), true, 0f); + } return; } @@ -58,7 +63,7 @@ public class AddEntityPacketListener extends PacketAdapter { if (task == null || firstJoined) { Bukkit.getScheduler().runTaskLater(GeyserModelEngine.getInstance(), () -> { model.getTask().sendEntityData(event.getPlayer(), GeyserModelEngine.getInstance().getSkinSendDelay()); - }, delay); + }, delay); } else { task.sendEntityData(event.getPlayer(), GeyserModelEngine.getInstance().getSkinSendDelay()); } diff --git a/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java b/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java index 937b88a..0806edc 100644 --- a/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java +++ b/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java @@ -1,10 +1,9 @@ package re.imc.geysermodelengine.listener; +import com.comphenix.protocol.wrappers.Pair; +import com.destroystokyo.paper.event.entity.EntityRemoveFromWorldEvent; import com.ticxo.modelengine.api.ModelEngineAPI; -import com.ticxo.modelengine.api.events.AddModelEvent; -import com.ticxo.modelengine.api.events.AnimationEndEvent; -import com.ticxo.modelengine.api.events.AnimationPlayEvent; -import com.ticxo.modelengine.api.events.RemoveModelEvent; +import com.ticxo.modelengine.api.events.*; import com.ticxo.modelengine.api.generator.blueprint.ModelBlueprint; import com.ticxo.modelengine.api.model.ActiveModel; import com.ticxo.modelengine.api.model.ModeledEntity; @@ -17,11 +16,9 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityChangeBlockEvent; -import org.bukkit.event.entity.EntityDamageEvent; -import org.bukkit.event.entity.EntitySpawnEvent; -import org.bukkit.event.entity.ProjectileHitEvent; +import org.bukkit.event.entity.*; import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.world.EntitiesLoadEvent; import org.bukkit.metadata.FixedMetadataValue; import org.geysermc.floodgate.api.FloodgateApi; @@ -42,10 +39,6 @@ public class ModelListener implements Listener { return; } - - UUID entityId = event.getTarget().getBase().getUUID(); - ModelBlueprint blueprint = event.getModel().getBlueprint(); - Bukkit.getScheduler().runTask(GeyserModelEngine.getInstance(), () -> { ModelEntity.create(event.getTarget(), event.getModel()); }); @@ -57,6 +50,29 @@ public class ModelListener implements Listener { public void onRemoveModel(RemoveModelEvent event) { } + @EventHandler(priority = EventPriority.MONITOR) + public void onModelMount(ModelMountEvent event) { + Map map = ModelEntity.ENTITIES.get(event.getVehicle().getModeledEntity().getBase().getEntityId()); + if (map == null) { + return; + } + if (!event.isDriver()) { + return; + } + ModelEntity model = map.get(event.getVehicle()); + + if (model != null && event.getPassenger() instanceof Player player) { + GeyserModelEngine.getInstance().getDrivers().put(player, new Pair<>(event.getVehicle(), event.getSeat())); + } + } + + @EventHandler(priority = EventPriority.MONITOR) + public void onModelDismount(ModelDismountEvent event) { + if (event.getPassenger() instanceof Player player) { + GeyserModelEngine.getInstance().getDrivers().remove(player); + } + } + @EventHandler public void onEntityLoad(EntitiesLoadEvent event) { Bukkit.getScheduler() @@ -108,6 +124,7 @@ public class ModelListener implements Listener { } } + @EventHandler(priority = EventPriority.HIGHEST) public void onModelEntitySpawn(EntitySpawnEvent event) { if (GeyserModelEngine.getInstance().isSpawningModelEntity() && event.getEntity() instanceof LivingEntity entity) { @@ -182,4 +199,9 @@ public class ModelListener implements Listener { public void onPlayerJoin(PlayerJoinEvent event) { GeyserModelEngine.getInstance().getJoinedPlayer().put(event.getPlayer(), true); } + + @EventHandler + public void onPlayerQuit(PlayerQuitEvent event) { + GeyserModelEngine.getInstance().getDrivers().remove(event.getPlayer()); + } } diff --git a/src/main/java/re/imc/geysermodelengine/listener/MountPacketListener.java b/src/main/java/re/imc/geysermodelengine/listener/MountPacketListener.java new file mode 100644 index 0000000..02c2158 --- /dev/null +++ b/src/main/java/re/imc/geysermodelengine/listener/MountPacketListener.java @@ -0,0 +1,65 @@ +package re.imc.geysermodelengine.listener; + +import com.comphenix.protocol.PacketType; +import com.comphenix.protocol.events.ListenerOptions; +import com.comphenix.protocol.events.ListenerPriority; +import com.comphenix.protocol.events.PacketAdapter; +import com.comphenix.protocol.events.PacketEvent; +import com.comphenix.protocol.wrappers.EnumWrappers; +import com.comphenix.protocol.wrappers.Pair; +import com.ticxo.modelengine.api.model.ActiveModel; +import com.ticxo.modelengine.api.model.bone.type.Mount; +import org.geysermc.floodgate.api.FloodgateApi; +import re.imc.geysermodelengine.GeyserModelEngine; + +import java.util.Set; + +public class MountPacketListener extends PacketAdapter { + public MountPacketListener() { + super(GeyserModelEngine.getInstance(), ListenerPriority.HIGHEST, Set.of(PacketType.Play.Client.STEER_VEHICLE, PacketType.Play.Client.ENTITY_ACTION), ListenerOptions.SYNC); + } + + @Override + public void onPacketReceiving(PacketEvent event) { + if (!FloodgateApi.getInstance().isFloodgatePlayer(event.getPlayer().getUniqueId())) { + return; + } + + if (event.getPacket().getType() == PacketType.Play.Client.STEER_VEHICLE) { + Pair seat = GeyserModelEngine.getInstance().getDrivers().get(event.getPlayer()); + if (seat != null) { + float pitch = event.getPlayer().getPitch(); + if (seat.getFirst().getModeledEntity().getBase().isFlying()) { + if (pitch < -30) { + event.getPacket().getBooleans().writeSafely(0, true); + } + if (pitch > 45) { + event.getPacket().getBooleans().writeSafely(1, true); + } + } else { + if (event.getPlayer().getInventory().getHeldItemSlot() == 0) { + event.getPacket().getBooleans().writeSafely(0, true); + event.getPlayer().getInventory().setHeldItemSlot(3); + event.getPlayer().sendActionBar("jump"); + } + if (pitch > 89 || event.getPlayer().getInventory().getHeldItemSlot() == 1) { + event.getPacket().getBooleans().writeSafely(1, true); + event.getPlayer().sendActionBar("shift"); + } + if (event.getPlayer().getInventory().getHeldItemSlot() == 8) { + event.getPacket().getBooleans().writeSafely(0, true); + event.getPlayer().sendActionBar("hold jump"); + } + } + } + } else { + Pair seat = GeyserModelEngine.getInstance().getDrivers().get(event.getPlayer()); + if (seat != null) { + if (event.getPacket().getPlayerActions().read(0) == EnumWrappers.PlayerAction.START_SNEAKING) { + event.getPlayer().sendActionBar("leave"); + seat.getSecond().clearPassengers(); + } + } + } + } +} diff --git a/src/main/java/re/imc/geysermodelengine/model/EntityTask.java b/src/main/java/re/imc/geysermodelengine/model/EntityTask.java index 4fff2ea..15c729f 100644 --- a/src/main/java/re/imc/geysermodelengine/model/EntityTask.java +++ b/src/main/java/re/imc/geysermodelengine/model/EntityTask.java @@ -39,9 +39,10 @@ public class EntityTask { boolean firstAnimation = true; boolean spawnAnimationPlayed = false; + boolean removed = false; String lastAnimation = ""; - boolean looping = false; + boolean looping = true; private BukkitRunnable syncTask; @@ -68,54 +69,64 @@ public class EntityTask { } } - if (model.getEntity().isDead() && model.getModeledEntity().getBase().isAlive() && !model.getActiveModel().isRemoved()) { + if (!removed && model.getEntity().isDead() && model.getModeledEntity().getBase().isAlive() && !model.getActiveModel().isRemoved()) { model.spawnEntity(); } - model.getEntity().setVisualFire(false); model.teleportToModel(); } public void runAsync() { Entity entity = model.getEntity(); + if (entity.isDead()) { + return; + } Set viewers = model.getViewers(); ActiveModel activeModel = model.getActiveModel(); ModeledEntity modeledEntity = model.getModeledEntity(); if (activeModel.isRemoved() || !modeledEntity.getBase().isAlive()) { - if (!modeledEntity.getBase().isAlive()) { - - if (!activeModel.isRemoved() && hasAnimation("death")) { - new BukkitRunnable() { - @Override - public void run() { - entity.remove(); - } - }.runTaskLater(GeyserModelEngine.getInstance(), Math.min(Math.max(playAnimation("death", 999, 5f, true) - 3, 0), 200)); - } else { - new BukkitRunnable() { - @Override - public void run() { - entity.remove(); - } - }.runTask(GeyserModelEngine.getInstance()); - } + if (!activeModel.isRemoved() && hasAnimation("death")) { + new BukkitRunnable() { + @Override + public void run() { + removed = true; + entity.remove(); + } + }.runTaskLater(GeyserModelEngine.getInstance(), Math.min(Math.max(playAnimation("death", 999, 5f, true) - 3, 0), 200)); + } else { + new BukkitRunnable() { + @Override + public void run() { + removed = true; + entity.remove(); + } + }.runTask(GeyserModelEngine.getInstance()); } - ENTITIES.remove(modeledEntity.getBase().getEntityId()); - MODEL_ENTITIES.remove(entity.getEntityId()); - cancel(); - return; - } - if (model.getEntity().isDead()) { + ENTITIES.remove(modeledEntity.getBase().getEntityId()); MODEL_ENTITIES.remove(entity.getEntityId()); cancel(); return; } /* + if (model.getEntity().isDead()) { + ENTITIES.remove(modeledEntity.getBase().getEntityId()); + MODEL_ENTITIES.remove(entity.getEntityId()); + cancel(); + return; + } + + */ + /* if (waitingTick > 0) { waitingTick--; } */ + + if (!spawnAnimationPlayed) { + spawnAnimationPlayed = true; + } + if (tick > 1 && tick % 5 == 0) { for (Player onlinePlayer : Bukkit.getOnlinePlayers()) { @@ -144,17 +155,6 @@ public class EntityTask { } } - - - if (!spawnAnimationPlayed) { - spawnAnimationPlayed = true; - if (hasAnimation("spawn")) { - playAnimation("spawn", 99); - } else { - playAnimation("idle", 0); - } - } - if (tick % 40 == 0) { for (Player viewer : Set.copyOf(viewers)) { @@ -204,10 +204,11 @@ public class EntityTask { public void sendEntityData(Player player, int delay) { // 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()); if (looping) { - playBedrockAnimation("animation." + model.getActiveModel().getBlueprint().getName() + "." + lastAnimation, looping, 0f); + playBedrockAnimation(lastAnimation, Set.of(player), looping, 0f); } sendHitBox(player); sendScale(player); @@ -286,14 +287,14 @@ public class EntityTask { // delaySend = true; } - String id = "animation." + activeModel.getBlueprint().getName() + "." + animationProperty.getName(); + String id = "animation." + activeModel.getBlueprint().getName().toLowerCase() + "." + animationProperty.getName().toLowerCase(); lastAnimation = id; animationCooldown.set((int) (animationProperty.getLength() * 20)); if (delaySend) { - Bukkit.getScheduler().runTaskLaterAsynchronously(GeyserModelEngine.getInstance(), () -> playBedrockAnimation("animation." + activeModel.getBlueprint().getName() + "." + animationProperty.getName(), looping, blendTime), 0); + Bukkit.getScheduler().runTaskLaterAsynchronously(GeyserModelEngine.getInstance(), () -> playBedrockAnimation(id, model.getViewers(), looping, blendTime), 0); } else { - playBedrockAnimation(id, looping, blendTime); + playBedrockAnimation(id, model.getViewers(), looping, blendTime); } } return animationCooldown.get(); @@ -328,12 +329,11 @@ public class EntityTask { */ - private void playBedrockAnimation(String animationId, boolean loop, float blendTime) { + public void playBedrockAnimation(String animationId, Set viewers, boolean loop, float blendTime) { - model.getViewers().forEach(viewer -> viewer.sendActionBar("CURRENT AN:" + animationId)); + // model.getViewers().forEach(viewer -> viewer.sendActionBar("CURRENT AN:" + animationId)); Entity entity = model.getEntity(); - Set viewers = model.getViewers(); Animation.AnimationBuilder animation = Animation.builder() .animation(animationId) @@ -383,6 +383,15 @@ public class EntityTask { public void run(GeyserModelEngine instance, int i) { + String id = ""; + ActiveModel activeModel = model.getActiveModel(); + if (hasAnimation("spawn")) { + id = "animation." + activeModel.getBlueprint().getName().toLowerCase() + ".spawn"; + } else { + id = "animation." + activeModel.getBlueprint().getName().toLowerCase() + ".idle"; + } + + lastAnimation = id; sendHitBoxToAll(); syncTask = new BukkitRunnable() { @Override diff --git a/src/main/java/re/imc/geysermodelengine/model/ModelEntity.java b/src/main/java/re/imc/geysermodelengine/model/ModelEntity.java index 723ab17..861e5b9 100644 --- a/src/main/java/re/imc/geysermodelengine/model/ModelEntity.java +++ b/src/main/java/re/imc/geysermodelengine/model/ModelEntity.java @@ -1,13 +1,16 @@ package re.imc.geysermodelengine.model; import com.google.common.collect.Sets; +import com.ticxo.modelengine.api.ModelEngineAPI; import com.ticxo.modelengine.api.entity.BukkitEntity; import com.ticxo.modelengine.api.model.ActiveModel; import com.ticxo.modelengine.api.model.ModeledEntity; import lombok.Getter; import org.bukkit.Location; +import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; +import org.bukkit.metadata.FixedMetadataValue; import re.imc.geysermodelengine.GeyserModelEngine; import java.util.HashMap; @@ -49,9 +52,9 @@ public class ModelEntity { for (Player viewer : viewers) { viewer.sendActionBar("X:" + modeledEntity.getXHeadRot() + ", Y:" + modeledEntity.getYHeadRot()); } - */ - entity.teleportAsync(location); + */ + ModelEngineAPI.getEntityHandler().setPosition(entity, location.getX(), location.getY(), location.getZ()); if (modeledEntity.getBase() instanceof BukkitEntity bukkitEntity && bukkitEntity.getOriginal() instanceof LivingEntity livingEntity) { controllerEntity.getLookController().setHeadYaw(livingEntity.getEyeLocation().getYaw()); controllerEntity.getLookController().setPitch(livingEntity.getEyeLocation().getPitch()); @@ -89,7 +92,7 @@ public class ModelEntity { display.setGravity(false); display.setMaxHealth(2048); display.setHealth(2048); - + display.setMetadata("model_entity", new FixedMetadataValue(GeyserModelEngine.getInstance(), true)); //display.setInvulnerable(true); From 91e5348fa9e8ec78cc759ee75c4548f8616ef6ec Mon Sep 17 00:00:00 2001 From: zimzaza4 <3625282098@qq.com> Date: Sun, 12 May 2024 12:22:30 +0800 Subject: [PATCH 10/11] ok --- .../geysermodelengine/GeyserModelEngine.java | 6 +++--- .../listener/ModelListener.java | 21 +++++-------------- .../listener/MountPacketListener.java | 3 ++- .../geysermodelengine/model/EntityTask.java | 2 +- .../geysermodelengine/model/ModelEntity.java | 10 ++++++++- 5 files changed, 20 insertions(+), 22 deletions(-) diff --git a/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java b/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java index 49b3fed..ef7814c 100644 --- a/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java +++ b/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java @@ -4,7 +4,6 @@ import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.wrappers.Pair; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; -import com.google.common.collect.Sets; import com.ticxo.modelengine.api.ModelEngineAPI; import com.ticxo.modelengine.api.model.ActiveModel; import com.ticxo.modelengine.api.model.ModeledEntity; @@ -22,10 +21,8 @@ import re.imc.geysermodelengine.listener.ModelListener; import re.imc.geysermodelengine.listener.MountPacketListener; import re.imc.geysermodelengine.model.ModelEntity; -import java.util.HashSet; import java.util.Map; import java.util.Optional; -import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; @@ -68,6 +65,8 @@ public final class GeyserModelEngine extends JavaPlugin { @Getter private Map> drivers = new ConcurrentHashMap<>(); + @Getter + private boolean initialized = false; @Override public void onEnable() { // Plugin startup logic @@ -100,6 +99,7 @@ public final class GeyserModelEngine extends JavaPlugin { } } } + initialized = true; }, 100); } diff --git a/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java b/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java index 0806edc..0706c72 100644 --- a/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java +++ b/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java @@ -7,6 +7,7 @@ import com.ticxo.modelengine.api.events.*; import com.ticxo.modelengine.api.generator.blueprint.ModelBlueprint; import com.ticxo.modelengine.api.model.ActiveModel; import com.ticxo.modelengine.api.model.ModeledEntity; +import com.ticxo.modelengine.api.model.render.ModelRenderer; import me.zimzaza4.geyserutils.spigot.api.PlayerUtils; import org.bukkit.Bukkit; import org.bukkit.entity.Entity; @@ -39,6 +40,10 @@ public class ModelListener implements Listener { return; } + if (!GeyserModelEngine.getInstance().isInitialized()) { + return; + } + Bukkit.getScheduler().runTask(GeyserModelEngine.getInstance(), () -> { ModelEntity.create(event.getTarget(), event.getModel()); }); @@ -73,22 +78,6 @@ public class ModelListener implements Listener { } } - @EventHandler - public void onEntityLoad(EntitiesLoadEvent event) { - Bukkit.getScheduler() - .runTaskLater(GeyserModelEngine.getInstance(), () -> { - for (Entity entity : event.getEntities()) { - if (!ModelEntity.ENTITIES.containsKey(entity.getEntityId())) { - ModeledEntity modeledEntity = ModelEngineAPI.getModeledEntity(entity); - if (modeledEntity != null) { - Optional model = modeledEntity.getModels().values().stream().findFirst(); - model.ifPresent(m -> ModelEntity.create(modeledEntity, m)); - } - } - } - - }, 20); - } @EventHandler public void onAnimationPlay(AnimationPlayEvent event) { diff --git a/src/main/java/re/imc/geysermodelengine/listener/MountPacketListener.java b/src/main/java/re/imc/geysermodelengine/listener/MountPacketListener.java index 02c2158..7d1dbb7 100644 --- a/src/main/java/re/imc/geysermodelengine/listener/MountPacketListener.java +++ b/src/main/java/re/imc/geysermodelengine/listener/MountPacketListener.java @@ -7,6 +7,7 @@ import com.comphenix.protocol.events.PacketAdapter; import com.comphenix.protocol.events.PacketEvent; import com.comphenix.protocol.wrappers.EnumWrappers; import com.comphenix.protocol.wrappers.Pair; +import com.ticxo.modelengine.api.ModelEngineAPI; import com.ticxo.modelengine.api.model.ActiveModel; import com.ticxo.modelengine.api.model.bone.type.Mount; import org.geysermc.floodgate.api.FloodgateApi; @@ -57,7 +58,7 @@ public class MountPacketListener extends PacketAdapter { if (seat != null) { if (event.getPacket().getPlayerActions().read(0) == EnumWrappers.PlayerAction.START_SNEAKING) { event.getPlayer().sendActionBar("leave"); - seat.getSecond().clearPassengers(); + ModelEngineAPI.getMountPairManager().tryDismount(event.getPlayer()); } } } diff --git a/src/main/java/re/imc/geysermodelengine/model/EntityTask.java b/src/main/java/re/imc/geysermodelengine/model/EntityTask.java index 15c729f..452d54c 100644 --- a/src/main/java/re/imc/geysermodelengine/model/EntityTask.java +++ b/src/main/java/re/imc/geysermodelengine/model/EntityTask.java @@ -70,7 +70,7 @@ public class EntityTask { } if (!removed && model.getEntity().isDead() && model.getModeledEntity().getBase().isAlive() && !model.getActiveModel().isRemoved()) { - model.spawnEntity(); + // model.spawnEntity(); } model.getEntity().setVisualFire(false); diff --git a/src/main/java/re/imc/geysermodelengine/model/ModelEntity.java b/src/main/java/re/imc/geysermodelengine/model/ModelEntity.java index 861e5b9..1025ddb 100644 --- a/src/main/java/re/imc/geysermodelengine/model/ModelEntity.java +++ b/src/main/java/re/imc/geysermodelengine/model/ModelEntity.java @@ -7,10 +7,10 @@ import com.ticxo.modelengine.api.model.ActiveModel; import com.ticxo.modelengine.api.model.ModeledEntity; import lombok.Getter; import org.bukkit.Location; -import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.metadata.FixedMetadataValue; +import org.bukkit.util.Vector; import re.imc.geysermodelengine.GeyserModelEngine; import java.util.HashMap; @@ -54,7 +54,10 @@ public class ModelEntity { } */ + Vector vector = modeledEntity.getBase().getMoveController().getVelocity(); ModelEngineAPI.getEntityHandler().setPosition(entity, location.getX(), location.getY(), location.getZ()); + // ModelEngineAPI.getEntityHandler().movePassenger(entity, location.getX(), location.getY(), location.getZ()); + controllerEntity.getMoveController().setVelocity(vector.getX(), vector.getY(), vector.getZ()); if (modeledEntity.getBase() instanceof BukkitEntity bukkitEntity && bukkitEntity.getOriginal() instanceof LivingEntity livingEntity) { controllerEntity.getLookController().setHeadYaw(livingEntity.getEyeLocation().getYaw()); controllerEntity.getLookController().setPitch(livingEntity.getEyeLocation().getPitch()); @@ -66,6 +69,11 @@ public class ModelEntity { ModelEntity modelEntity = new ModelEntity(entity, model); int id = entity.getBase().getEntityId(); Map map = ENTITIES.computeIfAbsent(id, k -> new HashMap<>()); + for (Map.Entry entry : map.entrySet()) { + if (entry.getKey() != model && entry.getKey().getBlueprint().getName().equals(model.getBlueprint().getName())) { + return null; + } + } map.put(model, modelEntity); return modelEntity; From d7890b03ff2c15769a6396a7aa7d12e49987548c Mon Sep 17 00:00:00 2001 From: zimzaza4 <53421735+zimzaza4@users.noreply.github.com> Date: Fri, 17 May 2024 23:01:41 +0800 Subject: [PATCH 11/11] Update README_EN.md --- README_EN.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README_EN.md b/README_EN.md index f409016..01c0f5a 100644 --- a/README_EN.md +++ b/README_EN.md @@ -18,11 +18,13 @@ Download the following plugins according to the server core [GeyserModelEngine](https://github.com/zimzaza4/GeyserModelEngine) -[zimzaza4's GeyserCustomEntity Fork](https://github.com/zimzaza4/Geyser) +[zimzaza4's Geyser Fork](https://github.com/zimzaza4/Geyser) [GeyserModelEnginePackGenerator](https://github.com/zimzaza4/GeyserModelEnginePackGenerator) -place `GeyserModelEngine` `GeyserCustomEntityFork` in the plugins folder +replace your Geyser with that Geyser fork + +put `GeyserModelEngine` in the plugins folder (only spigot) and `geyserutils-spigot`/`velocity`/`bungeecord`