mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-01-10 12:42:52 +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.SceneEntityInfoOuterClass.SceneEntityInfo;
|
||||
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.PacketEntityFightPropChangeReasonNotify;
|
||||
import emu.grasscutter.server.packet.send.PacketEntityFightPropUpdateNotify;
|
||||
@ -314,4 +315,21 @@ public class EntityAvatar extends GameEntity {
|
||||
//
|
||||
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
|
||||
*/
|
||||
|
@ -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