Added a few bug fixes (if I'm correct) and added render scaling.

This commit is contained in:
OmeWillem
2024-07-05 00:07:54 +02:00
parent 55a641e6da
commit ea64988929

View File

@@ -1,10 +1,13 @@
package re.imc.geysermodelengine.model; package re.imc.geysermodelengine.model;
import com.google.common.base.Joiner;
import com.ticxo.modelengine.api.animation.BlueprintAnimation; import com.ticxo.modelengine.api.animation.BlueprintAnimation;
import com.ticxo.modelengine.api.entity.BaseEntity; import com.ticxo.modelengine.api.entity.BaseEntity;
import com.ticxo.modelengine.api.entity.BukkitEntity; import com.ticxo.modelengine.api.entity.BukkitEntity;
import com.ticxo.modelengine.api.model.ActiveModel; import com.ticxo.modelengine.api.model.ActiveModel;
import com.ticxo.modelengine.api.model.ModeledEntity; 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.Getter;
import lombok.Setter; import lombok.Setter;
import me.zimzaza4.geyserutils.common.animation.Animation; import me.zimzaza4.geyserutils.common.animation.Animation;
@@ -17,10 +20,11 @@ import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.util.BoundingBox; import org.bukkit.util.BoundingBox;
import org.geysermc.floodgate.api.FloodgateApi; import org.geysermc.floodgate.api.FloodgateApi;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.joml.Vector3f;
import re.imc.geysermodelengine.GeyserModelEngine; import re.imc.geysermodelengine.GeyserModelEngine;
import re.imc.geysermodelengine.listener.ModelListener; import re.imc.geysermodelengine.listener.ModelListener;
import java.util.Set; import java.util.*;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import static re.imc.geysermodelengine.model.ModelEntity.ENTITIES; import static re.imc.geysermodelengine.model.ModelEntity.ENTITIES;
@@ -43,6 +47,9 @@ public class EntityTask {
boolean removed = false; boolean removed = false;
boolean registered = false; boolean registered = false;
float lastScale = -1.0f;
Map<ModelBone, Boolean> lastSet = new HashMap<>();
String lastAnimation = ""; String lastAnimation = "";
boolean looping = true; boolean looping = true;
@@ -202,7 +209,11 @@ public class EntityTask {
animationCooldown.decrementAndGet(); animationCooldown.decrementAndGet();
} }
updateVisibility(model.getViewers()); Optional<Player> player = model.getViewers().stream().findAny();
if (player.isEmpty()) return;
sendScale(player.get());
updateVisibility(player.get());
} }
public void sendEntityData(Player player, int delay) { public void sendEntityData(Player player, int delay) {
@@ -223,7 +234,14 @@ public class EntityTask {
} }
public void sendScale(Player player) { public void sendScale(Player player) {
// todo? if (player == null) return;
Vector3f scale = model.getActiveModel().getScale();
float average = (scale.x + scale.y + scale.z) / 3;
if (average == lastScale) return;
PlayerUtils.sendCustomScale(player, model.getEntity(), average);
lastScale = average;
} }
public void sendHitBoxToAll() { public void sendHitBoxToAll() {
@@ -352,17 +370,25 @@ public class EntityTask {
} }
public void updateVisibility(Set<Player> viewers) { public void updateVisibility(Player player) {
Entity entity = model.getEntity(); Entity entity = model.getEntity();
for (Player viewer : viewers) { // pretty sure it gets set on the entity, so no need to send it for every single viewer (small pyramid btw)
model.getActiveModel().getBones().forEach((s,bone) -> { model.getActiveModel().getBones().forEach((s,bone) -> {
PlayerUtils.sendBoolProperty(viewer, entity, if (!lastSet.containsKey(bone)) lastSet.put(bone, !bone.isVisible());
model.getActiveModel().getBlueprint().getName() + ":" + s, bone.isVisible());
}); if (!lastSet.get(bone).equals(bone.isVisible())) {
} PlayerUtils.sendBoolProperty(player,entity,
model.getActiveModel().getBlueprint().getName() + ":" + bone.getBoneId().toLowerCase(), bone.isVisible());
lastSet.replace(bone, bone.isVisible());
Bukkit.getLogger().info(model.getActiveModel().getBlueprint().getName() + ":" + bone.getBoneId().toLowerCase());
}
});
} }
private boolean canSee(Player player, Entity entity) { private boolean canSee(Player player, Entity entity) {
if (!player.isOnline()) { if (!player.isOnline()) {
return false; return false;