From 7ac1b6bafeb3997e0af01724e8272d7f5062f990 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 13 Sep 2016 02:30:43 +0200 Subject: [PATCH] Added an option for the Crafter to trigger autocrafting with a redstone signal, fixes #327 --- CHANGELOG.md | 1 + .../ICraftingPatternContainer.java | 4 +- .../container/ContainerCrafter.java | 2 +- .../java/refinedstorage/gui/GuiCrafter.java | 2 + .../SideButtonCrafterAutocraftSignal.java | 24 +++++ .../refinedstorage/tile/TileController.java | 14 +-- .../java/refinedstorage/tile/TileCrafter.java | 83 +++++++++++++++++- .../assets/refinedstorage/lang/en_US.lang | 2 + .../assets/refinedstorage/textures/icons.png | Bin 2918 -> 3003 bytes 9 files changed, 116 insertions(+), 16 deletions(-) create mode 100755 src/main/java/refinedstorage/gui/sidebutton/SideButtonCrafterAutocraftSignal.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 47f17aa82..98a86b449 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ### 1.0.1 - Fixed advanced tooltips showing in Grid when not configured to do so (raoulvdberge) - Added "autocrafting mode" in Detector, to check if an item is being crafted. If no item is specified, it'll emit a signal if anything is crafting (raoulvdberge) +- Added an option for the Crafter to trigger autocrafting with a redstone signal (raoulvdberge) ### 1.0 **NOTE:** Due to the new crafting system, all Crafting Patterns made before 1.0 have to be re-made. diff --git a/src/main/java/refinedstorage/api/autocrafting/ICraftingPatternContainer.java b/src/main/java/refinedstorage/api/autocrafting/ICraftingPatternContainer.java index 039774ed3..ea787b03c 100755 --- a/src/main/java/refinedstorage/api/autocrafting/ICraftingPatternContainer.java +++ b/src/main/java/refinedstorage/api/autocrafting/ICraftingPatternContainer.java @@ -3,6 +3,8 @@ package refinedstorage.api.autocrafting; import net.minecraft.util.math.BlockPos; import net.minecraftforge.items.IItemHandler; +import java.util.List; + /** * Represents the container where a crafting pattern is in. */ @@ -22,7 +24,7 @@ public interface ICraftingPatternContainer { /** * @return the patterns stored in this container */ - IItemHandler getPatterns(); + List getPatterns(); /** * @return the position of this container diff --git a/src/main/java/refinedstorage/container/ContainerCrafter.java b/src/main/java/refinedstorage/container/ContainerCrafter.java index c7d44e702..46354df4c 100755 --- a/src/main/java/refinedstorage/container/ContainerCrafter.java +++ b/src/main/java/refinedstorage/container/ContainerCrafter.java @@ -11,7 +11,7 @@ public class ContainerCrafter extends ContainerBase { super(crafter, player); for (int i = 0; i < 9; ++i) { - addSlotToContainer(new SlotItemHandler(crafter.getPatterns(), i, 8 + (18 * i), 20)); + addSlotToContainer(new SlotItemHandler(crafter.getPatternItems(), i, 8 + (18 * i), 20)); } for (int i = 0; i < 4; ++i) { diff --git a/src/main/java/refinedstorage/gui/GuiCrafter.java b/src/main/java/refinedstorage/gui/GuiCrafter.java index 7f578ebb3..c25f9d12d 100755 --- a/src/main/java/refinedstorage/gui/GuiCrafter.java +++ b/src/main/java/refinedstorage/gui/GuiCrafter.java @@ -1,6 +1,7 @@ package refinedstorage.gui; import refinedstorage.container.ContainerCrafter; +import refinedstorage.gui.sidebutton.SideButtonCrafterAutocraftSignal; import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; import refinedstorage.tile.TileCrafter; @@ -12,6 +13,7 @@ public class GuiCrafter extends GuiBase { @Override public void init(int x, int y) { addSideButton(new SideButtonRedstoneMode(TileCrafter.REDSTONE_MODE)); + addSideButton(new SideButtonCrafterAutocraftSignal()); } @Override diff --git a/src/main/java/refinedstorage/gui/sidebutton/SideButtonCrafterAutocraftSignal.java b/src/main/java/refinedstorage/gui/sidebutton/SideButtonCrafterAutocraftSignal.java new file mode 100755 index 000000000..dc1fb957f --- /dev/null +++ b/src/main/java/refinedstorage/gui/sidebutton/SideButtonCrafterAutocraftSignal.java @@ -0,0 +1,24 @@ +package refinedstorage.gui.sidebutton; + +import net.minecraft.util.text.TextFormatting; +import refinedstorage.gui.GuiBase; +import refinedstorage.tile.TileCrafter; +import refinedstorage.tile.data.TileDataManager; + +public class SideButtonCrafterAutocraftSignal extends SideButton { + @Override + public String getTooltip(GuiBase gui) { + return TextFormatting.GREEN + gui.t("sidebutton.refinedstorage:crafter.autocraft_signal") + TextFormatting.RESET + "\n" + gui.t("gui." + (TileCrafter.AUTOCRAFT_SIGNAL.getValue() ? "yes" : "no")); + } + + @Override + public void draw(GuiBase gui, int x, int y) { + gui.bindTexture("icons.png"); + gui.drawTexture(x, y + 2 - 1, 0, 144, 16, 16); + } + + @Override + public void actionPerformed() { + TileDataManager.setParameter(TileCrafter.AUTOCRAFT_SIGNAL, !TileCrafter.AUTOCRAFT_SIGNAL.getValue()); + } +} diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index 2c0692628..77aca3aee 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -466,19 +466,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR for (INetworkNode node : nodeGraph.all()) { if (node instanceof ICraftingPatternContainer && node.canUpdate()) { - ICraftingPatternContainer container = (ICraftingPatternContainer) node; - - for (int i = 0; i < container.getPatterns().getSlots(); ++i) { - ItemStack stack = container.getPatterns().getStackInSlot(i); - - if (stack != null) { - ICraftingPattern pattern = ((ICraftingPatternProvider) stack.getItem()).create(worldObj, stack, container); - - if (pattern.isValid()) { - patterns.add(pattern); - } - } - } + patterns.addAll(((ICraftingPatternContainer) node).getPatterns()); } } diff --git a/src/main/java/refinedstorage/tile/TileCrafter.java b/src/main/java/refinedstorage/tile/TileCrafter.java index 231be5fc2..3754aa245 100755 --- a/src/main/java/refinedstorage/tile/TileCrafter.java +++ b/src/main/java/refinedstorage/tile/TileCrafter.java @@ -1,33 +1,88 @@ package refinedstorage.tile; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataSerializers; import net.minecraft.util.EnumFacing; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.wrapper.CombinedInvWrapper; import refinedstorage.RefinedStorage; +import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.autocrafting.ICraftingPatternContainer; import refinedstorage.api.autocrafting.ICraftingPatternProvider; import refinedstorage.api.network.INetworkMaster; +import refinedstorage.api.network.NetworkUtils; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; +import refinedstorage.tile.data.ITileDataConsumer; +import refinedstorage.tile.data.ITileDataProducer; +import refinedstorage.tile.data.TileDataParameter; + +import java.util.ArrayList; +import java.util.List; public class TileCrafter extends TileNode implements ICraftingPatternContainer { + public static final TileDataParameter AUTOCRAFT_SIGNAL = new TileDataParameter<>(DataSerializers.BOOLEAN, false, new ITileDataProducer() { + @Override + public Boolean getValue(TileCrafter tile) { + return tile.autocraftSignal; + } + }, new ITileDataConsumer() { + @Override + public void setValue(TileCrafter tile, Boolean value) { + tile.autocraftSignal = value; + + tile.markDirty(); + } + }); + + private static final String NBT_AUTOCRAFT_SIGNAL = "AutocraftSignal"; + private ItemHandlerBasic patterns = new ItemHandlerBasic(9, this, stack -> stack.getItem() instanceof ICraftingPatternProvider) { @Override protected void onContentsChanged(int slot) { super.onContentsChanged(slot); + if (worldObj != null) { + rebuildPatterns(); + } + if (network != null) { network.rebuildPatterns(); } } }; + private List actualPatterns = new ArrayList<>(); + private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED); + private boolean autocraftSignal = false; + + public TileCrafter() { + dataManager.addWatchedParameter(AUTOCRAFT_SIGNAL); + } + + private void rebuildPatterns() { + actualPatterns.clear(); + + for (int i = 0; i < patterns.getSlots(); ++i) { + ItemStack patternStack = patterns.getStackInSlot(i); + + if (patternStack != null) { + ICraftingPattern pattern = ((ICraftingPatternProvider) patternStack.getItem()).create(worldObj, patternStack, this); + + if (pattern.isValid()) { + actualPatterns.add(pattern); + } + } + } + } + @Override public int getEnergyUsage() { int usage = RefinedStorage.INSTANCE.crafterUsage + upgrades.getEnergyUsage(); @@ -41,8 +96,24 @@ public class TileCrafter extends TileNode implements ICraftingPatternContainer { return usage; } + @Override + public void update() { + if (ticks == 0) { + rebuildPatterns(); + } + + super.update(); + } + @Override public void updateNode() { + if (autocraftSignal && worldObj.isBlockPowered(pos)) { + for (ICraftingPattern pattern : actualPatterns) { + for (ItemStack output : pattern.getOutputs()) { + NetworkUtils.scheduleCraftingTaskIfUnscheduled(network, output, 1, CompareUtils.COMPARE_DAMAGE | CompareUtils.COMPARE_NBT); + } + } + } } @Override @@ -60,6 +131,10 @@ public class TileCrafter extends TileNode implements ICraftingPatternContainer { public void read(NBTTagCompound tag) { super.read(tag); + if (tag.hasKey(NBT_AUTOCRAFT_SIGNAL)) { + autocraftSignal = tag.getBoolean(NBT_AUTOCRAFT_SIGNAL); + } + readItems(patterns, 0, tag); readItems(upgrades, 1, tag); } @@ -68,6 +143,8 @@ public class TileCrafter extends TileNode implements ICraftingPatternContainer { public NBTTagCompound write(NBTTagCompound tag) { super.write(tag); + tag.setBoolean(NBT_AUTOCRAFT_SIGNAL, autocraftSignal); + writeItems(patterns, 0, tag); writeItems(upgrades, 1, tag); @@ -85,7 +162,11 @@ public class TileCrafter extends TileNode implements ICraftingPatternContainer { } @Override - public IItemHandler getPatterns() { + public List getPatterns() { + return actualPatterns; + } + + public IItemHandler getPatternItems() { return patterns; } diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index 3bf9f90c2..29863d3b6 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -104,6 +104,8 @@ sidebutton.refinedstorage:detector.mode.1=Emit signal when on the amount sidebutton.refinedstorage:detector.mode.2=Emit signal when above the amount sidebutton.refinedstorage:detector.mode.3=Emit signal when is autocrafting +sidebutton.refinedstorage:crafter.autocraft_signal=Trigger autocrafting with redstone signal + block.refinedstorage:controller.0.name=Controller block.refinedstorage:controller.1.name=Creative Controller block.refinedstorage:cable.name=Cable diff --git a/src/main/resources/assets/refinedstorage/textures/icons.png b/src/main/resources/assets/refinedstorage/textures/icons.png index 4ebdc05d5d87e80a8129b23f2943b614423f1b61..21389c3c3e3a8829309f290ea056772f690df41a 100755 GIT binary patch delta 1923 zcmchXYdBPk8pqdK)=VRpOqdwT9EoyEDltx3GKorL+sJh#_q&o*vPSpXZk0i{P$72- zQ5qJGIK_6&P>gGYLBhDj9JN23ujkWwzy06$dH(&F4Mm>#Id{Af$xUn1n#LGc%!+HCMPOu8Lfo94uv)vlvY6S{x%Jo9j~lQj*um z@@?KGf_&I(jGsaYu1V1tr@h^Fv4$#%R&XmgY;h>FFI>%swif>3Whb2YYJq#kIi9qr z*eHxI*vIczK^9g&IqJv-MA#GoGwYpF732W-dN7$CO;>g$h5Sv4u%}S+stWX!tR#0Aux0?- z;DV_VT2?0Y^xs8d=9O4crIrBWv@H&&Q)07a;mClnabCtU>*zLTYHH%0j`U+37*c+x zb8w~FX5M+*RTnSbw*eEg$ZV@78XDIBded&_isi2M<3rZ?BGbDAhQwq1!bf>G`wFp; z@R=vqH*9zFW_3tGmsk2$7eDunbGUL;sx}myKbVBzUpw;`{LJpeVY$-Y5NQ9(*RXhD z+%4V0M<`QSLQ6MP7-PsdQRO489MtS3NnLOC-uC+|R?3TuGE}o!*}|~zC)Z8o8C3?B zQFdeNcJHDF>O|rTYbz^FGQ2->j?&QDTUb0^#b)0>#>q)Qkbr4cqK`3>>0VB4jL7YW zd3?&!P0|AjM%wAs^ZryTI;K~|)KZ_X$jE35(q{p^RXS(_rB|>#FHf|VY^m0UteKMr zZfR{?ZY#Id@C;7UT20`+o6MEEFw5dcD_)Oa5lVc(BUF$th7xpzSg&+?uVmzRwHl-7 z4zSLp$V|jjO*<0##~~qlNyPg%HwNhfF21P+UlCXJbKCb`qhvxDbL!n^kCmjg0&%z!A0?Dj!$pVv5!iUfx`_`eg@$e-`Hcj z&FXVbJtS#~3g*7l(tYdQhrG9ewJQ|{OU6~xj`gYqUa;uIr9OUZ^l+?NhdMMj6aBO| zbvlwDI?eI&-VBZ`PW(2oaGQpAyzi8UcrzTR#_=RGmzBK>E*~oFE~pBw56Ta2q5<^^ zU9;FrcZqMu4tqTBd}85A*FWFfi}CM6DO;ctAW!}r2BZQy4B!EUjOv8qIdxMzYJ_p4 z5V4TmWJTPU0VEyhVl(al#bj_Q)qIbLC%Ult3?W^xlGuCvhBO{YLfRCe*e2N{mx*wq z%9tD7f$zy~Z7~-*iImzkg?NUz%81n_B@pv~S#|b_+wMoX$Ye5>K#T-9{y9b!+da_G z63X(TW((BQF7?}1%`14i`(kiest33id^He!duhXo!C6a%m5ZZ5dtjzf@!8XYa2LYY zTUTCgbyv_F4H8Ja_;LE&*w#Y}3L>@-{bN=H&d^(9_-{^FQzYQ(jt;4fRd)&Lg<;qF z>k{@o-zkM)%(YgI#=h#Jv-Qp`$^X2difhIML5-#6E~skgTKS&9@2p+vH7wIV6#N f$o~-BKwz|DMMV8VkJ69Ezxt3rr delta 1830 zcmchX`&ZJ38^=GNkARebq=HU#kt;RQuWV>uQo+>9&Dy@Lk(Wry!qP3>%rvk*pPZIj zsns{lETz1a;T4^c8Zgqdz|5ug?q2f3QmXV*3}je~4LM>c1-Vz>1wt_4QV+)0x;zlbe!T4Qw?j^uhJ?yQ#F^ z;YUl2FFBpTyt2bDt0m)tqBEXz1)98fo!biu&i;OXrhBjZ@ylObm50EjG(`kxX_j@G zv0|$UZDc4CyyYEsYI$b*2AZjoQ*0v-L z<*kG6;zIv-ONE@p?w!-SkfH zRCK#Rm)m~#e4Jd1EciOHPELDyX%TnhJ#!&QA>-9}RdFA|s;LXUoQ=NXx&70$ar%jI zOBQ<2Gw`FHMw(Q$vnOf`!avb~ZWM2C$+@(*Pfe)a0tTJMvU<%-9A5>$ii-8?N@=SE z@_{~Pc>XuYWYJ&2zZtQ~WUwEa$r8qOvjH4;rr;ZER1Ds zNmxs%MflhI0n~)91al1-De6N=bPU*$EhX5{VP%g%O^CyUF?Ie4)?j2pB$xUnw@PZF z&q$PoR4|V*1N8%hZIl|V=R$Rzkq9U=^^1}@cObw|h#0n`TKm^sz;XjoRPz~u*$NM> zbJ`*Pe#Q5z_eB3ksc(Q?J$)+C2Y49p5~avDQF2_{VE+|JnEb>c(9 zyS#^md#-vUd+hw)oaV;BUa>i@E8gH<#ndT#OGtFjn_&i4VP5duC-LoEK~Y3V@`o|` zw*1g_j5I|4V$OGdx>0j}uJNZ49%>@A)xf^33|~EXmAKv=-k?N5zx_CrQa3kwu!J6C z#Iq;Tz4)K$)9KCLUe>ph*vIUNHOJ$VdX~-JUXDAkc4vo38BFE&*$d>(3dMzJ)z@7p zXyXx_3#UHWoPZCcx!t+31_CJ?m&7QYt2xDB`s-{C$6G zf9-tP5oZOK!9$;`C1L-~tDeox#9@X_CZ0fXi< z>L`x?W5z5cpE$X1{{0`7^KIGVj~h0*RxNq8*b#FSYD}qovbpu7!xao{dJ*Xx?cD;9 z31(oEsdji?$dQcSs^<~FO}|U^A7;BamzVjKlso;wbw*h>L*nJ~H{Z@pmL7&hVT=sG z|IgREvnOiKtK=$gh_<-MTxLt(a3V=vt`LncjnyYb{nA0=k--K2)}BI_W32`z;c9*W zBGD}r&z$ima(M@%2;lpL81Tgr2bt=T(gIS?KAq}@kG@P|^La#M(sXJZuHzABqBlnr z4cwp~T3Gm{>)HDY5L{>p)dM1%zZbz|XpjhQ3kyIz$G|&eK`zz-FdcFm6bGaO@kG!u zwk9fr2x_R18uo2<5~lfllS<0bJ%2bAY9|7C0l-D_Dr8FO(aWI9yn|f&;#!Mm+x(dZ zmuLAtBi+~9>7Sp*yWm4WO(;MAv?gGb^|Cn+a}EY}yFckJZ2#=mIrq)0pQFPN!PWg0 zFEWjTqiN-f%S#sYO)~NhcO{c+#&nsjl`i7wX$-t7gS5Q-U}bljaUEW4n)mK56D3N{ z-LsI|wHyh?^uGC7uU{vN`E*lBX$wNdRy?6$q#5XvH_0hurFm}UjutFLH}KRMc9qvg zK8)zU=AA&3tchLb;ah^(tQpQ5fK*^#$y7&eOCC@N- zg1FTC`abCQ-5QN%hq4#j{!G7{vQL5KPMCs2i?A4N9WS<^P{}zG{TZObHm5Zi_u5w0 z4U<6e`8Fpp5bq+CkGaEIG;s}-Q=bm3b^e$~hD@{jf662O%HoS=fqL+cJRF?IJKh8g N6%@E5plUNW