aboutsummaryrefslogtreecommitdiff
path: root/spark-common/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-common/src
parent635800af986351f08dba33aa2e8ec5dd691bbffb (diff)
downloadspark-b78afab85ee15d809ea4ff0ccb14c2b263ede860.tar.gz
spark-b78afab85ee15d809ea4ff0ccb14c2b263ede860.tar.bz2
spark-b78afab85ee15d809ea4ff0ccb14c2b263ede860.zip
Include gamerule settings in metadata (#425)
Diffstat (limited to 'spark-common/src')
-rw-r--r--spark-common/src/main/java/me/lucko/spark/common/platform/world/AsyncWorldInfoProvider.java8
-rw-r--r--spark-common/src/main/java/me/lucko/spark/common/platform/world/WorldInfoProvider.java45
-rw-r--r--spark-common/src/main/java/me/lucko/spark/common/platform/world/WorldStatisticsProvider.java12
-rw-r--r--spark-common/src/main/proto/spark/spark.proto7
4 files changed, 71 insertions, 1 deletions
diff --git a/spark-common/src/main/java/me/lucko/spark/common/platform/world/AsyncWorldInfoProvider.java b/spark-common/src/main/java/me/lucko/spark/common/platform/world/AsyncWorldInfoProvider.java
index 82cddef..0f48b2e 100644
--- a/spark-common/src/main/java/me/lucko/spark/common/platform/world/AsyncWorldInfoProvider.java
+++ b/spark-common/src/main/java/me/lucko/spark/common/platform/world/AsyncWorldInfoProvider.java
@@ -80,6 +80,10 @@ public class AsyncWorldInfoProvider {
return async(WorldInfoProvider::pollChunks);
}
+ public CompletableFuture<WorldInfoProvider.GameRulesResult> pollGameRules() {
+ return async(WorldInfoProvider::pollGameRules);
+ }
+
public WorldInfoProvider.CountsResult getCounts() {
return get(pollCounts());
}
@@ -87,4 +91,8 @@ public class AsyncWorldInfoProvider {
public WorldInfoProvider.ChunksResult<? extends ChunkInfo<?>> getChunks() {
return get(pollChunks());
}
+
+ public WorldInfoProvider.GameRulesResult getGameRules() {
+ return get(pollGameRules());
+ }
}
diff --git a/spark-common/src/main/java/me/lucko/spark/common/platform/world/WorldInfoProvider.java b/spark-common/src/main/java/me/lucko/spark/common/platform/world/WorldInfoProvider.java
index 7fb581d..e360ea4 100644
--- a/spark-common/src/main/java/me/lucko/spark/common/platform/world/WorldInfoProvider.java
+++ b/spark-common/src/main/java/me/lucko/spark/common/platform/world/WorldInfoProvider.java
@@ -39,6 +39,11 @@ public interface WorldInfoProvider {
public ChunksResult<? extends ChunkInfo<?>> pollChunks() {
return null;
}
+
+ @Override
+ public GameRulesResult pollGameRules() {
+ return null;
+ }
};
/**
@@ -55,6 +60,13 @@ public interface WorldInfoProvider {
*/
ChunksResult<? extends ChunkInfo<?>> pollChunks();
+ /**
+ * Polls for game rules.
+ *
+ * @return the game rules
+ */
+ GameRulesResult pollGameRules();
+
default boolean mustCallSync() {
return true;
}
@@ -101,4 +113,37 @@ public interface WorldInfoProvider {
}
}
+ final class GameRulesResult {
+ private final Map<String, GameRule> rules = new HashMap<>();
+
+ private GameRule rule(String name) {
+ return this.rules.computeIfAbsent(name, k -> new GameRule());
+ }
+
+ public void put(String gameRuleName, String worldName, String value) {
+ rule(gameRuleName).worldValues.put(worldName, value);
+ }
+
+ public void putDefault(String gameRuleName, String value) {
+ rule(gameRuleName).defaultValue = value;
+ }
+
+ public Map<String, GameRule> getRules() {
+ return this.rules;
+ }
+
+ public static final class GameRule {
+ Map<String, String> worldValues = new HashMap<>();
+ String defaultValue = null;
+
+ public String getDefaultValue() {
+ return this.defaultValue;
+ }
+
+ public Map<String, String> getWorldValues() {
+ return this.worldValues;
+ }
+ }
+ }
+
}
diff --git a/spark-common/src/main/java/me/lucko/spark/common/platform/world/WorldStatisticsProvider.java b/spark-common/src/main/java/me/lucko/spark/common/platform/world/WorldStatisticsProvider.java
index 7e63222..5d00037 100644
--- a/spark-common/src/main/java/me/lucko/spark/common/platform/world/WorldStatisticsProvider.java
+++ b/spark-common/src/main/java/me/lucko/spark/common/platform/world/WorldStatisticsProvider.java
@@ -38,7 +38,7 @@ public class WorldStatisticsProvider {
}
public WorldStatistics getWorldStatistics() {
- WorldInfoProvider.ChunksResult<? extends ChunkInfo<?>> result = provider.getChunks();
+ WorldInfoProvider.ChunksResult<? extends ChunkInfo<?>> result = this.provider.getChunks();
if (result == null) {
return null;
}
@@ -70,6 +70,16 @@ public class WorldStatisticsProvider {
stats.setTotalEntities(combinedTotal.get());
combined.asMap().forEach((key, value) -> stats.putEntityCounts(key, value.get()));
+ WorldInfoProvider.GameRulesResult gameRules = this.provider.getGameRules();
+ if (gameRules != null) {
+ gameRules.getRules().forEach((ruleName, rule) -> stats.addGameRules(WorldStatistics.GameRule.newBuilder()
+ .setName(ruleName)
+ .setDefaultValue(rule.getDefaultValue())
+ .putAllWorldValues(rule.getWorldValues())
+ .build()
+ ));
+ }
+
return stats.build();
}
diff --git a/spark-common/src/main/proto/spark/spark.proto b/spark-common/src/main/proto/spark/spark.proto
index 53750d7..6ffd4e9 100644
--- a/spark-common/src/main/proto/spark/spark.proto
+++ b/spark-common/src/main/proto/spark/spark.proto
@@ -140,6 +140,7 @@ message WorldStatistics {
int32 total_entities = 1;
map<string, int32> entity_counts = 2;
repeated World worlds = 3;
+ repeated GameRule game_rules = 4;
message World {
string name = 1;
@@ -158,6 +159,12 @@ message WorldStatistics {
int32 total_entities = 3;
map<string, int32> entity_counts = 4;
}
+
+ message GameRule {
+ string name = 1;
+ string default_value = 2;
+ map<string, string> world_values = 3;
+ }
}
message WindowStatistics {