diff --git a/core/src/main/java/mc/core/player/InMemoryPlayerManager.java b/core/src/main/java/mc/core/player/InMemoryPlayerManager.java index 91b487a..a873c2c 100644 --- a/core/src/main/java/mc/core/player/InMemoryPlayerManager.java +++ b/core/src/main/java/mc/core/player/InMemoryPlayerManager.java @@ -62,6 +62,13 @@ public class InMemoryPlayerManager implements PlayerManager, Runnable { .findFirst(); } + @Override + public Optional getPlayerById(final int id) { + return players.stream() + .filter(player -> player.getId() == id) + .findFirst(); + } + @Override public List getPlayers() { return players.stream().filter(Player::isOnline).collect(Collectors.toList()); diff --git a/core/src/main/java/mc/core/player/PlayerManager.java b/core/src/main/java/mc/core/player/PlayerManager.java index 42e1182..8dd1c7a 100644 --- a/core/src/main/java/mc/core/player/PlayerManager.java +++ b/core/src/main/java/mc/core/player/PlayerManager.java @@ -15,6 +15,7 @@ public interface PlayerManager { void joinServer(Player player); void leftServer(Player player); Optional getPlayer(String name); + Optional getPlayerById(int id); List getPlayers(); int getCountOnlinePlayers(); NetChannel getBroadcastChannel(); diff --git a/proto125/src/main/java/mc/core/network/proto_125/packets/PacketManager.java b/proto125/src/main/java/mc/core/network/proto_125/packets/PacketManager.java index 9c3d88c..cd4a493 100644 --- a/proto125/src/main/java/mc/core/network/proto_125/packets/PacketManager.java +++ b/proto125/src/main/java/mc/core/network/proto_125/packets/PacketManager.java @@ -17,6 +17,7 @@ public class PacketManager { .put(0x03, ChatMessagePacket.class) .put(0x04, TimeUpdatePacket.class) .put(0x06, SpawnPositionPacket.class) + .put(0x07, UseEntityPacket.class) .put(0x0B, PlayerPositionPacket.class) .put(0x0C, PlayerLookPacket.class) .put(0x0D, PositionAndLookPacket.class) diff --git a/proto125/src/main/java/mc/core/network/proto_125/packets/UseEntityPacket.java b/proto125/src/main/java/mc/core/network/proto_125/packets/UseEntityPacket.java new file mode 100644 index 0000000..b36fd2a --- /dev/null +++ b/proto125/src/main/java/mc/core/network/proto_125/packets/UseEntityPacket.java @@ -0,0 +1,29 @@ +/* + * DmitriyMX + * 2018-05-23 + */ +package mc.core.network.proto_125.packets; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.ToString; +import mc.core.network.CSPacket; +import mc.core.network.NetStream; + +@AllArgsConstructor +@NoArgsConstructor +@Getter +@ToString +public class UseEntityPacket implements CSPacket { + private int playerId; + private int targetId; + private boolean leftMouseButton; + + @Override + public void readSelf(NetStream netStream) { + playerId = netStream.readInt(); + targetId = netStream.readInt(); + leftMouseButton = netStream.readBoolean(); + } +} diff --git a/proto125_netty/src/main/java/mc/core/network/proto_125/netty/PacketHandler.java b/proto125_netty/src/main/java/mc/core/network/proto_125/netty/PacketHandler.java index 26d4931..41ce17c 100644 --- a/proto125_netty/src/main/java/mc/core/network/proto_125/netty/PacketHandler.java +++ b/proto125_netty/src/main/java/mc/core/network/proto_125/netty/PacketHandler.java @@ -292,4 +292,22 @@ public class PacketHandler extends SimpleChannelInboundHandler { pl.getChannel().writeAndFlush(packet); }); } + + private void onUseEntityPacket(Channel channel, UseEntityPacket packet) { + Optional optPlayer = playerManager.getPlayerById(packet.getPlayerId()); + if (!optPlayer.isPresent()) { + log.debug("Player id {} not found"); + return; + } + Player player = optPlayer.get(); + + optPlayer = playerManager.getPlayerById(packet.getTargetId()); + if (!optPlayer.isPresent()) { + log.debug("Target id {} not found"); + return; + } + Player target = optPlayer.get(); + + log.info("<{}> {} clicked <{}>", player.getName(), (packet.isLeftMouseButton() ? "left" : "right"), target.getName()); + } }