mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-01-10 17:33:02 +08:00
Implement PlayerMoveEvent
This commit is contained in:
parent
aa31851e77
commit
80e75fd023
@ -30,6 +30,7 @@ import emu.grasscutter.net.proto.SceneAvatarInfoOuterClass.SceneAvatarInfo;
|
|||||||
import emu.grasscutter.net.proto.SceneEntityAiInfoOuterClass.SceneEntityAiInfo;
|
import emu.grasscutter.net.proto.SceneEntityAiInfoOuterClass.SceneEntityAiInfo;
|
||||||
import emu.grasscutter.net.proto.SceneEntityInfoOuterClass.SceneEntityInfo;
|
import emu.grasscutter.net.proto.SceneEntityInfoOuterClass.SceneEntityInfo;
|
||||||
import emu.grasscutter.net.proto.VectorOuterClass.Vector;
|
import emu.grasscutter.net.proto.VectorOuterClass.Vector;
|
||||||
|
import emu.grasscutter.server.event.player.PlayerMoveEvent;
|
||||||
import emu.grasscutter.server.packet.send.PacketAvatarFightPropUpdateNotify;
|
import emu.grasscutter.server.packet.send.PacketAvatarFightPropUpdateNotify;
|
||||||
import emu.grasscutter.server.packet.send.PacketEntityFightPropChangeReasonNotify;
|
import emu.grasscutter.server.packet.send.PacketEntityFightPropChangeReasonNotify;
|
||||||
import emu.grasscutter.server.packet.send.PacketEntityFightPropUpdateNotify;
|
import emu.grasscutter.server.packet.send.PacketEntityFightPropUpdateNotify;
|
||||||
@ -314,4 +315,21 @@ public class EntityAvatar extends GameEntity {
|
|||||||
//
|
//
|
||||||
return abilityControlBlock.build();
|
return abilityControlBlock.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Move this entity to a new position.
|
||||||
|
* Additionally invoke player move event.
|
||||||
|
* @param newPosition The new position.
|
||||||
|
* @param rotation The new rotation.
|
||||||
|
*/
|
||||||
|
@Override public void move(Position newPosition, Position rotation) {
|
||||||
|
// Invoke player move event.
|
||||||
|
PlayerMoveEvent event = new PlayerMoveEvent(
|
||||||
|
this.getPlayer(), PlayerMoveEvent.MoveType.PLAYER,
|
||||||
|
this.getPosition(), newPosition
|
||||||
|
); event.call();
|
||||||
|
|
||||||
|
// Set position and rotation.
|
||||||
|
super.move(event.getDestination(), rotation);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -228,6 +228,17 @@ public abstract class GameEntity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Move this entity to a new position.
|
||||||
|
* @param position The new position.
|
||||||
|
* @param rotation The new rotation.
|
||||||
|
*/
|
||||||
|
public void move(Position position, Position rotation) {
|
||||||
|
// Set the position and rotation.
|
||||||
|
this.getPosition().set(position);
|
||||||
|
this.getRotation().set(rotation);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when this entity is added to the world
|
* Called when this entity is added to the world
|
||||||
*/
|
*/
|
||||||
|
@ -0,0 +1,47 @@
|
|||||||
|
package emu.grasscutter.server.event.player;
|
||||||
|
|
||||||
|
import emu.grasscutter.game.player.Player;
|
||||||
|
import emu.grasscutter.server.event.Cancellable;
|
||||||
|
import emu.grasscutter.server.event.types.PlayerEvent;
|
||||||
|
import emu.grasscutter.utils.Position;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: Allow plugins to change the position of the player.
|
||||||
|
*/
|
||||||
|
public final class PlayerMoveEvent extends PlayerEvent implements Cancellable {
|
||||||
|
private final MoveType type;
|
||||||
|
private final Position from;
|
||||||
|
private final Position to;
|
||||||
|
|
||||||
|
public PlayerMoveEvent(Player player, MoveType type, Position from, Position to) {
|
||||||
|
super(player);
|
||||||
|
|
||||||
|
this.type = type;
|
||||||
|
this.from = from;
|
||||||
|
this.to = to;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MoveType getMoveType() {
|
||||||
|
return this.type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Position getSource() {
|
||||||
|
return this.from;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Position getDestination() {
|
||||||
|
return this.to;
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum MoveType {
|
||||||
|
/**
|
||||||
|
* The player has sent a combat invocation to move.
|
||||||
|
*/
|
||||||
|
PLAYER,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The server has requested that the player moves.
|
||||||
|
*/
|
||||||
|
SERVER
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user