aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuck <git@lucko.me>2025-01-05 14:11:11 +0000
committerLuck <git@lucko.me>2025-01-05 14:11:24 +0000
commit336102f88b38900b60888ab85ea13b388d4fe0dc (patch)
treebfaf3ffd61b7f9a921daf768a6ef1c47529bd632
parent4cd34dcf6af2d07b17a11e77e5787c18cde99cf2 (diff)
downloadspark-336102f88b38900b60888ab85ea13b388d4fe0dc.tar.gz
spark-336102f88b38900b60888ab85ea13b388d4fe0dc.tar.bz2
spark-336102f88b38900b60888ab85ea13b388d4fe0dc.zip
Upgrade spark-sponge to API 12
-rw-r--r--spark-fabric/src/main/java/me/lucko/spark/fabric/FabricWorldInfoProvider.java3
-rw-r--r--spark-forge/src/main/java/me/lucko/spark/forge/ForgeWorldInfoProvider.java3
-rw-r--r--spark-neoforge/src/main/java/me/lucko/spark/neoforge/NeoForgeWorldInfoProvider.java3
-rw-r--r--spark-sponge/build.gradle8
-rw-r--r--spark-sponge/src/main/java/me/lucko/spark/sponge/SpongeClassSourceLookup.java17
-rw-r--r--spark-sponge/src/main/java/me/lucko/spark/sponge/SpongeCommandSender.java9
-rw-r--r--spark-sponge/src/main/java/me/lucko/spark/sponge/SpongePlayerPingProvider.java10
-rw-r--r--spark-sponge/src/main/java/me/lucko/spark/sponge/SpongeWorldInfoProvider.java30
-rw-r--r--spark-sponge/src/main/resources/META-INF/sponge_plugins.json2
9 files changed, 53 insertions, 32 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 f66906f..5484c7d 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
@@ -134,13 +134,14 @@ public abstract class FabricWorldInfoProvider implements WorldInfoProvider {
Iterable<ServerWorld> worlds = this.server.getWorlds();
for (ServerWorld world : worlds) {
+ String worldName = world.getRegistryKey().getValue().getPath();
+
world.getGameRules().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 worldName = world.getRegistryKey().getValue().getPath();
String value = world.getGameRules().get(key).serialize();
data.put(key.getName(), worldName, value);
}
diff --git a/spark-forge/src/main/java/me/lucko/spark/forge/ForgeWorldInfoProvider.java b/spark-forge/src/main/java/me/lucko/spark/forge/ForgeWorldInfoProvider.java
index 61bea72..a87aa03 100644
--- a/spark-forge/src/main/java/me/lucko/spark/forge/ForgeWorldInfoProvider.java
+++ b/spark-forge/src/main/java/me/lucko/spark/forge/ForgeWorldInfoProvider.java
@@ -121,13 +121,14 @@ public abstract class ForgeWorldInfoProvider implements WorldInfoProvider {
Iterable<ServerLevel> levels = this.server.getAllLevels();
for (ServerLevel level : levels) {
+ String levelName = level.dimension().location().getPath();
+
level.getGameRules().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 levelName = level.dimension().location().getPath();
String value = level.getGameRules().getRule(key).serialize();
data.put(key.getId(), levelName, value);
}
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 73b9e7b..d85cfb3 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
@@ -129,13 +129,14 @@ public abstract class NeoForgeWorldInfoProvider implements WorldInfoProvider {
Iterable<ServerLevel> levels = this.server.getAllLevels();
for (ServerLevel level : levels) {
+ String levelName = level.dimension().location().getPath();
+
level.getGameRules().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 levelName = level.dimension().location().getPath();
String value = level.getGameRules().getRule(key).serialize();
data.put(key.getId(), levelName, value);
}
diff --git a/spark-sponge/build.gradle b/spark-sponge/build.gradle
index de2a1d3..75356a5 100644
--- a/spark-sponge/build.gradle
+++ b/spark-sponge/build.gradle
@@ -2,9 +2,15 @@ plugins {
id 'com.gradleup.shadow' version '8.3.0'
}
+tasks.withType(JavaCompile) {
+ // override, compile targeting J21
+ options.release = 21
+}
+
dependencies {
implementation project(':spark-common')
- compileOnly "org.spongepowered:spongeapi:8.0.0-SNAPSHOT"
+ compileOnly "org.spongepowered:spongeapi:12.0.0"
+ compileOnly "com.google.guava:guava:33.3.1-jre"
}
repositories {
diff --git a/spark-sponge/src/main/java/me/lucko/spark/sponge/SpongeClassSourceLookup.java b/spark-sponge/src/main/java/me/lucko/spark/sponge/SpongeClassSourceLookup.java
index 0820ae3..1effb19 100644
--- a/spark-sponge/src/main/java/me/lucko/spark/sponge/SpongeClassSourceLookup.java
+++ b/spark-sponge/src/main/java/me/lucko/spark/sponge/SpongeClassSourceLookup.java
@@ -25,12 +25,12 @@ import me.lucko.spark.common.sampler.source.ClassSourceLookup;
import org.spongepowered.api.Game;
import org.spongepowered.plugin.PluginCandidate;
import org.spongepowered.plugin.PluginContainer;
-import org.spongepowered.plugin.builtin.jvm.JVMPluginContainer;
-import org.spongepowered.plugin.builtin.jvm.locator.JVMPluginResource;
+import org.spongepowered.plugin.builtin.StandardPluginContainer;
import java.lang.reflect.Field;
import java.nio.file.Path;
import java.util.Collection;
+import java.util.HashMap;
import java.util.Map;
public class SpongeClassSourceLookup extends ClassSourceLookup.ByCodeSource {
@@ -57,26 +57,25 @@ public class SpongeClassSourceLookup extends ClassSourceLookup.ByCodeSource {
}
// pretty nasty, but if it fails it doesn't really matter
- @SuppressWarnings("unchecked")
private static Map<Path, String> constructPathToPluginIdMap(Collection<PluginContainer> plugins) {
- ImmutableMap.Builder<Path, String> builder = ImmutableMap.builder();
+ Map<Path, String> map = new HashMap<>();
try {
- Field candidateField = JVMPluginContainer.class.getDeclaredField("candidate");
+ Field candidateField = StandardPluginContainer.class.getDeclaredField("candidate");
candidateField.setAccessible(true);
for (PluginContainer plugin : plugins) {
- if (plugin instanceof JVMPluginContainer) {
- PluginCandidate<JVMPluginResource> candidate = (PluginCandidate<JVMPluginResource>) candidateField.get(plugin);
+ if (plugin instanceof StandardPluginContainer) {
+ PluginCandidate candidate = (PluginCandidate) candidateField.get(plugin);
Path path = candidate.resource().path().toAbsolutePath().normalize();
- builder.put(path, plugin.metadata().id());
+ map.putIfAbsent(path, plugin.metadata().id());
}
}
} catch (Exception e) {
// ignore
}
- return builder.build();
+ return ImmutableMap.copyOf(map);
}
}
diff --git a/spark-sponge/src/main/java/me/lucko/spark/sponge/SpongeCommandSender.java b/spark-sponge/src/main/java/me/lucko/spark/sponge/SpongeCommandSender.java
index aa634cc..beae734 100644
--- a/spark-sponge/src/main/java/me/lucko/spark/sponge/SpongeCommandSender.java
+++ b/spark-sponge/src/main/java/me/lucko/spark/sponge/SpongeCommandSender.java
@@ -50,7 +50,8 @@ public class SpongeCommandSender extends AbstractCommandSender<Subject> {
@Override
public String getName() {
- return super.delegate.friendlyIdentifier().orElse(super.delegate.identifier());
+ String name = super.delegate.friendlyIdentifier().orElse(super.delegate.identifier());
+ return name.equals("console") ? "Console" : name;
}
@Override
@@ -64,9 +65,11 @@ public class SpongeCommandSender extends AbstractCommandSender<Subject> {
try {
return UUID.fromString(super.delegate.identifier());
- } catch (Exception e) {
- return UUID.nameUUIDFromBytes(super.delegate.identifier().getBytes(UTF_8));
+ } catch (IllegalArgumentException e) {
+ // ignore
}
+
+ return null;
}
@Override
diff --git a/spark-sponge/src/main/java/me/lucko/spark/sponge/SpongePlayerPingProvider.java b/spark-sponge/src/main/java/me/lucko/spark/sponge/SpongePlayerPingProvider.java
index b327a0a..3aa598f 100644
--- a/spark-sponge/src/main/java/me/lucko/spark/sponge/SpongePlayerPingProvider.java
+++ b/spark-sponge/src/main/java/me/lucko/spark/sponge/SpongePlayerPingProvider.java
@@ -24,6 +24,9 @@ import com.google.common.collect.ImmutableMap;
import me.lucko.spark.common.monitor.ping.PlayerPingProvider;
import org.spongepowered.api.Server;
import org.spongepowered.api.entity.living.player.server.ServerPlayer;
+import org.spongepowered.api.network.EngineConnectionState;
+import org.spongepowered.api.network.ServerConnectionState;
+import org.spongepowered.api.network.ServerSideConnection;
import java.util.Map;
@@ -38,7 +41,12 @@ public class SpongePlayerPingProvider implements PlayerPingProvider {
public Map<String, Integer> poll() {
ImmutableMap.Builder<String, Integer> builder = ImmutableMap.builder();
for (ServerPlayer player : this.server.onlinePlayers()) {
- builder.put(player.name(), player.connection().latency());
+ ServerSideConnection connection = player.connection();
+ EngineConnectionState connectionState = connection.state().orElse(null);
+ if (connectionState instanceof ServerConnectionState.Game) {
+ int latency = ((ServerConnectionState.Game) connectionState).latency();
+ builder.put(player.name(), latency);
+ }
}
return builder.build();
}
diff --git a/spark-sponge/src/main/java/me/lucko/spark/sponge/SpongeWorldInfoProvider.java b/spark-sponge/src/main/java/me/lucko/spark/sponge/SpongeWorldInfoProvider.java
index 15f15f8..2269e6f 100644
--- a/spark-sponge/src/main/java/me/lucko/spark/sponge/SpongeWorldInfoProvider.java
+++ b/spark-sponge/src/main/java/me/lucko/spark/sponge/SpongeWorldInfoProvider.java
@@ -31,8 +31,6 @@ import org.spongepowered.api.entity.Entity;
import org.spongepowered.api.entity.EntityType;
import org.spongepowered.api.entity.EntityTypes;
import org.spongepowered.api.world.chunk.WorldChunk;
-import org.spongepowered.api.world.gamerule.GameRule;
-import org.spongepowered.api.world.gamerule.GameRules;
import org.spongepowered.api.world.server.ServerWorld;
import java.util.ArrayList;
@@ -65,15 +63,15 @@ public class SpongeWorldInfoProvider implements WorldInfoProvider {
}
@Override
- public ChunksResult<Sponge7ChunkInfo> pollChunks() {
- ChunksResult<Sponge7ChunkInfo> data = new ChunksResult<>();
+ public ChunksResult<SpongeChunkInfo> pollChunks() {
+ ChunksResult<SpongeChunkInfo> data = new ChunksResult<>();
for (ServerWorld world : this.server.worldManager().worlds()) {
List<WorldChunk> chunks = Lists.newArrayList(world.loadedChunks());
- List<Sponge7ChunkInfo> list = new ArrayList<>(chunks.size());
+ List<SpongeChunkInfo> list = new ArrayList<>(chunks.size());
for (WorldChunk chunk : chunks) {
- list.add(new Sponge7ChunkInfo(chunk));
+ list.add(new SpongeChunkInfo(chunk));
}
data.put(world.key().value(), list);
@@ -86,12 +84,16 @@ public class SpongeWorldInfoProvider implements WorldInfoProvider {
public GameRulesResult pollGameRules() {
GameRulesResult data = new GameRulesResult();
- List<GameRule<?>> rules = GameRules.registry().stream().collect(Collectors.toList());
- for (GameRule<?> rule : rules) {
- data.putDefault(rule.name(), rule.defaultValue().toString());
- for (ServerWorld world : this.server.worldManager().worlds()) {
- data.put(rule.name(), world.key().value(), world.properties().gameRule(rule).toString());
- }
+ Collection<ServerWorld> worlds = this.server.worldManager().worlds();
+ for (ServerWorld world : worlds) {
+ String worldName = world.key().value();
+
+ world.properties().gameRules().forEach((gameRule, value) -> {
+ String defaultValue = gameRule.defaultValue().toString();
+ data.putDefault(gameRule.name(), defaultValue);
+
+ data.put(gameRule.name(), worldName, value.toString());
+ });
}
return data;
@@ -108,10 +110,10 @@ public class SpongeWorldInfoProvider implements WorldInfoProvider {
.collect(Collectors.toList());
}
- static final class Sponge7ChunkInfo extends AbstractChunkInfo<EntityType<?>> {
+ static final class SpongeChunkInfo extends AbstractChunkInfo<EntityType<?>> {
private final CountMap<EntityType<?>> entityCounts;
- Sponge7ChunkInfo(WorldChunk chunk) {
+ SpongeChunkInfo(WorldChunk chunk) {
super(chunk.chunkPosition().x(), chunk.chunkPosition().z());
this.entityCounts = new CountMap.Simple<>(new HashMap<>());
diff --git a/spark-sponge/src/main/resources/META-INF/sponge_plugins.json b/spark-sponge/src/main/resources/META-INF/sponge_plugins.json
index 195d0b9..7c46746 100644
--- a/spark-sponge/src/main/resources/META-INF/sponge_plugins.json
+++ b/spark-sponge/src/main/resources/META-INF/sponge_plugins.json
@@ -25,7 +25,7 @@
"dependencies": [
{
"id": "spongeapi",
- "version": "8.0.0"
+ "version": "12.0.0"
}
]
}