Skip to content

Commit b0e0fa3

Browse files
committed
Tunnel graph operational and tested
1 parent 011ca15 commit b0e0fa3

File tree

12 files changed

+283
-112
lines changed

12 files changed

+283
-112
lines changed

src/api/java/dev/compactmods/machines/api/room/MachineRoomConnections.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,6 @@ public interface MachineRoomConnections {
1919
void connectMachineToRoom(int machine, ChunkPos room);
2020

2121
void disconnect(int machine);
22+
23+
void unregisterRoom(ChunkPos room);
2224
}

src/api/java/dev/compactmods/machines/api/tunnels/capability/ITunnelCapabilityProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
public interface ITunnelCapabilityProvider<Tunnel extends ITunnel> {
1010

11-
ImmutableSet<Class> getSupportedCapabilities(Tunnel instance);
11+
ImmutableSet<Class> getSupportedCapabilities();
1212

1313
/**
1414
* Fetch a capability instance from a tunnel.

src/main/java/dev/compactmods/machines/graph/CompactMachineConnectionGraph.java

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55
import com.google.common.graph.ValueGraphBuilder;
66
import com.mojang.serialization.Codec;
77
import com.mojang.serialization.codecs.RecordCodecBuilder;
8+
import dev.compactmods.machines.CompactMachines;
89
import dev.compactmods.machines.codec.CodecExtensions;
910
import dev.compactmods.machines.machine.graph.CompactMachineNode;
11+
import dev.compactmods.machines.room.exceptions.NonexistentRoomException;
1012
import dev.compactmods.machines.room.graph.CompactMachineRoomNode;
1113
import net.minecraft.world.level.ChunkPos;
1214

@@ -56,9 +58,13 @@ private CompactMachineConnectionGraph(List<CompactMachineConnectionInfo> connect
5658
private List<CompactMachineConnectionInfo> buildConnections() {
5759
List<CompactMachineConnectionInfo> result = new ArrayList<>();
5860
this.rooms.forEach((chunk, node) -> {
59-
Collection<Integer> machines = this.getMachinesFor(chunk);
60-
CompactMachineConnectionInfo roomInfo = new CompactMachineConnectionInfo(chunk, machines);
61-
result.add(roomInfo);
61+
try {
62+
Collection<Integer> machines = this.getMachinesFor(chunk);
63+
CompactMachineConnectionInfo roomInfo = new CompactMachineConnectionInfo(chunk, machines);
64+
result.add(roomInfo);
65+
} catch (NonexistentRoomException e) {
66+
CompactMachines.LOGGER.error(e);
67+
}
6268
});
6369

6470
return result;
@@ -95,10 +101,10 @@ public void connectMachineToRoom(int machine, ChunkPos room) {
95101
graph.putEdgeValue(machineNode, roomNode, DefaultEdges.machineToRoom());
96102
}
97103

98-
public Collection<Integer> getMachinesFor(ChunkPos machineChunk) {
104+
public Collection<Integer> getMachinesFor(ChunkPos machineChunk) throws NonexistentRoomException {
99105
var node = this.rooms.get(machineChunk);
100106
if(node == null)
101-
return Collections.emptySet();
107+
throw new NonexistentRoomException(machineChunk);
102108

103109
var inbound = graph.predecessors(node);
104110
return inbound.stream()
@@ -134,6 +140,14 @@ public void disconnectAndUnregister(int machine) {
134140
machines.remove(machine);
135141
}
136142

143+
public void removeRoom(ChunkPos room) {
144+
if(!this.rooms.containsKey(room))
145+
return;
146+
147+
graph.removeNode(rooms.get(room));
148+
rooms.remove(room);
149+
}
150+
137151
/**
138152
* Data structure for serialization. Do not use directly.
139153
*/

src/main/java/dev/compactmods/machines/machine/Machines.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ public static int createNew(MinecraftServer server, Level level, BlockPos machin
3434
}
3535

3636
int nextId = machines.getNextMachineId();
37-
connections.registerMachine(nextId);
3837
machines.setMachineLocation(nextId, new DimensionalPosition(level.dimension(), machinePos));
38+
connections.registerMachine(nextId);
3939
return nextId;
4040
}
4141

src/main/java/dev/compactmods/machines/machine/data/CompactMachineData.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ public Stream<MachineData> stream() {
135135
}
136136

137137
public int getNextMachineId() {
138-
return data.size() + 1;
138+
return data.size() + 2;
139139
}
140140

141141
public static class MachineData {

src/main/java/dev/compactmods/machines/machine/data/MachineToRoomConnections.java

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import dev.compactmods.machines.api.room.MachineRoomConnections;
55
import dev.compactmods.machines.core.Registration;
66
import dev.compactmods.machines.graph.CompactMachineConnectionGraph;
7+
import dev.compactmods.machines.room.exceptions.NonexistentRoomException;
78
import net.minecraft.nbt.CompoundTag;
89
import net.minecraft.nbt.NbtOps;
910
import net.minecraft.server.MinecraftServer;
@@ -14,6 +15,7 @@
1415

1516
import javax.annotation.Nonnull;
1617
import java.util.Collection;
18+
import java.util.Collections;
1719
import java.util.Optional;
1820

1921
public class MachineToRoomConnections extends SavedData implements MachineRoomConnections {
@@ -36,7 +38,7 @@ public static MachineRoomConnections get(MinecraftServer server) {
3638
return sd.computeIfAbsent(MachineToRoomConnections::fromNbt, MachineToRoomConnections::new, DATA_NAME);
3739
}
3840

39-
public static MachineToRoomConnections fromNbt(CompoundTag nbt) {
41+
static MachineToRoomConnections fromNbt(CompoundTag nbt) {
4042
MachineToRoomConnections c = new MachineToRoomConnections();
4143
if (nbt.contains("graph")) {
4244
CompoundTag graphNbt = nbt.getCompound("graph");
@@ -59,18 +61,38 @@ public CompoundTag save(@Nonnull CompoundTag nbt) {
5961
return nbt;
6062
}
6163

64+
/**
65+
* @deprecated Integer machines are planned to be removed in 1.19; plan is to replace them with dimensional positions
66+
* @param machineId
67+
* @return
68+
*/
6269
@Override
6370
@Nonnull
6471
public Optional<ChunkPos> getConnectedRoom(int machineId) {
6572
return graph.getConnectedRoom(machineId);
6673
}
6774

75+
/**
76+
* @param chunkPos Room to get machine IDs for
77+
* @return
78+
* @deprecated Integer machines are planned to be removed in 1.19; plan is to replace them with dimensional positions
79+
*/
6880
@Override
6981
@Nonnull
82+
@Deprecated(since = "1.7.0")
7083
public Collection<Integer> getMachinesFor(ChunkPos chunkPos) {
71-
return graph.getMachinesFor(chunkPos);
84+
try {
85+
return graph.getMachinesFor(chunkPos);
86+
} catch (NonexistentRoomException e) {
87+
CompactMachines.LOGGER.error("Tried to get machine info for nonexistent room: " + chunkPos, e);
88+
return Collections.emptySet();
89+
}
7290
}
7391

92+
/**
93+
* @deprecated Integer machines are planned to be removed in 1.19; plan is to replace them with dimensional positions
94+
* @param machine
95+
*/
7496
@Override
7597
public void registerMachine(int machine) {
7698
graph.addMachine(machine);
@@ -83,12 +105,27 @@ public void registerRoom(ChunkPos roomChunk) {
83105
setDirty();
84106
}
85107

108+
@Override
109+
public void unregisterRoom(ChunkPos roomChunk) {
110+
graph.removeRoom(roomChunk);
111+
setDirty();
112+
}
113+
114+
/**
115+
* @deprecated Integer machines are planned to be removed in 1.19; plan is to replace them with dimensional positions
116+
* @param machine
117+
* @param room
118+
*/
86119
@Override
87120
public void connectMachineToRoom(int machine, ChunkPos room) {
88121
graph.connectMachineToRoom(machine, room);
89122
setDirty();
90123
}
91124

125+
/**
126+
* @deprecated Integer machines are planned to be removed in 1.19; plan is to replace them with dimensional positions
127+
* @param machine
128+
*/
92129
@Override
93130
public void disconnect(int machine) {
94131
graph.disconnectAndUnregister(machine);

src/main/java/dev/compactmods/machines/room/Rooms.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,8 @@ public static boolean destroy(MinecraftServer server, ChunkPos room) throws Miss
104104
for(int mid : connected) {
105105
d.getMachineLocation(mid);
106106
}
107+
108+
conns.unregisterRoom(room);
107109
return true;
108110
}
109111
}

src/main/java/dev/compactmods/machines/tunnel/definitions/ItemTunnel.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public ITunnel newInstance(BlockPos pos, Direction side) {
4141
}
4242

4343
@Override
44-
public ImmutableSet<Class> getSupportedCapabilities(ItemStorage instance) {
44+
public ImmutableSet<Class> getSupportedCapabilities() {
4545
return ImmutableSet.<Class>builder()
4646
.add(IItemHandler.class)
4747
.build();

0 commit comments

Comments
 (0)