diff --git a/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java b/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java index 22a90d7..ae1d151 100644 --- a/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java +++ b/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java @@ -114,7 +114,6 @@ public final class GeyserModelEngine extends JavaPlugin { try { for (Map models : ModelEntity.ENTITIES.values()) { models.values().forEach(ModelEntity::teleportToModel); - } } catch (Throwable t) { t.printStackTrace(); @@ -122,6 +121,7 @@ public final class GeyserModelEngine extends JavaPlugin { }, 10, entityPositionUpdatePeriod, TimeUnit.MILLISECONDS); + scheduler.scheduleWithFixedDelay(() -> { try { for (Map models : ModelEntity.ENTITIES.values()) { @@ -131,6 +131,9 @@ public final class GeyserModelEngine extends JavaPlugin { t.printStackTrace(); } }, 10, entityPositionUpdatePeriod, TimeUnit.MILLISECONDS); + + + BedrockMountControl.startTask(); } diff --git a/src/main/java/re/imc/geysermodelengine/model/EntityTask.java b/src/main/java/re/imc/geysermodelengine/model/EntityTask.java index 8e4a952..de72c4a 100644 --- a/src/main/java/re/imc/geysermodelengine/model/EntityTask.java +++ b/src/main/java/re/imc/geysermodelengine/model/EntityTask.java @@ -1,22 +1,18 @@ package re.imc.geysermodelengine.model; -import com.google.common.collect.Sets; +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; import com.ticxo.modelengine.api.animation.BlueprintAnimation; import com.ticxo.modelengine.api.animation.ModelState; import com.ticxo.modelengine.api.animation.handler.AnimationHandler; -import com.ticxo.modelengine.api.animation.handler.IStateMachineHandler; -import com.ticxo.modelengine.api.entity.BaseEntity; +import com.ticxo.modelengine.api.animation.property.IAnimationProperty; import com.ticxo.modelengine.api.entity.CullType; -import com.ticxo.modelengine.api.entity.Dummy; -import com.ticxo.modelengine.api.events.AnimationEndEvent; import com.ticxo.modelengine.api.model.ActiveModel; import com.ticxo.modelengine.api.model.ModeledEntity; 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.api.EntityUtils; -import me.zimzaza4.geyserutils.spigot.api.PlayerUtils; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitRunnable; @@ -30,7 +26,7 @@ import java.awt.*; import java.util.*; import java.util.List; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.TimeUnit; import static re.imc.geysermodelengine.model.ModelEntity.ENTITIES; import static re.imc.geysermodelengine.model.ModelEntity.MODEL_ENTITIES; @@ -51,10 +47,10 @@ public class EntityTask { float lastScale = -1.0f; Color lastColor = null; Map lastIntSet = new ConcurrentHashMap<>(); + Cache lastPlayedAnim = CacheBuilder.newBuilder() + .expireAfterWrite(50, TimeUnit.MILLISECONDS).build(); - // Map lastAnimPropertySet = new HashMap<>(); private BukkitRunnable syncTask; - private BukkitRunnable asyncTask; @@ -115,7 +111,7 @@ public class EntityTask { if (viewers.isEmpty()) { return; } - + // updateEntityProperties(viewers, false); // do not actually use this, atleast bundle these up ;( sendScale(viewers, false); @@ -237,7 +233,7 @@ public class EntityTask { } model.getActiveModel().getBlueprint().getAnimations().forEach((s, anim) -> { - if (anim.isOverride() && (model.getActiveModel().getAnimationHandler().isPlayingAnimation(s) || forceAnimSet.contains(s))) { + if (anim.isOverride() && !defaultAnims.contains(s) && (model.getActiveModel().getAnimationHandler().isPlayingAnimation(s) || forceAnimSet.contains(s))) { overrideAnimUpdates.add(s); } }); @@ -254,22 +250,26 @@ public class EntityTask { } } }); - /*f - if (!lastAnimProperty.equals(currentAnimProperty)) { - player.sendMessage("CHANGED"); - if (animationCooldown.get() == 0) { - player.sendMessage(lastAnimProperty + " -> " + currentAnimProperty); - updates.put("modelengine:" + lastAnimProperty, false); - updates.put("modelengine:" + currentAnimProperty, true); - } else { - updates.put("modelengine:" + lastAnimProperty, false); - updates.put("modelengine:" + STOP_ANIMATION_PROPERTY, true); + Set lastPlayed = new HashSet<>(lastPlayedAnim.asMap().keySet()); + + for (Map.Entry anim : animUpdates.entrySet()) { + if (anim.getValue()) { + lastPlayedAnim.put(anim.getKey(), true); } } - */ + for (String anim : lastPlayed) { + animUpdates.put(anim, true); + } + + + + + + + if (boneUpdates.isEmpty() && animUpdates.isEmpty()) return; Map intUpdates = new HashMap<>(); @@ -292,16 +292,18 @@ public class EntityTask { } } - /* - System.out.println("AN: " + animUpdates.size() + ", BO:" + boneUpdates.size()); - System.out.println(animUpdates); - List list = new ArrayList<>(boneUpdates.keySet()); - Collections.sort(list); - System.out.println(list); - System.out.println(boneUpdates); - System.out.println(intUpdates); - */ + // System.out.println("AN: " + animUpdates.size() + ", BO:" + boneUpdates.size()); + System.out.println(animUpdates); + + + //Collections.sort(list); + //System.out.println(list); + //System.out.println(boneUpdates); + //System.out.println(intUpdates); + + + for (Player player : players) { EntityUtils.sendIntProperties(player, entity, intUpdates); }