From 9fa04b998b0f5d5cf2dd121e991fd1bbf35e19c3 Mon Sep 17 00:00:00 2001 From: lothrazar Date: Fri, 29 Nov 2024 22:31:13 -0800 Subject: [PATCH] expanded feature: fix and refactor cleargrid button --- .../block/AbstractNetworkScreen.java | 36 ++++++++---------- .../ScreenNetworkInventoryExpanded.java | 7 +--- .../block/expand/TileInventoryExpanded.java | 2 +- .../inventory/ScreenNetworkInventory.java | 6 --- .../block/request/ScreenNetworkTable.java | 9 ++--- .../storagenetwork/gui/NetworkWidget.java | 30 ++++++++++++--- .../gui/components/ButtonRequest.java | 6 ++- .../remote/ScreenNetworkCraftingRemote.java | 3 +- .../remote/ScreenNetworkExpandedRemote.java | 5 +-- .../item/remote/ScreenNetworkRemote.java | 7 ---- .../storagenetwork/registry/SsnRegistry.java | 6 +-- .../blockstates/request_expanded.json | 7 ++++ .../assets/storagenetwork/lang/en_us.json | 2 + .../models/block/request_expanded.json | 6 +++ .../models/item/expanded_remote.json | 6 +++ .../storagenetwork/textures/gui/cable.png | Bin 5257 -> 5617 bytes .../textures/gui/expandable_crafting.png | Bin 1058 -> 1024 bytes .../storagenetwork/textures/gui/request.png | Bin 2256 -> 1666 bytes 18 files changed, 78 insertions(+), 60 deletions(-) create mode 100644 src/main/resources/assets/storagenetwork/blockstates/request_expanded.json create mode 100644 src/main/resources/assets/storagenetwork/models/block/request_expanded.json create mode 100644 src/main/resources/assets/storagenetwork/models/item/expanded_remote.json diff --git a/src/main/java/com/lothrazar/storagenetwork/block/AbstractNetworkScreen.java b/src/main/java/com/lothrazar/storagenetwork/block/AbstractNetworkScreen.java index de297521..a5a642e0 100644 --- a/src/main/java/com/lothrazar/storagenetwork/block/AbstractNetworkScreen.java +++ b/src/main/java/com/lothrazar/storagenetwork/block/AbstractNetworkScreen.java @@ -3,13 +3,9 @@ import java.util.List; import com.lothrazar.storagenetwork.StorageNetworkMod; import com.lothrazar.storagenetwork.api.IGuiNetwork; -import com.lothrazar.storagenetwork.gui.NetworkScreenSize; import com.lothrazar.storagenetwork.gui.TileableTexture; import com.lothrazar.storagenetwork.gui.components.TextboxInteger; import com.lothrazar.storagenetwork.jei.JeiHooks; -import com.lothrazar.storagenetwork.network.ClearRecipeMessage; -import com.lothrazar.storagenetwork.network.RequestMessage; -import com.lothrazar.storagenetwork.registry.PacketRegistry; import com.mojang.blaze3d.platform.InputConstants; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; @@ -99,23 +95,21 @@ public boolean mouseScrolled(double x, double y, double mouseButton) { public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) { super.mouseClicked(mouseX, mouseY, mouseButton); getNetwork().mouseClicked(mouseX, mouseY, mouseButton); - var size = getNetwork().getSize(); - if (size.isCrafting()) { - //TODO: this is part of crafting grid, to clear it out. should be its own button class - int rectX = 63; - int rectY = 110; - if (size == NetworkScreenSize.EXPANDED) { - rectX = 63; - rectY = 110 + 200; - } - // TODO: revise above .out.println(mouseX + "," + mouseY); - if (isHovering(rectX, rectY, 7, 7, mouseX, mouseY)) { - - PacketRegistry.INSTANCE.sendToServer(new ClearRecipeMessage()); - PacketRegistry.INSTANCE.sendToServer(new RequestMessage(0, ItemStack.EMPTY, false, false)); - return true; - } - } + // var size = getNetwork().getSize(); + // if (size.isCrafting()) { + // //TODO: this is part of crafting grid, to clear it out. should be its own button class + // int rectX = 63; + // int rectY = 110; + // + // // TODO: revise above + // if (isHovering(rectX, rectY, 7, 7, mouseX, mouseY)) { + // System.out.println("clear cancelled do nothing,"); + // + // // PacketRegistry.INSTANCE.sendToServer(new ClearRecipeMessage()); + // // PacketRegistry.INSTANCE.sendToServer(new RequestMessage(0, ItemStack.EMPTY, false, false)); + // return true; + // } + // } return true; } diff --git a/src/main/java/com/lothrazar/storagenetwork/block/expand/ScreenNetworkInventoryExpanded.java b/src/main/java/com/lothrazar/storagenetwork/block/expand/ScreenNetworkInventoryExpanded.java index a0c5d3bb..134964f2 100644 --- a/src/main/java/com/lothrazar/storagenetwork/block/expand/ScreenNetworkInventoryExpanded.java +++ b/src/main/java/com/lothrazar/storagenetwork/block/expand/ScreenNetworkInventoryExpanded.java @@ -1,17 +1,12 @@ package com.lothrazar.storagenetwork.block.expand; -import com.lothrazar.storagenetwork.StorageNetworkMod; import com.lothrazar.storagenetwork.api.EnumSortType; import com.lothrazar.storagenetwork.block.AbstractNetworkScreen; import com.lothrazar.storagenetwork.gui.NetworkScreenSize; import com.lothrazar.storagenetwork.gui.NetworkWidget; -import com.lothrazar.storagenetwork.gui.TileableTexture; -import com.lothrazar.storagenetwork.util.SsnConsts; -import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Inventory; import net.minecraftforge.fml.ModList; @@ -38,6 +33,8 @@ public void init() { addRenderableWidget(network.directionBtn); addRenderableWidget(network.sortBtn); addRenderableWidget(network.focusBtn); + if (this.network.getSize().isCrafting()) + addRenderableWidget(network.clearGridBtn); if (this.getAutoFocus()) { network.searchBar.setFocused(true); } diff --git a/src/main/java/com/lothrazar/storagenetwork/block/expand/TileInventoryExpanded.java b/src/main/java/com/lothrazar/storagenetwork/block/expand/TileInventoryExpanded.java index 06b45cf0..e27ccbb8 100644 --- a/src/main/java/com/lothrazar/storagenetwork/block/expand/TileInventoryExpanded.java +++ b/src/main/java/com/lothrazar/storagenetwork/block/expand/TileInventoryExpanded.java @@ -11,7 +11,7 @@ public class TileInventoryExpanded extends TileInventory { public TileInventoryExpanded(BlockPos pos, BlockState state) { - super(SsnRegistry.Tiles.INVENTORY_EXPANDED.get(), pos, state); + super(SsnRegistry.Tiles.REQUEST_EXPANDED.get(), pos, state); } @Override diff --git a/src/main/java/com/lothrazar/storagenetwork/block/inventory/ScreenNetworkInventory.java b/src/main/java/com/lothrazar/storagenetwork/block/inventory/ScreenNetworkInventory.java index 69d56573..f45a83f0 100644 --- a/src/main/java/com/lothrazar/storagenetwork/block/inventory/ScreenNetworkInventory.java +++ b/src/main/java/com/lothrazar/storagenetwork/block/inventory/ScreenNetworkInventory.java @@ -5,7 +5,6 @@ import com.lothrazar.storagenetwork.block.AbstractNetworkScreen; import com.lothrazar.storagenetwork.gui.NetworkScreenSize; import com.lothrazar.storagenetwork.gui.NetworkWidget; -import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; @@ -53,11 +52,6 @@ public void renderBg(GuiGraphics ms, float partialTicks, int mouseX, int mouseY) network.renderItemSlots(ms, mouseX, mouseY, font); } - @Override - public void resize(Minecraft mc, int w, int h) { - super.resize(mc, w, h); - network.resize(mc, w, h); - } // all the IGUINETWORK implementations @Override diff --git a/src/main/java/com/lothrazar/storagenetwork/block/request/ScreenNetworkTable.java b/src/main/java/com/lothrazar/storagenetwork/block/request/ScreenNetworkTable.java index 15ba832e..8d90ddd5 100644 --- a/src/main/java/com/lothrazar/storagenetwork/block/request/ScreenNetworkTable.java +++ b/src/main/java/com/lothrazar/storagenetwork/block/request/ScreenNetworkTable.java @@ -5,7 +5,6 @@ import com.lothrazar.storagenetwork.block.AbstractNetworkScreen; import com.lothrazar.storagenetwork.gui.NetworkScreenSize; import com.lothrazar.storagenetwork.gui.NetworkWidget; -import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; @@ -36,6 +35,8 @@ public void init() { addRenderableWidget(network.directionBtn); addRenderableWidget(network.sortBtn); addRenderableWidget(network.focusBtn); + if (this.network.getSize().isCrafting()) + addRenderableWidget(network.clearGridBtn); if (this.getAutoFocus()) { network.searchBar.setFocused(true); } @@ -54,11 +55,6 @@ public void renderBg(GuiGraphics ms, float partialTicks, int mouseX, int mouseY) network.renderItemSlots(ms, mouseX, mouseY, font); } - @Override - public void resize(Minecraft mc, int w, int h) { - super.resize(mc, w, h); - network.resize(mc, w, h); - } // all the IGUINETWORK implementations @Override @@ -81,6 +77,7 @@ public void setSort(EnumSortType s) { tile.setSort(s); } + @Override public BlockPos getPos() { return tile.getBlockPos(); } diff --git a/src/main/java/com/lothrazar/storagenetwork/gui/NetworkWidget.java b/src/main/java/com/lothrazar/storagenetwork/gui/NetworkWidget.java index 93b99ebb..f00677a9 100644 --- a/src/main/java/com/lothrazar/storagenetwork/gui/NetworkWidget.java +++ b/src/main/java/com/lothrazar/storagenetwork/gui/NetworkWidget.java @@ -14,6 +14,7 @@ import com.lothrazar.storagenetwork.gui.components.ButtonRequest; import com.lothrazar.storagenetwork.gui.components.ButtonRequest.TextureEnum; import com.lothrazar.storagenetwork.gui.slot.ItemSlotNetwork; +import com.lothrazar.storagenetwork.network.ClearRecipeMessage; import com.lothrazar.storagenetwork.network.InsertMessage; import com.lothrazar.storagenetwork.network.RequestMessage; import com.lothrazar.storagenetwork.registry.PacketRegistry; @@ -46,6 +47,7 @@ public class NetworkWidget { public ButtonRequest sortBtn; public ButtonRequest jeiBtn; public ButtonRequest focusBtn; + public ButtonRequest clearGridBtn; private List slots; private final IGuiNetwork gui; private long lastClick; @@ -151,12 +153,23 @@ public void init(Font font) { }, DEFAULT_NARRATION); focusBtn.setHeight(11); focusBtn.setWidth(6); - } - - //called by outer component - @Deprecated - public void resize(Minecraft mc, int width, int height) { - //todo: how many rows? dynamically change size on screen resize from client + if (this.getSize() != NetworkScreenSize.LARGE) { + x = searchBar.getX() - 19; + y = searchBar.getY() + 13; + if (this.getSize() == NetworkScreenSize.EXPANDED) { + //omg this is a bit of a mess i should refactor this + x = searchBar.getX() - 99; + y = searchBar.getY() - 2; + } + clearGridBtn = new ButtonRequest( + x, y, "", (p) -> { + PacketRegistry.INSTANCE.sendToServer(new ClearRecipeMessage()); + PacketRegistry.INSTANCE.sendToServer(new RequestMessage(0, ItemStack.EMPTY, false, false)); + }, DEFAULT_NARRATION); + clearGridBtn.setHeight(7); + clearGridBtn.setWidth(7); + this.clearGridBtn.setTextureId(TextureEnum.CRAFTCLEAR); + } } public List getStacks() { @@ -331,6 +344,9 @@ public void drawGuiContainerForegroundLayer(GuiGraphics ms, int mouseX, int mous else if (sortBtn != null && sortBtn.isMouseOver(mouseX, mouseY)) { tooltip = Component.translatable("gui.storagenetwork.req.tooltip_" + gui.getSort().name().toLowerCase()); } + else if (clearGridBtn != null && clearGridBtn.isMouseOver(mouseX, mouseY)) { + tooltip = Component.translatable("gui.storagenetwork.req.tooltip_cleargrid"); + } else if (focusBtn != null && focusBtn.isMouseOver(mouseX, mouseY)) { tooltip = Component.translatable("gui.storagenetwork.autofocus.tooltip." + gui.getAutoFocus()); } @@ -459,6 +475,8 @@ public void render() { sortBtn.setTextureId(TextureEnum.SORT_NAME); break; } + if (this.clearGridBtn != null) { + } focusBtn.setTextureId(gui.getAutoFocus() ? TextureEnum.RED : TextureEnum.GREY); directionBtn.setTextureId(gui.getDownwards() ? TextureEnum.SORT_DOWN : TextureEnum.SORT_UP); if (jeiBtn != null && ModList.get().isLoaded("jei")) { diff --git a/src/main/java/com/lothrazar/storagenetwork/gui/components/ButtonRequest.java b/src/main/java/com/lothrazar/storagenetwork/gui/components/ButtonRequest.java index 8dc90f33..9ddc01ba 100644 --- a/src/main/java/com/lothrazar/storagenetwork/gui/components/ButtonRequest.java +++ b/src/main/java/com/lothrazar/storagenetwork/gui/components/ButtonRequest.java @@ -14,7 +14,7 @@ public class ButtonRequest extends Button { public static enum TextureEnum { - ALLOWLIST, IGNORELIST, SORT_AMT, SORT_MOD, SORT_NAME, SORT_UP, SORT_DOWN, JEI_RED, JEI_GREEN, IMPORT, PLUS, MINUS, REDSTONETRUE, REDSTONEFALSE, RED, GREY; + ALLOWLIST, IGNORELIST, SORT_AMT, SORT_MOD, SORT_NAME, SORT_UP, SORT_DOWN, JEI_RED, JEI_GREEN, IMPORT, PLUS, MINUS, REDSTONETRUE, REDSTONEFALSE, RED, GREY, CRAFTCLEAR; public int getX() { switch (this) { @@ -50,6 +50,8 @@ public int getX() { return 196; case MINUS: return 177; + case CRAFTCLEAR: + return 209; default: return 0; } @@ -82,6 +84,8 @@ public int getY() { return 13; case MINUS: return 13; + case CRAFTCLEAR: + return 53; default: return 0; } diff --git a/src/main/java/com/lothrazar/storagenetwork/item/remote/ScreenNetworkCraftingRemote.java b/src/main/java/com/lothrazar/storagenetwork/item/remote/ScreenNetworkCraftingRemote.java index acbc3a58..c66461e4 100644 --- a/src/main/java/com/lothrazar/storagenetwork/item/remote/ScreenNetworkCraftingRemote.java +++ b/src/main/java/com/lothrazar/storagenetwork/item/remote/ScreenNetworkCraftingRemote.java @@ -5,7 +5,6 @@ import com.lothrazar.storagenetwork.block.AbstractNetworkScreen; import com.lothrazar.storagenetwork.gui.NetworkScreenSize; import com.lothrazar.storagenetwork.gui.NetworkWidget; -import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -37,6 +36,8 @@ public void init() { addRenderableWidget(network.directionBtn); addRenderableWidget(network.sortBtn); addRenderableWidget(network.focusBtn); + if (this.network.getSize().isCrafting()) + addRenderableWidget(network.clearGridBtn); if (this.getAutoFocus()) { network.searchBar.setFocused(true); } diff --git a/src/main/java/com/lothrazar/storagenetwork/item/remote/ScreenNetworkExpandedRemote.java b/src/main/java/com/lothrazar/storagenetwork/item/remote/ScreenNetworkExpandedRemote.java index a355f39a..44576004 100644 --- a/src/main/java/com/lothrazar/storagenetwork/item/remote/ScreenNetworkExpandedRemote.java +++ b/src/main/java/com/lothrazar/storagenetwork/item/remote/ScreenNetworkExpandedRemote.java @@ -1,14 +1,11 @@ package com.lothrazar.storagenetwork.item.remote; -import com.lothrazar.storagenetwork.StorageNetworkMod; import com.lothrazar.storagenetwork.api.EnumSortType; import com.lothrazar.storagenetwork.block.AbstractNetworkScreen; import com.lothrazar.storagenetwork.gui.NetworkScreenSize; import com.lothrazar.storagenetwork.gui.NetworkWidget; -import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.item.ItemStack; import net.minecraftforge.fml.ModList; @@ -36,6 +33,8 @@ public void init() { addRenderableWidget(network.directionBtn); addRenderableWidget(network.sortBtn); addRenderableWidget(network.focusBtn); + if (network.clearGridBtn != null) + addRenderableWidget(network.clearGridBtn); if (this.getAutoFocus()) { network.searchBar.setFocused(true); } diff --git a/src/main/java/com/lothrazar/storagenetwork/item/remote/ScreenNetworkRemote.java b/src/main/java/com/lothrazar/storagenetwork/item/remote/ScreenNetworkRemote.java index b1f76eba..2bbe88d6 100644 --- a/src/main/java/com/lothrazar/storagenetwork/item/remote/ScreenNetworkRemote.java +++ b/src/main/java/com/lothrazar/storagenetwork/item/remote/ScreenNetworkRemote.java @@ -5,7 +5,6 @@ import com.lothrazar.storagenetwork.block.AbstractNetworkScreen; import com.lothrazar.storagenetwork.gui.NetworkScreenSize; import com.lothrazar.storagenetwork.gui.NetworkWidget; -import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -55,12 +54,6 @@ protected void renderBg(GuiGraphics ms, float partialTicks, int mouseX, int mous network.renderItemSlots(ms, mouseX, mouseY, font); } - @Override - public void resize(Minecraft mc, int w, int h) { - super.resize(mc, w, h); - network.resize(mc, w, h); - } - @Override public boolean getDownwards() { return ItemStorageCraftingRemote.getDownwards(remote); diff --git a/src/main/java/com/lothrazar/storagenetwork/registry/SsnRegistry.java b/src/main/java/com/lothrazar/storagenetwork/registry/SsnRegistry.java index d38728f9..b856080c 100644 --- a/src/main/java/com/lothrazar/storagenetwork/registry/SsnRegistry.java +++ b/src/main/java/com/lothrazar/storagenetwork/registry/SsnRegistry.java @@ -71,7 +71,7 @@ public static class Blocks { public static final RegistryObject FILTER_KABEL = BLOCKS.register("filter_kabel", () -> new BlockCableFilter()); public static final RegistryObject EXPORT_KABEL = BLOCKS.register("export_kabel", () -> new BlockCableExport()); public static final RegistryObject INVENTORY = BLOCKS.register("inventory", () -> new BlockInventory()); - public static final RegistryObject INVENTORY_EXPANDED = BLOCKS.register("inventory_expanded", () -> new BlockInventoryExpanded()); + public static final RegistryObject REQUEST_EXPANDED = BLOCKS.register("request_expanded", () -> new BlockInventoryExpanded()); public static final RegistryObject EXCHANGE = BLOCKS.register("exchange", () -> new BlockExchange()); public static final RegistryObject COLLECTOR = BLOCKS.register("collector", () -> new BlockCollection()); } @@ -83,7 +83,7 @@ public static class Items { // public static final RegistryObject REQUEST_EXPANDED = ITEMS.register("request_expanded", () -> new BlockItem(Blocks.REQUEST_EXPANDED.get(), new Item.Properties())); public static final RegistryObject KABEL = ITEMS.register("kabel", () -> new BlockItem(Blocks.KABEL.get(), new Item.Properties())); public static final RegistryObject INVENTORY = ITEMS.register("inventory", () -> new BlockItem(Blocks.INVENTORY.get(), new Item.Properties())); - public static final RegistryObject INVENTORY_EXPANDED = ITEMS.register("inventory_expanded", () -> new BlockItem(Blocks.INVENTORY_EXPANDED.get(), new Item.Properties())); + public static final RegistryObject INVENTORY_EXPANDED = ITEMS.register("request_expanded", () -> new BlockItem(Blocks.REQUEST_EXPANDED.get(), new Item.Properties())); public static final RegistryObject MAS = ITEMS.register("master", () -> new BlockItem(Blocks.MASTER.get(), new Item.Properties())); public static final RegistryObject SK = ITEMS.register("storage_kabel", () -> new BlockItem(Blocks.STORAGE_KABEL.get(), new Item.Properties())); public static final RegistryObject IK = ITEMS.register("import_kabel", () -> new BlockItem(Blocks.IMPORT_KABEL.get(), new Item.Properties())); @@ -111,7 +111,7 @@ public static class Tiles { public static final RegistryObject> MASTER = TILES.register("master", () -> BlockEntityType.Builder.of(TileMain::new, Blocks.MASTER.get()).build(null)); public static final RegistryObject> INVENTORY = TILES.register("inventory", () -> BlockEntityType.Builder.of(TileInventory::new, Blocks.INVENTORY.get()).build(null)); - public static final RegistryObject> INVENTORY_EXPANDED = TILES.register("inventory_expanded", () -> BlockEntityType.Builder.of(TileInventoryExpanded::new, Blocks.INVENTORY_EXPANDED.get()).build(null)); + public static final RegistryObject> REQUEST_EXPANDED = TILES.register("request_expanded", () -> BlockEntityType.Builder.of(TileInventoryExpanded::new, Blocks.REQUEST_EXPANDED.get()).build(null)); public static final RegistryObject> REQUEST = TILES.register("request", () -> BlockEntityType.Builder.of(TileRequest::new, Blocks.REQUEST.get()).build(null)); public static final RegistryObject> KABEL = TILES.register("kabel", () -> BlockEntityType.Builder.of(TileCable::new, Blocks.KABEL.get()).build(null)); public static final RegistryObject> STORAGE_KABEL = TILES.register("storage_kabel", () -> BlockEntityType.Builder.of(TileCableLink::new, Blocks.STORAGE_KABEL.get()).build(null)); diff --git a/src/main/resources/assets/storagenetwork/blockstates/request_expanded.json b/src/main/resources/assets/storagenetwork/blockstates/request_expanded.json new file mode 100644 index 00000000..95bc2035 --- /dev/null +++ b/src/main/resources/assets/storagenetwork/blockstates/request_expanded.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "storagenetwork:block/request_expanded" + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/storagenetwork/lang/en_us.json b/src/main/resources/assets/storagenetwork/lang/en_us.json index 76df02ea..70c00d7a 100644 --- a/src/main/resources/assets/storagenetwork/lang/en_us.json +++ b/src/main/resources/assets/storagenetwork/lang/en_us.json @@ -150,6 +150,8 @@ "gui.storagenetwork.tooltip_clear": "Clear Search", "gui.storagenetwork.fil.tooltip_jei_on": "JEI search enabled", "gui.storagenetwork.fil.tooltip_jei_off": "JEI search disabled", + + "gui.storagenetwork.req.tooltip_cleargrid":"Clear Grid", "block.storagenetwork.kabel.tooltip": "Basic network cable ", "block.storagenetwork.storage_kabel.tooltip": "Used to connect inventory to the network", diff --git a/src/main/resources/assets/storagenetwork/models/block/request_expanded.json b/src/main/resources/assets/storagenetwork/models/block/request_expanded.json new file mode 100644 index 00000000..7af132ec --- /dev/null +++ b/src/main/resources/assets/storagenetwork/models/block/request_expanded.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "storagenetwork:block/request_expanded" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/storagenetwork/models/item/expanded_remote.json b/src/main/resources/assets/storagenetwork/models/item/expanded_remote.json new file mode 100644 index 00000000..22d8076c --- /dev/null +++ b/src/main/resources/assets/storagenetwork/models/item/expanded_remote.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "storagenetwork:item/expanded_remote" + } +} diff --git a/src/main/resources/assets/storagenetwork/textures/gui/cable.png b/src/main/resources/assets/storagenetwork/textures/gui/cable.png index 15ec9e9324121e39816a4fb58f1b31104407718c..56d4eea8eba369b4a4da128c0bea07dc4725d5a3 100755 GIT binary patch delta 5136 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 diff --git a/src/main/resources/assets/storagenetwork/textures/gui/expandable_crafting.png b/src/main/resources/assets/storagenetwork/textures/gui/expandable_crafting.png index 35a74a03452f61393f595a4e8e3935d4cca5638f..3bd7c4f2d15d0e481e819dbad3443037c06edd6a 100644 GIT binary patch delta 469 zcmZ3)(ZDgm(NrS9C&ZP3f#LuE|HqCUGdDNy?(Pl^4OLT90}6gQl+*#FI7)*2f`JM^ zfZ<;A-pGknzv`{P(Wn3aM`SK{z16F@EOge)%AHFmMEPG~ z5%ORD`R94}`nA3cQH_!Zvl||2dL+8?*DPP4E8ZDTpkodv>Ov zGq(Eo_TbBV*##UJ81I-d>|4H*f$2elUIT;0jNgn6rz_Y0U|P>tzoDA(4etTzbNJz)fpJB)#uK)G>&=nn(wplhMd*@Equ%ea?jTO4o_I9#8M$*z+}Ur z!Dz>A!Dz?n!T64ejX}=V%ubbU2Fn(P$H9CJ$B!+qSit(=hq5|D`}QdeGQ5(E781ft z8=f#nl!!Fg2}WI0cRD{uGDz=ZDdUG*p<)eR<@+?_KAe8b_u&;Q7AJEj>^QQKo1x*Z zonX~hHHKWqn0_JiJ*Di-5BAHMzlmVD^JSVW--9isF>#YOGDl4Qz${4svq`D3?})q4 Zn1ArixewnA>wpo&;OXk;vd$@?2>>xm#nb=* delta 485 zcmVxOjJbx00960|Hj6~H#awni;GoNRcmW&CMG5T005A3(%%38 z010$bPE-H?|NsC0|Nj6}Pk0iMcKUyrNkl;ZE9M07hX!+_?WM9<+xdU>w`{ zvNq=&f4mh)txu3S65rl-yZxzmYZm~mzye?uxB^HEAb=TwpNMM*_SzS>>~~X#=~P4d z7}e#P7l6ZEyJv3M?|z(npH4NTkDr6OJn#P*;QXNmIDP*;1KiI5_iF(EGE9G`8q(SU zh8FTwLKc=_2 z>0(m=fH{ro5dZ)JDFX0VXoS_QAk-5Fcy9)pTUJBR!EN8f*aSdLq1i-~5%kr5^dL`Y z4F-csrK+r~lt?7nRzq`}q2a0_Gw*C`YinFwoJb^!iHS)_NJvUb^7ZxoDYto7_NBBe ztu#*;9G(#z94r(HV`F0(3`R&hsEgQ6NFUAZ*vPo$*Nk7vv@Y2jj?JIgt_NR8F+XM#`x?3dm7l zU{=gzWPqD1WFL1qlF8_*WTkHhu8s}$fODgHYzj)*I?_F~;}Lm&c2rJz=)*i(D8`P_ zV9RKzppo>uxh4G>OO;n#y>e<)`ZDC(^rAv*PTHJ}3I_tsH8kdQXVXNVt*oDT=wYEc zN}R$wQmE)Jxi)%jZ}*`PES^7MvVGu{;OmI65vINt8LTgV|LQ~8FxY;SL#8UcguK>` z!v`vB5bE0JZ{vN?4H{zK2_XtAOid7=B@7T zn9d|8T{u=`KVTW({ES32QN@NA%~p0V{;}p9TM~OBgS2(4wyb&;|cR0#t3!JX78JzjwQu z)@V(DatQ!_Sb0gMjkt^O)?20)6yCudIQ>*fM=2`Fa#0*=z?ldv@rQO;{@G#^065FH zECO%)E|#v0w9CNB^`i3j*9gUeEp|MI?o3NBMV^h;+RUFN-B(gMMmker`GrnJ$p@=2 z{+RU(a_9AyQp!OVWfmBFAUM0<#+YU5VJ6qkH_<__zmSJ;ez#?UuG+npl=1LwIQe0R zxtO*P%VoN-%?R6*x1kze!cPc}wE$y11y?a=cK*Tg>UpWi#P>SGN~QNlR-+YzIw9cD zcLG3>jDeSt*s4?bodq_Oh5!94c@Gv3Qo)!ovM8Y0yuB`Wn{1tQSM#;N;p@M-|J#Nc zEm6H+ckwoX3qq4g$1c`=`Pk+}*m;Cg@znp&jSloNn8J)LuS0h1s$GF?Yw(@hQoFQ^ zK{{xt}Y%>4= literal 2256 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5D>38$lZxy-8q?;Kn_c~qpu?a z!^VE@KZ&di49pAxJ|V6^aWyqHb8~Y~Pfu@eZyz5YUteE8Kfln>(A3n_%*@QJtgP(p z?3|pO+}zx}yuAGU{DOjl!otGh;^NZM(z3F$^78V~nC7t9mhd0DN zxVxfhPgTpF>ejtAZTspv_IG!8w{&e^|7kbFgi~ z;f_g1b{_h_>&X8-NB{3V_J9A0|HqCUJ9z3p5CGjd3PwYK>LKuZ8+6Gzr8wZdi?|b&6)b`k@<9F{xGaHn6vYR*eKV@9D za7mp1q{7vSzwW=8wR{$%hknj~^=B*Nr5v`&Ip`etUiN&))op*@%c`7Q|L}v6?7bU- z0d*`Vt}%B=GrslPp2#rEotHVmukqy30wb9kUwc=k4{KBP8Sj=YzG}i?A6)$*zg_(0 zhaC5Y>r?&0lFN84^2+`Ftme*>W_%`9U~M?PVRx)QO7kgmj zyMITZ!OgcK6Yhpsa5u;=d%w2NmiJBUgZ`JhUjJWL&Un+ibu)v+Y-xwhiSzI6^_+D4 z%d>xFMftz%J5pJC{Hvb*Fh9%iqaXw5uDLJwNHag5$S~(x)>h}wD`c3c zU*!K{6^3Y~+N!`N<_Wv@0!wTtaQGJV5XNQ*+P)pmW;hY2B?IF*y!s{vV>2)S9R#Wt zz`*0~Jti2NL7{qO0i3h)b~K#LkfJZj$FPfGs(68G7E?%!!sNz)%9THjBaN^OSUz(>CX~_-wv> zxi;jky9uLP_Ds>tndhX;jFOkn*J8Rce+8q@e@Vu|{)Qdv8H>^juD(^g%6tQu4&mm< zHoW0)O%HmeoHBvo)4kp)l6DL)7<2s6#4-y*bNvmJ6Ks#Bwfvi#z_4UZs@Hs`Y%M{i zHC#tHHYf?G9tdunqbb`@Fi1{fnmbbRE8hx8Ly~RxR=mB{H7FEF1$-z*?@F_Qbp3{BaQ%3zs z-DV9n`y!WJXkS>n4WtqbV9LRqDZldy=IfqfFnT}9y)e&xS|!)k4CWIa(QbtX)3ZTw z00v9)^5JZT3$sstyt;@-;j><)$n&z4nacx!*7R&i6=5&l2~QcQsbud=nRuWji7Y_V zfJrWuQK5J}P;+@IMDv~8X@PqdPQ_{8*{?wR1l$-H6!IE&u^q74c$-&^i{Z1&Hd&`V m-|sWcxU4WE#r5~;nt$R#1-E`ZyEtVA$km>%elF{r5}E)u*As~V