Archived
0

attempt to implement an event model of Player movement

This commit is contained in:
2018-08-11 19:30:36 +03:00
parent a3880f49ec
commit 916a78c660
7 changed files with 91 additions and 10 deletions

View File

@@ -14,6 +14,7 @@ import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.util.AttributeKey;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import mc.core.events.EventBusGetter;
import mc.core.network.Server;
import mc.core.network.StartServerException;
import mc.core.network.proto_1_12_2.State;
@@ -62,6 +63,9 @@ public class NettyServer implements Server {
@Override
public void start() throws StartServerException {
log.info("Use protocol {}", StatusResponsePacket.NAME);
EventBusGetter.INSTANCE.register(new PlayerEventListener());
bossGroup = new NioEventLoopGroup(1);
workerGroup = new NioEventLoopGroup(workerGroupCount);

View File

@@ -0,0 +1,21 @@
package mc.core.network.proto_1_12_2.netty;
import com.google.common.eventbus.Subscribe;
import lombok.extern.slf4j.Slf4j;
import mc.core.events.SC_PlayerMoveEvent;
import mc.core.network.proto_1_12_2.TeleportManager;
import mc.core.network.proto_1_12_2.packets.PlayerPositionAndLookPacket;
@Slf4j
class PlayerEventListener {
@Subscribe
public void playerMoveEventHandler(SC_PlayerMoveEvent event) {
log.debug("(SC) playerMoveEventHandler()");
PlayerPositionAndLookPacket packet = new PlayerPositionAndLookPacket();
packet.setLocation(event.getNewLocation());
int tpId = TeleportManager.getInstance().append(event.getPlayer(), event.getNewLocation());
packet.setTeleportId(tpId);
event.getPlayer().getChannel().writeAndFlush(packet);
}
}

View File

@@ -5,7 +5,12 @@
package mc.core.network.proto_1_12_2.netty.handlers;
import io.netty.channel.Channel;
import lombok.extern.slf4j.Slf4j;
import mc.core.EntityLocation;
import mc.core.Location;
import mc.core.chat.ChatProcessor;
import mc.core.events.EventBusGetter;
import mc.core.events.CS_PlayerMoveEvent;
import mc.core.network.proto_1_12_2.TeleportManager;
import mc.core.network.proto_1_12_2.packets.*;
import mc.core.player.Player;
@@ -14,6 +19,7 @@ import org.springframework.stereotype.Component;
import static mc.core.network.proto_1_12_2.netty.NettyServer.ATTR_PLAYER;
@Slf4j
@Component
public class PlayHandler extends AbstractStateHandler implements PlayStateHandler {
@Autowired
@@ -63,8 +69,23 @@ public class PlayHandler extends AbstractStateHandler implements PlayStateHandle
@Handler
public void onPlayerMove(Channel channel, PlayerPositionPacket packet) {
log.debug("(Netty) onPlayerMove()");
Player player = channel.attr(ATTR_PLAYER).get();
player.getLocation().setXYZ(packet.getX(), packet.getY(), packet.getZ());
if (player.getLocation().getX() == packet.getX() &&
player.getLocation().getY() == packet.getY() &&
player.getLocation().getZ() == packet.getZ()) {
return;
}
CS_PlayerMoveEvent event = new CS_PlayerMoveEvent(player, player.getLocation().clone());
event.setNewLocation(new EntityLocation(
packet.getX(), packet.getY(), packet.getZ(),
player.getLocation().getYaw(),
player.getLocation().getPitch(),
null
));
EventBusGetter.INSTANCE.post(event);
}
@Handler