aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/common/misc
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/common/misc')
-rw-r--r--src/main/java/gregtech/common/misc/GT_Command.java67
-rw-r--r--src/main/java/gregtech/common/misc/GlobalEnergyWorldSavedData.java60
-rw-r--r--src/main/java/gregtech/common/misc/GlobalVariableStorage.java10
-rw-r--r--src/main/java/gregtech/common/misc/WirelessNetworkManager.java101
-rw-r--r--src/main/java/gregtech/common/misc/spaceprojects/SpaceProjectManager.java16
-rw-r--r--src/main/java/gregtech/common/misc/spaceprojects/SpaceProjectWorldSavedData.java5
-rw-r--r--src/main/java/gregtech/common/misc/spaceprojects/commands/SP_Command.java50
7 files changed, 116 insertions, 193 deletions
diff --git a/src/main/java/gregtech/common/misc/GT_Command.java b/src/main/java/gregtech/common/misc/GT_Command.java
index ad3293be90..3bf73b6300 100644
--- a/src/main/java/gregtech/common/misc/GT_Command.java
+++ b/src/main/java/gregtech/common/misc/GT_Command.java
@@ -1,17 +1,14 @@
package gregtech.common.misc;
import static gregtech.common.misc.WirelessNetworkManager.addEUToGlobalEnergyMap;
-import static gregtech.common.misc.WirelessNetworkManager.getRawUUIDFromUsername;
-import static gregtech.common.misc.WirelessNetworkManager.getUUIDFromUsername;
import static gregtech.common.misc.WirelessNetworkManager.getUserEU;
-import static gregtech.common.misc.WirelessNetworkManager.getUsernameFromUUID;
-import static gregtech.common.misc.WirelessNetworkManager.joinUserNetwork;
import static gregtech.common.misc.WirelessNetworkManager.setUserEU;
import java.lang.reflect.Field;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
+import java.util.UUID;
import java.util.stream.Stream;
import net.minecraft.command.CommandBase;
@@ -27,6 +24,7 @@ import gregtech.api.enums.GT_Values;
import gregtech.api.objects.GT_ChunkManager;
import gregtech.api.util.GT_Utility;
import gregtech.common.GT_Pollution;
+import gregtech.common.misc.spaceprojects.SpaceProjectManager;
public final class GT_Command extends CommandBase {
@@ -196,18 +194,12 @@ public final class GT_Command extends CommandBase {
case "global_energy_add" -> {
String username = strings[1];
String formatted_username = EnumChatFormatting.BLUE + username + EnumChatFormatting.RESET;
- String uuid = getUUIDFromUsername(username);
+ UUID uuid = SpaceProjectManager.getPlayerUUIDFromName(username);
String EU_String = strings[2];
// Usage is /gt global_energy_add username EU
- if (uuid.equals("")) {
- sender.addChatMessage(
- new ChatComponentText("User " + formatted_username + " has no global energy network."));
- break;
- }
-
String EU_string_formatted = EnumChatFormatting.RED
+ GT_Utility.formatNumbers(new BigInteger(EU_String))
+ EnumChatFormatting.RESET;
@@ -240,13 +232,7 @@ public final class GT_Command extends CommandBase {
String username = strings[1];
String formatted_username = EnumChatFormatting.BLUE + username + EnumChatFormatting.RESET;
- String uuid = getUUIDFromUsername(username);
-
- if (uuid.equals("")) {
- sender.addChatMessage(
- new ChatComponentText("User " + formatted_username + " has no global energy network."));
- break;
- }
+ UUID uuid = SpaceProjectManager.getPlayerUUIDFromName(username);
String EU_String_0 = strings[2];
@@ -278,23 +264,12 @@ public final class GT_Command extends CommandBase {
String formattedUsernameSubject = EnumChatFormatting.BLUE + usernameSubject + EnumChatFormatting.RESET;
String formattedUsernameTeam = EnumChatFormatting.BLUE + usernameTeam + EnumChatFormatting.RESET;
- String uuidSubject = getRawUUIDFromUsername(usernameSubject);
- String uuidTeam = getUUIDFromUsername(usernameTeam);
+ UUID uuidSubject = SpaceProjectManager.getPlayerUUIDFromName(usernameSubject);
+ UUID uuidTeam = SpaceProjectManager.getLeader(SpaceProjectManager.getPlayerUUIDFromName(usernameTeam));
- if (usernameSubject.equals(usernameTeam)) {
+ if (uuidSubject.equals(uuidTeam)) {
// leave team
- if ("".equals(uuidSubject)) {
- sender.addChatMessage(
- new ChatComponentText(
- "User " + formattedUsernameSubject + " has no global energy network."));
- break;
- }
- if (uuidSubject.equals(uuidTeam)) {
- sender.addChatMessage(
- new ChatComponentText("User " + formattedUsernameSubject + " is already in his own team!"));
- break;
- }
- joinUserNetwork(uuidSubject, uuidSubject);
+ SpaceProjectManager.putInTeam(uuidSubject, uuidSubject);
sender.addChatMessage(
new ChatComponentText(
"User " + formattedUsernameSubject + " has rejoined their own global energy network."));
@@ -303,24 +278,12 @@ public final class GT_Command extends CommandBase {
// join other's team
- List<String> noNetPlayers = new ArrayList<>();
-
- if ("".equals(uuidSubject)) noNetPlayers.add(usernameSubject);
- if ("".equals(uuidTeam)) noNetPlayers.add(usernameTeam);
-
- if (!noNetPlayers.isEmpty()) {
- sender.addChatMessage(
- new ChatComponentText(
- "User " + String.join(" and ", noNetPlayers) + " has no global energy network."));
- break;
- }
-
if (uuidSubject.equals(uuidTeam)) {
sender.addChatMessage(new ChatComponentText("They are already in the same network!"));
break;
}
- joinUserNetwork(uuidSubject, uuidTeam);
+ SpaceProjectManager.putInTeam(uuidSubject, uuidTeam);
sender.addChatMessage(
new ChatComponentText(
@@ -340,29 +303,29 @@ public final class GT_Command extends CommandBase {
String username = strings[1];
String formatted_username = EnumChatFormatting.BLUE + username + EnumChatFormatting.RESET;
- String uuidTeam = getUUIDFromUsername(username);
- String uuidSubject = getRawUUIDFromUsername(username);
+ UUID userUUID = SpaceProjectManager.getPlayerUUIDFromName(username);
- if (uuidTeam.equals("")) {
+ if (!SpaceProjectManager.isInTeam(userUUID)) {
sender.addChatMessage(
new ChatComponentText("User " + formatted_username + " has no global energy network."));
break;
}
+ UUID teamUUID = SpaceProjectManager.getLeader(userUUID);
sender.addChatMessage(
new ChatComponentText(
"User " + formatted_username
+ " has "
+ EnumChatFormatting.RED
- + GT_Utility.formatNumbers(getUserEU(uuidTeam))
+ + GT_Utility.formatNumbers(getUserEU(userUUID))
+ EnumChatFormatting.RESET
+ "EU in their network."));
- if (!uuidTeam.equals(uuidSubject)) sender.addChatMessage(
+ if (!userUUID.equals(teamUUID)) sender.addChatMessage(
new ChatComponentText(
"User " + formatted_username
+ " is currently in network of "
+ EnumChatFormatting.BLUE
- + getUsernameFromUUID(uuidTeam)
+ + SpaceProjectManager.getPlayerNameFromUUID(teamUUID)
+ EnumChatFormatting.RESET
+ "."));
diff --git a/src/main/java/gregtech/common/misc/GlobalEnergyWorldSavedData.java b/src/main/java/gregtech/common/misc/GlobalEnergyWorldSavedData.java
index dc87c3f520..417eef30ad 100644
--- a/src/main/java/gregtech/common/misc/GlobalEnergyWorldSavedData.java
+++ b/src/main/java/gregtech/common/misc/GlobalEnergyWorldSavedData.java
@@ -1,8 +1,6 @@
package gregtech.common.misc;
import static gregtech.common.misc.GlobalVariableStorage.GlobalEnergy;
-import static gregtech.common.misc.GlobalVariableStorage.GlobalEnergyName;
-import static gregtech.common.misc.GlobalVariableStorage.GlobalEnergyTeam;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
@@ -12,6 +10,8 @@ import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.math.BigInteger;
import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
@@ -20,6 +20,7 @@ import net.minecraft.world.storage.MapStorage;
import net.minecraftforge.event.world.WorldEvent;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
+import gregtech.common.misc.spaceprojects.SpaceProjectManager;
public class GlobalEnergyWorldSavedData extends WorldSavedData {
@@ -28,14 +29,11 @@ public class GlobalEnergyWorldSavedData extends WorldSavedData {
private static final String DATA_NAME = "GregTech_WirelessEUWorldSavedData";
private static final String GlobalEnergyNBTTag = "GregTech_GlobalEnergy_MapNBTTag";
- private static final String GlobalEnergyNameNBTTag = "GregTech_GlobalEnergyName_MapNBTTag";
private static final String GlobalEnergyTeamNBTTag = "GregTech_GlobalEnergyTeam_MapNBTTag";
private static void loadInstance(World world) {
GlobalEnergy.clear();
- GlobalEnergyTeam.clear();
- GlobalEnergyName.clear();
MapStorage storage = world.mapStorage;
INSTANCE = (GlobalEnergyWorldSavedData) storage.loadData(GlobalEnergyWorldSavedData.class, DATA_NAME);
@@ -72,29 +70,29 @@ public class GlobalEnergyWorldSavedData extends WorldSavedData {
InputStream byteArrayInputStream = new ByteArrayInputStream(ba);
ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
Object data = objectInputStream.readObject();
- GlobalEnergy = (HashMap<String, BigInteger>) data;
+ HashMap<Object, BigInteger> hashData = (HashMap<Object, BigInteger>) data;
+ for (Map.Entry<Object, BigInteger> entry : hashData.entrySet()) {
+ GlobalEnergy.put(
+ UUID.fromString(
+ entry.getKey()
+ .toString()),
+ entry.getValue());
+ }
} catch (IOException | ClassNotFoundException exception) {
System.out.println(GlobalEnergyNBTTag + " FAILED");
exception.printStackTrace();
}
-
- try {
- byte[] ba = nbtTagCompound.getByteArray(GlobalEnergyNameNBTTag);
- InputStream byteArrayInputStream = new ByteArrayInputStream(ba);
- ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
- Object data = objectInputStream.readObject();
- GlobalEnergyName = (HashMap<String, String>) data;
- } catch (IOException | ClassNotFoundException exception) {
- System.out.println(GlobalEnergyNameNBTTag + " FAILED");
- exception.printStackTrace();
- }
-
try {
+ if (!nbtTagCompound.hasKey(GlobalEnergyTeamNBTTag)) return;
byte[] ba = nbtTagCompound.getByteArray(GlobalEnergyTeamNBTTag);
InputStream byteArrayInputStream = new ByteArrayInputStream(ba);
ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
Object data = objectInputStream.readObject();
- GlobalEnergyTeam = (HashMap<String, String>) data;
+ HashMap<String, String> oldTeams = (HashMap<String, String>) data;
+ for (String member : oldTeams.keySet()) {
+ String leader = oldTeams.get(member);
+ SpaceProjectManager.putInTeam(UUID.fromString(member), UUID.fromString(leader));
+ }
} catch (IOException | ClassNotFoundException exception) {
System.out.println(GlobalEnergyTeamNBTTag + " FAILED");
exception.printStackTrace();
@@ -115,29 +113,5 @@ public class GlobalEnergyWorldSavedData extends WorldSavedData {
System.out.println(GlobalEnergyNBTTag + " SAVE FAILED");
exception.printStackTrace();
}
-
- try {
- ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
- ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
- objectOutputStream.writeObject(GlobalEnergyName);
- objectOutputStream.flush();
- byte[] data = byteArrayOutputStream.toByteArray();
- nbtTagCompound.setByteArray(GlobalEnergyNameNBTTag, data);
- } catch (Exception exception) {
- System.out.println(GlobalEnergyNameNBTTag + " SAVE FAILED");
- exception.printStackTrace();
- }
-
- try {
- ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
- ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
- objectOutputStream.writeObject(GlobalEnergyTeam);
- objectOutputStream.flush();
- byte[] data = byteArrayOutputStream.toByteArray();
- nbtTagCompound.setByteArray(GlobalEnergyTeamNBTTag, data);
- } catch (IOException exception) {
- System.out.println(GlobalEnergyTeamNBTTag + " SAVE FAILED");
- exception.printStackTrace();
- }
}
}
diff --git a/src/main/java/gregtech/common/misc/GlobalVariableStorage.java b/src/main/java/gregtech/common/misc/GlobalVariableStorage.java
index 5ec0ed9c82..27aad0a11f 100644
--- a/src/main/java/gregtech/common/misc/GlobalVariableStorage.java
+++ b/src/main/java/gregtech/common/misc/GlobalVariableStorage.java
@@ -2,19 +2,13 @@ package gregtech.common.misc;
import java.math.BigInteger;
import java.util.HashMap;
+import java.util.UUID;
public abstract class GlobalVariableStorage {
// --------------------- NEVER access these maps! Use the methods provided! ---------------------
// Global EU map.
- public static HashMap<String, BigInteger> GlobalEnergy = new HashMap<>(100, 0.9f);
-
- // Maps user IDs to usernames and vice versa. Seems redundant but this makes accessing this
- // easier in certain locations (like gt commands).
- public static HashMap<String, String> GlobalEnergyName = new HashMap<>(100, 0.9f);
-
- // Maps UUIDs to other UUIDs. This allows users to join a team.
- public static HashMap<String, String> GlobalEnergyTeam = new HashMap<>(100, 0.9f);
+ public static HashMap<UUID, BigInteger> GlobalEnergy = new HashMap<>(100, 0.9f);
// ----------------------------------------------------------------------------------------------
diff --git a/src/main/java/gregtech/common/misc/WirelessNetworkManager.java b/src/main/java/gregtech/common/misc/WirelessNetworkManager.java
index dc11becdbb..17107b4e50 100644
--- a/src/main/java/gregtech/common/misc/WirelessNetworkManager.java
+++ b/src/main/java/gregtech/common/misc/WirelessNetworkManager.java
@@ -1,59 +1,22 @@
package gregtech.common.misc;
import static gregtech.common.misc.GlobalVariableStorage.GlobalEnergy;
-import static gregtech.common.misc.GlobalVariableStorage.GlobalEnergyName;
-import static gregtech.common.misc.GlobalVariableStorage.GlobalEnergyTeam;
import java.math.BigInteger;
import java.util.UUID;
-import net.minecraft.entity.player.EntityPlayer;
-
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.common.misc.spaceprojects.SpaceProjectManager;
public class WirelessNetworkManager {
private WirelessNetworkManager() {}
- // User 0 will join user 1 by calling this function. They will share the same energy network.
- public static void joinUserNetwork(String user_uuid_0, String user_uuid_1) {
- GlobalEnergyTeam.put(user_uuid_0, user_uuid_1);
- }
-
- // Adds a user to the energy map if they do not already exist. Otherwise, do nothing. Will also check if the user
- // has changed their username and adjust the maps accordingly. This should be called infrequently. Ideally on first
- // tick of a machine being placed only.
-
- public static void strongCheckOrAddUser(EntityPlayer user) {
- strongCheckOrAddUser(
- user.getUniqueID()
- .toString(),
- user.getDisplayName());
- }
-
- public static void strongCheckOrAddUser(UUID user_uuid, String user_name) {
- strongCheckOrAddUser(user_uuid.toString(), user_name);
- }
-
- public static void strongCheckOrAddUser(String user_uuid, String user_name) {
-
- // Check if the user has a team. Add them if not.
- GlobalEnergyTeam.putIfAbsent(user_uuid, user_uuid);
-
- // Check if the user is in the global energy map.
- GlobalEnergy.putIfAbsent(user_uuid, BigInteger.ZERO);
-
- // If the username linked to the users fixed uuid is not equal to their current name then remove it.
- // This indicates that their username has changed.
- if (!(GlobalEnergyName.getOrDefault(user_uuid, "")
- .equals(user_name))) {
- String old_name = GlobalEnergyName.get(user_uuid);
- GlobalEnergyName.remove(old_name);
+ public static void strongCheckOrAddUser(UUID user_uuid) {
+ SpaceProjectManager.checkOrCreateTeam(user_uuid);
+ if (!GlobalEnergy.containsKey(user_uuid)) {
+ GlobalEnergy.put(SpaceProjectManager.getLeader(user_uuid), BigInteger.ZERO);
}
-
- // Add UUID -> Name, Name -> UUID.
- GlobalEnergyName.put(user_name, user_uuid);
- GlobalEnergyName.put(user_uuid, user_name);
}
// ------------------------------------------------------------------------------------
@@ -61,8 +24,7 @@ public class WirelessNetworkManager {
// If the value goes below 0 it will return false and not perform the operation.
// BigIntegers have much slower operations than longs/ints. You should call these methods
// as infrequently as possible and bulk store values to add to the global map.
- public static boolean addEUToGlobalEnergyMap(String userUUID, BigInteger EU) {
-
+ public static boolean addEUToGlobalEnergyMap(UUID user_uuid, BigInteger EU) {
// Mark the data as dirty and in need of saving.
try {
GlobalEnergyWorldSavedData.INSTANCE.markDirty();
@@ -72,7 +34,7 @@ public class WirelessNetworkManager {
}
// Get the team UUID. Users are by default in a team with a UUID equal to their player UUID.
- String teamUUID = GlobalEnergyTeam.getOrDefault(userUUID, userUUID);
+ UUID teamUUID = SpaceProjectManager.getLeader(user_uuid);
// Get the teams total energy stored. If they are not in the map, return 0 EU.
BigInteger totalEU = GlobalEnergy.getOrDefault(teamUUID, BigInteger.ZERO);
@@ -88,34 +50,22 @@ public class WirelessNetworkManager {
return false;
}
- public static boolean addEUToGlobalEnergyMap(UUID user_uuid, BigInteger EU) {
- return addEUToGlobalEnergyMap(user_uuid.toString(), EU);
- }
-
public static boolean addEUToGlobalEnergyMap(UUID user_uuid, long EU) {
- return addEUToGlobalEnergyMap(user_uuid.toString(), BigInteger.valueOf(EU));
- }
-
- public static boolean addEUToGlobalEnergyMap(UUID user_uuid, int EU) {
- return addEUToGlobalEnergyMap(user_uuid.toString(), BigInteger.valueOf(EU));
- }
-
- public static boolean addEUToGlobalEnergyMap(String user_uuid, long EU) {
return addEUToGlobalEnergyMap(user_uuid, BigInteger.valueOf(EU));
}
- public static boolean addEUToGlobalEnergyMap(String user_uuid, int EU) {
+ public static boolean addEUToGlobalEnergyMap(UUID user_uuid, int EU) {
return addEUToGlobalEnergyMap(user_uuid, BigInteger.valueOf(EU));
}
// ------------------------------------------------------------------------------------
- public static BigInteger getUserEU(String user_uuid) {
- return GlobalEnergy.getOrDefault(GlobalEnergyTeam.getOrDefault(user_uuid, user_uuid), BigInteger.ZERO);
+ public static BigInteger getUserEU(UUID user_uuid) {
+ return GlobalEnergy.getOrDefault(SpaceProjectManager.getLeader(user_uuid), BigInteger.ZERO);
}
// This overwrites the EU in the network. Only use this if you are absolutely sure you know what you are doing.
- public static void setUserEU(String user_uuid, BigInteger EU) {
+ public static void setUserEU(UUID user_uuid, BigInteger EU) {
// Mark the data as dirty and in need of saving.
try {
GlobalEnergyWorldSavedData.INSTANCE.markDirty();
@@ -124,41 +74,20 @@ public class WirelessNetworkManager {
exception.printStackTrace();
}
- GlobalEnergy.put(GlobalEnergyTeam.get(user_uuid), EU);
- }
-
- public static String getUsernameFromUUID(String uuid) {
- return GlobalEnergyName.getOrDefault(GlobalEnergyTeam.getOrDefault(uuid, ""), "");
- }
-
- public static String getUUIDFromUsername(String username) {
- return GlobalEnergyTeam.getOrDefault(GlobalEnergyName.getOrDefault(username, ""), "");
- }
-
- /**
- *
- * @param username
- * @return
- */
- public static String getRawUUIDFromUsername(String username) {
- return GlobalEnergyName.getOrDefault(username, "");
+ GlobalEnergy.put(SpaceProjectManager.getLeader(user_uuid), EU);
}
public static void clearGlobalEnergyInformationMaps() {
// Do not use this unless you are 100% certain you know what you are doing.
GlobalEnergy.clear();
- GlobalEnergyName.clear();
- GlobalEnergyTeam.clear();
}
- public static String processInitialSettings(final IGregTechTileEntity machine) {
+ public static UUID processInitialSettings(final IGregTechTileEntity machine) {
// UUID and username of the owner.
- final String UUID = machine.getOwnerUuid()
- .toString();
- final String name = machine.getOwnerName();
+ final UUID UUID = machine.getOwnerUuid();
- strongCheckOrAddUser(UUID, name);
+ SpaceProjectManager.checkOrCreateTeam(UUID);
return UUID;
}
}
diff --git a/src/main/java/gregtech/common/misc/spaceprojects/SpaceProjectManager.java b/src/main/java/gregtech/common/misc/spaceprojects/SpaceProjectManager.java
index 1859249ccd..323b22e20a 100644
--- a/src/main/java/gregtech/common/misc/spaceprojects/SpaceProjectManager.java
+++ b/src/main/java/gregtech/common/misc/spaceprojects/SpaceProjectManager.java
@@ -76,7 +76,9 @@ public class SpaceProjectManager {
project.setProjectLocation(location);
map.put(Pair.of(location, projectName), project);
- SpaceProjectWorldSavedData.INSTANCE.markDirty();
+ if (SpaceProjectWorldSavedData.INSTANCE != null) {
+ SpaceProjectWorldSavedData.INSTANCE.markDirty();
+ }
return true;
}
@@ -113,7 +115,9 @@ public class SpaceProjectManager {
spaceTeams.put(teamMember, teamLeader);
}
- SpaceProjectWorldSavedData.INSTANCE.markDirty();
+ if (SpaceProjectWorldSavedData.INSTANCE != null) {
+ SpaceProjectWorldSavedData.INSTANCE.markDirty();
+ }
}
/**
@@ -138,7 +142,13 @@ public class SpaceProjectManager {
}
spaceTeams.put(teamMember, teamMember);
- SpaceProjectWorldSavedData.INSTANCE.markDirty();
+ if (SpaceProjectWorldSavedData.INSTANCE != null) {
+ SpaceProjectWorldSavedData.INSTANCE.markDirty();
+ }
+ }
+
+ public static boolean isInTeam(UUID member) {
+ return spaceTeams.containsKey(member);
}
/**
diff --git a/src/main/java/gregtech/common/misc/spaceprojects/SpaceProjectWorldSavedData.java b/src/main/java/gregtech/common/misc/spaceprojects/SpaceProjectWorldSavedData.java
index 4b0be2051a..12f0005aea 100644
--- a/src/main/java/gregtech/common/misc/spaceprojects/SpaceProjectWorldSavedData.java
+++ b/src/main/java/gregtech/common/misc/spaceprojects/SpaceProjectWorldSavedData.java
@@ -107,7 +107,10 @@ public class SpaceProjectWorldSavedData extends WorldSavedData {
}
try (JsonReader reader = new JsonReader(new FileReader(spaceTeamsFile))) {
- spaceTeams = GSON_TEAMS.fromJson(reader, spaceTeams.getClass());
+ HashMap<UUID, UUID> jsonMap = GSON_TEAMS.fromJson(reader, spaceTeams.getClass());
+ for (UUID member : jsonMap.keySet()) {
+ spaceTeams.put(member, jsonMap.get(member));
+ }
} catch (Exception e) {
System.out.print("FAILED TO LOAD: " + SPACE_TEAMS_JSON);
e.printStackTrace();
diff --git a/src/main/java/gregtech/common/misc/spaceprojects/commands/SP_Command.java b/src/main/java/gregtech/common/misc/spaceprojects/commands/SP_Command.java
index c1d965fb22..3c4ad00932 100644
--- a/src/main/java/gregtech/common/misc/spaceprojects/commands/SP_Command.java
+++ b/src/main/java/gregtech/common/misc/spaceprojects/commands/SP_Command.java
@@ -1,12 +1,18 @@
package gregtech.common.misc.spaceprojects.commands;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
import java.util.Set;
import java.util.WeakHashMap;
+import java.util.stream.Collectors;
import net.minecraft.command.CommandBase;
import net.minecraft.command.ICommandSender;
import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.server.MinecraftServer;
import net.minecraft.util.EnumChatFormatting;
import org.apache.commons.lang3.tuple.Pair;
@@ -113,4 +119,48 @@ public class SP_Command extends CommandBase {
}
}
+ @Override
+ public List<String> addTabCompletionOptions(ICommandSender sender, String[] arguments) {
+ List<String> autoComplete = new ArrayList<>();
+ String filter = arguments.length == 0 ? "" : arguments[0].trim();
+ switch (arguments.length) {
+ case 1 -> autoComplete.addAll(Arrays.asList(getSubCommands()));
+ case 2 -> {
+ filter = arguments[1].trim();
+ if (arguments[0].equals(INVITE)) {
+ autoComplete.addAll(Arrays.asList(getPlayers()));
+ break;
+ }
+
+ if (arguments[0].equals(CONFIRM)) {
+ Optional<Pair<EntityPlayerMP, EntityPlayerMP>> pairOpt = invite.stream()
+ .filter(
+ (e) -> e.getKey()
+ .getUniqueID() == getCommandSenderAsPlayer(sender).getUniqueID())
+ .findFirst();
+ if (pairOpt.isPresent()) {
+ autoComplete.add(
+ SpaceProjectManager.getPlayerNameFromUUID(
+ pairOpt.get()
+ .getRight()
+ .getUniqueID()));
+ }
+ }
+ }
+ }
+ String finalFilter = filter;
+ return autoComplete.stream()
+ .filter(s -> finalFilter.isEmpty() || s.startsWith(finalFilter))
+ .collect(Collectors.toList());
+ }
+
+ private String[] getPlayers() {
+ return MinecraftServer.getServer()
+ .getAllUsernames();
+ }
+
+ private String[] getSubCommands() {
+ return new String[] { INVITE, ACCEPT, LEAVE, CONFIRM };
+ }
+
}