diff --git a/src/main/java/gp_dbc/commands/CommandGP.java b/src/main/java/gp_dbc/commands/CommandGP.java index 7cffb34..06150a1 100644 --- a/src/main/java/gp_dbc/commands/CommandGP.java +++ b/src/main/java/gp_dbc/commands/CommandGP.java @@ -89,41 +89,61 @@ public class CommandGP implements ICommand { JGPlayerMP jgPlayer = new JGPlayerMP(player); jgPlayer.connectBaseNBT(); + int error = 0; + if (arg.equals(COMMANDS[0])) // Add - gp.addToGalaticPatrol(player, true); + error = gp.addToGalaticPatrol(player, true); else if (arg.equals(COMMANDS[1])) // Remove - gp.removeFromGalaticPatrol(player, true); + error = gp.removeFromGalaticPatrol(player, true); else if (arg.equals(COMMANDS[2])) { // Inmate - if (args.size() != 1) - sender.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "/gp jail sec []")); + if (args.size() != 1) { + sender.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "/gp inmate sec []")); + return; + } else { try { - gp.jail.putPlayerInJail(sender, player, Long.parseLong(args.get(0)), true); + error = gp.jail.putPlayerInJail(sender, player, Long.parseLong(args.get(0)), true) != null ? 0 : 1; } catch (Exception e) { - sender.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "/gp jail sec []")); + sender.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "/gp inmate sec []")); + return; } } } else if (arg.equals(COMMANDS[3])) { // freeInmate - gp.jail.removePlayerFromJail(sender, player, true); + error = 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 { + if (args.size() == 1) { try { - if (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")); + error = gp.jail.removeCell(Integer.parseInt(args.get(0))); } catch (Exception e) { - sender.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "/gp removeJail []")); + sender.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "/gp removeJail ")); } } + else if (args.size() == 4) { + try { + error = gp.jail.removeCell(Integer.parseInt(args.get(0)), Integer.parseInt(args.get(1)), Integer.parseInt(args.get(2)), Integer.parseInt(args.get(3))); + } catch (Exception e) { + sender.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "/gp removeJail ")); + } + } + else { + sender.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "/gp removeJail ")); + sender.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "/gp removeJail ")); + return; + } } - else + else { sender.addChatMessage(new ChatComponentText(EnumChatFormatting.RED.toString() + EnumChatFormatting.UNDERLINE.toString() + "Galactic Patrol:" + EnumChatFormatting.RESET.toString() + EnumChatFormatting.RED.toString() + " Command not found")); + return; + } + + if (error == 0) + sender.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Command success")); + else + sender.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Command failed")); + } @Override diff --git a/src/main/java/gp_dbc/config/ConfigManager.java b/src/main/java/gp_dbc/config/ConfigManager.java index d952e57..d41e657 100644 --- a/src/main/java/gp_dbc/config/ConfigManager.java +++ b/src/main/java/gp_dbc/config/ConfigManager.java @@ -39,10 +39,14 @@ public class ConfigManager { public static byte MAX_ALIGN_TO_JOIN = 100; public static int FORMAT_TIME_JAIL = 4; + public static int DEFAULT_PLACE_CELL = 2; - public static int TIME_HANDCUFFING = 10; // seconds + public static int TIME_HANDCUFFING = 5; // seconds + public static int TIME_UNHANDCUFFING = 10; // seconds public static int TIME_TO_GO_IN_JAIL = 20; // seconds + public static boolean OP_JAIL_MANAGER = true; + 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; @@ -83,11 +87,24 @@ public class ConfigManager { } TIME_HANDCUFFING = (byte)addVariableConfig(order, CATEGORY_GP, "TIME_HANDCUFFING", - "Time to handcuffing someone who is not K.O, in seconds. [default: 10]", "10").getInt(); + "Time to handcuffing someone who is not K.O, in seconds. [default: 5]", "5").getInt(); + + TIME_UNHANDCUFFING = (byte)addVariableConfig(order, CATEGORY_GP, "TIME_UNHANDCUFFING", + "Time to unhandcuffing someone, in seconds. [default: 10]", "10").getInt(); TIME_TO_GO_IN_JAIL = (byte)addVariableConfig(order, CATEGORY_GP, "TIME_TO_GO_IN_JAIL", "Time to go in jail when someone is handcuffed. [default: 20]", "20").getInt(); + FORMAT_TIME_JAIL = addVariableConfig(order, CATEGORY_GP, "FORMAT_TIME_JAIL", + "Format of the time print when a player going to jail; 1=dd/MM/yyyy - HH:mm:ss; 2=dd/MM - HH:mm:ss; 3=dd - HH:mm:ss; 4=HH:mm:ss. [default: 4]", "4").getInt(); + + DEFAULT_PLACE_CELL = addVariableConfig(order, CATEGORY_GP, "DEFAULT_PLACE_CELL", + "Number of place in each cell by default. [default: 2]", "2").getInt(); + + OP_JAIL_MANAGER = addVariableConfig(order, CATEGORY_GP, "OP_JAIL_MANAGER", + "Only op can use jail manager to create and delete cell. [default: true]", "true").getBoolean(); + + config.setCategoryPropertyOrder(CATEGORY_GP, order); diff --git a/src/main/java/gp_dbc/gui/GuiHandcuffed.java b/src/main/java/gp_dbc/gui/GuiHandcuffed.java index a31c4ec..4448db7 100644 --- a/src/main/java/gp_dbc/gui/GuiHandcuffed.java +++ b/src/main/java/gp_dbc/gui/GuiHandcuffed.java @@ -4,6 +4,7 @@ import JinRyuu.JRMCore.JRMCoreH; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import gp_dbc.Main; import gp_dbc.system.Handcuff; +import gp_dbc.system.Handcuffed; import gp_dbc.utils.TextUtils; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Gui; @@ -25,7 +26,6 @@ public class GuiHandcuffed extends Gui { int guiHeight = 35 / 2 + 1; public static long startTime = System.currentTimeMillis(); - public static long timeToWait = 20; // Client Side public static boolean handcuffed = false; @@ -45,7 +45,7 @@ public class GuiHandcuffed extends Gui { || event.type == RenderGameOverlayEvent.ElementType.HOTBAR) return; - long time_left = (startTime + (timeToWait * 1000) - System.currentTimeMillis()) / 1000; + long time_left = (startTime + (Handcuffed.timeToWait * 1000) - System.currentTimeMillis()) / 1000; if (event.isCancelable()) return; diff --git a/src/main/java/gp_dbc/gui/JailManager/GuiButtonJailManager.java b/src/main/java/gp_dbc/gui/JailManager/GuiButtonJailManager.java index d3f150e..a7c2b9c 100644 --- a/src/main/java/gp_dbc/gui/JailManager/GuiButtonJailManager.java +++ b/src/main/java/gp_dbc/gui/JailManager/GuiButtonJailManager.java @@ -8,6 +8,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; +import static gp_dbc.gui.JailManager.GuiJailManager.*; import static gp_dbc.utils.DrawGui.drawLimited; public class GuiButtonJailManager extends GuiButton { @@ -23,38 +24,105 @@ public class GuiButtonJailManager extends GuiButton { this.id = buttonId; this.xPosition = x; this.yPosition = y; + this.origin_yPosition = y; this.width = width; this.height = height; } + + private int last_scroll_y; + private int origin_yPosition; /** * Draws this button to the screen. **/ @Override - public void drawButton(Minecraft minecraft, int x, int y) { + public void drawButton(Minecraft mc, int x, int y) { if (!this.visible) return; - minecraft.getTextureManager().bindTexture(buttonTexturesNinjin); + mc.getTextureManager().bindTexture(buttonTexturesNinjin); - boolean flag = x >= this.xPosition && y >= this.yPosition && x < this.xPosition + this.width && y < this.yPosition + this.height; + boolean flag = x >= xPosition && y >= yPosition && x < xPosition + this.width && y < yPosition + this.height; if (id < 0) { // cells + + if (last_scroll_y != scroll_y) { + last_scroll_y = scroll_y; + yPosition = origin_yPosition + scroll_y; + } + + int displayWidth = mc.displayWidth; + int displayHeight = mc.displayHeight; + + int ratioWidth = (int) Math.round((double) displayWidth / wdth); + int ratioHeight = (int) Math.round((double) displayHeight / hght); + + int newWidth = guiWidth * ratioWidth; + int newHeight = guiHeight * ratioHeight; + + int displayGuiX = (int) Math.round((double) (displayWidth - newWidth) / 2); + int displayGuiY = (int) Math.round((double) (displayHeight - newHeight) / 2); + + Cell cell = cells.get(-(id) - 1); + + GL11.glPushMatrix(); + GL11.glScissor(displayGuiX, displayGuiY + 54 * ratioHeight, newWidth, (int) (newHeight - 91 * ratioHeight)); + GL11.glEnable(GL11.GL_SCISSOR_TEST); + + if (flag || cell_selected == cell.getId()) { + drawRect(xPosition, yPosition, xPosition + width, yPosition + height, 0xffd6d6d6); + + } else { + drawRect(xPosition, yPosition, xPosition + width, yPosition + height, 0xffffffff); + } + drawLimited(mc.fontRenderer, "Cell #" + cell.getId() + " " + cell.getInmates().size() + "/" + cell.getPlace(), xPosition, yPosition + 1, width - 1, height, 0xff000000); + + GL11.glDisable(GL11.GL_SCISSOR_TEST); + GL11.glPopMatrix(); if (flag) { - drawRect(xPosition, yPosition, xPosition + width, yPosition + height, 0xffd6d6d6); - //this.drawTexturedModalRect(this.xPosition, this.yPosition, 130, 7, this.width, this.height); - } - else { - drawRect(xPosition, yPosition, xPosition + width, yPosition + height, 0xffffffff); - //this.drawTexturedModalRect(this.xPosition, this.yPosition, 130, 7, this.width, this.height); - } - Cell cell = GuiJailManager.cells.get(-(id) - 1); + GL11.glPushMatrix(); + GL11.glTranslated(0, 0, 1); - drawLimited(minecraft.fontRenderer, "Cell #" + -(id) + " " + cell.getInmates().size() + "/" + cell.getPlace(), xPosition, yPosition, width - 1, height, 0xff000000); + String text = "x: " + cell.getPos().x + " y :" + cell.getPos().y + " z: " + cell.getPos().z + " dim: " + cell.getPos().dimension; + int width = (int) (mc.fontRenderer.getStringWidth(text) * 0.8 - 1); + int height = 10; + + drawRect(x, y, x + width, y + height, 0xffffffff); + drawLimited(mc.fontRenderer, text, x + 1, y + 1, width - 2, height - 1, 0xff000000); + GL11.glPopMatrix(); + + } + } + else if (id == 0) { // edit + GL11.glPushMatrix(); + + GL11.glColor4d(.6, .6, .6, 1); + + if (flag && cell_selected != -1) + GL11.glColor4d(1, 1, 1, 1); + else + if (cell_selected != -1) + GL11.glColor4d(.8, .8, .8, 1); + this.drawTexturedModalRect(this.xPosition, this.yPosition, 108, 0, this.width, this.height); + this.drawTexturedModalRect(this.xPosition + this.width / 2 - 18 / 2 + 1, this.yPosition + this.height / 2 - 17 /2, 144, 0, 18, 17); + + GL11.glPopMatrix(); + } + else if (id == 1) { // Delete + GL11.glPushMatrix(); + + GL11.glColor4d(.6, .6, .6, 1); + + if (flag && cell_selected != -1) + GL11.glColor4d(1, 1, 1, 1); + else + if (cell_selected != -1) + GL11.glColor4d(.8, .8, .8, 1); + this.drawTexturedModalRect(this.xPosition, this.yPosition, 108, 0, this.width, this.height); + this.drawTexturedModalRect(this.xPosition + this.width / 2 - 14 / 2 + 1, this.yPosition + this.height / 2 - 15 / 2, 130, 0, 14, 15); GL11.glPopMatrix(); } } - } diff --git a/src/main/java/gp_dbc/gui/JailManager/GuiJailManager.java b/src/main/java/gp_dbc/gui/JailManager/GuiJailManager.java index a18e32c..3ee2751 100644 --- a/src/main/java/gp_dbc/gui/JailManager/GuiJailManager.java +++ b/src/main/java/gp_dbc/gui/JailManager/GuiJailManager.java @@ -1,6 +1,8 @@ package gp_dbc.gui.JailManager; import gp_dbc.Main; +import gp_dbc.network.server.NetworkJailManager; +import gp_dbc.proxy.CommonProxy; import gp_dbc.system.Cell; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiButton; @@ -20,10 +22,13 @@ import static gp_dbc.utils.DrawGui.drawLimited; public class GuiJailManager extends GuiScreen { - final int guiWidth = 212 / 2 + 1; - final int guiHeight = 320 / 2 + 1; + final static int guiWidth = 212 / 2 + 1; + final static int guiHeight = 320 / 2 + 1; - private int scroll_y = 0; + public static int scroll_y = 0; + + public static int wdth; + public static int hght; public static List cells; int gap_y = 1; @@ -38,6 +43,7 @@ public class GuiJailManager extends GuiScreen { public GuiJailManager(List cells) { GuiJailManager.cells = cells; cell_selected = -1; + scroll_y = 0; } @Override @@ -61,42 +67,14 @@ public class GuiJailManager extends GuiScreen { drawTexturedModalRect(guiX, guiY - 10, 0, 0, guiWidth, guiHeight); GL11.glPopMatrix(); - int displayWidth = mc.displayWidth; - int displayHeight = mc.displayHeight; - - int ratioWidth = (int) Math.round((double)displayWidth / width); - int ratioHeight = (int) Math.round((double)displayHeight / height); - - int newWidth = guiWidth * ratioWidth; - int newHeight = guiHeight * ratioHeight; - - int displayGuiX = (int)Math.round((double)(displayWidth - newWidth) / 2); - int displayGuiY = (int)Math.round((double)(displayHeight - newHeight) / 2); - - GL11.glPushMatrix(); - GL11.glScissor(displayGuiX, displayGuiY + 54 * ratioHeight , newWidth, (int) (newHeight - 91 * ratioHeight)); - GL11.glEnable(GL11.GL_SCISSOR_TEST); - for (int i = 0; i < cells.size(); i++) { - //GL11.glColor4d(0.1, 0.6, 0.96, 0.95); - //GL11.glTranslated(0,0, 1); - int pos_x = guiX + 13; - int pos_y = guiY + 37 + (i * (cell_height + gap_y)) + scroll_y ; - drawRect(pos_x, pos_y, pos_x + cell_width, pos_y + cell_height, 0xffffffff); - - drawLimited(fontRendererObj, "Cell #" + cells.get(i).getId(), pos_x, pos_y, cell_width / 2, cell_height, 0xff000000); - } - //drawRect(0, 0, this.width, this.height, 0x60ffffff); - GL11.glDisable(GL11.GL_SCISSOR_TEST); - GL11.glPopMatrix(); - if (cells.size() > 6) { int scrollbar_x = guiX + 90; int all_cells = cells.size() * (cell_height + gap_y); int cells_visible = 6 * (cell_height + gap_y); int scrollable_cells = all_cells - cells_visible; - int max_height = 71; + int max_height = 66; int scrollbar_add = -((scroll_y * max_height) / scrollable_cells); - int scrollbar_y = (int) (guiY + 38 + scrollbar_add); // 98 - 163 + int scrollbar_y = (int) (guiY + 42 + scrollbar_add); // 98 - 163 drawRect(scrollbar_x, scrollbar_y, scrollbar_x + 6, scrollbar_y + 6, 0xff000000); } @@ -113,27 +91,23 @@ public class GuiJailManager extends GuiScreen { return; } + wdth = width; + hght = height; + int guiX = (width - guiWidth) / 2; int guiY = (height - guiHeight) / 2; buttonList.clear(); - for (int i = 0; i < cells.size(); i++) { - //GL11.glColor4d(0.1, 0.6, 0.96, 0.95); - //GL11.glTranslated(0,0, 1); - int pos_x = guiX + 13; - int pos_y = guiY + 37 + (i * (cell_height + gap_y)) + scroll_y ; - drawRect(pos_x, pos_y, pos_x + cell_width, pos_y + cell_height, 0xffffffff); - - drawLimited(fontRendererObj, "Cell #" + cells.get(i).getId(), pos_x, pos_y, cell_width / 2, cell_height, 0xff000000); - } - for (int i = 0 ; i < cells.size(); i++) { int pos_x = guiX + 13; - int pos_y = guiY + 37 + (i * (cell_height + gap_y)) + scroll_y ; + int pos_y = guiY + 37 + (i * (cell_height + gap_y)) ; buttonList.add(new GuiButtonJailManager(-(i + 1), pos_x, pos_y, cell_width, cell_height)); } + buttonList.add(edit_cell = new GuiButtonJailManager(0, guiX + 20, guiY + 115, 21, 21)); + buttonList.add(delete_cell = new GuiButtonJailManager(1, guiX + 65, guiY + 115, 21, 21 )); + //buttonList.add(buttonClose = new CyborgSoftwareGuiButton(1, guiX + 4, guiY - 3, 7, 7)); @@ -142,9 +116,22 @@ public class GuiJailManager extends GuiScreen { @Override protected void actionPerformed(GuiButton button) { - switch (button.id) { - case 0: - break; + if (button.id < 0) { + Cell cell = cells.get(-(button.id) - 1); + + if (cell_selected == cell.getId()) + cell_selected = -1; + else + cell_selected = cell.getId(); + } + else if (button.id == 0) { // Edit + + } + else if (button.id == 1) { // Delete + if (cell_selected == -1) + return; + + CommonProxy.network.sendToServer(new NetworkJailManager("delete~" + cell_selected)); } super.actionPerformed(button); } diff --git a/src/main/java/gp_dbc/items/ItemGPHandcuff.java b/src/main/java/gp_dbc/items/ItemGPHandcuff.java index c1f2a61..2c3620a 100644 --- a/src/main/java/gp_dbc/items/ItemGPHandcuff.java +++ b/src/main/java/gp_dbc/items/ItemGPHandcuff.java @@ -9,6 +9,7 @@ import gp_dbc.Main; import gp_dbc.config.ConfigManager; import gp_dbc.network.client.NetworkDeleteItemC; import gp_dbc.proxy.CommonProxy; +import gp_dbc.system.Cell; import gp_dbc.system.Handcuff; import gp_dbc.utils.EntityUtils; import net.minecraft.client.renderer.texture.IIconRegister; @@ -78,20 +79,8 @@ public class ItemGPHandcuff extends Item { if (entity instanceof EntityPlayer) { EntityPlayer inmate = (EntityPlayer) entity; - /*if (Handcuff.isHandcuffed(inmate)) { - player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + translateToLocal("error.already_handcuffed"))); + if (errorManager(inmate, player)) return stack; - }*/ - - if (gp.jail.isInJail(inmate)) { - player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + translateToLocal("error.already_in_jail"))); - return stack; - } - - if (!gp.isInGalacticPatrol(player)) { - player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + translateToLocal("error.not_galactic_patrol"))); - return stack; - } NBTTagCompound nbtPlayer = JRMCoreH.nbt(inmate, "pres"); boolean ko = nbtPlayer.getInteger("jrmcHar4va") > 0; @@ -106,13 +95,44 @@ public class ItemGPHandcuff extends Item { } } } + else + timeStart = System.currentTimeMillis(); player.setItemInUse(stack, getMaxItemUseDuration(stack)); - timeStart = System.currentTimeMillis(); - //System.out.println(itemStack.stackSize); return stack; } + public boolean errorManager(EntityPlayer inmate, EntityPlayer player) { + if (Handcuff.isHandcuffed(inmate)) { + player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + translateToLocal("error.already_handcuffed"))); + return true; + } + + if (gp.jail.getCells().isEmpty()) { + player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + translateToLocal("error.unavailable_cell"))); + return true; + } + + try { // Look if there is a place in one cell + if (gp.jail.getRandomCell() == null) { + player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + translateToLocal("error.unavailable_cell"))); + return true; + } + } catch (Exception e){System.out.println(e.getMessage());}; + + if (gp.jail.isInJail(inmate)) { + player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + translateToLocal("error.already_in_jail"))); + return true; + } + + if (!gp.isInGalacticPatrol(player)) { + player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + translateToLocal("error.not_galactic_patrol"))); + return true; + } + + return false; + } + @SuppressWarnings({ "unchecked" }) @Override public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) { diff --git a/src/main/java/gp_dbc/items/ItemJailManager.java b/src/main/java/gp_dbc/items/ItemJailManager.java index 27d07a0..293b65b 100644 --- a/src/main/java/gp_dbc/items/ItemJailManager.java +++ b/src/main/java/gp_dbc/items/ItemJailManager.java @@ -9,6 +9,7 @@ import gp_dbc.network.client.NetworkJailManagerC; import gp_dbc.proxy.CommonProxy; import gp_dbc.system.Cell; import gp_dbc.utils.Data; +import gp_dbc.utils.PlayerUtils; import gp_dbc.utils.RayTrace; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; @@ -38,6 +39,9 @@ public class ItemJailManager extends Item { @Override @SideOnly(Side.SERVER) public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) { + if (OP_JAIL_MANAGER && !PlayerUtils.isOP(player)) + return itemStack; + if (player.isSneaking()) { MovingObjectPosition trace = RayTrace.rayTraceServer(player, 5); if (trace != null && trace.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { diff --git a/src/main/java/gp_dbc/network/client/NetworkHandcuffedC.java b/src/main/java/gp_dbc/network/client/NetworkHandcuffedC.java index 66e16b9..dd0eff4 100644 --- a/src/main/java/gp_dbc/network/client/NetworkHandcuffedC.java +++ b/src/main/java/gp_dbc/network/client/NetworkHandcuffedC.java @@ -7,8 +7,13 @@ import cpw.mods.fml.common.network.simpleimpl.MessageContext; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gp_dbc.gui.GuiHandcuffed; +import gp_dbc.render.RenderHandcuffIcon; +import gp_dbc.system.Handcuff; +import gp_dbc.system.Handcuffed; import io.netty.buffer.ByteBuf; +import java.util.UUID; + public class NetworkHandcuffedC implements IMessage { private String toSend; @@ -44,7 +49,7 @@ public class NetworkHandcuffedC implements IMessage { if (key.equals("start")) { try { GuiHandcuffed.startTime = Long.parseLong(split[1]); - GuiHandcuffed.timeToWait = Long.parseLong(split[2]); + Handcuffed.timeToWait = Long.parseLong(split[2]); } catch (Exception e) { } @@ -52,6 +57,17 @@ public class NetworkHandcuffedC implements IMessage { } else if (key.equals("end")) GuiHandcuffed.handcuffed = false; + else if (key.equals("delete")) { + RenderHandcuffIcon.playerAroundHandcuffed.remove(UUID.fromString(split[1])); + } + else if (key.equals("update")) { + try { + RenderHandcuffIcon.playerAroundHandcuffed.put(UUID.fromString(split[1]), Long.parseLong(split[2])); + Handcuffed.timeToWait = Long.parseLong(split[3]); + } catch (Exception e) { + System.out.println(e); + } + } return null; } diff --git a/src/main/java/gp_dbc/network/client/NetworkJailManagerC.java b/src/main/java/gp_dbc/network/client/NetworkJailManagerC.java index 857aecf..2cb2789 100644 --- a/src/main/java/gp_dbc/network/client/NetworkJailManagerC.java +++ b/src/main/java/gp_dbc/network/client/NetworkJailManagerC.java @@ -48,7 +48,7 @@ public class NetworkJailManagerC implements IMessage { String[] split = message.toSend.split("~"); String key = split[0]; - if (key.equals("open")) { + if (key.equals("open") || key.equals("refresh")) { List cells = new ArrayList<>(); @@ -79,8 +79,7 @@ public class NetworkJailManagerC implements IMessage { UUID uuid = UUID.fromString(info_inmate[2]); - Inmate inmate = new Inmate(cell, uuid, sec_in_jail, time_start_jail); - cell.addInmate(inmate); + new Inmate(cell, uuid, sec_in_jail, time_start_jail); } } cells.add(cell); diff --git a/src/main/java/gp_dbc/network/server/NetworkJailManager.java b/src/main/java/gp_dbc/network/server/NetworkJailManager.java new file mode 100644 index 0000000..ac36f88 --- /dev/null +++ b/src/main/java/gp_dbc/network/server/NetworkJailManager.java @@ -0,0 +1,80 @@ +package gp_dbc.network.server; + +import cpw.mods.fml.common.network.ByteBufUtils; +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import gp_dbc.network.client.NetworkJailManagerC; +import gp_dbc.proxy.CommonProxy; +import gp_dbc.system.Cell; +import gp_dbc.utils.PlayerUtils; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; + +import static gp_dbc.Main.gp; +import static gp_dbc.config.ConfigManager.*; + +public class NetworkJailManager implements IMessage { + + private String toSend; + + public NetworkJailManager() {} + + public NetworkJailManager(String toSend) { + this.toSend = toSend; + } + + @Override + public void toBytes(ByteBuf buf) { + ByteBufUtils.writeUTF8String(buf,toSend); + } + + @Override + public void fromBytes(ByteBuf buf) { + toSend = ByteBufUtils.readUTF8String(buf); + } + + public static class MyMessageHandler implements + IMessageHandler { + + @Override + public IMessage onMessage(NetworkJailManager message, + MessageContext ctx) { + + EntityPlayerMP player = ctx.getServerHandler().playerEntity; + if (OP_JAIL_MANAGER && !PlayerUtils.isOP(player)) + return null; + + String[] split = message.toSend.split("~"); + String key = split[0]; + + if (key.equals("delete")) { + + try { + int id_cell = Integer.parseInt(split[1]); + gp.jail.removeCell(id_cell); + + String cells = ""; + for (Cell cell : gp.jail.getCells()) + cells += cell.toString() + "#"; + + CommonProxy.network.sendTo(new NetworkJailManagerC("refresh~" + cells), (EntityPlayerMP) player); + } catch (Exception e) { + player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Error delete cell")); + } + + } + else if (key.equals("edit")) { + + } + + return null; + } + } +} diff --git a/src/main/java/gp_dbc/network/server/NetworkKeyManage.java b/src/main/java/gp_dbc/network/server/NetworkKeyManage.java new file mode 100644 index 0000000..4839364 --- /dev/null +++ b/src/main/java/gp_dbc/network/server/NetworkKeyManage.java @@ -0,0 +1,51 @@ +package gp_dbc.network.server; + +import cpw.mods.fml.common.network.ByteBufUtils; +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import gp_dbc.utils.InputUtils; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayerMP; + +public class NetworkKeyManage implements IMessage { + + private String toSend; + + public NetworkKeyManage() {} + + public NetworkKeyManage(String toSend) { + this.toSend = toSend; + } + + @Override + public void toBytes(ByteBuf buf) { + ByteBufUtils.writeUTF8String(buf,toSend); + } + + @Override + public void fromBytes(ByteBuf buf) { + toSend = ByteBufUtils.readUTF8String(buf); + } + + public static class MyMessageHandler implements + IMessageHandler { + + @Override + public IMessage onMessage(NetworkKeyManage message, + MessageContext ctx) { + String[] split = message.toSend.split("~"); + String key = split[0]; + EntityPlayerMP player = ctx.getServerHandler().playerEntity; + + try { + if (key.equals("useItem")) + InputUtils.useItemPressedPlayers.put(player.getUniqueID(), Boolean.parseBoolean(split[1])); + } catch (Exception e) { + System.out.println(e.getMessage()); + } + + return null; + } + } +} \ No newline at end of file diff --git a/src/main/java/gp_dbc/proxy/ClientProxy.java b/src/main/java/gp_dbc/proxy/ClientProxy.java index 9b12216..a229cb3 100644 --- a/src/main/java/gp_dbc/proxy/ClientProxy.java +++ b/src/main/java/gp_dbc/proxy/ClientProxy.java @@ -4,12 +4,15 @@ import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import gp_dbc.gui.GuiHandcuffed; +import gp_dbc.render.RenderHandcuffIcon; import net.minecraftforge.common.MinecraftForge; public class ClientProxy extends CommonProxy { public void preInit(FMLPreInitializationEvent $e) { super.preInit($e); + + MinecraftForge.EVENT_BUS.register(new RenderHandcuffIcon()); } public void init(FMLInitializationEvent $e) { diff --git a/src/main/java/gp_dbc/proxy/CommonProxy.java b/src/main/java/gp_dbc/proxy/CommonProxy.java index 0f0e7b5..e8f132d 100644 --- a/src/main/java/gp_dbc/proxy/CommonProxy.java +++ b/src/main/java/gp_dbc/proxy/CommonProxy.java @@ -1,5 +1,6 @@ package gp_dbc.proxy; +import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; @@ -10,6 +11,11 @@ import gp_dbc.Main; import gp_dbc.network.client.NetworkDeleteItemC; import gp_dbc.network.client.NetworkHandcuffedC; import gp_dbc.network.client.NetworkJailManagerC; +import gp_dbc.network.server.NetworkJailManager; +import gp_dbc.network.server.NetworkKeyManage; +import gp_dbc.system.Handcuff; +import gp_dbc.utils.InputUtils; +import net.minecraftforge.common.MinecraftForge; public class CommonProxy { @@ -17,6 +23,8 @@ public class CommonProxy { public void preInit(FMLPreInitializationEvent $e) { + FMLCommonHandler.instance().bus().register(new InputUtils()); + network = NetworkRegistry.INSTANCE.newSimpleChannel(Main.MODID + "_1"); int i = 0; @@ -27,6 +35,8 @@ public class CommonProxy { network.registerMessage(NetworkJailManagerC.MyMessageHandlerC.class, NetworkJailManagerC.class, i++, Side.CLIENT); // Client to Server + network.registerMessage(NetworkJailManager.MyMessageHandler.class, NetworkJailManager.class, i++, Side.SERVER); + network.registerMessage(NetworkKeyManage.MyMessageHandler.class, NetworkKeyManage.class, i++, Side.SERVER); } diff --git a/src/main/java/gp_dbc/proxy/ServerProxy.java b/src/main/java/gp_dbc/proxy/ServerProxy.java index 35989e5..9e8244e 100644 --- a/src/main/java/gp_dbc/proxy/ServerProxy.java +++ b/src/main/java/gp_dbc/proxy/ServerProxy.java @@ -4,10 +4,12 @@ import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import fastcraft.H; import gp_dbc.TemporaryEvent; import gp_dbc.config.ConfigManager; import gp_dbc.system.Handcuff; import gp_dbc.system.TimeJail; +import net.minecraftforge.common.MinecraftForge; public class ServerProxy extends CommonProxy{ @@ -18,7 +20,10 @@ public class ServerProxy extends CommonProxy{ FMLCommonHandler.instance().bus().register(new TemporaryEvent()); FMLCommonHandler.instance().bus().register(new TimeJail()); - FMLCommonHandler.instance().bus().register(new Handcuff()); + + Handcuff handcuff = new Handcuff(); + FMLCommonHandler.instance().bus().register(handcuff); + MinecraftForge.EVENT_BUS.register(handcuff); ConfigManager.init($e.getModConfigurationDirectory().toString()); } diff --git a/src/main/java/gp_dbc/render/RenderHandcuffIcon.java b/src/main/java/gp_dbc/render/RenderHandcuffIcon.java new file mode 100644 index 0000000..542543a --- /dev/null +++ b/src/main/java/gp_dbc/render/RenderHandcuffIcon.java @@ -0,0 +1,152 @@ +package gp_dbc.render; + +import JinRyuu.JRMCore.JRMCoreH; +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.gui.GuiHandcuffed; +import gp_dbc.system.Handcuffed; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.renderer.culling.Frustrum; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Vec3; +import net.minecraftforge.client.event.RenderWorldLastEvent; +import org.lwjgl.opengl.GL11; + +import java.util.HashMap; +import java.util.List; +import java.util.UUID; + +public class RenderHandcuffIcon extends Gui { + + // UUID | start + @SideOnly(Side.CLIENT) + public static HashMap playerAroundHandcuffed = new HashMap<>(); + + public static boolean renderInF1 = false; + public static double heightAbove = 0.6D; + + public static List listPlayers; + Minecraft mc = Minecraft.getMinecraft(); + public String helmet; + + @SubscribeEvent + public void onRenderWorldLast(RenderWorldLastEvent event) { + + if (!renderInF1 && !Minecraft.isGuiEnabled()) + return; + + EntityLivingBase cameraEntity = mc.renderViewEntity; + Vec3 renderingVector = cameraEntity.getPosition(event.partialTicks); + Frustrum frustrum = new Frustrum(); + double viewX = cameraEntity.lastTickPosX + (cameraEntity.posX - cameraEntity.lastTickPosX) * event.partialTicks; + double viewY = cameraEntity.lastTickPosY + (cameraEntity.posY - cameraEntity.lastTickPosY) * event.partialTicks; + double viewZ = cameraEntity.lastTickPosZ + (cameraEntity.posZ - cameraEntity.lastTickPosZ) * event.partialTicks; + frustrum.setPosition(viewX, viewY, viewZ); + WorldClient client = mc.theWorld; + EntityPlayer mainPlayer = mc.thePlayer; + + listPlayers = Minecraft.getMinecraft().theWorld.playerEntities; + //Set entities = (Set)ReflectionHelper.getPrivateValue(WorldClient.class, client, new String[] { "entityList", "field_73032_d", "J" }); + for (EntityPlayer player : listPlayers) { + if (player != null + && player.isInRangeToRender3d(renderingVector.xCoord, renderingVector.yCoord, renderingVector.zCoord) && (player.ignoreFrustumCheck || frustrum.isBoundingBoxInFrustum(player.boundingBox)) + && player.isEntityAlive() + && playerAroundHandcuffed.containsKey(player.getUniqueID())) + renderPseudo((EntityLivingBase) player, event.partialTicks, (Entity) cameraEntity, 13816530); + } + } + + public void renderPseudo(EntityLivingBase passedEntity, float partialTicks, Entity viewPoint, int opacity) { + if (passedEntity.riddenByEntity != null) + return; + + EntityPlayer player = (EntityPlayer) passedEntity; + Minecraft mc = Minecraft.getMinecraft(); + float pastTranslate = 0.0F; + + float distance = passedEntity.getDistanceToEntity(viewPoint); + + double x = passedEntity.lastTickPosX + (passedEntity.posX - passedEntity.lastTickPosX) * partialTicks; + double y = passedEntity.lastTickPosY + (passedEntity.posY - passedEntity.lastTickPosY) * partialTicks; + double z = passedEntity.lastTickPosZ + (passedEntity.posZ - passedEntity.lastTickPosZ) * partialTicks; + float scale = 0.026666673F; + + GL11.glPushMatrix(); + GL11.glTranslatef((float) (x - RenderManager.renderPosX), (float) (y - RenderManager.renderPosY + passedEntity.height + heightAbove), (float) (z - RenderManager.renderPosZ)); + GL11.glNormal3f(0.0F, 1.0F, 0.0F); + GL11.glRotatef(-RenderManager.instance.playerViewY, 0.0F, 1.0F, 0.0F); + float viewX = RenderManager.instance.playerViewX; + if (passedEntity == mc.thePlayer) + viewX = Math.min(Math.max(RenderManager.instance.playerViewX, -5), 5); + GL11.glRotatef(viewX, 1.0F, 0.0F, 0.0F); + //System.out.println(RenderManager.instance.playerViewX); + GL11.glScalef(-scale, -scale, scale); + GL11.glDisable(2896); + GL11.glDepthMask(false); + GL11.glDisable(2929); + GL11.glDisable(3553); + GL11.glEnable(3042); + GL11.glBlendFunc(770, 771); + GL11.glTranslatef(0.0F, pastTranslate, 0.0F); + + float s = 0.60F; + + int pos_y = 0; + if (passedEntity == mc.thePlayer) + pos_y = 120; + float size = 20; + + long time_left = (playerAroundHandcuffed.get(player.getUniqueID()) + (Handcuffed.timeToWait * 1000) - System.currentTimeMillis()) / 1000; + + GL11.glEnable(3553); + GL11.glPushMatrix(); + GL11.glTranslatef(-size, 6.0F, 0.0F); + GL11.glScalef(s, s, s); + mc.fontRenderer.drawString(String.valueOf(time_left), 40, pos_y - 25, opacity, true); // String, x, y, color, shadow(true,false) + + mc.renderEngine.bindTexture(new ResourceLocation(Main.MODID, "textures/gui/handcuffed.png")); + + int guiWidth = 212 / 2 + 1; + int guiHeight = 320 / 2 + 1; + + // Texture + GL11.glPushMatrix(); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + //GL11.glColor4d(0.1, 0.6, 0.96, 0.95); + //GL11.glTranslated(0,0, 1); + drawTexturedModalRect(0, pos_y-30, 0, 0, guiWidth, guiHeight); + GL11.glPopMatrix(); + + + GL11.glPushMatrix(); + float s1 = 0.75F; + GL11.glScalef(s1, s1, s1); + + GL11.glPopMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + int off = 0; + s1 = 0.5F; + GL11.glScalef(s1, s1, s1); + GL11.glTranslatef(size / s * s1 * 2.0F - 16.0F, 0.0F, 0.0F); + mc.renderEngine.bindTexture(TextureMap.locationItemsTexture); + + GL11.glPopMatrix(); + GL11.glEnable(2929); + GL11.glDepthMask(true); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glPopMatrix(); + + } + + +} diff --git a/src/main/java/gp_dbc/system/Cell.java b/src/main/java/gp_dbc/system/Cell.java index 31ad935..7d890b7 100644 --- a/src/main/java/gp_dbc/system/Cell.java +++ b/src/main/java/gp_dbc/system/Cell.java @@ -88,6 +88,10 @@ public class Cell { return pos.x == x && pos.y == y && pos.z == z && pos.dimension == dimension; } + public boolean equals(int id) { + return this.id == id; + } + @Override public String toString() { String inmates = ""; diff --git a/src/main/java/gp_dbc/system/GalacticPatrol.java b/src/main/java/gp_dbc/system/GalacticPatrol.java index c5121d9..89f7c45 100644 --- a/src/main/java/gp_dbc/system/GalacticPatrol.java +++ b/src/main/java/gp_dbc/system/GalacticPatrol.java @@ -57,8 +57,10 @@ public class GalacticPatrol { patrolmans.add(player.getUniqueID()); player.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + translateToLocal("success.join_galactic_patrol"))); } - else + else { player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + translateToLocal("error.join_galactic_patrol"))); + return 4; + } Data.saveDataUUID(patrolmans, "galactic_patrols"); @@ -70,19 +72,19 @@ public class GalacticPatrol { Data.saveDataUUID(patrolmans, "galactic_patrols"); } - public boolean removeFromGalaticPatrol(EntityPlayer player) { + public int removeFromGalaticPatrol(EntityPlayer player) { return removeFromGalaticPatrol(player, false); } - public boolean removeFromGalaticPatrol(EntityPlayer player, boolean chatError) { + public int removeFromGalaticPatrol(EntityPlayer player, boolean chatError) { return removeFromGalaticPatrol((EntityPlayerMP)player, chatError); } - public boolean removeFromGalaticPatrol(EntityPlayerMP player) { + public int removeFromGalaticPatrol(EntityPlayerMP player) { return removeFromGalaticPatrol(player, false); } - public boolean removeFromGalaticPatrol(EntityPlayerMP player, boolean chatError) { + public int removeFromGalaticPatrol(EntityPlayerMP player, boolean chatError) { boolean removed = patrolmans.remove(player.getUniqueID()); Data.saveDataUUID(patrolmans, "galactic_patrols"); @@ -92,7 +94,7 @@ public class GalacticPatrol { else player.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + translateToLocal("error.leave_galactic_patrol"))); - return removed; + return removed ? 0 : 1; } public boolean isInGalacticPatrol(EntityPlayer player) { diff --git a/src/main/java/gp_dbc/system/Handcuff.java b/src/main/java/gp_dbc/system/Handcuff.java index 45d353f..1f822b2 100644 --- a/src/main/java/gp_dbc/system/Handcuff.java +++ b/src/main/java/gp_dbc/system/Handcuff.java @@ -6,32 +6,37 @@ import cpw.mods.fml.common.gameevent.PlayerEvent; import cpw.mods.fml.common.gameevent.TickEvent; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import gp_dbc.Main; import gp_dbc.network.client.NetworkHandcuffedC; import gp_dbc.proxy.CommonProxy; +import gp_dbc.utils.InputUtils; +import gp_dbc.utils.PlayerUtils; import gp_dbc.utils.TextUtils; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.event.entity.player.EntityInteractEvent; -import java.io.Serializable; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.UUID; +import java.util.*; import static gp_dbc.Main.gp; import static gp_dbc.config.ConfigManager.*; -import static gp_dbc.utils.PlayerUtils.getPlayerFromUUID; +import static gp_dbc.utils.PlayerUtils.*; import static net.minecraft.util.StatCollector.translateToLocal; public class Handcuff { // patrol~handcuffed|StartTimeHandcuffed @SideOnly(Side.SERVER) - public static HashMap handcuffed = new HashMap<>(); + //public static HashMap handcuffed = new HashMap<>(); + public static List handcuffed = new ArrayList<>(); + + //@SideOnly(Side.CLIENT) + //public static HashMap playerAroundHandcuffed = new HashMap<>(); + + @SideOnly(Side.SERVER) + public static HashMap> playersAroundHandcuffed = new HashMap<>(); int tick = 0; final int SLOWTICK_MAX = 20;//2000; @@ -45,30 +50,32 @@ public class Handcuff { if (tick >= SLOWTICK_MAX) { tick = 0; - Iterator> iterator = handcuffed.entrySet().iterator(); - while (iterator.hasNext()) { - Map.Entry entry = iterator.next(); - UUID uuid_patrol = UUID.fromString(entry.getKey().split("~")[0]); - UUID uuid_inmate = UUID.fromString(entry.getKey().split("~")[1]); - long time_start = entry.getValue(); + for (int i = 0; i < handcuffed.size(); i++) { + Handcuffed hdfd = handcuffed.get(i); + UUID uuid_patrol = hdfd.jailer; + UUID uuid_inmate = hdfd.inmate; + long time_start = hdfd.start_time; long time_left = (time_start + (TIME_TO_GO_IN_JAIL * 1000L) - System.currentTimeMillis()) / 1000; + EntityPlayer inmate = getPlayerFromUUID(uuid_inmate); + if (inmate != null) + updateHandcuffedPlayersAround(inmate); + if (time_left <= 0) { - EntityPlayer inmate = getPlayerFromUUID(uuid_inmate); if (inmate != null) { + if (!isHandcuffed(inmate)) + continue; + CommonProxy.network.sendTo(new NetworkHandcuffedC("end~"), (EntityPlayerMP) inmate); - JGPlayerMP jgInmate = new JGPlayerMP(inmate); - NBTTagCompound nbt = jgInmate.connectBaseNBT(); - nbt.setInteger("jrmcHar4va", 0); - - iterator.remove(); + removeHandcuffed(inmate); + i--; EntityPlayer patrol = getPlayerFromUUID(uuid_patrol); gp.jail.putPlayerInJail(patrol, inmate, 20, patrol != null); } else - entry.setValue(-1L); + hdfd.start_time = -1L; } } @@ -77,6 +84,49 @@ public class Handcuff { tick++; } + // Update les autres joueurs sur le fait qu'ils soient menottés ou non + @SideOnly(Side.SERVER) + public static void updateHandcuffedPlayersAround(EntityPlayer inmate) { + + if (!isHandcuffed(inmate)) { + if (playersAroundHandcuffed.containsKey(inmate.getUniqueID())) { + playersAroundHandcuffed.remove(inmate.getUniqueID()); + List nearbyPlayers = getNearbyPlayers(inmate, 10); + for (EntityPlayer player : nearbyPlayers) + CommonProxy.network.sendTo(new NetworkHandcuffedC("delete~" + inmate.getUniqueID()), (EntityPlayerMP) player); + } + return; + } + + UUID uuid_inmate = inmate.getUniqueID(); + List playerAroundHandcuffed = new ArrayList<>(); + List initPlayerAroundHandcuffed = null; + if (playersAroundHandcuffed.containsKey(uuid_inmate)) // already handcuffed + initPlayerAroundHandcuffed = playersAroundHandcuffed.get(uuid_inmate); + + + boolean different = false; + long time_start_handcuffed = getTimeHandcuffed(inmate); + List nearbyPlayers = getNearbyPlayers(inmate, 10); + + for (EntityPlayer player : nearbyPlayers) { + UUID uuid_player = player.getUniqueID(); + playerAroundHandcuffed.add(new Handcuffed(uuid_player, time_start_handcuffed)); + + if (initPlayerAroundHandcuffed == null || + !Handcuffed.contains_handcuffed(initPlayerAroundHandcuffed, uuid_player, time_start_handcuffed)) { + CommonProxy.network.sendTo(new NetworkHandcuffedC("update~" + inmate.getUniqueID() + "~" + time_start_handcuffed + "~" + TIME_TO_GO_IN_JAIL), (EntityPlayerMP) player); + different = true; + } + } + + if (!different && !playerAroundHandcuffed.equals(initPlayerAroundHandcuffed)) + different = true; + + if (different) + playersAroundHandcuffed.put(uuid_inmate, playerAroundHandcuffed); + } + @SubscribeEvent public void LogInCheckKOHandcuff(PlayerEvent.PlayerLoggedInEvent event) { EntityPlayer inmate = event.player; @@ -96,7 +146,7 @@ public class Handcuff { }*/ long current_time = System.currentTimeMillis(); - handcuffed.put(jailer.getUniqueID() + "~" + inmate.getUniqueID(), current_time); + handcuffed.add(new Handcuffed(inmate.getUniqueID(), jailer.getUniqueID(), current_time)); jailer.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + translateToLocal("success.you_handcuffed_him"))); @@ -105,16 +155,61 @@ public class Handcuff { JGPlayerMP jgInmate = new JGPlayerMP(inmate); NBTTagCompound nbt = jgInmate.connectBaseNBT(); - nbt.setInteger("jrmcHar4va", Integer.MAX_VALUE); + nbt.setInteger("jrmcHar4va", TIME_TO_GO_IN_JAIL * 2); CommonProxy.network.sendTo(new NetworkHandcuffedC("start~" + current_time + "~" + TIME_TO_GO_IN_JAIL), (EntityPlayerMP) inmate); + updateHandcuffedPlayersAround(inmate); return true; } @SideOnly(Side.SERVER) - public static String getHandcuffed(EntityPlayer inmate) { - for (String uuids : handcuffed.keySet()) { + public static Handcuffed getHandcuffed(EntityPlayer inmate) { + for (Handcuffed hdfd : handcuffed) { + if (hdfd.inmate.equals(inmate.getUniqueID())) + return hdfd; + } + return null; + } + + @SideOnly(Side.SERVER) + public static long getTimeHandcuffed(EntityPlayer inmate) { + Handcuffed hdfd = getHandcuffed(inmate); + if (hdfd == null) + return 0; + return hdfd.start_time; + } + + @SideOnly(Side.SERVER) + public static boolean isHandcuffed(EntityPlayer inmate) { + return getHandcuffed(inmate) != null; + } + + @SideOnly(Side.SERVER) + public static boolean removeHandcuffed(EntityPlayer inmate) { + + Handcuffed handcuff = getHandcuffed(inmate); + if (handcuff == null) + return false; + + handcuffed.remove(handcuff); + JGPlayerMP jgInmate = new JGPlayerMP(inmate); + NBTTagCompound nbt = jgInmate.connectBaseNBT(); + nbt.setInteger("jrmcHar4va", 0); + inmate.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + translateToLocal("success.you_are_free"))); + updateHandcuffedPlayersAround(inmate); + + return true; + } + + // liberator~inmate|StartTimeUnhandcuffing + @SideOnly(Side.SERVER) + public static HashMap unhandcuffing = new HashMap<>(); + + + @SideOnly(Side.SERVER) + public static String getUnhandcuffing(EntityPlayer inmate) { + for (String uuids : unhandcuffing.keySet()) { String[] split = uuids.split("~"); if (split[1].equals(inmate.getUniqueID().toString())) return uuids; @@ -122,16 +217,65 @@ public class Handcuff { return null; } - @SideOnly(Side.SERVER) - public static long getTimeHandcuffed(EntityPlayer inmate) { - String uuids = getHandcuffed(inmate); - if (uuids == null) - return 0; - return handcuffed.get(uuids); - } @SideOnly(Side.SERVER) - public static boolean isHandcuffed(EntityPlayer inmate) { - return getHandcuffed(inmate) != null; + @SubscribeEvent + public void RemoveHandcuff(EntityInteractEvent event) { + if (event.target instanceof EntityPlayer) { + EntityPlayer target = (EntityPlayer) event.target; + EntityPlayer player = event.entityPlayer; + + if (isHandcuffed(target) && player.isSneaking() && getUnhandcuffing(target) == null) { + player.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + translateToLocal("msg.unhandcuffing_someone"))); + target.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + translateToLocal("msg.unhandcuffing_you"))); + + unhandcuffing.put(player.getUniqueID() + "~" + target.getUniqueID(), System.currentTimeMillis()); + } + } + } + + int tick2 = 0; + + @SideOnly(Side.SERVER) + @SubscribeEvent + public void checkAlwaysUnhandcuffing(TickEvent.ServerTickEvent event) { + if (unhandcuffing.isEmpty()) + return; + + if (tick2 >= SLOWTICK_MAX) { + tick2 = 0; + + Iterator> iterator = unhandcuffing.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + String[] split = entry.getKey().split("~"); + UUID liberator_uuid = UUID.fromString(split[0]); + EntityPlayer liberator = PlayerUtils.getPlayerFromUUID(liberator_uuid); + if (liberator == null) + continue; + + if ((InputUtils.useItemPressedPlayers.containsKey(liberator_uuid) && !InputUtils.useItemPressedPlayers.get(liberator_uuid)) + || !liberator.isSneaking()) { + iterator.remove(); + liberator.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + translateToLocal("msg.stop_unhandcuffing_someone"))); + } + else { + EntityPlayer inmate = PlayerUtils.getPlayerFromUUID(UUID.fromString(split[1])); + if (inmate == null) + continue; + + long start_time_unhandcuffing = entry.getValue(); + long current_time = System.currentTimeMillis(); + + if (current_time - start_time_unhandcuffing > TIME_UNHANDCUFFING * 1000L) { + removeHandcuffed(inmate); + iterator.remove(); + } + + } + } + } + else + tick2++; } } diff --git a/src/main/java/gp_dbc/system/Handcuffed.java b/src/main/java/gp_dbc/system/Handcuffed.java new file mode 100644 index 0000000..6789b25 --- /dev/null +++ b/src/main/java/gp_dbc/system/Handcuffed.java @@ -0,0 +1,66 @@ +package gp_dbc.system; + +import org.lwjgl.Sys; + +import java.util.List; +import java.util.UUID; + +import static gp_dbc.config.ConfigManager.TIME_TO_GO_IN_JAIL; + +public class Handcuffed { + + public long start_time; + + public UUID inmate; + public UUID jailer; + + public static long timeToWait = TIME_TO_GO_IN_JAIL; + + public Handcuffed(UUID inmate, long start_time) { + this(inmate, null, start_time); + } + + public Handcuffed(UUID inmate, UUID jailer, long start_time) { + this.inmate = inmate; + this.jailer = jailer; + this.start_time = start_time; + } + + public boolean equals(UUID inmate) { + return this.inmate == inmate; + } + + public boolean equals(UUID inmate, long start_time) { + return this.inmate == inmate && this.start_time == start_time; + } + + public boolean equals(UUID inmate, UUID jailer, long start_time) { + return this.inmate == inmate && this.start_time == start_time && this.jailer == jailer; + } + + public static boolean contains_handcuffed(List handcuffeds, UUID inmate) { + return contains_handcuffed(handcuffeds, inmate, null); + } + + public static boolean contains_handcuffed(List handcuffeds, UUID inmate, Long start_time) { + return contains_handcuffed(handcuffeds, inmate, null, null); + } + + public static boolean contains_handcuffed(List handcuffeds, UUID inmate, UUID jailer, Long start_time) { + for (Handcuffed hdfd : handcuffeds) { + if (start_time == null && jailer == null) { + if (hdfd.equals(inmate)) + return true; + } + else if (start_time == null) { + if (hdfd.equals(inmate, start_time)) + return true; + } + else + if (hdfd.equals(inmate, jailer, start_time)) + return true; + } + + return false; + } +} diff --git a/src/main/java/gp_dbc/system/Jail.java b/src/main/java/gp_dbc/system/Jail.java index 2a21968..7fc0829 100644 --- a/src/main/java/gp_dbc/system/Jail.java +++ b/src/main/java/gp_dbc/system/Jail.java @@ -48,19 +48,31 @@ public class Jail { return false; } + private boolean contains_cells(int id) { + for (Cell cell : cells) + if (cell.equals(id)) + return true; + + return false; + } + public boolean addCell(int x, int y, int z, int dimension) { if (contains_cells(x, y , z , dimension)) return false; - cells.add(new Cell(x, y, z, dimension)); + int id = 0; + while (contains_cells(id) && !cells.isEmpty() && id < 99) + id++; + + cells.add(new Cell(x, y, z, dimension, DEFAULT_PLACE_CELL, id)); Data.saveDataString(listCellToListString(), "cells"); return true; } - public boolean removeCell(int x, int y, int z, int dimension) { + public int removeCell(int x, int y, int z, int dimension) { if (!contains_cells(x, y , z , dimension)) - return false; + return 1; boolean removed = true; for (int i = 0; i < cells.size(); i++) @@ -70,7 +82,22 @@ public class Jail { } Data.saveDataString(listCellToListString(), "cells"); - return removed; + return removed ? 0 : 1; + } + + public int removeCell(int id) { + if (!contains_cells(id)) + return 1; + + boolean removed = true; + for (int i = 0; i < cells.size(); i++) + if (cells.get(i).equals(id)) { + removed = cells.remove(i) != null; + break; + } + Data.saveDataString(listCellToListString(), "cells"); + + return removed ? 0 : 1; } public ListgetCells() { diff --git a/src/main/java/gp_dbc/utils/EntityUtils.java b/src/main/java/gp_dbc/utils/EntityUtils.java index 1da04f6..fbcbb3a 100644 --- a/src/main/java/gp_dbc/utils/EntityUtils.java +++ b/src/main/java/gp_dbc/utils/EntityUtils.java @@ -46,4 +46,13 @@ public class EntityUtils { return pointedEntity; } + public static List getNearbyEntities(EntityPlayer player, double radius) { + World world = player.worldObj; + AxisAlignedBB aabb = AxisAlignedBB.getBoundingBox( + player.posX - radius, player.posY - radius, player.posZ - radius, + player.posX + radius, player.posY + radius, player.posZ + radius + ); + return world.getEntitiesWithinAABB(Entity.class, aabb); + } + } diff --git a/src/main/java/gp_dbc/utils/InputUtils.java b/src/main/java/gp_dbc/utils/InputUtils.java new file mode 100644 index 0000000..7f6fa2e --- /dev/null +++ b/src/main/java/gp_dbc/utils/InputUtils.java @@ -0,0 +1,34 @@ +package gp_dbc.utils; + +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.common.gameevent.InputEvent; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gp_dbc.network.server.NetworkKeyManage; +import gp_dbc.proxy.CommonProxy; +import net.minecraft.client.Minecraft; +import net.minecraft.client.settings.GameSettings; + +import java.util.HashMap; +import java.util.UUID; + +public class InputUtils { + + public static HashMap useItemPressedPlayers = new HashMap<>(); + public boolean useItemPressed; + + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void handleMouseInput (InputEvent.MouseInputEvent event) { + GameSettings gameSettings = Minecraft.getMinecraft().gameSettings; + boolean pressed = gameSettings.keyBindUseItem.isPressed(); + if (pressed == useItemPressed) + return; + + useItemPressed = pressed; + CommonProxy.network.sendToServer(new NetworkKeyManage("useItem~" + useItemPressed)); + + System.out.println(useItemPressed); + } + +} diff --git a/src/main/java/gp_dbc/utils/PlayerUtils.java b/src/main/java/gp_dbc/utils/PlayerUtils.java index 0766e1a..f8891f8 100644 --- a/src/main/java/gp_dbc/utils/PlayerUtils.java +++ b/src/main/java/gp_dbc/utils/PlayerUtils.java @@ -9,6 +9,8 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraft.server.MinecraftServer; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; import java.util.List; import java.util.UUID; @@ -40,6 +42,20 @@ public class PlayerUtils { CommonProxy.network.sendTo(new NetworkDeleteItemC(stack.getDisplayName() + "~" + number), (EntityPlayerMP) player); } + @SideOnly(Side.SERVER) + public static boolean isOP(EntityPlayer player) { + return MinecraftServer.getServer().getConfigurationManager().func_152596_g(player.getGameProfile()); + } + + public static List getNearbyPlayers(EntityPlayer player, double radius) { + World world = player.worldObj; + AxisAlignedBB aabb = AxisAlignedBB.getBoundingBox( + player.posX - radius, player.posY - radius, player.posZ - radius, + player.posX + radius, player.posY + radius, player.posZ + radius + ); + return world.getEntitiesWithinAABB(EntityPlayer.class, aabb); + } + @SideOnly(Side.CLIENT) public static void removeCurrentItem(int number) { EntityPlayer player = Minecraft.getMinecraft().thePlayer; diff --git a/src/main/resources/assets/gp_dbc/lang/en_US.lang b/src/main/resources/assets/gp_dbc/lang/en_US.lang index 6034569..e756ab3 100644 --- a/src/main/resources/assets/gp_dbc/lang/en_US.lang +++ b/src/main/resources/assets/gp_dbc/lang/en_US.lang @@ -22,3 +22,7 @@ success.you_are_handcuffed=You are handcuffed, going in %% seconds warning.going_in_jail=%% second(s) left(s) error.cancel_handcuffing=Handcuffing cancel error.not_galactic_patrol=You are not a galactic patrol +msg.unhandcuffing_someone=You are unhandcuffing... +msg.unhandcuffing_you=Someone try to unhandcuffing you... +msg.stop_unhandcuffing_someone=You stop unhandcuffing someone +success.you_are_free=You are free! \ No newline at end of file diff --git a/src/main/resources/assets/gp_dbc/textures/gui/jailManager.png b/src/main/resources/assets/gp_dbc/textures/gui/jailManager.png index 68a2d17..d8927b7 100644 Binary files a/src/main/resources/assets/gp_dbc/textures/gui/jailManager.png and b/src/main/resources/assets/gp_dbc/textures/gui/jailManager.png differ