diff --git a/core/assets/scripts/base.js b/core/assets/scripts/base.js index 34a986cc77..4d8cad1710 100755 --- a/core/assets/scripts/base.js +++ b/core/assets/scripts/base.js @@ -19,6 +19,7 @@ const run = method => new java.lang.Runnable(){run: method} const boolf = method => new Boolf(){get: method} const boolp = method => new Boolp(){get: method} const cons = method => new Cons(){get: method} +const cons2 = method => new Cons2(){get: method} const prov = method => new Prov(){get: method} const newEffect = (lifetime, renderer) => new Effects.Effect(lifetime, new Effects.EffectRenderer({render: renderer})) Call = Packages.mindustry.gen.Call diff --git a/core/assets/scripts/global.js b/core/assets/scripts/global.js index fcb8f3ffee..c70ee27455 100755 --- a/core/assets/scripts/global.js +++ b/core/assets/scripts/global.js @@ -23,6 +23,7 @@ const boolp = method => new Boolp(){get: method} const floatf = method => new Floatf(){get: method} const floatp = method => new Floatp(){get: method} const cons = method => new Cons(){get: method} +const cons2 = method => new Cons2(){get: method} const prov = method => new Prov(){get: method} const func = method => new Func(){get: method} const newEffect = (lifetime, renderer) => new Effects.Effect(lifetime, new Effects.EffectRenderer({render: renderer})) diff --git a/core/src/mindustry/core/NetClient.java b/core/src/mindustry/core/NetClient.java index e222a3d091..71cafa21b0 100644 --- a/core/src/mindustry/core/NetClient.java +++ b/core/src/mindustry/core/NetClient.java @@ -1,6 +1,7 @@ package mindustry.core; import arc.*; +import arc.func.*; import arc.math.*; import arc.struct.*; import arc.util.*; @@ -49,6 +50,8 @@ public class NetClient implements ApplicationListener{ /** Byte stream for reading in snapshots. */ private ReusableByteInStream byteStream = new ReusableByteInStream(); private DataInputStream dataStream = new DataInputStream(byteStream); + /** Packet handlers for custom types of messages. */ + private ObjectMap>> customPacketHandlers = new ObjectMap<>(); public NetClient(){ @@ -126,6 +129,28 @@ public class NetClient implements ApplicationListener{ }); } + public void addPacketHandler(String type, Cons handler){ + customPacketHandlers.getOr(type, Array::new).add(handler); + } + + public Array> getPacketHandlers(String type){ + return customPacketHandlers.getOr(type, Array::new); + } + + @Remote(targets = Loc.server, variants = Variant.both) + public static void clientPacketReliable(String type, String contents){ + if(netClient.customPacketHandlers.containsKey(type)){ + for(Cons c : netClient.customPacketHandlers.get(type)){ + c.get(contents); + } + } + } + + @Remote(targets = Loc.server, variants = Variant.both, unreliable = true) + public static void clientPacketUnreliable(String type, String contents){ + clientPacketReliable(type, contents); + } + //called on all clients @Remote(targets = Loc.server, variants = Variant.both) public static void sendMessage(String message, String sender, Playerc playersender){ diff --git a/core/src/mindustry/core/NetServer.java b/core/src/mindustry/core/NetServer.java index ca00dfd5b4..986b345cf1 100644 --- a/core/src/mindustry/core/NetServer.java +++ b/core/src/mindustry/core/NetServer.java @@ -74,7 +74,7 @@ public class NetServer implements ApplicationListener{ /** Data stream for writing player sync data to. */ private DataOutputStream dataStream = new DataOutputStream(syncStream); /** Packet handlers for custom types of messages. */ - private ObjectMap>> customPacketHandlers = new ObjectMap<>(); + private ObjectMap>> customPacketHandlers = new ObjectMap<>(); public NetServer(){ @@ -474,11 +474,11 @@ public class NetServer implements ApplicationListener{ Log.debug("Packed @ compressed bytes of world data.", stream.size()); } - public void addPacketHandler(String type, Cons handler){ + public void addPacketHandler(String type, Cons2 handler){ customPacketHandlers.getOr(type, Array::new).add(handler); } - public Array> getPacketHandlers(String type){ + public Array> getPacketHandlers(String type){ return customPacketHandlers.getOr(type, Array::new); } @@ -503,18 +503,18 @@ public class NetServer implements ApplicationListener{ player.con().hasDisconnected = true; } - @Remote(targets = Loc.both, variants = Variant.both) - public static void packetReliable(String type, String contents){ + @Remote(targets = Loc.client) + public static void serverPacketReliable(Playerc player, String type, String contents){ if(netServer.customPacketHandlers.containsKey(type)){ - for(Cons c : netServer.customPacketHandlers.get(type)){ - c.get(contents); + for(Cons2 c : netServer.customPacketHandlers.get(type)){ + c.get(player, contents); } } } - @Remote(targets = Loc.both, variants = Variant.both, unreliable = true) - public static void packetUnreliable(String type, String contents){ - packetReliable(type, contents); + @Remote(targets = Loc.client, unreliable = true) + public static void serverPacketUnreliable(Playerc player, String type, String contents){ + serverPacketReliable(player, type, contents); } @Remote(targets = Loc.client, unreliable = true)