diff --git a/pub_build/RecStatusMod-v1.4-1.7.10.jar b/pub_build/RecStatusMod-v1.4-1.7.10.jar new file mode 100644 index 0000000..0d503f4 Binary files /dev/null and b/pub_build/RecStatusMod-v1.4-1.7.10.jar differ diff --git a/resources/assets/recmod/textures/gui/simple.png b/resources/assets/recmod/textures/gui/simple.png new file mode 100644 index 0000000..0ee3813 Binary files /dev/null and b/resources/assets/recmod/textures/gui/simple.png differ diff --git a/resources/mcmod.info b/resources/mcmod.info index a225000..2f06496 100644 --- a/resources/mcmod.info +++ b/resources/mcmod.info @@ -3,7 +3,7 @@ "modid": "fuj1n.recmod", "name": "Recording Status Mod", "description": "Record/Stream status in the players list, /rec to toggle", - "version": "v1.3.2", + "version": "v1.4", "mcversion": "1.7.10", "url": "", "updateUrl": "", diff --git a/src/fuj1n/recmod/RecMod.java b/src/fuj1n/recmod/RecMod.java index 1456e7e..0dc3d21 100644 --- a/src/fuj1n/recmod/RecMod.java +++ b/src/fuj1n/recmod/RecMod.java @@ -1,36 +1,40 @@ package fuj1n.recmod; -import java.io.*; -import java.util.*; - import cpw.mods.fml.common.*; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.Mod.Instance; import cpw.mods.fml.common.event.*; +import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.relauncher.Side; import fuj1n.recmod.client.event.*; import fuj1n.recmod.client.keybind.KeyHandlerRecMod; import fuj1n.recmod.command.CommandRec; -import fuj1n.recmod.network.PlayerTracker; +import fuj1n.recmod.network.*; import fuj1n.recmod.network.packet.*; +import java.io.*; +import java.util.HashMap; import net.minecraft.command.ServerCommandManager; import net.minecraft.entity.player.*; import net.minecraft.server.MinecraftServer; import net.minecraftforge.common.MinecraftForge; -@Mod(name = "Recording Status Mod", version = "v1.3.2", modid = "fuj1n.recmod", acceptableRemoteVersions="*", canBeDeactivated=false) +@Mod(name = "Recording Status Mod", version = "v1.4", modid = "fuj1n.recmod", acceptableRemoteVersions = "*", canBeDeactivated = false) public class RecMod { - + @Instance("fuj1n.recmod") public static RecMod instance; public static final PacketPipeline packetPipeline = new PacketPipeline(); - + private static HashMap recorders = new HashMap(); private static HashMap streamers = new HashMap(); public boolean showSelf = true; - public boolean showUI = false; + + //Keyboard stuffs + public boolean enableKeys = false; + public int keyRec = 44; + public int keyStr = 45; public String sheetLocation = "recmod:textures/sheets/indicators.png"; @@ -41,33 +45,33 @@ public class RecMod { @EventHandler public void preinit(FMLPreInitializationEvent event) { MinecraftForge.EVENT_BUS.register(new PlayerTracker()); + + NetworkRegistry.INSTANCE.registerGuiHandler(instance, new GuiHandler()); + configFile = new File(event.getModConfigurationDirectory(), "recmod.ui"); if (event.getSide() == Side.CLIENT) { readFromFile(); MinecraftForge.EVENT_BUS.register(new EventRenderGame()); - MinecraftForge.EVENT_BUS.register(new EventClientEntityLogin()); - - KeyHandlerRecMod keyh = KeyHandlerRecMod.instantiateSelf(); - MinecraftForge.EVENT_BUS.register(keyh); + FMLCommonHandler.instance().bus().register(new EventClientEntityLogin()); + FMLCommonHandler.instance().bus().register(new KeyHandlerRecMod()); } } @EventHandler public void init(FMLInitializationEvent event) { packetPipeline.initialise(); - + PacketPipeline pp = packetPipeline; //Packet Registration pp.registerPacket(PacketUpdatePlayerStatus.class); pp.registerPacket(PacketRemovePlayer.class); - pp.registerPacket(PacketChangeUISettings.class); - pp.registerPacket(PacketChangeUISheet.class); + pp.registerPacket(PacketClientCommand.class); } @EventHandler public void postinit(FMLPostInitializationEvent event) { - packetPipeline.postInitialise(); + packetPipeline.postInitialise(); } @EventHandler @@ -119,6 +123,8 @@ public void onSheetChanged() { public void readFromFile() { if (!configFile.exists()) { + writeToFile(); + return; } @@ -127,10 +133,16 @@ public void readFromFile() { String line1 = b.readLine(); String line2 = b.readLine(); String line3 = b.readLine(); + String line4 = b.readLine(); + String line5 = b.readLine(); - showSelfDef = convertToBoolean(line1); - showUI = convertToBoolean(line2); - sheetLocation = line3 != null && !line3.equals("") ? line3 : sheetLocation; + showSelfDef = convertToBoolean(line1, true); + sheetLocation = line2 != null && !line2.equals("") ? line2 : sheetLocation; + enableKeys = convertToBoolean(line3, false); + keyRec = convertToInteger(line4, 44); + keyStr = convertToInteger(line5, 45); + + b.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { @@ -139,12 +151,20 @@ public void readFromFile() { } } - public boolean convertToBoolean(String s) { + public int convertToInteger(String s, int def) { + try { + return Integer.parseInt(s); + } catch (Exception e) { + } + return def; + } + + public boolean convertToBoolean(String s, boolean def) { try { return Boolean.parseBoolean(s); } catch (Exception e) { } - return false; + return def; } public void writeToFile() { @@ -154,21 +174,19 @@ public void writeToFile() { BufferedWriter b = new BufferedWriter(new FileWriter(configFile)); b.write(Boolean.toString(showSelfDef)); b.newLine(); - b.write(Boolean.toString(showUI)); - b.newLine(); b.write(sheetLocation); + b.newLine(); + b.write(Boolean.toString(enableKeys)); + b.newLine(); + b.write(Integer.toString(keyRec)); + b.newLine(); + b.write(Integer.toString(keyStr)); b.close(); } catch (IOException e) { e.printStackTrace(); } } - public int calculateNumber() { - ArrayList list = new ArrayList(); - - return list.size(); - } - public void removeUnneededData(String username) { recorders.remove(username); streamers.remove(username); @@ -186,11 +204,9 @@ public void sendDataToPlayer(EntityPlayer player) { public void sendPacket(EntityPlayer target, String player, int type, boolean flag) { PacketUpdatePlayerStatus pckt = new PacketUpdatePlayerStatus(player, type, flag); - if(target instanceof EntityPlayerMP){ - System.out.println("target = MP"); - packetPipeline.sendTo(pckt, (EntityPlayerMP)target); - }else{ - System.out.println("target != MP"); + if (target instanceof EntityPlayerMP) { + packetPipeline.sendTo(pckt, (EntityPlayerMP) target); + } else { } } diff --git a/src/fuj1n/recmod/client/event/EventClientEntityLogin.java b/src/fuj1n/recmod/client/event/EventClientEntityLogin.java index 7910445..21aafbb 100644 --- a/src/fuj1n/recmod/client/event/EventClientEntityLogin.java +++ b/src/fuj1n/recmod/client/event/EventClientEntityLogin.java @@ -1,19 +1,16 @@ package fuj1n.recmod.client.event; -import cpw.mods.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent; - import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent; import fuj1n.recmod.RecMod; import net.minecraft.client.Minecraft; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraftforge.event.entity.EntityJoinWorldEvent; public class EventClientEntityLogin { @SubscribeEvent - public void onEntityLogin(PlayerLoggedInEvent event){ + public void onEntityLogin(PlayerLoggedInEvent event) { Minecraft mc = Minecraft.getMinecraft().getMinecraft(); RecMod.instance.showSelf = !mc.isSingleplayer() && !RecMod.instance.showSelfDef; } - + } diff --git a/src/fuj1n/recmod/client/event/EventRenderGame.java b/src/fuj1n/recmod/client/event/EventRenderGame.java index 5dfbc59..f52fd85 100644 --- a/src/fuj1n/recmod/client/event/EventRenderGame.java +++ b/src/fuj1n/recmod/client/event/EventRenderGame.java @@ -1,39 +1,37 @@ package fuj1n.recmod.client.event; -import java.util.List; - -import org.lwjgl.opengl.GL11; - import cpw.mods.fml.common.eventhandler.SubscribeEvent; import fuj1n.recmod.RecMod; import fuj1n.recmod.lib.IndexReference; +import java.util.List; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.*; import net.minecraft.client.network.NetHandlerPlayClient; import net.minecraft.scoreboard.ScorePlayerTeam; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.event.RenderGameOverlayEvent; +import org.lwjgl.opengl.GL11; public class EventRenderGame extends Gui { private String sheetLocation = RecMod.instance.sheetLocation; private ResourceLocation indicators = new ResourceLocation(sheetLocation); - + @SubscribeEvent public void onRenderGameOverlay(RenderGameOverlayEvent event) { - if(!sheetLocation.equals(RecMod.instance.sheetLocation)){ + if (!sheetLocation.equals(RecMod.instance.sheetLocation)) { sheetLocation = RecMod.instance.sheetLocation; indicators = new ResourceLocation(sheetLocation); } - + if (event.type != RenderGameOverlayEvent.ElementType.ALL) { return; } Minecraft mc = Minecraft.getMinecraft(); if (mc.gameSettings.keyBindPlayerList.getIsKeyPressed() && (!mc.isIntegratedServerRunning() || mc.thePlayer.sendQueue.playerInfoList.size() > 1 || mc.theWorld.getScoreboard().func_96539_a(0) != null)) { - mc.mcProfiler.startSection("playerList"); - NetHandlerPlayClient nethandlerplayclient = mc.thePlayer.sendQueue; - List list = nethandlerplayclient.playerInfoList; + mc.mcProfiler.startSection("playerList"); + NetHandlerPlayClient nethandlerplayclient = mc.thePlayer.sendQueue; + List list = nethandlerplayclient.playerInfoList; int k = event.resolution.getScaledWidth(); int i2; @@ -80,22 +78,22 @@ public void onRenderGameOverlay(RenderGameOverlayEvent event) { mc.getTextureManager().bindTexture(indicators); int indicatorRecIndex = RecMod.instance.isPlayerRecording(guiplayerinfo.name) ? IndexReference.ICON_RED_INDEX : IndexReference.ICON_GRAY_INDEX; int indicatorStrIndex = RecMod.instance.isPlayerStreaming(guiplayerinfo.name) ? IndexReference.ICON_GREEN_INDEX : IndexReference.ICON_GRAY_INDEX; - - drawTexturedModalRect(i6 - 8 - infooffset, j3, indicatorRecIndex < 32 ? indicatorRecIndex * 8 : indicatorRecIndex * 8 /*Better equation here*/, (int)Math.floor(indicatorRecIndex / 32) * 8, 8, 8); - drawTexturedModalRect(i6 - 8 - (infooffset - 8), j3, indicatorStrIndex * 8, (int)Math.floor(indicatorStrIndex / 32) * 8, 8, 8); + + drawTexturedModalRect(i6 - 8 - infooffset, j3, indicatorRecIndex < 32 ? indicatorRecIndex * 8 : indicatorRecIndex * 8 /*Better equation here*/, (int) Math.floor(indicatorRecIndex / 32) * 8, 8, 8); + drawTexturedModalRect(i6 - 8 - (infooffset - 8), j3, indicatorStrIndex * 8, (int) Math.floor(indicatorStrIndex / 32) * 8, 8, 8); } } } - }else if(!mc.gameSettings.keyBindPlayerList.getIsKeyPressed() && RecMod.instance.showSelf && mc.currentScreen == null){ + } else if (!mc.gameSettings.keyBindPlayerList.getIsKeyPressed() && RecMod.instance.showSelf && mc.currentScreen == null) { int x = event.resolution.getScaledWidth() - 32; int y = 0; - + int indicatorRecIndex = RecMod.instance.isPlayerRecording(mc.thePlayer.getCommandSenderName()) ? 1 : 0; int indicatorStrIndex = RecMod.instance.isPlayerStreaming(mc.thePlayer.getCommandSenderName()) ? 2 : 0; - + mc.getTextureManager().bindTexture(indicators); - drawTexturedModalRect(x, y, indicatorRecIndex * 16, (int)Math.floor(indicatorRecIndex / 16) * 16 + IndexReference.RESOLUTION_SPLIT_Y, 16, 16); - drawTexturedModalRect(x + 16, y, indicatorStrIndex * 16, (int)Math.floor(indicatorStrIndex / 16) * 16 + IndexReference.RESOLUTION_SPLIT_Y, 16, 16); + drawTexturedModalRect(x, y, indicatorRecIndex * 16, (int) Math.floor(indicatorRecIndex / 16) * 16 + IndexReference.RESOLUTION_SPLIT_Y, 16, 16); + drawTexturedModalRect(x + 16, y, indicatorStrIndex * 16, (int) Math.floor(indicatorStrIndex / 16) * 16 + IndexReference.RESOLUTION_SPLIT_Y, 16, 16); } } diff --git a/src/fuj1n/recmod/client/gui/GuiSimple.java b/src/fuj1n/recmod/client/gui/GuiSimple.java index 1a9a0e2..491ab6c 100644 --- a/src/fuj1n/recmod/client/gui/GuiSimple.java +++ b/src/fuj1n/recmod/client/gui/GuiSimple.java @@ -1,32 +1,173 @@ package fuj1n.recmod.client.gui; -import net.minecraft.client.resources.I18n; +import net.minecraft.client.gui.GuiLabel; +import org.lwjgl.input.Keyboard; + +import net.minecraft.client.gui.GuiScreen; + +import fuj1n.recmod.RecMod; import fuj1n.recmod.inventory.ContainerDummy; +import fuj1n.recmod.network.packet.PacketUpdatePlayerStatus; +import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.util.ResourceLocation; +import net.minecraft.util.*; import org.lwjgl.opengl.GL11; -public class GuiSimple extends GuiContainer{ +public class GuiSimple extends GuiContainer { + + public String boundPlayer; + + public int guiState = 0; + public String[] stateNames = { "Main", "Interface", "Keyboard", "Integration - NYI" }; + public int[] returnStates = { -1337, 0, 0, 0 }; + + // Keyboard pane globals + public int listenKeyType = -1; - public ResourceLocation background = new ResourceLocation("recmod:gui/simple.png"); - - public GuiSimple() { + public ResourceLocation background = new ResourceLocation("recmod:textures/gui/simple.png"); + + public GuiSimple(String boundPlayer) { super(new ContainerDummy()); + + this.boundPlayer = boundPlayer; + + if (stateNames.length != returnStates.length) { + throw new IllegalStateException("The length of GuiSimple.stateNames must match GuiSimple.returnStates"); + } } @Override public void drawGuiContainerForegroundLayer(int par1, int par2) { - this.fontRendererObj.drawString("Simple Gui", 8, this.ySize - 96 + 2, 4210752); + this.fontRendererObj.drawString("RecMod - " + stateNames[guiState], 8, 11, 4210752); + + if (guiState == 3) { + this.fontRendererObj.drawString("This feature is still not", 8, 11 + fontRendererObj.FONT_HEIGHT * 2, 4210752); + this.fontRendererObj.drawString("implemented, trust me, it'll be", 8, 11 + fontRendererObj.FONT_HEIGHT * 3, 4210752); + this.fontRendererObj.drawString("awesome!", 8, 11 + fontRendererObj.FONT_HEIGHT * 4, 4210752); + } } - + @Override public void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - this.mc.getTextureManager().bindTexture(background); - int k = (this.width - this.xSize) / 2; - int l = (this.height - this.ySize) / 2; - this.drawTexturedModalRect(k, l, 0, 0, this.xSize, this.ySize); + this.mc.getTextureManager().bindTexture(background); + int k = (this.width - this.xSize) / 2; + int l = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(k, l, 0, 0, this.xSize, this.ySize); + } + + @Override + public void initGui() { + super.initGui(); + + this.createGui(); + } + + public void createGui() { + buttonList.clear(); + + int k = (this.width - this.xSize) / 2; + int l = (this.height - this.ySize) / 2; + + buttonList.add(new GuiButton(returnStates[guiState] == -1337 ? -1337 : 1337 + returnStates[guiState], k + this.xSize - 25, l + 5, 20, 20, returnStates[guiState] == -1337 ? "X" : "<")); + + int buttonDelim = 21; + int buttonSize = this.xSize - 16; + int smallButtonSize = buttonSize / 2; + + switch (guiState) { + case 0: + buttonList.add(new GuiButton(0, k + 8 + smallButtonSize * 0, l + 30 + buttonDelim * 0, smallButtonSize, 20, (RecMod.instance.isPlayerRecording(boundPlayer) ? EnumChatFormatting.GREEN : EnumChatFormatting.RED) + "Recording")); + buttonList.add(new GuiButton(1, k + 8 + smallButtonSize * 1, l + 30 + buttonDelim * 0, smallButtonSize, 20, (RecMod.instance.isPlayerStreaming(boundPlayer) ? EnumChatFormatting.GREEN : EnumChatFormatting.RED) + "Streaming")); + buttonList.add(new GuiButton(1338, k + 8, l + 30 + buttonDelim * 1, buttonSize, 20, "Interface")); + buttonList.add(new GuiButton(1339, k + 8, l + 30 + buttonDelim * 2, buttonSize, 20, "Keyboard")); + buttonList.add(new GuiButton(1340, k + 8, l + 30 + buttonDelim * 3, buttonSize, 20, "Integration")); + + break; + case 1: + buttonList.add(new GuiButton(3, k + 8 + smallButtonSize * 0, l + 30 + buttonDelim * 0, smallButtonSize, 20, "Bobber: " + (RecMod.instance.showSelf ? EnumChatFormatting.GREEN + "On" : EnumChatFormatting.RED + "Off"))); + buttonList.add(new GuiButton(4, k + 8 + smallButtonSize * 1, l + 30 + buttonDelim * 0, smallButtonSize, 20, "Never: " + (!RecMod.instance.showSelfDef ? EnumChatFormatting.GREEN + "On" : EnumChatFormatting.RED + "Off"))); + break; + case 2: + buttonList.add(new GuiButton(2, k + 8, l + 30 + buttonDelim * 0, buttonSize, 20, "Keyboard Enabled: " + (RecMod.instance.enableKeys ? EnumChatFormatting.GREEN + "Yes" : EnumChatFormatting.RED + "No"))); + + if (RecMod.instance.enableKeys) { + buttonList.add(new GuiButton(1594, k + 9, l + 30 + buttonDelim * 2, buttonSize, 20, (listenKeyType == 0 ? EnumChatFormatting.YELLOW : "") + "Record Key: " + (RecMod.instance.keyRec == -1337 ? "DISABLED" : Keyboard.getKeyName(RecMod.instance.keyRec)))); + buttonList.add(new GuiButton(1595, k + 9, l + 30 + buttonDelim * 3, buttonSize, 20, (listenKeyType == 1 ? EnumChatFormatting.YELLOW : "") + "Stream Key: " + (RecMod.instance.keyStr == -1337 ? "DISABLED" : Keyboard.getKeyName(RecMod.instance.keyStr)))); + } + + break; + } + } + + @Override + public void actionPerformed(GuiButton button) { + listenKeyType = -1; + + if (button.id == -1337) { + this.mc.thePlayer.closeScreen(); + } + + if (button.id >= 1594) { + listenKeyType = button.id - 1594; + } else if (button.id >= 1337) { + guiState = button.id - 1337; + } else { + switch (button.id) { + case 0: + RecMod.instance.updatePlayerInformation(boundPlayer, 0, !RecMod.instance.isPlayerRecording(boundPlayer)); + RecMod.packetPipeline.sendToServer(new PacketUpdatePlayerStatus(boundPlayer, 0, RecMod.instance.isPlayerRecording(boundPlayer))); + + break; + case 1: + RecMod.instance.updatePlayerInformation(boundPlayer, 1, !RecMod.instance.isPlayerStreaming(boundPlayer)); + RecMod.packetPipeline.sendToServer(new PacketUpdatePlayerStatus(boundPlayer, 1, RecMod.instance.isPlayerStreaming(boundPlayer))); + + break; + case 2: + RecMod.instance.enableKeys = !RecMod.instance.enableKeys; + RecMod.instance.writeToFile(); + + break; + case 3: + RecMod.instance.showSelf = !RecMod.instance.showSelf; + + break; + case 4: + RecMod.instance.showSelfDef = !RecMod.instance.showSelfDef; + RecMod.instance.writeToFile(); + + break; + } + } + + createGui(); + } + + @Override + protected void keyTyped(char c, int key) { + if (listenKeyType == -1 && key == 1) { + if (returnStates[guiState] != -1337) { + guiState = returnStates[guiState]; + createGui(); + } else { + this.mc.thePlayer.closeScreen(); + } + } else { + switch (listenKeyType) { + case 0: + RecMod.instance.keyRec = key == 1 ? -1337 : key; + break; + case 1: + RecMod.instance.keyStr = key == 1 ? -1337 : key; + break; + } + listenKeyType = -1; + RecMod.instance.writeToFile(); + + createGui(); + } } } diff --git a/src/fuj1n/recmod/client/keybind/KeyHandlerRecMod.java b/src/fuj1n/recmod/client/keybind/KeyHandlerRecMod.java index b05f122..2b6e04d 100644 --- a/src/fuj1n/recmod/client/keybind/KeyHandlerRecMod.java +++ b/src/fuj1n/recmod/client/keybind/KeyHandlerRecMod.java @@ -1,107 +1,55 @@ package fuj1n.recmod.client.keybind; -import java.util.ArrayList; - -import org.lwjgl.input.*; - -import com.google.common.collect.Lists; - import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import cpw.mods.fml.common.gameevent.*; +import cpw.mods.fml.common.gameevent.TickEvent.ClientTickEvent; import cpw.mods.fml.common.gameevent.TickEvent.Phase; import cpw.mods.fml.common.gameevent.TickEvent.Type; -import cpw.mods.fml.relauncher.Side; +import fuj1n.recmod.RecMod; +import fuj1n.recmod.network.packet.PacketUpdatePlayerStatus; import net.minecraft.client.Minecraft; -import net.minecraft.client.settings.*; -import net.minecraftforge.common.MinecraftForge; +import org.lwjgl.input.Keyboard; public class KeyHandlerRecMod { - public KeyBinding[] keyBindings; - public boolean[] keyDown; - public boolean[] repeatings; - public boolean isDummy; + boolean recDown = false; + boolean strDown = false; Minecraft mc = Minecraft.getMinecraft(); - boolean b = false; - - public KeyHandlerRecMod(KeyBinding[] keyBindings, boolean[] repeatings) { - assert keyBindings.length == repeatings.length : "You need to pass two arrays of identical length"; - this.keyBindings = keyBindings; - this.repeatings = repeatings; - this.keyDown = new boolean[keyBindings.length]; - isDummy = false; - } @SubscribeEvent - public void onTick(TickEvent event) { - System.out.println("Key Tick"); - if (event.side == Side.CLIENT) { - if (event.phase == Phase.START) - keyTick(event.type, false); - else if (event.phase == Phase.END) - keyTick(event.type, true); + public void onTick(ClientTickEvent event) { + if (!RecMod.instance.enableKeys) { + return; + } + if (event.type == Type.CLIENT && event.phase == Phase.START && mc.theWorld != null && mc.currentScreen == null) { + keyTick(); + keyTick(); } - } - public void keyTick(Type type, boolean tickEnd) { - for (int i = 0; i < keyBindings.length; i++) { - KeyBinding keyBinding = keyBindings[i]; - int keyCode = keyBinding.getKeyCode(); - boolean state = (keyCode < 0 ? Mouse.isButtonDown(keyCode + 100) : Keyboard.isKeyDown(keyCode)); - if (state != keyDown[i] || (state && repeatings[i])) { - if (state) { - keyDown(type, keyBinding, tickEnd, state != keyDown[i]); - } else { - keyUp(type, keyBinding, tickEnd); - } - if (tickEnd) { - keyDown[i] = state; - } + public void keyTick() { + if (Keyboard.isKeyDown(RecMod.instance.keyRec)) { + if (!recDown) { + recDown = true; + } + } else { + if (recDown) { + recDown = false; + RecMod.instance.updatePlayerInformation(mc.thePlayer.getCommandSenderName(), 0, !RecMod.instance.isPlayerRecording(mc.thePlayer.getCommandSenderName())); + RecMod.packetPipeline.sendToServer(new PacketUpdatePlayerStatus(mc.thePlayer.getCommandSenderName(), 0, RecMod.instance.isPlayerRecording(mc.thePlayer.getCommandSenderName()))); } } - } - public void keyDown(Type types, KeyBinding kb, boolean tickEnd, boolean isRepeat) { - - } - - public void keyUp(Type types, KeyBinding kb, boolean tickEnd) { - if (mc.theWorld != null && mc.currentScreen == null && /*mc.gameSettings.keyBindPlayerList.pressed &&*/(!mc.isIntegratedServerRunning() || mc.thePlayer.sendQueue.playerInfoList.size() > 1)) - if (b) { - if (kb == keyBindings[0]) { - mc.thePlayer.sendChatMessage("/rec r"); - } else if (kb == keyBindings[1]) { - mc.thePlayer.sendChatMessage("/rec s"); - } + if (Keyboard.isKeyDown(RecMod.instance.keyStr)) { + if (!strDown) { + strDown = true; + } + } else { + if (strDown) { + strDown = false; + RecMod.instance.updatePlayerInformation(mc.thePlayer.getCommandSenderName(), 1, !RecMod.instance.isPlayerStreaming(mc.thePlayer.getCommandSenderName())); + RecMod.packetPipeline.sendToServer(new PacketUpdatePlayerStatus(mc.thePlayer.getCommandSenderName(), 1, RecMod.instance.isPlayerStreaming(mc.thePlayer.getCommandSenderName()))); } - b = !b; - } - - public static KeyHandlerRecMod instantiateSelf() { - System.out.println("Key system register"); - String keyCategory = "Recording Mod Bindings"; - KeyBinding recBinding = new KeyBinding("Toggle Recording", 44, keyCategory); - KeyBinding streamBinding = new KeyBinding("Toggle Streaming", 45, keyCategory); - KeyHandlerRecMod keyh = new KeyHandlerRecMod(new KeyBinding[] { recBinding, streamBinding }, new boolean[] { false, false }); - keyh.aggregateKeys(); - - return keyh; - } - - private void aggregateKeys() { - GameSettings settings = Minecraft.getMinecraft().gameSettings; - ArrayList harvestedBindings = Lists.newArrayList(); - for (KeyBinding kb : keyBindings) { - harvestedBindings.add(kb); } - - KeyBinding[] modKeyBindings = harvestedBindings.toArray(new KeyBinding[harvestedBindings.size()]); - KeyBinding[] allKeys = new KeyBinding[settings.keyBindings.length + modKeyBindings.length]; - System.arraycopy(settings.keyBindings, 0, allKeys, 0, settings.keyBindings.length); - System.arraycopy(modKeyBindings, 0, allKeys, settings.keyBindings.length, modKeyBindings.length); - settings.keyBindings = allKeys; - settings.loadOptions(); } } diff --git a/src/fuj1n/recmod/command/CommandRec.java b/src/fuj1n/recmod/command/CommandRec.java index ed59de1..d31fc08 100644 --- a/src/fuj1n/recmod/command/CommandRec.java +++ b/src/fuj1n/recmod/command/CommandRec.java @@ -1,14 +1,10 @@ package fuj1n.recmod.command; -import java.util.*; - import fuj1n.recmod.RecMod; import fuj1n.recmod.network.packet.*; -import ibxm.Player; +import java.util.*; import net.minecraft.command.*; import net.minecraft.entity.player.*; -import net.minecraft.network.rcon.RConConsoleSource; -import net.minecraft.server.MinecraftServer; import net.minecraft.util.ChatComponentText; public class CommandRec extends CommandBase { @@ -26,9 +22,9 @@ public String getCommandName() { @Override public String getCommandUsage(ICommandSender icommandsender) { icommandsender.addChatMessage(new ChatComponentText("\u00A7cRec Usage: ")); - icommandsender.addChatMessage(new ChatComponentText("\u00A7c (displays an easy to use GUI)")); - icommandsender.addChatMessage(new ChatComponentText("\u00A7c (toggle recording or streaming")); - icommandsender.addChatMessage(new ChatComponentText("\u00A7c [p] (toggle self ui - p toggles disabled by default)")); + icommandsender.addChatMessage(new ChatComponentText("\u00A7c{no oprands} (displays an easy to use GUI)")); + icommandsender.addChatMessage(new ChatComponentText("\u00A7c (toggle recording or streaming)")); + icommandsender.addChatMessage(new ChatComponentText("\u00A7c [p] (toggle the bobber - p toggles never display)")); icommandsender.addChatMessage(new ChatComponentText("\u00A7c (replace the texture sheet used)")); return "Wut?"; } @@ -36,71 +32,44 @@ public String getCommandUsage(ICommandSender icommandsender) { public void onWrongUsage(ICommandSender icommandsender) { getCommandUsage(icommandsender); } - + @Override public void processCommand(ICommandSender icommandsender, String[] astring) { - if(icommandsender instanceof MinecraftServer || icommandsender instanceof RConConsoleSource){ + if (!(icommandsender instanceof EntityPlayer)) { throw new CommandException("Only players are allowed to perform this command.", new Object[0]); } - - if (astring.length == 1 && (astring[0].equals("r") || astring[0].equals("s"))) { + + EntityPlayer player = (EntityPlayer) icommandsender; + + if (astring.length == 0) { + sendClientProcess(player, astring); + } else if (astring.length == 1 && (astring[0].equals("r") || astring[0].equals("s"))) { String sender = icommandsender.getCommandSenderName(); int type = astring[0].equals("r") ? 0 : 1; boolean flag = astring[0].equals("r") ? !RecMod.instance.isPlayerRecording(sender) : !RecMod.instance.isPlayerStreaming(sender); RecMod.instance.updatePlayerInformation(sender, type, flag); spreadData(sender, type, flag); - } else if((astring.length == 2 || (astring.length == 3 && astring[2].equals("p"))) && astring[0].equals("ui") && (astring[1].equals("self") || astring[1].equals("sidebar")) && icommandsender instanceof EntityPlayer){ - boolean isSelf = astring[1].equals("self"); - boolean isOverride = astring.length == 3 && astring[2].equals("p"); - sendUIUpdatePacket((EntityPlayer)icommandsender, isSelf, isOverride); - } else if(astring.length == 2 && astring[0].equals("sheet")){ - sendSheetChangePacket((EntityPlayer)icommandsender, astring[1]); - } else if(astring.length == 1 && astring[0].equals("gui")){ - + } else if ((astring.length == 1 || (astring.length == 2 && astring[1].equals("p"))) && astring[0].equals("bobber")) { + sendClientProcess(player, astring); + } else if (astring.length == 2 && astring[0].equals("sheet")) { + sendClientProcess(player, astring); } else { onWrongUsage(icommandsender); } } - // public void sendUpdatePacket(String playerName, int type, boolean flag) { - // ByteArrayOutputStream bos = new ByteArrayOutputStream(8); - // DataOutputStream outputStream = new DataOutputStream(bos); - // try { - // outputStream.writeUTF(playerName); - // outputStream.writeInt(type); - // outputStream.writeBoolean(flag); - // } catch (Exception ex) { - // ex.printStackTrace(); - // } - // - // Packet250CustomPayload packet = new Packet250CustomPayload(); - // packet.channel = "recModData"; - // packet.data = bos.toByteArray(); - // packet.length = bos.size(); - // if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) { - // PacketDispatcher.sendPacketToServer(packet); - // } - // } - public void spreadData(String playerName, int typeData, boolean flag) { PacketUpdatePlayerStatus pckt = new PacketUpdatePlayerStatus(playerName, typeData, flag); RecMod.packetPipeline.sendToAll(pckt); } - - public void sendUIUpdatePacket(EntityPlayer p, boolean isSelf, boolean isOverride){ - if(p instanceof EntityPlayerMP){ - PacketChangeUISettings pckt = new PacketChangeUISettings(isSelf, isOverride); - RecMod.packetPipeline.sendTo(pckt, (EntityPlayerMP)p); - } - } - public void sendSheetChangePacket(EntityPlayer p, String newSheet){ - if(p instanceof EntityPlayerMP){ - PacketChangeUISheet pckt = new PacketChangeUISheet(newSheet); - RecMod.packetPipeline.sendTo(pckt, (EntityPlayerMP)p); + public void sendClientProcess(EntityPlayer p, String[] params) { + if (p instanceof EntityPlayerMP) { + PacketClientCommand pckt = new PacketClientCommand(params); + RecMod.packetPipeline.sendTo(pckt, (EntityPlayerMP) p); } } - + @Override public List addTabCompletionOptions(ICommandSender par1ICommandSender, String[] par2ArrayOfStr) { List l = new ArrayList(); @@ -109,12 +78,11 @@ public List addTabCompletionOptions(ICommandSender par1ICommandSender, String[] l.add("s"); l.add("ui"); l.add("sheet"); - }else if(par2ArrayOfStr.length == 2 && par2ArrayOfStr[0].equals("ui")){ - l.add("self"); - }else if(par2ArrayOfStr.length == 2 && par2ArrayOfStr[0].equals("sheet")){ + } else if (par2ArrayOfStr.length == 2 && par2ArrayOfStr[0].equals("ui")) { + } else if (par2ArrayOfStr.length == 2 && par2ArrayOfStr[0].equals("sheet")) { l.add("recmod:textures/sheets/indicators.png"); l.add("recmod:textures/sheets/indicatorsx2.png"); - }else if(par2ArrayOfStr.length == 3 && par2ArrayOfStr[1].equals("self")){ + } else if (par2ArrayOfStr.length == 3 && par2ArrayOfStr[1].equals("self")) { l.add("p"); } diff --git a/src/fuj1n/recmod/inventory/ContainerDummy.java b/src/fuj1n/recmod/inventory/ContainerDummy.java index 4bb9b47..534cbbd 100644 --- a/src/fuj1n/recmod/inventory/ContainerDummy.java +++ b/src/fuj1n/recmod/inventory/ContainerDummy.java @@ -1,10 +1,9 @@ package fuj1n.recmod.inventory; import net.minecraft.entity.player.EntityPlayer; - import net.minecraft.inventory.Container; -public class ContainerDummy extends Container{ +public class ContainerDummy extends Container { @Override public boolean canInteractWith(EntityPlayer entityplayer) { diff --git a/src/fuj1n/recmod/lib/IndexReference.java b/src/fuj1n/recmod/lib/IndexReference.java index 0fc44a0..4d44447 100644 --- a/src/fuj1n/recmod/lib/IndexReference.java +++ b/src/fuj1n/recmod/lib/IndexReference.java @@ -6,5 +6,5 @@ public class IndexReference { public static final int ICON_RED_INDEX = 1; public static final int ICON_GREEN_INDEX = 2; public static final int RESOLUTION_SPLIT_Y = 80; - + } diff --git a/src/fuj1n/recmod/network/GuiHandler.java b/src/fuj1n/recmod/network/GuiHandler.java new file mode 100644 index 0000000..86d854c --- /dev/null +++ b/src/fuj1n/recmod/network/GuiHandler.java @@ -0,0 +1,24 @@ +package fuj1n.recmod.network; + +import cpw.mods.fml.common.network.IGuiHandler; +import fuj1n.recmod.client.gui.GuiSimple; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; + +public class GuiHandler implements IGuiHandler { + + @Override + public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { + return null; + } + + @Override + public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { + switch (ID) { + case 0: + return new GuiSimple(player.getCommandSenderName()); + } + + return null; + } +} diff --git a/src/fuj1n/recmod/network/packet/AbstractPacket.java b/src/fuj1n/recmod/network/packet/AbstractPacket.java index c9f7fa8..6cd61d7 100644 --- a/src/fuj1n/recmod/network/packet/AbstractPacket.java +++ b/src/fuj1n/recmod/network/packet/AbstractPacket.java @@ -2,7 +2,6 @@ import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; - import net.minecraft.entity.player.EntityPlayer; /** diff --git a/src/fuj1n/recmod/network/packet/PacketChangeUISettings.java b/src/fuj1n/recmod/network/packet/PacketChangeUISettings.java deleted file mode 100644 index a34e16e..0000000 --- a/src/fuj1n/recmod/network/packet/PacketChangeUISettings.java +++ /dev/null @@ -1,49 +0,0 @@ -package fuj1n.recmod.network.packet; - -import fuj1n.recmod.RecMod; - -import io.netty.buffer.ByteBuf; -import io.netty.channel.ChannelHandlerContext; -import net.minecraft.entity.player.EntityPlayer; - -public class PacketChangeUISettings extends AbstractPacket { - - private boolean isSelf, isOverride; - - public PacketChangeUISettings(boolean isSelf, boolean isOverride) { - this.isSelf = isSelf; - this.isOverride = isOverride; - } - - public PacketChangeUISettings() {} - - @Override - public void encodeInto(ChannelHandlerContext ctx, ByteBuf buffer) { - buffer.writeBoolean(isSelf); - buffer.writeBoolean(isOverride); - } - - @Override - public void decodeInto(ChannelHandlerContext ctx, ByteBuf buffer) { - isSelf = buffer.readBoolean(); - isOverride = buffer.readBoolean(); - } - - @Override - public void handleClientSide(EntityPlayer player) { - if (isSelf) { - RecMod.instance.showSelf = !RecMod.instance.showSelf; - RecMod.instance.showSelfDef = isOverride ? !RecMod.instance.showSelfDef : RecMod.instance.showSelfDef; - - RecMod.instance.onUIStateChanged(); - } else { - RecMod.instance.showUI = !RecMod.instance.showUI; - - RecMod.instance.onUIStateChanged(); - } - } - - @Override - public void handleServerSide(EntityPlayer player) {} - -} diff --git a/src/fuj1n/recmod/network/packet/PacketChangeUISheet.java b/src/fuj1n/recmod/network/packet/PacketChangeUISheet.java deleted file mode 100644 index 812d091..0000000 --- a/src/fuj1n/recmod/network/packet/PacketChangeUISheet.java +++ /dev/null @@ -1,39 +0,0 @@ -package fuj1n.recmod.network.packet; - -import fuj1n.recmod.RecMod; - -import cpw.mods.fml.common.network.ByteBufUtils; - -import io.netty.buffer.ByteBuf; -import io.netty.channel.ChannelHandlerContext; -import net.minecraft.entity.player.EntityPlayer; - -public class PacketChangeUISheet extends AbstractPacket { - - String newSheet; - - public PacketChangeUISheet(String newSheet) { - this.newSheet = newSheet; - } - - public PacketChangeUISheet() {} - - @Override - public void encodeInto(ChannelHandlerContext ctx, ByteBuf buffer) { - ByteBufUtils.writeUTF8String(buffer, newSheet); - } - - @Override - public void decodeInto(ChannelHandlerContext ctx, ByteBuf buffer) { - newSheet = ByteBufUtils.readUTF8String(buffer); - } - - @Override - public void handleClientSide(EntityPlayer player) { - RecMod.instance.sheetLocation = newSheet; - RecMod.instance.onSheetChanged(); - } - - @Override - public void handleServerSide(EntityPlayer player) {} -} diff --git a/src/fuj1n/recmod/network/packet/PacketClientCommand.java b/src/fuj1n/recmod/network/packet/PacketClientCommand.java new file mode 100644 index 0000000..ed54388 --- /dev/null +++ b/src/fuj1n/recmod/network/packet/PacketClientCommand.java @@ -0,0 +1,63 @@ +package fuj1n.recmod.network.packet; + +import cpw.mods.fml.common.network.ByteBufUtils; +import fuj1n.recmod.RecMod; +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import net.minecraft.entity.player.EntityPlayer; + +public class PacketClientCommand extends AbstractPacket { + + public String[] params; + + public PacketClientCommand() { + } + + public PacketClientCommand(String[] params) { + this.params = params; + } + + @Override + public void encodeInto(ChannelHandlerContext ctx, ByteBuf buffer) { + buffer.writeInt(params.length); + + for (int i = 0; i < params.length; i++) { + ByteBufUtils.writeUTF8String(buffer, params[i]); + } + } + + @Override + public void decodeInto(ChannelHandlerContext ctx, ByteBuf buffer) { + int length = buffer.readInt(); + + if (length > 0) { + params = new String[length]; + + for (int i = 0; i < params.length; i++) { + params[i] = ByteBufUtils.readUTF8String(buffer).trim(); + } + } + } + + @Override + public void handleClientSide(EntityPlayer player) { + if(params == null || params.length == 0){ + player.openGui(RecMod.instance, 0, player.worldObj, 0, 0, 0); + } else if (params[0].equals("bobber")) { + boolean isOverride = params.length == 2 && params[1].equals("p"); + + RecMod.instance.showSelf = !RecMod.instance.showSelf; + RecMod.instance.showSelfDef = isOverride ? !RecMod.instance.showSelfDef : RecMod.instance.showSelfDef; + + RecMod.instance.onUIStateChanged(); + } else if (params[0].equals("sheet")) { + RecMod.instance.sheetLocation = params[1]; + RecMod.instance.onSheetChanged(); + } + } + + @Override + public void handleServerSide(EntityPlayer player) { + } + +} diff --git a/src/fuj1n/recmod/network/packet/PacketPipeline.java b/src/fuj1n/recmod/network/packet/PacketPipeline.java index 7ea2780..c4184f0 100644 --- a/src/fuj1n/recmod/network/packet/PacketPipeline.java +++ b/src/fuj1n/recmod/network/packet/PacketPipeline.java @@ -1,26 +1,16 @@ package fuj1n.recmod.network.packet; -import java.util.*; - -import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; -import io.netty.channel.ChannelHandler; -import io.netty.channel.ChannelHandlerContext; -import io.netty.handler.codec.MessageToMessageCodec; - -import net.minecraft.client.Minecraft; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.network.INetHandler; -import net.minecraft.network.NetHandlerPlayServer; - import cpw.mods.fml.common.FMLCommonHandler; -import cpw.mods.fml.common.network.FMLEmbeddedChannel; -import cpw.mods.fml.common.network.FMLOutboundHandler; -import cpw.mods.fml.common.network.NetworkRegistry; +import cpw.mods.fml.common.network.*; import cpw.mods.fml.common.network.internal.FMLProxyPacket; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; +import cpw.mods.fml.relauncher.*; +import io.netty.buffer.*; +import io.netty.channel.*; +import io.netty.handler.codec.MessageToMessageCodec; +import java.util.*; +import net.minecraft.client.Minecraft; +import net.minecraft.entity.player.*; +import net.minecraft.network.*; /** * Packet pipeline class. Directs all registered packet data to be handled by the packets themselves. diff --git a/src/fuj1n/recmod/network/packet/PacketRemovePlayer.java b/src/fuj1n/recmod/network/packet/PacketRemovePlayer.java index e119ff1..3d709f5 100644 --- a/src/fuj1n/recmod/network/packet/PacketRemovePlayer.java +++ b/src/fuj1n/recmod/network/packet/PacketRemovePlayer.java @@ -1,11 +1,7 @@ package fuj1n.recmod.network.packet; -import java.io.IOException; - -import fuj1n.recmod.RecMod; - import cpw.mods.fml.common.network.ByteBufUtils; - +import fuj1n.recmod.RecMod; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import net.minecraft.entity.player.EntityPlayer; @@ -13,13 +9,14 @@ public class PacketRemovePlayer extends AbstractPacket { private String player; - - public PacketRemovePlayer(String player){ + + public PacketRemovePlayer(String player) { this.player = player; } - - public PacketRemovePlayer(){} - + + public PacketRemovePlayer() { + } + @Override public void encodeInto(ChannelHandlerContext ctx, ByteBuf buffer) { ByteBufUtils.writeUTF8String(buffer, player); @@ -36,6 +33,7 @@ public void handleClientSide(EntityPlayer player) { } @Override - public void handleServerSide(EntityPlayer player) {} + public void handleServerSide(EntityPlayer player) { + } } diff --git a/src/fuj1n/recmod/network/packet/PacketUpdatePlayerStatus.java b/src/fuj1n/recmod/network/packet/PacketUpdatePlayerStatus.java index 52be751..c074f76 100644 --- a/src/fuj1n/recmod/network/packet/PacketUpdatePlayerStatus.java +++ b/src/fuj1n/recmod/network/packet/PacketUpdatePlayerStatus.java @@ -1,10 +1,7 @@ package fuj1n.recmod.network.packet; -import java.io.IOException; - -import fuj1n.recmod.RecMod; - import cpw.mods.fml.common.network.ByteBufUtils; +import fuj1n.recmod.RecMod; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import net.minecraft.entity.player.EntityPlayer; @@ -21,7 +18,8 @@ public PacketUpdatePlayerStatus(String player, int type, boolean flag) { this.flag = flag; } - public PacketUpdatePlayerStatus() {} + public PacketUpdatePlayerStatus() { + } @Override public void encodeInto(ChannelHandlerContext ctx, ByteBuf buffer) { @@ -43,6 +41,11 @@ public void handleClientSide(EntityPlayer player) { } @Override - public void handleServerSide(EntityPlayer player) {} + public void handleServerSide(EntityPlayer player) { + RecMod.instance.updatePlayerInformation(this.player, type, flag); + + // Send the packet to all the players + RecMod.packetPipeline.sendToAll(this); + } }