aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/gui
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/api/gui')
-rw-r--r--src/main/java/gregtech/api/gui/GUIHost.java56
-rw-r--r--src/main/java/gregtech/api/gui/GUIProvider.java38
2 files changed, 94 insertions, 0 deletions
diff --git a/src/main/java/gregtech/api/gui/GUIHost.java b/src/main/java/gregtech/api/gui/GUIHost.java
new file mode 100644
index 0000000000..bbb94317c4
--- /dev/null
+++ b/src/main/java/gregtech/api/gui/GUIHost.java
@@ -0,0 +1,56 @@
+package gregtech.api.gui;
+
+import java.util.Objects;
+
+import javax.annotation.Nonnull;
+
+import net.minecraft.item.ItemStack;
+
+import com.gtnewhorizons.modularui.api.screen.ITileWithModularUI;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.api.screen.UIBuildContext;
+
+public interface GUIHost extends ITileWithModularUI {
+
+ @Nonnull
+ @Override
+ default ModularWindow createWindow(UIBuildContext uiContext) {
+ Objects.requireNonNull(uiContext);
+ GUIProvider<?> gui = getGUI(uiContext);
+ return gui.openGUI(uiContext);
+ }
+
+ /**
+ * Width of the GUI when its being displayed
+ */
+ default int getWidth() {
+ return 170;
+ }
+
+ default int getHeight() {
+ return 192;
+ }
+
+ @Nonnull
+ GUIProvider<?> getGUI(@Nonnull UIBuildContext uiContext);
+
+ ItemStack getAsItem();
+
+ String getMachineName();
+
+ default boolean hasItemInput() {
+ return true;
+ }
+
+ default boolean hasItemOutput() {
+ return true;
+ }
+
+ default boolean hasFluidInput() {
+ return true;
+ }
+
+ default boolean hasFluidOutput() {
+ return true;
+ }
+}
diff --git a/src/main/java/gregtech/api/gui/GUIProvider.java b/src/main/java/gregtech/api/gui/GUIProvider.java
new file mode 100644
index 0000000000..6fec4aa52a
--- /dev/null
+++ b/src/main/java/gregtech/api/gui/GUIProvider.java
@@ -0,0 +1,38 @@
+package gregtech.api.gui;
+
+import java.util.Objects;
+
+import javax.annotation.Nonnull;
+
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow.Builder;
+import com.gtnewhorizons.modularui.api.screen.UIBuildContext;
+
+public abstract class GUIProvider<T extends GUIHost> {
+
+ @Nonnull
+ protected final T host;
+
+ public GUIProvider(@Nonnull T host) {
+ this.host = host;
+ }
+
+ @Nonnull
+ public ModularWindow openGUI(@Nonnull UIBuildContext uiContext) {
+ Builder builder = Objects.requireNonNull(ModularWindow.builder(host.getWidth(), host.getHeight()));
+ if (shouldBindPlayerInventory()) {
+ builder.bindPlayerInventory(uiContext.getPlayer());
+ }
+ attachSynchHandlers(builder, uiContext);
+ addWidgets(builder, uiContext);
+ return Objects.requireNonNull(builder.build());
+ }
+
+ protected abstract void attachSynchHandlers(@Nonnull Builder builder, @Nonnull UIBuildContext uiContext);
+
+ protected abstract void addWidgets(@Nonnull Builder builder, @Nonnull UIBuildContext uiContext);
+
+ protected boolean shouldBindPlayerInventory() {
+ return true;
+ }
+}