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; 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())); + } + } } 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..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,14 +80,25 @@ 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){ + effect.tick(this,effectContainer); + return; + } if(timeLeft > 0){ - if(effect.getTimeType() != EffectTimeType.PERMANENT) timeLeft--; + timeLeft--; effect.tick(this,effectContainer); } else { - state = State.FINISHED; - effect.expired(this,effectContainer); + this.finish(effectContainer); } } } 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) *