Added an option for the Crafter to trigger autocrafting with a redstone signal, fixes #327
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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<ICraftingPattern> getPatterns();
|
||||
|
||||
/**
|
||||
* @return the position of this container
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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<Boolean> AUTOCRAFT_SIGNAL = new TileDataParameter<>(DataSerializers.BOOLEAN, false, new ITileDataProducer<Boolean, TileCrafter>() {
|
||||
@Override
|
||||
public Boolean getValue(TileCrafter tile) {
|
||||
return tile.autocraftSignal;
|
||||
}
|
||||
}, new ITileDataConsumer<Boolean, TileCrafter>() {
|
||||
@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<ICraftingPattern> 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<ICraftingPattern> getPatterns() {
|
||||
return actualPatterns;
|
||||
}
|
||||
|
||||
public IItemHandler getPatternItems() {
|
||||
return patterns;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.9 KiB |
Reference in New Issue
Block a user