diff --git a/core/assets/version.properties b/core/assets/version.properties index ab04080e74..3d263e3f83 100644 --- a/core/assets/version.properties +++ b/core/assets/version.properties @@ -1,5 +1,5 @@ #Autogenerated file. Do not modify. -#Mon Feb 12 16:05:35 EST 2018 +#Mon Feb 12 17:32:19 EST 2018 version=beta androidBuildCode=177 name=Mindustry diff --git a/core/src/io/anuke/mindustry/core/NetClient.java b/core/src/io/anuke/mindustry/core/NetClient.java index d5525aaf76..78ad5851aa 100644 --- a/core/src/io/anuke/mindustry/core/NetClient.java +++ b/core/src/io/anuke/mindustry/core/NetClient.java @@ -284,7 +284,7 @@ public class NetClient extends Module { Tile tile = world.tile(packet.position); if (tile == null || tile.entity == null) return; Tile next = tile.getNearby(packet.rotation); - tile.entity.items[packet.itemid]--; + tile.entity.items[packet.itemid] --; next.block().handleItem(Item.getByID(packet.itemid), next, tile); }; @@ -294,6 +294,20 @@ public class NetClient extends Module { r.run(); } }); + + Net.handleClient(ItemAddPacket.class, packet -> { + Runnable r = () -> { + Tile tile = world.tile(packet.position); + if (tile == null || tile.entity == null) return; + tile.entity.items[packet.itemid] ++; + }; + + if(threads.isEnabled()){ + threads.run(r); + }else{ + r.run(); + } + }); } @Override diff --git a/core/src/io/anuke/mindustry/core/Renderer.java b/core/src/io/anuke/mindustry/core/Renderer.java index 4daafca248..22881b3e21 100644 --- a/core/src/io/anuke/mindustry/core/Renderer.java +++ b/core/src/io/anuke/mindustry/core/Renderer.java @@ -152,7 +152,7 @@ public class Renderer extends RendererModule{ camera.position.set(lastx - deltax, lasty - deltay, 0); - if(debug) record(); //this only does something if GdxGifRecorder is on the class path, which it usually isn't + if(debug && ui.chatfrag.chatOpen()) record(); //this only does something if GdxGifRecorder is on the class path, which it usually isn't } } diff --git a/core/src/io/anuke/mindustry/net/NetEvents.java b/core/src/io/anuke/mindustry/net/NetEvents.java index b794c1461e..64e1e3af37 100644 --- a/core/src/io/anuke/mindustry/net/NetEvents.java +++ b/core/src/io/anuke/mindustry/net/NetEvents.java @@ -137,4 +137,11 @@ public class NetEvents { packet.itemid = (byte)item.id; Net.send(packet, SendMode.udp); } + + public static void handleItemAdd(Tile tile, Item item){ + ItemAddPacket packet = new ItemAddPacket(); + packet.position = tile.packedPosition(); + packet.itemid = (byte)item.id; + Net.send(packet, SendMode.udp); + } } diff --git a/core/src/io/anuke/mindustry/net/Packets.java b/core/src/io/anuke/mindustry/net/Packets.java index fee8a6869a..47bf18aabf 100644 --- a/core/src/io/anuke/mindustry/net/Packets.java +++ b/core/src/io/anuke/mindustry/net/Packets.java @@ -522,4 +522,21 @@ public class Packets { itemid = buffer.get(); } } + + public static class ItemAddPacket implements Packet{ + public int position; + public byte itemid; + + @Override + public void write(ByteBuffer buffer) { + buffer.putInt(position); + buffer.put(itemid); + } + + @Override + public void read(ByteBuffer buffer) { + position = buffer.getInt(); + itemid = buffer.get(); + } + } } diff --git a/core/src/io/anuke/mindustry/net/Registrator.java b/core/src/io/anuke/mindustry/net/Registrator.java index b1544ffc27..e569bb4249 100644 --- a/core/src/io/anuke/mindustry/net/Registrator.java +++ b/core/src/io/anuke/mindustry/net/Registrator.java @@ -38,7 +38,8 @@ public class Registrator { CustomMapPacket.class, MapAckPacket.class, EntitySpawnPacket.class, - ItemTransferPacket.class + ItemTransferPacket.class, + ItemAddPacket.class, }; private static ObjectIntMap> ids = new ObjectIntMap<>(); diff --git a/core/src/io/anuke/mindustry/world/Block.java b/core/src/io/anuke/mindustry/world/Block.java index 1d7518c8da..ffc356e3a8 100644 --- a/core/src/io/anuke/mindustry/world/Block.java +++ b/core/src/io/anuke/mindustry/world/Block.java @@ -150,7 +150,12 @@ public class Block{ public void handleItem(Item item, Tile tile, Tile source){ if(tile.entity == null) return; - tile.entity.addItem(item, 1); + + if(Net.server() || !Net.active()){ + tile.entity.addItem(item, 1); + + if(Net.server()) NetEvents.handleItemAdd(tile, item); + } } public boolean acceptItem(Item item, Tile tile, Tile source){ diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Router.java b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Router.java index 376367f56d..1144a7d24b 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Router.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Router.java @@ -48,7 +48,7 @@ public class Router extends Block{ @Override public void handleItem(Item item, Tile tile, Tile source){ super.handleItem(item, tile, source); - tile.setExtra((byte)tile.relativeTo(source.x, source.y)); + tile.setExtra(tile.relativeTo(source.x, source.y)); } @Override diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Teleporter.java b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Teleporter.java index bb67cc385d..b7acb09e53 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Teleporter.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Teleporter.java @@ -4,11 +4,13 @@ import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.ObjectSet; import io.anuke.mindustry.entities.TileEntity; +import io.anuke.mindustry.net.Net; +import io.anuke.mindustry.net.NetEvents; import io.anuke.mindustry.resource.Item; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.types.PowerBlock; -import io.anuke.ucore.graphics.Draw; import io.anuke.ucore.core.Timers; +import io.anuke.ucore.graphics.Draw; import io.anuke.ucore.scene.ui.ButtonGroup; import io.anuke.ucore.scene.ui.ImageButton; import io.anuke.ucore.scene.ui.layout.Table; @@ -133,8 +135,13 @@ public class Teleporter extends PowerBlock{ Array links = findLinks(tile); if(links.size > 0){ - Tile target = links.get(Mathf.random(0, links.size-1)); - target.entity.addItem(item, 1); + + if(Net.server() || !Net.active()){ + Tile target = links.random(); + target.entity.addItem(item, 1); + + if(Net.server()) NetEvents.handleItemAdd(target, item); + } } entity.power -= powerPerItem; @@ -170,6 +177,7 @@ public class Teleporter extends PowerBlock{ } } } + for(Tile remove : removal) teleporters[entity.color].remove(remove); diff --git a/server/src/io/anuke/mindustry/server/ServerControl.java b/server/src/io/anuke/mindustry/server/ServerControl.java index 2dda0b6ba0..39326d44e7 100644 --- a/server/src/io/anuke/mindustry/server/ServerControl.java +++ b/server/src/io/anuke/mindustry/server/ServerControl.java @@ -188,7 +188,7 @@ public class ServerControl extends Module { return; } - netCommon.sendMessage("[DARK_GRAY][[Server]:[] " + arg[0]); + netCommon.sendMessage("[GRAY][[Server]:[] " + arg[0]); info("&lyServer: &lb{0}", arg[0]); }).mergeArgs();