Skip to content

Commit 6d2a014

Browse files
committed
ink pastel node logic: fin~
1 parent 86911cf commit 6d2a014

3 files changed

Lines changed: 20 additions & 75 deletions

File tree

src/main/java/de/dafuqs/spectrum/blocks/pastel_network/network/PastelTransmissionLogic.java

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,18 @@
11
package de.dafuqs.spectrum.blocks.pastel_network.network;
22

3-
import com.mojang.serialization.*;
43
import de.dafuqs.spectrum.blocks.pastel_network.nodes.*;
54
import de.dafuqs.spectrum.blocks.pastel_network.payloads.*;
6-
import de.dafuqs.spectrum.helpers.*;
75
import de.dafuqs.spectrum.networking.s2c_payloads.*;
86
import de.dafuqs.spectrum.registries.*;
97
import net.minecraft.core.*;
108
import net.minecraft.resources.*;
11-
import net.minecraft.util.*;
12-
import net.minecraft.world.item.*;
13-
import net.neoforged.neoforge.items.*;
149
import org.jetbrains.annotations.*;
1510
import org.jgrapht.*;
16-
import org.jgrapht.Graph;
1711
import org.jgrapht.alg.interfaces.*;
1812
import org.jgrapht.alg.shortestpath.*;
1913
import org.jgrapht.graph.*;
2014

2115
import java.util.*;
22-
import java.util.function.*;
2316

2417
@SuppressWarnings("UnstableApiUsage")
2518
public class PastelTransmissionLogic {
@@ -80,7 +73,7 @@ public void invalidateCache() {
8073

8174
public void tick(PastelNetwork.NodePriority priority) {
8275
for(Map.Entry<ResourceKey<PastelPayloadType>, PastelPayloadType> payloadType : SpectrumRegistries.PASTEL_PAYLOAD_TYPE.entrySet()) {
83-
payloadType.getValue().tick(this);
76+
payloadType.getValue().tick(this, priority);
8477
}
8578
}
8679

src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/InkPastelPayloadType.java

Lines changed: 15 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,14 @@
22

33
import de.dafuqs.spectrum.*;
44
import de.dafuqs.spectrum.api.energy.*;
5-
import de.dafuqs.spectrum.api.energy.color.*;
65
import de.dafuqs.spectrum.blocks.pastel_network.network.*;
76
import de.dafuqs.spectrum.blocks.pastel_network.nodes.*;
87
import net.minecraft.core.*;
98
import net.minecraft.world.level.block.entity.*;
109
import net.minecraft.world.level.block.state.*;
11-
import net.neoforged.neoforge.capabilities.*;
12-
import net.neoforged.neoforge.fluids.*;
13-
import net.neoforged.neoforge.fluids.capability.*;
1410
import org.jetbrains.annotations.*;
15-
import org.jgrapht.*;
16-
import org.jgrapht.graph.*;
1711

1812
import java.util.*;
19-
import java.util.function.*;
2013

2114
public class InkPastelPayloadType extends PastelPayloadType {
2215

@@ -38,68 +31,25 @@ public InkPastelPayloadType() {
3831
}
3932

4033
@Override
41-
public void tick(PastelTransmissionLogic logic) {
42-
for (PastelNodeBlockEntity sourceNode : logic.getLoadedNodes(PastelNodeType.SENDER)) {
43-
for(Supplier<? extends PastelPayloadType> payloadType : sourceNode.getSupportedPayloads()) {
44-
if(payloadType.get() != this) {
45-
continue;
46-
}
47-
payloadType.get().tryTransferToType(logic, sourceNode, PastelNodeType.SENDER, PastelTransmissionLogic.TransferMode.PUSH);
48-
}
49-
}
50-
}
51-
52-
@Override
53-
public void tryTransferToType(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, PastelNodeType type, PastelTransmissionLogic.TransferMode transferMode) {
54-
@Nullable InkStorageBlockEntity<?> sourceHandler = getConnectedInkStorage(sourceNode);
55-
if (sourceHandler == null) {
56-
return;
57-
}
34+
public void tick(PastelTransmissionLogic logic, PastelNetwork.NodePriority priority) {
35+
Set<PastelNodeBlockEntity> nodes = logic.getLoadedNodes(PastelNodeType.SENDER);
36+
if (nodes.isEmpty()) return;
5837

59-
for (PastelNodeBlockEntity destinationNode : logic.getLoadedNodes(type)) {
60-
if (!destinationNode.canTransfer()) {
61-
continue;
62-
}
63-
64-
@Nullable InkStorageBlockEntity<?> destinationHandler = getConnectedInkStorage(destinationNode);
65-
if (destinationHandler != null) {
66-
boolean success = transferBetween(logic, sourceNode, sourceHandler, destinationNode, destinationHandler, transferMode);
67-
if (success && transferMode != PastelTransmissionLogic.TransferMode.PULL) {
68-
return;
69-
}
38+
List<InkStorageBlockEntity<?>> blockEntities = new ArrayList<>(nodes.size());
39+
List<InkStorage> inkStorages = new ArrayList<>(nodes.size());
40+
for (PastelNodeBlockEntity node : nodes) {
41+
InkStorageBlockEntity<?> storage = getConnectedInkStorage(node);
42+
if (storage != null) {
43+
blockEntities.add(storage);
44+
inkStorages.add(storage.getEnergyStorage());
7045
}
7146
}
72-
}
73-
74-
private boolean transferBetween(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, InkStorageBlockEntity<?> sourceHandler, PastelNodeBlockEntity destinationNode, InkStorageBlockEntity<?> destinationHandler, PastelTransmissionLogic.TransferMode transferMode) {
75-
InkStorage sourceStorage = sourceHandler.getEnergyStorage();
76-
InkStorage destinationStorage = destinationHandler.getEnergyStorage();
77-
for(Map.Entry<InkColor, Long> sourceEntry : sourceStorage.getEnergy().entrySet()) {
78-
GraphPath<BlockPos, DefaultEdge> graphPath = logic.getPath(sourceNode, destinationNode);
79-
if (graphPath == null) {
80-
continue;
81-
}
82-
83-
InkColor sourceColor = sourceEntry.getKey();
84-
85-
long roomAtDestination = destinationStorage.getRoom(sourceColor);
86-
List<InkAmount> transmittedAmounts = new ArrayList<>();
87-
if(roomAtDestination > 0) {
88-
long transmittedAmount = Math.min(Math.min(sourceEntry.getValue(), roomAtDestination), sourceNode.getMaxTransferredAmount() * 20L);
89-
if(transmittedAmount > 0) {
90-
sourceStorage.addEnergy(sourceEntry.getKey(), -transmittedAmount);
91-
transmittedAmounts.add(new InkAmount(sourceColor, transmittedAmount));
92-
return true;
93-
}
94-
}
95-
96-
if(!transmittedAmounts.isEmpty()) {
97-
PastelTransmission transmission = new PastelTransmission(graphPath.getVertexList(), new InkPastelPayload(transmittedAmounts), sourceNode.getTransferTime());
98-
logic.addTransmission(sourceNode, destinationNode, transferMode, transmission);
99-
sourceHandler.setInkDirty();
100-
}
47+
if (blockEntities.isEmpty()) return;
48+
49+
InkStorage.equalizeInk(inkStorages);
50+
for(InkStorageBlockEntity<?> s : blockEntities) {
51+
s.setInkDirty();
10152
}
102-
return false;
10353
}
10454

10555
}

src/main/java/de/dafuqs/spectrum/blocks/pastel_network/payloads/PastelPayloadType.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public PastelPayloadType(ResourceLocation id, MapCodec<? extends PastelPayload>
1717
this.codec = codec;
1818
}
1919

20-
public void tick(PastelTransmissionLogic logic) {
20+
public void tick(PastelTransmissionLogic logic, PastelNetwork.NodePriority priority) {
2121
transferBetween(logic, PastelNodeType.SENDER, PastelNodeType.GATHER, PastelTransmissionLogic.TransferMode.PUSH_PULL);
2222
transferBetween(logic, PastelNodeType.PROVIDER, PastelNodeType.GATHER, PastelTransmissionLogic.TransferMode.PULL);
2323
transferBetween(logic, PastelNodeType.STORAGE, PastelNodeType.GATHER, PastelTransmissionLogic.TransferMode.PULL);
@@ -36,6 +36,8 @@ protected void transferBetween(PastelTransmissionLogic logic, PastelNodeType sou
3636
}
3737
}
3838

39-
protected abstract void tryTransferToType(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, PastelNodeType type, PastelTransmissionLogic.TransferMode transferMode);
39+
protected void tryTransferToType(PastelTransmissionLogic logic, PastelNodeBlockEntity sourceNode, PastelNodeType type, PastelTransmissionLogic.TransferMode transferMode){
40+
41+
}
4042

4143
}

0 commit comments

Comments
 (0)