diff --git a/src/main/java/com/cleanroommc/modularui/value/sync/PanelSyncManager.java b/src/main/java/com/cleanroommc/modularui/value/sync/PanelSyncManager.java index 66b621682..777abe217 100644 --- a/src/main/java/com/cleanroommc/modularui/value/sync/PanelSyncManager.java +++ b/src/main/java/com/cleanroommc/modularui/value/sync/PanelSyncManager.java @@ -373,7 +373,7 @@ public T getOrCreateSyncHandler(String name, Class cl } public T getOrCreateSyncHandler(String name, int id, Class clazz, Supplier supplier) { - SyncHandler syncHandler = getSyncHandler(name); + SyncHandler syncHandler = findSyncHandlerNullable(name, id); if (syncHandler == null) { if (isLocked() && !this.allowSyncHandlerRegistration) { // registration is locked, and we don't have permission to temporarily bypass lock @@ -387,7 +387,7 @@ public T getOrCreateSyncHandler(String name, int id, Cla return t; } if (clazz.isAssignableFrom(syncHandler.getClass())) { - return (T) syncHandler; + return clazz.cast(syncHandler); } throw new IllegalStateException("SyncHandler for key " + makeSyncKey(name, id) + " is of type " + syncHandler.getClass() + ", but type " + clazz + " was expected!"); } @@ -434,11 +434,10 @@ public Collection getSlotGroups() { return findSyncHandler(name, 0); } - @SuppressWarnings("unchecked") public @Nullable T findSyncHandlerNullable(String name, int id, Class type) { SyncHandler syncHandler = this.syncHandlers.get(makeSyncKey(name, id)); if (syncHandler != null && type.isAssignableFrom(syncHandler.getClass())) { - return (T) syncHandler; + return type.cast(syncHandler); } return null; } @@ -447,7 +446,6 @@ public Collection getSlotGroups() { return findSyncHandlerNullable(name, 0, type); } - @SuppressWarnings("unchecked") public @NotNull T findSyncHandler(String name, int id, Class type) { SyncHandler syncHandler = this.syncHandlers.get(makeSyncKey(name, id)); if (syncHandler == null) { @@ -457,7 +455,7 @@ public Collection getSlotGroups() { throw new ClassCastException("Expected to find sync handler with key '" + makeSyncKey(name, id) + "' of type '" + type.getName() + "', but found type '" + syncHandler.getClass().getName() + "'."); } - return (T) syncHandler; + return type.cast(syncHandler); } public @NotNull T findSyncHandler(String name, Class type) {