Fixed unintuitive behavior with stacked crafters and crafter redstone mode. Fixes #1992
This commit is contained in:
@@ -27,6 +27,7 @@ import net.minecraftforge.items.wrapper.CombinedInvWrapper;
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternContainer {
|
||||
@@ -354,6 +355,16 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC
|
||||
return facingContainer;
|
||||
}
|
||||
|
||||
public Optional<ICraftingPatternContainer> getRootContainerNotSelf() {
|
||||
ICraftingPatternContainer root = getRootContainer();
|
||||
|
||||
if (root != null && root != this) {
|
||||
return Optional.of(root);
|
||||
}
|
||||
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public UUID getUuid() {
|
||||
if (this.uuid == null) {
|
||||
@@ -367,6 +378,11 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC
|
||||
|
||||
@Override
|
||||
public boolean isLocked() {
|
||||
Optional<ICraftingPatternContainer> root = getRootContainerNotSelf();
|
||||
if (root.isPresent()) {
|
||||
return root.get().isLocked();
|
||||
}
|
||||
|
||||
switch (mode) {
|
||||
case IGNORE:
|
||||
return false;
|
||||
@@ -383,6 +399,13 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC
|
||||
|
||||
@Override
|
||||
public void onUsedForProcessing() {
|
||||
Optional<ICraftingPatternContainer> root = getRootContainerNotSelf();
|
||||
if (root.isPresent()) {
|
||||
root.get().onUsedForProcessing();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (mode == CrafterMode.PULSE_INSERTS_NEXT_SET) {
|
||||
this.locked = true;
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.raoulvdberge.refinedstorage.gui;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.container.ContainerCrafter;
|
||||
import com.raoulvdberge.refinedstorage.gui.control.SideButtonCrafterMode;
|
||||
import com.raoulvdberge.refinedstorage.tile.TileCrafter;
|
||||
import com.raoulvdberge.refinedstorage.util.RenderUtils;
|
||||
|
||||
@@ -12,7 +11,6 @@ public class GuiCrafter extends GuiBase {
|
||||
|
||||
@Override
|
||||
public void init(int x, int y) {
|
||||
addSideButton(new SideButtonCrafterMode(this));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
package com.raoulvdberge.refinedstorage.tile;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeCrafter;
|
||||
import com.raoulvdberge.refinedstorage.gui.GuiBase;
|
||||
import com.raoulvdberge.refinedstorage.gui.GuiCrafter;
|
||||
import com.raoulvdberge.refinedstorage.gui.control.SideButtonCrafterMode;
|
||||
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
|
||||
import net.minecraft.network.datasync.DataSerializers;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
@@ -15,10 +18,18 @@ import javax.annotation.Nullable;
|
||||
public class TileCrafter extends TileNode<NetworkNodeCrafter> {
|
||||
public static final TileDataParameter<String, TileCrafter> NAME = new TileDataParameter<>(DataSerializers.STRING, NetworkNodeCrafter.DEFAULT_NAME, t -> t.getNode().getName());
|
||||
public static final TileDataParameter<Integer, TileCrafter> MODE = new TileDataParameter<>(DataSerializers.VARINT, NetworkNodeCrafter.CrafterMode.IGNORE.ordinal(), t -> t.getNode().getMode().ordinal(), (t, v) -> t.getNode().setMode(NetworkNodeCrafter.CrafterMode.getById(v)));
|
||||
public static final TileDataParameter<Boolean, TileCrafter> HAS_ROOT = new TileDataParameter<>(DataSerializers.BOOLEAN, false, t -> t.getNode().getRootContainerNotSelf().isPresent(), null, (t, hasRoot) -> {
|
||||
if (!hasRoot) {
|
||||
GuiBase.executeLater(GuiCrafter.class, gui -> {
|
||||
gui.addSideButton(new SideButtonCrafterMode(gui));
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
public TileCrafter() {
|
||||
dataManager.addWatchedParameter(NAME);
|
||||
dataManager.addWatchedParameter(MODE);
|
||||
dataManager.addParameter(HAS_ROOT);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user