Skip to content

Commit 1852e8a

Browse files
committed
Multilevel player history
1 parent b31aeb6 commit 1852e8a

File tree

12 files changed

+77
-262
lines changed

12 files changed

+77
-262
lines changed

src/main/java/dev/compactmods/machines/block/tiles/CompactMachineTile.java

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,21 @@
11
package dev.compactmods.machines.block.tiles;
22

3+
import javax.annotation.Nonnull;
4+
import javax.annotation.Nullable;
5+
import java.util.HashSet;
6+
import java.util.Optional;
7+
import java.util.Set;
8+
import java.util.UUID;
9+
import dev.compactmods.machines.api.tunnels.ICapableTunnel;
10+
import dev.compactmods.machines.api.tunnels.TunnelDefinition;
311
import dev.compactmods.machines.config.ServerConfig;
412
import dev.compactmods.machines.core.Registration;
13+
import dev.compactmods.machines.data.persistent.CompactMachineData;
514
import dev.compactmods.machines.data.persistent.CompactRoomData;
615
import dev.compactmods.machines.data.persistent.MachineConnections;
7-
import dev.compactmods.machines.data.player.CompactMachinePlayerData;
8-
import dev.compactmods.machines.data.persistent.CompactMachineData;
916
import dev.compactmods.machines.reference.Reference;
10-
import dev.compactmods.machines.api.tunnels.TunnelDefinition;
1117
import dev.compactmods.machines.teleportation.DimensionalPosition;
1218
import dev.compactmods.machines.tunnels.TunnelHelper;
13-
import dev.compactmods.machines.api.tunnels.ICapableTunnel;
1419
import net.minecraft.block.BlockState;
1520
import net.minecraft.nbt.CompoundNBT;
1621
import net.minecraft.nbt.ListNBT;
@@ -29,10 +34,6 @@
2934
import net.minecraftforge.common.util.Constants;
3035
import net.minecraftforge.common.util.LazyOptional;
3136

32-
import javax.annotation.Nonnull;
33-
import javax.annotation.Nullable;
34-
import java.util.*;
35-
3637
public class CompactMachineTile extends TileEntity implements ICapabilityProvider, ITickableTileEntity {
3738
public int machineId = -1;
3839
private boolean initialized = false;
@@ -44,14 +45,10 @@ public class CompactMachineTile extends TileEntity implements ICapabilityProvide
4445
protected boolean locked = false;
4546
protected Set<String> playerWhiteList;
4647

47-
@Nullable
48-
private CompactMachinePlayerData playerData;
49-
5048
public CompactMachineTile() {
5149
super(Registration.MACHINE_TILE_ENTITY.get());
5250

5351
playerWhiteList = new HashSet<>();
54-
playerData = null;
5552
}
5653

5754
@Override
@@ -188,18 +185,19 @@ public CompoundNBT getUpdateTag() {
188185
base.putInt("machine", this.machineId);
189186

190187
if (level instanceof ServerWorld) {
191-
Optional<CompactMachinePlayerData> playerData = Optional.empty();
192-
try {
193-
CompactMachinePlayerData psd = CompactMachinePlayerData.get(level.getServer());
194-
// psd = psd.getPlayersInside(this.machineId);
195-
} catch (Exception e) {
196-
e.printStackTrace();
197-
}
198-
199-
playerData.ifPresent(data -> {
200-
CompoundNBT playerNbt = data.serializeNBT();
201-
base.put("players", playerNbt);
202-
});
188+
// TODO - Internal player list
189+
// Optional<CompactMachinePlayerData> playerData = Optional.empty();
190+
// try {
191+
// CompactMachinePlayerData psd = CompactMachinePlayerData.get(level.getServer());
192+
// // psd = psd.getPlayersInside(this.machineId);
193+
// } catch (Exception e) {
194+
// e.printStackTrace();
195+
// }
196+
//
197+
// playerData.ifPresent(data -> {
198+
// CompoundNBT playerNbt = data.serializeNBT();
199+
// base.put("players", playerNbt);
200+
// });
203201

204202
if (this.owner != null)
205203
base.putUUID("owner", this.owner);

src/main/java/dev/compactmods/machines/data/player/CompactMachinePlayerData.java

Lines changed: 0 additions & 58 deletions
This file was deleted.

src/main/java/dev/compactmods/machines/data/player/IPlayerHistoryNode.java

Lines changed: 0 additions & 5 deletions
This file was deleted.

src/main/java/dev/compactmods/machines/data/player/PlayerMachineHistory.java

Lines changed: 0 additions & 18 deletions
This file was deleted.

src/main/java/dev/compactmods/machines/rooms/capability/CMRoomHistory.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import java.util.ArrayDeque;
44
import java.util.Deque;
5-
import dev.compactmods.machines.rooms.IRoomHistoryItem;
5+
import dev.compactmods.machines.rooms.history.IRoomHistoryItem;
66

77
public class CMRoomHistory implements IRoomHistory{
88

@@ -12,19 +12,24 @@ public CMRoomHistory() {
1212
history = new ArrayDeque<>(10);
1313
}
1414

15+
@Override
16+
public void clear() {
17+
history.clear();
18+
}
19+
1520
@Override
1621
public boolean hasHistory() {
1722
return !history.isEmpty();
1823
}
1924

2025
@Override
2126
public IRoomHistoryItem peek() {
22-
return history.peek();
27+
return history.peekLast();
2328
}
2429

2530
@Override
2631
public IRoomHistoryItem pop() {
27-
return history.pop();
32+
return history.removeLast();
2833
}
2934

3035
@Override

src/main/java/dev/compactmods/machines/rooms/capability/IRoomHistory.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package dev.compactmods.machines.rooms.capability;
22

3-
import dev.compactmods.machines.rooms.IRoomHistoryItem;
3+
import dev.compactmods.machines.rooms.history.IRoomHistoryItem;
44

55
public interface IRoomHistory {
66

7+
void clear();
78
boolean hasHistory();
89
IRoomHistoryItem peek();
910
IRoomHistoryItem pop();

src/main/java/dev/compactmods/machines/rooms/IRoomHistoryItem.java renamed to src/main/java/dev/compactmods/machines/rooms/history/IRoomHistoryItem.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package dev.compactmods.machines.rooms;
1+
package dev.compactmods.machines.rooms.history;
22

33
import dev.compactmods.machines.teleportation.DimensionalPosition;
44

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package dev.compactmods.machines.rooms.history;
2+
3+
import dev.compactmods.machines.teleportation.DimensionalPosition;
4+
5+
public class PlayerRoomHistoryItem implements IRoomHistoryItem {
6+
7+
private final DimensionalPosition entry;
8+
private final int machine;
9+
10+
public PlayerRoomHistoryItem(DimensionalPosition entry, int machine) {
11+
this.entry = entry;
12+
this.machine = machine;
13+
}
14+
15+
@Override
16+
public DimensionalPosition getEntryLocation() {
17+
return entry;
18+
}
19+
20+
@Override
21+
public int getMachine() {
22+
return machine;
23+
}
24+
}

src/main/java/dev/compactmods/machines/teleportation/DimensionalPosition.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import com.mojang.serialization.codecs.RecordCodecBuilder;
66
import dev.compactmods.machines.CompactMachines;
77
import dev.compactmods.machines.data.codec.CodecExtensions;
8+
import net.minecraft.entity.LivingEntity;
9+
import net.minecraft.entity.player.ServerPlayerEntity;
810
import net.minecraft.nbt.CompoundNBT;
911
import net.minecraft.nbt.INBT;
1012
import net.minecraft.nbt.NBTDynamicOps;
@@ -34,7 +36,8 @@ public class DimensionalPosition implements INBTSerializable<CompoundNBT> {
3436
CodecExtensions.VECTOR3D.optionalFieldOf("rot", Vector3d.ZERO).forGetter(DimensionalPosition::getRotation)
3537
).apply(i, DimensionalPosition::new));
3638

37-
private DimensionalPosition() { }
39+
private DimensionalPosition() {
40+
}
3841

3942
public DimensionalPosition(RegistryKey<World> world, BlockPos positionBlock) {
4043
this(world, Vector3d.ZERO, Vector3d.ZERO);
@@ -54,6 +57,10 @@ public DimensionalPosition(RegistryKey<World> dim, Vector3d pos, Vector3d rotati
5457
this.rotation = rotation;
5558
}
5659

60+
public static DimensionalPosition fromEntity(LivingEntity entity) {
61+
return new DimensionalPosition(entity.level.dimension(), entity.position());
62+
}
63+
5764
public Optional<ServerWorld> getWorld(@Nonnull MinecraftServer server) {
5865
return Optional.ofNullable(server.getLevel(this.dimension));
5966
}

src/main/java/dev/compactmods/machines/util/PlayerUtil.java

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,16 @@
88
import dev.compactmods.machines.config.ServerConfig;
99
import dev.compactmods.machines.core.Registration;
1010
import dev.compactmods.machines.data.persistent.MachineConnections;
11-
import dev.compactmods.machines.data.player.CompactMachinePlayerData;
1211
import dev.compactmods.machines.data.persistent.CompactMachineData;
1312
import dev.compactmods.machines.data.persistent.CompactRoomData;
1413
import dev.compactmods.machines.network.CMPacketTargets;
1514
import dev.compactmods.machines.network.MachinePlayersChangedPacket;
1615
import dev.compactmods.machines.network.NetworkHandler;
1716
import dev.compactmods.machines.reference.EnumMachineSize;
18-
import dev.compactmods.machines.rooms.IRoomHistoryItem;
17+
import dev.compactmods.machines.rooms.history.IRoomHistoryItem;
1918
import dev.compactmods.machines.rooms.capability.CapabilityRoomHistory;
2019
import dev.compactmods.machines.rooms.capability.IRoomHistory;
20+
import dev.compactmods.machines.rooms.history.PlayerRoomHistoryItem;
2121
import dev.compactmods.machines.teleportation.DimensionalPosition;
2222
import net.minecraft.entity.player.PlayerEntity;
2323
import net.minecraft.entity.player.ServerPlayerEntity;
@@ -88,6 +88,7 @@ public static void teleportPlayerIntoMachine(ServerPlayerEntity serverPlayer, Bl
8888

8989
// Generate a new machine inside and update the tile
9090
CompactStructureGenerator.generateCompactStructure(compactWorld, size, newCenter);
91+
9192
ChunkPos machineChunk = new ChunkPos(newCenter);
9293
tile.setMachineId(nextId);
9394

@@ -142,9 +143,6 @@ public static void teleportPlayerIntoMachine(ServerPlayerEntity serverPlayer, Bl
142143
public static void teleportPlayerOutOfMachine(ServerWorld world, @Nonnull ServerPlayerEntity serverPlayer) {
143144

144145
MinecraftServer serv = world.getServer();
145-
CompactMachinePlayerData playerData = CompactMachinePlayerData.get(serv);
146-
if (playerData == null)
147-
return;
148146

149147
final LazyOptional<IRoomHistory> history = serverPlayer.getCapability(CapabilityRoomHistory.HISTORY_CAPABILITY);
150148

@@ -170,11 +168,13 @@ public static void teleportPlayerOutOfMachine(ServerWorld world, @Nonnull Server
170168

171169
serverPlayer.teleportTo(w, worldPos.x(), worldPos.y(), worldPos.z(), (float) entryRot.y, (float) entryRot.x);
172170
} else {
171+
hist.clear();
173172
teleportPlayerToRespawnOrOverworld(serv, serverPlayer);
174173
}
175174
} else {
176175
howDidYouGetThere(serverPlayer);
177176

177+
hist.clear();
178178
teleportPlayerToRespawnOrOverworld(serv, serverPlayer);
179179
}
180180

@@ -199,7 +199,7 @@ private static void howDidYouGetThere(@Nonnull ServerPlayerEntity serverPlayer)
199199
);
200200
}
201201

202-
private static void teleportPlayerToRespawnOrOverworld(MinecraftServer serv, @Nonnull ServerPlayerEntity player) {
202+
public static void teleportPlayerToRespawnOrOverworld(MinecraftServer serv, @Nonnull ServerPlayerEntity player) {
203203
ServerWorld level = Optional.ofNullable(serv.getLevel(player.getRespawnDimension())).orElse(serv.overworld());
204204
Vector3d worldPos = LocationUtil.blockPosToVector(level.getSharedSpawnPos());
205205

@@ -214,10 +214,6 @@ public static void addPlayerToMachine(ServerPlayerEntity serverPlayer, BlockPos
214214
if (serv == null)
215215
return;
216216

217-
CompactMachinePlayerData playerData = CompactMachinePlayerData.get(serv);
218-
if (playerData == null)
219-
return;
220-
221217
CompactMachineTile tile = (CompactMachineTile) serverPlayer.getLevel().getBlockEntity(machinePos);
222218
if (tile == null)
223219
return;
@@ -226,9 +222,11 @@ public static void addPlayerToMachine(ServerPlayerEntity serverPlayer, BlockPos
226222
final Chunk chunk = serv.getLevel(Registration.COMPACT_DIMENSION)
227223
.getChunk(mChunk.x, mChunk.z);
228224

229-
// TODO - Add player to machine data
230-
// playerData.addPlayer(serverPlayer, mChunk);
231-
playerData.setDirty();
225+
serverPlayer.getCapability(CapabilityRoomHistory.HISTORY_CAPABILITY)
226+
.ifPresent(hist -> {
227+
DimensionalPosition pos = DimensionalPosition.fromEntity(serverPlayer);
228+
hist.addHistory(new PlayerRoomHistoryItem(pos, tile.machineId));
229+
});
232230

233231
MachinePlayersChangedPacket p = MachinePlayersChangedPacket.Builder.create(serv)
234232
.forMachine(mChunk)

0 commit comments

Comments
 (0)