Skip to content

Commit

Permalink
Hot coolant output logic
Browse files Browse the repository at this point in the history
  • Loading branch information
Zalgo239 committed Dec 28, 2023
1 parent 77ec16d commit c9300f6
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ public class MultiblockAbility<T> {
public static final MultiblockAbility<IItemHandlerModifiable> EXPORT_FUEL_ROD = new MultiblockAbility<>(
"export_fuel_rod");
public static final MultiblockAbility<ICoolantHandler> IMPORT_COOLANT = new MultiblockAbility<>("import_coolant");
public static final MultiblockAbility<IFluidTank> EXPORT_COOLANT = new MultiblockAbility<>("export_coolant");
public static final MultiblockAbility<ICoolantHandler> EXPORT_COOLANT = new MultiblockAbility<>("export_coolant");
public static final MultiblockAbility<IControlRodPort> CONTROL_ROD_PORT = new MultiblockAbility<>(
"control_rod_port");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
import net.minecraft.world.World;
import net.minecraftforge.fluids.FluidStack;

import net.minecraftforge.fluids.IFluidTank;
import net.minecraftforge.fml.relauncher.Side;

import net.minecraftforge.fml.relauncher.SideOnly;
Expand Down Expand Up @@ -123,6 +124,9 @@ protected void updateFormedValid() {
.getCoolingFactor() * this.flowRate;
coolantImport.getFluidTank().drain(this.flowRate, true);
}
for (ICoolantHandler coolantExport : this.getAbilities(MultiblockAbility.EXPORT_COOLANT)) {
coolantExport.getFluidTank().fill(coolantExport.getCoolant().getFluid(this.flowRate), true);
}

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

protected void lockAll() {
for (ILockableHandler handler : this.getAbilities(MultiblockAbility.IMPORT_COOLANT)) {
handler.setLock(true);
}
for (ILockableHandler handler : this.getAbilities(MultiblockAbility.EXPORT_COOLANT)) {
handler.setLock(true);
}
for (ILockableHandler handler : this.getAbilities(MultiblockAbility.IMPORT_FUEL_ROD)) {
handler.setLock(true);
}
}

protected void unlockAll() {
for (ILockableHandler handler : this.getAbilities(MultiblockAbility.IMPORT_COOLANT)) {
handler.setLock(false);
}
for (ILockableHandler handler : this.getAbilities(MultiblockAbility.EXPORT_COOLANT)) {
handler.setLock(false);
}
for (ILockableHandler handler : this.getAbilities(MultiblockAbility.IMPORT_FUEL_ROD)) {
handler.setLock(false);
}
}

@Override
protected void handleDisplayClick(String componentData, Widget.ClickData clickData) {
super.handleDisplayClick(componentData, clickData);
Expand All @@ -393,23 +421,13 @@ protected void handleDisplayClick(String componentData, Widget.ClickData clickDa
if (this.locked) {
lockAndPrepareReactor();
} else {
for (ILockableHandler handler : this.getAbilities(MultiblockAbility.IMPORT_COOLANT)) {
handler.setLock(false);
}
for (ILockableHandler handler : this.getAbilities(MultiblockAbility.IMPORT_FUEL_ROD)) {
handler.setLock(false);
}
this.unlockAll();
}
}
}

private void lockAndPrepareReactor() {
for (ILockableHandler handler : this.getAbilities(MultiblockAbility.IMPORT_COOLANT)) {
handler.setLock(true);
}
for (ILockableHandler handler : this.getAbilities(MultiblockAbility.IMPORT_FUEL_ROD)) {
handler.setLock(true);
}
this.lockAll();
fissionReactor = new FissionReactor(this.diameter - 2);
int radius = this.diameter % 2 == 0 ? (int) Math.floor(this.diameter / 2.f) :
Math.round((this.diameter - 1) / 2.f);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package gregtech.common.metatileentities.multi.multiblockpart;

import gregtech.api.capability.IControllable;
import gregtech.api.capability.ICoolantHandler;
import gregtech.api.capability.impl.FilteredItemHandler;
import gregtech.api.capability.impl.LockableFluidTank;
import gregtech.api.capability.impl.NotifiableFluidTank;
import gregtech.api.gui.GuiTextures;
import gregtech.api.gui.ModularUI;
Expand All @@ -14,6 +16,8 @@
import gregtech.api.metatileentity.multiblock.IFissionReactorHatch;
import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart;
import gregtech.api.metatileentity.multiblock.MultiblockAbility;
import gregtech.api.unification.material.Material;
import gregtech.api.unification.material.properties.PropertyKey;
import gregtech.client.renderer.texture.Textures;
import gregtech.client.renderer.texture.cube.SimpleOverlayRenderer;

Expand All @@ -32,16 +36,19 @@

import java.util.List;

public class MetaTileEntityCoolantExportHatch extends MetaTileEntityMultiblockNotifiablePart implements
IMultiblockAbilityPart<IFluidTank>, IControllable, IFissionReactorHatch {
import static gregtech.api.capability.GregtechDataCodes.LOCK_UPDATE;

public class MetaTileEntityCoolantExportHatch extends MetaTileEntityMultiblockNotifiablePart
implements IMultiblockAbilityPart<ICoolantHandler>, ICoolantHandler,
IControllable, IFissionReactorHatch {

private boolean workingEnabled;
private boolean valid;
private final FluidTank fluidTank;
private LockableFluidTank fluidTank;
private Material coolant;

public MetaTileEntityCoolantExportHatch(ResourceLocation metaTileEntityId) {
super(metaTileEntityId, 4, true);
this.fluidTank = new NotifiableFluidTank(16000, this, true);
this.frontFacing = EnumFacing.DOWN;
}

Expand Down Expand Up @@ -105,19 +112,49 @@ public boolean checkValidity(int depth) {
return true;
}

@Override
public void setLock(boolean isLocked) {
fluidTank.setLock(isLocked);
writeCustomData(LOCK_UPDATE, (packetBuffer -> packetBuffer.writeBoolean(isLocked)));
}

@Override
public boolean isLocked() {
return fluidTank.isLocked();
}

@Override
public Material getCoolant() {
return this.coolant;
}

@Override
public void setCoolant(Material material) {
if (!material.hasProperty(PropertyKey.COOLANT)) {
throw new IllegalStateException(
"Can't use material " + material.getName() + " as a coolant without a coolant property");
}
this.coolant = material;
}

@Override
public LockableFluidTank getFluidTank() {
return this.fluidTank;
}

@Override
public void setValid(boolean valid) {
this.valid = valid;
}

@Override
public MultiblockAbility<IFluidTank> getAbility() {
public MultiblockAbility<ICoolantHandler> getAbility() {
return MultiblockAbility.EXPORT_COOLANT;
}

@Override
public void registerAbilities(List<IFluidTank> abilityList) {
abilityList.add(fluidTank);
public void registerAbilities(List<ICoolantHandler> abilityList) {
abilityList.add(this);
}

@Override
Expand Down

0 comments on commit c9300f6

Please sign in to comment.