From 170e67e0592049b32bd01966d008060f07ed4b70 Mon Sep 17 00:00:00 2001 From: TheLividaProject <56977759+TheLividaProject@users.noreply.github.com> Date: Mon, 21 Jul 2025 22:32:45 +0100 Subject: [PATCH 1/8] just testing something --- build.gradle.kts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index a776d87..403b9b0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -52,9 +52,5 @@ tasks.shadowJar { } tasks.jar { - enabled = false -} - -tasks.build { - dependsOn("shadowJar") + dependsOn(tasks.shadowJar) } \ No newline at end of file From e83caacd2f8ef54f3f88433ac92413bcf3fe361b Mon Sep 17 00:00:00 2001 From: TheLividaProject <56977759+TheLividaProject@users.noreply.github.com> Date: Mon, 21 Jul 2025 22:39:58 +0100 Subject: [PATCH 2/8] nvm 90% sure it works i'm just dumb --- build.gradle.kts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 403b9b0..1932b41 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -51,6 +51,11 @@ tasks.shadowJar { relocate("org.reflections", "re.imc.geysermodelengine.libs.reflections") } + tasks.jar { - dependsOn(tasks.shadowJar) + enabled = false +} + +tasks.build { + dependsOn("shadowJar") } \ No newline at end of file From db99b2fe00f8e622e32e308730c531a557762d82 Mon Sep 17 00:00:00 2001 From: TheLividaProject <56977759+TheLividaProject@users.noreply.github.com> Date: Tue, 22 Jul 2025 11:03:23 +0100 Subject: [PATCH 3/8] we love big spawning issue, should be fixed till better solution --- .idea/workspace.xml | 30 +++++++++++++++++-- .../geysermodelengine/GeyserModelEngine.java | 9 +----- .../listener/ModelListener.java | 5 ++-- .../managers/model/ModelManager.java | 6 ++++ .../runnables/EntityTaskRunnable.java | 4 +-- 5 files changed, 38 insertions(+), 16 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 9238fa3..9f78683 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -5,8 +5,8 @@ - - + + { "keyToString": { + "Gradle.GeyserModelEngine [build].executor": "Run", "Gradle.GeyserModelEngine [jar].executor": "Run", "Maven.GeyserModelEngine [install...].executor": "Run", "Maven.GeyserModelEngine [install].executor": "Run", @@ -101,7 +102,29 @@ - + + + + + + + true + true + false + false + + 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 @@ - - - - + - + - + 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") }