diff options
| author | lucko <git@lucko.me> | 2024-07-21 12:44:06 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-07-21 12:44:06 +0100 |
| commit | b78afab85ee15d809ea4ff0ccb14c2b263ede860 (patch) | |
| tree | d3d987473aee0b1e71ac6a24ea2f692be78bf14b /spark-fabric/src/main/java/me | |
| parent | 635800af986351f08dba33aa2e8ec5dd691bbffb (diff) | |
| download | spark-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.java | 53 |
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<?>> { |
