From 8c6fb516e73a3d0f07fa4fa373cf79e4d158384a Mon Sep 17 00:00:00 2001 From: ReignOfFROZE Date: Sun, 2 Mar 2025 17:58:32 -0500 Subject: [PATCH] Update to MUI2 --- dependencies.gradle | 3 +- .../client/core/handler/KeyHandler.java | 5 +- .../client/gui/loki/GuiLokiSchematics.java | 359 +++++++++++------- .../common/item/relic/ItemLokiRing.java | 30 +- .../botania/common/network/GuiHandler.java | 1 - .../assets/botania/textures/gui/check.png | Bin 0 -> 339 bytes .../assets/botania/textures/gui/delete.png | Bin 0 -> 350 bytes .../assets/botania/textures/gui/rename.png | Bin 0 -> 19817 bytes 8 files changed, 242 insertions(+), 156 deletions(-) create mode 100644 src/main/resources/assets/botania/textures/gui/check.png create mode 100644 src/main/resources/assets/botania/textures/gui/delete.png create mode 100644 src/main/resources/assets/botania/textures/gui/rename.png diff --git a/dependencies.gradle b/dependencies.gradle index 3a7aaf2f8..452c6095d 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -11,10 +11,11 @@ dependencies { compileOnly('com.github.GTNewHorizons:NotEnoughItems:2.7.18-GTNH:dev') compileOnly('com.github.GTNewHorizons:BuildCraft:7.1.42:api') {transitive=false} api('com.github.GTNewHorizons:GTNHLib:0.6.1:dev') - compileOnly("com.github.GTNewHorizons:ModularUI:1.2.18:dev") + compileOnly('com.github.GTNewHorizons:ModularUI2:2.2.4-1.7.10:dev') compileOnly('curse.maven:cofh-lib-220333:2388748') compileOnly('curse.maven:minefactory-reloaded-66672:2366150') devOnlyNonPublishable('com.github.GTNewHorizons:NotEnoughItems:2.7.18-GTNH:dev') +// runtimeOnlyNonPublishable('com.github.GTNewHorizons:ModularUI2:2.2.4-1.7.10:dev') } diff --git a/src/main/java/vazkii/botania/client/core/handler/KeyHandler.java b/src/main/java/vazkii/botania/client/core/handler/KeyHandler.java index 8ea001503..66ca9c753 100644 --- a/src/main/java/vazkii/botania/client/core/handler/KeyHandler.java +++ b/src/main/java/vazkii/botania/client/core/handler/KeyHandler.java @@ -1,5 +1,8 @@ package vazkii.botania.client.core.handler; +import com.cleanroommc.modularui.factory.ClientGUI; +import com.cleanroommc.modularui.factory.GuiData; +import com.cleanroommc.modularui.factory.GuiFactories; import cpw.mods.fml.client.registry.ClientRegistry; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.eventhandler.SubscribeEvent; @@ -70,7 +73,7 @@ public class KeyHandler { private static void ringOfLokiOpenUI() { if(ItemLokiRing.isModularUIEnabled) { ItemStack ring = ItemLokiRing.getLokiRing(Minecraft.getMinecraft().thePlayer); - GuiLokiSchematics.openUI(Minecraft.getMinecraft().thePlayer, ring); + GuiLokiSchematics.open(ring); } } } diff --git a/src/main/java/vazkii/botania/client/gui/loki/GuiLokiSchematics.java b/src/main/java/vazkii/botania/client/gui/loki/GuiLokiSchematics.java index e5c6e57ad..03fe93151 100644 --- a/src/main/java/vazkii/botania/client/gui/loki/GuiLokiSchematics.java +++ b/src/main/java/vazkii/botania/client/gui/loki/GuiLokiSchematics.java @@ -1,26 +1,30 @@ package vazkii.botania.client.gui.loki; -import com.gtnewhorizons.modularui.api.ModularUITextures; -import com.gtnewhorizons.modularui.api.UIInfos; -import com.gtnewhorizons.modularui.api.drawable.AdaptableUITexture; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.drawable.Text; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.math.Pos2d; -import com.gtnewhorizons.modularui.api.math.Size; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.api.widget.IWidgetParent; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.MultiChildWidget; -import com.gtnewhorizons.modularui.common.widget.Scrollable; -import com.gtnewhorizons.modularui.common.widget.TextWidget; -import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget; +import com.cleanroommc.modularui.api.drawable.IKey; +import com.cleanroommc.modularui.api.value.IStringValue; +import com.cleanroommc.modularui.api.widget.IGuiAction; +import com.cleanroommc.modularui.drawable.AdaptableUITexture; +import com.cleanroommc.modularui.drawable.Rectangle; +import com.cleanroommc.modularui.drawable.UITexture; +import com.cleanroommc.modularui.factory.ClientGUI; +import com.cleanroommc.modularui.screen.CustomModularScreen; +import com.cleanroommc.modularui.screen.ModularPanel; +import com.cleanroommc.modularui.screen.RichTooltip; +import com.cleanroommc.modularui.screen.viewport.ModularGuiContext; +import com.cleanroommc.modularui.utils.Alignment; +import com.cleanroommc.modularui.utils.Color; +import com.cleanroommc.modularui.value.sync.InteractionSyncHandler; +import com.cleanroommc.modularui.value.sync.SyncHandler; +import com.cleanroommc.modularui.widget.ParentWidget; +import com.cleanroommc.modularui.widget.ScrollWidget; +import com.cleanroommc.modularui.widget.scroll.VerticalScrollData; +import com.cleanroommc.modularui.widgets.ButtonWidget; +import com.cleanroommc.modularui.widgets.TextWidget; +import com.cleanroommc.modularui.widgets.layout.Row; +import com.cleanroommc.modularui.widgets.textfield.TextFieldWidget; import cpw.mods.fml.common.Optional; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTBase; -import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.StatCollector; import vazkii.botania.common.item.relic.ItemLokiRing; @@ -28,140 +32,217 @@ import vazkii.botania.common.network.PacketHandler; import vazkii.botania.common.network.PacketLokiChangeSchematic; import vazkii.botania.common.network.PacketLokiDeleteSchematic; -import java.util.ArrayList; -import java.util.concurrent.atomic.AtomicInteger; +import java.util.*; -public class GuiLokiSchematics { +@Optional.Interface(modid = "modularui2", iface="com.cleanroommc.modularui.screen.CustomModularScreen", striprefs = true) +public class GuiLokiSchematics extends CustomModularScreen { + + public static void open(ItemStack ring) { + GuiLokiSchematics.itemStack = ring; + ClientGUI.open(new GuiLokiSchematics(ring)); + } + + public static ItemStack itemStack; + + public GuiLokiSchematics(ItemStack itemStack) { + this.itemStack = itemStack; + } private static Object selectedSchematic; - private static String newSchematicName = ""; + private static Object schematicToBeRenamed; private static final int WINDOW_WIDTH = 350, WINDOW_HEIGHT = 225, SCROLL_AREA_WIDTH = 350, SCROLL_AREA_HEIGHT = 200, SAVED_SCHEMATICS_HEADER_HEIGHT = 25, X_PADDING = 5, Y_PADDING = 5; - @Optional.Method(modid = "modularui") - public static ModularWindow createWindow(Object buildContext, ItemStack heldStack) { - ItemLokiRing loki = (ItemLokiRing) heldStack.getItem(); - loki.window = GuiLokiSchematics.getWindow((UIBuildContext) buildContext, heldStack); - loki.schematicNames = new ArrayList<>(heldStack.getTagCompound().getCompoundTag(ItemLokiRing.TAG_SAVED_SCHEMATICS).tagMap.keySet()); - return (ModularWindow) loki.window; - } + @Override + @Optional.Method(modid = "modularui2") + public ModularPanel buildUI(ModularGuiContext context) { - @Optional.Method(modid = "modularui") - public static void openUI(EntityPlayer player, ItemStack stack) { - if(ItemLokiRing.isLokiRing(stack) && stack.getItem() instanceof ItemLokiRing) { - UIInfos.openClientUI(player, uiBuildContext -> GuiLokiSchematics.createWindow(uiBuildContext, stack)); - } - } - - @Optional.Method(modid = "modularui") - public static ModularWindow getWindow(UIBuildContext buildContext, ItemStack lokiRing) { - final AdaptableUITexture BACKGROUND = AdaptableUITexture - .of("botania:textures/gui/croppedPaper", 330, 252, 12); - final AdaptableUITexture DELETE = AdaptableUITexture - .of("botania:textures/gui/lokiDelete", 500, 500, 0); - final AdaptableUITexture RENAME = AdaptableUITexture - .of("botania:textures/gui/lokiRename", 500, 500, 0); - if(lokiRing.getTagCompound().tagMap.containsKey(ItemLokiRing.TAG_CURRENT_SCHEMATIC)) { - // Substring to remove the leading and ending double quotes - selectedSchematic = lokiRing.stackTagCompound.getString(ItemLokiRing.TAG_CURRENT_SCHEMATIC).substring(1); - selectedSchematic = selectedSchematic.toString().substring(0, selectedSchematic.toString().length() - 1); - } - ItemLokiRing ring = (ItemLokiRing) lokiRing.getItem(); - ModularWindow.Builder builder = ModularWindow.builder(WINDOW_WIDTH, WINDOW_HEIGHT); - buildContext.setShowNEI(false); - builder.setBackground(ModularUITextures.VANILLA_BACKGROUND); - Scrollable scrollArea = - new Scrollable() - .setVerticalScroll(); - if(lokiRing.getTagCompound().tagMap.containsKey(ItemLokiRing.TAG_SAVED_SCHEMATICS) && !lokiRing.getTagCompound().getCompoundTag(ItemLokiRing.TAG_SAVED_SCHEMATICS).tagMap.keySet().isEmpty()) { - final AtomicInteger offset = new AtomicInteger(); - final AtomicInteger disabled = new AtomicInteger(); - for(Object schematicName : lokiRing.getTagCompound().getCompoundTag(ItemLokiRing.TAG_SAVED_SCHEMATICS).tagMap.keySet()) { - scrollArea = scrollArea.widget(new ButtonWidget() - .setOnClick((clickData, widget) -> { - selectedSchematic = schematicName; - PacketHandler.INSTANCE.sendToServer(new PacketLokiChangeSchematic(schematicName.toString())); - }) - .setBackground(() -> new IDrawable[]{new Text(schematicName.toString()).format(selectedSchematic.toString().equals(schematicName.toString()) ? EnumChatFormatting.DARK_GREEN : EnumChatFormatting.BLACK)}) - .setSize(SCROLL_AREA_WIDTH - 60, SCROLL_AREA_HEIGHT / 10) - .setEnabled((widget) -> { - if(lokiRing.getTagCompound().getCompoundTag(ItemLokiRing.TAG_SAVED_SCHEMATICS).hasKey(schematicName.toString())) { - return true; - } - disabled.getAndIncrement(); - return false; - }) - .setPosProvider((Size screenSize, ModularWindow window, IWidgetParent parent) -> new Pos2d(0, ring.schematicNames.indexOf(schematicName) * (SCROLL_AREA_HEIGHT / 10 + 1)))); - scrollArea = scrollArea.widget(new ButtonWidget() - .setOnClick((clickData, widget) -> { - UIInfos.openClientUI(buildContext.getPlayer(), (context) -> GuiLokiSchematics.getRenameWindow(context, lokiRing, schematicName)); - }) - .setBackground(RENAME) - .setPosProvider((Size screenSize, ModularWindow window, IWidgetParent parent) -> new Pos2d(SCROLL_AREA_WIDTH - 55, ring.schematicNames.indexOf(schematicName) * (SCROLL_AREA_HEIGHT / 10 + 1))) - .setEnabled((widget) -> lokiRing.getTagCompound().getCompoundTag(ItemLokiRing.TAG_SAVED_SCHEMATICS).hasKey(schematicName.toString())) - .setSize(20, 20)); - scrollArea = scrollArea.widget(new ButtonWidget() - .setOnClick((clickData, widget) -> { - PacketHandler.INSTANCE.sendToServer(new PacketLokiDeleteSchematic(schematicName.toString())); - buildContext.setValidator(() -> false); - }) - .setBackground(DELETE) - .setPosProvider((Size screenSize, ModularWindow window, IWidgetParent parent) -> new Pos2d(SCROLL_AREA_WIDTH - 30, ring.schematicNames.indexOf(schematicName) * (SCROLL_AREA_HEIGHT / 10 + 1))) - .setEnabled((widget) -> lokiRing.getTagCompound().getCompoundTag(ItemLokiRing.TAG_SAVED_SCHEMATICS).hasKey(schematicName.toString())) - .setSize(20, 20)); - offset.addAndGet((SCROLL_AREA_HEIGHT / 10) + 1); - } - } - scrollArea = scrollArea.widget(new TextWidget("No saved schematics!") - .setEnabled((widget) -> !lokiRing.getTagCompound().hasKey(ItemLokiRing.TAG_SAVED_SCHEMATICS) || lokiRing.getTagCompound().getCompoundTag(ItemLokiRing.TAG_SAVED_SCHEMATICS).tagMap.keySet().isEmpty()) - .setSize(SCROLL_AREA_WIDTH, SCROLL_AREA_HEIGHT) - .setPos(0, 0)); - return builder - .widget( - new MultiChildWidget() - .addChild( - new TextWidget() - .setScale(0.5F) - .setTextSupplier(() -> new Text(selectedSchematic == null ? StatCollector.translateToLocal("botaniamisc.select_schematic") : StatCollector.translateToLocal("botaniamisc.selected_schematic") + " " + selectedSchematic) - .format(selectedSchematic == null ? EnumChatFormatting.RED : EnumChatFormatting.BLACK) - .alignment(Alignment.Center)) - .setSize(SCROLL_AREA_WIDTH, SAVED_SCHEMATICS_HEADER_HEIGHT)) - .addChild( - scrollArea - .setSize(SCROLL_AREA_WIDTH, SCROLL_AREA_HEIGHT - SAVED_SCHEMATICS_HEADER_HEIGHT - Y_PADDING * 2) - .setPos(0, SAVED_SCHEMATICS_HEADER_HEIGHT)) - .setPos(WINDOW_WIDTH - SCROLL_AREA_WIDTH - X_PADDING, 0)) - .setBackground(BACKGROUND) + final UITexture backgroundTexture = AdaptableUITexture + .builder() + .location("botania:textures/gui/croppedPaper") + .imageSize(330, 252) + .adaptable(12) .build(); + final UITexture checkIcon = AdaptableUITexture + .builder() + .location("botania:textures/gui/check") + .imageSize(16, 16) + .build(); + final UITexture deleteIcon = AdaptableUITexture + .builder() + .location("botania:textures/gui/delete") + .imageSize(16, 16) + .build(); + final UITexture renameIcon = AdaptableUITexture + .builder() + .location("botania:textures/gui/rename") + .imageSize(16, 16) + .build(); + + selectedSchematic = itemStack.getTagCompound().getString(ItemLokiRing.TAG_CURRENT_SCHEMATIC); + + ItemLokiRing ring = (ItemLokiRing) itemStack.getItem(); + ring.schematicNames = Arrays.asList(itemStack.getTagCompound().getCompoundTag(ItemLokiRing.TAG_SAVED_SCHEMATICS).tagMap.keySet().stream().sorted(Comparator.comparing(Object::toString)).toArray()); + + Set deleted = new HashSet<>(); + + final ScrollWidget scrollWidget = new ScrollWidget<>(new VerticalScrollData()); + scrollWidget.getScrollArea().getScrollY().setScrollSize(ring.schematicNames.size() * (SCROLL_AREA_HEIGHT / 10 + 1)); + int idx = 0; + for(Object key : itemStack.getTagCompound().getCompoundTag(ItemLokiRing.TAG_SAVED_SCHEMATICS).tagMap.keySet()) { + scrollWidget.child( + new Row() + .sizeRel(1f, 0.1f) + .pos(0, ring.schematicNames.indexOf(key) * (SCROLL_AREA_HEIGHT / 10 + 1)) + .padding(5, 0, 5, 5) + .setEnabledIf((w) -> !deleted.contains(key)) + .background(new Rectangle() + .setColor(idx % 2 == 0 ? Color.ORANGE.brighter(3) : Color.ORANGE.brighter(2))) + .child( + new TextWidget(key.toString()) + .scale(0.5f) + .widthRel(0.72f)) + .child( + new ParentWidget<>() + .tooltip(new RichTooltip(new TextWidget("Activate Schematic"))) + .widthRel(0.083f) + .heightRel(1f) + .setEnabledIf((w) -> !key.equals(selectedSchematic)) + .child( + new ButtonWidget<>() + .onMousePressed(ignored -> { + PacketHandler.INSTANCE.sendToServer(new PacketLokiChangeSchematic(key.toString())); + selectedSchematic = key; + return true; + }) + .background(checkIcon) + .hoverBackground(checkIcon) + .size(8, 8) + .center())) + .child( + new ParentWidget<>() + .widthRel(0.083f) + .heightRel(1f) + .child( + new ButtonWidget<>() + .tooltip(new RichTooltip(new TextWidget("Rename Schematic"))) + .onMousePressed(ignored -> { + this.schematicToBeRenamed = key; + ClientGUI.open(new RenameGui()); + return true; + }) + .background(renameIcon) + .hoverBackground(renameIcon) + .size(8, 8) + .center())) + .child( + new ParentWidget<>() + .widthRel(0.083f) + .heightRel(1f) + .child( + new ButtonWidget<>() + .tooltip(new RichTooltip(new TextWidget("Delete Schematic"))) + .onMousePressed(ignored -> { + PacketHandler.INSTANCE.sendToServer(new PacketLokiDeleteSchematic(key.toString())); + deleted.add(key); + return true; + }) + .background(deleteIcon) + .hoverBackground(deleteIcon) + .size(8, 8) + .center()))); + idx++; + } + + return ModularPanel.defaultPanel("lokiSchematics") + .child( + new TextWidget(IKey.dynamic(() -> selectedSchematic == null ? StatCollector.translateToLocal("botaniamisc.select_schematic") : StatCollector.translateToLocal("botaniamisc.selected_schematic") + " " + selectedSchematic)) + .style(EnumChatFormatting.BLACK) + .align(Alignment.TopCenter) + .marginTop(8) + .scale(0.5F)) + .child( + scrollWidget + .pos(10, 20) + .widthRel(SCROLL_AREA_WIDTH - 20) + .margin(10, 0) + .height(SCROLL_AREA_HEIGHT - 10)) + .background(backgroundTexture) + .size(WINDOW_WIDTH, WINDOW_HEIGHT); } - @Optional.Method(modid = "modularui") - public static ModularWindow getRenameWindow(UIBuildContext buildContext, ItemStack lokiRing, Object schematicName) { - final AdaptableUITexture BACKGROUND = AdaptableUITexture - .of("botania:textures/gui/croppedPaper", 330, 252, 12); - ModularWindow.Builder builder = ModularWindow.builder(200, 100); + public static class RenameGui extends CustomModularScreen { - buildContext.addCloseListener(() -> { - if(lokiRing.getTagCompound().getString(ItemLokiRing.TAG_CURRENT_SCHEMATIC).equals(schematicName)) { - lokiRing.getTagCompound().setString(ItemLokiRing.TAG_CURRENT_SCHEMATIC, newSchematicName); + private String newValue = ""; + + @Override + public void close() { + super.close(); + this.persist(); + } + + @Override + public void close(boolean force) { + super.close(force); + this.persist(); + } + + public void persist() { + if (itemStack.getTagCompound().getString(ItemLokiRing.TAG_CURRENT_SCHEMATIC).equals(schematicToBeRenamed)) { + itemStack.getTagCompound().setString(ItemLokiRing.TAG_CURRENT_SCHEMATIC, newValue); } - NBTBase nbt = lokiRing.getTagCompound().getCompoundTag(ItemLokiRing.TAG_SAVED_SCHEMATICS).getTag(schematicName.toString()); - lokiRing.getTagCompound().getCompoundTag(ItemLokiRing.TAG_SAVED_SCHEMATICS).removeTag(schematicName.toString()); - lokiRing.getTagCompound().getCompoundTag(ItemLokiRing.TAG_SAVED_SCHEMATICS).setTag(newSchematicName, nbt); - }); + NBTBase nbt = itemStack.getTagCompound().getCompoundTag(ItemLokiRing.TAG_SAVED_SCHEMATICS).getTag(schematicToBeRenamed.toString()); + itemStack.getTagCompound().getCompoundTag(ItemLokiRing.TAG_SAVED_SCHEMATICS).removeTag(schematicToBeRenamed.toString()); + itemStack.getTagCompound().getCompoundTag(ItemLokiRing.TAG_SAVED_SCHEMATICS).setTag(newValue, nbt); + } - return builder - .widget(new TextWidget() - .setTextSupplier(() -> new Text("Schematic Name:").format(EnumChatFormatting.BLACK)) - .setPos(10, 10) - .setSize(180, 20)) - .widget(new TextFieldWidget() - .setGetter(() -> newSchematicName) - .setSetter((newValue) -> newSchematicName = newValue) - .setSize(150, 20) - .setPos(25, 40)) - .setBackground(BACKGROUND) - .build(); + @Override + public ModularPanel buildUI(ModularGuiContext context) { + final UITexture BACKGROUND = AdaptableUITexture.builder() + .location("botania:textures/gui/croppedPaper") + .imageSize(330, 252) + .adaptable(12) + .build(); + + InteractionSyncHandler handler = new InteractionSyncHandler(); + + handler.setOnKeyPressed((key) -> { + System.out.println(key.character); + }); + + return ModularPanel.defaultPanel("rename") + .child(new TextWidget("Schematic Name:") + .style(EnumChatFormatting.BLACK) + .pos(10, 10) + .size(180, 20)) + .child(new TextFieldWidget() + .value(new IStringValue() { + @Override + public String getStringValue() { + return newValue; + } + + @Override + public void setStringValue(String val) { + newValue = val; + } + + @Override + public String getValue() { + return newValue; + } + + @Override + public void setValue(String value) { + newValue = value; + } + }) + .disableHoverBackground() + .size(150, 20) + .pos(25, 40)) + .background(BACKGROUND) + .size(200, 100); + } } } diff --git a/src/main/java/vazkii/botania/common/item/relic/ItemLokiRing.java b/src/main/java/vazkii/botania/common/item/relic/ItemLokiRing.java index 9d1090bdd..fb1346f71 100644 --- a/src/main/java/vazkii/botania/common/item/relic/ItemLokiRing.java +++ b/src/main/java/vazkii/botania/common/item/relic/ItemLokiRing.java @@ -16,9 +16,6 @@ import baubles.common.container.InventoryBaubles; import baubles.common.lib.PlayerHandler; import baubles.common.network.PacketSyncBauble; import com.gtnewhorizon.gtnhlib.GTNHLib; -import com.gtnewhorizons.modularui.api.UIInfos; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.Optional; import cpw.mods.fml.common.eventhandler.SubscribeEvent; @@ -52,7 +49,6 @@ import vazkii.botania.api.item.ISequentialBreaker; import vazkii.botania.api.mana.IManaUsingItem; import vazkii.botania.api.mana.ManaItemHandler; import vazkii.botania.client.core.handler.BoundTileRenderer; -import vazkii.botania.client.gui.loki.GuiLokiSchematics; import vazkii.botania.common.core.helper.ItemNBTHelper; import vazkii.botania.common.core.helper.LokiCursor; import vazkii.botania.common.item.ModItems; @@ -63,11 +59,10 @@ import vazkii.botania.common.network.PacketLokiHudNotificationAck; import java.awt.*; import java.util.ArrayList; import java.util.List; -import java.util.UUID; public class ItemLokiRing extends ItemRelicBauble implements IExtendedWireframeCoordinateListProvider, IManaUsingItem, IInWorldRenderable { - public static final boolean isModularUIEnabled = Loader.isModLoaded("modularui"); + public static final boolean isModularUIEnabled = Loader.isModLoaded("modularui2"); public static final String TAG_CURSOR_LIST = "cursorList"; public static final String TAG_CURSOR_PREFIX = "cursor"; @@ -86,7 +81,7 @@ public class ItemLokiRing extends ItemRelicBauble implements IExtendedWireframeC public List schematicNames; - public static enum HUD_MESSAGE { + public enum HUD_MESSAGE { MODE, BREAKING, CLEAR, MIRROR, INSUFFICIENT_MANA, SCHEMATIC_SAVED } @@ -308,7 +303,14 @@ public class ItemLokiRing extends ItemRelicBauble implements IExtendedWireframeC if(stack.getTagCompound().getTag(s) != null) currentState.setTag(s, stack.getTagCompound().getTag(s)); } - String newSchematicName = UUID.randomUUID().toString(); + String newSchematicName = "New Schematic"; + int idx = 1; + if(map.hasKey(newSchematicName)) { + do { + newSchematicName = "New Schematic (" + idx + ")"; + idx++; + } while (map.hasKey(newSchematicName)); + } map.setTag(newSchematicName, currentState); stack.getTagCompound().setTag(TAG_CURRENT_SCHEMATIC, new NBTTagString(newSchematicName)); } @@ -339,7 +341,7 @@ public class ItemLokiRing extends ItemRelicBauble implements IExtendedWireframeC stack.getTagCompound().setTag(TAG_CURRENT_SCHEMATIC, new NBTTagString(schematicName)); } - @Optional.Method(modid = "modularui") + @Optional.Method(modid = "modularui2") public static void deleteSchematic(ItemStack lokiStack, String schematicName) { NBTTagCompound map = lokiStack.getTagCompound().getCompoundTag(TAG_SAVED_SCHEMATICS); if(map != null) { @@ -348,11 +350,11 @@ public class ItemLokiRing extends ItemRelicBauble implements IExtendedWireframeC } } ItemLokiRing lokiRing = ((ItemLokiRing) lokiStack.getItem()); - if(lokiRing != null) { - lokiRing.schematicNames.remove(schematicName); - if(isModularUIEnabled) - ((ModularWindow) lokiRing.window).markNeedsRebuild(); - } +// if(lokiRing != null) { +// lokiRing.schematicNames.remove(schematicName); +// if(isModularUIEnabled) +// ((ModularWindow) lokiRing.window).markNeedsRebuild(); +// } } @SideOnly(Side.CLIENT) diff --git a/src/main/java/vazkii/botania/common/network/GuiHandler.java b/src/main/java/vazkii/botania/common/network/GuiHandler.java index 026fce1e3..d292e8c3a 100644 --- a/src/main/java/vazkii/botania/common/network/GuiHandler.java +++ b/src/main/java/vazkii/botania/common/network/GuiHandler.java @@ -21,7 +21,6 @@ import vazkii.botania.client.gui.box.GuiBaubleBox; import vazkii.botania.client.gui.crafting.ContainerCraftingHalo; import vazkii.botania.client.gui.crafting.GuiCraftingHalo; import vazkii.botania.client.gui.lexicon.GuiLexicon; -import vazkii.botania.client.gui.loki.GuiLokiSchematics; import vazkii.botania.common.lib.LibGuiIDs; import cpw.mods.fml.common.network.IGuiHandler; diff --git a/src/main/resources/assets/botania/textures/gui/check.png b/src/main/resources/assets/botania/textures/gui/check.png new file mode 100644 index 0000000000000000000000000000000000000000..179276db5e9d2e4ea14654b6ea4f11627d61aaef GIT binary patch literal 339 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufiR<}hF1en@P(&~V~BgV{_cF*F0rR!L3qRmrcDWR51r%IF%uI@dd;ho)6%F~pSIo5H=Sh$GBJ4W!rWPlrPt2xe$;U8g4RX;gS#!4ntK?kGXCBmwD%m>4{rAN>(rU~9`>`& zXJ=k!;86Or=F_`5wVTU| i{Qq}|$-q(~fql~6c@tGsOIHE?%;4$j=d#Wzp$PyaK!e`^ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/botania/textures/gui/delete.png b/src/main/resources/assets/botania/textures/gui/delete.png new file mode 100644 index 0000000000000000000000000000000000000000..bbdb4e310bffeb223a77bc2b9f7d7d75e674608f GIT binary patch literal 350 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc!Oxy9jv*HQt(On_9ySm;_Hq7UR!%jCq&A%c zbCrYiJys}BV3lZK-R0EEA~dn;`3+Vp=Ah*cT)7%q>B7wC7zAHZ|_mxA0?Nt!gr1MTcGzDJYD@<);T3K0RZs+igf@0 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/botania/textures/gui/rename.png b/src/main/resources/assets/botania/textures/gui/rename.png new file mode 100644 index 0000000000000000000000000000000000000000..019cc77c1b6a4378410585b4f1e5af8543b4f3b2 GIT binary patch literal 19817 zcmeI4e@qi+7{{+repE^sP6S3v;{c}&EDkejaS(ryQbD80wmJ~Xh~ms;d>d z&sw=|C5HW=_ONBRz~{&fiOF%W#Z{_n+qM}D2K+XrQmKx_$Lp0!sZ?5#l~r6^eDfUE zc4+~A|60?9uUi|d;rqPSBgp@5+9AF@!BeUWzN zRjbCNQnMm_XfaouHQNhUfB9H@!iA4x=Uz5fIM=LKsvm24->Rwx~YxY*mKZ0TdYDZ9=5x!pDU{93#vp#p2E6C^5_J%vZh*o>X;#2)T*hvJ7^ zM0@8oA}N(|_$BnHbKD!*^kauu^_7snBzaDIZ?V|I!sDG@eS9Y*=*XG)6TrbFoO65X8O^&<%oIPXfwZrD7+k<2P42mrMLI@#mg>EX0V0I>Id3{ zIWPiTwC@ZDeiaBq$^iNuFzN``CxSoARr<(2`7-n*^Dm zPE4^<&62TmaM_QvqR~;l8dE1_)mtcy#cnCrb-46P*~9^(*+DOcHdEK+>MyuxY4 z+7nM2DH#Q)yC(RS3zfp^$euk!wri)AWa=dYg~RUFMR_--NTDUrX8-CRwnY|53#`)1 zO++pdy75bv7gc%agR~XD`&*((nTEA2&8p4SeN2~sCFm<~gY?AZnECgaWlPY_AI|4n=sLF}kwhcKQf3*UI~dw1aQ9(zh|5bUK;3EBZD>tHL;7@!Os z5Wduh1ODVd+{{n`=mbZ4C+7nA9Ww!li9xy}xIuJuG8~fth!c<$4$MY3f-Hi31Vzoi z!V&#nIOH%50W&xpD*)87TT%x!aZzuGrPO@&2LVwwafDqSQC@L`-5^nhafDqb1Ijgy zu!90ksK60+Kv<}wIKU1F3y5@}E)W(F=|Ej{Bgi7iM^M!KI~@6RW_CFA&};rCZ*$1N z;cBs}?^qWuZT}nyNy_RA&A_LcD8HI0QlO{7@kp^W0!T?n{RS2R$sS2<52?#P;Sh*y z&`BEh6AFJ!KmanoNSE(S)(Y|nJdV1;i$WdJ9FEC}vrj+(h9;>KE2PH0Kd)K^H(KA`=$!qFI6VcT~pQ z(@U26(3XU2D^gVoE0MtQ`2}x5!GGM1ip&dHwT*$enToVgroq_9ttXAzcv3f+Z!4lg z%@`?8S5xQ1Ue}?aCtg%Ar?*K8-m>ec;2iRY1%_BTIcq={LFNK?K;HEXaq^LU=({f4 zt(${gwet?*XXlP_C817uHkarF$Kinr)g6x%?`UZ)gM(B*f@!B-f(Ai0L4JZ_=l_F( z`_RG*Re`+tt>QyOm&4v$%kl6IuU;GcfL&k>hiTY8_kN8R@d%FPAmvx{@tJQGRdJgp zEX~AE>-GL&(=X{2T#){zT`)6K$?Q|)GdZA85PM+Qq=HI8U3sK0+akyaYhBoVz_A6#%ihfaJxjWdqZrrveA+8puo9e9KpCW>3X J=KLy2;h&2QUUvWh literal 0 HcmV?d00001