Archived
0

Use entity (!)

клиент шлет этот пакет только при использовании пр.кнопки мыши
This commit is contained in:
2018-05-23 12:56:48 +03:00
parent c763ef5ac7
commit ab43db9765
5 changed files with 56 additions and 0 deletions

View File

@@ -62,6 +62,13 @@ public class InMemoryPlayerManager implements PlayerManager, Runnable {
.findFirst(); .findFirst();
} }
@Override
public Optional<Player> getPlayerById(final int id) {
return players.stream()
.filter(player -> player.getId() == id)
.findFirst();
}
@Override @Override
public List<Player> getPlayers() { public List<Player> getPlayers() {
return players.stream().filter(Player::isOnline).collect(Collectors.toList()); return players.stream().filter(Player::isOnline).collect(Collectors.toList());

View File

@@ -15,6 +15,7 @@ public interface PlayerManager {
void joinServer(Player player); void joinServer(Player player);
void leftServer(Player player); void leftServer(Player player);
Optional<Player> getPlayer(String name); Optional<Player> getPlayer(String name);
Optional<Player> getPlayerById(int id);
List<Player> getPlayers(); List<Player> getPlayers();
int getCountOnlinePlayers(); int getCountOnlinePlayers();
NetChannel getBroadcastChannel(); NetChannel getBroadcastChannel();

View File

@@ -17,6 +17,7 @@ public class PacketManager {
.put(0x03, ChatMessagePacket.class) .put(0x03, ChatMessagePacket.class)
.put(0x04, TimeUpdatePacket.class) .put(0x04, TimeUpdatePacket.class)
.put(0x06, SpawnPositionPacket.class) .put(0x06, SpawnPositionPacket.class)
.put(0x07, UseEntityPacket.class)
.put(0x0B, PlayerPositionPacket.class) .put(0x0B, PlayerPositionPacket.class)
.put(0x0C, PlayerLookPacket.class) .put(0x0C, PlayerLookPacket.class)
.put(0x0D, PositionAndLookPacket.class) .put(0x0D, PositionAndLookPacket.class)

View File

@@ -0,0 +1,29 @@
/*
* DmitriyMX <dimon550@gmail.com>
* 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();
}
}

View File

@@ -292,4 +292,22 @@ public class PacketHandler extends SimpleChannelInboundHandler<CSPacket> {
pl.getChannel().writeAndFlush(packet); pl.getChannel().writeAndFlush(packet);
}); });
} }
private void onUseEntityPacket(Channel channel, UseEntityPacket packet) {
Optional<Player> 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());
}
} }