From 5dd0e0c8faa4961d12a75ef4f63679f5a9fe728b Mon Sep 17 00:00:00 2001 From: Bernhard Bonigl Date: Wed, 20 Aug 2014 19:15:16 +0200 Subject: [PATCH 1/5] Change StencilTable from hardcoded patterns to a flexible system --- .../library/crafting/StencilBuilder.java | 64 +++++++++++++++++++ .../java/tconstruct/tools/TinkerTools.java | 14 ++-- .../tconstruct/tools/gui/StencilTableGui.java | 42 +++++------- .../tools/logic/StencilTableLogic.java | 8 +-- 4 files changed, 92 insertions(+), 36 deletions(-) create mode 100644 src/main/java/tconstruct/library/crafting/StencilBuilder.java diff --git a/src/main/java/tconstruct/library/crafting/StencilBuilder.java b/src/main/java/tconstruct/library/crafting/StencilBuilder.java new file mode 100644 index 00000000..c64fb41d --- /dev/null +++ b/src/main/java/tconstruct/library/crafting/StencilBuilder.java @@ -0,0 +1,64 @@ +package tconstruct.library.crafting; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; + +import java.util.*; + +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(); + + /** + * Returns whether the given ItemStack is a blank pattern and therefore usable for stencil crafting. + */ + public static boolean isBlank(ItemStack stack) + { + for(ItemStack blank : instance.blanks) + if(OreDictionary.itemMatches(stack, blank, false)) // this has nothing to do with the oredictionary. + return true; + + return false; + } + + public static void registerBlankStencil(ItemStack itemStack) + { + instance.blanks.add(itemStack); + } + + public static void registerStencil(Item item, int meta) + { + instance.stencils.add(new ItemStack(item, 1, meta)); + } + + public static void registerStencil(ItemStack pattern) + { + instance.stencils.add(pattern); + } + + public static List getStencils() { return instance.stencils; } + + /** + * Returns the index of the given stencil. If no stencil is found, returns -1. + */ + public static int getIndex(ItemStack stencil) { + for(int i = 0; i < instance.stencils.size(); i++) + if(ItemStack.areItemStackTagsEqual(stencil, getStencil(i))) + return i; + + return -1; + } + + // returns the stencil with the given index + public static ItemStack getStencil(int num) { + if(num >= instance.stencils.size()) + return null; + + return instance.stencils.get(num).copy(); + } + + public static int getStencilCount() { return instance.stencils.size(); } +} diff --git a/src/main/java/tconstruct/tools/TinkerTools.java b/src/main/java/tconstruct/tools/TinkerTools.java index d4517dc0..0ccf1be2 100644 --- a/src/main/java/tconstruct/tools/TinkerTools.java +++ b/src/main/java/tconstruct/tools/TinkerTools.java @@ -43,10 +43,7 @@ import tconstruct.items.tools.Shortbow; import tconstruct.items.tools.Shovel; import tconstruct.library.TConstructRegistry; import tconstruct.library.client.TConstructClientRegistry; -import tconstruct.library.crafting.Detailing; -import tconstruct.library.crafting.ModifyBuilder; -import tconstruct.library.crafting.PatternBuilder; -import tconstruct.library.crafting.ToolBuilder; +import tconstruct.library.crafting.*; import tconstruct.library.tools.ToolCore; import tconstruct.library.util.IPattern; import tconstruct.modifiers.tools.ModAntiSpider; @@ -358,6 +355,15 @@ public class TinkerTools registerMaterials(); + // register stencils/wooden patterns in the stencil table + StencilBuilder.registerBlankStencil(new ItemStack(TinkerTools.blankPattern)); + + for(int i = 1; i < 26; i++) { + if(i == 22) continue; // hide full guard + StencilBuilder.registerStencil(TinkerTools.woodPattern, i); + } + + //TODO: Redesign stencil table to be a sensible block TinkerTools.patternOutputs = new Item[] { TinkerTools.toolRod, TinkerTools.pickaxeHead, TinkerTools.shovelHead, TinkerTools.hatchetHead, TinkerTools.swordBlade, TinkerTools.wideGuard, TinkerTools.handGuard, TinkerTools.crossbar, TinkerTools.binding, TinkerTools.frypanHead, TinkerTools.signHead, TinkerTools.knifeBlade, TinkerTools.chiselHead, TinkerTools.toughRod, diff --git a/src/main/java/tconstruct/tools/gui/StencilTableGui.java b/src/main/java/tconstruct/tools/gui/StencilTableGui.java index 4ef8b9f3..f7a9dc24 100644 --- a/src/main/java/tconstruct/tools/gui/StencilTableGui.java +++ b/src/main/java/tconstruct/tools/gui/StencilTableGui.java @@ -11,6 +11,7 @@ import net.minecraft.world.World; import org.lwjgl.opengl.GL11; import tconstruct.TConstruct; +import tconstruct.library.crafting.StencilBuilder; import tconstruct.tools.TinkerTools; import tconstruct.tools.inventory.PatternShaperContainer; import tconstruct.tools.logic.StencilTableLogic; @@ -85,37 +86,24 @@ public class StencilTableGui extends GuiContainer protected void actionPerformed (GuiButton button) { ItemStack pattern = logic.getStackInSlot(0); - if (pattern != null && pattern.getItem() == TinkerTools.blankPattern) + if (pattern != null && StencilBuilder.isBlank(pattern)) { - int meta = pattern.getItemDamage(); - if (meta == 0) + if (button.id == 0) { - if (button.id == 0) - { - patternIndex++; - if (patternIndex == 21) - patternIndex++; - if (patternIndex >= TinkerTools.patternOutputs.length - 1) - patternIndex = 0; - } - else if (button.id == 1) - { - patternIndex--; - if (patternIndex < 0) - patternIndex = TinkerTools.patternOutputs.length - 2; - if (patternIndex == 21) - patternIndex--; - } - ItemStack stack = new ItemStack(TinkerTools.woodPattern, 1, patternIndex + 1); - logic.setInventorySlotContents(1, stack); - updateServer(stack); + patternIndex++; + if (patternIndex >= StencilBuilder.getStencilCount() - 1) + patternIndex = 0; } - /*else if (meta == 1 || meta == 2) + else if (button.id == 1) { - ItemStack stack = new ItemStack(TContent.metalPattern, 1, 0); - logic.setInventorySlotContents(1, stack); - updateServer(stack); - }*/ + patternIndex--; + if (patternIndex < 0) + patternIndex = StencilBuilder.getStencilCount() - 2; + } + + ItemStack stack = StencilBuilder.getStencil(patternIndex); + logic.setInventorySlotContents(1, stack); + updateServer(stack); } } diff --git a/src/main/java/tconstruct/tools/logic/StencilTableLogic.java b/src/main/java/tconstruct/tools/logic/StencilTableLogic.java index 135b16b1..037499f9 100644 --- a/src/main/java/tconstruct/tools/logic/StencilTableLogic.java +++ b/src/main/java/tconstruct/tools/logic/StencilTableLogic.java @@ -7,6 +7,7 @@ import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.util.StatCollector; import net.minecraft.world.World; +import tconstruct.library.crafting.StencilBuilder; import tconstruct.tools.TinkerTools; import tconstruct.tools.inventory.PatternShaperContainer; @@ -47,12 +48,9 @@ public class StencilTableLogic extends InventoryLogic implements ISidedInventory public void setInventorySlotContents (int slot, ItemStack itemstack) { super.setInventorySlotContents(slot, itemstack); - if (slot == 0 && itemstack != null && itemstack.getItem() == TinkerTools.blankPattern)//instanceof tconstruct.items.Pattern) + if (slot == 0 && itemstack != null && StencilBuilder.isBlank(itemstack)) { - if (itemstack.getItemDamage() == 0) - setInventorySlotContents(1, new ItemStack(TinkerTools.woodPattern, 1, 1)); - /*else if (itemstack.getItemDamage() == 1) - setInventorySlotContents(1, new ItemStack(TContent.metalPattern, 1, 0));*/ + setInventorySlotContents(1, new ItemStack(TinkerTools.woodPattern, 1, 1)); } } From bd997ab05e6b56a48fefa4757057dbc3fafcafbd Mon Sep 17 00:00:00 2001 From: Bernhard Bonigl Date: Wed, 20 Aug 2014 22:23:12 +0200 Subject: [PATCH 2/5] Rework stencil table GUI --- .../assets/tinker/textures/gui/icons.png | Bin 23144 -> 8643 bytes .../tconstruct/library/client/GuiElement.java | 15 ++++ .../library/client/StencilGuiElement.java | 11 +++ .../client/TConstructClientRegistry.java | 23 +++++ .../library/crafting/StencilBuilder.java | 2 +- .../java/tconstruct/tools/TinkerTools.java | 45 ++++++++-- .../tconstruct/tools/ToolProxyClient.java | 60 +++++++++++++ .../tools/gui/GuiButtonStencil.java | 50 +++++++++++ .../tconstruct/tools/gui/StencilTableGui.java | 85 +++++++++++------- 9 files changed, 252 insertions(+), 39 deletions(-) create mode 100644 src/main/java/tconstruct/library/client/GuiElement.java create mode 100644 src/main/java/tconstruct/library/client/StencilGuiElement.java create mode 100644 src/main/java/tconstruct/tools/gui/GuiButtonStencil.java diff --git a/resources/assets/tinker/textures/gui/icons.png b/resources/assets/tinker/textures/gui/icons.png index 38ffb143e896ba4d3718d33e5c55ea5b875b3150..a1cd9908b9406ad636400c93e049d79f72443025 100644 GIT binary patch delta 8216 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 literal 23144 zcmeI4c{r5q+xYLX6C&BgWG`Xt8f&)5TF6dgj3vWNX6*Zuozg~jB~jKwD2eP*M2nqJ z$)0_icyHD7JU#O~U+?#Kyx-sZ{$q{hJywG06HCQ zjWYlM0pCIZDhlwAwZ}b2@DDXs+X4pw`N!@4`w8bK-n0RGj*#2jy~uLnnB+{6$L7<-hM zj~f=87624ge6R?lD+&*_M>)B;EAh@%)$l@H9F%y?Wb|SBSap=Mi?*K!%Gl4q1nK9B zJnq1&qD-Uc0|yPbq3{T(j~m(@2lr9p{caZyzTasU=Y@Xnf_GKoJ+U(()Lh>Ps*dqM zL1n~XqDYu53@R%jCLtv)Cnt9dDhZQ-iNhqtB_u^9E^++$@f|aglA>S_QJk+k9^oVEj^q1b+wm1&epVxI=gBBJ44qcqLxmor(T<{alwD_K%4`q(9h!6vcfISaAt4nD`%-!GVe( z6S%qu3W3LXm|!qyn2>IA;tNs%|U;HFI%yzn#fdxrIs2b>P#Oq4N*Sah zB?>z(3X?E_NyDWj;nJWe4Kn)0$d8^xHuNzLE{?wcWJ3-PqW;CkFFlEEfZlXK;1U0p zm0$b*w4*4#gZLNZ-~G8mi>Up-bAPzEnY%*Dk4E-9_4F0G}ep>bS7Qd3Go;)JG@oV=Wt<_VY# z?6`#1kHG)y(7%Q)sMEk8J$EAGr&)&`vr_+_*?m;*L zxl;#~kvnAz<)A43m)1Woi+GsJKRE5brTfG7FGK&eeQ#%!`)-BrhpF$q{w}Vv)`WcPEsC zviR@8`g_B_=dT}L{A(6{-$=olL6mj>vAqlL;`rx*8q) zJ5^FrM)v0*V$DB}wD^}Jf6?rU<_9qF;0vC)#s4^T|E&Q1QJw#jZ~k1;f6^+Et-VQz zfb1^r;o6-Kk#-Lk5s=-*JzTrcv z?&2P<-T4q{_izyb*7AiIluxOV45q}{_s1Y~z{57+K|h_rjSh=A-a z?%~><50Q2c7ZH%%#XVfR^C8mi;UWUEySRsIcRobgJzPXUb{F?>?aqftyN8Pi$nN4E zuHE?%Y4>mu0oh&L!?imfBJCb7A|Shqd$@MzL!{lqMFeDbaSzw-e2BDrxQKx4F7Dyl zoez)_i(!***g-`l~W9VSIW9jXpMK+Qb=JHXILL?64Yyx3GsZnb6u1g0a_7?33XJ5H zP*>S6_*FZj(P16qv5d}0Bwt@&pV65!_D_y=%3IbOun27_4IW5^JJx0E03p7MpCLd= zX(>dtPlklK;^9L^z+O2w-8`=dpvu>pN;VfBH&u#c4Kj;=S;R_5r|3qf8ogazwEAEz z^~#%E)YAHP|4Ff1BMdJy6d|g45nRz4ALf0Gu-ju@ErByBvG1C)IXa7MsvdaFSWYba ziKd1e_yUSXr%yBTwU?L63UKJ6qMNP)VYY;g5^@sATEMd~!4DefC*8{uv#ohY3o{?s zlT0o`YQaIEVXoxzJXRD*EUP#R9UWa_L(TGCJ|Lv#o2?jqd0DpNwhIb~Y4;9o_ZF9r z0m*(?_S1Y@2mzRxnJe8VC|*AGr%h?)PV~}K9ln>vD>2xz{G0KohxR0XWAp0)Mn*12-(nyYQym%t8acXW8E6U!|@TDA&-slAc}|r)v3%%p~w6FQat29Yse& z{;_ob>NUQrRJ>QIMoR@tM>{yYnPdxZIJLuX20|09HpTt}+g+TpVnfJ|BLl zlsp9UjgVBh==o9HY~;O+(CatvE_#+)T}@5pyiT389w1IA;szeL+?_^VzGM~Os*o!d zhsg&*5EJ&m9SoaDj(*Kaz0@GXnz+vKj+ZwoZ2f6{m1>^nklRo_Tfx`)l1PnKys6hD z&%KmyW#!NLX0$ODqBm|pt2hjBHno zb-Upr`CF&WnYRbnkq>%%Q=f^3+KhYsHj9 z3|?Vg_s8SYUrQ<&bI*j9$;T&%vz(`pmyv~AX4U8|ejX+-atR1CU zERjaW;>)Sgp)cc}ZGo=&;5)%Z&(rUc7uw9}kc~{OWodEd@?GmOKs1qQ1#FZn_K^DWrv--j6xC_QG#VSi+35py71&qXRXAk`RWG_R{jnQ^PQ%2InEM zog!mtcS`ZbmruI&@_q*zbsVqFk z(3?7aet6ZW+4y;|^wgbG>-9Q5n?|!fY@_g1qx*99s39lm+W2tu|AY$PXG=(MttPCWCg12E2RREO64%2b&B zc=i2J4gaUwC@%X4c9Yca>Qg zH>Y4$2ed@FZ|uC`RB}{OS@3w{Rdb18E?`L_)V$Q43COl#`Z{QJthD(vV&Tg>X9ZJd zU3~cQ>iYOs7_R0Qy&W-MJE6c-bxrE1VH@p-hG_c!W_aPWvpVz4;JCHL#X{N_FT#e? zb-FxDm4ctH)u%f#(etEbSIp1Xr8_sp{mjEu6H*uf8ic)!d z(Zpskr>4fYF|R)YLOL!}%tXIK&F7{=8Vo7u54xwxSBzF(eOKn4IrZ&+EYgf{p((M% zx|NI;*-$8FBzVr0a5X+2iNi%JM_k(QHAcJ7Ru^)JGGCthl$SrpSZmPird|2yu(rNF z-Q?8Np=OJkAf=Vr!6|wARZ=KF3t!>BBLZOz1&7qSUIXa;khB5|L+0kfK~u4AC+Nle zjCVyU?$b+BZ`s{f!z>5co6d8I=pLStZK)(z(9u6>$tBWj(eh@P7vFZTFv_ClvWlg6 zQQDie!s^jR+e++hF9R1cF^&-1va_?^h5|u>cZ@^|H|oir+7_3e!Suf`>|2COX|Dx+ zLZQr0TMvw{U%Pf-Kn6*1_8=>AvFTFI&HI)NY1k6OjLvdvuMSiG11DTvMP5#uFxA9$ zzqovSKC8GOuWPhDS&EX<%CfA3h56|*>q?`U`%o7WmL~ES2KR29iKs^$xqIX6`zoQB z>&GJe(g#;1VpwS@P%yR|u7sc&?`3a!E(3ExQ~KiW{A#U3cQWk8R&|TJMW!Yvxe|^) z3wl{F<~^3?TWxzM(klSQCjG7V?S;G`Q0ri0lOE7eG2}5=Fu(bUqsA^aSA}&FfsgYG z9D3V1umR6oUW;@gtsEGg+s|Y~!5|(a5Kw*V60K^r*t_~@2-`cHJXeGblTie!oW9yt zd~$ME~>?16xi1#mtTIK@JR zN}3uI)*c`g*jj5k$c(LtQc0k`=aIjiZ+m2`QYNUzjTDyWRNTGq$X!v=*WIa&8(#cD z-!}7+vuRI^n6@AEcC@}gHGf(V&AtA8XYd$ooerCGD_4{bZJ=O~qP%4g5p-3HkTg8| z@ob4i@X@UPQ!o1ZEN|Sn(Q*zZOhZG%WfsM8J@0W`d3kwuu^Cf>$Steu&o10qsq!0Y z=L$KkM9Ki34a(`nE$zJ8Z;m7lzwGnBqf6p2ZB7;l09F$c@Awmv^RC|2 zZmX-054W^tf8M&|LWMT%746|x=NV;guh1J-~{B2pG|rN z3~-QqF+O+4kDlTpRb+j+UvQw(@#AJ28NnXC7id$zp$Ag7-`=xTbRuZqS6;mr>Gk6D z{+UxLke8XsN495+n_QcFC)Sgx&0hk%hx)@PuXLs(9FSxAq<_!~fg^qx zU0CF_G)oW}-q2K=??2KO_OP4neQYxNRg2;PLofk*u6?N(SvQ?IG42yl#-8+qxw2v* zer%#!sN9-dXZkWbD5REik&#~-2vm;&j~x4<#o^0MzE1B` zlVB?xPkXGRGYB5WB#-(wIj3p)DtOjZlh|V;6i81kk(RKi+HrSeS82*u(q$anr0iq1 zK4p2dVVW^{p{Fa*d?V1QH>G!`>&)%0?Jq+yB`O{I?-qrO$_XqcO2H)imDiy3T=F4! z`$}ceRE4q1d4mTm98NFAWa>jY`d2F50l>a%E1mUZ>z5pcKs{)(>VUJk7SgnIc`O-U zVPqyXy+UwDpO!^T%Q$ZrD`4GMyvWeACSzI_8_1WLF|)JoJF}?RN<$W7<<50xX->!p zLGOk++27`p-Lx?FcD#F@Y(rN$P>5_ZK5d@w)02eWGc%8G-cxk1$@Mc=YPz(^R`ATb zWHCW1$YCx(6>m^G;p<&Ww=4wa?84jo#tWZr+9gih0*ly{GxpQj+S9^!f6sSxd2b0V9al3_^TjA67+#>XR|Vc8N|6tK8=YT6rW;68JS zz5OUQ(R3oxxPZQU>Mcz{Fh}htw`{P~x#G#m$*<9M9#Xq~rKj4z;(qsR&qLDUnk~2- z0ow_DL}7bG9*^HRwYDMJ_!f7Xk3nn|>w-G!Hy>F)5>~9>yTGqZ_^RGEFC{7YF?=7Z zMoRhc4IH4hYP@}gzN>Vtl}T2ly->2D`MOtw9k?T{^ptywD01(w8^N|>$Zf|~W3loB z<0H#{;TywX5r6yc9d%@;D|E6&=34Zy7&|-r0%3iTmyfT0cKm8vMH)-JqlyB*p0D{e zZlSG)sY|u@*U~v6`?Va7J944M!Svy^?TX*|{xh#XgmVT=23-HIKxoO+&B*9R5ogbYNV*Tt>S$5g ze2DIqOj8NAwGLc<=NL(vvR2wOc<}nG!u+DdO0`H5M{&}aN8yMbB}ugEOqpsa7#E8t?{5~uEOS|Y-2GhCNGyhvL39{6Lxv$V2$H2(9h)2E?gE9NDz zu_<{gRjKB6Zj#rS1}59IRqKef;P=QF-D@woA>HuMAmBTbr)= zJptWBXS=Y;c^`&o4e9xs{vl7Uy6GCnru%|tjp2K_X-MbfRjJ)JAwtv`^$6*t%CbSi3z5rB*4~q^+n;N(fV%*qcLfe zZ0_m-?zE&IvKY;0zMZzQDfH97y*a2y$^ho7Bo}?`nnkd{R$3ZY@4!G>89H8h!#OyP z`4M-kqf&H=|7PH|_6ye4YlTCkw+`yy^lRPyD`Bm5>&+= zV!^~<@Md{SmD+ZBWn=hy=TdXt5XI|2gI8bkUAI!cLZAt2@3vQG2RV_78n};eUpef_?rXaPLuoT%k8OSwilj%1G?rUCp5Nyzo|JV*kd%zKPK$*7+=b6Ykq* z8O|;b;l$mVq9sCA3ZL1yFFCe#zR~*de0eU)*%4YuWwMPmUfU_Fn;kXKrO~;$q2cos z;62QSiEeP*AZ^`*Ak^~wAse#nEf!f#t~VFKuPn5>%qSFe35+(O&4c_0w}X|pOGM`@ z9z8m7>OKosbP!8$9Q8qF=IFe@&<%6wl zZJNHmj|;z%?`%nV9}Fa}jLNwJUYf4_wq|}8a`{55H{tB^;_RIHEnG(IB2M#E8N>AVQPn`2dm6D&wL3l&X9|>Jbh1= zQKHY{URfEwwqfq;Qw8SWOvKf2B`%1nVA5Kwi-I?ygcjpxjCt-gQb&H_+j4i?!h#1x zwcm336mv}?ix8uVbrRt!1(R=AxR3kIS30z97nW{r;m4mF96KVO@%$tYmuhpg+*hqP zJP=jovVf~I9Zc!LSnCQf9)*t{^{}qlkk{1IyqA|J$z-ftxpn9uW#8!3yRV*(ZAn+J z9u8j4w{v0g1~;<@l1FwLbXUW_-if&RRc?EQXKi*P__tK1nEPei+u9C52@kpKxhyG! zF!sJ)4lVSBMrNKYSA6;N5Bsa9wiI~-)g|T2L=wRJai_LeX06{Kd8VeIq+`OZ~=A8s4C~R zC@T(Hrj3NSINIYzI|dJKCxqjV2353-xOhdp78 zVh0X$kuY@W+SnY*zVX$sx*$$Eq=JM=e{J#eD^fsl@ugJ36+AcVm8JTrW&6QabXYxN zWlPPxpYKWSoP$| z$PG)6I@%ER5WF-*jr0TSMTR;w4`4=m;M)7wz(22%XvzNzB3+27DivJ_19)T&1Fz~Z zxY++I@oyggUs(P>M%upt!VF$-LH^=JTN{oG`Qn;@u&AgfS8h&@qfsMuxSDyj-y{5; zAVN?Lb}T^W$X(85siamWn(!-`nc~g>X#;qC;W|{@aMsv(OnB$NY^QW}ZDK(^S7UFL zcd_g8*y^T@f}Q)@_|!_%j+^fQ@WZ2##Zc9d%c?C#JS1c!5T9yWX<6B;5G{(WC`( zY7t~P;-u}F$kbYm3H&VS`Bz$Q~t?YE1hfyML;Y7ti;{8Q`8 zf~r*P_7qnN#&f9|B*W-x^*Rix*x?P<6zDnS$d#FK;UKlHPCz(7tt)^&gyC8aJ1`NO zn(ABmuzjFV{RE`3gR~8e=3!TY+JUgyTmbsp^IK6g7JUpgFrS`Y3DZ8s%MA98_R!D|{6L(aGppdu zLy_c+tp_`FV@D$|jZxixe|LH@q|vQS03f?~qLk!@7>xy7dOui@=xJ5^U=Sfe#EJ}< z(P)lZ*uGKLjZAtkvJ!>hD|y!7lqsZNuK#v2zO+wDH`ejor)998bvrQXA9U%U_kO{t zN9hi9ztssfC`I%$)?6y<*RDOQr`AK@Im}O8kB%CS`O0rU2YGNb2!Rkj!3S*!r>%`! zdzBKR4Yd@pXQp5egGoq3!_1`tk stencilButtons = new ArrayList(); + public static ArrayList stencilButtons2 = new ArrayList(); public static ArrayList toolButtons = new ArrayList(20); public static ArrayList tierTwoButtons = new ArrayList(); public static Map manualIcons = new HashMap(); @@ -103,6 +105,27 @@ public class TConstructClientRegistry } //Gui + public static void addStencilButton (StencilGuiElement element) + { + stencilButtons.add(element); + } + + public static void addStencilButton (int xButton, int yButton, int index, String domain, String texture) + { + stencilButtons.add(new StencilGuiElement(xButton, yButton, index, domain, texture)); + } + + public static void addStencilButton2 (StencilGuiElement element) + { + stencilButtons.add(element); + } + + // adds a button to the right side of the stencil table + public static void addStencilButton2 (int xButton, int yButton, int index, String domain, String texture) + { + stencilButtons2.add(new StencilGuiElement(xButton, yButton, index, domain, texture)); + } + public static void addToolButton (ToolGuiElement element) { toolButtons.add(element); diff --git a/src/main/java/tconstruct/library/crafting/StencilBuilder.java b/src/main/java/tconstruct/library/crafting/StencilBuilder.java index c64fb41d..8654c51f 100644 --- a/src/main/java/tconstruct/library/crafting/StencilBuilder.java +++ b/src/main/java/tconstruct/library/crafting/StencilBuilder.java @@ -46,7 +46,7 @@ public class StencilBuilder { */ public static int getIndex(ItemStack stencil) { for(int i = 0; i < instance.stencils.size(); i++) - if(ItemStack.areItemStackTagsEqual(stencil, getStencil(i))) + if(OreDictionary.itemMatches(stencil, getStencil(i), false)) return i; return -1; diff --git a/src/main/java/tconstruct/tools/TinkerTools.java b/src/main/java/tconstruct/tools/TinkerTools.java index 0ccf1be2..c9f61f08 100644 --- a/src/main/java/tconstruct/tools/TinkerTools.java +++ b/src/main/java/tconstruct/tools/TinkerTools.java @@ -355,13 +355,7 @@ public class TinkerTools registerMaterials(); - // register stencils/wooden patterns in the stencil table - StencilBuilder.registerBlankStencil(new ItemStack(TinkerTools.blankPattern)); - - for(int i = 1; i < 26; i++) { - if(i == 22) continue; // hide full guard - StencilBuilder.registerStencil(TinkerTools.woodPattern, i); - } + registerStencils(); //TODO: Redesign stencil table to be a sensible block @@ -945,4 +939,41 @@ public class TinkerTools pb.addToolPattern((IPattern) TinkerTools.woodPattern); } + + private void registerStencils() + { + 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(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(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(TinkerTools.woodPattern, 10); // frying pan + StencilBuilder.registerStencil(TinkerTools.woodPattern, 11); // battlesign + StencilBuilder.registerStencil(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(TinkerTools.woodPattern, 8); // crossbar + StencilBuilder.registerStencil(TinkerTools.woodPattern, 7); // small guard + StencilBuilder.registerStencil(TinkerTools.woodPattern, 6); // wide guard + + StencilBuilder.registerStencil(TinkerTools.woodPattern, 25); // arrow head + StencilBuilder.registerStencil(TinkerTools.woodPattern, 24); // fletchling + StencilBuilder.registerStencil(TinkerTools.woodPattern, 23); // bowstring + } } diff --git a/src/main/java/tconstruct/tools/ToolProxyClient.java b/src/main/java/tconstruct/tools/ToolProxyClient.java index b093adea..6932aafd 100644 --- a/src/main/java/tconstruct/tools/ToolProxyClient.java +++ b/src/main/java/tconstruct/tools/ToolProxyClient.java @@ -6,6 +6,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; import net.minecraft.world.World; import net.minecraftforge.client.MinecraftForgeClient; import net.minecraftforge.client.event.sound.SoundLoadEvent; @@ -23,6 +24,7 @@ import tconstruct.common.TProxyCommon; import tconstruct.library.TConstructRegistry; import tconstruct.library.client.TConstructClientRegistry; import tconstruct.library.client.ToolGuiElement; +import tconstruct.library.crafting.StencilBuilder; import tconstruct.library.crafting.ToolBuilder; import tconstruct.library.tools.ToolCore; import tconstruct.smeltery.TinkerSmeltery; @@ -63,6 +65,7 @@ public class ToolProxyClient extends ToolProxyCommon registerManualIcons(); registerManualRecipes(); addToolRenderMappings(); + addStencilButtons(); addToolButtons(); } @@ -325,6 +328,63 @@ public class ToolProxyClient extends ToolProxyCommon MinecraftForge.EVENT_BUS.unregister(this); } + void addStencilButtons () + { + int[][] icons = { + {0,3}, // tool rod + {1,3}, // binding + {8,3}, // large tool rod + {9,3}, // large binding + + {0,2}, // pickaxe head + {3,2}, // shovel head + {2,2}, // hatchet head + {8,2}, // scythe + + {11,2}, // hammer head + {10,2}, // excavator head + {6,2}, // lumberaxe head + {9,2}, // large plate + + {}, + {4,2}, // frying pan + {5,2}, // battlesign + {7,3}, // chisel + + {}, + {7,2}, // knifeblade + {1,2}, // swordblade + {6,3}, // cleaver blade + + {}, + {4,3}, // crossbar + {3,3}, // small guard + {2,3}, // wide guard + + {}, + {11,3}, // arrow head + {12,3}, // fletchling + {10,3}, // bowstring + }; + + int i = 0; + for(ItemStack stack : StencilBuilder.getStencils()) { + // spacer + while(icons[i].length == 0) + { + addStencilButton(0,0, -1); + i++; + } + addStencilButton(icons[i][0], icons[i][1], StencilBuilder.getIndex(stack)); + i++; + } + } + + void addStencilButton (int xButton, int yButton, int index) + { + TConstructClientRegistry.addStencilButton(xButton, yButton, index, "tinker", "textures/gui/icons.png"); + } + static int[][] itemIcons = { new int[] { 0, 3, 0 }, // Repair new int[] { 1, 4, 0 }, // Pickaxe new int[] { 2, 5, 0 }, // Shovel diff --git a/src/main/java/tconstruct/tools/gui/GuiButtonStencil.java b/src/main/java/tconstruct/tools/gui/GuiButtonStencil.java new file mode 100644 index 00000000..a59dc7ad --- /dev/null +++ b/src/main/java/tconstruct/tools/gui/GuiButtonStencil.java @@ -0,0 +1,50 @@ +package tconstruct.tools.gui; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; +import tconstruct.library.client.StencilGuiElement; +import tconstruct.library.client.ToolGuiElement; + +public class GuiButtonStencil extends GuiButton{ + /** + * True for pointing right (next page), false for pointing left (previous + * page). + */ + int textureX; + int textureY; + public String texture; + public StencilGuiElement element; + private static ResourceLocation background; + + public GuiButtonStencil(int id, int posX, int posY, int texX, int texY, String domain, String tex, StencilGuiElement e) + { + super(id, posX, posY, 18, 18, ""); + textureX = texX; + textureY = texY; + texture = tex; + element = e; + background = new ResourceLocation(domain, tex); + } + + /** + * Draws this button to the screen. + */ + @Override + public void drawButton (Minecraft mc, int mouseX, int mouseY) + { + if (this.visible) + { + boolean var4 = mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height; + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + mc.getTextureManager().bindTexture(background); + + this.field_146123_n = mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + this.width && mouseY < this.yPosition + this.height; + int var5 = this.getHoverState(this.field_146123_n); + int index = 18 * getHoverState(field_146123_n); + this.drawTexturedModalRect(this.xPosition, this.yPosition, 144 + index * 2, 234, 18, 18); + this.drawTexturedModalRect(this.xPosition, this.yPosition, textureX * 18, textureY * 18, 18, 18); + } + } +} diff --git a/src/main/java/tconstruct/tools/gui/StencilTableGui.java b/src/main/java/tconstruct/tools/gui/StencilTableGui.java index f7a9dc24..b5d9c5fe 100644 --- a/src/main/java/tconstruct/tools/gui/StencilTableGui.java +++ b/src/main/java/tconstruct/tools/gui/StencilTableGui.java @@ -11,6 +11,9 @@ import net.minecraft.world.World; import org.lwjgl.opengl.GL11; import tconstruct.TConstruct; +import tconstruct.library.client.StencilGuiElement; +import tconstruct.library.client.TConstructClientRegistry; +import tconstruct.library.client.ToolGuiElement; import tconstruct.library.crafting.StencilBuilder; import tconstruct.tools.TinkerTools; import tconstruct.tools.inventory.PatternShaperContainer; @@ -20,13 +23,13 @@ import tconstruct.util.network.PatternTablePacket; public class StencilTableGui extends GuiContainer { StencilTableLogic logic; - int patternIndex; + int activeButton; public StencilTableGui(InventoryPlayer inventoryplayer, StencilTableLogic shaper, World world, int x, int y, int z) { super(new PatternShaperContainer(inventoryplayer, shaper)); logic = shaper; - patternIndex = 0; + activeButton = 0; } @Override @@ -62,24 +65,42 @@ public class StencilTableGui extends GuiContainer public void initGui () { super.initGui(); - int cornerX = (this.width - this.xSize) / 2; - int cornerY = (this.height - this.ySize) / 2; + + int bpr = 4; // buttons per row! + int cornerX = this.guiLeft - 22*bpr; + int cornerY = this.guiTop + 2; this.buttonList.clear(); - /*ToolGuiElement repair = TConstruct.toolButtons.get(0); - GuiButtonTool repairButton = new GuiButtonTool(0, cornerX - 110, cornerY, repair.buttonIconX, repair.buttonIconY, repair.texture); // Repair - repairButton.enabled = false; - this.buttonList.add(repairButton);*/ - this.buttonList.add(new GuiButton(0, cornerX - 120, cornerY, 120, 20, (StatCollector.translateToLocal("gui.stenciltable1")))); - this.buttonList.add(new GuiButton(1, cornerX - 120, cornerY + 20, 120, 20, (StatCollector.translateToLocal("gui.stenciltable2")))); - //for (int iter = 0; iter < TConstructContent.patternOutputs.length; iter++) - //{ + int id = 0; + for (int iter = 0; iter < TConstructClientRegistry.stencilButtons.size(); iter++) + { + StencilGuiElement element = TConstructClientRegistry.stencilButtons.get(iter); + if(element.stencilIndex == -1) + continue; + GuiButtonStencil button = new GuiButtonStencil(id++, cornerX + 22 * (iter % bpr), cornerY + 22 * (iter / bpr), element.buttonIconX, element.buttonIconY, element.domain, element.texture, + element); + this.buttonList.add(button); + } - /*ToolGuiElement element = TConstruct.toolButtons.get(iter); - GuiButtonTool button = new GuiButtonTool(iter, cornerX - 110 + 22 * (iter % 5), cornerY + 22 * (iter / 5), element.buttonIconX, element.buttonIconY, element.texture); // Repair - this.buttonList.add(button);*/ - //} + // secondary buttons, yay! + // these are to use for other mods :I + cornerX = this.guiLeft + this.xSize + 4; + for (int iter = 0; iter < TConstructClientRegistry.stencilButtons2.size(); iter++) + { + StencilGuiElement element = TConstructClientRegistry.stencilButtons2.get(iter); + if(element.stencilIndex == -1) + continue; + GuiButtonStencil button = new GuiButtonStencil(id++, cornerX + 22 * (iter % bpr), cornerY + 22 * (iter / bpr), element.buttonIconX, element.buttonIconY, element.domain, element.texture, + element); + this.buttonList.add(button); + } + + // get the correct setting :I + if(logic.getStackInSlot(1) != null) + activeButton = StencilBuilder.getIndex(logic.getStackInSlot(1)); + + setActiveButton(activeButton); } @Override @@ -88,28 +109,30 @@ public class StencilTableGui extends GuiContainer ItemStack pattern = logic.getStackInSlot(0); if (pattern != null && StencilBuilder.isBlank(pattern)) { - if (button.id == 0) + int id = ((GuiButtonStencil)button).element.stencilIndex; + ItemStack stack = StencilBuilder.getStencil(id); + if(stack != null) { - patternIndex++; - if (patternIndex >= StencilBuilder.getStencilCount() - 1) - patternIndex = 0; + logic.setInventorySlotContents(1, stack); + updateServer(stack); } - else if (button.id == 1) - { - patternIndex--; - if (patternIndex < 0) - patternIndex = StencilBuilder.getStencilCount() - 2; - } - - ItemStack stack = StencilBuilder.getStencil(patternIndex); - logic.setInventorySlotContents(1, stack); - updateServer(stack); } + + setActiveButton(button.id); + } + + private void setActiveButton(int id) + { + // deactivate old button + ((GuiButton)this.buttonList.get(activeButton)).enabled = true; + // update active button + activeButton = id; + // activate the button + ((GuiButton)this.buttonList.get(activeButton)).enabled = false; } void updateServer (ItemStack stack) { - TConstruct.packetPipeline.sendToServer(new PatternTablePacket(logic.xCoord, logic.yCoord, logic.zCoord, stack)); } } \ No newline at end of file From 2e2c900f431f05eed602cd0efb43293d6706039e Mon Sep 17 00:00:00 2001 From: Bernhard Bonigl Date: Wed, 20 Aug 2014 22:23:49 +0200 Subject: [PATCH 3/5] Also have the GuiElement for the ToolStation/Forge use the common base with the Stencil GuiElement. --- .../tconstruct/library/client/ToolGuiElement.java | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/main/java/tconstruct/library/client/ToolGuiElement.java b/src/main/java/tconstruct/library/client/ToolGuiElement.java index 640ef286..a87efc5c 100644 --- a/src/main/java/tconstruct/library/client/ToolGuiElement.java +++ b/src/main/java/tconstruct/library/client/ToolGuiElement.java @@ -1,27 +1,20 @@ package tconstruct.library.client; -public class ToolGuiElement +public class ToolGuiElement extends GuiElement { public final int slotType; - public final int buttonIconX; - public final int buttonIconY; public final int[] iconsX; public final int[] iconsY; public final String title; public final String body; - public final String domain; - public final String texture; public ToolGuiElement(int st, int bx, int by, int[] xi, int[] yi, String t, String b, String d, String tex) { + super(bx, by, d, tex); slotType = st; - buttonIconX = bx; - buttonIconY = by; iconsX = xi; iconsY = yi; title = t; body = b; - domain = d; - texture = tex; } } From 85c866af643cb8eb9dfc65e984a3eae12bb39d79 Mon Sep 17 00:00:00 2001 From: Bernhard Bonigl Date: Wed, 20 Aug 2014 22:31:52 +0200 Subject: [PATCH 4/5] Fix ToolStation rendering --- src/main/java/tconstruct/tools/gui/ToolStationGui.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/tconstruct/tools/gui/ToolStationGui.java b/src/main/java/tconstruct/tools/gui/ToolStationGui.java index 5ce1d25b..dc93584d 100644 --- a/src/main/java/tconstruct/tools/gui/ToolStationGui.java +++ b/src/main/java/tconstruct/tools/gui/ToolStationGui.java @@ -454,7 +454,7 @@ public class ToolStationGui extends GuiContainer for (int i = 0; i < slotX.length; i++) { - this.drawTexturedModalRect(cornerX + slotX[i] - 4, this.guiTop + slotY[i] - 4, 140, 212, 28, 28); + this.drawTexturedModalRect(cornerX + slotX[i], this.guiTop + slotY[i], 144, 216, 18, 18); if (!logic.isStackInSlot(i + 1)) { this.drawTexturedModalRect(cornerX + slotX[i], this.guiTop + slotY[i], 18 * iconX[i], 18 * iconY[i], 18, 18); From 9ed65aace05e6f94b48b94e7fb64a6ed237986fb Mon Sep 17 00:00:00 2001 From: Bernhard Bonigl Date: Wed, 20 Aug 2014 22:38:24 +0200 Subject: [PATCH 5/5] Fix obsolete/weird todo comment ;P --- src/main/java/tconstruct/tools/TinkerTools.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/tconstruct/tools/TinkerTools.java b/src/main/java/tconstruct/tools/TinkerTools.java index c9f61f08..5e96d4c2 100644 --- a/src/main/java/tconstruct/tools/TinkerTools.java +++ b/src/main/java/tconstruct/tools/TinkerTools.java @@ -358,7 +358,7 @@ public class TinkerTools registerStencils(); - //TODO: Redesign stencil table to be a sensible block + // this array is only used to register the remaining pattern-part-interactions TinkerTools.patternOutputs = new Item[] { TinkerTools.toolRod, TinkerTools.pickaxeHead, TinkerTools.shovelHead, TinkerTools.hatchetHead, TinkerTools.swordBlade, TinkerTools.wideGuard, TinkerTools.handGuard, TinkerTools.crossbar, TinkerTools.binding, TinkerTools.frypanHead, TinkerTools.signHead, TinkerTools.knifeBlade, TinkerTools.chiselHead, TinkerTools.toughRod, TinkerTools.toughBinding, TinkerTools.largePlate, TinkerTools.broadAxeHead, TinkerTools.scytheBlade, TinkerTools.excavatorHead, TinkerTools.largeSwordBlade, TinkerTools.hammerHead,