Fix invisible entity

This commit is contained in:
zimzaza4
2025-02-06 23:29:25 +08:00
parent 2ef0ea9527
commit d7fdbc3f77
3 changed files with 15 additions and 15 deletions

View File

@@ -22,10 +22,7 @@ import re.imc.geysermodelengine.listener.MountPacketListener;
import re.imc.geysermodelengine.model.BedrockMountControl;
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.*;
import java.util.concurrent.*;
public final class GeyserModelEngine extends JavaPlugin {
@@ -43,7 +40,7 @@ public final class GeyserModelEngine extends JavaPlugin {
private int viewDistance;
@Getter
private Cache<Player, Boolean> joinedPlayer;
private Set<Player> joinedPlayers = new HashSet<>();
@Getter
private int joinSendDelay;
@@ -117,17 +114,14 @@ public final class GeyserModelEngine extends JavaPlugin {
public void reload() {
saveDefaultConfig();
// alwaysSendSkin = getConfig().getBoolean("always-send-skin");
sendDelay = getConfig().getInt("data-send-delay", 0);
sendDelay = getConfig().getInt("data-send-delay", 5);
scheduler = Executors.newScheduledThreadPool(getConfig().getInt("thread-pool-size", 4));
viewDistance = getConfig().getInt("entity-view-distance", 60);
debug = getConfig().getBoolean("debug", false);
joinSendDelay = getConfig().getInt("join-send-delay", 20);
entityPositionUpdatePeriod = getConfig().getLong("entity-position-update-period", 35);
enablePartVisibilityModels.addAll(getConfig().getStringList("enable-part-visibility-models"));
if (joinSendDelay > 0) {
joinedPlayer = CacheBuilder.newBuilder()
.expireAfterWrite(joinSendDelay * 50L, TimeUnit.MILLISECONDS).build();
}
instance = this;
if (updateTask != null) {
updateTask.cancel(true);

View File

@@ -6,11 +6,14 @@ import com.ticxo.modelengine.api.events.ModelMountEvent;
import com.ticxo.modelengine.api.events.RemoveModelEvent;
import com.ticxo.modelengine.api.model.ActiveModel;
import org.apache.commons.lang3.tuple.Pair;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import re.imc.geysermodelengine.GeyserModelEngine;
import re.imc.geysermodelengine.model.ModelEntity;
@@ -115,8 +118,11 @@ public class ModelListener implements Listener {
}
*/
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
GeyserModelEngine.getInstance().getJoinedPlayer().put(event.getPlayer(), true);
public void onPlayerLogin(PlayerJoinEvent event) {
Bukkit.getScheduler().runTaskLater(GeyserModelEngine.getInstance(), () -> GeyserModelEngine.getInstance().getJoinedPlayers().add(event.getPlayer()), 10);
}
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
Bukkit.getScheduler().runTaskLater(GeyserModelEngine.getInstance(), () -> GeyserModelEngine.getInstance().getJoinedPlayers().remove(event.getPlayer()), 10);
}
}

View File

@@ -131,7 +131,7 @@ public class EntityTask {
private void sendSpawnPacket(Player onlinePlayer) {
EntityTask task = model.getTask();
boolean firstJoined = GeyserModelEngine.getInstance().getJoinedPlayer().getIfPresent(onlinePlayer) != null;
boolean firstJoined = !GeyserModelEngine.getInstance().getJoinedPlayers().contains(onlinePlayer);
if (firstJoined) {
task.sendEntityData(onlinePlayer, GeyserModelEngine.getInstance().getJoinSendDelay() / 50);
@@ -333,7 +333,7 @@ public class EntityTask {
if (!player.isOnline()) {
return false;
}
if (GeyserModelEngine.getInstance().getJoinedPlayer() != null && GeyserModelEngine.getInstance().getJoinedPlayer().getIfPresent(player) != null) {
if (!GeyserModelEngine.getInstance().getJoinedPlayers().contains(player)) {
return false;
}