diff --git a/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java b/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java index 398e125..a54bf92 100644 --- a/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java +++ b/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java @@ -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 joinedPlayer; + private Set 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); diff --git a/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java b/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java index 35ae0c6..d06f180 100644 --- a/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java +++ b/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java @@ -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); } - } diff --git a/src/main/java/re/imc/geysermodelengine/model/EntityTask.java b/src/main/java/re/imc/geysermodelengine/model/EntityTask.java index 5f5be2a..9c3505a 100644 --- a/src/main/java/re/imc/geysermodelengine/model/EntityTask.java +++ b/src/main/java/re/imc/geysermodelengine/model/EntityTask.java @@ -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; }