Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Optional;

public final class MachineTraitHolder {

Expand Down Expand Up @@ -48,6 +49,10 @@ public void attachTrait(MachineTrait trait) {
return type.castTrait(traitList.get(0));
}

public <T extends MachineTrait> Optional<T> getTraitOptional(MachineTraitType<T> type) {
return Optional.ofNullable(getTrait(type));
}

/**
* Get all traits with the specified type.
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package com.gregtechceu.gtceu.api.machine.trait.hpca;

import com.gregtechceu.gtceu.api.machine.MetaMachine;
import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties;
import com.gregtechceu.gtceu.api.machine.trait.MachineTrait;
import com.gregtechceu.gtceu.api.machine.trait.MachineTraitType;
import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged;
import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField;
import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient;
import com.gregtechceu.gtceu.client.model.machine.MachineRenderState;

import lombok.Getter;
import lombok.experimental.Accessors;

@Accessors(fluent = true)
@Getter
public class HPCAComponentTrait extends MachineTrait {

public static final MachineTraitType<HPCAComponentTrait> TYPE = new MachineTraitType<>(HPCAComponentTrait.class);

@Getter
private final int upkeepEUt, maxEUt;
@Getter
private final boolean canBeDamaged, allowBridging;
@SaveField
@SyncToClient
@RerenderOnChanged
@Getter
private boolean isDamaged;

public HPCAComponentTrait(MetaMachine machine, int upkeepEUt, int maxEUt, boolean canBeDamaged,
boolean allowBridging) {
super(machine);
this.upkeepEUt = upkeepEUt;
this.maxEUt = maxEUt;
this.canBeDamaged = canBeDamaged;
this.isDamaged = false;
this.allowBridging = allowBridging;
}

@Override
public MachineTraitType<HPCAComponentTrait> getTraitType() {
return TYPE;
}

public void setDamaged(boolean damaged) {
if (!canBeDamaged) return;
if (isDamaged != damaged) {
isDamaged = damaged;
syncDataHolder.markClientSyncFieldDirty("damaged");
MachineRenderState state = getRenderState();
if (state.hasProperty(GTMachineModelProperties.IS_HPCA_PART_DAMAGED)) {
setRenderState(state.setValue(GTMachineModelProperties.IS_HPCA_PART_DAMAGED, damaged));
}
}
}

public void setActive(boolean active) {
MachineRenderState state = getRenderState();
if (state.hasProperty(GTMachineModelProperties.IS_ACTIVE)) {
setRenderState(state.setValue(GTMachineModelProperties.IS_ACTIVE, active));
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.gregtechceu.gtceu.api.machine.trait.hpca;

import com.gregtechceu.gtceu.api.machine.MetaMachine;

import lombok.Setter;

public class HPCAComputationProviderTrait extends HPCAComponentTrait {

@Setter
private int CWUPerTick, coolingPerTick;

public HPCAComputationProviderTrait(MetaMachine machine, int upkeepEUt, int maxEUt, boolean canBeDamaged,
boolean allowBridging, int CWUPerTick, int coolingPerTick) {
super(machine, upkeepEUt, maxEUt, canBeDamaged, allowBridging);
this.CWUPerTick = CWUPerTick;
this.coolingPerTick = coolingPerTick;
}

public int getCoolingPerTick() {
if (isDamaged()) return 0;
return coolingPerTick;
}

public int getCWUPerTick() {
if (isDamaged()) return 0;
return CWUPerTick;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.gregtechceu.gtceu.api.machine.trait.hpca;

import com.gregtechceu.gtceu.api.machine.MetaMachine;

import lombok.Getter;

@Getter
public class HPCACoolantProviderTrait extends HPCAComponentTrait {

private final int coolingAmount, maxCoolantPerTick;
private final boolean isActiveCooler;

public HPCACoolantProviderTrait(MetaMachine machine, int upkeepEUt, int maxEUt, boolean canBeDamaged,
boolean allowBridging, int coolingAmount, int maxCoolantPerTick,
boolean isActiveCooler) {
super(machine, upkeepEUt, maxEUt, canBeDamaged, allowBridging);
this.coolingAmount = coolingAmount;
this.maxCoolantPerTick = maxCoolantPerTick;
this.isActiveCooler = isActiveCooler;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
@NotNullByDefault
package com.gregtechceu.gtceu.api.machine.trait.hpca;

import org.jetbrains.annotations.NotNullByDefault;
Original file line number Diff line number Diff line change
Expand Up @@ -421,8 +421,7 @@ protected TraceabilityPredicate innerPredicate() {
if (isMachineBanned(machine)) {
return false;
}
CleanroomReceiverTrait receiverTrait = machine.getTraitHolder().getTrait(CleanroomReceiverTrait.TYPE);
if (receiverTrait != null) receivers.add(receiverTrait);
machine.getTraitHolder().getTraitOptional(CleanroomReceiverTrait.TYPE).ifPresent(receivers::add);
}
return true;
}, null) {
Expand Down
Loading