From 4ffe81967d2f09b0babc4fd82d1c8efc5b7f54e4 Mon Sep 17 00:00:00 2001 From: DianeXD Date: Wed, 29 Jun 2022 22:48:09 +0800 Subject: [PATCH] Add NEI support for ExtraTrees --- .../java/binnie/extratrees/ExtraTrees.java | 2 + .../machines/lumbermill/Lumbermill.java | 2 +- .../java/binnie/extratrees/nei/IMCForNEI.java | 38 +++++ .../extratrees/nei/NEIExtraTreesConfig.java | 30 ++++ .../extratrees/nei/NEIHandlerLumbermill.java | 132 ++++++++++++++++++ .../textures/gui/nei/lumbermill.png | Bin 0 -> 8230 bytes 6 files changed, 203 insertions(+), 1 deletion(-) create mode 100644 src/main/java/binnie/extratrees/nei/IMCForNEI.java create mode 100644 src/main/java/binnie/extratrees/nei/NEIExtraTreesConfig.java create mode 100644 src/main/java/binnie/extratrees/nei/NEIHandlerLumbermill.java create mode 100644 src/main/resources/assets/extratrees/textures/gui/nei/lumbermill.png diff --git a/src/main/java/binnie/extratrees/ExtraTrees.java b/src/main/java/binnie/extratrees/ExtraTrees.java index fbdeee7b..1531d836 100644 --- a/src/main/java/binnie/extratrees/ExtraTrees.java +++ b/src/main/java/binnie/extratrees/ExtraTrees.java @@ -18,6 +18,7 @@ import binnie.extratrees.core.ModuleCore; import binnie.extratrees.genetics.ModuleGenetics; import binnie.extratrees.item.ModuleItems; import binnie.extratrees.machines.ModuleMachine; +import binnie.extratrees.nei.IMCForNEI; import binnie.extratrees.proxy.Proxy; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.SidedProxy; @@ -82,6 +83,7 @@ public class ExtraTrees extends AbstractMod { addModule(new ModuleCarpentry()); addModule(new ModuleMachine()); addModule(new ModuleCore()); + IMCForNEI.IMCSender(); preInit(); } diff --git a/src/main/java/binnie/extratrees/machines/lumbermill/Lumbermill.java b/src/main/java/binnie/extratrees/machines/lumbermill/Lumbermill.java index 02382cf3..d3549423 100644 --- a/src/main/java/binnie/extratrees/machines/lumbermill/Lumbermill.java +++ b/src/main/java/binnie/extratrees/machines/lumbermill/Lumbermill.java @@ -42,7 +42,7 @@ public class Lumbermill { return stack; } - private static void calculateLumbermillProducts() { + public static void calculateLumbermillProducts() { for (IPlankType type : WoodManager.getAllPlankTypes()) { for (ItemStack wood : getRecipeResult(type.getStack())) { Lumbermill.recipes.put(wood, type.getStack()); diff --git a/src/main/java/binnie/extratrees/nei/IMCForNEI.java b/src/main/java/binnie/extratrees/nei/IMCForNEI.java new file mode 100644 index 00000000..81dea3b7 --- /dev/null +++ b/src/main/java/binnie/extratrees/nei/IMCForNEI.java @@ -0,0 +1,38 @@ +package binnie.extratrees.nei; + +import cpw.mods.fml.common.event.FMLInterModComms; +import net.minecraft.nbt.NBTTagCompound; + +public class IMCForNEI { + public static void IMCSender() { + sendHandler("binnie.extratrees.nei.NEIHandlerLumbermill", "ExtraTrees:machine:0"); + + sendCatalyst("extratrees.lumbermill", "ExtraTrees:machine:0"); + } + + private static void sendHandler(String aName, String aBlock) { + NBTTagCompound aNBT = new NBTTagCompound(); + aNBT.setString("handler", aName); + aNBT.setString("modName", "Extra Trees"); + aNBT.setString("modId", "ExtraTrees"); + aNBT.setBoolean("modRequired", true); + aNBT.setString("itemName", aBlock); + aNBT.setInteger("handlerHeight", 76); + aNBT.setInteger("handlerWidth", 166); + aNBT.setInteger("maxRecipesPerPage", 4); + aNBT.setInteger("yShift", 6); + FMLInterModComms.sendMessage("NotEnoughItems", "registerHandlerInfo", aNBT); + } + + private static void sendCatalyst(String aName, String aStack, int aPriority) { + NBTTagCompound aNBT = new NBTTagCompound(); + aNBT.setString("handlerID", aName); + aNBT.setString("itemName", aStack); + aNBT.setInteger("priority", aPriority); + FMLInterModComms.sendMessage("NotEnoughItems", "registerCatalystInfo", aNBT); + } + + private static void sendCatalyst(String aName, String aStack) { + sendCatalyst(aName, aStack, 0); + } +} \ No newline at end of file diff --git a/src/main/java/binnie/extratrees/nei/NEIExtraTreesConfig.java b/src/main/java/binnie/extratrees/nei/NEIExtraTreesConfig.java new file mode 100644 index 00000000..0a818e22 --- /dev/null +++ b/src/main/java/binnie/extratrees/nei/NEIExtraTreesConfig.java @@ -0,0 +1,30 @@ +package binnie.extratrees.nei; + +import binnie.core.BinnieCore; +import binnie.core.nei.RecipeHandlerBase; +import codechicken.nei.api.API; +import codechicken.nei.api.IConfigureNEI; + +public class NEIExtraTreesConfig implements IConfigureNEI { + protected static void registerHandler(RecipeHandlerBase handler) { + handler.prepare(); + API.registerRecipeHandler(handler); + API.registerUsageHandler(handler); + } + + @Override + public void loadConfig() { + registerHandler(new NEIHandlerLumbermill()); + } + + @Override + public String getName() { + return "Extra Trees NEI"; + } + + @Override + public String getVersion() { + return BinnieCore.VERSION; + } + +} \ No newline at end of file diff --git a/src/main/java/binnie/extratrees/nei/NEIHandlerLumbermill.java b/src/main/java/binnie/extratrees/nei/NEIHandlerLumbermill.java new file mode 100644 index 00000000..d3dffc7c --- /dev/null +++ b/src/main/java/binnie/extratrees/nei/NEIHandlerLumbermill.java @@ -0,0 +1,132 @@ +package binnie.extratrees.nei; + +import binnie.Binnie; +import binnie.core.nei.NEIUtils; +import binnie.core.nei.PositionedFluidTank; +import binnie.core.nei.RecipeHandlerBase; +import binnie.extratrees.item.ExtraTreeItems; +import binnie.extratrees.machines.lumbermill.Lumbermill; +import codechicken.lib.gui.GuiDraw; +import codechicken.nei.NEIServerUtils; +import codechicken.nei.PositionedStack; +import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; +import net.minecraftforge.fluids.FluidStack; + +import java.awt.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class NEIHandlerLumbermill extends RecipeHandlerBase { + + @Override + public void prepare() { + if (Lumbermill.recipes.isEmpty()) Lumbermill.calculateLumbermillProducts(); + } + + @Override + public String getOverlayIdentifier() { + return "extratrees.lumbermill"; + } + + @Override + public String getGuiTexture() { + return "extratrees:textures/gui/nei/lumbermill.png"; + } + + @Override + public String getRecipeName() { + return StatCollector.translateToLocal("extratrees.machine.machine.lumbermill"); + } + + @Override + public void loadTransferRects() { + this.addTransferRect(75, 27, 24, 17); + } + + @Override + public void drawBackground(int recipe) { + changeToGuiTexture(); + GuiDraw.drawTexturedModalRect(0, 0, 5, 11, 166, 74); + } + + @Override + public void drawExtras(int recipe) { + this.drawProgressBar(75, 27, 176, 0, 24, 17, 40, 0); + } + + @Override + public void loadAllRecipes() { + Lumbermill.recipes.forEach((wood, plank) -> this.arecipes.add(new CachedLumbermillRecipe(wood, Lumbermill.getPlankProduct(wood)))); + } + + @Override + public void loadCraftingRecipes(ItemStack result) { + if (NEIServerUtils.areStacksSameTypeCrafting(ExtraTreeItems.Sawdust.get(1), result) || (NEIServerUtils.areStacksSameTypeCrafting(ExtraTreeItems.Bark.get(1), result))) { + this.loadAllRecipes(); + } else { + for (Map.Entry entry : Lumbermill.recipes.entrySet()) { + if (NEIServerUtils.areStacksSameTypeCrafting(entry.getValue(), result)) { + this.arecipes.add(new CachedLumbermillRecipe(entry.getKey(), Lumbermill.getPlankProduct(entry.getKey()))); + } + } + } + } + + @Override + public void loadUsageRecipes(FluidStack ingredient) { + if (NEIUtils.areFluidsSameType(Binnie.Liquid.getLiquidStack("water", 0), ingredient)) { + this.loadAllRecipes(); + } + } + + @Override + public void loadUsageRecipes(ItemStack ingredient) { + for (Map.Entry entry : Lumbermill.recipes.entrySet()) { + if (NEIServerUtils.areStacksSameTypeCrafting(entry.getKey(), ingredient)) { + this.arecipes.add(new CachedLumbermillRecipe(entry.getKey(), Lumbermill.getPlankProduct(entry.getKey()))); + } + } + } + + public class CachedLumbermillRecipe extends CachedBaseRecipe { + + public PositionedFluidTank waterTank = new PositionedFluidTank(Binnie.Liquid.getLiquidStack("water", 300), 1000, new Rectangle(28, 6, 16, 58)); + public PositionedStack bark = new PositionedStack(ExtraTreeItems.Sawdust.get(1), 123, 6); + public PositionedStack sawDust = new PositionedStack(ExtraTreeItems.Bark.get(1), 123, 48); + public PositionedStack wood; + public PositionedStack plank; + public List results = new ArrayList<>(); + + + public CachedLumbermillRecipe(ItemStack wood, ItemStack plank) { + this.plank = new PositionedStack(plank, 105, 27); + this.wood = new PositionedStack(wood, 53, 27); + + this.results.add(this.plank); + this.results.add(this.bark); + this.results.add(this.sawDust); + } + + @Override + public PositionedFluidTank getFluidTank() { + return this.waterTank; + } + + @Override + public PositionedStack getIngredient() { + return this.wood; + } + + @Override + public List getOtherStacks() { + return this.results; + } + + @Override + public PositionedStack getResult() { + return null; + } + } +} diff --git a/src/main/resources/assets/extratrees/textures/gui/nei/lumbermill.png b/src/main/resources/assets/extratrees/textures/gui/nei/lumbermill.png new file mode 100644 index 0000000000000000000000000000000000000000..5654ecf3f45e2611153dce15bb1be1b8d1116d0f GIT binary patch literal 8230 zcmeHMc{r49+aF3KQh10=O+!QtGh>FC$sqe4Mz(}8a}Q%1%-Gi=AyUX1ZOW4BX+cpT zdql#cWXqZ@vL@uasi&uo@BQO@j`w}Pzn=RzjQcvT^ZZ@c`8$7?%Xv(+v5__}wiLYK>Ru< z(~o-%;<-zQ~W!r|#4-(G2x@1;G{X%I+PN~~2jZTuRTK>3E zlM)`X^>%IAQk41J;`!-{`lZRwGbNs*See@SDcZRqghAFFDNlyy++gtPyTIh&g+^KH z#z%zSi~!f6OQ<{Yr;SeV=r@>u)=xb@dpl^G2~pLplYF@Meg3Td?~~} zcC38d6zC#@b8N`CYnie*=9+x9Zd9&PwQBNR-YD+#r`69UHk-I4=kMRtslK<0Zb@8D z+4`J~fJAyed0k!qgtrfV)96qQ#|{WqIH92_X0c!F+#yJtWeH!4?+y>?rFwWU&%SWO zPXugy)M54D85;$gGmWb73!dx>SWI~gYNrbSHdLFb4(diyVs?VFGk!3Y)MRx(!66aW zqLXk4u9^RkU++-fApAy>we>t!H9c=wrm)TWIHf6asHQcJ?Y4KXdOR^Lt90(Q3nP45 z#54QCnOO9gQ)@HweSBI@BYNDm0ii~(zG!ZH|3&^SH#IlT2Lncj8E=7(?jGY(^6K0w zZ(CPfx{A)Is=s>NEjXWm(Wrzp4Ki%Vg2{5Tu}%Iaf7~Y4_5!KVb)Kp@a|kU>Yn66@ z?Mj)YmvZ{l*hR^Bg+^pt_#Bb3ChMhjb=h!Gd0>INFb{ANtGaW@ET>a-;db@dR?mK- z`wLTP1>ug@sme{Rbup6^;S_C);>aQgsJHI%*NS4-jXt_W+?3c{a6Uc3QT*=no}T6t z5eI2V_m3|L>5YeqH1f9c-K@3ZD*g=-lL9sOJv7Oq|H5{EAsyDEE?VEgi|oJ7lDbaV zvxXH&;h06fZ+h_Y?ekf4WhLIFvcNY%Azv(p*OZ;+g%@Za<1?OoM8pdO94odQK zRJz^v=;!KjE;PNTEq+!h!lY4}W|{8s4xM;bxmRs~!lqCQUDLp`R}n|gkK8gH+s z*Iq69MUcz6IBk9u~wYtELF)ouI_C?LFP+YwdY)R88TzIcRj#~x#r(vU zoN!jr?U8My3^=dh^N)^Clzgtp=PwNPHAj;6 zKKi|_v9pw;WT^6m&k@t7Z=cqrI+pAgZ+_OX1&AF^^@tho;ZbpUL)4e>n~5^iERJpA zyjSaY(C?y?^kd+%)Q#-^E~AN$<|FnY?QneRp>wT~6#X2Qv>@Lz(R0q?gU>;$pwHk zJys!J;DJAGo)D+8`dT{=YMg@&xf&QeRe1Uo=cQKu7qxlA+dpU?JyLKsK+}kBd%K5A zE&ma5_p5?xyAt>xxOwF!Wz-R4MYR--d8t{>Cd$=lWF&IJ=z!^%57(E{nNMlA%X{PZ z)@6niVO@u^T;ALa+#Hm(u*}n24Q-7$n%P;oaF6KCbah_Cm6jBQ&{>D#Jha8ms#A2P zEb0=876euC_{8q>Yr@SFXQdrKx$OzJ-|5?cY@=Pi-}SiHO>cEVNY8-wa%XbuwUBcb zyQZbuUmm1|BB+Mq8No*#nZHFw$xI47e#CCA<#$sRS~T)V*n0DRbm{DA-LaZ+34z4& zm)4p=jO~%IeiO!1%v=&}>PpJR>*Hpok4+%C%emrCFZbnU+20`W>jew9>O^#Uovag{ z(3-9+nZ{`-h^?gebBC}col)%6*fe?A4%2_M#_1VM>yzNg2iS!28CTS>GU+s~BU+qK z*y;bKAHp z@;?h$&4pyc`UQ8I9C)QG6^^Vz6K zSUO3-Wr^zf@1n!fpS}-F$UZES0Ikp#trD@}zzOkO@F}`IPpNX!maNG>DT-C(xOa=T zud8L6!*x=+P)*4^?J9@JRttq_VYaEO4)Xqn$7PY4Xp2F9Lt%y;M;EWz)I?r#7Po6_ zr6pFkJvZBL;!1U%Z~aAksD$Cw9Nq`>q+P|CG0`^oUUSnCp*D<_9(DWhcKw;^)P;QM zvFAz^o+2WG8h4;^B|*yVwQ;8f!p^lVP^!i_ZbN5IT(dQaeT=8Q&<^&<3)dIrQhR2e z%ilRIHMJads9D*xN8s&Z{p_d3$K^_i72s!3t{o{+tSWrQ;nk|kE`f-u59g_l`_E{1 zKj2K~9DSQO;vNZjS$|QZZi_D14CmU>C2gXQKG7oh`P$>?1`DZiu4SP^7kb2J6HLRm z?qd(%z1jL|!>OeFOz~u+KS~}(sqFj2F1=I#3bVsJA<99k|CzH@+GJ8(+Oc*cZfFQ> zZ2zTQ_c%sbW4mQOYBXH=+CQS!pQN>H79WtUf4#b)j)U6@b+Q{$zYC!EYBzj{muXK2 zM&|Y<94?5##zou0!zkXYB%>B_N6Fx^=_oEWrR~TU+|aW?=eddBa7BGpstK`SzFfgW zHnc1B8S`rLkpiLOhQ>NktdgMc-fZl-cY8DYjtR^4iVg>gw;y|!JJ>FK%uPeoaUqxJ zozo1sgzZJQjQ2HY9JelY&ff9%Wv1bG|?3l++`#TRJEJJp9L)-2v1Y_<= z1^BkMC+SwE33uu%Hb~0hJ-02uCdfVp<)^;LYUTU-q@pfeKQyT1r6eYol(1yGXC%^DX}td8+)B&d z^Z1>-CropUsi`Ji={IVWB;0r1z#VY!=V&PwtFv^F?f}F@Go64>6LHQ;PMqn_?sD(3 zy)L<<$c$7c3U{4O`k>FwZA;2zj~F}`F=p5vqb966dwHSbxxB2iMa4F=rokxRHs>q5 zugf0^Q}4voVw;i&I(i!Y2N?VD@Hk4&=H7tI#FqDqr)99g7dQ{{jk&nw>_H={24b#T zrHkCK+S2xdD9T2iOZ^x&FgBzJq8Ew?cN9sJ(2Cp_uM zSAX;#55pUBU-Ho_Mr5Q)K98N?772-{N)gX@7cX8uo@RC-|E|01+3h#d-E;>V&79ev zX|)!?Jk^Vq8;8<)7YCoi^PR6rjik+) zvo~np{W?xsqAoP@kVd=4zShUshu^u2vYj+2?X2BimwZdx-@o}%2BS1krFQmfQdHi zyi74zEI z6l47P9(A#8$zs)?7pp%?sv9}EDF5Z=p;w{X<_aD^#V&e&fn?|18rt30w__K=c%h`W zwDeuz@}j|mvc0KcUPVkI&rJw~uaFKlc$S6+1Pa4VmP}&LsE|;TyOF@O|AZ2ZwFAuw006OG9IrI>QTqVPr9~NQ9;z-3JX<=7uSGQE3EI z4Xy7G;D`u!VzE33a&o@DzOugZvJ5XrITRj`mqViE&}ancfnfT(v&eo3cc%C{#5W8L zfJyP9d$8yXci1{6*@5BBBEsR|JnYZ?xp^2G{(yI9erEyXL(Y%vA%~Jh%DK78{T#t$ zY5IU5-#7FxBba7jpDbqzFd5!n6hPAlaA%4C3_+#*i1+aJa@|OWN|6Ix0XNW<39gFz zWl3#aL*pM2>l8TB-8?p;K(c@FWYKAVk@d^o)@L@-`FSH?_z&D)y#LI7!x{84G$d#+ zDBkPa)72ot*ViXd85BB|u<=Tx;Birf!LEFHv=r#S!)7#tn}1_KBTnM_0A0K5W19*IICk&09W2R!yCh@)O~ zP?coYpLewmMFpWSG^_)ahN2?KC>j-kLCRAQWDGz-;Aj{!g+>J^R5E@8ib^49F}&Q! zU^(e-WJf^G!`*RXVx4fp5o28<94(9d%VO+GX3@X^@C?x1sSID{UsGmuH-N+m(-tj`oAcbf`bB?f<%GLQfXkho_)ezuul~MHz&cY%@O&c`5NNC!N`Zhy63}?K z+hK1O^LA2v0>TA`~5H03MA8ON;+j*B|8lo9QW-q0j_0hJZr< zf25~?CSxfy@Q67m;@7K(0}wbQ76+CPjik^hG({x!n+X3?>EYMY!(s^X*#D38s1!v- zJXRiu0MH8P_39xJcoYtUKq_Jsa99)uP{h!F72CgAJ-itjML>b#{E?oL-1>#{=TTIW z`(KCko5N2x6e#L%Ht^;HFH*T5H|ck^gQfUyKHvXH{5O|?!Twp~Z}IyNUH{Paw;1?a z&i|eMBzPVfl#zg6A95DmGP44VAdaf#Xx}~S_Xb`Xenxh%zRT$R#CNEFm z?St;FujQo9puMdmNwS5rXHM!D`4?<~OuI3;YxBd)bLAF2A2q;hIl?UP+mNJQaiX4Ow^3Cl{Ug>KNt~ z6czyVo_y=Gv4u0YzTFzi|$0MLba&Q4eF}CIdj@ZU5Uvt0NwAbF1-8qiWcwkf81k}R>#$tcAO=EMe zOaG>}E6^P(Y@ZI77l(~Nj-CqHrm-U0<#Wk@xfdtEk~~mODii7aa`{>hZ-C-~Z|kZ; z4wrA{f`vit**EX#n}%E;NiE%z*dt!9z7yQv<{heGhWQY7u4xRL(V5Mb%6AUO4RMVw g@`059-yUuMO>vGFIH)fQ8`cAKHH|dxsM(+TAI_Z`?EnA( literal 0 HcmV?d00001