Skip to content

Commit 34dd086

Browse files
committed
clean up #176
1 parent 8cb8753 commit 34dd086

13 files changed

Lines changed: 100 additions & 61 deletions

File tree

src/main/java/com/cleanroommc/modularui/api/widget/ISynced.java

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
import com.cleanroommc.modularui.value.sync.ModularSyncManager;
55
import com.cleanroommc.modularui.value.sync.SyncHandler;
66

7-
import com.cleanroommc.modularui.widget.Widget;
8-
7+
import org.jetbrains.annotations.ApiStatus;
98
import org.jetbrains.annotations.NotNull;
109
import org.jetbrains.annotations.Nullable;
1110

@@ -35,8 +34,7 @@ default W getThis() {
3534
void initialiseSyncHandler(ModularSyncManager syncManager, boolean late);
3635

3736
/**
38-
* Checks if the received sync handler is valid for this widget. <br />
39-
* Called before {@link Widget#setSyncHandler(SyncHandler)} <br />
37+
* Checks and return if the received sync handler is valid for this widget This is usually an instanceof check. <br />
4038
* <b>Synced widgets must override this!</b>
4139
*
4240
* @param syncHandler received sync handler
@@ -46,6 +44,21 @@ default boolean isValidSyncHandler(SyncHandler syncHandler) {
4644
return false;
4745
}
4846

47+
/**
48+
* Checks if the given sync handler is valid for this widget and throws an exception if not.
49+
* Override {@link #isValidSyncHandler(SyncHandler)}
50+
*
51+
* @param syncHandler given sync handler
52+
* @throws IllegalStateException if the given sync handler is invalid for this widget.
53+
*/
54+
@ApiStatus.NonExtendable
55+
default void checkValidSyncHandler(SyncHandler syncHandler) {
56+
if (!isValidSyncHandler(syncHandler)) {
57+
throw new IllegalStateException("SyncHandler of type '" + syncHandler.getClass().getSimpleName() + "' is not valid " +
58+
"for widget '" + this + "'.");
59+
}
60+
}
61+
4962
default <T> T castIfTypeElseNull(SyncHandler syncHandler, Class<T> clazz) {
5063
return castIfTypeElseNull(syncHandler, clazz, null);
5164
}

src/main/java/com/cleanroommc/modularui/screen/ModularPanel.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,13 @@ public boolean isValidSyncHandler(SyncHandler syncHandler) {
114114
return syncHandler instanceof IPanelHandler;
115115
}
116116

117+
@ApiStatus.Internal
118+
@Override
119+
public void setSyncHandler(@Nullable SyncHandler syncHandler) {
120+
super.setSyncHandler(syncHandler);
121+
setPanelHandler((IPanelHandler) syncHandler);
122+
}
123+
117124
/**
118125
* @return true if this panel is currently open on a screen
119126
*/
@@ -737,16 +744,6 @@ public final boolean isMainPanel() {
737744
return getScreen().getMainPanel() == this;
738745
}
739746

740-
@ApiStatus.Internal
741-
@Override
742-
public void setSyncHandler(@Nullable SyncHandler syncHandler) {
743-
if (syncHandler != null && !isValidSyncHandler(syncHandler))
744-
throw new IllegalStateException("Panel SyncHandler's must implement IPanelHandler!");
745-
746-
super.setSyncHandler(syncHandler);
747-
setPanelHandler((IPanelHandler) syncHandler);
748-
}
749-
750747
@NotNull
751748
protected Animator getAnimator() {
752749
if (this.animator == null) {

src/main/java/com/cleanroommc/modularui/widget/Widget.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -150,11 +150,7 @@ public void initialiseSyncHandler(ModularSyncManager syncManager, boolean late)
150150
if (handler == null && this.syncKey != null) {
151151
handler = syncManager.getSyncHandler(getPanel().getName(), this.syncKey);
152152
}
153-
if (handler != null && !isValidSyncHandler(handler)) {
154-
String type = handler.getClass().getName();
155-
setSyncHandler(null);
156-
throw new IllegalStateException("SyncHandler of type " + type + " is not valid for " + getClass().getName() + ", with key " + this.syncKey);
157-
}
153+
if (handler != null) checkValidSyncHandler(handler);
158154
setSyncHandler(handler);
159155
if (this.syncHandler instanceof ValueSyncHandler<?> valueSyncHandler && valueSyncHandler.getChangeListener() == null) {
160156
valueSyncHandler.setChangeListener(this::markTooltipDirty);
@@ -857,7 +853,7 @@ public W syncHandler(String name, int id) {
857853
*/
858854
protected void setValue(IValue<?> value) {
859855
this.value = value;
860-
if (value instanceof SyncHandler handler && isValidSyncHandler(handler)) {
856+
if (value instanceof SyncHandler handler) {
861857
setSyncHandler(handler);
862858
}
863859
}
@@ -866,6 +862,7 @@ protected void setValue(IValue<?> value) {
866862
* Used for widgets to set a sync handler.
867863
*/
868864
protected void setSyncHandler(@Nullable SyncHandler syncHandler) {
865+
if (syncHandler != null) checkValidSyncHandler(syncHandler);
869866
this.syncHandler = syncHandler;
870867
}
871868

src/main/java/com/cleanroommc/modularui/widgets/AbstractCycleButtonWidget.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,12 @@ public boolean isValidSyncHandler(SyncHandler syncHandler) {
4747
return syncHandler instanceof IIntValue<?>;
4848
}
4949

50+
@Override
51+
protected void setSyncHandler(@Nullable SyncHandler syncHandler) {
52+
super.setSyncHandler(syncHandler);
53+
this.intValue = castIfTypeElseNull(syncHandler, IIntValue.class);
54+
}
55+
5056
protected int getState() {
5157
int val = this.intValue.getIntValue();
5258
if (val != this.lastValue) {

src/main/java/com/cleanroommc/modularui/widgets/ButtonWidget.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,8 @@ public W syncHandler(InteractionSyncHandler interactionSyncHandler) {
172172

173173
@Override
174174
protected void setSyncHandler(@Nullable SyncHandler syncHandler) {
175-
this.syncHandler = castIfTypeElseNull(syncHandler, InteractionSyncHandler.class);
176175
super.setSyncHandler(syncHandler);
176+
this.syncHandler = castIfTypeElseNull(syncHandler, InteractionSyncHandler.class);
177177
}
178178

179179
public W playClickSound(boolean play) {

src/main/java/com/cleanroommc/modularui/widgets/DynamicSyncedWidget.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@ public boolean isValidSyncHandler(SyncHandler syncHandler) {
3030
return syncHandler instanceof DynamicSyncHandler;
3131
}
3232

33+
@Override
34+
protected void setSyncHandler(@Nullable SyncHandler syncHandler) {
35+
super.setSyncHandler(syncHandler);
36+
this.syncHandler = castIfTypeElseNull(syncHandler, DynamicSyncHandler.class, t -> t.attachDynamicWidgetListener(this::updateChild));
37+
}
38+
3339
@Override
3440
public @NotNull List<IWidget> getChildren() {
3541
if (this.child == null) {
@@ -57,12 +63,6 @@ public W syncHandler(DynamicSyncHandler syncHandler) {
5763
return getThis();
5864
}
5965

60-
@Override
61-
protected void setSyncHandler(@Nullable SyncHandler syncHandler) {
62-
this.syncHandler = castIfTypeElseNull(syncHandler, DynamicSyncHandler.class, t -> t.attachDynamicWidgetListener(this::updateChild));
63-
super.setSyncHandler(syncHandler);
64-
}
65-
6666
/**
6767
* Sets an initial child. This can only be done before the widget is initialised.
6868
*

src/main/java/com/cleanroommc/modularui/widgets/ItemDisplayWidget.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313

1414
import net.minecraft.item.ItemStack;
1515

16+
import org.jetbrains.annotations.Nullable;
17+
1618
/**
1719
* An item slot which only purpose is to display an item stack.
1820
* The displayed item stack can be supplied directly, by an {@link ObjectValue} dynamically or by a {@link GenericSyncValue} synced.
@@ -32,6 +34,12 @@ public boolean isValidSyncHandler(SyncHandler syncHandler) {
3234
return syncHandler instanceof GenericSyncValue<?> gsv && gsv.isOfType(ItemStack.class);
3335
}
3436

37+
@Override
38+
protected void setSyncHandler(@Nullable SyncHandler syncHandler) {
39+
super.setSyncHandler(syncHandler);
40+
this.value = castIfTypeGenericElseNull(syncHandler, ItemStack.class);
41+
}
42+
3543
@Override
3644
protected WidgetThemeEntry<?> getWidgetThemeInternal(ITheme theme) {
3745
return theme.getItemSlotTheme();
@@ -54,7 +62,8 @@ public ItemDisplayWidget item(IValue<ItemStack> itemSupplier) {
5462
return this;
5563
}
5664

57-
public ItemDisplayWidget item(ItemStack itemStack) {;
65+
public ItemDisplayWidget item(ItemStack itemStack) {
66+
;
5867
return item(new ObjectValue<>(itemStack));
5968
}
6069

src/main/java/com/cleanroommc/modularui/widgets/ProgressWidget.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
import com.cleanroommc.modularui.value.sync.SyncHandler;
1313
import com.cleanroommc.modularui.widget.Widget;
1414

15+
import org.jetbrains.annotations.Nullable;
16+
1517
import java.util.function.DoubleSupplier;
1618

1719
public class ProgressWidget extends Widget<ProgressWidget> {
@@ -42,6 +44,12 @@ public boolean isValidSyncHandler(SyncHandler syncHandler) {
4244
return syncHandler instanceof IDoubleValue<?>;
4345
}
4446

47+
@Override
48+
protected void setSyncHandler(@Nullable SyncHandler syncHandler) {
49+
super.setSyncHandler(syncHandler);
50+
this.doubleValue = castIfTypeElseNull(syncHandler, IDoubleValue.class);
51+
}
52+
4553
@Override
4654
public void onResized() {
4755
super.onResized();

src/main/java/com/cleanroommc/modularui/widgets/SliderWidget.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import it.unimi.dsi.fastutil.doubles.DoubleArrayList;
2222
import it.unimi.dsi.fastutil.doubles.DoubleList;
2323
import org.jetbrains.annotations.NotNull;
24+
import org.jetbrains.annotations.Nullable;
2425

2526
public class SliderWidget extends Widget<SliderWidget> implements Interactable {
2627

@@ -66,6 +67,12 @@ public boolean isValidSyncHandler(SyncHandler syncHandler) {
6667
return syncHandler instanceof IDoubleValue<?>;
6768
}
6869

70+
@Override
71+
protected void setSyncHandler(@Nullable SyncHandler syncHandler) {
72+
super.setSyncHandler(syncHandler);
73+
this.doubleValue = castIfTypeElseNull(syncHandler, IDoubleValue.class);
74+
}
75+
6976
@Override
7077
public void drawBackground(ModularGuiContext context, WidgetThemeEntry<?> widgetTheme) {
7178
super.drawBackground(context, widgetTheme);

src/main/java/com/cleanroommc/modularui/widgets/slot/FluidSlot.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,12 @@ public boolean isValidSyncHandler(SyncHandler syncHandler) {
149149
return syncHandler instanceof FluidSlotSyncHandler;
150150
}
151151

152+
@Override
153+
protected void setSyncHandler(@Nullable SyncHandler syncHandler) {
154+
super.setSyncHandler(syncHandler);
155+
this.syncHandler = castIfTypeElseNull(syncHandler, FluidSlotSyncHandler.class);
156+
}
157+
152158
@Override
153159
public void draw(ModularGuiContext context, WidgetThemeEntry<?> widgetTheme) {
154160
IFluidTank fluidTank = getFluidTank();
@@ -287,12 +293,6 @@ public FluidSlot syncHandler(FluidSlotSyncHandler syncHandler) {
287293
return this;
288294
}
289295

290-
@Override
291-
protected void setSyncHandler(@Nullable SyncHandler syncHandler) {
292-
this.syncHandler = castIfTypeElseNull(syncHandler, FluidSlotSyncHandler.class);
293-
super.setSyncHandler(syncHandler);
294-
}
295-
296296
/* === Recipe viewer ghost slot === */
297297

298298
@Override

0 commit comments

Comments
 (0)