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 javax.annotation.Nullable;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternContainer {
|
public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternContainer {
|
||||||
@@ -354,6 +355,16 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC
|
|||||||
return facingContainer;
|
return facingContainer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Optional<ICraftingPatternContainer> getRootContainerNotSelf() {
|
||||||
|
ICraftingPatternContainer root = getRootContainer();
|
||||||
|
|
||||||
|
if (root != null && root != this) {
|
||||||
|
return Optional.of(root);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UUID getUuid() {
|
public UUID getUuid() {
|
||||||
if (this.uuid == null) {
|
if (this.uuid == null) {
|
||||||
@@ -367,6 +378,11 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isLocked() {
|
public boolean isLocked() {
|
||||||
|
Optional<ICraftingPatternContainer> root = getRootContainerNotSelf();
|
||||||
|
if (root.isPresent()) {
|
||||||
|
return root.get().isLocked();
|
||||||
|
}
|
||||||
|
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
case IGNORE:
|
case IGNORE:
|
||||||
return false;
|
return false;
|
||||||
@@ -383,6 +399,13 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onUsedForProcessing() {
|
public void onUsedForProcessing() {
|
||||||
|
Optional<ICraftingPatternContainer> root = getRootContainerNotSelf();
|
||||||
|
if (root.isPresent()) {
|
||||||
|
root.get().onUsedForProcessing();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (mode == CrafterMode.PULSE_INSERTS_NEXT_SET) {
|
if (mode == CrafterMode.PULSE_INSERTS_NEXT_SET) {
|
||||||
this.locked = true;
|
this.locked = true;
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package com.raoulvdberge.refinedstorage.gui;
|
package com.raoulvdberge.refinedstorage.gui;
|
||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.container.ContainerCrafter;
|
import com.raoulvdberge.refinedstorage.container.ContainerCrafter;
|
||||||
import com.raoulvdberge.refinedstorage.gui.control.SideButtonCrafterMode;
|
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileCrafter;
|
import com.raoulvdberge.refinedstorage.tile.TileCrafter;
|
||||||
import com.raoulvdberge.refinedstorage.util.RenderUtils;
|
import com.raoulvdberge.refinedstorage.util.RenderUtils;
|
||||||
|
|
||||||
@@ -12,7 +11,6 @@ public class GuiCrafter extends GuiBase {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init(int x, int y) {
|
public void init(int x, int y) {
|
||||||
addSideButton(new SideButtonCrafterMode(this));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
package com.raoulvdberge.refinedstorage.tile;
|
package com.raoulvdberge.refinedstorage.tile;
|
||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeCrafter;
|
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 com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
|
||||||
import net.minecraft.network.datasync.DataSerializers;
|
import net.minecraft.network.datasync.DataSerializers;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
@@ -15,10 +18,18 @@ import javax.annotation.Nullable;
|
|||||||
public class TileCrafter extends TileNode<NetworkNodeCrafter> {
|
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<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<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() {
|
public TileCrafter() {
|
||||||
dataManager.addWatchedParameter(NAME);
|
dataManager.addWatchedParameter(NAME);
|
||||||
dataManager.addWatchedParameter(MODE);
|
dataManager.addWatchedParameter(MODE);
|
||||||
|
dataManager.addParameter(HAS_ROOT);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user