Skip to content

Commit

Permalink
Backport Interface Locking Mode (#437)
Browse files Browse the repository at this point in the history
* Backport Interface Locking Mode

* Fix a SOE

* add AE2FC compat and fix persistence issue

---------

Co-authored-by: Martin Robertz <[email protected]>
  • Loading branch information
TechnicianLP and Dream-Master authored Dec 19, 2023
1 parent 068702d commit 14110e6
Show file tree
Hide file tree
Showing 27 changed files with 567 additions and 9 deletions.
29 changes: 29 additions & 0 deletions src/main/java/appeng/api/config/LockCraftingMode.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package appeng.api.config;

/**
* The circumstances under which a interface will lock further crafting.
*/
public enum LockCraftingMode {
/**
* Crafting is never locked.
*/
NONE,
/**
* After pushing a pattern to an adjacent machine, the interface will not accept further crafts until a redstone
* pulse is received.
*/
LOCK_UNTIL_PULSE,
/**
* Crafting is locked while the interface is receiving a redstone signal.
*/
LOCK_WHILE_HIGH,
/**
* Crafting is locked while the interface is not receiving a redstone signal.
*/
LOCK_WHILE_LOW,
/**
* After pushing a pattern to an adjacent machine, the interface will not accept further crafts until the primary
* pattern result is returned to the network through the interface.
*/
LOCK_UNTIL_RESULT
}
4 changes: 3 additions & 1 deletion src/main/java/appeng/api/config/Settings.java
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,9 @@ public enum Settings {

CELL_TYPE(EnumSet.allOf(CellType.class)),

STICKY_MODE(EnumSet.of(YesNo.YES, YesNo.NO));
STICKY_MODE(EnumSet.of(YesNo.YES, YesNo.NO)),

LOCK_CRAFTING_MODE(EnumSet.allOf(LockCraftingMode.class));

private final EnumSet<? extends Enum<?>> values;

Expand Down
3 changes: 2 additions & 1 deletion src/main/java/appeng/api/config/Upgrades.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@ public enum Upgrades {
INVERTER(1),
PATTERN_CAPACITY(1),
ORE_FILTER(1),
ADVANCED_BLOCKING(1);
ADVANCED_BLOCKING(1),
LOCK_CRAFTING(1);

/**
* @deprecated use {@link Upgrades#getTier()}
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/appeng/api/definitions/IMaterials.java
Original file line number Diff line number Diff line change
Expand Up @@ -147,4 +147,6 @@ public interface IMaterials {
IItemDefinition cardPatternRefiller();

IItemDefinition cardAdvancedBlocking();

IItemDefinition cardLockCrafting();
}
9 changes: 9 additions & 0 deletions src/main/java/appeng/block/misc/BlockInterface.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

import java.util.EnumSet;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.world.World;
Expand Down Expand Up @@ -59,6 +60,14 @@ public boolean onActivated(final World w, final int x, final int y, final int z,
return false;
}

@Override
public void onNeighborBlockChange(World worldIn, int x, int y, int z, Block neighbor) {
TileInterface tile = this.getTileEntity(worldIn, x, y, z);
if (tile != null) {
tile.getInterfaceDuality().updateRedstoneState();
}
}

@Override
protected boolean hasCustomRotation() {
return true;
Expand Down
21 changes: 21 additions & 0 deletions src/main/java/appeng/client/gui/implementations/GuiInterface.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

import appeng.api.config.AdvancedBlockingMode;
import appeng.api.config.InsertionMode;
import appeng.api.config.LockCraftingMode;
import appeng.api.config.Settings;
import appeng.api.config.Upgrades;
import appeng.api.config.YesNo;
Expand All @@ -40,6 +41,7 @@ public class GuiInterface extends GuiUpgradeable {
private GuiImgButton insertionMode;

private GuiImgButton advancedBlockingMode;
private GuiImgButton lockCraftingMode;

public GuiInterface(final InventoryPlayer inventoryPlayer, final IInterfaceHost te) {
super(new ContainerInterface(inventoryPlayer, te));
Expand Down Expand Up @@ -82,6 +84,14 @@ protected void addButtons() {
AdvancedBlockingMode.DEFAULT);
this.advancedBlockingMode.visible = this.bc.getInstalledUpgrades(Upgrades.ADVANCED_BLOCKING) > 0;
this.buttonList.add(advancedBlockingMode);

this.lockCraftingMode = new GuiImgButton(
this.guiLeft - 18,
this.guiTop + 80,
Settings.LOCK_CRAFTING_MODE,
LockCraftingMode.NONE);
this.lockCraftingMode.visible = this.bc.getInstalledUpgrades(Upgrades.LOCK_CRAFTING) > 0;
this.buttonList.add(lockCraftingMode);
}

@Override
Expand All @@ -102,6 +112,10 @@ public void drawFG(final int offsetX, final int offsetY, final int mouseX, final
this.advancedBlockingMode.set(((ContainerInterface) this.cvb).getAdvancedBlockingMode());
}

if (this.lockCraftingMode != null) {
this.lockCraftingMode.set(((ContainerInterface) this.cvb).getLockCraftingMode());
}

this.fontRendererObj.drawString(
this.getGuiDisplayName(GuiText.Interface.getLocal()),
8,
Expand Down Expand Up @@ -146,6 +160,10 @@ protected void actionPerformed(final GuiButton btn) {
NetworkHandler.instance
.sendToServer(new PacketConfigButton(this.advancedBlockingMode.getSetting(), backwards));
}

if (btn == this.lockCraftingMode) {
NetworkHandler.instance.sendToServer(new PacketConfigButton(this.lockCraftingMode.getSetting(), backwards));
}
}

@Override
Expand All @@ -154,5 +172,8 @@ protected void handleButtonVisibility() {
if (this.advancedBlockingMode != null) {
this.advancedBlockingMode.setVisibility(this.bc.getInstalledUpgrades(Upgrades.ADVANCED_BLOCKING) > 0);
}
if (this.lockCraftingMode != null) {
this.lockCraftingMode.setVisibility(this.bc.getInstalledUpgrades(Upgrades.LOCK_CRAFTING) > 0);
}
}
}
31 changes: 31 additions & 0 deletions src/main/java/appeng/client/gui/widgets/GuiImgButton.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import appeng.api.config.InsertionMode;
import appeng.api.config.ItemSubstitution;
import appeng.api.config.LevelType;
import appeng.api.config.LockCraftingMode;
import appeng.api.config.OperationMode;
import appeng.api.config.PatternBeSubstitution;
import appeng.api.config.PatternSlotConfig;
Expand Down Expand Up @@ -624,6 +625,36 @@ public GuiImgButton(final int x, final int y, final Enum idx, final Enum val) {
AdvancedBlockingMode.BLOCK_ON_ALL,
ButtonToolTips.AdvancedBlockingModeAll,
ButtonToolTips.AdvancedBlockingModeAllDesc);
this.registerApp(
10,
Settings.LOCK_CRAFTING_MODE,
LockCraftingMode.NONE,
ButtonToolTips.LockCraftingMode,
ButtonToolTips.LockCraftingModeNone);
this.registerApp(
2,
Settings.LOCK_CRAFTING_MODE,
LockCraftingMode.LOCK_UNTIL_PULSE,
ButtonToolTips.LockCraftingMode,
ButtonToolTips.LockCraftingUntilRedstonePulse);
this.registerApp(
0,
Settings.LOCK_CRAFTING_MODE,
LockCraftingMode.LOCK_WHILE_HIGH,
ButtonToolTips.LockCraftingMode,
ButtonToolTips.LockCraftingWhileRedstoneHigh);
this.registerApp(
1,
Settings.LOCK_CRAFTING_MODE,
LockCraftingMode.LOCK_WHILE_LOW,
ButtonToolTips.LockCraftingMode,
ButtonToolTips.LockCraftingWhileRedstoneLow);
this.registerApp(
7,
Settings.LOCK_CRAFTING_MODE,
LockCraftingMode.LOCK_UNTIL_RESULT,
ButtonToolTips.LockCraftingMode,
ButtonToolTips.LockCraftingUntilResultReturned);
this.registerApp(
16 + 2,
Settings.CRAFTING_MODE,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

import appeng.api.config.AdvancedBlockingMode;
import appeng.api.config.InsertionMode;
import appeng.api.config.LockCraftingMode;
import appeng.api.config.SecurityPermissions;
import appeng.api.config.Settings;
import appeng.api.config.Upgrades;
Expand Down Expand Up @@ -46,6 +47,9 @@ public class ContainerInterface extends ContainerUpgradeable implements IOptiona
@GuiSync(10)
public AdvancedBlockingMode advancedBlockingMode = AdvancedBlockingMode.DEFAULT;

@GuiSync(12)
public LockCraftingMode lockCraftingMode = LockCraftingMode.NONE;

@GuiSync(8)
public InsertionMode insertionMode = InsertionMode.DEFAULT;

Expand Down Expand Up @@ -144,6 +148,7 @@ protected void loadSettingsFromHost(final IConfigManager cm) {
this.setInterfaceTerminalMode((YesNo) cm.getSetting(Settings.INTERFACE_TERMINAL));
this.setInsertionMode((InsertionMode) cm.getSetting(Settings.INSERTION_MODE));
this.setAdvancedBlockingMode((AdvancedBlockingMode) cm.getSetting(Settings.ADVANCED_BLOCKING_MODE));
this.setLockCraftingMode((LockCraftingMode) cm.getSetting(Settings.LOCK_CRAFTING_MODE));
}

public YesNo getBlockingMode() {
Expand Down Expand Up @@ -178,6 +183,14 @@ private void setAdvancedBlockingMode(final AdvancedBlockingMode mode) {
this.advancedBlockingMode = mode;
}

public LockCraftingMode getLockCraftingMode() {
return this.lockCraftingMode;
}

private void setLockCraftingMode(LockCraftingMode mode) {
this.lockCraftingMode = mode;
}

public int getPatternCapacityCardsInstalled() {
if (Platform.isClient() && isEmpty) return -1;
if (myDuality == null) return 0;
Expand Down
3 changes: 3 additions & 0 deletions src/main/java/appeng/core/Registration.java
Original file line number Diff line number Diff line change
Expand Up @@ -606,6 +606,9 @@ void postInit(final FMLPostInitializationEvent event) {
Upgrades.PATTERN_CAPACITY.registerItem(parts.p2PTunnelMEInterface(), 3);
Upgrades.ADVANCED_BLOCKING.registerItem(parts.iface(), 1);
Upgrades.ADVANCED_BLOCKING.registerItem(blocks.iface(), 1);
Upgrades.LOCK_CRAFTING.registerItem(parts.iface(), 1);
Upgrades.LOCK_CRAFTING.registerItem(blocks.iface(), 1);
Upgrades.LOCK_CRAFTING.registerItem(parts.p2PTunnelMEInterface(), 1);

// IO Port!
Upgrades.SPEED.registerItem(blocks.iOPort(), 3);
Expand Down
8 changes: 8 additions & 0 deletions src/main/java/appeng/core/api/definitions/ApiMaterials.java
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ public final class ApiMaterials implements IMaterials {
private final IItemDefinition cardOreFilter;
private final IItemDefinition cardPatternRefiller;
private final IItemDefinition cardAdvancedBlocking;
private final IItemDefinition cardLockCrafting;
private final IItemDefinition enderDust;
private final IItemDefinition flour;
private final IItemDefinition goldDust;
Expand Down Expand Up @@ -178,6 +179,8 @@ public ApiMaterials(final DefinitionConstructor constructor) {
itemMultiMaterial.createMaterial(MaterialType.CardPatternRefiller));
this.cardAdvancedBlocking = new DamagedItemDefinition(
itemMultiMaterial.createMaterial(MaterialType.CardAdvancedBlocking));
this.cardLockCrafting = new DamagedItemDefinition(
itemMultiMaterial.createMaterial(MaterialType.CardLockCrafting));

this.enderDust = new DamagedItemDefinition(itemMultiMaterial.createMaterial(MaterialType.EnderDust));
this.flour = new DamagedItemDefinition(itemMultiMaterial.createMaterial(MaterialType.Flour));
Expand Down Expand Up @@ -538,4 +541,9 @@ public IItemDefinition cardPatternRefiller() {
public IItemDefinition cardAdvancedBlocking() {
return this.cardAdvancedBlocking;
}

@Override
public IItemDefinition cardLockCrafting() {
return this.cardLockCrafting;
}
}
6 changes: 6 additions & 0 deletions src/main/java/appeng/core/localization/ButtonToolTips.java
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,12 @@ public enum ButtonToolTips {
AdvancedBlockingModeDefaultDesc,
AdvancedBlockingModeAll,
AdvancedBlockingModeAllDesc,
LockCraftingMode,
LockCraftingModeNone,
LockCraftingUntilRedstonePulse,
LockCraftingWhileRedstoneHigh,
LockCraftingWhileRedstoneLow,
LockCraftingUntilResultReturned,
CraftingModeStandard,
CraftingModeStandardDesc,
CraftingModeIgnoreMissing,
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/appeng/core/localization/WailaText.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,11 @@ public enum WailaText {
Unlocked,
Showing,

CraftingLockedByRedstoneSignal,
CraftingLockedByLackOfRedstoneSignal,
CraftingLockedUntilPulse,
CraftingLockedUntilResult,

Contains,
Channels,
Booting;
Expand Down
Loading

0 comments on commit 14110e6

Please sign in to comment.