mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-26 14:30:17 +01:00
Port basic lookAt methods from Player to Entity (#11775)
This commit is contained in:
parent
321d17cc8c
commit
d568e175ee
4 changed files with 48 additions and 44 deletions
|
@ -3,6 +3,7 @@ package org.bukkit.entity;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import io.papermc.paper.entity.LookAnchor;
|
||||||
import org.bukkit.Chunk; // Paper
|
import org.bukkit.Chunk; // Paper
|
||||||
import org.bukkit.EntityEffect;
|
import org.bukkit.EntityEffect;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
@ -150,6 +151,26 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent
|
||||||
* @return <code>true</code> if the teleport was successful
|
* @return <code>true</code> if the teleport was successful
|
||||||
*/
|
*/
|
||||||
boolean teleport(@NotNull Location location, @NotNull TeleportCause cause, @NotNull io.papermc.paper.entity.TeleportFlag @NotNull... teleportFlags);
|
boolean teleport(@NotNull Location location, @NotNull TeleportCause cause, @NotNull io.papermc.paper.entity.TeleportFlag @NotNull... teleportFlags);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Causes the entity to look towards the given position.
|
||||||
|
*
|
||||||
|
* @param x x coordinate
|
||||||
|
* @param y y coordinate
|
||||||
|
* @param z z coordinate
|
||||||
|
* @param entityAnchor What part of the entity should face the given position
|
||||||
|
*/
|
||||||
|
void lookAt(double x, double y, double z, @NotNull LookAnchor entityAnchor);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Causes the entity to look towards the given position.
|
||||||
|
*
|
||||||
|
* @param position Position to look at in the player's current world
|
||||||
|
* @param entityAnchor What part of the entity should face the given position
|
||||||
|
*/
|
||||||
|
default void lookAt(@NotNull io.papermc.paper.math.Position position, @NotNull LookAnchor entityAnchor) {
|
||||||
|
this.lookAt(position.x(), position.y(), position.z(), entityAnchor);
|
||||||
|
}
|
||||||
// Paper end - Teleport API
|
// Paper end - Teleport API
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -9,6 +9,7 @@ import java.util.Date;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
import io.papermc.paper.entity.LookAnchor;
|
||||||
import org.bukkit.BanEntry;
|
import org.bukkit.BanEntry;
|
||||||
import org.bukkit.DyeColor;
|
import org.bukkit.DyeColor;
|
||||||
import org.bukkit.Effect;
|
import org.bukkit.Effect;
|
||||||
|
@ -3730,26 +3731,6 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
|
||||||
*/
|
*/
|
||||||
void setRotation(float yaw, float pitch);
|
void setRotation(float yaw, float pitch);
|
||||||
|
|
||||||
/**
|
|
||||||
* Causes the player to look towards the given position.
|
|
||||||
*
|
|
||||||
* @param x x coordinate
|
|
||||||
* @param y y coordinate
|
|
||||||
* @param z z coordinate
|
|
||||||
* @param playerAnchor What part of the player should face the given position
|
|
||||||
*/
|
|
||||||
void lookAt(double x, double y, double z, @NotNull io.papermc.paper.entity.LookAnchor playerAnchor);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Causes the player to look towards the given position.
|
|
||||||
*
|
|
||||||
* @param position Position to look at in the player's current world
|
|
||||||
* @param playerAnchor What part of the player should face the given position
|
|
||||||
*/
|
|
||||||
default void lookAt(@NotNull io.papermc.paper.math.Position position, @NotNull io.papermc.paper.entity.LookAnchor playerAnchor) {
|
|
||||||
this.lookAt(position.x(), position.y(), position.z(), playerAnchor);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Causes the player to look towards the given entity.
|
* Causes the player to look towards the given entity.
|
||||||
*
|
*
|
||||||
|
@ -3757,7 +3738,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
|
||||||
* @param playerAnchor What part of the player should face the entity
|
* @param playerAnchor What part of the player should face the entity
|
||||||
* @param entityAnchor What part of the entity the player should face
|
* @param entityAnchor What part of the entity the player should face
|
||||||
*/
|
*/
|
||||||
void lookAt(@NotNull org.bukkit.entity.Entity entity, @NotNull io.papermc.paper.entity.LookAnchor playerAnchor, @NotNull io.papermc.paper.entity.LookAnchor entityAnchor);
|
void lookAt(@NotNull org.bukkit.entity.Entity entity, @NotNull LookAnchor playerAnchor, @NotNull LookAnchor entityAnchor);
|
||||||
// Paper end - Teleport API
|
// Paper end - Teleport API
|
||||||
|
|
||||||
// Paper start
|
// Paper start
|
||||||
|
|
|
@ -8,6 +8,7 @@ import com.google.common.collect.Lists;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import io.papermc.paper.entity.LookAnchor;
|
||||||
import net.minecraft.nbt.CompoundTag;
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.nbt.Tag;
|
import net.minecraft.nbt.Tag;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
|
@ -299,6 +300,25 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
|
||||||
return this.teleport(destination.getLocation(), cause);
|
return this.teleport(destination.getLocation(), cause);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void lookAt(double x, double y, double z, LookAnchor entityAnchor) {
|
||||||
|
this.getHandle().lookAt(toNmsAnchor(entityAnchor), new net.minecraft.world.phys.Vec3(x, y, z));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static net.minecraft.commands.arguments.EntityAnchorArgument.Anchor toNmsAnchor(LookAnchor nmsAnchor) {
|
||||||
|
return switch (nmsAnchor) {
|
||||||
|
case EYES -> net.minecraft.commands.arguments.EntityAnchorArgument.Anchor.EYES;
|
||||||
|
case FEET -> net.minecraft.commands.arguments.EntityAnchorArgument.Anchor.FEET;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public static LookAnchor toApiAnchor(net.minecraft.commands.arguments.EntityAnchorArgument.Anchor playerAnchor) {
|
||||||
|
return switch (playerAnchor) {
|
||||||
|
case EYES -> LookAnchor.EYES;
|
||||||
|
case FEET -> LookAnchor.FEET;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<org.bukkit.entity.Entity> getNearbyEntities(double x, double y, double z) {
|
public List<org.bukkit.entity.Entity> getNearbyEntities(double x, double y, double z) {
|
||||||
Preconditions.checkState(!this.entity.generation, "Cannot get nearby entities during world generation");
|
Preconditions.checkState(!this.entity.generation, "Cannot get nearby entities during world generation");
|
||||||
|
|
|
@ -7,6 +7,7 @@ import com.mojang.authlib.GameProfile;
|
||||||
import com.mojang.datafixers.util.Pair;
|
import com.mojang.datafixers.util.Pair;
|
||||||
import io.netty.buffer.Unpooled;
|
import io.netty.buffer.Unpooled;
|
||||||
import io.papermc.paper.FeatureHooks;
|
import io.papermc.paper.FeatureHooks;
|
||||||
|
import io.papermc.paper.entity.LookAnchor;
|
||||||
import it.unimi.dsi.fastutil.shorts.ShortArraySet;
|
import it.unimi.dsi.fastutil.shorts.ShortArraySet;
|
||||||
import it.unimi.dsi.fastutil.shorts.ShortSet;
|
import it.unimi.dsi.fastutil.shorts.ShortSet;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
|
@ -1377,29 +1378,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void lookAt(@NotNull org.bukkit.entity.Entity entity, @NotNull io.papermc.paper.entity.LookAnchor playerAnchor, @NotNull io.papermc.paper.entity.LookAnchor entityAnchor) {
|
public void lookAt(@NotNull org.bukkit.entity.Entity entity, @NotNull LookAnchor playerAnchor, @NotNull LookAnchor entityAnchor) {
|
||||||
this.getHandle().lookAt(toNmsAnchor(playerAnchor), ((CraftEntity) entity).getHandle(), toNmsAnchor(entityAnchor));
|
this.getHandle().lookAt(toNmsAnchor(playerAnchor), ((CraftEntity) entity).getHandle(), toNmsAnchor(entityAnchor));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void lookAt(double x, double y, double z, @NotNull io.papermc.paper.entity.LookAnchor playerAnchor) {
|
|
||||||
this.getHandle().lookAt(toNmsAnchor(playerAnchor), new net.minecraft.world.phys.Vec3(x, y, z));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static net.minecraft.commands.arguments.EntityAnchorArgument.Anchor toNmsAnchor(io.papermc.paper.entity.LookAnchor nmsAnchor) {
|
|
||||||
return switch (nmsAnchor) {
|
|
||||||
case EYES -> net.minecraft.commands.arguments.EntityAnchorArgument.Anchor.EYES;
|
|
||||||
case FEET -> net.minecraft.commands.arguments.EntityAnchorArgument.Anchor.FEET;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
public static io.papermc.paper.entity.LookAnchor toApiAnchor(net.minecraft.commands.arguments.EntityAnchorArgument.Anchor playerAnchor) {
|
|
||||||
return switch (playerAnchor) {
|
|
||||||
case EYES -> io.papermc.paper.entity.LookAnchor.EYES;
|
|
||||||
case FEET -> io.papermc.paper.entity.LookAnchor.FEET;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
public static net.minecraft.world.entity.Relative deltaRelativeToNMS(io.papermc.paper.entity.TeleportFlag.Relative apiFlag) {
|
public static net.minecraft.world.entity.Relative deltaRelativeToNMS(io.papermc.paper.entity.TeleportFlag.Relative apiFlag) {
|
||||||
return switch (apiFlag) {
|
return switch (apiFlag) {
|
||||||
case VELOCITY_X -> net.minecraft.world.entity.Relative.DELTA_X;
|
case VELOCITY_X -> net.minecraft.world.entity.Relative.DELTA_X;
|
||||||
|
|
Loading…
Reference in a new issue