Skip to content

Commit d1bceee

Browse files
committed
port Diodes from Gregicality
1 parent 3c4a9cf commit d1bceee

File tree

5 files changed

+228
-4
lines changed

5 files changed

+228
-4
lines changed

src/main/java/gregtech/common/metatileentities/MetaTileEntities.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public class MetaTileEntities {
3939
public static final MetaTileEntityHull[] HULL = new MetaTileEntityHull[GTValues.V.length];
4040
public static final MetaTileEntityTransformer[] TRANSFORMER = new MetaTileEntityTransformer[GTValues.V.length - 1]; // no ULV, no MAX
4141
public static final MetaTileEntityAdjustableTransformer[] ADJUSTABLE_TRANSFORMER = new MetaTileEntityAdjustableTransformer[GTValues.V.length - 1]; // no ULV, no MAX
42+
public static final MetaTileEntityDiode[] DIODES = new MetaTileEntityDiode[GTValues.V.length];
4243
public static final MetaTileEntityBatteryBuffer[][] BATTERY_BUFFER = new MetaTileEntityBatteryBuffer[GTValues.V.length][];
4344
public static final MetaTileEntityCharger[] CHARGER = new MetaTileEntityCharger[GTValues.V.length];
4445

@@ -433,15 +434,26 @@ public static void init() {
433434
// MISC MTE's START: IDs 1285-2000
434435

435436

436-
// Transformer, IDs 1285-1314
437+
// Transformer, IDs 1270-1299
437438
endPos = GTValues.HT ? TRANSFORMER.length - 1 : Math.min(TRANSFORMER.length - 1, GTValues.UV);
438439
for (int i = 0; i <= endPos; i++) {
439440
MetaTileEntityTransformer transformer = new MetaTileEntityTransformer(gregtechId("transformer." + GTValues.VN[i].toLowerCase()), i);
440-
TRANSFORMER[i] = GregTechAPI.registerMetaTileEntity(1285 + (i), transformer);
441+
TRANSFORMER[i] = GregTechAPI.registerMetaTileEntity(1270 + (i), transformer);
441442
MetaTileEntityAdjustableTransformer adjustableTransformer = new MetaTileEntityAdjustableTransformer(gregtechId("transformer.adjustable." + GTValues.VN[i].toLowerCase()), i);
442-
ADJUSTABLE_TRANSFORMER[i] = GregTechAPI.registerMetaTileEntity(1300 + (i), adjustableTransformer);
443+
ADJUSTABLE_TRANSFORMER[i] = GregTechAPI.registerMetaTileEntity(1285 + (i), adjustableTransformer);
443444
}
444445

446+
// Diode, IDs 1300-1314
447+
endPos = GTValues.HT ? DIODES.length - 1 : Math.min(DIODES.length - 1, GTValues.UV + 1);
448+
for (int i = 0; i < endPos; i++) {
449+
String diodeId = "diode." + GTValues.VN[i].toLowerCase();
450+
MetaTileEntityDiode diode = new MetaTileEntityDiode(gregtechId(diodeId), i);
451+
DIODES[i] = GregTechAPI.registerMetaTileEntity(1300 + i, diode);
452+
}
453+
// MAX Diode
454+
MetaTileEntityDiode diode = new MetaTileEntityDiode(gregtechId("diode.max"), DIODES.length - 1);
455+
DIODES[DIODES.length - 1] = GregTechAPI.registerMetaTileEntity(1300 + DIODES.length - 1, diode);
456+
445457
// Battery Buffer, IDs 1315-1374
446458
endPos = GTValues.HT ? BATTERY_BUFFER.length - 1 : Math.min(BATTERY_BUFFER.length - 1, GTValues.UV + 1);
447459
int[] batteryBufferSlots = new int[]{1, 4, 9, 16};
Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
package gregtech.common.metatileentities.electric;
2+
3+
import codechicken.lib.raytracer.CuboidRayTraceResult;
4+
import codechicken.lib.render.CCRenderState;
5+
import codechicken.lib.render.pipeline.IVertexOperation;
6+
import codechicken.lib.vec.Matrix4;
7+
import gregtech.api.GTValues;
8+
import gregtech.api.capability.GregtechCapabilities;
9+
import gregtech.api.capability.impl.EnergyContainerHandler;
10+
import gregtech.api.capability.tool.ISoftHammerItem;
11+
import gregtech.api.gui.ModularUI;
12+
import gregtech.api.metatileentity.MetaTileEntity;
13+
import gregtech.api.metatileentity.MetaTileEntityHolder;
14+
import gregtech.api.metatileentity.TieredMetaTileEntity;
15+
import gregtech.api.render.Textures;
16+
import gregtech.api.util.PipelineUtil;
17+
import gregtech.common.tools.DamageValues;
18+
import net.minecraft.client.resources.I18n;
19+
import net.minecraft.entity.player.EntityPlayer;
20+
import net.minecraft.item.ItemStack;
21+
import net.minecraft.nbt.NBTTagCompound;
22+
import net.minecraft.network.PacketBuffer;
23+
import net.minecraft.util.EnumFacing;
24+
import net.minecraft.util.EnumHand;
25+
import net.minecraft.util.ResourceLocation;
26+
import net.minecraft.util.text.TextComponentTranslation;
27+
import net.minecraft.world.World;
28+
29+
import javax.annotation.Nullable;
30+
import java.util.Arrays;
31+
import java.util.List;
32+
33+
public class MetaTileEntityDiode extends TieredMetaTileEntity {
34+
35+
private static final String AMP_NBT_KEY = "amp_mode";
36+
private int amps;
37+
38+
public MetaTileEntityDiode(ResourceLocation metaTileEntityId, int tier) {
39+
super(metaTileEntityId, tier);
40+
amps = 1;
41+
reinitializeEnergyContainer();
42+
}
43+
44+
@Override
45+
public MetaTileEntity createMetaTileEntity(MetaTileEntityHolder holder) {
46+
return new MetaTileEntityDiode(metaTileEntityId, getTier());
47+
}
48+
49+
@Override
50+
public NBTTagCompound writeToNBT(NBTTagCompound data) {
51+
super.writeToNBT(data);
52+
data.setInteger(AMP_NBT_KEY, amps);
53+
return data;
54+
}
55+
56+
@Override
57+
public void readFromNBT(NBTTagCompound data) {
58+
super.readFromNBT(data);
59+
this.amps = data.getInteger(AMP_NBT_KEY);
60+
reinitializeEnergyContainer();
61+
}
62+
63+
@Override
64+
public void writeInitialSyncData(PacketBuffer buf) {
65+
super.writeInitialSyncData(buf);
66+
buf.writeInt(amps);
67+
}
68+
69+
@Override
70+
public void receiveInitialSyncData(PacketBuffer buf) {
71+
super.receiveInitialSyncData(buf);
72+
this.amps = buf.readInt();
73+
}
74+
75+
@Override
76+
public void receiveCustomData(int dataId, PacketBuffer buf) {
77+
super.receiveCustomData(dataId, buf);
78+
if (dataId == 101) {
79+
this.amps = buf.readInt();
80+
}
81+
}
82+
83+
private void setAmpMode() {
84+
amps = amps == 16 ? 1 : amps << 1;
85+
if (!getWorld().isRemote) {
86+
reinitializeEnergyContainer();
87+
writeCustomData(101, b -> b.writeInt(amps));
88+
getHolder().notifyBlockUpdate();
89+
markDirty();
90+
}
91+
}
92+
93+
@Override
94+
protected void reinitializeEnergyContainer() {
95+
long tierVoltage = GTValues.V[getTier()];
96+
this.energyContainer = new EnergyContainerHandler(this, tierVoltage * 8, tierVoltage, amps, tierVoltage, amps);
97+
((EnergyContainerHandler) this.energyContainer).setSideInputCondition(s -> s != getFrontFacing());
98+
((EnergyContainerHandler) this.energyContainer).setSideOutputCondition(s -> s == getFrontFacing());
99+
}
100+
101+
@Override
102+
public void renderMetaTileEntity(CCRenderState renderState, Matrix4 translation, IVertexOperation[] pipeline) {
103+
super.renderMetaTileEntity(renderState, translation, pipeline);
104+
Textures.ENERGY_IN_MULTI.renderSided(getFrontFacing(), renderState, translation, PipelineUtil.color(pipeline, GTValues.VC[getTier()]));
105+
Arrays.stream(EnumFacing.values()).filter(f -> f != frontFacing).forEach(f ->
106+
Textures.ENERGY_OUT.renderSided(f, renderState, translation, PipelineUtil.color(pipeline, GTValues.VC[getTier()])));
107+
}
108+
109+
@Override
110+
public boolean isValidFrontFacing(EnumFacing facing) {
111+
return true;
112+
}
113+
114+
@Override
115+
public boolean onRightClick(EntityPlayer playerIn, EnumHand hand, EnumFacing facing, CuboidRayTraceResult hitResult) {
116+
ItemStack itemStack = playerIn.getHeldItem(hand);
117+
if(!itemStack.isEmpty() && itemStack.hasCapability(GregtechCapabilities.CAPABILITY_MALLET, null)) {
118+
ISoftHammerItem softHammerItem = itemStack.getCapability(GregtechCapabilities.CAPABILITY_MALLET, null);
119+
120+
if (getWorld().isRemote) {
121+
scheduleRenderUpdate();
122+
return true;
123+
}
124+
if(!softHammerItem.damageItem(DamageValues.DAMAGE_FOR_SOFT_HAMMER, false)) {
125+
return false;
126+
}
127+
128+
setAmpMode();
129+
playerIn.sendMessage(new TextComponentTranslation("gregtech.machine.diode.message", amps));
130+
return true;
131+
}
132+
return false;
133+
}
134+
135+
@Override
136+
protected boolean openGUIOnRightClick() {
137+
return false;
138+
}
139+
140+
@Override
141+
protected ModularUI createUI(EntityPlayer entityPlayer) {
142+
return null;
143+
}
144+
145+
@Override
146+
public void addInformation(ItemStack stack, @Nullable World player, List<String> tooltip, boolean advanced) {
147+
tooltip.add(I18n.format("gregtech.machine.diode.tooltip_general"));
148+
tooltip.add(I18n.format("gregtech.machine.diode.tooltip_tool_usage"));
149+
tooltip.add(I18n.format("gregtech.universal.tooltip.voltage_in",
150+
energyContainer.getInputVoltage(), GTValues.VN[getTier()]));
151+
}
152+
}

src/main/java/gregtech/integration/theoneprobe/TheOneProbeCompatibility.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public static void registerCompatibility() {
1414
oneProbe.registerProvider(new ControllableInfoProvider());
1515
oneProbe.registerProvider(new DebugPipeNetInfoProvider());
1616
oneProbe.registerProvider(new TransformerInfoProvider());
17+
oneProbe.registerProvider(new DiodeInfoProvider());
1718
oneProbe.registerProvider(new MultiblockInfoProvider());
1819
}
1920
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package gregtech.integration.theoneprobe.provider;
2+
3+
import gregtech.api.capability.IEnergyContainer;
4+
import gregtech.api.metatileentity.MetaTileEntity;
5+
import gregtech.api.metatileentity.MetaTileEntityHolder;
6+
import gregtech.common.metatileentities.electric.MetaTileEntityDiode;
7+
import mcjty.theoneprobe.api.ElementAlignment;
8+
import mcjty.theoneprobe.api.IProbeInfo;
9+
import mcjty.theoneprobe.api.TextStyleClass;
10+
import net.minecraft.tileentity.TileEntity;
11+
import net.minecraft.util.EnumFacing;
12+
13+
public class DiodeInfoProvider extends ElectricContainerInfoProvider {
14+
15+
@Override
16+
public String getID() {
17+
return "gregtech:diode_info_provider";
18+
}
19+
20+
@Override
21+
protected void addProbeInfo(IEnergyContainer capability, IProbeInfo probeInfo, TileEntity tileEntity, EnumFacing sideHit) {
22+
if (tileEntity instanceof MetaTileEntityHolder) {
23+
MetaTileEntity metaTileEntity = ((MetaTileEntityHolder) tileEntity).getMetaTileEntity();
24+
if (metaTileEntity instanceof MetaTileEntityDiode) {
25+
long inputAmperage = capability.getInputAmperage();
26+
long outputAmperage = capability.getOutputAmperage();
27+
IProbeInfo horizontalPane = probeInfo.vertical(probeInfo.defaultLayoutStyle().alignment(ElementAlignment.ALIGN_CENTER));
28+
String transformInfo;
29+
if (capability.inputsEnergy(sideHit)) {
30+
transformInfo = "{*gregtech.top.transform_input*} " + inputAmperage + "A";
31+
horizontalPane.text(TextStyleClass.INFO + transformInfo);
32+
} else if (capability.outputsEnergy(sideHit)) {
33+
transformInfo = "{*gregtech.top.transform_output*} " + outputAmperage + "A";
34+
horizontalPane.text(TextStyleClass.INFO + transformInfo);
35+
}
36+
}
37+
}
38+
}
39+
}

src/main/resources/assets/gregtech/lang/en_us.lang

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2984,7 +2984,6 @@ gregtech.machine.transformer.tooltip_transform_down=Transform Down: §a%dA %dV (
29842984
gregtech.machine.transformer.message_transform_down=Transforming Down, In: %dV %dA, Out: %dV %dA
29852985
gregtech.machine.transformer.tooltip_transform_up=Transform Up: §a%dA %dV (%d)§7 -> §a%dA %dV (%d)
29862986
gregtech.machine.transformer.message_transform_up=Transforming Up, In: %dV %dA, Out: %dV %dA
2987-
29882987
gregtech.machine.transformer_adjustable.tooltip_tool_usage=Use Screwdriver to cycle amperage (Starts as 4 Amps)
29892988
gregtech.machine.transformer_adjustable.message_adjust=Adjusted Hi-Amp to %dV %dA, Lo-Amp to %dV %dA
29902989

@@ -3018,6 +3017,27 @@ gregtech.machine.transformer.adjustable.uiv.name=UIV Voltage Adjustable Transfor
30183017
gregtech.machine.transformer.adjustable.umv.name=UMV Voltage Adjustable Transformer
30193018
gregtech.machine.transformer.adjustable.uxv.name=UXV Voltage Adjustable Transformer
30203019

3020+
# Diodes
3021+
gregtech.machine.diode.message=Max Amperage throughput: %s
3022+
gregtech.machine.diode.tooltip_general=A simple Diode that will allow Energy Flow in only one direction.
3023+
gregtech.machine.diode.tooltip_tool_usage=Hit with a Soft Hammer to toggle Amperage flow.
3024+
3025+
gregtech.machine.diode.ulv.name=Ultra Low Voltage Diode
3026+
gregtech.machine.diode.lv.name=Low Voltage Diode
3027+
gregtech.machine.diode.mv.name=Medium Voltage Diode
3028+
gregtech.machine.diode.hv.name=High Voltage Diode
3029+
gregtech.machine.diode.ev.name=Extreme Voltage Diode
3030+
gregtech.machine.diode.iv.name=Insane Voltage Diode
3031+
gregtech.machine.diode.luv.name=Ludicrous Voltage Diode
3032+
gregtech.machine.diode.zpm.name=ZPM Voltage Diode
3033+
gregtech.machine.diode.uv.name=Ultimate Voltage Diode
3034+
gregtech.machine.diode.uhv.name=UHV Voltage Diode
3035+
gregtech.machine.diode.uev.name=UEV Voltage Diode
3036+
gregtech.machine.diode.uiv.name=UIV Voltage Diode
3037+
gregtech.machine.diode.umv.name=UMV Voltage Diode
3038+
gregtech.machine.diode.uxv.name=UXV Voltage Diode
3039+
gregtech.machine.diode.max.name=MAX Voltage Diode
3040+
30213041
# Chargers
30223042
gregtech.machine.charger.ulv.name=Ultra Low Voltage Battery Charger
30233043
gregtech.machine.charger.lv.name=Low Voltage Battery Charger

0 commit comments

Comments
 (0)