aboutsummaryrefslogtreecommitdiff
path: root/spark-neoforge/src
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-neoforge/src
parent635800af986351f08dba33aa2e8ec5dd691bbffb (diff)
downloadspark-b78afab85ee15d809ea4ff0ccb14c2b263ede860.tar.gz
spark-b78afab85ee15d809ea4ff0ccb14c2b263ede860.tar.bz2
spark-b78afab85ee15d809ea4ff0ccb14c2b263ede860.zip
Include gamerule settings in metadata (#425)
Diffstat (limited to 'spark-neoforge/src')
-rw-r--r--spark-neoforge/src/main/java/me/lucko/spark/neoforge/NeoForgeWorldInfoProvider.java54
1 files changed, 52 insertions, 2 deletions
diff --git a/spark-neoforge/src/main/java/me/lucko/spark/neoforge/NeoForgeWorldInfoProvider.java b/spark-neoforge/src/main/java/me/lucko/spark/neoforge/NeoForgeWorldInfoProvider.java
index ef76646..fe6a6c8 100644
--- a/spark-neoforge/src/main/java/me/lucko/spark/neoforge/NeoForgeWorldInfoProvider.java
+++ b/spark-neoforge/src/main/java/me/lucko/spark/neoforge/NeoForgeWorldInfoProvider.java
@@ -32,6 +32,7 @@ import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.level.ChunkPos;
+import net.minecraft.world.level.GameRules;
import net.minecraft.world.level.entity.EntityLookup;
import net.minecraft.world.level.entity.EntitySection;
import net.minecraft.world.level.entity.EntitySectionStorage;
@@ -97,6 +98,29 @@ public abstract class NeoForgeWorldInfoProvider implements WorldInfoProvider {
return data;
}
+
+ @Override
+ public GameRulesResult pollGameRules() {
+ GameRulesResult data = new GameRulesResult();
+ Iterable<ServerLevel> levels = this.server.getAllLevels();
+
+ GameRules.visitGameRuleTypes(new GameRules.GameRuleTypeVisitor() {
+ @Override
+ public <T extends GameRules.Value<T>> void visit(GameRules.Key<T> key, GameRules.Type<T> type) {
+ String defaultValue = type.createRule().serialize();
+ data.putDefault(key.getId(), defaultValue);
+
+ for (ServerLevel level : levels) {
+ String levelName = level.dimension().location().getPath();
+
+ String value = level.getGameRules().getRule(key).serialize();
+ data.put(key.getId(), levelName, value);
+ }
+ }
+ });
+
+ return data;
+ }
}
public static final class Client extends NeoForgeWorldInfoProvider {
@@ -124,13 +148,13 @@ public abstract class NeoForgeWorldInfoProvider implements WorldInfoProvider {
@Override
public ChunksResult<ForgeChunkInfo> pollChunks() {
- ChunksResult<ForgeChunkInfo> data = new ChunksResult<>();
-
ClientLevel level = this.client.level;
if (level == null) {
return null;
}
+ ChunksResult<ForgeChunkInfo> data = new ChunksResult<>();
+
TransientEntitySectionManager<Entity> entityManager = level.entityStorage;
EntitySectionStorage<Entity> cache = entityManager.sectionStorage;
@@ -139,6 +163,32 @@ public abstract class NeoForgeWorldInfoProvider implements WorldInfoProvider {
return data;
}
+
+ @Override
+ public GameRulesResult pollGameRules() {
+ ClientLevel level = this.client.level;
+ if (level == null) {
+ return null;
+ }
+
+ GameRulesResult data = new GameRulesResult();
+
+ String levelName = level.dimension().location().getPath();
+ GameRules levelRules = level.getGameRules();
+
+ GameRules.visitGameRuleTypes(new GameRules.GameRuleTypeVisitor() {
+ @Override
+ public <T extends GameRules.Value<T>> void visit(GameRules.Key<T> key, GameRules.Type<T> type) {
+ String defaultValue = type.createRule().serialize();
+ data.putDefault(key.getId(), defaultValue);
+
+ String value = levelRules.getRule(key).serialize();
+ data.put(key.getId(), levelName, value);
+ }
+ });
+
+ return data;
+ }
}
public static final class ForgeChunkInfo extends AbstractChunkInfo<EntityType<?>> {