mirror of
https://github.com/xSquishyLiam/mc-GeyserModelEngine-plugin.git
synced 2025-12-28 11:19:15 +00:00
Packet-based entity
This commit is contained in:
@@ -1,29 +1,22 @@
|
||||
package re.imc.geysermodelengine.model;
|
||||
|
||||
import com.google.common.base.Joiner;
|
||||
import com.ticxo.modelengine.api.animation.BlueprintAnimation;
|
||||
import com.ticxo.modelengine.api.entity.BaseEntity;
|
||||
import com.ticxo.modelengine.api.entity.BukkitEntity;
|
||||
import com.ticxo.modelengine.api.generator.blueprint.BlueprintBone;
|
||||
import com.ticxo.modelengine.api.model.ActiveModel;
|
||||
import com.ticxo.modelengine.api.model.ModeledEntity;
|
||||
import com.ticxo.modelengine.api.model.bone.BoneBehaviorTypes;
|
||||
import com.ticxo.modelengine.api.model.bone.ModelBone;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import me.zimzaza4.geyserutils.common.animation.Animation;
|
||||
import me.zimzaza4.geyserutils.spigot.GeyserUtils;
|
||||
import me.zimzaza4.geyserutils.spigot.api.PlayerUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.bukkit.util.BoundingBox;
|
||||
import org.geysermc.floodgate.api.FloodgateApi;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.joml.Vector3f;
|
||||
import re.imc.geysermodelengine.GeyserModelEngine;
|
||||
import re.imc.geysermodelengine.listener.ModelListener;
|
||||
import re.imc.geysermodelengine.packet.entity.PacketEntity;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.*;
|
||||
@@ -64,35 +57,13 @@ public class EntityTask {
|
||||
public EntityTask(ModelEntity model) {
|
||||
this.model = model;
|
||||
}
|
||||
|
||||
public void runSync() {
|
||||
|
||||
syncTick ++;
|
||||
if (syncTick > 400) {
|
||||
syncTick = 0;
|
||||
}
|
||||
|
||||
if (syncTick % 5 == 0) {
|
||||
|
||||
for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
|
||||
if (!FloodgateApi.getInstance().isFloodgatePlayer(onlinePlayer.getUniqueId())) {
|
||||
onlinePlayer.hideEntity(GeyserModelEngine.getInstance(), model.getEntity());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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();
|
||||
PacketEntity entity = model.getEntity();
|
||||
if (entity.isDead()) {
|
||||
return;
|
||||
}
|
||||
|
||||
model.teleportToModel();
|
||||
Set<Player> viewers = model.getViewers();
|
||||
ActiveModel activeModel = model.getActiveModel();
|
||||
ModeledEntity modeledEntity = model.getModeledEntity();
|
||||
@@ -147,6 +118,7 @@ public class EntityTask {
|
||||
if (canSee(onlinePlayer, model.getEntity())) {
|
||||
|
||||
if (!viewers.contains(onlinePlayer)) {
|
||||
sendSpawnPacket(onlinePlayer);
|
||||
viewers.add(onlinePlayer);
|
||||
/*
|
||||
if (GeyserModelEngine.getInstance().getSkinSendDelay() > 0) {
|
||||
@@ -162,6 +134,8 @@ public class EntityTask {
|
||||
*/
|
||||
}
|
||||
} else {
|
||||
|
||||
entity.sendEntityDestroyPacket(Collections.singletonList(onlinePlayer));
|
||||
viewers.remove(onlinePlayer);
|
||||
}
|
||||
}
|
||||
@@ -221,10 +195,27 @@ public class EntityTask {
|
||||
sendColor(player.get(), true);
|
||||
}
|
||||
|
||||
private void sendSpawnPacket(Player onlinePlayer) {
|
||||
EntityTask task = model.getTask();
|
||||
int delay = 1;
|
||||
boolean firstJoined = GeyserModelEngine.getInstance().getJoinedPlayer().getIfPresent(onlinePlayer) != null;
|
||||
if (firstJoined) {
|
||||
delay = GeyserModelEngine.getInstance().getJoinSendDelay();
|
||||
}
|
||||
if (task == null || firstJoined) {
|
||||
Bukkit.getScheduler().runTaskLaterAsynchronously(GeyserModelEngine.getInstance(), () -> {
|
||||
model.getTask().sendEntityData(onlinePlayer, GeyserModelEngine.getInstance().getSendDelay());
|
||||
}, delay);
|
||||
} else {
|
||||
task.sendEntityData(onlinePlayer, GeyserModelEngine.getInstance().getSendDelay());
|
||||
}
|
||||
}
|
||||
|
||||
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());
|
||||
|
||||
model.getEntity().sendSpawnPacket(Collections.singletonList(player));
|
||||
Bukkit.getScheduler().runTaskLaterAsynchronously(GeyserModelEngine.getInstance(), () -> {
|
||||
// PlayerUtils.sendCustomSkin(player, model.getEntity(), model.getActiveModel().getBlueprint().getName());
|
||||
if (looping) {
|
||||
@@ -442,7 +433,7 @@ public class EntityTask {
|
||||
}
|
||||
|
||||
public void cancel() {
|
||||
syncTask.cancel();
|
||||
// syncTask.cancel();
|
||||
asyncTask.cancel();
|
||||
}
|
||||
|
||||
@@ -458,13 +449,6 @@ public class EntityTask {
|
||||
|
||||
lastAnimation = id;
|
||||
sendHitBoxToAll();
|
||||
syncTask = new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
runSync();
|
||||
}
|
||||
};
|
||||
syncTask.runTaskTimer(instance, i, 0);
|
||||
|
||||
asyncTask = new BukkitRunnable() {
|
||||
@Override
|
||||
|
||||
@@ -1,20 +1,15 @@
|
||||
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 me.zimzaza4.geyserutils.spigot.api.PlayerUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
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 re.imc.geysermodelengine.packet.entity.PacketEntity;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
@@ -28,8 +23,7 @@ public class ModelEntity {
|
||||
|
||||
public static Map<Integer, ModelEntity> MODEL_ENTITIES = new ConcurrentHashMap<>();
|
||||
|
||||
private LivingEntity entity;
|
||||
private BukkitEntity controllerEntity;
|
||||
private PacketEntity entity;
|
||||
|
||||
private final Set<Player> viewers = Sets.newConcurrentHashSet();
|
||||
|
||||
@@ -48,24 +42,7 @@ public class ModelEntity {
|
||||
|
||||
public void teleportToModel() {
|
||||
Location location = modeledEntity.getBase().getLocation();
|
||||
/*
|
||||
location.setPitch(modeledEntity.getXHeadRot());
|
||||
location.setYaw(modeledEntity.getYHeadRot());
|
||||
for (Player viewer : viewers) {
|
||||
viewer.sendActionBar("X:" + modeledEntity.getXHeadRot() + ", Y:" + modeledEntity.getYHeadRot());
|
||||
}
|
||||
|
||||
*/
|
||||
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());
|
||||
controllerEntity.getLookController().setBodyYaw(livingEntity.getBodyYaw());
|
||||
}
|
||||
|
||||
entity.teleport(location);
|
||||
}
|
||||
public static ModelEntity create(ModeledEntity entity, ActiveModel model) {
|
||||
ModelEntity modelEntity = new ModelEntity(entity, model);
|
||||
@@ -81,14 +58,8 @@ public class ModelEntity {
|
||||
return modelEntity;
|
||||
}
|
||||
|
||||
public LivingEntity spawnEntity() {
|
||||
ModelEntity model = this;
|
||||
// int lastEntityId = ReflectionManager.getNewEntityId();
|
||||
// System.out.println("RID:" + entityId);
|
||||
GeyserModelEngine.getInstance().setSpawningModelEntity(true);
|
||||
GeyserModelEngine.getInstance().setCurrentModel(model);
|
||||
entity = (LivingEntity) modeledEntity.getBase().getLocation().getWorld().spawnEntity(modeledEntity.getBase().getLocation(), GeyserModelEngine.getInstance().getModelEntityType());
|
||||
controllerEntity = new BukkitEntity(entity);
|
||||
public PacketEntity spawnEntity() {
|
||||
entity = new PacketEntity(GeyserModelEngine.getInstance().getModelEntityType(), viewers, modeledEntity.getBase().getLocation());
|
||||
return entity;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user