package dex3r.API.shared; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import java.util.Date; import net.minecraft.command.ICommandManager; import net.minecraft.command.ServerCommandManager; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.server.MinecraftServer; import net.minecraft.src.ModLoader; import net.minecraftforge.common.Configuration; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.Property; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.Init; import cpw.mods.fml.common.Mod.Instance; import cpw.mods.fml.common.Mod.PreInit; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.network.NetworkMod; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.TickRegistry; import cpw.mods.fml.relauncher.Side; @Mod(modid = "powertools_shared", name = "Power Tools", version = "0.1.4") @NetworkMod(clientSideRequired = false, serverSideRequired = false) public class PowerTools { public static MinecraftServer server; public static PlayerInfo[] plInfo = new PlayerInfo[8192]; public static int numberOfPlayers = 0; public static Date date = new Date(); public static boolean powerLoginLoaded = false; public static boolean chunkProtectionLoaded = false; public static String testString = ""; public static int cfgHighestDimension; public static MapLimit cfgMapLimitNether = new MapLimit(); public static MapLimit[] cfgMapLimitDimemsion = new MapLimit[63]; public static boolean cfgAnyWorldMapLimit; @Instance("powertools_shared") public static PowerTools instance; @PreInit public void preInit(FMLPreInitializationEvent event) { if (event.getSide() == Side.SERVER) { Configuration config = new Configuration(event.getSuggestedConfigurationFile()); config.load(); Property proHighestDimension = config.get("Map limiter", "Highest_dimension", 2); proHighestDimension.comment = "Higest dimension specifies what the highest dimension is for which Map Limiter can be enabled. Default=2. Increase when using extra dimensions created by mods."; cfgHighestDimension = proHighestDimension.getInt(); if (cfgHighestDimension < 1) cfgHighestDimension = 1; // Must be at least 1 to include 'The // End'. Property proMapLimitNether = config.get("Map limiter", "Nether_enabled", false); proMapLimitNether.comment = "Setting this to true will stop players from moving beyond the specified coordinates on the map in the Nether."; cfgMapLimitNether.enabled = proMapLimitNether.getBoolean(false); cfgMapLimitNether.minX = config.get("Map limiter", "Nether_min_X", -500).getInt(); cfgMapLimitNether.minZ = config.get("Map limiter", "Nether_min_Z", -500).getInt(); cfgMapLimitNether.maxX = config.get("Map limiter", "Nether_max_X", 500).getInt(); cfgMapLimitNether.maxZ = config.get("Map limiter", "Nether_max_Z", 500).getInt(); Property proMapLimitOverworld = config.get("Map limiter", "Overworld_enabled", false); proMapLimitOverworld.comment = "Setting this to true will stop players from moving beyond the specified coordinates on the map in the Overworld."; cfgMapLimitDimemsion[0] = new MapLimit(); cfgMapLimitDimemsion[0].enabled = proMapLimitOverworld.getBoolean(false); cfgMapLimitDimemsion[0].minX = config.get("Map limiter", "Overworld_min_X", -500).getInt(); cfgMapLimitDimemsion[0].minZ = config.get("Map limiter", "Overworld_min_Z", -500).getInt(); cfgMapLimitDimemsion[0].maxX = config.get("Map limiter", "Overworld_max_X", 500).getInt(); cfgMapLimitDimemsion[0].maxZ = config.get("Map limiter", "Overworld_max_Z", 500).getInt(); Property proMapLimitTheEnd = config.get("Map limiter", "TheEnd_enabled", false); proMapLimitTheEnd.comment = "Setting this to true will stop players from moving beyond the specified coordinates on the map in the End."; cfgMapLimitDimemsion[1] = new MapLimit(); cfgMapLimitDimemsion[1].enabled = proMapLimitTheEnd.getBoolean(false); cfgMapLimitDimemsion[1].minX = config.get("Map limiter", "TheEnd_min_X", -500).getInt(); cfgMapLimitDimemsion[1].minZ = config.get("Map limiter", "TheEnd_min_Z", -500).getInt(); cfgMapLimitDimemsion[1].maxX = config.get("Map limiter", "TheEnd_max_X", 500).getInt(); cfgMapLimitDimemsion[1].maxZ = config.get("Map limiter", "TheEnd_max_Z", 500).getInt(); String worldNumber, zero; for (int i = 2; i <= cfgHighestDimension; i++) { if (i < 10) zero = "0"; else zero = ""; worldNumber = "World" + zero + i; Property proMapLimitWorld = config.get("Map limiter", worldNumber + "_enabled", false); proMapLimitWorld.comment = "Setting this to true will stop players from moving beyond the specified coordinates on the map in " + worldNumber; cfgMapLimitDimemsion[i] = new MapLimit(); cfgMapLimitDimemsion[i].enabled = proMapLimitWorld.getBoolean(false); cfgMapLimitDimemsion[i].minX = config.get("Map limiter", worldNumber + "_min_X", -500).getInt(); cfgMapLimitDimemsion[i].minZ = config.get("Map limiter", worldNumber + "_min_Z", -500).getInt(); cfgMapLimitDimemsion[i].maxX = config.get("Map limiter", worldNumber + "_max_X", 500).getInt(); cfgMapLimitDimemsion[i].maxZ = config.get("Map limiter", worldNumber + "_max_Z", 500).getInt(); } config.save(); cfgAnyWorldMapLimit = false; if (cfgMapLimitNether.enabled) cfgAnyWorldMapLimit = true; for (int i = 0; i <= cfgHighestDimension; i++) { if (cfgMapLimitDimemsion[i].enabled) cfgAnyWorldMapLimit = true; } } } @Init public void init(FMLInitializationEvent event) { if (event.getSide() == Side.SERVER) { MinecraftForge.EVENT_BUS.register(new PowerEventHookContainer()); if (cfgAnyWorldMapLimit) { TickRegistry.registerScheduledTickHandler(new MapLimitTickHandler(), Side.SERVER); } GameRegistry.registerPlayerTracker(new PowerPlayerTracker()); server = ModLoader.getMinecraftServerInstance(); ICommandManager commandManager = server.getCommandManager(); ServerCommandManager manager = ((ServerCommandManager) commandManager); manager.registerCommand(new CommandChat()); manager.registerCommand(new CommandHello()); } } // --- Player Info --- public static void addPlayer(String plName) { int nr = getNumberForPlayerName(plName); if (nr == -1) // Add new player { plInfo[numberOfPlayers] = new PlayerInfo(plName); numberOfPlayers += 1; } } public static int getNumberForPlayerName(String plName) { int nr = -1; int i; for (i = 0; i < numberOfPlayers; i++) { if (plInfo[i].name.equals(plName)) nr = i; } return nr; } public static long plGetTimer1(String plName) { return plInfo[getNumberForPlayerName(plName)].time1; } public static long plGetTimer2(String plName) { return plInfo[getNumberForPlayerName(plName)].time2; } public static void plSetTimer1(String plName, long time) { plInfo[getNumberForPlayerName(plName)].time1 = time; } public static void plSetTimer2(String plName, long time) { plInfo[getNumberForPlayerName(plName)].time1 = time; } // --- Chat --- public static void sendChatToPlayerName(String playerName, String chatMessage) { EntityPlayerMP player = server.getConfigurationManager().getPlayerForUsername(playerName); if (player != null) player.sendChatToPlayer(chatMessage); } public static byte getChatMode(String playerName) { byte chatMode = -1; int nr = getNumberForPlayerName(playerName); if (nr > -1) chatMode = plInfo[nr].chatMode; return chatMode; } public static void setChatMode(String playerName, byte chatMode) { int nr = getNumberForPlayerName(playerName); if (nr > -1) plInfo[nr].chatMode = chatMode; } public static void addNameToChatList(String playerName, String chatName) { int nr = getNumberForPlayerName(playerName); if (nr > -1) plInfo[nr].chatToPlayers += chatName + "|"; } public static String getChatList(String playerName) { String chatList = ""; int nr = getNumberForPlayerName(playerName); if (nr > -1) { chatList = plInfo[nr].chatToPlayers; } return chatList; } public static void clearChatList(String playerName) { int nr = getNumberForPlayerName(playerName); if (nr > -1) plInfo[nr].chatToPlayers = ""; } public static void removePlayerFromChatList(String playerName, String chatName) { int nr = getNumberForPlayerName(playerName); if (nr > -1) { String chatList = plInfo[nr].chatToPlayers; String newChatList = ""; String oneLetter; String tmpName = ""; for (int i = 0; i < chatList.length(); i++) { oneLetter = chatList.substring(i, i + 1); if (oneLetter.equals("|")) { if (!tmpName.equals(chatName)) newChatList += tmpName + "|"; tmpName = ""; } else { tmpName += oneLetter; } } plInfo[nr].chatToPlayers = newChatList; } } // --- public static int toChunkCoordinate(int coordinate) { int returnCoordinate; if (coordinate < 0) returnCoordinate = ((coordinate + 1) / 16) - 1; else returnCoordinate = coordinate / 16; return returnCoordinate; } // --- File IO --- public static String readFileToString(String fileName) { String folderName = "." + File.separator + "powertools"; String fileContents = ""; char inputChar; try { File file = new File(folderName + File.separator + fileName); if (file.exists() && file.canRead()) { FileInputStream fileIn = new FileInputStream(file); for (;;) { int buffer = fileIn.read(); if (buffer < 0) break; inputChar = (char) buffer; fileContents += inputChar; } fileIn.close(); } } catch (IOException ioe) { // } return fileContents; } public static void writeFileFromString(String fileName, String fileString) { try { String folderName = "." + File.separator + "powertools"; File checkFile = new File(folderName); if (!checkFile.exists()) checkFile.mkdir(); FileWriter file = new FileWriter(folderName + File.separator + fileName); file.write(fileString); file.close(); } catch (IOException ioe) { // } } // ------------------ Encrypt public static String encrypt(String stringIn, String codeIn) { String stringOut = ""; String newCode = ""; char oneLetter, codeLetter, newLetter; int tmp; int i; int j = 0; codeIn = codeIn.toLowerCase(); for (i = 0; i < codeIn.length(); i++) { oneLetter = codeIn.charAt(i); // codeLetter: 1..37 codeLetter = 1; if (oneLetter > 47 && oneLetter < 58) codeLetter = (char) (oneLetter - 47); if (oneLetter == 95) codeLetter = 11; if (oneLetter > 96 && oneLetter < 123) codeLetter = (char) (oneLetter - 85); newCode += codeLetter; } for (i = 0; i < stringIn.length(); i++) { oneLetter = stringIn.charAt(i); codeLetter = newCode.charAt(j); tmp = oneLetter + codeLetter; if (tmp > 122) tmp -= 75; newLetter = (char) tmp; stringOut += newLetter; j++; if (j == newCode.length()) j = 0; } return stringOut; } public static String decrypt(String stringIn, String codeIn) { String stringOut = ""; String newCode = ""; char oneLetter, codeLetter, newLetter; int tmp; int i; int j = 0; codeIn = codeIn.toLowerCase(); for (i = 0; i < codeIn.length(); i++) { oneLetter = codeIn.charAt(i); // codeLetter: 1..37 codeLetter = 1; if (oneLetter > 47 && oneLetter < 58) codeLetter = (char) (oneLetter - 47); if (oneLetter == 95) codeLetter = 11; if (oneLetter > 96 && oneLetter < 123) codeLetter = (char) (oneLetter - 85); newCode += codeLetter; } for (i = 0; i < stringIn.length(); i++) { oneLetter = stringIn.charAt(i); codeLetter = newCode.charAt(j); tmp = oneLetter - codeLetter; if (tmp < 48) tmp += 75; newLetter = (char) tmp; stringOut += newLetter; j++; if (j == newCode.length()) j = 0; } return stringOut; } public static boolean checkForValidCharacters(String inString) { boolean valid = true; int i; char oneLetter; for (i = 0; i < inString.length(); i++) { oneLetter = inString.charAt(i); if (oneLetter < 48) valid = false; if (oneLetter > 57 && oneLetter < 65) valid = false; if (oneLetter > 90 && oneLetter < 95) valid = false; if (oneLetter == 96) valid = false; if (oneLetter > 122) valid = false; } return valid; } // ------------------ public static boolean stringlistContains(String stringList, String checkString) { boolean check = false; String oneLetter; String tmpString = ""; for (int i = 0; i < stringList.length(); i++) { oneLetter = stringList.substring(i, i + 1); if (oneLetter.equals(",")) { if (tmpString.equals(checkString)) check = true; tmpString = ""; } else { tmpString += oneLetter; } } return check; } }