From 4feff6944b6b06f9c11d1fa07d45374f344a4c00 Mon Sep 17 00:00:00 2001 From: Redart15 Date: Tue, 4 Nov 2025 18:11:23 +0100 Subject: [PATCH 1/5] activated the effectstack so it can be properly processed --- .../catalyst/effects/helper/HealthHelper.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/effects/src/main/java/sunsetsatellite/catalyst/effects/helper/HealthHelper.java b/effects/src/main/java/sunsetsatellite/catalyst/effects/helper/HealthHelper.java index 4c53584..224c66a 100644 --- a/effects/src/main/java/sunsetsatellite/catalyst/effects/helper/HealthHelper.java +++ b/effects/src/main/java/sunsetsatellite/catalyst/effects/helper/HealthHelper.java @@ -26,11 +26,11 @@ public static int getExtraHealth(Player player) { * @param amount the amount of extra health they should have */ public static void setExtraHealth(Player player, int amount) { - EffectContainer container = ((IHasEffects) player).getContainer(); - container.remove(Effects.EXTRA_HEALTH); - container.add(new EffectStack((IHasEffects) player, Effects.EXTRA_HEALTH, amount)); + EffectStack stack = new EffectStack((IHasEffects) player, Effects.EXTRA_HEALTH, amount); + container.add(stack); + stack.start(container); } /** @@ -40,9 +40,13 @@ public static void setExtraHealth(Player player, int amount) { * @param amount the amount of extra health to add, on top of the amount they already have */ public static void addExtraHealth(Player player, int amount) { - ((IHasEffects) player).getContainer().add(new EffectStack((IHasEffects) player, Effects.EXTRA_HEALTH, amount)); + EffectStack stack = new EffectStack((IHasEffects) player, Effects.EXTRA_HEALTH, amount); + EffectContainer container = ((IHasEffects) player).getContainer(); + container.add(stack); + stack.start(container); } + /** * Get the total/max health of a player (20 + extra health) * From f1ae18370f7a79635f75dc34e0c0573832468e05 Mon Sep 17 00:00:00 2001 From: Redart15 Date: Tue, 4 Nov 2025 18:12:31 +0100 Subject: [PATCH 2/5] permanent effect no longer finish if the time is set to 0 --- .../catalyst/effects/api/effect/EffectStack.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/effects/src/main/java/sunsetsatellite/catalyst/effects/api/effect/EffectStack.java b/effects/src/main/java/sunsetsatellite/catalyst/effects/api/effect/EffectStack.java index 11b53ad..bf857e9 100644 --- a/effects/src/main/java/sunsetsatellite/catalyst/effects/api/effect/EffectStack.java +++ b/effects/src/main/java/sunsetsatellite/catalyst/effects/api/effect/EffectStack.java @@ -82,8 +82,12 @@ public void unpause(EffectContainer container){ public void tick(EffectContainer effectContainer) { if(state == State.ACTIVE){ + if(effect.getTimeType() == EffectTimeType.PERMANENT){ + effect.tick(this,effectContainer); + return; + } if(timeLeft > 0){ - if(effect.getTimeType() != EffectTimeType.PERMANENT) timeLeft--; + timeLeft--; effect.tick(this,effectContainer); } else { state = State.FINISHED; From fc689e8c7ce3fd7248d4de0395921b6084ae52f9 Mon Sep 17 00:00:00 2001 From: Redart15 Date: Tue, 4 Nov 2025 18:16:07 +0100 Subject: [PATCH 3/5] EffectStack can now be forced to finish --- .../catalyst/effects/api/effect/EffectStack.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/effects/src/main/java/sunsetsatellite/catalyst/effects/api/effect/EffectStack.java b/effects/src/main/java/sunsetsatellite/catalyst/effects/api/effect/EffectStack.java index bf857e9..9cea13a 100644 --- a/effects/src/main/java/sunsetsatellite/catalyst/effects/api/effect/EffectStack.java +++ b/effects/src/main/java/sunsetsatellite/catalyst/effects/api/effect/EffectStack.java @@ -80,6 +80,14 @@ public void unpause(EffectContainer container){ } } + public void finish(EffectContainer effectContainer){ + if(state == State.ACTIVE){ + timeLeft = 0; + state = State.FINISHED; + effect.expired(this,effectContainer); + } + } + public void tick(EffectContainer effectContainer) { if(state == State.ACTIVE){ if(effect.getTimeType() == EffectTimeType.PERMANENT){ @@ -90,8 +98,7 @@ public void tick(EffectContainer effectContainer) { timeLeft--; effect.tick(this,effectContainer); } else { - state = State.FINISHED; - effect.expired(this,effectContainer); + this.finish(effectContainer); } } } From 7f90e51baa43fa84a9aeab4ab22d9ac446c7c945 Mon Sep 17 00:00:00 2001 From: Redart15 Date: Tue, 4 Nov 2025 18:16:49 +0100 Subject: [PATCH 4/5] simplified the logic --- .../effects/api/effect/EffectContainer.java | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/effects/src/main/java/sunsetsatellite/catalyst/effects/api/effect/EffectContainer.java b/effects/src/main/java/sunsetsatellite/catalyst/effects/api/effect/EffectContainer.java index 58fe610..169296f 100644 --- a/effects/src/main/java/sunsetsatellite/catalyst/effects/api/effect/EffectContainer.java +++ b/effects/src/main/java/sunsetsatellite/catalyst/effects/api/effect/EffectContainer.java @@ -38,20 +38,15 @@ public void add(EffectStack effectStack){ for (EffectStack effect : effects) { if(effect.getEffect() == effectStack.getEffect()){ - int amount; - if(effect.getAmount() + effectStack.getAmount() >= effect.getEffect().getMaxStack()){ - amount = effect.getEffect().getMaxStack() - effect.getAmount(); - }else{ - amount = effectStack.getAmount(); - } + int amount = Math.min(effectStack.getAmount(), effect.getEffect().getMaxStack() - effect.getAmount()); effect.add(amount,this); - if (EnvironmentHelper.isServerEnvironment()) NetworkHandler.sendToAllPlayers(new SyncEffectContainerForEntityNetworkMessage((Entity) this.getParent())); + syncEffectContainer(); return; } } effects.add(effectStack); - if (EnvironmentHelper.isServerEnvironment()) NetworkHandler.sendToAllPlayers(new SyncEffectContainerForEntityNetworkMessage((Entity) this.getParent())); + syncEffectContainer(); } public void subtract(EffectStack effectStack){ @@ -59,7 +54,7 @@ public void subtract(EffectStack effectStack){ if(effect.getEffect() == effectStack.getEffect()){ effect.subtract(effectStack.getAmount(),this); - if (EnvironmentHelper.isServerEnvironment()) NetworkHandler.sendToAllPlayers(new SyncEffectContainerForEntityNetworkMessage((Entity) this.getParent())); + syncEffectContainer(); return; } } @@ -75,7 +70,7 @@ public void remove(Effect effect){ } } - if (EnvironmentHelper.isServerEnvironment()) NetworkHandler.sendToAllPlayers(new SyncEffectContainerForEntityNetworkMessage((Entity) this.getParent())); + syncEffectContainer(); } public void removeAll() { List copy = new ArrayList<>(effects); @@ -129,4 +124,10 @@ public void loadFromNbt(CompoundTag tag){ } } } + + private void syncEffectContainer() { + if (EnvironmentHelper.isServerEnvironment()) { + NetworkHandler.sendToAllPlayers(new SyncEffectContainerForEntityNetworkMessage((Entity) this.getParent())); + } + } } From 936df201af97ae5a6d4dfdff7ec98ead044a3ed2 Mon Sep 17 00:00:00 2001 From: Redart15 Date: Tue, 4 Nov 2025 18:17:54 +0100 Subject: [PATCH 5/5] removed unneeded import --- .../catalyst/effects/api/attribute/type/IntAttribute.java | 1 - 1 file changed, 1 deletion(-) diff --git a/effects/src/main/java/sunsetsatellite/catalyst/effects/api/attribute/type/IntAttribute.java b/effects/src/main/java/sunsetsatellite/catalyst/effects/api/attribute/type/IntAttribute.java index 1d12ce1..529366a 100644 --- a/effects/src/main/java/sunsetsatellite/catalyst/effects/api/attribute/type/IntAttribute.java +++ b/effects/src/main/java/sunsetsatellite/catalyst/effects/api/attribute/type/IntAttribute.java @@ -7,7 +7,6 @@ import java.util.Comparator; import java.util.List; -import java.util.Objects; import java.util.function.Function; import java.util.stream.Collectors;