diff options
author | BlueWeabo <ilia.iliev2005@gmail.com> | 2024-02-17 00:12:40 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-16 23:12:40 +0100 |
commit | 985a6c94cae0cb895a09ef06c85ec7759132a06c (patch) | |
tree | 34beeec33a7dbe00c6791e214eec3ebb0f5ee003 | |
parent | d827dad0a671b79b1c42915b23d365398fd63733 (diff) | |
download | GT5-Unofficial-985a6c94cae0cb895a09ef06c85ec7759132a06c.tar.gz GT5-Unofficial-985a6c94cae0cb895a09ef06c85ec7759132a06c.tar.bz2 GT5-Unofficial-985a6c94cae0cb895a09ef06c85ec7759132a06c.zip |
Change over wireless teams to use SP teams (#2493)
* Change over wireless teams to use SP teams
* spotless
* null checks
* fix unit test being wrong
* update
* add tab autocomplete
* spotless
* make sure teams are transfered over correctly
* spotless
* do not delete space teams data when two world saves put something into it
* spotless
* go away from a stream
* make wireless networks load later
---------
Co-authored-by: Martin Robertz <dream-master@gmx.net>
14 files changed, 175 insertions, 322 deletions
diff --git a/src/main/java/gregtech/api/interfaces/IGlobalWirelessEnergy.java b/src/main/java/gregtech/api/interfaces/IGlobalWirelessEnergy.java index 47c03743a5..b931549a07 100644 --- a/src/main/java/gregtech/api/interfaces/IGlobalWirelessEnergy.java +++ b/src/main/java/gregtech/api/interfaces/IGlobalWirelessEnergy.java @@ -7,6 +7,7 @@ import net.minecraft.entity.player.EntityPlayer; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.common.misc.WirelessNetworkManager; +import gregtech.common.misc.spaceprojects.SpaceProjectManager; // If you are adding very late-game content feel free to tap into this interface. // The eventual goal is to bypass laser/dynamo stuff and have energy deposited directly from ultra-endgame @@ -17,37 +18,33 @@ import gregtech.common.misc.WirelessNetworkManager; @Deprecated public interface IGlobalWirelessEnergy { - // User 0 will join user 1 by calling this function. They will share the same energy network. - default void joinUserNetwork(String user_uuid_0, String user_uuid_1) { - WirelessNetworkManager.joinUserNetwork(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 + // 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. default void strongCheckOrAddUser(EntityPlayer user) { - WirelessNetworkManager.strongCheckOrAddUser( - user.getUniqueID() - .toString(), - user.getDisplayName()); + WirelessNetworkManager.strongCheckOrAddUser(user.getUniqueID()); } default void strongCheckOrAddUser(UUID user_uuid, String user_name) { - WirelessNetworkManager.strongCheckOrAddUser(user_uuid.toString(), user_name); + WirelessNetworkManager.strongCheckOrAddUser(user_uuid); } default void strongCheckOrAddUser(String user_uuid, String user_name) { - WirelessNetworkManager.strongCheckOrAddUser(user_uuid, user_name); + WirelessNetworkManager.strongCheckOrAddUser(UUID.fromString(user_uuid)); } // ------------------------------------------------------------------------------------ - // Add EU to the users global energy. You can enter a negative number to subtract it. + // Add EU to the users global energy. You can enter a negative number to + // subtract it. // 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 + // 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. default boolean addEUToGlobalEnergyMap(String userUUID, BigInteger EU) { - return WirelessNetworkManager.addEUToGlobalEnergyMap(userUUID, EU); + return WirelessNetworkManager.addEUToGlobalEnergyMap(UUID.fromString(userUUID), EU); } default boolean addEUToGlobalEnergyMap(UUID user_uuid, BigInteger EU) { @@ -73,36 +70,29 @@ public interface IGlobalWirelessEnergy { // ------------------------------------------------------------------------------------ default BigInteger getUserEU(String user_uuid) { - return WirelessNetworkManager.getUserEU(user_uuid); + return WirelessNetworkManager.getUserEU(UUID.fromString(user_uuid)); } - // This overwrites the EU in the network. Only use this if you are absolutely sure you know what you are doing. + // This overwrites the EU in the network. Only use this if you are absolutely + // sure you know what you are doing. default void setUserEU(String user_uuid, BigInteger EU) { - WirelessNetworkManager.setUserEU(user_uuid, EU); + WirelessNetworkManager.setUserEU(UUID.fromString(user_uuid), EU); } default String GetUsernameFromUUID(String uuid) { - return WirelessNetworkManager.getUsernameFromUUID(uuid); + return SpaceProjectManager.getPlayerNameFromUUID(UUID.fromString(uuid)); } default String getUUIDFromUsername(String username) { - return WirelessNetworkManager.getUUIDFromUsername(username); - } - - /** - * - * @param username - * @return - */ - default String getRawUUIDFromUsername(String username) { - return WirelessNetworkManager.getRawUUIDFromUsername(username); + return SpaceProjectManager.getPlayerUUIDFromName(username) + .toString(); } static void clearGlobalEnergyInformationMaps() { WirelessNetworkManager.clearGlobalEnergyInformationMaps(); } - default String processInitialSettings(final IGregTechTileEntity machine) { + default UUID processInitialSettings(final IGregTechTileEntity machine) { return WirelessNetworkManager.processInitialSettings(machine); } } diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Wireless_Dynamo.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Wireless_Dynamo.java index 4b73210afd..a04f5cd986 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Wireless_Dynamo.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Wireless_Dynamo.java @@ -5,6 +5,8 @@ import static gregtech.api.enums.GT_Values.V; import static gregtech.common.misc.WirelessNetworkManager.addEUToGlobalEnergyMap; import static gregtech.common.misc.WirelessNetworkManager.strongCheckOrAddUser; +import java.util.UUID; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; @@ -19,8 +21,7 @@ import gregtech.api.metatileentity.MetaTileEntity; public class GT_MetaTileEntity_Wireless_Dynamo extends GT_MetaTileEntity_Hatch_Dynamo implements IWirelessEnergyHatchInformation { - private String owner_uuid; - private String owner_name; + private UUID owner_uuid; public GT_MetaTileEntity_Wireless_Dynamo(String aName, byte aTier, String[] aDescription, ITexture[][][] aTextures) { @@ -130,11 +131,9 @@ public class GT_MetaTileEntity_Wireless_Dynamo extends GT_MetaTileEntity_Hatch_D if (aTick == 1) { // UUID and username of the owner. - owner_uuid = aBaseMetaTileEntity.getOwnerUuid() - .toString(); - owner_name = aBaseMetaTileEntity.getOwnerName(); + owner_uuid = aBaseMetaTileEntity.getOwnerUuid(); - strongCheckOrAddUser(owner_uuid, owner_name); + strongCheckOrAddUser(owner_uuid); } // Every ticks_between_energy_addition ticks change the energy content of the machine. diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Wireless_Hatch.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Wireless_Hatch.java index 251a9dfcec..bf624eadd7 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Wireless_Hatch.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Wireless_Hatch.java @@ -3,10 +3,10 @@ package gregtech.api.metatileentity.implementations; import static gregtech.api.enums.GT_Values.AuthorColen; import static gregtech.api.enums.GT_Values.V; import static gregtech.common.misc.WirelessNetworkManager.addEUToGlobalEnergyMap; -import static gregtech.common.misc.WirelessNetworkManager.strongCheckOrAddUser; import static java.lang.Long.min; import java.math.BigInteger; +import java.util.UUID; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; @@ -18,6 +18,7 @@ import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.interfaces.tileentity.IWirelessEnergyHatchInformation; import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.common.misc.spaceprojects.SpaceProjectManager; public class GT_MetaTileEntity_Wireless_Hatch extends GT_MetaTileEntity_Hatch_Energy implements IWirelessEnergyHatchInformation { @@ -26,8 +27,7 @@ public class GT_MetaTileEntity_Wireless_Hatch extends GT_MetaTileEntity_Hatch_En .valueOf(2 * V[mTier] * ticks_between_energy_addition); private final long eu_transferred_per_operation_long = eu_transferred_per_operation.longValue(); - private String owner_uuid; - private String owner_name; + private UUID owner_uuid; public GT_MetaTileEntity_Wireless_Hatch(String aName, byte aTier, String[] aDescription, ITexture[][][] aTextures) { super(aName, aTier, 0, aDescription, aTextures); @@ -132,12 +132,10 @@ public class GT_MetaTileEntity_Wireless_Hatch extends GT_MetaTileEntity_Hatch_En if (!aBaseMetaTileEntity.isServerSide()) return; - // UUID and username of the owner. - owner_uuid = aBaseMetaTileEntity.getOwnerUuid() - .toString(); - owner_name = aBaseMetaTileEntity.getOwnerName(); + // UUID of the owner. + owner_uuid = aBaseMetaTileEntity.getOwnerUuid(); - strongCheckOrAddUser(owner_uuid, owner_name); + SpaceProjectManager.checkOrCreateTeam(owner_uuid);; tryFetchingEnergy(); } diff --git a/src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java b/src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java index 8ac908be12..7ffdc4fb60 100644 --- a/src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java +++ b/src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java @@ -1066,7 +1066,7 @@ public abstract class Controller<C extends Controller<C, P>, P extends MuTEProce @Override public void setWirelessSupport(boolean canUse) { if (canUse) { - strongCheckOrAddUser(getOwnerUuid(), getOwnerName()); + strongCheckOrAddUser(getOwnerUuid()); } power.setCanUseWireless(canUse, getOwnerUuid()); } diff --git a/src/main/java/gregtech/common/GT_Proxy.java b/src/main/java/gregtech/common/GT_Proxy.java index 13f5939e38..2f9643c35d 100644 --- a/src/main/java/gregtech/common/GT_Proxy.java +++ b/src/main/java/gregtech/common/GT_Proxy.java @@ -1127,8 +1127,8 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler { if (!GT_Mod.gregtechproxy.enableUndergroundDirtGen) PREVENTED_ORES.add(OreGenEvent.GenerateMinable.EventType.DIRT); - MinecraftForge.EVENT_BUS.register(new GlobalEnergyWorldSavedData("")); MinecraftForge.EVENT_BUS.register(new SpaceProjectWorldSavedData()); + MinecraftForge.EVENT_BUS.register(new GlobalEnergyWorldSavedData("")); MinecraftForge.EVENT_BUS.register(new GT_Worldgenerator.OregenPatternSavedData("")); MinecraftForge.EVENT_BUS.register(new GlobalMetricsCoverDatabase()); FMLCommonHandler.instance() 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 }; + } + } diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_TranscendentPlasmaMixer.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_TranscendentPlasmaMixer.java index 58b42eca7f..7d038666d6 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_TranscendentPlasmaMixer.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_TranscendentPlasmaMixer.java @@ -22,6 +22,7 @@ import static net.minecraft.util.EnumChatFormatting.GOLD; import static net.minecraft.util.EnumChatFormatting.GRAY; import java.math.BigInteger; +import java.util.UUID; import javax.annotation.Nonnull; @@ -78,7 +79,7 @@ public class GT_MetaTileEntity_TranscendentPlasmaMixer .addElement('C', ofBlock(GregTech_API.sBlockCasings1, DIM_BRIDGE_CASING)) .build(); - private String ownerUUID; + private UUID ownerUUID; public GT_MetaTileEntity_TranscendentPlasmaMixer(int aID, String aName, String aNameRegional) { super(aID, aName, aNameRegional); diff --git a/src/test/java/gregtech/globalenergymap/IGlobalWirelessEnergy_UnitTest.java b/src/test/java/gregtech/globalenergymap/IGlobalWirelessEnergy_UnitTest.java index 8e2b9f677e..012055133b 100644 --- a/src/test/java/gregtech/globalenergymap/IGlobalWirelessEnergy_UnitTest.java +++ b/src/test/java/gregtech/globalenergymap/IGlobalWirelessEnergy_UnitTest.java @@ -1,22 +1,21 @@ package gregtech.globalenergymap; import static gregtech.common.misc.GlobalVariableStorage.GlobalEnergy; -import static gregtech.common.misc.GlobalVariableStorage.GlobalEnergyName; -import static gregtech.common.misc.GlobalVariableStorage.GlobalEnergyTeam; import static gregtech.common.misc.WirelessNetworkManager.addEUToGlobalEnergyMap; import static gregtech.common.misc.WirelessNetworkManager.clearGlobalEnergyInformationMaps; 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.strongCheckOrAddUser; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; import java.math.BigInteger; +import java.util.UUID; import org.junit.jupiter.api.Test; +import gregtech.common.misc.spaceprojects.SpaceProjectManager; + class IGlobalWirelessEnergy_UnitTest { static final String message = "Comparison failed"; @@ -24,7 +23,7 @@ class IGlobalWirelessEnergy_UnitTest { @Test void IGlobalWirelessEnergy_AddingEU() { - String test_id = "TEST_ID"; + UUID test_id = UUID.randomUUID(); addEUToGlobalEnergyMap(test_id, new BigInteger("1")); assertEquals(GlobalEnergy.get(test_id), new BigInteger("1"), message); @@ -41,10 +40,9 @@ class IGlobalWirelessEnergy_UnitTest { @Test void IGlobalWirelessEnergy_NoNegativeEU() { - String user_uuid = "TEST_ID"; - String user_user = "TEST"; + UUID user_uuid = UUID.randomUUID(); - strongCheckOrAddUser(user_uuid, user_user); + strongCheckOrAddUser(user_uuid); assertFalse(addEUToGlobalEnergyMap(user_uuid, new BigInteger("-1"))); assertEquals(getUserEU(user_uuid), BigInteger.ZERO, message); @@ -66,41 +64,10 @@ class IGlobalWirelessEnergy_UnitTest { @Test void IGlobalWirelessEnergy_StrongCheckOrAddUser() { - String user_uuid = "12345"; - String user_name = "Colen"; + UUID user_uuid = UUID.randomUUID(); - strongCheckOrAddUser(user_uuid, user_name); + strongCheckOrAddUser(user_uuid); assertEquals(GlobalEnergy.get(user_uuid), BigInteger.ZERO, message); - assertEquals(GlobalEnergyTeam.get(user_uuid), user_uuid, message); - assertEquals(GlobalEnergyName.get(user_uuid), user_name, message); - - clearGlobalEnergyInformationMaps(); - } - - @Test - void IGlobalWirelessEnergy_NameChange() { - - String user_uuid = "12345"; - String user_name_0 = "Colen"; - - strongCheckOrAddUser(user_uuid, user_name_0); - assertEquals(getUserEU(user_uuid), BigInteger.ZERO, message); - assertEquals(GlobalEnergyTeam.get(user_uuid), user_uuid, message); - assertEquals(GlobalEnergyName.get(user_uuid), user_name_0, message); - assertEquals(GlobalEnergyName.get(user_name_0), user_uuid, message); - - String user_name_1 = "Steve"; - strongCheckOrAddUser(user_uuid, user_name_1); - assertEquals(getUserEU(user_uuid), BigInteger.ZERO, message); - assertEquals(GlobalEnergyTeam.get(user_uuid), user_uuid, message); - assertEquals(GlobalEnergyName.get(user_uuid), user_name_1, message); - assertEquals(GlobalEnergyName.get(user_name_1), user_uuid, message); - - strongCheckOrAddUser(user_uuid, user_name_0); - assertEquals(getUserEU(user_uuid), BigInteger.ZERO, message); - assertEquals(GlobalEnergyTeam.get(user_uuid), user_uuid, message); - assertEquals(GlobalEnergyName.get(user_uuid), user_name_0, message); - assertEquals(GlobalEnergyName.get(user_name_0), user_uuid, message); clearGlobalEnergyInformationMaps(); } @@ -108,28 +75,25 @@ class IGlobalWirelessEnergy_UnitTest { @Test void IGlobalWirelessEnergy_TeamChange() { - String user_uuid_0 = "12345"; - String user_name_0 = "Colen"; + UUID user_uuid_0 = UUID.randomUUID(); - String user_uuid_1 = "54321"; - String user_name_1 = "Steve"; + UUID user_uuid_1 = UUID.randomUUID(); - String user_uuid_2 = "12321"; - String user_name_2 = "Sarah"; + UUID user_uuid_2 = UUID.randomUUID(); - strongCheckOrAddUser(user_uuid_0, user_name_0); - strongCheckOrAddUser(user_uuid_1, user_name_1); - strongCheckOrAddUser(user_uuid_2, user_name_2); + strongCheckOrAddUser(user_uuid_0); + strongCheckOrAddUser(user_uuid_1); + strongCheckOrAddUser(user_uuid_2); assertEquals(getUserEU(user_uuid_0), BigInteger.ZERO, message); assertEquals(getUserEU(user_uuid_1), BigInteger.ZERO, message); assertEquals(getUserEU(user_uuid_2), BigInteger.ZERO, message); - joinUserNetwork(user_uuid_0, user_uuid_1); - joinUserNetwork(user_uuid_2, user_uuid_1); + SpaceProjectManager.putInTeam(user_uuid_0, user_uuid_1); + SpaceProjectManager.putInTeam(user_uuid_2, user_uuid_1); - assertEquals(GlobalEnergyTeam.get(user_uuid_0), user_uuid_1, message); - assertEquals(GlobalEnergyTeam.get(user_uuid_2), user_uuid_1, message); + assertEquals(SpaceProjectManager.getLeader(user_uuid_0), user_uuid_1, message); + assertEquals(SpaceProjectManager.getLeader(user_uuid_2), user_uuid_1, message); assertTrue(addEUToGlobalEnergyMap(user_uuid_0, BigInteger.ONE)); assertTrue(addEUToGlobalEnergyMap(user_uuid_2, BigInteger.ONE)); @@ -150,35 +114,13 @@ class IGlobalWirelessEnergy_UnitTest { assertEquals(getUserEU(user_uuid_1), BigInteger.ONE, message); assertEquals(getUserEU(user_uuid_2), BigInteger.ONE, message); - strongCheckOrAddUser(user_uuid_0, user_name_0); - strongCheckOrAddUser(user_uuid_1, user_name_1); - strongCheckOrAddUser(user_uuid_2, user_name_2); + SpaceProjectManager.putInTeam(user_uuid_0, user_uuid_0); + SpaceProjectManager.putInTeam(user_uuid_1, user_uuid_1); + SpaceProjectManager.putInTeam(user_uuid_2, user_uuid_2); - assertEquals(getUserEU(user_uuid_0), BigInteger.ONE, message); + assertEquals(getUserEU(user_uuid_0), BigInteger.ZERO, message); assertEquals(getUserEU(user_uuid_1), BigInteger.ONE, message); - assertEquals(getUserEU(user_uuid_2), BigInteger.ONE, message); - - clearGlobalEnergyInformationMaps(); - } - - @Test - void IGlobalWirelessEnergy_UUID() { - String user_uuid_0 = "12345"; - String user_name_0 = "Colen"; - - String user_uuid_1 = "54321"; - String user_name_1 = "Steve"; - - strongCheckOrAddUser(user_uuid_0, user_name_0); - strongCheckOrAddUser(user_uuid_1, user_name_1); - - assertEquals(getUsernameFromUUID(user_uuid_0), user_name_0, message); - assertEquals(getUsernameFromUUID(user_uuid_1), user_name_1, message); - - joinUserNetwork(user_uuid_0, user_uuid_1); - - assertEquals(getUsernameFromUUID(user_uuid_0), user_name_1, message); - assertEquals(getUsernameFromUUID(user_uuid_1), user_name_1, message); + assertEquals(getUserEU(user_uuid_2), BigInteger.ZERO, message); clearGlobalEnergyInformationMaps(); } |