Jump to content

SmokingDude

Members
  • Posts

    10
  • Joined

  • Last visited

Posts posted by SmokingDude

  1. Yes sorry for my bad english, on the IRCClient class i have a method called '' send '' who basically send a string to the server, this method is called from the KeybindListener when the player hit the '' R '' key, When the server receives a message it is supposed to write ''message received from the client : the message '' But the server does not print anything in the terminal which means that it receives nothing and I think it comes from the fact that IRCClient is declared in a different thread to the thread in which the keyinput event is, and I do not know how to be able to call 'send' from the thread for it to works 

  2. On 4/22/2021 at 4:01 PM, diesieben07 said:

    For example, yes.

    I tried I mean I succeeded and until then there's no more worries the server gets the connection, minecraft no longer stops, but I can not communicate between the client and the server, the client must send a certain string to the server when it performs a specific action no matter how I do it (synchronised irc or synchronised boolean etc the client never sends anything to the server, would you have a lead on what I need to do to get to settle this please) 

  3. Yes i have a class called '' KeybindListener '' And inside I have this method :

    @SubscribeEvent

    public void onKeyPress(InputEvent.KeyInputEvent event) { if(Keyboard.isKeyDown(Keyboard.KEY_R))

    if(irc==null) {

    irc = new IRCClient(''samuele.site'',2406);

    irc.run();

    }

    showgui();

    }

     

    I do register this class with MinecraftForge.EVENT_BUS.register(new KeybindListener()) ;

    Quote

     

  4. 5 hours ago, diesieben07 said:

    Netty is a library for network communication. Minecraft already uses it for its networking so you can "just use it".

    I implémented Netty everything seems working the server actually receive the connection of the client but the game still stop when i connect to the server, how am I supposed to use Netty to get minecraft working ? 

    The client part source : https://pastebin.com/v5dN94BJ

  5. 4 hours ago, diesieben07 said:

    Using raw threads, raw sockets, ObjectOutputStream and terrible exception handling. All of these are no-gos. You should use Netty.

    So netty allow me to communicate between my minecraft and a distant vps right ? There is some way to use it with forge or should i use it like i can use it on normal Java programme ? 

  6. Hello, I have a project that consists of linking several clients together without the mod being installed on the server, even if the players are on a different server the communication must be possible so I decided to use the Socket after several attempts it works the worry is that after calling the method to accept a connection on the server side, minecraft stops as if the main thread stopped when I close the vps minecraft resumes as if nothing was wrong, I use threads whether in client or server to make the connection and exchange information, is the socket the right way used if yes how could I do not stop the main thread of minecraft here are the client code and the server one 

      public ServerListener() {
           debug("Creating the server");
           clientList = new ArrayList<ConnectionToClient>();
           messages = new LinkedBlockingQueue<Object>();
           debug("Client list is created");
           try {
               serverSocket = new ServerSocket(2406);
               debug("opening the port 2406");
           } catch (IOException e) {
             e.printStackTrace();
               debug(e.getMessage());
           }
        debug("creating the accept thread");
           Thread accept = new Thread() {
               public void run() {
        debug("thread created");
                   while (true) {
                       try {
                           Socket s = serverSocket.accept();
    if(s!=null) {
                           debug("new client joined");
                           clientList.add(new ConnectionToClient(s));
                           debug("new client was accepted ["+ s.getInetAddress() + "/" + s.getPort()+"]");
                    
    }
     } catch (IOException e) {
                           e.printStackTrace();
                          debug(e.getMessage());
                       }
                   }
               }
           };
           accept.setDaemon(true);
           accept.start();
    
           Thread messageHandling = new Thread() {
               public void run() {
                   while (true) {
                       try {
                           Object message = messages.take();
                           debug("we parse the ping");
                           parse(message);
                           System.out.println("Message Received: " + message);
                       } catch (InterruptedException e) {
                       }
                   }
               }
           };
    
           messageHandling.setDaemon(true);
           messageHandling.start();
       }
    
       private void parse(Object message) {
           String msg = String.valueOf(message);
           if(msg.contains("-")) {
               if(msg.contains("key")) {
                   debug("key detected");
                   key = msg.split("-")[1];
               } else if(msg.contains("name")) {
                   debug("name detected");
                   name = msg.split("-")[1];
               } else if(msg.contains("world")) {
                   debug("worldname detected");
                   world = msg.split("-")[1];
               } else if(msg.contains("server")) {
                   debug("servername detected");
                   server = msg.split("-")[1];
               } else if(msg.contains("x")) {
                   debug("x detected");
                   x = Integer.parseInt(msg.split("-")[1]);
               } else if(msg.contains("y")) {
               debug("y detected");
                   y = Integer.parseInt(msg.split("-")[1]);
               } else if(msg.contains("z")) {
                    debug("z detected");
                   z = Integer.parseInt(msg.split("-")[1]);
               } else if(msg.contains("isEntity")) {
                       debug("entity detected");
                   entity = msg.split("-")[1].equalsIgnoreCase("true");
               } else if(msg.contains("ticks")) {
                   debug("ticks detected");
                   lTicks = Integer.parseInt(msg.split("-")[1]);
               } else if(msg.contains("end")) {
                   debug("we got everything detected");
                   toSend = new IrcMPING(key, name, world, server, x, y, z, entity, lTicks);
                   for(String str : toSend.getArgs()) {
                       
                       sendToAll(str);
                   }
                   toSend=null;
               }
           }
       }
    
       public void sendToOne(int index, Object message) throws IndexOutOfBoundsException {
           clientList.get(index).write(message);
       }
    
       public void sendToAll(Object message) {
           for (ConnectionToClient client : clientList) {
               debug("sending the ping to " + client.socket.getInetAddress());
               client.write(message);
           }
       }
    
       public void debug(String str) {
               System.out.println("SOROS DEBUG [MULTIPING] : " + str) ;
         
           }
    
       private class ConnectionToClient {
           ObjectInputStream in;
           ObjectOutputStream out;
           Socket socket;
    
           ConnectionToClient(Socket socket) throws IOException {
               this.socket = socket;
               in = new ObjectInputStream(socket.getInputStream());
               out = new ObjectOutputStream(socket.getOutputStream());
    
               Thread read = new Thread() {
                   public void run() {
                       while (true) {
                           try {
                               Object obj = in.readObject();
                               messages.put(obj);
                           } catch (IOException e) {
                               e.printStackTrace();
                           } catch (InterruptedException e) {
                               e.printStackTrace();
                           } catch (ClassNotFoundException e) {
                               e.printStackTrace();
                           }
                       }
                   }
               };
    
               read.setDaemon(true); // terminate when main ends
               read.start();
           }
    
           public void write(Object obj) {
               try {
         
                   out.writeObject(obj);
               } catch (IOException e) {
                   e.printStackTrace();
               }
           }
           
        
       }
    
    }
    public IRCClient() throws IOException {
            socket = new Socket(InetAddress.getByAddress(new byte[]{(byte) 185, (byte) 242, (byte) 180,97}), 2406);
            messages = new LinkedBlockingQueue<Object>();
            server = new ConnectionToServer(socket);
    
            Thread messageHandling = new Thread() {
                public void run() {
                    while (true) {
                        try {
                            Object message = messages.take();
                            parse(message);
                            System.out.println("Message Received: " + message);
                        } catch (InterruptedException e) {
                        }
                    }
                }
            };
    
            messageHandling.setDaemon(true);
            messageHandling.start();
        }
    
        private void parse(Object message) {
            String msg = String.valueOf(message);
            if (msg.contains("-")) {
                if (msg.contains("key")) {
                    key = msg.split("-")[1];
                } else if (msg.contains("name")) {
                    name = msg.split("-")[1];
                } else if (msg.contains("world")) {
                    world = msg.split("-")[1];
                } else if (msg.contains("server")) {
                    serverName = msg.split("-")[1];
                } else if (msg.contains("x")) {
                    x = Integer.parseInt(msg.split("-")[1]);
                } else if (msg.contains("y")) {
                    y = Integer.parseInt(msg.split("-")[1]);
                } else if (msg.contains("z")) {
                    z = Integer.parseInt(msg.split("-")[1]);
                } else if (msg.contains("isEntity")) {
                    entity = msg.split("-")[1].equalsIgnoreCase("true");
                } else if (msg.contains("ticks")) {
                    lTicks = Integer.parseInt(msg.split("-")[1]);
                } else if (msg.contains("end")) {
                    if (key.equalsIgnoreCase(MultiPingMod.getKey()) && !name.equalsIgnoreCase(Minecraft.getMinecraft().thePlayer.getName())) {
                        MultiPing m = new MultiPing(name, world, serverName, x, y, z, entity);
                        MultiPingMod.setTime(lTicks);
                        m.render = true;
                        if (MultiPingMod.render.getToRender().containsKey(name)) {
                            MultiPingMod.render.getToRender().get(name).render = false;
                            MultiPingMod.render.getToRender().remove(name);
                        }
                        MultiPingMod.render.addToRender(m);
                    }
                }
            }
        }
    
        public void send(Object obj) {
            server.write(obj);
        }
    
        private class ConnectionToServer {
            ObjectInputStream in;
            ObjectOutputStream out;
            Socket socket;
    
            ConnectionToServer(Socket socket) throws IOException {
                this.socket = socket;
                in = new ObjectInputStream(socket.getInputStream());
                out = new ObjectOutputStream(socket.getOutputStream());
    
                Thread read = new Thread() {
                    public void run() {
                        while (true) {
                            try {
                                Object obj = in.readObject();
                                messages.put(obj);
                            } catch (IOException e) {
                                e.printStackTrace();
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            } catch (ClassNotFoundException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                };
    
                read.setDaemon(true);
                read.start();
            }
    
            private void write(Object obj) {
                try {
                    out.writeObject(obj);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
    
        }

     

  7. private static final String PROTOCOL_VERSION = "1.0";

    public static final SimpleChannel INSTANCE = NetworkRegistry.newSimpleChannel(

        new ResourceLocation("cosmod", "main"),

        () -> PROTOCOL_VERSION,

        PROTOCOL_VERSION::equals,

        PROTOCOL_VERSION::equals

    );

    I actually have this in a class i don't have to specify i register the simpleimpl anywhere ? 

  8. I'm currently working on a mod for a server and I'd like to make sure that people who connect without the mod is disconnected, but I have no idea how I should do it, the mod will be installed on the server side and will have to be installed on the client side, but how do I know if it is well installed on the client side? 

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.