From eea387939f96e1fbed418ec969751330c842290f Mon Sep 17 00:00:00 2001 From: zimzaza4 <3625282098@qq.com> Date: Wed, 6 Nov 2024 22:40:01 +0800 Subject: [PATCH] optimize --- .../geysermodelengine/GeyserModelEngine.java | 3 ++- .../geysermodelengine/model/EntityTask.java | 26 ++++++++----------- .../geysermodelengine/model/ModelEntity.java | 1 - 3 files changed, 13 insertions(+), 17 deletions(-) diff --git a/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java b/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java index ae1d151..aa2b0d0 100644 --- a/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java +++ b/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java @@ -69,13 +69,14 @@ public final class GeyserModelEngine extends JavaPlugin { private List enablePartVisibilityModels = new ArrayList<>(); @Getter - private ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(4); + private ScheduledExecutorService scheduler; @Override public void onEnable() { // Plugin startup logic saveDefaultConfig(); // alwaysSendSkin = getConfig().getBoolean("always-send-skin"); sendDelay = getConfig().getInt("data-send-delay", 0); + scheduler = Executors.newScheduledThreadPool(getConfig().getInt("thread-pool-size", 6)); 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/model/EntityTask.java b/src/main/java/re/imc/geysermodelengine/model/EntityTask.java index d770e9f..c9e613c 100644 --- a/src/main/java/re/imc/geysermodelengine/model/EntityTask.java +++ b/src/main/java/re/imc/geysermodelengine/model/EntityTask.java @@ -24,6 +24,7 @@ import re.imc.geysermodelengine.util.BooleanPacker; import java.awt.*; import java.util.*; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import static re.imc.geysermodelengine.model.ModelEntity.ENTITIES; @@ -45,10 +46,7 @@ public class EntityTask { Cache lastPlayedAnim = CacheBuilder.newBuilder() .expireAfterWrite(30, TimeUnit.MILLISECONDS).build(); - private BukkitRunnable syncTask; - private BukkitRunnable asyncTask; - - + private ScheduledFuture scheduledFuture; public EntityTask(ModelEntity model) { this.model = model; @@ -69,7 +67,7 @@ public class EntityTask { removed = true; entity.remove(); } - }.runTaskLater(GeyserModelEngine.getInstance(), 1); + }.runTaskLaterAsynchronously(GeyserModelEngine.getInstance(), 1); ENTITIES.remove(modeledEntity.getBase().getEntityId()); @@ -333,9 +331,6 @@ public class EntityTask { if (!player.isOnline()) { return false; } - if (player.isDead()) { - return false; - } if (GeyserModelEngine.getInstance().getJoinedPlayer() != null && GeyserModelEngine.getInstance().getJoinedPlayer().getIfPresent(player) != null) { return false; } @@ -360,18 +355,19 @@ public class EntityTask { public void cancel() { // syncTask.cancel(); - asyncTask.cancel(); + scheduledFuture.cancel(true); } public void run(GeyserModelEngine instance) { + sendHitBoxToAll(); - asyncTask = new BukkitRunnable() { - @Override - public void run() { - runAsync(); - } + Runnable asyncTask = () -> { + checkViewers(model.getViewers()); + runAsync(); }; - asyncTask.runTaskTimerAsynchronously(instance, 0, 0); + scheduledFuture = GeyserModelEngine.getInstance().getScheduler().scheduleAtFixedRate(asyncTask, 0, 20, TimeUnit.MILLISECONDS); + + //asyncTask.runTaskTimerAsynchronously(instance, 0, 0); } } diff --git a/src/main/java/re/imc/geysermodelengine/model/ModelEntity.java b/src/main/java/re/imc/geysermodelengine/model/ModelEntity.java index fb0e4bb..f0e6c8c 100644 --- a/src/main/java/re/imc/geysermodelengine/model/ModelEntity.java +++ b/src/main/java/re/imc/geysermodelengine/model/ModelEntity.java @@ -68,7 +68,6 @@ public class ModelEntity { public void runEntityTask() { task = new EntityTask(this); - task.checkViewers(viewers); task.run(GeyserModelEngine.getInstance()); }