From b860747153e60bf8a63f8603cf0aeaa7c7072d1f Mon Sep 17 00:00:00 2001 From: Zorbatron <46525467+Zorbatron@users.noreply.github.com> Date: Fri, 13 Dec 2024 19:56:26 -0500 Subject: [PATCH 1/4] Toggeable diodes --- .../electric/MetaTileEntityDiode.java | 43 ++++++++++++++++--- .../resources/assets/gregtech/lang/en_us.lang | 4 +- 2 files changed, 40 insertions(+), 7 deletions(-) diff --git a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java index 2bbf645a517..9238efb6d7d 100644 --- a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java +++ b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java @@ -1,8 +1,11 @@ package gregtech.common.metatileentities.electric; import gregtech.api.GTValues; +import gregtech.api.capability.GregtechTileCapabilities; +import gregtech.api.capability.IControllable; import gregtech.api.capability.IEnergyContainer; import gregtech.api.capability.impl.EnergyContainerHandler; +import gregtech.api.metatileentity.MTETrait; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; @@ -22,6 +25,7 @@ import net.minecraft.util.ResourceLocation; import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.world.World; +import net.minecraftforge.common.capabilities.Capability; import codechicken.lib.raytracer.CuboidRayTraceResult; import codechicken.lib.render.CCRenderState; @@ -36,17 +40,20 @@ import static gregtech.api.capability.GregtechDataCodes.AMP_INDEX; public class MetaTileEntityDiode extends MetaTileEntityMultiblockPart - implements IPassthroughHatch, IMultiblockAbilityPart { + implements IPassthroughHatch, IMultiblockAbilityPart, + IControllable { protected IEnergyContainer energyContainer; private static final String AMP_NBT_KEY = "amp_mode"; private int amps; + private boolean isWorkingEnabled; public MetaTileEntityDiode(ResourceLocation metaTileEntityId, int tier) { super(metaTileEntityId, tier); amps = 1; reinitializeEnergyContainer(); + isWorkingEnabled = true; } @Override @@ -58,6 +65,7 @@ public MetaTileEntity createMetaTileEntity(IGregTechTileEntity tileEntity) { public NBTTagCompound writeToNBT(NBTTagCompound data) { super.writeToNBT(data); data.setInteger(AMP_NBT_KEY, amps); + data.setBoolean("IsWorkingEnabled", isWorkingEnabled); return data; } @@ -65,6 +73,7 @@ public NBTTagCompound writeToNBT(NBTTagCompound data) { public void readFromNBT(NBTTagCompound data) { super.readFromNBT(data); this.amps = data.getInteger(AMP_NBT_KEY); + this.isWorkingEnabled = data.getBoolean("IsWorkingEnabled"); reinitializeEnergyContainer(); } @@ -125,8 +134,8 @@ public boolean isValidFrontFacing(EnumFacing facing) { } @Override - public boolean onSoftMalletClick(EntityPlayer playerIn, EnumHand hand, EnumFacing facing, - CuboidRayTraceResult hitResult) { + public boolean onScrewdriverClick(EntityPlayer playerIn, EnumHand hand, EnumFacing facing, + CuboidRayTraceResult hitResult) { if (getWorld().isRemote) { scheduleRenderUpdate(); return true; @@ -153,9 +162,9 @@ public void addInformation(ItemStack stack, @Nullable World player, @NotNull Lis @Override public void addToolUsages(ItemStack stack, @Nullable World world, List tooltip, boolean advanced) { - tooltip.add(I18n.format("gregtech.tool_action.screwdriver.access_covers")); + tooltip.add(I18n.format("gregtech.machine.diode.tooltip_tool_usage_screwdriver")); tooltip.add(I18n.format("gregtech.tool_action.wrench.set_facing")); - tooltip.add(I18n.format("gregtech.tool_action.soft_mallet.toggle_mode")); + tooltip.add(I18n.format("gregtech.tool_action.soft_mallet.reset")); super.addToolUsages(stack, world, tooltip, advanced); } @@ -174,4 +183,28 @@ public void registerAbilities(@NotNull List abilityList) { public Class getPassthroughType() { return IEnergyContainer.class; } + + @Override + protected boolean shouldUpdate(MTETrait trait) { + return !(trait instanceof EnergyContainerHandler) || isWorkingEnabled; + } + + @Override + public T getCapability(Capability capability, EnumFacing side) { + if (capability == GregtechTileCapabilities.CAPABILITY_CONTROLLABLE) { + return GregtechTileCapabilities.CAPABILITY_CONTROLLABLE.cast(this); + } + + return super.getCapability(capability, side); + } + + @Override + public boolean isWorkingEnabled() { + return isWorkingEnabled; + } + + @Override + public void setWorkingEnabled(boolean isWorkingAllowed) { + this.isWorkingEnabled = isWorkingAllowed; + } } diff --git a/src/main/resources/assets/gregtech/lang/en_us.lang b/src/main/resources/assets/gregtech/lang/en_us.lang index 389d68cd3ce..6ab5189ca77 100644 --- a/src/main/resources/assets/gregtech/lang/en_us.lang +++ b/src/main/resources/assets/gregtech/lang/en_us.lang @@ -4240,9 +4240,9 @@ gregtech.machine.transformer.adjustable.opv.name=Overpowered Voltage Power Trans # Diodes gregtech.machine.diode.message=Max Amperage throughput: %s -gregtech.machine.diode.tooltip_tool_usage=Hit with a Soft Mallet to change Amperage flow. +gregtech.machine.diode.tooltip_tool_usage_screwdriver=§8Use Screwdriver to change Amperage flow or access Covers gregtech.machine.diode.tooltip_general=Allows Energy Flow in one direction and limits Amperage -gregtech.machine.diode.tooltip_starts_at=Starts as §f1A§7, use Soft Mallet to change +gregtech.machine.diode.tooltip_starts_at=Starts as §f1A§7, use Screwdriver to change gregtech.machine.diode.ulv.name=Ultra Low Voltage Diode gregtech.machine.diode.lv.name=Low Voltage Diode From 5f136440e2a429f704748e525da4fcea1febcd28 Mon Sep 17 00:00:00 2001 From: Zorbatron <46525467+Zorbatron@users.noreply.github.com> Date: Sun, 15 Dec 2024 22:39:51 -0500 Subject: [PATCH 2/4] Make existing diodes not get disabled --- .../common/metatileentities/electric/MetaTileEntityDiode.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java index 9238efb6d7d..32857fd33f9 100644 --- a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java +++ b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java @@ -73,7 +73,9 @@ public NBTTagCompound writeToNBT(NBTTagCompound data) { public void readFromNBT(NBTTagCompound data) { super.readFromNBT(data); this.amps = data.getInteger(AMP_NBT_KEY); - this.isWorkingEnabled = data.getBoolean("IsWorkingEnabled"); + if (data.hasKey("IsWorkingEnabled")) { + this.isWorkingEnabled = data.getBoolean("IsWorkingEnabled"); + } reinitializeEnergyContainer(); } From d20a71b0cd1009c8996383de21e0ae0aa5cc4a20 Mon Sep 17 00:00:00 2001 From: Zorbatron <46525467+Zorbatron@users.noreply.github.com> Date: Sun, 5 Jan 2025 21:55:25 -0500 Subject: [PATCH 3/4] Add syncs for isWorkingEnabled --- .../metatileentities/electric/MetaTileEntityDiode.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java index 32857fd33f9..8ca738248b1 100644 --- a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java +++ b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java @@ -1,6 +1,7 @@ package gregtech.common.metatileentities.electric; import gregtech.api.GTValues; +import gregtech.api.capability.GregtechDataCodes; import gregtech.api.capability.GregtechTileCapabilities; import gregtech.api.capability.IControllable; import gregtech.api.capability.IEnergyContainer; @@ -38,6 +39,7 @@ import java.util.List; import static gregtech.api.capability.GregtechDataCodes.AMP_INDEX; +import static gregtech.api.capability.GregtechDataCodes.WORKING_ENABLED; public class MetaTileEntityDiode extends MetaTileEntityMultiblockPart implements IPassthroughHatch, IMultiblockAbilityPart, @@ -83,12 +85,14 @@ public void readFromNBT(NBTTagCompound data) { public void writeInitialSyncData(PacketBuffer buf) { super.writeInitialSyncData(buf); buf.writeInt(amps); + buf.writeBoolean(isWorkingEnabled); } @Override public void receiveInitialSyncData(PacketBuffer buf) { super.receiveInitialSyncData(buf); this.amps = buf.readInt(); + this.isWorkingEnabled = buf.readBoolean(); } @Override @@ -96,6 +100,8 @@ public void receiveCustomData(int dataId, PacketBuffer buf) { super.receiveCustomData(dataId, buf); if (dataId == AMP_INDEX) { this.amps = buf.readInt(); + } else if (dataId == WORKING_ENABLED) { + this.isWorkingEnabled = buf.readBoolean(); } } @@ -208,5 +214,8 @@ public boolean isWorkingEnabled() { @Override public void setWorkingEnabled(boolean isWorkingAllowed) { this.isWorkingEnabled = isWorkingAllowed; + if (getWorld().isRemote) { + writeCustomData(GregtechDataCodes.WORKING_ENABLED, buf -> buf.writeBoolean(isWorkingAllowed)); + } } } From 8a8e2a8377778d80112c0f4573bbead806119fb3 Mon Sep 17 00:00:00 2001 From: Zorbatron <46525467+Zorbatron@users.noreply.github.com> Date: Sun, 5 Jan 2025 21:56:03 -0500 Subject: [PATCH 4/4] Remove unnecessary override (identical to super method) --- .../metatileentities/electric/MetaTileEntityDiode.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java index 8ca738248b1..c19b1797f96 100644 --- a/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java +++ b/src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityDiode.java @@ -136,11 +136,6 @@ public void renderMetaTileEntity(CCRenderState renderState, Matrix4 translation, renderState, translation, PipelineUtil.color(pipeline, GTValues.VC[getTier()]))); } - @Override - public boolean isValidFrontFacing(EnumFacing facing) { - return true; - } - @Override public boolean onScrewdriverClick(EntityPlayer playerIn, EnumHand hand, EnumFacing facing, CuboidRayTraceResult hitResult) {