aboutsummaryrefslogtreecommitdiff
path: root/spark-fabric/src/main/java/me
diff options
context:
space:
mode:
authorlucko <git@lucko.me>2024-07-21 12:44:06 +0100
committerGitHub <noreply@github.com>2024-07-21 12:44:06 +0100
commitb78afab85ee15d809ea4ff0ccb14c2b263ede860 (patch)
treed3d987473aee0b1e71ac6a24ea2f692be78bf14b /spark-fabric/src/main/java/me
parent635800af986351f08dba33aa2e8ec5dd691bbffb (diff)
downloadspark-b78afab85ee15d809ea4ff0ccb14c2b263ede860.tar.gz
spark-b78afab85ee15d809ea4ff0ccb14c2b263ede860.tar.bz2
spark-b78afab85ee15d809ea4ff0ccb14c2b263ede860.zip
Include gamerule settings in metadata (#425)
Diffstat (limited to 'spark-fabric/src/main/java/me')
-rw-r--r--spark-fabric/src/main/java/me/lucko/spark/fabric/FabricWorldInfoProvider.java53
1 files changed, 51 insertions, 2 deletions
diff --git a/spark-fabric/src/main/java/me/lucko/spark/fabric/FabricWorldInfoProvider.java b/spark-fabric/src/main/java/me/lucko/spark/fabric/FabricWorldInfoProvider.java
index 926e8a3..d7dc7a7 100644
--- a/spark-fabric/src/main/java/me/lucko/spark/fabric/FabricWorldInfoProvider.java
+++ b/spark-fabric/src/main/java/me/lucko/spark/fabric/FabricWorldInfoProvider.java
@@ -37,6 +37,7 @@ import net.minecraft.server.MinecraftServer;
import net.minecraft.server.world.ServerEntityManager;
import net.minecraft.server.world.ServerWorld;
import net.minecraft.util.math.ChunkPos;
+import net.minecraft.world.GameRules;
import net.minecraft.world.entity.ClientEntityManager;
import net.minecraft.world.entity.EntityIndex;
import net.minecraft.world.entity.EntityTrackingSection;
@@ -101,6 +102,28 @@ public abstract class FabricWorldInfoProvider implements WorldInfoProvider {
return data;
}
+
+ @Override
+ public GameRulesResult pollGameRules() {
+ GameRulesResult data = new GameRulesResult();
+ Iterable<ServerWorld> worlds = this.server.getWorlds();
+
+ GameRules.accept(new GameRules.Visitor() {
+ @Override
+ public <T extends GameRules.Rule<T>> void visit(GameRules.Key<T> key, GameRules.Type<T> type) {
+ String defaultValue = type.createRule().serialize();
+ data.putDefault(key.getName(), defaultValue);
+
+ for (ServerWorld world : worlds) {
+ String worldName = world.getRegistryKey().getValue().getPath();
+
+ String value = world.getGameRules().get(key).serialize();
+ data.put(key.getName(), worldName, value);
+ }
+ }
+ });
+ return data;
+ }
}
public static final class Client extends FabricWorldInfoProvider {
@@ -128,13 +151,13 @@ public abstract class FabricWorldInfoProvider implements WorldInfoProvider {
@Override
public ChunksResult<FabricChunkInfo> pollChunks() {
- ChunksResult<FabricChunkInfo> data = new ChunksResult<>();
-
ClientWorld world = this.client.world;
if (world == null) {
return null;
}
+ ChunksResult<FabricChunkInfo> data = new ChunksResult<>();
+
ClientEntityManager<Entity> entityManager = ((ClientWorldAccessor) world).getEntityManager();
SectionedEntityCache<Entity> cache = ((ClientEntityManagerAccessor) entityManager).getCache();
@@ -143,6 +166,32 @@ public abstract class FabricWorldInfoProvider implements WorldInfoProvider {
return data;
}
+
+ @Override
+ public GameRulesResult pollGameRules() {
+ ClientWorld world = this.client.world;
+ if (world == null) {
+ return null;
+ }
+
+ GameRulesResult data = new GameRulesResult();
+
+ String worldName = world.getRegistryKey().getValue().getPath();
+ GameRules worldRules = world.getGameRules();
+
+ GameRules.accept(new GameRules.Visitor() {
+ @Override
+ public <T extends GameRules.Rule<T>> void visit(GameRules.Key<T> key, GameRules.Type<T> type) {
+ String defaultValue = type.createRule().serialize();
+ data.putDefault(key.getName(), defaultValue);
+
+ String value = worldRules.get(key).serialize();
+ data.put(key.getName(), worldName, value);
+ }
+ });
+
+ return data;
+ }
}
static final class FabricChunkInfo extends AbstractChunkInfo<EntityType<?>> {