diff --git a/libs/geyserutils-spigot-1.0-SNAPSHOT.jar b/libs/geyserutils-spigot-1.0-SNAPSHOT.jar index d5781c3..c6bf260 100644 Binary files a/libs/geyserutils-spigot-1.0-SNAPSHOT.jar and b/libs/geyserutils-spigot-1.0-SNAPSHOT.jar differ diff --git a/pom.xml b/pom.xml index 4210fee..43938ba 100644 --- a/pom.xml +++ b/pom.xml @@ -112,7 +112,7 @@ 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); + */ } - - }