aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/io/github/cottonmc/cotton/gui/GuiDescription.java28
-rw-r--r--src/main/java/io/github/cottonmc/cotton/gui/client/ClientCottonScreen.java83
-rw-r--r--src/main/java/io/github/cottonmc/cotton/gui/client/LibGuiClient.java2
-rw-r--r--src/main/java/io/github/cottonmc/cotton/gui/client/LightweightGuiDescription.java67
-rw-r--r--src/main/java/io/github/cottonmc/cotton/gui/client/modmenu/ConfigGui.java19
-rw-r--r--src/main/java/io/github/cottonmc/cotton/gui/client/modmenu/ModMenuSupport.java21
-rw-r--r--src/main/resources/fabric.mod.json5
7 files changed, 221 insertions, 4 deletions
diff --git a/src/main/java/io/github/cottonmc/cotton/gui/GuiDescription.java b/src/main/java/io/github/cottonmc/cotton/gui/GuiDescription.java
new file mode 100644
index 0000000..642e329
--- /dev/null
+++ b/src/main/java/io/github/cottonmc/cotton/gui/GuiDescription.java
@@ -0,0 +1,28 @@
+package io.github.cottonmc.cotton.gui;
+
+import javax.annotation.Nullable;
+
+import io.github.cottonmc.cotton.gui.widget.WPanel;
+import net.fabricmc.api.EnvType;
+import net.fabricmc.api.Environment;
+import net.minecraft.container.PropertyDelegate;
+
+public interface GuiDescription {
+ public WPanel getRootPanel();
+ public int getTitleColor();
+
+ public GuiDescription setRootPanel(WPanel panel);
+ public GuiDescription setTitleColor(int color);
+ public GuiDescription setPropertyDelegate(PropertyDelegate delegate);
+ public void addSlotPeer(ValidatedSlot slot);
+
+ @Environment(EnvType.CLIENT)
+ public void addPainters();
+
+
+
+
+ @Nullable
+ public PropertyDelegate getPropertyDelegate();
+
+}
diff --git a/src/main/java/io/github/cottonmc/cotton/gui/client/ClientCottonScreen.java b/src/main/java/io/github/cottonmc/cotton/gui/client/ClientCottonScreen.java
new file mode 100644
index 0000000..b47f8db
--- /dev/null
+++ b/src/main/java/io/github/cottonmc/cotton/gui/client/ClientCottonScreen.java
@@ -0,0 +1,83 @@
+package io.github.cottonmc.cotton.gui.client;
+
+import io.github.cottonmc.cotton.gui.GuiDescription;
+import io.github.cottonmc.cotton.gui.widget.WPanel;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.gui.screen.Screen;
+import net.minecraft.text.LiteralText;
+import net.minecraft.text.Text;
+
+public class ClientCottonScreen extends Screen {
+ protected GuiDescription description;
+ protected int left = 0;
+ protected int top = 0;
+ protected int containerWidth = 0;
+ protected int containerHeight = 0;
+
+ public ClientCottonScreen(GuiDescription description) {
+ super(new LiteralText(""));
+ this.description = description;
+ }
+
+ public ClientCottonScreen(Text title, GuiDescription description) {
+ super(title);
+ this.description = description;
+ }
+
+ public GuiDescription getDescription() {
+ return description;
+ }
+
+
+ @Override
+ public void init(MinecraftClient client, int screenWidth, int screenHeight) {
+
+ super.init(client, screenWidth, screenHeight);
+
+
+ reposition(screenWidth, screenHeight);
+ }
+
+ @Override
+ public void resize(MinecraftClient client, int screenWidth, int screenHeight) {
+ reposition(screenWidth, screenHeight);
+ }
+
+ public void reposition(int screenWidth, int screenHeight) {
+ if (description!=null) {
+ WPanel root = description.getRootPanel();
+ if (root!=null) {
+ this.containerWidth = root.getWidth();
+ this.containerHeight = root.getHeight();
+
+ this.left = (screenWidth - root.getWidth()) / 2;
+ this.top = (screenHeight - root.getHeight()) / 2;
+ }
+ }
+ }
+
+ @Override
+ public void render(int int_1, int int_2, float float_1) {
+ renderBackground();
+
+ super.render(int_1, int_2, float_1);
+ }
+
+ @Override
+ public void renderBackground() {
+ super.renderBackground();
+
+ if (description!=null) {
+ WPanel root = description.getRootPanel();
+ if (root!=null) {
+ root.paintBackground(left, top);
+ }
+ }
+ }
+
+
+ @Override
+ public void tick() {
+ super.tick();
+ }
+}
diff --git a/src/main/java/io/github/cottonmc/cotton/gui/client/LibGuiClient.java b/src/main/java/io/github/cottonmc/cotton/gui/client/LibGuiClient.java
index ea24bf4..8666832 100644
--- a/src/main/java/io/github/cottonmc/cotton/gui/client/LibGuiClient.java
+++ b/src/main/java/io/github/cottonmc/cotton/gui/client/LibGuiClient.java
@@ -14,7 +14,7 @@ import java.io.FileOutputStream;
public class LibGuiClient implements ClientModInitializer {
public static final Logger logger = LogManager.getLogger();
-
+ public static final String MODID = "libgui";
public static LibGuiConfig config;
public static final Jankson jankson = JanksonFactory.createJankson();
diff --git a/src/main/java/io/github/cottonmc/cotton/gui/client/LightweightGuiDescription.java b/src/main/java/io/github/cottonmc/cotton/gui/client/LightweightGuiDescription.java
new file mode 100644
index 0000000..c253cf1
--- /dev/null
+++ b/src/main/java/io/github/cottonmc/cotton/gui/client/LightweightGuiDescription.java
@@ -0,0 +1,67 @@
+package io.github.cottonmc.cotton.gui.client;
+
+import javax.annotation.Nullable;
+
+import io.github.cottonmc.cotton.gui.GuiDescription;
+import io.github.cottonmc.cotton.gui.ValidatedSlot;
+import io.github.cottonmc.cotton.gui.widget.WGridPanel;
+import io.github.cottonmc.cotton.gui.widget.WLabel;
+import io.github.cottonmc.cotton.gui.widget.WPanel;
+import net.minecraft.container.PropertyDelegate;
+
+/**
+ * A GuiDescription without any associated Minecraft classes
+ */
+public class LightweightGuiDescription implements GuiDescription {
+ protected WPanel rootPanel = new WGridPanel();
+ protected int titleColor = WLabel.DEFAULT_TEXT_COLOR;
+ protected int darkmodeTitleColor = WLabel.DEFAULT_DARKMODE_TEXT_COLOR;
+ protected PropertyDelegate propertyDelegate;
+
+ @Override
+ public WPanel getRootPanel() {
+ return rootPanel;
+ }
+
+ @Override
+ public int getTitleColor() {
+ return titleColor;
+ }
+
+ @Override
+ public GuiDescription setRootPanel(WPanel panel) {
+ this.rootPanel = panel;
+ return this;
+ }
+
+ @Override
+ public GuiDescription setTitleColor(int color) {
+ this.titleColor = color;
+ return this;
+ }
+
+ @Override
+ public void addPainters() {
+ if (this.rootPanel!=null) {
+ this.rootPanel.setBackgroundPainter(BackgroundPainter.VANILLA);
+ }
+ }
+
+ @Override
+ public void addSlotPeer(ValidatedSlot slot) {
+ //NO-OP
+ }
+
+ @Override
+ @Nullable
+ public PropertyDelegate getPropertyDelegate() {
+ return propertyDelegate;
+ }
+
+ @Override
+ public GuiDescription setPropertyDelegate(PropertyDelegate delegate) {
+ this.propertyDelegate = delegate;
+ return this;
+ }
+
+}
diff --git a/src/main/java/io/github/cottonmc/cotton/gui/client/modmenu/ConfigGui.java b/src/main/java/io/github/cottonmc/cotton/gui/client/modmenu/ConfigGui.java
new file mode 100644
index 0000000..cb130eb
--- /dev/null
+++ b/src/main/java/io/github/cottonmc/cotton/gui/client/modmenu/ConfigGui.java
@@ -0,0 +1,19 @@
+package io.github.cottonmc.cotton.gui.client.modmenu;
+
+import io.github.cottonmc.cotton.gui.client.BackgroundPainter;
+import io.github.cottonmc.cotton.gui.client.LightweightGuiDescription;
+import io.github.cottonmc.cotton.gui.widget.WGridPanel;
+import io.github.cottonmc.cotton.gui.widget.WSprite;
+import net.minecraft.util.Identifier;
+
+public class ConfigGui extends LightweightGuiDescription {
+
+ public ConfigGui() {
+ WGridPanel root = new WGridPanel();
+ setRootPanel(root);
+
+ root.add(new WSprite(new Identifier("libgui:icon.png")), 0, 0, 2, 2);
+ root.setBackgroundPainter(BackgroundPainter.VANILLA);
+ root.setSize(64, 64);
+ }
+}
diff --git a/src/main/java/io/github/cottonmc/cotton/gui/client/modmenu/ModMenuSupport.java b/src/main/java/io/github/cottonmc/cotton/gui/client/modmenu/ModMenuSupport.java
new file mode 100644
index 0000000..e7d4590
--- /dev/null
+++ b/src/main/java/io/github/cottonmc/cotton/gui/client/modmenu/ModMenuSupport.java
@@ -0,0 +1,21 @@
+package io.github.cottonmc.cotton.gui.client.modmenu;
+
+import java.util.function.Function;
+
+import io.github.cottonmc.cotton.gui.client.ClientCottonScreen;
+import io.github.cottonmc.cotton.gui.client.LibGuiClient;
+import io.github.prospector.modmenu.api.ModMenuApi;
+import net.minecraft.client.gui.screen.Screen;
+
+public class ModMenuSupport implements ModMenuApi {
+
+ @Override
+ public String getModId() {
+ return LibGuiClient.MODID;
+ }
+
+ @Override
+ public Function<Screen, ? extends Screen> getConfigScreenFactory() {
+ return screen -> new ClientCottonScreen(new ConfigGui());
+ }
+}
diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json
index 05faf69..1fccb86 100644
--- a/src/main/resources/fabric.mod.json
+++ b/src/main/resources/fabric.mod.json
@@ -17,9 +17,8 @@
"environment": "*",
"entrypoints": {
- "client": [
- "io.github.cottonmc.cotton.gui.client.LibGuiClient"
- ]
+ "client": [ "io.github.cottonmc.cotton.gui.client.LibGuiClient" ],
+ "modmenu": [ "io.github.cottonmc.cotton.gui.client.modmenu.ModMenuSupport" ]
},
"depends": {
"fabricloader": ">=0.4.0",