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;