@@ -49,34 +49,28 @@ public EffectStack(CompoundTag tag) {
4949 this .timeLeft = tag .getInteger ("timeLeft" );
5050 }
5151
52- public <T > void start (EffectContainer <T > container ) {
52+ public <T > void start (EffectContainer <T > effectContainer ) {
5353 if (state == State .INACTIVE ) {
5454 state = State .ACTIVE ;
5555 timeLeft = duration ;
56- effect .activated (this , container );
57-
58- if (EnvironmentHelper .isServerEnvironment ())
59- NetworkHandler .sendToAllPlayers (new SyncEffectContainerForEntityNetworkMessage ((Entity ) container .getParent ()));
56+ effect .activated (this , effectContainer );
57+ syncEffectsStack (effectContainer );
6058 }
6159 }
6260
63- public <T > void pause (EffectContainer <T > container ) {
61+ public <T > void pause (EffectContainer <T > effectContainer ) {
6462 if (state == State .ACTIVE ) {
6563 state = State .PAUSED ;
66- effect .paused (this , container );
67-
68- if (EnvironmentHelper .isServerEnvironment ())
69- NetworkHandler .sendToAllPlayers (new SyncEffectContainerForEntityNetworkMessage ((Entity ) container .getParent ()));
64+ effect .paused (this , effectContainer );
65+ syncEffectsStack (effectContainer );
7066 }
7167 }
7268
73- public <T > void unpause (EffectContainer <T > container ) {
69+ public <T > void unpause (EffectContainer <T > effectContainer ) {
7470 if (state == State .PAUSED ) {
7571 state = State .ACTIVE ;
76- effect .unpaused (this , container );
77-
78- if (EnvironmentHelper .isServerEnvironment ())
79- NetworkHandler .sendToAllPlayers (new SyncEffectContainerForEntityNetworkMessage ((Entity ) container .getParent ()));
72+ effect .unpaused (this , effectContainer );
73+ syncEffectsStack (effectContainer );
8074 }
8175 }
8276
@@ -88,6 +82,16 @@ public <T> void finish(EffectContainer<T> effectContainer) {
8882 }
8983 }
9084
85+ public <T > void restart (int amount , EffectContainer <T > effectContainer ) {
86+ if (state == State .FINISHED ) {
87+ timeLeft = duration ;
88+ state = State .ACTIVE ;
89+ this .amount -= amount ;
90+ effect .stackSubtracted (this , effectContainer );
91+ syncEffectsStack (effectContainer );
92+ }
93+ }
94+
9195 public <T > void tick (EffectContainer <T > effectContainer ) {
9296 if (state == State .ACTIVE ) {
9397 if (effect .getTimeType () == EffectTimeType .PERMANENT ) {
@@ -107,23 +111,32 @@ public <T> void add(int amount, EffectContainer<T> effectContainer) {
107111 this .amount += amount ;
108112 if (effect .getTimeType () == EffectTimeType .RESET ) {
109113 timeLeft = duration ;
114+ effect .stackRefreshed (this , effectContainer );
110115 }
111116 if (effect .getTimeType () == EffectTimeType .ADD ) {
112117 timeLeft += effect .getDurationIncrease ();
113118 }
114119
115- effect .stackAdded (this , effectContainer );
120+ if (amount > 0 ) {
121+ effect .stackAdded (this , effectContainer );
122+ }
116123
117- if (EnvironmentHelper .isServerEnvironment ())
118- NetworkHandler .sendToAllPlayers (new SyncEffectContainerForEntityNetworkMessage ((Entity ) effectContainer .getParent ()));
124+ syncEffectsStack (effectContainer );
119125 }
120126
121127 public <T > void subtract (int amount , EffectContainer <T > effectContainer ) {
122128 this .amount -= amount ;
123- effect .stackSubtracted (this , effectContainer );
124129
125- if (EnvironmentHelper .isServerEnvironment ())
130+ if (amount > 0 ) {
131+ effect .stackSubtracted (this , effectContainer );
132+ }
133+ syncEffectsStack (effectContainer );
134+ }
135+
136+ private static <T > void syncEffectsStack (EffectContainer <T > effectContainer ) {
137+ if (EnvironmentHelper .isServerEnvironment ()) {
126138 NetworkHandler .sendToAllPlayers (new SyncEffectContainerForEntityNetworkMessage ((Entity ) effectContainer .getParent ()));
139+ }
127140 }
128141
129142 public boolean isActive () {
0 commit comments