From 87b2f6d3982fcde1431a0ea759c60e934df0782f Mon Sep 17 00:00:00 2001 From: zimzaza4 <3625282098@qq.com> Date: Fri, 19 Jul 2024 14:30:49 +0800 Subject: [PATCH] disable part visibility by default --- .../geysermodelengine/GeyserModelEngine.java | 6 +++++ .../geysermodelengine/model/EntityTask.java | 27 ++++++++++--------- src/main/resources/config.yml | 2 ++ 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java b/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java index 03778ff..e6c6802 100644 --- a/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java +++ b/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java @@ -20,6 +20,8 @@ import re.imc.geysermodelengine.listener.ModelListener; import re.imc.geysermodelengine.listener.MountPacketListener; import re.imc.geysermodelengine.model.ModelEntity; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; @@ -56,6 +58,9 @@ public final class GeyserModelEngine extends JavaPlugin { @Getter private boolean initialized = false; + + @Getter + private List enablePartVisibilityModels = new ArrayList<>(); @Override public void onEnable() { // Plugin startup logic @@ -66,6 +71,7 @@ public final class GeyserModelEngine extends JavaPlugin { debug = getConfig().getBoolean("debug", false); modelEntityType = EntityType.valueOf(getConfig().getString("model-entity-type", "BAT")); joinSendDelay = getConfig().getInt("join-send-delay", 20); + enablePartVisibilityModels.addAll(getConfig().getStringList("enable-part-visibility-models")); if (joinSendDelay > 0) { joinedPlayer = CacheBuilder.newBuilder() .expireAfterWrite(joinSendDelay * 50L, TimeUnit.MILLISECONDS).build(); diff --git a/src/main/java/re/imc/geysermodelengine/model/EntityTask.java b/src/main/java/re/imc/geysermodelengine/model/EntityTask.java index 23abc85..a872a98 100644 --- a/src/main/java/re/imc/geysermodelengine/model/EntityTask.java +++ b/src/main/java/re/imc/geysermodelengine/model/EntityTask.java @@ -237,21 +237,24 @@ public class EntityTask { Map updates = new HashMap<>(); - model.getActiveModel().getBones().forEach((s, bone) -> { - if (!lastModelBoneSet.containsKey(bone)) - lastModelBoneSet.put(bone, !bone.isVisible()); + if (GeyserModelEngine.getInstance().getEnablePartVisibilityModels().contains(model.getActiveModel().getBlueprint().getName())) { + model.getActiveModel().getBones().forEach((s, bone) -> { + if (!lastModelBoneSet.containsKey(bone)) + lastModelBoneSet.put(bone, !bone.isVisible()); - Boolean lastBone = lastModelBoneSet.get(bone); - if (lastBone == null) - return; + Boolean lastBone = lastModelBoneSet.get(bone); + if (lastBone == null) + return; - if (!lastBone.equals(bone.isVisible()) || ignore) { - String name = unstripName(bone).toLowerCase(); - updates.put(model.getActiveModel().getBlueprint().getName() + ":" + name, bone.isVisible()); - lastModelBoneSet.replace(bone, bone.isVisible()); - } + if (!lastBone.equals(bone.isVisible()) || ignore) { + String name = unstripName(bone).toLowerCase(); + updates.put(model.getActiveModel().getBlueprint().getName() + ":" + name, bone.isVisible()); + lastModelBoneSet.replace(bone, bone.isVisible()); + } + + }); + } - }); if (ignore || !lastAnimProperty.equals(currentAnimProperty)) { diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index bf38848..43bf990 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -2,4 +2,6 @@ data-send-delay: 5 entity-view-distance: 50 join-send-delay: 20 model-entity-type: BAT # must be a living entity +enable-part-visibility-models: + - example debug: false \ No newline at end of file