diff --git a/effects/src/main/java/sunsetsatellite/catalyst/effects/api/effect/Effect.java b/effects/src/main/java/sunsetsatellite/catalyst/effects/api/effect/Effect.java index 1c79c01..e91330e 100644 --- a/effects/src/main/java/sunsetsatellite/catalyst/effects/api/effect/Effect.java +++ b/effects/src/main/java/sunsetsatellite/catalyst/effects/api/effect/Effect.java @@ -150,8 +150,13 @@ public void stackSubtracted(EffectStack effectStack, EffectContainer effe } + public void stackRefreshed(EffectStack effectStack, EffectContainer effectContainer) { + + } + @Override public boolean isIn(Tag tag) { return tag.appliesTo(this); } + } 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 89f7979..c79148e 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 @@ -49,34 +49,28 @@ public EffectStack(CompoundTag tag) { this.timeLeft = tag.getInteger("timeLeft"); } - public void start(EffectContainer container) { + public void start(EffectContainer effectContainer) { if (state == State.INACTIVE) { state = State.ACTIVE; timeLeft = duration; - effect.activated(this, container); - - if (EnvironmentHelper.isServerEnvironment()) - NetworkHandler.sendToAllPlayers(new SyncEffectContainerForEntityNetworkMessage((Entity) container.getParent())); + effect.activated(this, effectContainer); + syncEffectsStack(effectContainer); } } - public void pause(EffectContainer container) { + public void pause(EffectContainer effectContainer) { if (state == State.ACTIVE) { state = State.PAUSED; - effect.paused(this, container); - - if (EnvironmentHelper.isServerEnvironment()) - NetworkHandler.sendToAllPlayers(new SyncEffectContainerForEntityNetworkMessage((Entity) container.getParent())); + effect.paused(this, effectContainer); + syncEffectsStack(effectContainer); } } - public void unpause(EffectContainer container) { + public void unpause(EffectContainer effectContainer) { if (state == State.PAUSED) { state = State.ACTIVE; - effect.unpaused(this, container); - - if (EnvironmentHelper.isServerEnvironment()) - NetworkHandler.sendToAllPlayers(new SyncEffectContainerForEntityNetworkMessage((Entity) container.getParent())); + effect.unpaused(this, effectContainer); + syncEffectsStack(effectContainer); } } @@ -88,6 +82,16 @@ public void finish(EffectContainer effectContainer) { } } + public void restart(int amount, EffectContainer effectContainer) { + if (state == State.FINISHED) { + timeLeft = duration; + state = State.ACTIVE; + this.amount -= amount; + effect.stackSubtracted(this, effectContainer); + syncEffectsStack(effectContainer); + } + } + public void tick(EffectContainer effectContainer) { if (state == State.ACTIVE) { if (effect.getTimeType() == EffectTimeType.PERMANENT) { @@ -107,23 +111,32 @@ public void add(int amount, EffectContainer effectContainer) { this.amount += amount; if (effect.getTimeType() == EffectTimeType.RESET) { timeLeft = duration; + effect.stackRefreshed(this, effectContainer); } if (effect.getTimeType() == EffectTimeType.ADD) { timeLeft += effect.getDurationIncrease(); } - effect.stackAdded(this, effectContainer); + if (amount > 0) { + effect.stackAdded(this, effectContainer); + } - if (EnvironmentHelper.isServerEnvironment()) - NetworkHandler.sendToAllPlayers(new SyncEffectContainerForEntityNetworkMessage((Entity) effectContainer.getParent())); + syncEffectsStack(effectContainer); } public void subtract(int amount, EffectContainer effectContainer) { this.amount -= amount; - effect.stackSubtracted(this, effectContainer); - if (EnvironmentHelper.isServerEnvironment()) + if (amount > 0) { + effect.stackSubtracted(this, effectContainer); + } + syncEffectsStack(effectContainer); + } + + private static void syncEffectsStack(EffectContainer effectContainer) { + if (EnvironmentHelper.isServerEnvironment()) { NetworkHandler.sendToAllPlayers(new SyncEffectContainerForEntityNetworkMessage((Entity) effectContainer.getParent())); + } } public boolean isActive() {