From 86a5a3a88c2530ca1354c3a978e60c4b0670a3b4 Mon Sep 17 00:00:00 2001 From: Jakub <53441451+kuba6000@users.noreply.github.com> Date: Sun, 12 Mar 2023 11:16:05 +0100 Subject: Mega Apiary GUI improvements (#58) * Mega apiary GUI improvements * forgot * buildscript * Fixed on ModularUI * Test scrollable fix * Simplify * Inspection * Fixed in ModularUI --- .../kubatech/api/helpers/ReflectionHelper.java | 10 ++--- .../implementations/KubaTechGTMultiBlockBase.java | 47 +++++++++++++++++++++- 2 files changed, 51 insertions(+), 6 deletions(-) (limited to 'src/main/java/kubatech/api') diff --git a/src/main/java/kubatech/api/helpers/ReflectionHelper.java b/src/main/java/kubatech/api/helpers/ReflectionHelper.java index 404d1de5f9..19b8ecd026 100644 --- a/src/main/java/kubatech/api/helpers/ReflectionHelper.java +++ b/src/main/java/kubatech/api/helpers/ReflectionHelper.java @@ -18,8 +18,8 @@ public class ReflectionHelper { private static class _FieldsMethods { - HashMap fields = new HashMap<>(); - HashMap methods = new HashMap<>(); + final HashMap fields = new HashMap<>(); + final HashMap methods = new HashMap<>(); } private static final HashMap classes = new HashMap<>(); @@ -35,7 +35,7 @@ public class ReflectionHelper { if (f == null) return defaultvalue; return (T) f.get(obj); } - boolean exceptionDetected = false; + boolean exceptionDetected; Field f = null; do { exceptionDetected = false; @@ -66,7 +66,7 @@ public class ReflectionHelper { f.set(obj, value); return true; } - boolean exceptionDetected = false; + boolean exceptionDetected; Field f = null; do { exceptionDetected = false; @@ -110,7 +110,7 @@ public class ReflectionHelper { if (m == null) return defaultValue; return (T) m.invoke(obj, args); } - boolean exceptionDetected = false; + boolean exceptionDetected; Method m = null; do { exceptionDetected = false; diff --git a/src/main/java/kubatech/api/implementations/KubaTechGTMultiBlockBase.java b/src/main/java/kubatech/api/implementations/KubaTechGTMultiBlockBase.java index 0b31c27011..732dbba88a 100644 --- a/src/main/java/kubatech/api/implementations/KubaTechGTMultiBlockBase.java +++ b/src/main/java/kubatech/api/implementations/KubaTechGTMultiBlockBase.java @@ -8,17 +8,62 @@ import java.util.Arrays; import java.util.function.Function; import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; import net.minecraftforge.fluids.FluidStack; import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.screen.ITileWithModularUI; +import com.gtnewhorizons.modularui.api.screen.ModularUIContext; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; import com.gtnewhorizons.modularui.api.widget.Widget; +import com.gtnewhorizons.modularui.common.builder.UIBuilder; +import com.gtnewhorizons.modularui.common.builder.UIInfo; +import com.gtnewhorizons.modularui.common.internal.wrapper.ModularGui; +import com.gtnewhorizons.modularui.common.internal.wrapper.ModularUIContainer; import gregtech.api.gui.modularui.GT_UITextures; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.metatileentity.BaseMetaTileEntity; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase; public abstract class KubaTechGTMultiBlockBase> extends GT_MetaTileEntity_ExtendedPowerMultiBlockBase { + @SuppressWarnings("unchecked") + protected static > UIInfo createKTMetaTileEntityUI( + KTContainerConstructor containerConstructor) { + return UIBuilder.of().container((player, world, x, y, z) -> { + TileEntity te = world.getTileEntity(x, y, z); + if (te instanceof BaseMetaTileEntity) { + IMetaTileEntity mte = ((BaseMetaTileEntity) te).getMetaTileEntity(); + if (!(mte instanceof KubaTechGTMultiBlockBase)) return null; + final UIBuildContext buildContext = new UIBuildContext(player); + final ModularWindow window = ((ITileWithModularUI) te).createWindow(buildContext); + return containerConstructor.of(new ModularUIContext(buildContext, te::markDirty), window, (K) mte); + } + return null; + }).gui(((player, world, x, y, z) -> { + if (!world.isRemote) return null; + TileEntity te = world.getTileEntity(x, y, z); + if (te instanceof BaseMetaTileEntity) { + IMetaTileEntity mte = ((BaseMetaTileEntity) te).getMetaTileEntity(); + if (!(mte instanceof KubaTechGTMultiBlockBase)) return null; + final UIBuildContext buildContext = new UIBuildContext(player); + final ModularWindow window = ((ITileWithModularUI) te).createWindow(buildContext); + return new ModularGui( + containerConstructor.of(new ModularUIContext(buildContext, null), window, (K) mte)); + } + return null; + })).build(); + } + + @FunctionalInterface + protected interface KTContainerConstructor> { + + ModularUIContainer of(ModularUIContext context, ModularWindow mainWindow, T multiBlock); + } + protected KubaTechGTMultiBlockBase(int aID, String aName, String aNameRegional) { super(aID, aName, aNameRegional); } @@ -30,7 +75,7 @@ public abstract class KubaTechGTMultiBlockBase