diff --git a/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java b/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java index aa2b0d0..7abfe09 100644 --- a/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java +++ b/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java @@ -76,7 +76,7 @@ public final class GeyserModelEngine extends JavaPlugin { saveDefaultConfig(); // alwaysSendSkin = getConfig().getBoolean("always-send-skin"); sendDelay = getConfig().getInt("data-send-delay", 0); - scheduler = Executors.newScheduledThreadPool(getConfig().getInt("thread-pool-size", 6)); + scheduler = Executors.newScheduledThreadPool(getConfig().getInt("thread-pool-size", 4)); viewDistance = getConfig().getInt("entity-view-distance", 60); debug = getConfig().getBoolean("debug", false); modelEntityType = EntityType.valueOf(getConfig().getString("model-entity-type", "BAT")); diff --git a/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java b/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java index 543c574..8a1f8b9 100644 --- a/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java +++ b/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java @@ -46,11 +46,7 @@ public class ModelListener implements Listener { if (!GeyserModelEngine.getInstance().isInitialized()) { return; } - - Bukkit.getScheduler().runTask(GeyserModelEngine.getInstance(), () -> { - ModelEntity.create(event.getTarget(), event.getModel()); - }); - + ModelEntity.create(event.getTarget(), event.getModel()); } diff --git a/src/main/java/re/imc/geysermodelengine/model/EntityTask.java b/src/main/java/re/imc/geysermodelengine/model/EntityTask.java index c9e613c..967093b 100644 --- a/src/main/java/re/imc/geysermodelengine/model/EntityTask.java +++ b/src/main/java/re/imc/geysermodelengine/model/EntityTask.java @@ -13,6 +13,7 @@ import lombok.Getter; import lombok.Setter; import me.zimzaza4.geyserutils.spigot.api.EntityUtils; import org.bukkit.Bukkit; +import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; import org.geysermc.floodgate.api.FloodgateApi; @@ -61,14 +62,8 @@ public class EntityTask { ActiveModel activeModel = model.getActiveModel(); ModeledEntity modeledEntity = model.getModeledEntity(); if (activeModel.isDestroyed() || activeModel.isRemoved()) { - new BukkitRunnable() { - @Override - public void run() { - removed = true; - entity.remove(); - } - }.runTaskLaterAsynchronously(GeyserModelEngine.getInstance(), 1); - + removed = true; + entity.remove(); ENTITIES.remove(modeledEntity.getBase().getEntityId()); MODEL_ENTITIES.remove(entity.getEntityId()); @@ -142,9 +137,9 @@ public class EntityTask { delay = GeyserModelEngine.getInstance().getJoinSendDelay(); } if (task == null || firstJoined) { - Bukkit.getScheduler().runTaskLaterAsynchronously(GeyserModelEngine.getInstance(), () -> { + GeyserModelEngine.getInstance().getScheduler().schedule(() -> { model.getTask().sendEntityData(onlinePlayer, 1); - }, delay); + }, delay, TimeUnit.MILLISECONDS); } else { task.sendEntityData(onlinePlayer, 1); } @@ -152,15 +147,15 @@ public class EntityTask { public void sendEntityData(Player player, int delay) { EntityUtils.setCustomEntity(player, model.getEntity().getEntityId(), "modelengine:" + model.getActiveModel().getBlueprint().getName().toLowerCase()); - Bukkit.getScheduler().runTaskLaterAsynchronously(GeyserModelEngine.getInstance(), () -> { + GeyserModelEngine.getInstance().getScheduler().schedule(() -> { model.getEntity().sendSpawnPacket(Collections.singletonList(player)); - Bukkit.getScheduler().runTaskLaterAsynchronously(GeyserModelEngine.getInstance(), () -> { + GeyserModelEngine.getInstance().getScheduler().schedule(() -> { sendHitBox(player); sendScale(Collections.singleton(player), true); sendColor(Collections.singleton(player), true); updateEntityProperties(Collections.singleton(player), true); - }, 1); - }, delay); + }, 20, TimeUnit.MILLISECONDS); + }, delay * 20L, TimeUnit.MILLISECONDS); } public void sendScale(Collection players, boolean firstSend) { @@ -334,6 +329,13 @@ public class EntityTask { if (GeyserModelEngine.getInstance().getJoinedPlayer() != null && GeyserModelEngine.getInstance().getJoinedPlayer().getIfPresent(player) != null) { return false; } + Location playerLocation = player.getLocation(); + Location entityLocation = entity.getLocation(); + playerLocation.setY(0); + entityLocation.setY(0); + if (playerLocation.distanceSquared(entityLocation) > player.getSendViewDistance() * player.getSendViewDistance()) { + return false; + } CullType type = model.getActiveModel().getModeledEntity().getBase().getData().getTracking().get(player); return type != null; /*