@@ -127,6 +150,7 @@
+
diff --git a/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java b/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java
index 2041e17..b816bc1 100644
--- a/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java
+++ b/src/main/java/re/imc/geysermodelengine/GeyserModelEngine.java
@@ -2,7 +2,6 @@ package re.imc.geysermodelengine;
import com.github.retrooper.packetevents.PacketEvents;
import com.github.retrooper.packetevents.event.PacketListenerPriority;
-import com.ticxo.modelengine.api.model.ActiveModel;
import dev.jorel.commandapi.CommandAPI;
import dev.jorel.commandapi.CommandAPIBukkitConfig;
import io.github.retrooper.packetevents.factory.spigot.SpigotPacketEventsBuilder;
@@ -14,11 +13,9 @@ import re.imc.geysermodelengine.managers.ConfigManager;
import re.imc.geysermodelengine.managers.commands.CommandManager;
import re.imc.geysermodelengine.managers.model.EntityTaskManager;
import re.imc.geysermodelengine.managers.model.ModelManager;
-import re.imc.geysermodelengine.managers.model.data.ModelEntityData;
import re.imc.geysermodelengine.runnables.BedrockMountControlRunnable;
import re.imc.geysermodelengine.runnables.UpdateTaskRunnable;
-import java.util.*;
import java.util.concurrent.*;
public class GeyserModelEngine extends JavaPlugin {
@@ -55,11 +52,7 @@ public class GeyserModelEngine extends JavaPlugin {
public void onDisable() {
PacketEvents.getAPI().terminate();
- for (Map entities : modelManager.getEntitiesCache().values()) {
- entities.forEach((model, modelEntity) -> {
- modelEntity.getEntity().remove();
- });
- }
+ this.modelManager.removeEntities();
CommandAPI.onDisable();
}
diff --git a/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java b/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java
index 280d247..fd3b8bd 100644
--- a/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java
+++ b/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java
@@ -14,7 +14,6 @@ import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.world.WorldInitEvent;
-import org.bukkit.event.world.WorldLoadEvent;
import org.geysermc.floodgate.api.FloodgateApi;
import re.imc.geysermodelengine.GeyserModelEngine;
import re.imc.geysermodelengine.managers.model.data.ModelEntityData;
@@ -66,8 +65,8 @@ public class ModelListener implements Listener {
public void onPlayerJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
if (!FloodgateApi.getInstance().isFloodgatePlayer(player.getUniqueId())) return;
- //TODO temp fix bc like why? - the issue is when a player logs out and the mob is there, the player logs back in sometimes it can display as a pig only
- Bukkit.getAsyncScheduler().runDelayed(plugin, scheduledTask -> plugin.getModelManager().getPlayerJoinedCache().add(player.getUniqueId()), 10, TimeUnit.MILLISECONDS);
+ // Temp fix bc like why? - the issue is when a player logs out and the mob is there, the player logs back in sometimes it can display as a pig only
+ Bukkit.getGlobalRegionScheduler().runDelayed(plugin, scheduledTask -> plugin.getModelManager().getPlayerJoinedCache().add(player.getUniqueId()), 10);
}
@EventHandler
diff --git a/src/main/java/re/imc/geysermodelengine/managers/model/ModelManager.java b/src/main/java/re/imc/geysermodelengine/managers/model/ModelManager.java
index 2ba0009..37eaa14 100644
--- a/src/main/java/re/imc/geysermodelengine/managers/model/ModelManager.java
+++ b/src/main/java/re/imc/geysermodelengine/managers/model/ModelManager.java
@@ -52,6 +52,12 @@ public class ModelManager {
model.ifPresent(m -> create(modeledEntity, m));
}
+ public void removeEntities() {
+ for (Map entities : entitiesCache.values()) {
+ entities.forEach((model, modelEntity) -> modelEntity.getEntity().remove());
+ }
+ }
+
public HashSet getPlayerJoinedCache() {
return playerJoinedCache;
}
diff --git a/src/main/java/re/imc/geysermodelengine/runnables/EntityTaskRunnable.java b/src/main/java/re/imc/geysermodelengine/runnables/EntityTaskRunnable.java
index c995060..e9121a8 100644
--- a/src/main/java/re/imc/geysermodelengine/runnables/EntityTaskRunnable.java
+++ b/src/main/java/re/imc/geysermodelengine/runnables/EntityTaskRunnable.java
@@ -114,8 +114,8 @@ public class EntityTaskRunnable {
plugin.getEntityTaskManager().sendColor(model, Collections.singleton(player), lastColor, true);
updateEntityProperties(model, Collections.singleton(player), true);
- }, delay * 50L, TimeUnit.MILLISECONDS);
- }, 500, TimeUnit.MILLISECONDS);
+ }, 500, TimeUnit.MILLISECONDS);
+ }, delay * 50L, TimeUnit.MILLISECONDS);
}
public void updateEntityProperties(ModelEntityData model, Collection players, boolean firstSend, String... forceAnims) {
From 4679fa6f2b5b1bab65cc6a11b5d7a43bc8b45500 Mon Sep 17 00:00:00 2001
From: TheLividaProject <56977759+TheLividaProject@users.noreply.github.com>
Date: Tue, 22 Jul 2025 12:23:07 +0100
Subject: [PATCH 4/8] changed a comment about the pig issue
---
.../java/re/imc/geysermodelengine/listener/ModelListener.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java b/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java
index fd3b8bd..596bdd9 100644
--- a/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java
+++ b/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java
@@ -65,7 +65,7 @@ public class ModelListener implements Listener {
public void onPlayerJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
if (!FloodgateApi.getInstance().isFloodgatePlayer(player.getUniqueId())) return;
- // Temp fix bc like why? - the issue is when a player logs out and the mob is there, the player logs back in sometimes it can display as a pig only
+ // Temp fix till a better solution is found - the issue is when a player logs out and the mob is there, the player logs back in sometimes it can display as a pig only
Bukkit.getGlobalRegionScheduler().runDelayed(plugin, scheduledTask -> plugin.getModelManager().getPlayerJoinedCache().add(player.getUniqueId()), 10);
}
From 03f27514ef443e08a15e7e962f7d76db1c680bff Mon Sep 17 00:00:00 2001
From: TheLividaProject <56977759+TheLividaProject@users.noreply.github.com>
Date: Tue, 22 Jul 2025 17:23:06 +0100
Subject: [PATCH 5/8] added a comment ModelListener issue in regards of pig
spawning (such a thing issue) - mainly for those who want to know why it has
a delay on the player join, i didn't know this when forked it and took it off
but added it back now and should hopefully fix the issue
---
.idea/workspace.xml | 9 +++------
.../geysermodelengine/listener/ModelListener.java | 13 +++++++++++--
.../managers/model/EntityTaskManager.java | 2 --
3 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 9f78683..51a680c 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -4,10 +4,7 @@
-
-
-
-
+
@@ -102,7 +99,7 @@
-
+
@@ -149,8 +146,8 @@
-
+
diff --git a/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java b/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java
index 596bdd9..842a81c 100644
--- a/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java
+++ b/src/main/java/re/imc/geysermodelengine/listener/ModelListener.java
@@ -19,7 +19,6 @@ import re.imc.geysermodelengine.GeyserModelEngine;
import re.imc.geysermodelengine.managers.model.data.ModelEntityData;
import java.util.Map;
-import java.util.concurrent.TimeUnit;
public class ModelListener implements Listener {
@@ -61,11 +60,21 @@ public class ModelListener implements Listener {
world.getEntities().forEach(entity -> plugin.getModelManager().processEntities(entity));
}
+ /*
+ / Temp fix till a better solution is found -
+ / the issue is when a player logs out and the mob is there,
+ / the player logs back in sometimes it can display as a pig only
+ / this issues mainly comes from the functions from EntityTaskManager
+ / sendSpawnPacket() and canSee()
+ /
+ / TheLividaProject - conclusion:
+ / I'm assuming when a player joins the server the packet for mob spawning is instant so the client resyncs itself
+ / hence why the pig is shown instead of going invisible and not displaying the texture of the modeled mob
+ */
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
if (!FloodgateApi.getInstance().isFloodgatePlayer(player.getUniqueId())) return;
- // Temp fix till a better solution is found - the issue is when a player logs out and the mob is there, the player logs back in sometimes it can display as a pig only
Bukkit.getGlobalRegionScheduler().runDelayed(plugin, scheduledTask -> plugin.getModelManager().getPlayerJoinedCache().add(player.getUniqueId()), 10);
}
diff --git a/src/main/java/re/imc/geysermodelengine/managers/model/EntityTaskManager.java b/src/main/java/re/imc/geysermodelengine/managers/model/EntityTaskManager.java
index 643f5a9..26d5eed 100644
--- a/src/main/java/re/imc/geysermodelengine/managers/model/EntityTaskManager.java
+++ b/src/main/java/re/imc/geysermodelengine/managers/model/EntityTaskManager.java
@@ -96,7 +96,6 @@ public class EntityTaskManager {
}
}
- // Issue here - start: See ModelListener.class and look at function onPlayerJoin
private void sendSpawnPacket(ModelEntityData model, Player onlinePlayer) {
EntityTaskRunnable task = model.getEntityTask();
boolean firstJoined = !plugin.getModelManager().getPlayerJoinedCache().contains(onlinePlayer.getUniqueId());
@@ -122,7 +121,6 @@ public class EntityTaskManager {
return true;
}
- // Issue here - end
public void sendHitBoxToAll(ModelEntityData model) {
for (Player viewer : model.getViewers()) {
From 94df76b9a650418e5e0581cc43dd400fe2d80f81 Mon Sep 17 00:00:00 2001
From: TheLividaProject <56977759+TheLividaProject@users.noreply.github.com>
Date: Tue, 22 Jul 2025 18:07:31 +0100
Subject: [PATCH 6/8] Now renames the jar to the project name and it's version
---
build.gradle.kts | 2 ++
1 file changed, 2 insertions(+)
diff --git a/build.gradle.kts b/build.gradle.kts
index 1932b41..a70e281 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -43,6 +43,8 @@ tasks.compileJava {
}
tasks.shadowJar {
+ archiveFileName.set("${rootProject.name}-${version}.jar")
+
relocate("dev.jorel.commandapi", "re.imc.geysermodelengine.libs.commandapi")
relocate("com.github.retrooper", "re.imc.geysermodelengine.libs.com.github.retrooper.packetevents")
From 2a9fdec8b6a3bcbcfd9de3a1ade06340126504d4 Mon Sep 17 00:00:00 2001
From: TheLividaProject <56977759+TheLividaProject@users.noreply.github.com>
Date: Tue, 22 Jul 2025 20:17:35 +0100
Subject: [PATCH 7/8] Update build.gradle.kts
---
build.gradle.kts | 5 -----
1 file changed, 5 deletions(-)
diff --git a/build.gradle.kts b/build.gradle.kts
index a70e281..f7da860 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -53,11 +53,6 @@ tasks.shadowJar {
relocate("org.reflections", "re.imc.geysermodelengine.libs.reflections")
}
-
-tasks.jar {
- enabled = false
-}
-
tasks.build {
dependsOn("shadowJar")
}
\ No newline at end of file
From 2c5dba8097d37a566cf0d5b6edab522922a26c71 Mon Sep 17 00:00:00 2001
From: TheLividaProject <56977759+TheLividaProject@users.noreply.github.com>
Date: Tue, 22 Jul 2025 20:45:31 +0100
Subject: [PATCH 8/8] bumped PacketEvents to 2.9.4
---
build.gradle.kts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/build.gradle.kts b/build.gradle.kts
index f7da860..43f8cdc 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -29,7 +29,7 @@ dependencies {
compileOnly("org.geysermc.floodgate:api:2.2.4-SNAPSHOT")
- implementation("com.github.retrooper:packetevents-spigot:2.9.3")
+ implementation("com.github.retrooper:packetevents-spigot:2.9.4")
implementation("org.reflections:reflections:0.10.2")
}