diff --git a/src/main/java/tconstruct/library/crafting/StencilBuilder.java b/src/main/java/tconstruct/library/crafting/StencilBuilder.java index 9d5d73b5..9f261dcb 100644 --- a/src/main/java/tconstruct/library/crafting/StencilBuilder.java +++ b/src/main/java/tconstruct/library/crafting/StencilBuilder.java @@ -9,7 +9,7 @@ public class StencilBuilder public static StencilBuilder instance = new StencilBuilder(); public List blanks = new LinkedList(); // i wish ItemStack would support equals so i could use a Set here... - public List stencils = new ArrayList(); + public Map stencils = new TreeMap(); /** * Returns whether the given ItemStack is a blank pattern and therefore usable for stencil crafting. @@ -28,29 +28,32 @@ public class StencilBuilder instance.blanks.add(itemStack); } - public static void registerStencil (Item item, int meta) + public static void registerStencil (int id, Item item, int meta) { - instance.stencils.add(new ItemStack(item, 1, meta)); + registerStencil(id, new ItemStack(item, 1, meta)); } - public static void registerStencil (ItemStack pattern) + public static void registerStencil (int id, ItemStack pattern) { - instance.stencils.add(pattern); + if(instance.stencils.containsKey(id)) + throw new IllegalArgumentException("[TCon API] Stencil ID " + id + " is already occupied by " + instance.stencils.get(id).getDisplayName()); + + instance.stencils.put(id, pattern); } - public static List getStencils () + public static Collection getStencils () { - return instance.stencils; + return instance.stencils.values(); } /** * Returns the index of the given stencil. If no stencil is found, returns -1. */ - public static int getIndex (ItemStack stencil) + public static int getId(ItemStack stencil) { - for (int i = 0; i < instance.stencils.size(); i++) - if (OreDictionary.itemMatches(stencil, getStencil(i), false)) - return i; + for(Map.Entry entry : instance.stencils.entrySet()) + if (OreDictionary.itemMatches(stencil, entry.getValue(), false)) + return entry.getKey(); return -1; } @@ -58,7 +61,7 @@ public class StencilBuilder // returns the stencil with the given index public static ItemStack getStencil (int num) { - if (num >= instance.stencils.size()) + if (!instance.stencils.containsKey(num)) return null; return instance.stencils.get(num).copy(); diff --git a/src/main/java/tconstruct/tools/TinkerTools.java b/src/main/java/tconstruct/tools/TinkerTools.java index 2e9e6a62..3e9097f3 100644 --- a/src/main/java/tconstruct/tools/TinkerTools.java +++ b/src/main/java/tconstruct/tools/TinkerTools.java @@ -897,36 +897,36 @@ public class TinkerTools StencilBuilder.registerBlankStencil(new ItemStack(TinkerTools.blankPattern)); // we register this manually because we want that specific order - StencilBuilder.registerStencil(TinkerTools.woodPattern, 1); // tool rod - StencilBuilder.registerStencil(TinkerTools.woodPattern, 9); // binding - StencilBuilder.registerStencil(TinkerTools.woodPattern, 14); // large tool rod - StencilBuilder.registerStencil(TinkerTools.woodPattern, 15); // large binding + StencilBuilder.registerStencil(0, TinkerTools.woodPattern, 1); // tool rod + StencilBuilder.registerStencil(1, TinkerTools.woodPattern, 9); // binding + StencilBuilder.registerStencil(2, TinkerTools.woodPattern, 14); // large tool rod + StencilBuilder.registerStencil(3, TinkerTools.woodPattern, 15); // large binding - StencilBuilder.registerStencil(TinkerTools.woodPattern, 2); // pickaxe head - StencilBuilder.registerStencil(TinkerTools.woodPattern, 3); // shovel head - StencilBuilder.registerStencil(TinkerTools.woodPattern, 4); // hatchet head - StencilBuilder.registerStencil(TinkerTools.woodPattern, 18); // scythe + StencilBuilder.registerStencil(4, TinkerTools.woodPattern, 2); // pickaxe head + StencilBuilder.registerStencil(5, TinkerTools.woodPattern, 3); // shovel head + StencilBuilder.registerStencil(6, TinkerTools.woodPattern, 4); // hatchet head + StencilBuilder.registerStencil(7, TinkerTools.woodPattern, 18); // scythe - StencilBuilder.registerStencil(TinkerTools.woodPattern, 21); // hammer head - StencilBuilder.registerStencil(TinkerTools.woodPattern, 19); // excavator head - StencilBuilder.registerStencil(TinkerTools.woodPattern, 17); // lumberaxe head - StencilBuilder.registerStencil(TinkerTools.woodPattern, 16); // large plate + StencilBuilder.registerStencil(8, TinkerTools.woodPattern, 21); // hammer head + StencilBuilder.registerStencil(9, TinkerTools.woodPattern, 19); // excavator head + StencilBuilder.registerStencil(10, TinkerTools.woodPattern, 17); // lumberaxe head + StencilBuilder.registerStencil(11, TinkerTools.woodPattern, 16); // large plate - StencilBuilder.registerStencil(TinkerTools.woodPattern, 10); // frying pan - StencilBuilder.registerStencil(TinkerTools.woodPattern, 11); // battlesign - StencilBuilder.registerStencil(TinkerTools.woodPattern, 13); // chisel + StencilBuilder.registerStencil(12, TinkerTools.woodPattern, 10); // frying pan + StencilBuilder.registerStencil(13, TinkerTools.woodPattern, 11); // battlesign + StencilBuilder.registerStencil(14, TinkerTools.woodPattern, 13); // chisel - StencilBuilder.registerStencil(TinkerTools.woodPattern, 12); // knifeblade - StencilBuilder.registerStencil(TinkerTools.woodPattern, 5); // swordblade - StencilBuilder.registerStencil(TinkerTools.woodPattern, 20); // cleaver blade + StencilBuilder.registerStencil(15, TinkerTools.woodPattern, 12); // knifeblade + StencilBuilder.registerStencil(16, TinkerTools.woodPattern, 5); // swordblade + StencilBuilder.registerStencil(17, TinkerTools.woodPattern, 20); // cleaver blade - StencilBuilder.registerStencil(TinkerTools.woodPattern, 8); // crossbar - StencilBuilder.registerStencil(TinkerTools.woodPattern, 7); // small guard - StencilBuilder.registerStencil(TinkerTools.woodPattern, 6); // wide guard + StencilBuilder.registerStencil(18, TinkerTools.woodPattern, 8); // crossbar + StencilBuilder.registerStencil(19, TinkerTools.woodPattern, 7); // small guard + StencilBuilder.registerStencil(20, TinkerTools.woodPattern, 6); // wide guard - StencilBuilder.registerStencil(TinkerTools.woodPattern, 25); // arrow head - StencilBuilder.registerStencil(TinkerTools.woodPattern, 24); // fletchling - StencilBuilder.registerStencil(TinkerTools.woodPattern, 23); // bowstring + StencilBuilder.registerStencil(21, TinkerTools.woodPattern, 25); // arrow head + StencilBuilder.registerStencil(22, TinkerTools.woodPattern, 24); // fletchling + StencilBuilder.registerStencil(23, TinkerTools.woodPattern, 23); // bowstring } public static final class MaterialID diff --git a/src/main/java/tconstruct/tools/ToolProxyClient.java b/src/main/java/tconstruct/tools/ToolProxyClient.java index 06cab492..76701c82 100644 --- a/src/main/java/tconstruct/tools/ToolProxyClient.java +++ b/src/main/java/tconstruct/tools/ToolProxyClient.java @@ -345,16 +345,15 @@ public class ToolProxyClient extends ToolProxyCommon }; int i = 0; - for (ItemStack stack : StencilBuilder.getStencils()) + for (int[] icon : icons) { // spacer - while (icons[i].length == 0) + if(icon.length == 0) { addStencilButton(0, 0, -1); - i++; } - addStencilButton(icons[i][0], icons[i][1], StencilBuilder.getIndex(stack)); - i++; + else + addStencilButton(icon[0], icon[1], i++); } } diff --git a/src/main/java/tconstruct/tools/gui/StencilTableGui.java b/src/main/java/tconstruct/tools/gui/StencilTableGui.java index 31b4384a..ac94c203 100644 --- a/src/main/java/tconstruct/tools/gui/StencilTableGui.java +++ b/src/main/java/tconstruct/tools/gui/StencilTableGui.java @@ -92,7 +92,7 @@ public class StencilTableGui extends GuiContainer ItemStack stack; if (logic.getStackInSlot(1) != null) { - activeButton = StencilBuilder.getIndex(logic.getStackInSlot(1)); + activeButton = StencilBuilder.getId(logic.getStackInSlot(1)); setActiveButton(activeButton); stack = StencilBuilder.getStencil(((GuiButtonStencil) this.buttonList.get(activeButton)).element.stencilIndex); }