Skip to content

Commit c9300f6

Browse files
committed
Hot coolant output logic
1 parent 77ec16d commit c9300f6

File tree

3 files changed

+75
-20
lines changed

3 files changed

+75
-20
lines changed

src/main/java/gregtech/api/metatileentity/multiblock/MultiblockAbility.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public class MultiblockAbility<T> {
8080
public static final MultiblockAbility<IItemHandlerModifiable> EXPORT_FUEL_ROD = new MultiblockAbility<>(
8181
"export_fuel_rod");
8282
public static final MultiblockAbility<ICoolantHandler> IMPORT_COOLANT = new MultiblockAbility<>("import_coolant");
83-
public static final MultiblockAbility<IFluidTank> EXPORT_COOLANT = new MultiblockAbility<>("export_coolant");
83+
public static final MultiblockAbility<ICoolantHandler> EXPORT_COOLANT = new MultiblockAbility<>("export_coolant");
8484
public static final MultiblockAbility<IControlRodPort> CONTROL_ROD_PORT = new MultiblockAbility<>(
8585
"control_rod_port");
8686

src/main/java/gregtech/common/metatileentities/multi/MetaTileEntityFissionReactor.java

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
import net.minecraft.world.World;
4848
import net.minecraftforge.fluids.FluidStack;
4949

50+
import net.minecraftforge.fluids.IFluidTank;
5051
import net.minecraftforge.fml.relauncher.Side;
5152

5253
import net.minecraftforge.fml.relauncher.SideOnly;
@@ -123,6 +124,9 @@ protected void updateFormedValid() {
123124
.getCoolingFactor() * this.flowRate;
124125
coolantImport.getFluidTank().drain(this.flowRate, true);
125126
}
127+
for (ICoolantHandler coolantExport : this.getAbilities(MultiblockAbility.EXPORT_COOLANT)) {
128+
coolantExport.getFluidTank().fill(coolantExport.getCoolant().getFluid(this.flowRate), true);
129+
}
126130

127131
// Fuel handling
128132
if (this.fissionReactor.fuelDepletion == 1.) {
@@ -385,6 +389,30 @@ protected void addDisplayText(List<ITextComponent> textList) {
385389
textList.add(toggleText);
386390
}
387391

392+
protected void lockAll() {
393+
for (ILockableHandler handler : this.getAbilities(MultiblockAbility.IMPORT_COOLANT)) {
394+
handler.setLock(true);
395+
}
396+
for (ILockableHandler handler : this.getAbilities(MultiblockAbility.EXPORT_COOLANT)) {
397+
handler.setLock(true);
398+
}
399+
for (ILockableHandler handler : this.getAbilities(MultiblockAbility.IMPORT_FUEL_ROD)) {
400+
handler.setLock(true);
401+
}
402+
}
403+
404+
protected void unlockAll() {
405+
for (ILockableHandler handler : this.getAbilities(MultiblockAbility.IMPORT_COOLANT)) {
406+
handler.setLock(false);
407+
}
408+
for (ILockableHandler handler : this.getAbilities(MultiblockAbility.EXPORT_COOLANT)) {
409+
handler.setLock(false);
410+
}
411+
for (ILockableHandler handler : this.getAbilities(MultiblockAbility.IMPORT_FUEL_ROD)) {
412+
handler.setLock(false);
413+
}
414+
}
415+
388416
@Override
389417
protected void handleDisplayClick(String componentData, Widget.ClickData clickData) {
390418
super.handleDisplayClick(componentData, clickData);
@@ -393,23 +421,13 @@ protected void handleDisplayClick(String componentData, Widget.ClickData clickDa
393421
if (this.locked) {
394422
lockAndPrepareReactor();
395423
} else {
396-
for (ILockableHandler handler : this.getAbilities(MultiblockAbility.IMPORT_COOLANT)) {
397-
handler.setLock(false);
398-
}
399-
for (ILockableHandler handler : this.getAbilities(MultiblockAbility.IMPORT_FUEL_ROD)) {
400-
handler.setLock(false);
401-
}
424+
this.unlockAll();
402425
}
403426
}
404427
}
405428

406429
private void lockAndPrepareReactor() {
407-
for (ILockableHandler handler : this.getAbilities(MultiblockAbility.IMPORT_COOLANT)) {
408-
handler.setLock(true);
409-
}
410-
for (ILockableHandler handler : this.getAbilities(MultiblockAbility.IMPORT_FUEL_ROD)) {
411-
handler.setLock(true);
412-
}
430+
this.lockAll();
413431
fissionReactor = new FissionReactor(this.diameter - 2);
414432
int radius = this.diameter % 2 == 0 ? (int) Math.floor(this.diameter / 2.f) :
415433
Math.round((this.diameter - 1) / 2.f);

src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityCoolantExportHatch.java

Lines changed: 44 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package gregtech.common.metatileentities.multi.multiblockpart;
22

33
import gregtech.api.capability.IControllable;
4+
import gregtech.api.capability.ICoolantHandler;
45
import gregtech.api.capability.impl.FilteredItemHandler;
6+
import gregtech.api.capability.impl.LockableFluidTank;
57
import gregtech.api.capability.impl.NotifiableFluidTank;
68
import gregtech.api.gui.GuiTextures;
79
import gregtech.api.gui.ModularUI;
@@ -14,6 +16,8 @@
1416
import gregtech.api.metatileentity.multiblock.IFissionReactorHatch;
1517
import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart;
1618
import gregtech.api.metatileentity.multiblock.MultiblockAbility;
19+
import gregtech.api.unification.material.Material;
20+
import gregtech.api.unification.material.properties.PropertyKey;
1721
import gregtech.client.renderer.texture.Textures;
1822
import gregtech.client.renderer.texture.cube.SimpleOverlayRenderer;
1923

@@ -32,16 +36,19 @@
3236

3337
import java.util.List;
3438

35-
public class MetaTileEntityCoolantExportHatch extends MetaTileEntityMultiblockNotifiablePart implements
36-
IMultiblockAbilityPart<IFluidTank>, IControllable, IFissionReactorHatch {
39+
import static gregtech.api.capability.GregtechDataCodes.LOCK_UPDATE;
40+
41+
public class MetaTileEntityCoolantExportHatch extends MetaTileEntityMultiblockNotifiablePart
42+
implements IMultiblockAbilityPart<ICoolantHandler>, ICoolantHandler,
43+
IControllable, IFissionReactorHatch {
3744

3845
private boolean workingEnabled;
3946
private boolean valid;
40-
private final FluidTank fluidTank;
47+
private LockableFluidTank fluidTank;
48+
private Material coolant;
4149

4250
public MetaTileEntityCoolantExportHatch(ResourceLocation metaTileEntityId) {
4351
super(metaTileEntityId, 4, true);
44-
this.fluidTank = new NotifiableFluidTank(16000, this, true);
4552
this.frontFacing = EnumFacing.DOWN;
4653
}
4754

@@ -105,19 +112,49 @@ public boolean checkValidity(int depth) {
105112
return true;
106113
}
107114

115+
@Override
116+
public void setLock(boolean isLocked) {
117+
fluidTank.setLock(isLocked);
118+
writeCustomData(LOCK_UPDATE, (packetBuffer -> packetBuffer.writeBoolean(isLocked)));
119+
}
120+
121+
@Override
122+
public boolean isLocked() {
123+
return fluidTank.isLocked();
124+
}
125+
126+
@Override
127+
public Material getCoolant() {
128+
return this.coolant;
129+
}
130+
131+
@Override
132+
public void setCoolant(Material material) {
133+
if (!material.hasProperty(PropertyKey.COOLANT)) {
134+
throw new IllegalStateException(
135+
"Can't use material " + material.getName() + " as a coolant without a coolant property");
136+
}
137+
this.coolant = material;
138+
}
139+
140+
@Override
141+
public LockableFluidTank getFluidTank() {
142+
return this.fluidTank;
143+
}
144+
108145
@Override
109146
public void setValid(boolean valid) {
110147
this.valid = valid;
111148
}
112149

113150
@Override
114-
public MultiblockAbility<IFluidTank> getAbility() {
151+
public MultiblockAbility<ICoolantHandler> getAbility() {
115152
return MultiblockAbility.EXPORT_COOLANT;
116153
}
117154

118155
@Override
119-
public void registerAbilities(List<IFluidTank> abilityList) {
120-
abilityList.add(fluidTank);
156+
public void registerAbilities(List<ICoolantHandler> abilityList) {
157+
abilityList.add(this);
121158
}
122159

123160
@Override

0 commit comments

Comments
 (0)