diff --git a/common/mekanism/client/ClientPlayerTickHandler.java b/common/mekanism/client/ClientPlayerTickHandler.java index 66899dd11..209720930 100644 --- a/common/mekanism/client/ClientPlayerTickHandler.java +++ b/common/mekanism/client/ClientPlayerTickHandler.java @@ -25,9 +25,7 @@ import cpw.mods.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) public class ClientPlayerTickHandler implements ITickHandler { - public boolean lastTickConfiguratorChange = false; - public boolean lastTickElectricBowChange = false; - public boolean lastTickWalkieTalkieChange = false; + public boolean lastTickUpdate = false; @Override public void tickStart(EnumSet type, Object... tickData) {} @@ -47,56 +45,59 @@ public class ClientPlayerTickHandler implements ITickHandler { ItemConfigurator item = (ItemConfigurator)entityPlayer.getCurrentEquippedItem().getItem(); - if(entityPlayer.isSneaking() && Keyboard.isKeyDown(Keyboard.KEY_M)) + if(entityPlayer.isSneaking() && MekanismKeyHandler.modeSwitchDown) { - if(!lastTickConfiguratorChange) + if(!lastTickUpdate) { item.setState(stack, (byte)(item.getState(stack) < 2 ? item.getState(stack)+1 : 0)); PacketHandler.sendPacket(Transmission.SERVER, new PacketConfiguratorState().setParams(item.getState(stack))); entityPlayer.sendChatToPlayer(ChatMessageComponent.createFromText(EnumColor.DARK_BLUE + "[Mekanism] " + EnumColor.GREY + "Configure State: " + item.getColor(item.getState(stack)) + item.getState(item.getState(stack)))); - lastTickConfiguratorChange = true; + lastTickUpdate = true; } } else { - lastTickConfiguratorChange = false; + lastTickUpdate = false; } } else if(entityPlayer.getCurrentEquippedItem().getItem() instanceof ItemElectricBow) { ItemElectricBow item = (ItemElectricBow)entityPlayer.getCurrentEquippedItem().getItem(); - if(entityPlayer.isSneaking() && Keyboard.isKeyDown(Keyboard.KEY_M)) + if(entityPlayer.isSneaking() && MekanismKeyHandler.modeSwitchDown) { - if(!lastTickElectricBowChange) + if(!lastTickUpdate) { item.setFireState(stack, !item.getFireState(stack)); PacketHandler.sendPacket(Transmission.SERVER, new PacketElectricBowState().setParams(item.getFireState(stack))); entityPlayer.sendChatToPlayer(ChatMessageComponent.createFromText(EnumColor.DARK_BLUE + "[Mekanism] " + EnumColor.GREY + "Fire Mode: " + (item.getFireState(stack) ? (EnumColor.DARK_GREEN + "ON") : (EnumColor.DARK_RED + "OFF")))); - lastTickElectricBowChange = true; + lastTickUpdate = true; } } else { - lastTickElectricBowChange = false; + lastTickUpdate = false; } } else if(entityPlayer.getCurrentEquippedItem().getItem() instanceof ItemWalkieTalkie) { ItemWalkieTalkie item = (ItemWalkieTalkie)entityPlayer.getCurrentEquippedItem().getItem(); - if(entityPlayer.isSneaking() && Keyboard.isKeyDown(Keyboard.KEY_M) && item.getOn(stack)) + if(entityPlayer.isSneaking() && MekanismKeyHandler.modeSwitchDown && item.getOn(stack)) { - if(!lastTickWalkieTalkieChange) + if(!lastTickUpdate) { int newChan = item.getChannel(stack) < 9 ? item.getChannel(stack)+1 : 1; item.setChannel(stack, newChan); PacketHandler.sendPacket(Transmission.SERVER, new PacketWalkieTalkieState().setParams(newChan)); - lastTickWalkieTalkieChange = true; + lastTickUpdate = true; } } else { - lastTickWalkieTalkieChange = false; + lastTickUpdate = false; } } + else { + lastTickUpdate = false; + } } } } diff --git a/common/mekanism/client/MekanismKeyHandler.java b/common/mekanism/client/MekanismKeyHandler.java index 623331d88..888b5f1d6 100644 --- a/common/mekanism/client/MekanismKeyHandler.java +++ b/common/mekanism/client/MekanismKeyHandler.java @@ -14,11 +14,12 @@ public class MekanismKeyHandler extends KeyHandler public static KeyBinding modeSwitch = new KeyBinding("Mekanism Mode Switch", Keyboard.KEY_M); public static KeyBinding voice = new KeyBinding("Mekanism Voice", Keyboard.KEY_U); + public static boolean modeSwitchDown = false; public static boolean voiceDown = false; public MekanismKeyHandler() { - super(new KeyBinding[] {modeSwitch, voice}); + super(new KeyBinding[] {modeSwitch, voice}, new boolean[] {false, false}); } @Override @@ -30,7 +31,11 @@ public class MekanismKeyHandler extends KeyHandler @Override public void keyDown(EnumSet types, KeyBinding kb, boolean tickEnd, boolean isRepeat) { - if(kb == voice) + if(kb.keyCode == modeSwitch.keyCode) + { + modeSwitchDown = true; + } + else if(kb.keyCode == voice.keyCode) { voiceDown = true; } @@ -39,7 +44,11 @@ public class MekanismKeyHandler extends KeyHandler @Override public void keyUp(EnumSet types, KeyBinding kb, boolean tickEnd) { - if(kb == voice) + if(kb.keyCode == modeSwitch.keyCode) + { + modeSwitchDown = false; + } + else if(kb.keyCode == voice.keyCode) { voiceDown = false; } diff --git a/common/mekanism/client/VoiceClientManager.java b/common/mekanism/client/VoiceClientManager.java index 12043b972..a717a1250 100644 --- a/common/mekanism/client/VoiceClientManager.java +++ b/common/mekanism/client/VoiceClientManager.java @@ -34,6 +34,9 @@ public class VoiceClientManager implements IConnectionHandler public TargetDataLine targetLine; public SourceDataLine sourceLine; + public Thread microphoneThread; + public Thread speakerThread; + public DataInputStream input; public DataOutputStream output; @@ -89,12 +92,14 @@ public class VoiceClientManager implements IConnectionHandler public void start() { + System.out.println("Started client connection."); + try { input = new DataInputStream(new BufferedInputStream(socket.getInputStream())); output = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream())); //Speaker (Out) - new Thread(new Runnable() + speakerThread = new Thread(new Runnable() { @Override public void run() @@ -106,7 +111,6 @@ public class VoiceClientManager implements IConnectionHandler while(running) { - System.out.println("Looped"); short byteCount = VoiceClientManager.this.input.readShort(); byte[] audioData = new byte[byteCount]; VoiceClientManager.this.input.readFully(audioData); @@ -115,12 +119,15 @@ public class VoiceClientManager implements IConnectionHandler } } catch(Exception e) { System.err.println("Error while running speaker loop."); + e.printStackTrace(); } } - }).start(); + }); + + speakerThread.start(); //Microphone (In) - new Thread(new Runnable() + microphoneThread = new Thread(new Runnable() { @Override public void run() @@ -147,7 +154,6 @@ public class VoiceClientManager implements IConnectionHandler if(bytesRead > 0) { - System.out.println("Writing"); output.writeShort(audioData.length); output.write(audioData); } @@ -180,13 +186,23 @@ public class VoiceClientManager implements IConnectionHandler e.printStackTrace(); } } - }).start(); - } catch(Exception e) {} + }); + + microphoneThread.start(); + } catch(Exception e) { + System.err.println("Error in core client initiation."); + e.printStackTrace(); + } } public void stop() { + System.out.println("Stopped client connection."); + try { + microphoneThread.interrupt(); + speakerThread.interrupt(); + sourceLine.flush(); sourceLine.close(); diff --git a/common/mekanism/common/Mekanism.java b/common/mekanism/common/Mekanism.java index 2f76deeab..610641b8f 100644 --- a/common/mekanism/common/Mekanism.java +++ b/common/mekanism/common/Mekanism.java @@ -354,7 +354,7 @@ public class Mekanism "COC", "TAT", "COC", Character.valueOf('C'), AtomicCore, Character.valueOf('O'), "ingotRefinedObsidian", Character.valueOf('T'), EnergyTablet.getUnchargedItem(), Character.valueOf('A'), MekanismUtils.getEnergyCube(EnergyCubeTier.ELITE) })); CraftingManager.getInstance().getRecipeList().add(new MekanismRecipe(new ItemStack(ControlCircuit), new Object[] { - " P ", "PEP", " P ", Character.valueOf('P'), "ingotOsmium", Character.valueOf('E'), EnrichedAlloy + "RER", Character.valueOf('R'), Item.redstone, Character.valueOf('E'), EnrichedAlloy })); CraftingManager.getInstance().getRecipeList().add(new ShapelessOreRecipe(new ItemStack(EnrichedIron, 2), new Object[] { MaganeseAlloy, Item.ingotIron @@ -419,6 +419,9 @@ public class Mekanism CraftingManager.getInstance().getRecipeList().add(new MekanismRecipe(new ItemStack(NetworkReader), new Object[] { " G ", "AEA", " I ", Character.valueOf('G'), Block.glass, Character.valueOf('A'), EnrichedAlloy, Character.valueOf('E'), EnergyTablet.getUnchargedItem(), Character.valueOf('I'), "ingotSteel" })); + CraftingManager.getInstance().getRecipeList().add(new MekanismRecipe(new ItemStack(WalkieTalkie), new Object[] { + " O", "SCS", " S ", Character.valueOf('O'), "ingotOsmium", Character.valueOf('S'), "ingotSteel", Character.valueOf('C'), "circuitBasic" + })); //Factory Recipes CraftingManager.getInstance().getRecipeList().add(new MekanismRecipe(MekanismUtils.getFactory(FactoryTier.BASIC, RecipeType.SMELTING), new Object[] { diff --git a/common/mekanism/common/VoiceConnection.java b/common/mekanism/common/VoiceConnection.java index 9f900079b..ca10d0075 100644 --- a/common/mekanism/common/VoiceConnection.java +++ b/common/mekanism/common/VoiceConnection.java @@ -55,6 +55,8 @@ public class VoiceConnection } } } catch(Exception e) { + System.err.println("Error while starting server-based connection."); + e.printStackTrace(); open = false; } @@ -73,6 +75,7 @@ public class VoiceConnection if(byteCount > 0) { + System.out.println("Got data"); Mekanism.voiceManager.sendToPlayers(byteCount, audioData, VoiceConnection.this); } } catch(Exception e) { @@ -96,7 +99,10 @@ public class VoiceConnection socket.close(); Mekanism.voiceManager.connections.remove(this); - } catch(Exception e) {} + } catch(Exception e) { + System.err.println("Error while stopping server-based connection."); + e.printStackTrace(); + } } public void sendToPlayer(short byteCount, byte[] audioData, VoiceConnection connection) @@ -111,7 +117,10 @@ public class VoiceConnection output.write(audioData); output.flush(); - } catch(Exception e) {} + } catch(Exception e) { + System.err.println("Error while sending data to player."); + e.printStackTrace(); + } } public boolean canListen(int channel) @@ -122,9 +131,12 @@ public class VoiceConnection { if(itemStack.getItem() instanceof ItemWalkieTalkie) { - if(((ItemWalkieTalkie)itemStack.getItem()).getChannel(itemStack) == channel) + if(((ItemWalkieTalkie)itemStack.getItem()).getOn(itemStack)) { - return true; + if(((ItemWalkieTalkie)itemStack.getItem()).getChannel(itemStack) == channel) + { + return true; + } } } } @@ -143,7 +155,10 @@ public class VoiceConnection if(walkieTalkie != null) { - return walkieTalkie.getChannel(itemStack); + if(walkieTalkie.getOn(itemStack)) + { + return walkieTalkie.getChannel(itemStack); + } } } diff --git a/common/mekanism/common/VoiceServerManager.java b/common/mekanism/common/VoiceServerManager.java index 3497f941a..8ec1a2f59 100644 --- a/common/mekanism/common/VoiceServerManager.java +++ b/common/mekanism/common/VoiceServerManager.java @@ -2,6 +2,7 @@ package mekanism.common; import java.net.ServerSocket; import java.net.Socket; +import java.net.SocketException; import java.util.HashSet; import java.util.Set; @@ -25,6 +26,8 @@ public class VoiceServerManager implements IConnectionHandler public void start() { + System.out.println("Starting up voice server."); + try { serverSocket = new ServerSocket(36123); @@ -39,6 +42,12 @@ public class VoiceServerManager implements IConnectionHandler Socket s = serverSocket.accept(); VoiceConnection connection = new VoiceConnection(s); connections.add(connection); + System.out.println("Accepted new connection."); + } catch(SocketException e) { + if(!e.getLocalizedMessage().toLowerCase().equals("socket closed")) + { + e.printStackTrace(); + } } catch(Exception e) { System.err.println("Error while accepting connection."); e.printStackTrace(); @@ -60,6 +69,13 @@ public class VoiceServerManager implements IConnectionHandler serverSocket.close(); serverSocket = null; + + System.out.println("Shutting down voice server."); + } catch(SocketException e) { + if(!e.getLocalizedMessage().toLowerCase().equals("socket closed")) + { + e.printStackTrace(); + } } catch(Exception e) { System.err.println("Error while stopping voice server."); e.printStackTrace();