Add ray tracing and bounding box API

By: blablubbabc <lukas@wirsindwir.de>
This commit is contained in:
CraftBukkit/Spigot
2018-10-26 19:59:42 +11:00
parent 4614a811c9
commit 369edcded9
6 changed files with 299 additions and 7 deletions

View File

@@ -0,0 +1,42 @@
package org.bukkit.craftbukkit.util;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.craftbukkit.block.CraftBlock;
import org.bukkit.entity.Entity;
import org.bukkit.util.RayTraceResult;
import org.bukkit.util.Vector;
import net.minecraft.server.BlockPosition;
import net.minecraft.server.MovingObjectPosition;
import net.minecraft.server.MovingObjectPosition.EnumMovingObjectType;
import net.minecraft.server.Vec3D;
public class CraftRayTraceResult {
private CraftRayTraceResult() {}
public static RayTraceResult fromNMS(World world, MovingObjectPosition nmsHitResult) {
if (nmsHitResult == null || nmsHitResult.type == EnumMovingObjectType.MISS) return null;
Vec3D nmsHitPos = nmsHitResult.pos;
Vector hitPosition = new Vector(nmsHitPos.x, nmsHitPos.y, nmsHitPos.z);
BlockFace hitBlockFace = null;
if (nmsHitResult.direction != null) {
hitBlockFace = CraftBlock.notchToBlockFace(nmsHitResult.direction);
}
if (nmsHitResult.entity != null) {
Entity hitEntity = nmsHitResult.entity.getBukkitEntity();
return new RayTraceResult(hitPosition, hitEntity, hitBlockFace);
}
Block hitBlock = null;
BlockPosition nmsBlockPos = nmsHitResult.a(); // PAIL: getBlockPosition
if (nmsBlockPos != null && world != null) {
hitBlock = world.getBlockAt(nmsBlockPos.getX(), nmsBlockPos.getY(), nmsBlockPos.getZ());
}
return new RayTraceResult(hitPosition, hitBlock, hitBlockFace);
}
}