Skip to content
This repository was archived by the owner on Nov 15, 2024. It is now read-only.

Commit 2378c53

Browse files
committed
cleaned up the code
1 parent 18c696a commit 2378c53

12 files changed

+106
-116
lines changed

src/main/java/eigencraft/cpuArchMod/CpuArchMod.java

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

44
import eigencraft.cpuArchMod.block.PipeContainer;
55
import eigencraft.cpuArchMod.block.ProgrammableNodeContainer;
6-
import eigencraft.cpuArchMod.simulation.SimulationWorldProvider;
6+
import eigencraft.cpuArchMod.simulation.SimulationWorldInterface;
77
import net.fabricmc.api.ClientModInitializer;
88
import net.fabricmc.api.ModInitializer;
99
import net.fabricmc.fabric.api.client.itemgroup.FabricItemGroupBuilder;
@@ -40,7 +40,7 @@ public void onInitialize() {
4040
@Override
4141
public void onStopServer(MinecraftServer minecraftServer) {
4242
for (ServerWorld world:minecraftServer.getWorlds()){
43-
((SimulationWorldProvider)world).stopSimulation();
43+
((SimulationWorldInterface)world).stopSimulation();
4444
}
4545
}
4646
});

src/main/java/eigencraft/cpuArchMod/block/PipeContainer.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package eigencraft.cpuArchMod.block;
22

3-
import eigencraft.cpuArchMod.simulation.SimulationPipe;
3+
import eigencraft.cpuArchMod.simulation.agents.PipeAgent;
44
import eigencraft.cpuArchMod.simulation.SimulationWorld;
5-
import eigencraft.cpuArchMod.simulation.SimulationWorldProvider;
5+
import eigencraft.cpuArchMod.simulation.SimulationWorldInterface;
66
import eigencraft.cpuArchMod.simulation.SimulationWorldRunnable;
77
import net.minecraft.block.Block;
88
import net.minecraft.block.BlockState;
@@ -51,10 +51,10 @@ private boolean shouldConnect(BlockState state){
5151
@Override
5252
public void onPlaced(World world, BlockPos pos, BlockState state, LivingEntity placer, ItemStack itemStack) {
5353
if (!world.isClient()){
54-
((SimulationWorldProvider)world).addSimulationWorldTask(new SimulationWorldRunnable() {
54+
((SimulationWorldInterface)world).addSimulationWorldTask(new SimulationWorldRunnable() {
5555
@Override
5656
public void run(SimulationWorld world) {
57-
world.addSimulationObject(pos,new SimulationPipe());
57+
world.addSimulationAgent(pos,new PipeAgent());
5858
}
5959
});
6060
}
@@ -63,10 +63,10 @@ public void run(SimulationWorld world) {
6363
@Override
6464
public void onBroken(WorldAccess world, BlockPos pos, BlockState state) {
6565
if (!world.isClient()){
66-
((SimulationWorldProvider)world).addSimulationWorldTask(new SimulationWorldRunnable() {
66+
((SimulationWorldInterface)world).addSimulationWorldTask(new SimulationWorldRunnable() {
6767
@Override
6868
public void run(SimulationWorld world) {
69-
world.removeSimulationObject(pos);
69+
world.removeSimulationAgent(pos);
7070
}
7171
});
7272
}

src/main/java/eigencraft/cpuArchMod/block/ProgrammableNodeContainer.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package eigencraft.cpuArchMod.block;
22

33
import eigencraft.cpuArchMod.simulation.*;
4+
import eigencraft.cpuArchMod.simulation.agents.ProgrammableAgent;
45
import net.minecraft.block.Block;
56
import net.minecraft.block.BlockState;
67
import net.minecraft.block.Material;
@@ -22,10 +23,10 @@ public ProgrammableNodeContainer() {
2223
@Override
2324
public void onPlaced(World world, BlockPos pos, BlockState state, LivingEntity placer, ItemStack itemStack) {
2425
if (!world.isClient()){
25-
((SimulationWorldProvider)world).addSimulationWorldTask(new SimulationWorldRunnable() {
26+
((SimulationWorldInterface)world).addSimulationWorldTask(new SimulationWorldRunnable() {
2627
@Override
2728
public void run(SimulationWorld world) {
28-
world.addSimulationObject(pos,new ProgrammableNode());
29+
world.addSimulationAgent(pos,new ProgrammableAgent());
2930
}
3031
});
3132
}
@@ -34,10 +35,10 @@ public void run(SimulationWorld world) {
3435
@Override
3536
public void onBroken(WorldAccess world, BlockPos pos, BlockState state) {
3637
if (!world.isClient()){
37-
((SimulationWorldProvider)world).addSimulationWorldTask(new SimulationWorldRunnable() {
38+
((SimulationWorldInterface)world).addSimulationWorldTask(new SimulationWorldRunnable() {
3839
@Override
3940
public void run(SimulationWorld world) {
40-
world.removeSimulationObject(pos);
41+
world.removeSimulationAgent(pos);
4142
}
4243
});
4344
}
@@ -46,10 +47,10 @@ public void run(SimulationWorld world) {
4647
@Override
4748
public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) {
4849
if (!world.isClient()){
49-
((SimulationWorldProvider)world).addSimulationWorldTask(new SimulationWorldRunnable() {
50+
((SimulationWorldInterface)world).addSimulationWorldTask(new SimulationWorldRunnable() {
5051
@Override
5152
public void run(SimulationWorld world) {
52-
world.getSimulationObjectAt(pos).process(new SimulationMessage());
53+
world.getSimulationAgentAt(pos).process(new SimulationMessage());
5354
}
5455
});
5556
}

src/main/java/eigencraft/cpuArchMod/mixin/ServerWorldMixin.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package eigencraft.cpuArchMod.mixin;
22

33
import eigencraft.cpuArchMod.simulation.SimulationWorld;
4-
import eigencraft.cpuArchMod.simulation.SimulationWorldProvider;
4+
import eigencraft.cpuArchMod.simulation.SimulationWorldInterface;
55
import eigencraft.cpuArchMod.simulation.SimulationWorldRunnable;
66
import net.minecraft.server.MinecraftServer;
77
import net.minecraft.server.WorldGenerationProgressListener;
@@ -24,7 +24,7 @@
2424

2525

2626
@Mixin(ServerWorld.class)
27-
public abstract class ServerWorldMixin implements SimulationWorldProvider {
27+
public abstract class ServerWorldMixin implements SimulationWorldInterface {
2828

2929
private SimulationWorld simulationWorld;
3030

src/main/java/eigencraft/cpuArchMod/simulation/DummySimulationAgent.java

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

src/main/java/eigencraft/cpuArchMod/simulation/SimulationAgent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@ public interface SimulationAgent {
1313
public void tick();
1414
public void process(SimulationMessage message);
1515
public JsonElement getConfigData();
16+
public void loadConfig(JsonElement config);
1617

1718
static HashMap<String, Supplier<SimulationAgent>> constructors = new HashMap<>();
1819
public static void register(String name,Supplier<SimulationAgent> constructor){
1920
constructors.put(name,constructor);
2021
}
2122
public static SimulationAgent getSimulationObject(String name){
22-
//System.out.println(name);
2323
return constructors.get(name).get();
2424
}
2525

src/main/java/eigencraft/cpuArchMod/simulation/SimulationChunk.java

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@
55
import java.util.HashMap;
66

77
public class SimulationChunk {
8-
private HashMap<BlockPos, SimulationAgent> simulationObjects = new HashMap<>();
8+
private HashMap<BlockPos, SimulationAgent> simulationAgents = new HashMap<>();
99
SimulationWorld simulation;
1010

1111
public SimulationChunk(SimulationWorld simulation) {
1212
this.simulation = simulation;
1313
}
1414

1515
public void addAgent(BlockPos pos, SimulationAgent simulationAgent){
16-
simulationObjects.put(pos, simulationAgent);
16+
simulationAgents.put(pos, simulationAgent);
1717

1818
simulation.getChunk(pos.north()).connectConnectable(simulationAgent,pos.north());
1919
simulation.getChunk(pos.south()).connectConnectable(simulationAgent,pos.south());
@@ -24,32 +24,38 @@ public void addAgent(BlockPos pos, SimulationAgent simulationAgent){
2424
}
2525

2626
private void connectConnectable(SimulationAgent newSimulationAgent, BlockPos pos) {
27-
if (simulationObjects.containsKey(pos)){
28-
SimulationAgent oldSimulationAgent = simulationObjects.get(pos);
27+
if (simulationAgents.containsKey(pos)){
28+
SimulationAgent oldSimulationAgent = simulationAgents.get(pos);
2929
oldSimulationAgent.connect(newSimulationAgent);
3030
newSimulationAgent.connect(oldSimulationAgent);
3131
}
3232
}
3333

3434
public void removeConnectable(BlockPos pos){
35-
if (simulationObjects.containsKey(pos)){
36-
SimulationAgent toRemove = simulationObjects.get(pos);
37-
for (SimulationAgent thing:toRemove.getConnections()){
38-
thing.disconnect(toRemove);
35+
if (simulationAgents.containsKey(pos)){
36+
SimulationAgent toRemove = simulationAgents.get(pos);
37+
for (SimulationAgent agent:toRemove.getConnections()){
38+
agent.disconnect(toRemove);
3939
}
40-
simulationObjects.remove(pos);
40+
simulationAgents.remove(pos);
4141
}
4242
}
4343

4444
public SimulationAgent getSimulationObjectAt(BlockPos pos) {
45-
return simulationObjects.getOrDefault(pos,null);
45+
return simulationAgents.getOrDefault(pos,null);
4646
}
4747

4848
public boolean shouldSave(){
49-
return simulationObjects.size()>0;
49+
return simulationAgents.size()>0;
5050
}
5151

52-
public HashMap<BlockPos, SimulationAgent> getSimulationObjects() {
53-
return simulationObjects;
52+
public HashMap<BlockPos, SimulationAgent> getSimulationAgents() {
53+
return simulationAgents;
54+
}
55+
56+
public void tick(){
57+
for (SimulationAgent agent: simulationAgents.values()){
58+
agent.tick();
59+
}
5460
}
5561
}

src/main/java/eigencraft/cpuArchMod/simulation/SimulationChunkStorage.java

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.google.gson.*;
44
import net.minecraft.util.math.BlockPos;
55
import net.minecraft.util.math.ChunkPos;
6+
import org.apache.logging.log4j.LogManager;
67

78
import java.io.File;
89
import java.io.FileWriter;
@@ -11,26 +12,26 @@
1112
import java.util.Map;
1213

1314
public class SimulationChunkStorage {
14-
public static final int version = 0;
15+
public static final int version = 1;
1516

1617
public static void saveChunk(ChunkPos pos, SimulationChunk chunk,File worldSavePath){
1718
JsonObject root = new JsonObject();
1819
root.add("version",new JsonPrimitive(version));
1920

20-
JsonArray simulationObjects = new JsonArray();
21-
root.add("objects",simulationObjects);
21+
JsonArray simulationAgents = new JsonArray();
22+
root.add("agents",simulationAgents);
2223

23-
for(Map.Entry<BlockPos, SimulationAgent> simulationObject:chunk.getSimulationObjects().entrySet()){
24-
JsonObject simulationObjectJson = new JsonObject();
25-
simulationObjectJson.add("x",new JsonPrimitive(simulationObject.getKey().getX()));
26-
simulationObjectJson.add("y",new JsonPrimitive(simulationObject.getKey().getY()));
27-
simulationObjectJson.add("z",new JsonPrimitive(simulationObject.getKey().getZ()));
28-
simulationObjectJson.add("type",new JsonPrimitive(simulationObject.getValue().getClass().getSimpleName()));
29-
JsonElement customData = simulationObject.getValue().getConfigData();
24+
for(Map.Entry<BlockPos, SimulationAgent> simulationAgent:chunk.getSimulationAgents().entrySet()){
25+
JsonObject simulationAgentJson = new JsonObject();
26+
simulationAgentJson.add("x",new JsonPrimitive(simulationAgent.getKey().getX()));
27+
simulationAgentJson.add("y",new JsonPrimitive(simulationAgent.getKey().getY()));
28+
simulationAgentJson.add("z",new JsonPrimitive(simulationAgent.getKey().getZ()));
29+
simulationAgentJson.add("type",new JsonPrimitive(simulationAgent.getValue().getClass().getSimpleName()));
30+
JsonElement customData = simulationAgent.getValue().getConfigData();
3031
if (customData!=null){
31-
simulationObjectJson.add("data",customData);
32+
simulationAgentJson.add("data",customData);
3233
}
33-
simulationObjects.add(simulationObjectJson);
34+
simulationAgents.add(simulationAgentJson);
3435
}
3536

3637
File chunkFile = getChunkSavePath(pos,worldSavePath);
@@ -44,7 +45,7 @@ public static void saveChunk(ChunkPos pos, SimulationChunk chunk,File worldSaveP
4445
}
4546

4647
}
47-
public static SimulationChunk loadChunk(ChunkPos pos,SimulationChunk chunk, File worldSavePath){
48+
public static void loadChunk(ChunkPos pos,SimulationChunk chunk, File worldSavePath){
4849
File savePath = getChunkSavePath(pos,worldSavePath);
4950

5051
if (savePath.isFile()){
@@ -53,19 +54,30 @@ public static SimulationChunk loadChunk(ChunkPos pos,SimulationChunk chunk, File
5354
root = JsonParser.parseString(new String(Files.readAllBytes(savePath.toPath()))).getAsJsonObject();
5455
} catch (IOException e) {
5556
e.printStackTrace();
56-
return chunk;
57+
return;
5758
}
5859

59-
JsonArray simulationObjects = root.getAsJsonArray("objects");
60-
for (JsonElement i:simulationObjects){
61-
JsonObject agentElement = i.getAsJsonObject();
62-
BlockPos agentPos = new BlockPos(agentElement.get("x").getAsInt(),agentElement.get("y").getAsInt(),agentElement.get("z").getAsInt());
63-
SimulationAgent simulationAgent = SimulationAgent.getSimulationObject(agentElement.get("type").getAsString());
64-
chunk.addAgent(agentPos,simulationAgent);
60+
try {
61+
int found_version = root.get("version").getAsInt();
62+
if (found_version > version){
63+
LogManager.getLogger().warn("Found simulation chunk from newer mod version!");
64+
} else if (found_version < version){
65+
//TODO upgrade system?
66+
LogManager.getLogger().warn(String.format("Found simulation chunk from older mod version! Found: %d, running version: %d",found_version,version));
67+
}
68+
69+
JsonArray simulationAgents = root.getAsJsonArray("agents");
70+
for (JsonElement i : simulationAgents) {
71+
JsonObject agentElement = i.getAsJsonObject();
72+
BlockPos agentPos = new BlockPos(agentElement.get("x").getAsInt(), agentElement.get("y").getAsInt(), agentElement.get("z").getAsInt());
73+
SimulationAgent simulationAgent = SimulationAgent.getSimulationObject(agentElement.get("type").getAsString());
74+
chunk.addAgent(agentPos, simulationAgent);
75+
}
76+
} catch (Exception e){
77+
e.printStackTrace();
6578
}
6679

6780
}
68-
return chunk;
6981
}
7082
public static File getChunkSavePath(ChunkPos pos, File worldSavePath){
7183
return new File(worldSavePath,String.format("x%dz%d.json",pos.x,pos.z));

src/main/java/eigencraft/cpuArchMod/simulation/SimulationWorld.java

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@ public SimulationWorld(File cpu_sim_directory, ServerWorld serverWorld) {
2828

2929
public SimulationChunk getChunk(ChunkPos chunkPos){
3030
if (!loadedChunks.containsKey(chunkPos)){
31-
loadChunk(chunkPos);
31+
SimulationChunk newChunk = new SimulationChunk(this);
32+
loadedChunks.put(chunkPos,newChunk);
33+
SimulationChunkStorage.loadChunk(chunkPos,newChunk,saveDirectory);
3234
}
3335
return loadedChunks.get(chunkPos);
3436
}
@@ -37,17 +39,11 @@ public SimulationChunk getChunk(BlockPos pos){
3739
return getChunk(new ChunkPos(pos));
3840
}
3941

40-
private void loadChunk(ChunkPos chunkPos) {
41-
SimulationChunk newChunk = new SimulationChunk(this);
42-
loadedChunks.put(chunkPos,newChunk);
43-
SimulationChunkStorage.loadChunk(chunkPos,newChunk,saveDirectory);
44-
}
45-
46-
public void addSimulationObject(BlockPos pos, SimulationAgent simulationAgent){
42+
public void addSimulationAgent(BlockPos pos, SimulationAgent simulationAgent){
4743
getChunk(pos).addAgent(pos, simulationAgent);
4844
}
4945

50-
public void removeSimulationObject(BlockPos pos){
46+
public void removeSimulationAgent(BlockPos pos){
5147
getChunk(pos).removeConnectable(pos);
5248
}
5349

@@ -59,6 +55,9 @@ public void run() {
5955
synchronized (tasks) {
6056
tasks.remove().run(this);
6157
}
58+
for (SimulationChunk chunk:loadedChunks.values()){
59+
chunk.tick();
60+
}
6261
if (System.currentTimeMillis()-lastSave>60000){
6362
saveWorld();
6463
}
@@ -87,7 +86,7 @@ public void addTask(SimulationWorldRunnable simulationWorldRunnable) {
8786
}
8887
}
8988

90-
public SimulationAgent getSimulationObjectAt(BlockPos pos) {
89+
public SimulationAgent getSimulationAgentAt(BlockPos pos) {
9190
return getChunk(pos).getSimulationObjectAt(pos);
9291
}
9392

src/main/java/eigencraft/cpuArchMod/simulation/SimulationWorldProvider.java renamed to src/main/java/eigencraft/cpuArchMod/simulation/SimulationWorldInterface.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package eigencraft.cpuArchMod.simulation;
22

3-
public interface SimulationWorldProvider {
3+
public interface SimulationWorldInterface {
44
public void addSimulationWorldTask(SimulationWorldRunnable runnable);
55

66
void stopSimulation();

0 commit comments

Comments
 (0)