Port basic lookAt methods from Player to Entity (#11775)

This commit is contained in:
Pedro
2024-12-24 19:00:07 -03:00
committed by GitHub
parent 321d17cc8c
commit d568e175ee
4 changed files with 48 additions and 44 deletions

View File

@@ -8,6 +8,7 @@ import com.google.common.collect.Lists;
import java.util.List;
import java.util.Set;
import java.util.UUID;
import io.papermc.paper.entity.LookAnchor;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.Tag;
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);
}
@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
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");

View File

@@ -7,6 +7,7 @@ import com.mojang.authlib.GameProfile;
import com.mojang.datafixers.util.Pair;
import io.netty.buffer.Unpooled;
import io.papermc.paper.FeatureHooks;
import io.papermc.paper.entity.LookAnchor;
import it.unimi.dsi.fastutil.shorts.ShortArraySet;
import it.unimi.dsi.fastutil.shorts.ShortSet;
import java.io.ByteArrayOutputStream;
@@ -1377,29 +1378,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
}
@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));
}
@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) {
return switch (apiFlag) {
case VELOCITY_X -> net.minecraft.world.entity.Relative.DELTA_X;