Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/generated/resources/assets/gtceu/lang/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@
"behaviour.lighter.tooltip.description": "Can light things on fire",
"behaviour.lighter.tooltip.usage": "Shift-right click to open/close",
"behaviour.lighter.uses": "Remaining uses: %d",
"behaviour.meta.machine.config.applicable.tooltip": "§7Copies settings of input buses, input hatches, single-block machines, etc.",
"behaviour.meta.machine.config.copy.tooltip": "§7Sneak + R-Click to copy machine configuration",
"behaviour.meta.machine.config.paste.tooltip": "§7R-Click to paste machine configuration",
"behaviour.paintspray.black.tooltip": "Can paint things in Black",
Expand All @@ -88,6 +89,11 @@
"behaviour.setting.allow.input.from.output.tooltip": "%s input from output side is %s",
"behaviour.setting.item_auto_output.tooltip": "%s auto-output is %s",
"behaviour.setting.muffled.tooltip": "Muffling %s",
"behaviour.setting.voiding_mode.tooltip": "Voiding Mode: %s",
"behaviour.setting.input_limit.tooltip": "Input Limit: %s",
"behaviour.setting.distinct.tooltip": "Distinct Part: %s",
"behaviour.setting.circuit.tooltip": "Circuit Configuration: %s",
"behaviour.setting.circuit.none": "None",
"behaviour.setting.output.direction.tooltip": "%s output direction: %s",
"behaviour.soft_hammer": "Activates and Deactivates Machines",
"behaviour.soft_hammer.disabled": "Working Disabled",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@
import com.gregtechceu.gtceu.api.gui.widget.SlotWidget;
import com.gregtechceu.gtceu.api.item.tool.GTToolType;
import com.gregtechceu.gtceu.api.machine.fancyconfigurator.CircuitFancyConfigurator;
import com.gregtechceu.gtceu.api.machine.feature.ConfigCopySupport;
import com.gregtechceu.gtceu.api.machine.feature.IAutoOutputBoth;
import com.gregtechceu.gtceu.api.machine.feature.ICircuitConfigurable;
import com.gregtechceu.gtceu.api.machine.feature.IVoidable;
import com.gregtechceu.gtceu.api.machine.trait.CircuitHandler;
import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler;
Expand All @@ -25,6 +27,7 @@
import com.gregtechceu.gtceu.api.recipe.ui.GTRecipeTypeUI;
import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler;
import com.gregtechceu.gtceu.api.transfer.item.SingleCustomItemStackHandler;
import com.gregtechceu.gtceu.common.item.IntCircuitBehaviour;
import com.gregtechceu.gtceu.config.ConfigHolder;
import com.gregtechceu.gtceu.data.lang.LangHandler;
import com.gregtechceu.gtceu.utils.TaskHandler;
Expand All @@ -38,10 +41,12 @@
import net.minecraft.Util;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState;

Expand All @@ -68,7 +73,7 @@
*/
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
public class SimpleTieredMachine extends WorkableTieredMachine implements IAutoOutputBoth {
public class SimpleTieredMachine extends WorkableTieredMachine implements IAutoOutputBoth, ICircuitConfigurable {

@SaveToDisk
@SyncToClient(notifyUpdate = true)
Expand Down Expand Up @@ -410,4 +415,52 @@ public void setVoidingMode(VoidingMode mode) {
public VoidingMode getVoidingMode() {
return this.voidingMode;
}

@Override
public boolean hasVoidingModeConfig() {
return true;
}

// Go through storage, not the handler: CircuitHandler.getStackInSlot always reports EMPTY so the
// non-consumable circuit stays invisible to item transfer. The configured circuit lives in storage,
// which is also what CircuitFancyConfigurator edits.
@Override
public int getCircuitConfiguration() {
var stack = circuitInventory.storage.getStackInSlot(0);
return stack.isEmpty() ? CIRCUIT_EMPTY : IntCircuitBehaviour.getCircuitConfiguration(stack);
}

@Override
public void setCircuitConfiguration(int configuration) {
if (configuration < 0) {
circuitInventory.storage.setStackInSlot(0, ItemStack.EMPTY);
} else {
circuitInventory.storage.setStackInSlot(0, IntCircuitBehaviour.stack(configuration));
}
}

//////////////////////////////////////
// ****** Config Copy Card *******//
//////////////////////////////////////

/**
* Muffling and input limit come from {@link WorkableTieredMachine}. Auto output has to be
* re-stated because the inherited class implementation wins over {@link IAutoOutputBoth}'s
* default; voiding mode and circuit are owned by this class.
*/
@Override
public void writeConfigTo(CompoundTag tag) {
super.writeConfigTo(tag);
IAutoOutputBoth.super.writeConfigTo(tag);
ConfigCopySupport.writeVoiding(tag, this);
ConfigCopySupport.writeCircuit(tag, this);
}

@Override
public void readConfigFrom(CompoundTag tag) {
super.readConfigFrom(tag);
IAutoOutputBoth.super.readConfigFrom(tag);
ConfigCopySupport.readVoiding(tag, this);
ConfigCopySupport.readCircuit(tag, this);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@

import com.lowdragmc.lowdraglib.syncdata.ISubscription;

import net.minecraft.nbt.CompoundTag;

import com.gto.datasynclib.annotations.SaveToDisk;
import com.gto.datasynclib.annotations.SyncToClient;
import com.mojang.blaze3d.MethodsReturnNonnullByDefault;
Expand All @@ -32,7 +34,7 @@

@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
public abstract class WorkableTieredMachine extends TieredEnergyMachine implements IRecipeLogicMachine, IMachineLife, IMufflableMachine, IOverclockMachine, IInputLimitableMachine {
public abstract class WorkableTieredMachine extends TieredEnergyMachine implements IRecipeLogicMachine, IMachineLife, IMufflableMachine, IOverclockMachine, IInputLimitableMachine, IConfigCopyable {

@Getter
@SaveToDisk
Expand Down Expand Up @@ -231,4 +233,26 @@ public void setInputLimit(boolean inputLimit) {
public boolean isInputLimit() {
return this.importItems.storage.isInputLimited;
}

//////////////////////////////////////
// ****** Config Copy Card *******//
//////////////////////////////////////

/**
* Contributes muffling and the input limit toggle. A class implementation takes precedence over
* {@link IMufflableMachine}'s default, so muffling has to be re-stated here. Subclasses that own
* further settings override these two and chain through {@code super} instead of touching the
* copy card.
*/
@Override
public void writeConfigTo(CompoundTag tag) {
ConfigCopySupport.writeMuffled(tag, this);
ConfigCopySupport.writeInputLimit(tag, this);
}

@Override
public void readConfigFrom(CompoundTag tag) {
ConfigCopySupport.readMuffled(tag, this);
ConfigCopySupport.readInputLimit(tag, this);
}
}
Loading