From 27e2addd16fb6fb8a6c6356ed4e78d07a5525551 Mon Sep 17 00:00:00 2001 From: Mira <56395159+TheXorog@users.noreply.github.com> Date: Fri, 24 Jan 2025 20:45:19 +0100 Subject: [PATCH 1/4] chore: Update dependencies --- gradle.properties | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/gradle.properties b/gradle.properties index 5dc5624..1aea661 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,12 +4,12 @@ org.gradle.parallel=true # Fabric Properties # check these on https://fabricmc.net/develop -minecraft_version=1.21.3 -yarn_mappings=1.21.3+build.2 -loader_version=0.16.9 +minecraft_version=1.21.4 +yarn_mappings=1.21.4+build.8 +loader_version=0.16.10 # Fabric API -fabric_version=0.110.0+1.21.3 +fabric_version=0.115.0+1.21.4 # Mod Properties mod_version=1.2.5 @@ -17,4 +17,4 @@ maven_group=xyz.imcodist.quickmenu archives_base_name=quick-menu # owo-lib -owo_version=0.12.18+1.21.2 \ No newline at end of file +owo_version=0.12.20+1.21.4 \ No newline at end of file From 680e7d6ca14e833ce2c2e47c86c018fc930fbcd1 Mon Sep 17 00:00:00 2001 From: Mira <56395159+TheXorog@users.noreply.github.com> Date: Fri, 24 Jan 2025 20:45:56 +0100 Subject: [PATCH 2/4] refactor: Adjust to use new CustomModelDataComponent --- .../quickmenu/data/ActionButtonData.java | 8 ++++-- .../quickmenu/data/ActionButtonDataJSON.java | 25 ++++++++++++++++++- .../imcodist/quickmenu/ui/ActionEditorUI.java | 16 +++++++----- .../quickmenu/ui/popups/ItemPickerUI.java | 4 +-- 4 files changed, 42 insertions(+), 11 deletions(-) diff --git a/src/main/java/xyz/imcodist/quickmenu/data/ActionButtonData.java b/src/main/java/xyz/imcodist/quickmenu/data/ActionButtonData.java index a703540..e0f54e2 100644 --- a/src/main/java/xyz/imcodist/quickmenu/data/ActionButtonData.java +++ b/src/main/java/xyz/imcodist/quickmenu/data/ActionButtonData.java @@ -15,6 +15,7 @@ import xyz.imcodist.quickmenu.other.ModConfigModel; import java.util.ArrayList; +import java.util.List; public class ActionButtonData { public String name; @@ -45,7 +46,7 @@ public ActionButtonDataJSON toJSON() { jsonData.icon = icon.getRegistryEntry().getKey().get().getValue().toString(); } - jsonData.customModelData = icon.getOrDefault(DataComponentTypes.CUSTOM_MODEL_DATA, CustomModelDataComponent.DEFAULT).value(); + jsonData.modelData = new ActionButtonDataJSON.ModelData(icon.getOrDefault(DataComponentTypes.CUSTOM_MODEL_DATA, CustomModelDataComponent.DEFAULT)); } return jsonData; @@ -66,7 +67,10 @@ public static ActionButtonData fromJSON(ActionButtonDataJSON json) { if (json.icon != null) { data.icon = new ItemStack(Registries.ITEM.get(Identifier.of(json.icon))); - data.icon.set(DataComponentTypes.CUSTOM_MODEL_DATA, new CustomModelDataComponent(json.customModelData)); + + if (json.modelData != null) { + data.icon.set(DataComponentTypes.CUSTOM_MODEL_DATA, json.modelData.toComponent()); + } } return data; diff --git a/src/main/java/xyz/imcodist/quickmenu/data/ActionButtonDataJSON.java b/src/main/java/xyz/imcodist/quickmenu/data/ActionButtonDataJSON.java index 757d448..e2565f9 100644 --- a/src/main/java/xyz/imcodist/quickmenu/data/ActionButtonDataJSON.java +++ b/src/main/java/xyz/imcodist/quickmenu/data/ActionButtonDataJSON.java @@ -1,11 +1,34 @@ package xyz.imcodist.quickmenu.data; +import net.minecraft.component.type.CustomModelDataComponent; + import java.util.ArrayList; +import java.util.List; public class ActionButtonDataJSON { public String name; public ArrayList> actions; public String icon; - public int customModelData; + public ModelData modelData; public ArrayList keybind = new ArrayList<>(); + + public static class ModelData { + public ModelData(CustomModelDataComponent originalComponent) { + this.floats = originalComponent.floats(); + this.flags = originalComponent.flags(); + this.strings = originalComponent.strings(); + this.colors = originalComponent.colors(); + } + + public ModelData() {} + + public CustomModelDataComponent toComponent() { + return new CustomModelDataComponent(this.floats, this.flags, this.strings, this.colors); + } + + public List floats; + public List flags; + public List strings; + public List colors; + } } diff --git a/src/main/java/xyz/imcodist/quickmenu/ui/ActionEditorUI.java b/src/main/java/xyz/imcodist/quickmenu/ui/ActionEditorUI.java index 2393c74..f623952 100644 --- a/src/main/java/xyz/imcodist/quickmenu/ui/ActionEditorUI.java +++ b/src/main/java/xyz/imcodist/quickmenu/ui/ActionEditorUI.java @@ -31,7 +31,9 @@ import xyz.imcodist.quickmenu.ui.popups.KeybindPickerUI; import xyz.imcodist.quickmenu.ui.surfaces.SwitcherSurface; +import java.lang.reflect.Array; import java.util.ArrayList; +import java.util.List; import java.util.concurrent.atomic.AtomicInteger; public class ActionEditorUI extends BaseOwoScreen { @@ -159,8 +161,8 @@ protected void build(FlowLayout rootComponent) { FlowLayout customModelDataProperty = createNewProperty("custommodeldata", false); advancedLayout.child(customModelDataProperty); - Integer customModelData = getCustomModelData(iconButton.itemIcon); - String cmdText = customModelData != 0 ? customModelData.toString() : ""; + CustomModelDataComponent customModelData = getCustomModelData(iconButton.itemIcon); + String cmdText = customModelData != null ? customModelData.toString() : ""; customModelDataTextBox = Components.textBox(Sizing.fixed(75), cmdText); customModelDataTextBox.cursorStyle(CursorStyle.TEXT); @@ -214,9 +216,9 @@ protected void build(FlowLayout rootComponent) { buttonsLayout.child(cancelButton); } - private Integer getCustomModelData(ItemStack item) { - if (item == null) return CustomModelDataComponent.DEFAULT.value(); - return item.getOrDefault(DataComponentTypes.CUSTOM_MODEL_DATA, CustomModelDataComponent.DEFAULT).value(); + private CustomModelDataComponent getCustomModelData(ItemStack item) { + if (item == null) return CustomModelDataComponent.DEFAULT; + return item.getOrDefault(DataComponentTypes.CUSTOM_MODEL_DATA, CustomModelDataComponent.DEFAULT); } private void updateCustomModelData(ItemStack itemStack) { @@ -227,7 +229,9 @@ private void updateCustomModelData(ItemStack itemStack) { try { if (!text.equals("")) { - itemStack.set(DataComponentTypes.CUSTOM_MODEL_DATA, new CustomModelDataComponent(Integer.parseInt(text))); + ArrayList modelList = new ArrayList<>(); + modelList.add(Integer.parseInt(text)); + itemStack.set(DataComponentTypes.CUSTOM_MODEL_DATA, new CustomModelDataComponent(List.of(), List.of(), List.of(), modelList)); } else { itemStack.remove(DataComponentTypes.CUSTOM_MODEL_DATA); } diff --git a/src/main/java/xyz/imcodist/quickmenu/ui/popups/ItemPickerUI.java b/src/main/java/xyz/imcodist/quickmenu/ui/popups/ItemPickerUI.java index ce788af..224a2a0 100644 --- a/src/main/java/xyz/imcodist/quickmenu/ui/popups/ItemPickerUI.java +++ b/src/main/java/xyz/imcodist/quickmenu/ui/popups/ItemPickerUI.java @@ -24,7 +24,7 @@ public class ItemPickerUI extends OverlayContainer { public ItemStack selectedItem; - public Integer customModelData; + public CustomModelDataComponent customModelData; public Consumer onSelectedItem; @@ -104,7 +104,7 @@ public void createItemButtons(FlowLayout parent, String search) { ItemStack item = items.get(curItem).getDefaultStack(); if (customModelData != null) { - item.set(DataComponentTypes.CUSTOM_MODEL_DATA, new CustomModelDataComponent(customModelData)); + item.set(DataComponentTypes.CUSTOM_MODEL_DATA, customModelData); } ButtonComponent button = new QuickMenuButton(item, (buttonComponent) -> { From 52db3f102b5e492e9ac2261ec65b9fd9c38555c1 Mon Sep 17 00:00:00 2001 From: Mira <56395159+TheXorog@users.noreply.github.com> Date: Fri, 24 Jan 2025 20:46:09 +0100 Subject: [PATCH 3/4] chore: Bump version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 1aea661..0021b5e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -12,7 +12,7 @@ loader_version=0.16.10 fabric_version=0.115.0+1.21.4 # Mod Properties -mod_version=1.2.5 +mod_version=1.2.6 maven_group=xyz.imcodist.quickmenu archives_base_name=quick-menu From 232e32b4c1a2e2a5b875e7f1b45e8260500c25c2 Mon Sep 17 00:00:00 2001 From: Mira <56395159+TheXorog@users.noreply.github.com> Date: Fri, 24 Jan 2025 21:07:30 +0100 Subject: [PATCH 4/4] fix: Fix custom model data input No idea if this implementation would work with actual data, i dont know anything about how the new CustomModelData functions. --- .../imcodist/quickmenu/ui/ActionEditorUI.java | 40 ++++++++++++------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/src/main/java/xyz/imcodist/quickmenu/ui/ActionEditorUI.java b/src/main/java/xyz/imcodist/quickmenu/ui/ActionEditorUI.java index f623952..6e9cd49 100644 --- a/src/main/java/xyz/imcodist/quickmenu/ui/ActionEditorUI.java +++ b/src/main/java/xyz/imcodist/quickmenu/ui/ActionEditorUI.java @@ -1,10 +1,9 @@ package xyz.imcodist.quickmenu.ui; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; import io.wispforest.owo.ui.base.BaseOwoScreen; -import io.wispforest.owo.ui.component.ButtonComponent; -import io.wispforest.owo.ui.component.Components; -import io.wispforest.owo.ui.component.LabelComponent; -import io.wispforest.owo.ui.component.TextBoxComponent; +import io.wispforest.owo.ui.component.*; import io.wispforest.owo.ui.container.Containers; import io.wispforest.owo.ui.container.FlowLayout; import io.wispforest.owo.ui.container.OverlayContainer; @@ -21,6 +20,7 @@ import org.jetbrains.annotations.NotNull; import org.lwjgl.glfw.GLFW; import xyz.imcodist.quickmenu.data.ActionButtonData; +import xyz.imcodist.quickmenu.data.ActionButtonDataJSON; import xyz.imcodist.quickmenu.data.command_actions.BaseActionData; import xyz.imcodist.quickmenu.data.command_actions.CommandActionData; import xyz.imcodist.quickmenu.data.command_actions.KeybindActionData; @@ -31,7 +31,9 @@ import xyz.imcodist.quickmenu.ui.popups.KeybindPickerUI; import xyz.imcodist.quickmenu.ui.surfaces.SwitcherSurface; +import java.io.StringReader; import java.lang.reflect.Array; +import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; @@ -46,7 +48,7 @@ public class ActionEditorUI extends BaseOwoScreen { private OverlayContainer pickerUI; - private TextBoxComponent customModelDataTextBox; + private TextAreaComponent customModelDataTextBox; private ButtonComponent keybindButton; private boolean settingKeybind = false; private boolean boundKeybind = false; @@ -161,14 +163,15 @@ protected void build(FlowLayout rootComponent) { FlowLayout customModelDataProperty = createNewProperty("custommodeldata", false); advancedLayout.child(customModelDataProperty); - CustomModelDataComponent customModelData = getCustomModelData(iconButton.itemIcon); - String cmdText = customModelData != null ? customModelData.toString() : ""; + ActionButtonDataJSON.ModelData customModelData = new ActionButtonDataJSON.ModelData(getCustomModelData(iconButton.itemIcon)); - customModelDataTextBox = Components.textBox(Sizing.fixed(75), cmdText); + Gson gson = new Gson(); + String cmdText = gson.toJson(customModelData); + + customModelDataTextBox = Components.textArea(Sizing.fixed(75), Sizing.fixed(50), cmdText); customModelDataTextBox.cursorStyle(CursorStyle.TEXT); customModelDataTextBox.onChanged().subscribe((text) -> { - customModelDataTextBox.setText(text.replaceAll("^0+|\\D", "")); updateCustomModelData(iconButton.itemIcon); }); @@ -223,15 +226,24 @@ private CustomModelDataComponent getCustomModelData(ItemStack item) { private void updateCustomModelData(ItemStack itemStack) { // updates the items custom model data to that of the users input. - String text = customModelDataTextBox.getText(); + Gson gson = new Gson(); + Type modelDataType = new TypeToken(){}.getType(); + + String jsonText = customModelDataTextBox.getText(); + + ActionButtonDataJSON.ModelData newModelData = null; + + try (StringReader reader = new StringReader(jsonText)) { + newModelData = gson.fromJson(reader, modelDataType); + } catch (Exception e) { + e.printStackTrace(); + } if (itemStack == null) return; try { - if (!text.equals("")) { - ArrayList modelList = new ArrayList<>(); - modelList.add(Integer.parseInt(text)); - itemStack.set(DataComponentTypes.CUSTOM_MODEL_DATA, new CustomModelDataComponent(List.of(), List.of(), List.of(), modelList)); + if (newModelData != null) { + itemStack.set(DataComponentTypes.CUSTOM_MODEL_DATA, newModelData.toComponent()); } else { itemStack.remove(DataComponentTypes.CUSTOM_MODEL_DATA); }