Skip to content

Commit 6acee86

Browse files
committed
adjustable transformers
1 parent 45e27fa commit 6acee86

File tree

10 files changed

+415
-66
lines changed

10 files changed

+415
-66
lines changed

src/main/java/gregtech/api/render/Textures.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,10 @@ public class Textures {
166166
public static final SimpleOverlayRenderer ENERGY_IN = new SimpleOverlayRenderer("overlay/machine/overlay_energy_in");
167167
public static final SimpleOverlayRenderer ENERGY_OUT_MULTI = new SimpleOverlayRenderer("overlay/machine/overlay_energy_out_multi");
168168
public static final SimpleOverlayRenderer ENERGY_IN_MULTI = new SimpleOverlayRenderer("overlay/machine/overlay_energy_in_multi");
169+
public static final SimpleOverlayRenderer ENERGY_OUT_HI = new SimpleOverlayRenderer("overlay/machine/overlay_energy_out_hi");
170+
public static final SimpleOverlayRenderer ENERGY_IN_HI = new SimpleOverlayRenderer("overlay/machine/overlay_energy_in_hi");
171+
public static final SimpleOverlayRenderer ENERGY_OUT_ULTRA = new SimpleOverlayRenderer("overlay/machine/overlay_energy_out_ultra");
172+
public static final SimpleOverlayRenderer ENERGY_IN_ULTRA = new SimpleOverlayRenderer("overlay/machine/overlay_energy_in_ultra");
169173
public static final SimpleOverlayRenderer CONVEYOR_OVERLAY = new SimpleOverlayRenderer("cover/overlay_conveyor");
170174
public static final SimpleOverlayRenderer ARM_OVERLAY = new SimpleOverlayRenderer("cover/overlay_arm");
171175
public static final SimpleOverlayRenderer PUMP_OVERLAY = new SimpleOverlayRenderer("cover/overlay_pump");

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

Lines changed: 66 additions & 54 deletions
Large diffs are not rendered by default.
Lines changed: 195 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,195 @@
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.metatileentity.MetaTileEntity;
12+
import gregtech.api.metatileentity.MetaTileEntityHolder;
13+
import gregtech.api.render.SimpleOverlayRenderer;
14+
import gregtech.api.render.Textures;
15+
import gregtech.api.util.PipelineUtil;
16+
import gregtech.common.tools.DamageValues;
17+
import net.minecraft.client.resources.I18n;
18+
import net.minecraft.entity.player.EntityPlayer;
19+
import net.minecraft.item.ItemStack;
20+
import net.minecraft.nbt.NBTTagCompound;
21+
import net.minecraft.network.PacketBuffer;
22+
import net.minecraft.util.EnumFacing;
23+
import net.minecraft.util.EnumHand;
24+
import net.minecraft.util.ResourceLocation;
25+
import net.minecraft.util.text.TextComponentTranslation;
26+
import net.minecraft.world.World;
27+
28+
import javax.annotation.Nullable;
29+
import java.util.Arrays;
30+
import java.util.List;
31+
32+
public class MetaTileEntityAdjustableTransformer extends MetaTileEntityTransformer {
33+
34+
private static final int[] hiAmpsRange = {1, 2, 4, 16};
35+
private static final int[] loAmpsRange = {4, 8, 16, 64};
36+
private int ampIndex;
37+
38+
public MetaTileEntityAdjustableTransformer(ResourceLocation metaTileEntityId, int tier) {
39+
super(metaTileEntityId, tier);
40+
this.ampIndex = 0;
41+
}
42+
43+
@Override
44+
public MetaTileEntity createMetaTileEntity(MetaTileEntityHolder holder) {
45+
return new MetaTileEntityAdjustableTransformer(metaTileEntityId, getTier());
46+
}
47+
48+
@Override
49+
public NBTTagCompound writeToNBT(NBTTagCompound data) {
50+
super.writeToNBT(data);
51+
data.setInteger("hiAmpIndex", ampIndex);
52+
return data;
53+
}
54+
55+
@Override
56+
public void readFromNBT(NBTTagCompound data) {
57+
super.readFromNBT(data);
58+
this.ampIndex = data.getInteger("hiAmpIndex");
59+
reinitializeEnergyContainer();
60+
}
61+
62+
@Override
63+
public void writeInitialSyncData(PacketBuffer buf) {
64+
super.writeInitialSyncData(buf);
65+
buf.writeInt(ampIndex);
66+
}
67+
68+
@Override
69+
public void receiveInitialSyncData(PacketBuffer buf) {
70+
super.receiveInitialSyncData(buf);
71+
this.ampIndex = buf.readInt();
72+
}
73+
74+
@Override
75+
public void receiveCustomData(int dataId, PacketBuffer buf) {
76+
super.receiveCustomData(dataId, buf);
77+
if (dataId == 101) {
78+
this.ampIndex = buf.readInt();
79+
scheduleRenderUpdate();
80+
}
81+
}
82+
83+
protected void incrementAmpIndex() {
84+
this.ampIndex = (this.ampIndex + 1) % hiAmpsRange.length;
85+
if (!getWorld().isRemote) {
86+
reinitializeEnergyContainer();
87+
writeCustomData(101, b -> b.writeInt(ampIndex));
88+
getHolder().notifyBlockUpdate();
89+
markDirty();
90+
}
91+
}
92+
93+
@Override
94+
protected void reinitializeEnergyContainer() {
95+
long tierVoltage = GTValues.V[getTier()];
96+
if (isInverted()) {
97+
//storage = 1 amp high; input = tier / 4; amperage = X; output = tier; amperage = Y
98+
this.energyContainer = new EnergyContainerHandler(this, tierVoltage * 128L, tierVoltage, loAmpsRange[ampIndex], tierVoltage * 4, hiAmpsRange[ampIndex]);
99+
((EnergyContainerHandler) this.energyContainer).setSideInputCondition(s -> s != getFrontFacing());
100+
((EnergyContainerHandler) this.energyContainer).setSideOutputCondition(s -> s == getFrontFacing());
101+
} else {
102+
//storage = 1 amp high; input = tier; amperage = Y; output = tier / 4; amperage = X
103+
this.energyContainer = new EnergyContainerHandler(this, tierVoltage * 128L, tierVoltage * 4, hiAmpsRange[ampIndex], tierVoltage, loAmpsRange[ampIndex]);
104+
((EnergyContainerHandler) this.energyContainer).setSideInputCondition(s -> s == getFrontFacing());
105+
((EnergyContainerHandler) this.energyContainer).setSideOutputCondition(s -> s != getFrontFacing());
106+
}
107+
}
108+
109+
@Override
110+
public void renderMetaTileEntity(CCRenderState renderState, Matrix4 translation, IVertexOperation[] pipeline) {
111+
super.renderMetaTileEntity(renderState, translation, pipeline);
112+
113+
SimpleOverlayRenderer otherFaceTexture;
114+
SimpleOverlayRenderer frontFaceTexture;
115+
switch (this.ampIndex) {
116+
case 1:
117+
otherFaceTexture = isInverted() ? Textures.ENERGY_IN_MULTI : Textures.ENERGY_OUT_MULTI;
118+
frontFaceTexture = isInverted() ? Textures.ENERGY_IN_HI : Textures.ENERGY_IN_HI;
119+
break;
120+
case 2:
121+
otherFaceTexture = isInverted() ? Textures.ENERGY_IN_HI : Textures.ENERGY_OUT_HI;
122+
frontFaceTexture = isInverted() ? Textures.ENERGY_OUT_ULTRA : Textures.ENERGY_IN_ULTRA;
123+
break;
124+
case 3:
125+
otherFaceTexture = isInverted() ? Textures.ENERGY_IN_ULTRA : Textures.ENERGY_OUT_ULTRA;
126+
frontFaceTexture = isInverted() ? Textures.ENERGY_OUT_ULTRA : Textures.ENERGY_IN_ULTRA;
127+
break;
128+
default:
129+
otherFaceTexture = isInverted() ? Textures.ENERGY_IN : Textures.ENERGY_OUT;
130+
frontFaceTexture = isInverted() ? Textures.ENERGY_OUT_MULTI : Textures.ENERGY_IN_MULTI;
131+
}
132+
133+
frontFaceTexture.renderSided(frontFacing, renderState, translation, PipelineUtil.color(pipeline, GTValues.VC[getTier() + 1]));
134+
Arrays.stream(EnumFacing.values()).filter(f -> f != frontFacing)
135+
.forEach((f -> otherFaceTexture.renderSided(f, renderState, translation, PipelineUtil.color(pipeline, GTValues.VC[getTier()]))));
136+
}
137+
138+
@Override
139+
public boolean onRightClick(EntityPlayer playerIn, EnumHand hand, EnumFacing facing, CuboidRayTraceResult hitResult) {
140+
ItemStack itemStack = playerIn.getHeldItem(hand);
141+
if (!itemStack.isEmpty() && itemStack.hasCapability(GregtechCapabilities.CAPABILITY_MALLET, null)) {
142+
ISoftHammerItem softHammerItem = itemStack.getCapability(GregtechCapabilities.CAPABILITY_MALLET, null);
143+
144+
if (getWorld().isRemote) {
145+
scheduleRenderUpdate();
146+
return true;
147+
}
148+
if (!softHammerItem.damageItem(DamageValues.DAMAGE_FOR_SOFT_HAMMER, false)) {
149+
return false;
150+
}
151+
152+
if (isInverted()) {
153+
setTransformUp(false);
154+
playerIn.sendMessage(new TextComponentTranslation("gregtech.machine.transformer.message_transform_down",
155+
energyContainer.getInputVoltage(), energyContainer.getInputAmperage(), energyContainer.getOutputVoltage(), energyContainer.getOutputAmperage()));
156+
} else {
157+
setTransformUp(true);
158+
playerIn.sendMessage(new TextComponentTranslation("gregtech.machine.transformer.message_transform_up",
159+
energyContainer.getInputVoltage(), energyContainer.getInputAmperage(), energyContainer.getOutputVoltage(), energyContainer.getOutputAmperage()));
160+
}
161+
return true;
162+
}
163+
return false;
164+
}
165+
166+
@Override
167+
public boolean onScrewdriverClick(EntityPlayer playerIn, EnumHand hand, EnumFacing facing, CuboidRayTraceResult hitResult) {
168+
if (getWorld().isRemote) {
169+
scheduleRenderUpdate();
170+
return true;
171+
}
172+
173+
incrementAmpIndex();
174+
playerIn.sendMessage(new TextComponentTranslation("gregtech.machine.transformer_adjustable.message_adjust",
175+
energyContainer.getInputVoltage(), energyContainer.getInputAmperage(), energyContainer.getOutputVoltage(), energyContainer.getOutputAmperage()));
176+
177+
return true;
178+
}
179+
180+
@Override
181+
public void addInformation(ItemStack stack, @Nullable World player, List<String> tooltip, boolean advanced) {
182+
String lowerTierName = GTValues.VN[getTier()];
183+
String higherTierName = GTValues.VN[getTier() + 1];
184+
long lowerVoltage = energyContainer.getOutputVoltage();
185+
long higherVoltage = energyContainer.getInputVoltage();
186+
long lowerAmperage = energyContainer.getInputAmperage();
187+
long higherAmperage = energyContainer.getOutputAmperage();
188+
189+
tooltip.add(I18n.format("gregtech.machine.transformer.tooltip_tool_usage"));
190+
tooltip.add(I18n.format("gregtech.machine.transformer_adjustable.tooltip_tool_usage"));
191+
tooltip.add(I18n.format("gregtech.universal.tooltip.energy_storage_capacity", energyContainer.getEnergyCapacity()));
192+
tooltip.add(I18n.format("gregtech.machine.transformer.tooltip_transform_down", lowerAmperage, higherVoltage, higherTierName, higherAmperage, lowerVoltage, lowerTierName));
193+
tooltip.add(I18n.format("gregtech.machine.transformer.tooltip_transform_up", higherAmperage, lowerVoltage, lowerTierName, lowerAmperage, higherVoltage, higherTierName));
194+
}
195+
}

src/main/java/gregtech/common/metatileentities/electric/MetaTileEntityTransformer.java

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -175,15 +175,7 @@ public void addInformation(ItemStack stack, @Nullable World player, List<String>
175175

176176
tooltip.add(I18n.format("gregtech.machine.transformer.tooltip_tool_usage"));
177177
tooltip.add(I18n.format("gregtech.universal.tooltip.energy_storage_capacity", energyContainer.getEnergyCapacity()));
178-
tooltip.add(I18n.format("gregtech.machine.transformer.tooltip_transform_down"));
179-
tooltip.add(I18n.format("gregtech.universal.tooltip.voltage_in", higherVoltage, higherTierName));
180-
tooltip.add(I18n.format("gregtech.universal.tooltip.voltage_out", lowerVoltage, lowerTierName));
181-
tooltip.add(I18n.format("gregtech.universal.tooltip.amperage_in", lowerAmperage));
182-
tooltip.add(I18n.format("gregtech.universal.tooltip.amperage_out", higherAmperage));
183-
tooltip.add(I18n.format("gregtech.machine.transformer.tooltip_transform_up"));
184-
tooltip.add(I18n.format("gregtech.universal.tooltip.voltage_in", lowerVoltage, lowerTierName));
185-
tooltip.add(I18n.format("gregtech.universal.tooltip.voltage_out", higherVoltage, higherTierName));
186-
tooltip.add(I18n.format("gregtech.universal.tooltip.amperage_in", higherAmperage));
187-
tooltip.add(I18n.format("gregtech.universal.tooltip.amperage_out", lowerAmperage));
178+
tooltip.add(I18n.format("gregtech.machine.transformer.tooltip_transform_down", lowerAmperage, higherVoltage, higherTierName, higherAmperage, lowerVoltage, lowerTierName));
179+
tooltip.add(I18n.format("gregtech.machine.transformer.tooltip_transform_up", higherAmperage, lowerVoltage, lowerTierName, lowerAmperage, higherVoltage, higherTierName));
188180
}
189181
}
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
package gregtech.common.metatileentities.electric.multiblockpart;
2+
3+
import codechicken.lib.render.CCRenderState;
4+
import codechicken.lib.render.pipeline.IVertexOperation;
5+
import codechicken.lib.vec.Matrix4;
6+
import gregtech.api.GTValues;
7+
import gregtech.api.capability.IEnergyContainer;
8+
import gregtech.api.capability.impl.EnergyContainerHandler;
9+
import gregtech.api.gui.ModularUI;
10+
import gregtech.api.metatileentity.MetaTileEntity;
11+
import gregtech.api.metatileentity.MetaTileEntityHolder;
12+
import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart;
13+
import gregtech.api.metatileentity.multiblock.MultiblockAbility;
14+
import gregtech.api.render.SimpleOverlayRenderer;
15+
import gregtech.api.render.Textures;
16+
import gregtech.api.util.PipelineUtil;
17+
import net.minecraft.client.resources.I18n;
18+
import net.minecraft.entity.player.EntityPlayer;
19+
import net.minecraft.item.ItemStack;
20+
import net.minecraft.util.ResourceLocation;
21+
import net.minecraft.world.World;
22+
23+
import javax.annotation.Nullable;
24+
import java.util.List;
25+
26+
public class MetaTileEntityAdjustableEnergyHatch extends MetaTileEntityMultiblockPart implements IMultiblockAbilityPart<IEnergyContainer> {
27+
28+
private final boolean isExportHatch;
29+
private final IEnergyContainer energyContainer;
30+
31+
public MetaTileEntityAdjustableEnergyHatch(ResourceLocation metaTileEntityId, int tier, boolean isExportHatch) {
32+
super(metaTileEntityId, tier);
33+
this.isExportHatch = isExportHatch;
34+
if (isExportHatch) {
35+
this.energyContainer = EnergyContainerHandler.emitterContainer(this, GTValues.V[tier] * 128L, GTValues.V[tier], 1);
36+
((EnergyContainerHandler) this.energyContainer).setSideOutputCondition(s -> s == getFrontFacing());
37+
} else {
38+
this.energyContainer = EnergyContainerHandler.receiverContainer(this, GTValues.V[tier] * 16L, GTValues.V[tier], 2);
39+
}
40+
}
41+
42+
@Override
43+
public MetaTileEntity createMetaTileEntity(MetaTileEntityHolder holder) {
44+
return new MetaTileEntityAdjustableEnergyHatch(metaTileEntityId, getTier(), isExportHatch);
45+
}
46+
47+
@Override
48+
public void renderMetaTileEntity(CCRenderState renderState, Matrix4 translation, IVertexOperation[] pipeline) {
49+
super.renderMetaTileEntity(renderState, translation, pipeline);
50+
if (shouldRenderOverlay()) {
51+
SimpleOverlayRenderer renderer = isExportHatch ? Textures.ENERGY_OUT_MULTI : Textures.ENERGY_IN_MULTI;
52+
renderer.renderSided(getFrontFacing(), renderState, translation, PipelineUtil.color(pipeline, GTValues.VC[getTier()]));
53+
}
54+
}
55+
56+
@Override
57+
public MultiblockAbility<IEnergyContainer> getAbility() {
58+
return isExportHatch ? MultiblockAbility.OUTPUT_ENERGY : MultiblockAbility.INPUT_ENERGY;
59+
}
60+
61+
@Override
62+
public void registerAbilities(List<IEnergyContainer> abilityList) {
63+
abilityList.add(energyContainer);
64+
}
65+
66+
@Override
67+
protected boolean openGUIOnRightClick() {
68+
return false;
69+
}
70+
71+
@Override
72+
protected ModularUI createUI(EntityPlayer entityPlayer) {
73+
return null;
74+
}
75+
76+
@Override
77+
public void addInformation(ItemStack stack, @Nullable World player, List<String> tooltip, boolean advanced) {
78+
String tierName = GTValues.VN[getTier()];
79+
80+
if (isExportHatch) {
81+
tooltip.add(I18n.format("gregtech.machine.energy_hatch.output.tooltip"));
82+
tooltip.add(I18n.format("gregtech.universal.tooltip.voltage_out", energyContainer.getOutputVoltage(), tierName));
83+
tooltip.add(I18n.format("gregtech.universal.tooltip.amperage_out_till", energyContainer.getOutputAmperage()));
84+
} else {
85+
tooltip.add(I18n.format("gregtech.machine.energy_hatch.input.tooltip"));
86+
tooltip.add(I18n.format("gregtech.universal.tooltip.voltage_in", energyContainer.getInputVoltage(), tierName));
87+
tooltip.add(I18n.format("gregtech.universal.tooltip.amperage_in_till", energyContainer.getInputAmperage()));
88+
}
89+
tooltip.add(I18n.format("gregtech.universal.tooltip.energy_storage_capacity", energyContainer.getEnergyCapacity()));
90+
tooltip.add(I18n.format("gregtech.universal.enabled"));
91+
}
92+
}

0 commit comments

Comments
 (0)