Added an option for the Crafter to trigger autocrafting with a redstone signal, fixes #327

This commit is contained in:
Raoul Van den Berge
2016-09-13 02:30:43 +02:00
parent f582aec94e
commit 7ac1b6bafe
9 changed files with 116 additions and 16 deletions

View File

@@ -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.

View File

@@ -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

View File

@@ -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) {

View File

@@ -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

View File

@@ -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());
}
}

View File

@@ -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());
}
}

View File

@@ -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;
}

View File

@@ -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