diff --git a/pom.xml b/pom.xml
index aa04b5c..2185adc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,30 +7,53 @@
com.github.civclassic
civclassic-parent
- 1.0.0
+ 1.0.1
com.github.maxopoly
artemis
Artemis
- 1.0.1
+ 1.1.0
+
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.3.0-SNAPSHOT
+
+
+
+ true
+
+
+ org.json
+ com.github.maxopoly.artemis.json
+
+
+
+
+
+
+
+
- com.destroystokyo.paper
+ io.papermc.paper
paper
- 1.16.5-R0.1-SNAPSHOT
+ 1.17-R0.1-SNAPSHOT
provided
com.github.maxopoly
zeus
- 1.1
+ 1.2
- vg.civcraft.mc.civmodcore
+ com.github.civclassic
CivModCore
- 1.8.2D
+ 1.9.0
provided
@@ -40,6 +63,10 @@
civ-github-repo
https://raw.githubusercontent.com/CivClassic/artifacts/master/
+
+ papermc
+ https://papermc.io/repo/repository/maven-public/
+
diff --git a/src/main/java/com/github/maxopoly/artemis/ArtemisConfigManager.java b/src/main/java/com/github/maxopoly/artemis/ArtemisConfigManager.java
index df84813..f1eafd1 100644
--- a/src/main/java/com/github/maxopoly/artemis/ArtemisConfigManager.java
+++ b/src/main/java/com/github/maxopoly/artemis/ArtemisConfigManager.java
@@ -1,5 +1,8 @@
package com.github.maxopoly.artemis;
+import static vg.civcraft.mc.civmodcore.config.ConfigHelper.parseMaterialList;
+
+
import java.util.ArrayList;
import java.util.List;
@@ -13,9 +16,9 @@
import com.rabbitmq.client.ConnectionFactory;
import vg.civcraft.mc.civmodcore.ACivMod;
-import vg.civcraft.mc.civmodcore.CoreConfigManager;
+import vg.civcraft.mc.civmodcore.config.ConfigParser;
-public class ArtemisConfigManager extends CoreConfigManager {
+public class ArtemisConfigManager extends ConfigParser {
private ConfigurationSection config;
private ConnectionFactory connectionFactory;
diff --git a/src/main/java/com/github/maxopoly/artemis/ArtemisPlayerDataCache.java b/src/main/java/com/github/maxopoly/artemis/ArtemisPlayerDataCache.java
index 87e890f..f91e444 100644
--- a/src/main/java/com/github/maxopoly/artemis/ArtemisPlayerDataCache.java
+++ b/src/main/java/com/github/maxopoly/artemis/ArtemisPlayerDataCache.java
@@ -4,6 +4,7 @@
import java.util.Map;
import java.util.UUID;
+import net.kyori.adventure.text.Component;
import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
import com.github.maxopoly.zeus.model.ZeusLocation;
@@ -38,10 +39,10 @@ public synchronized void completeSession(PlayerDataTransferSession session) {
}
// we abuse the kick message to deliver the result
if (session.getData() == null) {
- event.setKickMessage("D"); //deny
+ event.kickMessage(Component.text("D")); //deny
} else {
sessions.put(uuid, session);
- event.setKickMessage("A"); //accept
+ event.kickMessage(Component.text("A")); //accept
}
//if player was sent from another server, this will contain where the originating server wanted the player to go
ZeusLocation cachedLocation = targetLocations.remove(uuid);
diff --git a/src/main/java/com/github/maxopoly/artemis/ArtemisPlayerManager.java b/src/main/java/com/github/maxopoly/artemis/ArtemisPlayerManager.java
index ad92519..d08747d 100644
--- a/src/main/java/com/github/maxopoly/artemis/ArtemisPlayerManager.java
+++ b/src/main/java/com/github/maxopoly/artemis/ArtemisPlayerManager.java
@@ -54,7 +54,7 @@ public UUID getUUID(String name) {
* If the player is not found in the cache, Zeus is queried for the players name
* (blocking)
*
- * @param uuid UUID of the player to look up
+ * @param playerUUID UUID of the player to look up
* @return Name of the given player or null if no such player is known
*/
public String getName(UUID playerUUID) {
diff --git a/src/main/java/com/github/maxopoly/artemis/ArtemisPlugin.java b/src/main/java/com/github/maxopoly/artemis/ArtemisPlugin.java
index 49a68c4..aff5ec4 100644
--- a/src/main/java/com/github/maxopoly/artemis/ArtemisPlugin.java
+++ b/src/main/java/com/github/maxopoly/artemis/ArtemisPlugin.java
@@ -1,11 +1,6 @@
package com.github.maxopoly.artemis;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-import org.bukkit.Bukkit;
-import org.bukkit.entity.Player;
-
+import com.github.maxopoly.artemis.commands.ArtemisCommandManager;
import com.github.maxopoly.artemis.listeners.PlayerDataListener;
import com.github.maxopoly.artemis.listeners.RespawnListener;
import com.github.maxopoly.artemis.listeners.ShardBorderListener;
@@ -15,7 +10,11 @@
import com.github.maxopoly.artemis.rabbit.outgoing.ArtemisStartup;
import com.github.maxopoly.zeus.model.TransactionIdManager;
import com.github.maxopoly.zeus.servers.ZeusServer;
-
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+import org.bukkit.Bukkit;
+import org.bukkit.entity.Player;
import vg.civcraft.mc.civmodcore.ACivMod;
public final class ArtemisPlugin extends ACivMod {
@@ -37,6 +36,7 @@ public static ArtemisPlugin getInstance() {
private ZeusServer zeus;
private CustomWorldNBTStorage customNBTHandler;
private RandomSpawnHandler randomSpawnHandler;
+ private ArtemisCommandManager commandManager;
private ScheduledExecutorService transactionIdCleanup; // can't be a bukkit thread, because those are disable before
// onDisable and we
// still need it there
@@ -59,6 +59,7 @@ public void onEnable() {
this.globalPlayerTracker = new ArtemisPlayerManager();
this.randomSpawnHandler = new RandomSpawnHandler(this.configManager);
this.rabbitInputHandler = new ArtemisRabbitInputHandler(getLogger(), transactionIdManager);
+ this.commandManager = new ArtemisCommandManager(this);
this.rabbitHandler = new RabbitHandler(configManager.getConnectionFactory(),
configManager.getIncomingRabbitQueue(), configManager.getOutgoingRabbitQueue(), transactionIdManager,
getLogger(), zeus, rabbitInputHandler);
@@ -146,4 +147,7 @@ public TransactionIdManager getTransactionIdManager() {
return transactionIdManager;
}
+ public ArtemisCommandManager getCommandManager() {
+ return commandManager;
+ }
}
diff --git a/src/main/java/com/github/maxopoly/artemis/RandomSpawnHandler.java b/src/main/java/com/github/maxopoly/artemis/RandomSpawnHandler.java
index a27a84f..7e7ef56 100644
--- a/src/main/java/com/github/maxopoly/artemis/RandomSpawnHandler.java
+++ b/src/main/java/com/github/maxopoly/artemis/RandomSpawnHandler.java
@@ -1,6 +1,6 @@
package com.github.maxopoly.artemis;
-import java.util.EnumSet;
+import com.github.maxopoly.zeus.model.ConnectedMapState;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
@@ -10,18 +10,14 @@
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.logging.Level;
-
import org.bukkit.Bukkit;
import org.bukkit.Chunk;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Block;
+import vg.civcraft.mc.civmodcore.inventory.items.MaterialUtils;
-import com.destroystokyo.paper.MaterialTags;
-import com.github.maxopoly.zeus.model.ConnectedMapState;
-
-import vg.civcraft.mc.civmodcore.api.MaterialAPI;
public class RandomSpawnHandler {
@@ -103,7 +99,7 @@ private Location calcSpawnLocation(boolean sync) {
int z = pos.getBlockZ() & 0xF;
for (int y = maxY; y >= minY; y--) {
Block block = chunk.getBlock(x, y, z);
- if (MaterialAPI.isAir(block.getType())) {
+ if (MaterialUtils.isAir(block.getType())) {
airCount++;
continue;
}
diff --git a/src/main/java/com/github/maxopoly/artemis/commands/ArtemisCommandManager.java b/src/main/java/com/github/maxopoly/artemis/commands/ArtemisCommandManager.java
new file mode 100644
index 0000000..41df9d6
--- /dev/null
+++ b/src/main/java/com/github/maxopoly/artemis/commands/ArtemisCommandManager.java
@@ -0,0 +1,25 @@
+package com.github.maxopoly.artemis.commands;
+
+import co.aikar.commands.BukkitCommandCompletionContext;
+import co.aikar.commands.CommandCompletions;
+import javax.annotation.Nonnull;
+import org.bukkit.plugin.Plugin;
+import vg.civcraft.mc.civmodcore.commands.CommandManager;
+
+public class ArtemisCommandManager extends CommandManager {
+
+ public ArtemisCommandManager(Plugin plugin) {
+ super(plugin);
+ init();
+ }
+
+ @Override
+ public void registerCommands() {
+ registerCommand(new ShardTeleportCommand());
+ }
+
+ @Override
+ public void registerCompletions(@Nonnull CommandCompletions completions) {
+ super.registerCompletions(completions);
+ }
+}
diff --git a/src/main/java/com/github/maxopoly/artemis/commands/ShardTeleportCommand.java b/src/main/java/com/github/maxopoly/artemis/commands/ShardTeleportCommand.java
index d229b3c..942c5b8 100644
--- a/src/main/java/com/github/maxopoly/artemis/commands/ShardTeleportCommand.java
+++ b/src/main/java/com/github/maxopoly/artemis/commands/ShardTeleportCommand.java
@@ -1,87 +1,46 @@
package com.github.maxopoly.artemis.commands;
-import java.util.List;
-import java.util.UUID;
-import java.util.function.Consumer;
-
-import org.bukkit.ChatColor;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
+import co.aikar.commands.BaseCommand;
+import co.aikar.commands.annotation.CommandAlias;
+import co.aikar.commands.annotation.CommandPermission;
+import co.aikar.commands.annotation.Description;
+import co.aikar.commands.annotation.Optional;
+import co.aikar.commands.annotation.Syntax;
import com.github.maxopoly.artemis.ArtemisPlugin;
import com.github.maxopoly.artemis.rabbit.outgoing.RequestPlayerLocation;
import com.github.maxopoly.artemis.rabbit.session.ALocationRequestSession;
import com.github.maxopoly.zeus.model.PlayerData;
import com.github.maxopoly.zeus.model.TransactionIdManager;
import com.github.maxopoly.zeus.model.ZeusLocation;
+import java.util.UUID;
+import java.util.function.Consumer;
+import org.bukkit.ChatColor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
-import vg.civcraft.mc.civmodcore.command.CivCommand;
-import vg.civcraft.mc.civmodcore.command.StandaloneCommand;
-
-@CivCommand(id = "stp")
-public class ShardTeleportCommand extends StandaloneCommand {
+public class ShardTeleportCommand extends BaseCommand {
- @Override
- public boolean execute(CommandSender sender, String[] args) {
- if (args.length <= 4 && args.length != 2) {
- if (!(sender instanceof Player)) {
- sender.sendMessage("Fuck off");
- return true;
- }
- }
- switch (args.length) {
- case 1: { // TP Sender to player
- UUID playerToTpTo = getPlayerUUID(sender, args[0]);
+ @CommandAlias("stp")
+ @Syntax("[player] [optional_player]")
+ @Description("Teleport to a player across any shard")
+ @CommandPermission("artemis.tp")
+ public void execute(Player sender, @Optional String targetPlayer, @Optional String optionalPlayer) {// TP Sender to player
+ if (targetPlayer != null && optionalPlayer == null) {
+ UUID playerToTpTo = getPlayerUUID(sender, targetPlayer);
if (playerToTpTo == null) {
- return true;
+ return;
}
setupLocationRequestForPlayer(playerToTpTo, l -> teleportToLocation(((Player) sender).getUniqueId(), l));
- break;
}
- case 2: // Tp First player to second one
- UUID playerToTp = getPlayerUUID(sender, args[0]);
- UUID playerToTpTo = getPlayerUUID(sender, args[1]);
+ if (targetPlayer != null && optionalPlayer != null) {
+ // Tp First player to second one
+ UUID playerToTp = getPlayerUUID(sender, targetPlayer);
+ UUID playerToTpTo = getPlayerUUID(sender, optionalPlayer);
if (playerToTp == null || playerToTpTo == null) {
- return true;
+ return;
}
setupLocationRequestForPlayer(playerToTpTo, l -> teleportToLocation(playerToTp, l));
- break;
- case 3: // Tp sender to coords
- case 4: {
- String world;
- if (args.length == 3) {
- world = ArtemisPlugin.getInstance().getConfigManager().getWorldName();
- } else {
- world = args[0];
- }
- Integer x = parseInt(sender, args[args.length - 3]);
- Integer y = parseInt(sender, args[args.length - 2]);
- Integer z = parseInt(sender, args[args.length - 1]);
- if (x == null || y == null || z == null) {
- return true;
- }
- ZeusLocation location = new ZeusLocation(world, x, y, z);
- teleportToLocation(((Player) sender).getUniqueId(), location);
- break;}
- case 5:
- UUID targetPlayer = getPlayerUUID(sender, args[0]);
- if (targetPlayer == null) {
- return true;
- }
- String world = args[1];
- Integer x = parseInt(sender, args[2]);
- Integer y = parseInt(sender, args[3]);
- Integer z = parseInt(sender, args[4]);
- if (x == null || y == null || z == null) {
- return true;
- }
- ZeusLocation location = new ZeusLocation(world, x, y, z);
- teleportToLocation(targetPlayer, location);
- break;
- default:
- return false;
}
- return true;
}
private void setupLocationRequestForPlayer(UUID player, Consumer callback) {
@@ -106,12 +65,6 @@ private UUID getPlayerUUID(CommandSender requester, String name) {
return data.getUUID();
}
- @Override
- public List tabComplete(CommandSender sender, String[] args) {
- // TODO Auto-generated method stub
- return null;
- }
-
private Integer parseInt(CommandSender sender, String toParse) {
try {
return Integer.parseInt(toParse);
diff --git a/src/main/java/com/github/maxopoly/artemis/listeners/PlayerDataListener.java b/src/main/java/com/github/maxopoly/artemis/listeners/PlayerDataListener.java
index c9852c7..1e2c3e1 100644
--- a/src/main/java/com/github/maxopoly/artemis/listeners/PlayerDataListener.java
+++ b/src/main/java/com/github/maxopoly/artemis/listeners/PlayerDataListener.java
@@ -1,5 +1,6 @@
package com.github.maxopoly.artemis.listeners;
+import net.kyori.adventure.text.Component;
import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@@ -13,7 +14,6 @@
import com.github.maxopoly.artemis.rabbit.RabbitHandler;
import com.github.maxopoly.artemis.rabbit.outgoing.RequestPlayerData;
import com.github.maxopoly.artemis.rabbit.session.ArtemisPlayerDataTransferSession;
-import com.github.maxopoly.zeus.rabbit.sessions.PlayerDataTransferSession;
public class PlayerDataListener implements Listener {
@@ -25,10 +25,10 @@ public void preLoginDataFetch(AsyncPlayerPreLoginEvent event) {
ArtemisPlugin.getInstance().getZeus(), ticket, event.getUniqueId());
ArtemisPlugin.getInstance().getTransactionIdManager().putSession(session);
rabbit.sendMessage(new RequestPlayerData(ticket, event.getUniqueId()));
- event.setKickMessage("");
+ event.kickMessage(Component.empty());
ArtemisPlugin.getInstance().getPlayerDataCache().putWaiting(event.getUniqueId(), event);
synchronized (event) {
- while (event.getKickMessage().equals("")) {
+ while (event.kickMessage().equals(Component.empty())) {
try {
event.wait();
} catch (InterruptedException e) {
@@ -36,12 +36,12 @@ public void preLoginDataFetch(AsyncPlayerPreLoginEvent event) {
}
}
}
- if (event.getKickMessage().equals("D")) {
+ if (event.kickMessage().equals(Component.text("D"))) {
event.disallow(Result.KICK_OTHER, "Internal data error, try waiting a few seconds and then login again. "
+ "If that does not help, consult an admin");
return;
}
- if (!event.getKickMessage().equals("A")) {
+ if (!event.kickMessage().equals(Component.text("A"))) {
event.disallow(Result.KICK_OTHER, "Special internal error, tell an admin about this");
return;
}
diff --git a/src/main/java/com/github/maxopoly/artemis/nbt/CustomWorldNBTStorage.java b/src/main/java/com/github/maxopoly/artemis/nbt/CustomWorldNBTStorage.java
index 0055a0a..bc16d41 100644
--- a/src/main/java/com/github/maxopoly/artemis/nbt/CustomWorldNBTStorage.java
+++ b/src/main/java/com/github/maxopoly/artemis/nbt/CustomWorldNBTStorage.java
@@ -1,5 +1,14 @@
package com.github.maxopoly.artemis.nbt;
+import com.github.maxopoly.artemis.ArtemisPlugin;
+import com.github.maxopoly.artemis.rabbit.session.ArtemisPlayerDataTransferSession;
+import com.github.maxopoly.artemis.util.BukkitConversion;
+import com.github.maxopoly.zeus.ZeusMain;
+import com.github.maxopoly.zeus.model.ConnectedMapState;
+import com.github.maxopoly.zeus.model.ZeusLocation;
+import com.github.maxopoly.zeus.rabbit.outgoing.artemis.SendPlayerData;
+import com.github.maxopoly.zeus.rabbit.sessions.PlayerDataTransferSession;
+import com.mojang.datafixers.DataFixer;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
@@ -7,7 +16,6 @@
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
@@ -17,43 +25,26 @@
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
-import java.util.concurrent.LinkedBlockingDeque;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
-
+import net.minecraft.SystemUtils;
+import net.minecraft.nbt.GameProfileSerializer;
+import net.minecraft.nbt.NBTCompressedStreamTools;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.server.MinecraftServer;
+import net.minecraft.server.dedicated.DedicatedPlayerList;
+import net.minecraft.server.players.PlayerList;
+import net.minecraft.util.datafix.DataFixTypes;
+import net.minecraft.world.entity.player.EntityHuman;
+import net.minecraft.world.level.storage.Convertable;
+import net.minecraft.world.level.storage.SavedFile;
+import net.minecraft.world.level.storage.WorldNBTStorage;
import org.bukkit.Bukkit;
import org.bukkit.Server;
-import org.bukkit.World;
-import org.bukkit.craftbukkit.v1_16_R3.CraftServer;
-
-import com.github.maxopoly.artemis.ArtemisPlugin;
-import com.github.maxopoly.artemis.rabbit.session.ArtemisPlayerDataTransferSession;
-import com.github.maxopoly.artemis.util.BukkitConversion;
-import com.github.maxopoly.zeus.ZeusMain;
-import com.github.maxopoly.zeus.model.ConnectedMapState;
-import com.github.maxopoly.zeus.model.ZeusLocation;
-import com.github.maxopoly.zeus.rabbit.outgoing.artemis.SendPlayerData;
-import com.github.maxopoly.zeus.rabbit.sessions.PlayerDataTransferSession;
-import com.mojang.datafixers.DataFixer;
+import org.bukkit.craftbukkit.v1_17_R1.CraftServer;
+import vg.civcraft.mc.civmodcore.nbt.wrappers.NBTCompound;
+import vg.civcraft.mc.civmodcore.players.settings.PlayerSetting;
+import vg.civcraft.mc.civmodcore.players.settings.PlayerSettingAPI;
-import net.minecraft.server.v1_16_R3.Convertable;
-import net.minecraft.server.v1_16_R3.Convertable.ConversionSession;
-import net.minecraft.server.v1_16_R3.DataFixTypes;
-import net.minecraft.server.v1_16_R3.DedicatedPlayerList;
-import net.minecraft.server.v1_16_R3.EntityHuman;
-import net.minecraft.server.v1_16_R3.GameProfileSerializer;
-import net.minecraft.server.v1_16_R3.MinecraftServer;
-import net.minecraft.server.v1_16_R3.NBTCompressedStreamTools;
-import net.minecraft.server.v1_16_R3.NBTTagCompound;
-import net.minecraft.server.v1_16_R3.PlayerList;
-import net.minecraft.server.v1_16_R3.SavedFile;
-import net.minecraft.server.v1_16_R3.SystemUtils;
-import net.minecraft.server.v1_16_R3.WorldNBTStorage;
-import vg.civcraft.mc.civmodcore.playersettings.PlayerSetting;
-import vg.civcraft.mc.civmodcore.playersettings.PlayerSettingAPI;
-import vg.civcraft.mc.civmodcore.serialization.NBTCompound;
public class CustomWorldNBTStorage extends WorldNBTStorage {
@@ -78,9 +69,9 @@ public static synchronized boolean isActive(UUID uuid) {
private final File playerDir;
- private CustomWorldNBTStorage(ConversionSession conversionsession, DataFixer datafixer) {
+ private CustomWorldNBTStorage(Convertable.ConversionSession conversionsession, DataFixer datafixer) {
super(conversionsession, datafixer);
- this.playerDir = conversionsession.getWorldFolder(SavedFile.PLAYERDATA).toFile();
+ this.playerDir = conversionsession.getWorldFolder(SavedFile.c).toFile();
this.playerDir.mkdirs();
this.customDataOriginallyLoaded = new ConcurrentHashMap<>();
}
@@ -95,9 +86,8 @@ public void stopExecutor() {
public static ZeusLocation readZeusLocation(byte[] playerData) {
try {
- NBTTagCompound nbttagcompound = NBTCompressedStreamTools.a(new ByteArrayInputStream(playerData));
- NBTCompound comp = new NBTCompound(nbttagcompound);
- double[] pos = comp.getDoubleArray("Pos");
+ NBTCompound nbtCompound = new NBTCompound(NBTCompressedStreamTools.a(new ByteArrayInputStream(playerData)));
+ double[] pos = nbtCompound.getDoubleArray("Pos");
ConnectedMapState mapState = ArtemisPlugin.getInstance().getConfigManager().getConnectedMapState();
return new ZeusLocation(mapState.getWorld(), pos[0], pos[1], pos[2]);
} catch (IOException e) {
@@ -189,7 +179,7 @@ public NBTTagCompound load(EntityHuman entityhuman) {
NBTTagCompound comp = loadCompound(entityhuman.getUniqueID());
if (comp != null) {
int i = comp.hasKeyOfType("DataVersion", 3) ? comp.getInt("DataVersion") : -1;
- entityhuman.load(GameProfileSerializer.a(this.a, DataFixTypes.PLAYER, comp, i));
+ entityhuman.load(GameProfileSerializer.a(this.a, DataFixTypes.b, comp, i));
}
return comp;
}
@@ -217,24 +207,24 @@ private NBTTagCompound loadCompound(UUID uuid) {
ArtemisPlugin.getInstance().getRandomSpawnHandler().getRandomSpawnLocation(uuid));
}
if (loc != null) {
- comp.setDoubleArray("Pos", new double[] { loc.getX(), loc.getY(), loc.getZ() });
+ comp.setDoubleArray("Pos", new double[] {loc.getX(), loc.getY(), loc.getZ()});
}
insertWorldUUID(comp);
if (comp.hasKeyOfType(CUSTOM_DATA_ID, 10)) {
- NBTCompound customData = comp.getCompound(CUSTOM_DATA_ID);
+ NBTTagCompound customData = comp.getCompound(CUSTOM_DATA_ID);
extractCustomPlayerData(uuid, customData);
}
if (ArtemisPlugin.getInstance().getConfigManager().isDebugEnabled()) {
- ArtemisPlugin.getInstance().getLogger().info("Loaded NBT : " + comp.toString());
+ ArtemisPlugin.getInstance().getLogger().info("Loaded NBT : " + comp);
}
- return comp.getRAW();
+ return comp;
} catch (IOException e) {
ArtemisPlugin.getInstance().getLogger().log(Level.SEVERE, "Failed to load player data", e);
return null;
}
}
- private static void insertWorldUUID(NBTCompound compound) {
+ private static void insertWorldUUID(NBTTagCompound compound) {
String worldName = ArtemisPlugin.getInstance().getConfigManager().getConnectedMapState().getWorld();
UUID worldUUID = Bukkit.getWorld(worldName).getUID();
compound.setLong("WorldUUIDLeast", worldUUID.getLeastSignificantBits());
@@ -247,15 +237,15 @@ public static CustomWorldNBTStorage insertCustomNBTHandler() {
Field trueServerField = CraftServer.class.getDeclaredField("console");
trueServerField.setAccessible(true);
MinecraftServer trueServer = (MinecraftServer) trueServerField.get(server);
- Field nbtField = MinecraftServer.class.getDeclaredField("worldNBTStorage");
- Convertable.ConversionSession session = trueServer.convertable;
- DataFixer dataFixer = trueServer.dataConverterManager;
+ Field nbtField = MinecraftServer.class.getDeclaredField("k");
+ Convertable.ConversionSession session = trueServer.j;
+ DataFixer dataFixer = trueServer.O;
CustomWorldNBTStorage customNBT = new CustomWorldNBTStorage(session, dataFixer);
overwriteFinalField(nbtField, customNBT, trueServer);
Field playerListField = CraftServer.class.getDeclaredField("playerList");
playerListField.setAccessible(true);
DedicatedPlayerList playerList = (DedicatedPlayerList) playerListField.get(server);
- Field nbtPlayerListField = PlayerList.class.getField("playerFileData");
+ Field nbtPlayerListField = PlayerList.class.getField("r");
overwriteFinalField(nbtPlayerListField, customNBT, playerList);
return customNBT;
} catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
@@ -264,7 +254,7 @@ public static CustomWorldNBTStorage insertCustomNBTHandler() {
}
}
- private void extractCustomPlayerData(UUID player, NBTCompound specialDataCompound) {
+ private void extractCustomPlayerData(UUID player, NBTTagCompound specialDataCompound) {
// we keep data in this map so settings not loaded on the server currently are
// not reset
Map extractedData = new HashMap<>();
@@ -295,26 +285,20 @@ private void insertCustomPlayerData(UUID player, NBTTagCompound generalPlayerDat
String serial = setting.serialize(setting.getValue(player));
dataToInsert.put(setting.getIdentifier(), serial);
}
- NBTCompound comp = new NBTCompound(generalPlayerDataCompound);
- NBTCompound customDataComp = new NBTCompound();
+ NBTTagCompound comp = generalPlayerDataCompound;
+ NBTTagCompound customDataComp = new NBTTagCompound();
for (Entry entry : dataToInsert.entrySet()) {
customDataComp.setString(entry.getKey(), entry.getValue());
}
- comp.setCompound(CUSTOM_DATA_ID, customDataComp);
+ comp.set(CUSTOM_DATA_ID, customDataComp);
}
private static void overwriteFinalField(Field field, Object newValue, Object obj) {
try {
field.setAccessible(true);
- // remove final modifier from field
- Field modifiersField;
- modifiersField = Field.class.getDeclaredField("modifiers");
- modifiersField.setAccessible(true);
- modifiersField.setInt(field, field.getModifiers() & ~Modifier.PROTECTED);
field.set(obj, newValue);
- } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
- ArtemisPlugin.getInstance().getLogger().log(Level.SEVERE, "Failed to set final field", e);
+ } catch (SecurityException | IllegalArgumentException | IllegalAccessException e) {
+ ArtemisPlugin.getInstance().getLogger().log(Level.SEVERE, "Failed to set final field", e.getStackTrace());
}
}
-
}
diff --git a/src/main/java/com/github/maxopoly/artemis/rabbit/incoming/playertransfer/HandleReplyReceivePlayerData.java b/src/main/java/com/github/maxopoly/artemis/rabbit/incoming/playertransfer/HandleReplyReceivePlayerData.java
index ba541e9..1e6695a 100644
--- a/src/main/java/com/github/maxopoly/artemis/rabbit/incoming/playertransfer/HandleReplyReceivePlayerData.java
+++ b/src/main/java/com/github/maxopoly/artemis/rabbit/incoming/playertransfer/HandleReplyReceivePlayerData.java
@@ -1,5 +1,6 @@
package com.github.maxopoly.artemis.rabbit.incoming.playertransfer;
+import com.github.maxopoly.zeus.rabbit.PacketSession;
import org.json.JSONObject;
import com.github.maxopoly.artemis.ArtemisPlugin;
@@ -8,7 +9,7 @@
import com.github.maxopoly.zeus.rabbit.outgoing.artemis.SendPlayerData;
import com.github.maxopoly.zeus.servers.ConnectedServer;
-public class HandleReplyReceivePlayerData extends InteractiveRabbitCommand {
+public class HandleReplyReceivePlayerData extends InteractiveRabbitCommand {
@Override
public String getIdentifier() {
@@ -21,11 +22,14 @@ public boolean createSession() {
}
@Override
- public boolean handleRequest(ArtemisPlayerDataTransferSession connState, ConnectedServer sendingServer, JSONObject data) {
+ public boolean handleRequest(PacketSession connState, ConnectedServer sendingServer, JSONObject data) {
+ if (!(connState instanceof ArtemisPlayerDataTransferSession session)) {
+ return false;
+ }
boolean accepted = data.getBoolean("accepted");
if (!accepted) {
//fallback for recovery
- ArtemisPlugin.getInstance().getCustomNBTStorage().vanillaSave(connState.getEntityHuman());
+ ArtemisPlugin.getInstance().getCustomNBTStorage().vanillaSave(session.getEntityHuman());
}
return false;
}
diff --git a/src/main/java/com/github/maxopoly/artemis/rabbit/incoming/playertransfer/HandleZeusRequestPlayerData.java b/src/main/java/com/github/maxopoly/artemis/rabbit/incoming/playertransfer/HandleZeusRequestPlayerData.java
index 1a4fabd..97bd56c 100644
--- a/src/main/java/com/github/maxopoly/artemis/rabbit/incoming/playertransfer/HandleZeusRequestPlayerData.java
+++ b/src/main/java/com/github/maxopoly/artemis/rabbit/incoming/playertransfer/HandleZeusRequestPlayerData.java
@@ -1,12 +1,5 @@
package com.github.maxopoly.artemis.rabbit.incoming.playertransfer;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.util.UUID;
-
-import org.bukkit.Bukkit;
-import org.json.JSONObject;
-
import com.github.maxopoly.artemis.ArtemisPlugin;
import com.github.maxopoly.artemis.nbt.CustomWorldNBTStorage;
import com.github.maxopoly.artemis.rabbit.outgoing.SendRequestedPlayerData;
@@ -15,9 +8,14 @@
import com.github.maxopoly.zeus.rabbit.outgoing.artemis.SendPlayerData;
import com.github.maxopoly.zeus.rabbit.outgoing.artemis.ZeusRequestPlayerData;
import com.github.maxopoly.zeus.servers.ConnectedServer;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.UUID;
+import net.minecraft.nbt.NBTCompressedStreamTools;
+import net.minecraft.nbt.NBTTagCompound;
+import org.bukkit.Bukkit;
+import org.json.JSONObject;
-import net.minecraft.server.v1_16_R3.NBTCompressedStreamTools;
-import net.minecraft.server.v1_16_R3.NBTTagCompound;
public class HandleZeusRequestPlayerData extends GenericInteractiveRabbitCommand {
diff --git a/src/main/java/com/github/maxopoly/artemis/rabbit/session/ArtemisPlayerDataTransferSession.java b/src/main/java/com/github/maxopoly/artemis/rabbit/session/ArtemisPlayerDataTransferSession.java
index ea6d7a3..6394490 100644
--- a/src/main/java/com/github/maxopoly/artemis/rabbit/session/ArtemisPlayerDataTransferSession.java
+++ b/src/main/java/com/github/maxopoly/artemis/rabbit/session/ArtemisPlayerDataTransferSession.java
@@ -1,11 +1,10 @@
package com.github.maxopoly.artemis.rabbit.session;
-import java.util.UUID;
-
import com.github.maxopoly.zeus.rabbit.sessions.PlayerDataTransferSession;
import com.github.maxopoly.zeus.servers.ConnectedServer;
+import java.util.UUID;
+import net.minecraft.world.entity.player.EntityHuman;
-import net.minecraft.server.v1_16_R3.EntityHuman;
public class ArtemisPlayerDataTransferSession extends PlayerDataTransferSession {
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index cb16493..fcd1f5e 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -1,29 +1,13 @@
# READ MORE: https://www.spigotmc.org/wiki/plugin-yml/
name: ${project.name}
-
version: ${project.version}
-
main: ${project.groupId}.${project.artifactId}.ArtemisPlugin
-
-api-version: 1.14
-
+api-version: 1.17
depend: [CivModCore]
-
softdepend: []
-
authors: [Maxopoly]
-commands:
- stp:
- aliases:
- - shardteleport
- usage: /stp
- description: Teleports you somewhere
- min-args: 1
- max-args: 5
- player-only: false
- permission: artemis.tp
permissions:
artemis.tp:
description: Gives access to the teleport command