From dd6567b671d91452b60138fbaca1d02fb1c3c4e1 Mon Sep 17 00:00:00 2001 From: Oth3r Date: Mon, 29 Jul 2024 10:41:21 -0500 Subject: [PATCH] added sitLooking() --- src/main/java/one/oth3r/sit/utl/Logic.java | 4 ++++ src/main/java/one/oth3r/sit/utl/Utl.java | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/main/java/one/oth3r/sit/utl/Logic.java b/src/main/java/one/oth3r/sit/utl/Logic.java index 15536b4..343ca73 100644 --- a/src/main/java/one/oth3r/sit/utl/Logic.java +++ b/src/main/java/one/oth3r/sit/utl/Logic.java @@ -42,6 +42,10 @@ public class Logic { return true; } + public static boolean sitLooking(ServerPlayerEntity player) { + return sit(player, Utl.getBlockPosPlayerIsLookingAt(player.getServerWorld(),player,5),null); + } + /** * checks the hands of the player and the items in each hand and sees if the player can sit down */ diff --git a/src/main/java/one/oth3r/sit/utl/Utl.java b/src/main/java/one/oth3r/sit/utl/Utl.java index bc19aeb..6176b78 100644 --- a/src/main/java/one/oth3r/sit/utl/Utl.java +++ b/src/main/java/one/oth3r/sit/utl/Utl.java @@ -11,18 +11,23 @@ import net.minecraft.block.enums.BlockHalf; import net.minecraft.block.enums.SlabType; import net.minecraft.entity.EntityType; import net.minecraft.entity.decoration.DisplayEntity; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.BlockItem; import net.minecraft.item.ItemStack; import net.minecraft.registry.Registries; import net.minecraft.registry.tag.TagKey; import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.server.world.ServerWorld; import net.minecraft.text.MutableText; import net.minecraft.text.Text; import net.minecraft.util.Identifier; import net.minecraft.util.TypeFilter; import net.minecraft.util.UseAction; import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.hit.HitResult; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.world.RaycastContext; import net.minecraft.world.World; import one.oth3r.sit.file.*; import one.oth3r.sit.packet.SitPayloads; @@ -369,4 +374,19 @@ public class Utl { }; } } + + public static BlockPos getBlockPosPlayerIsLookingAt(ServerWorld world, PlayerEntity player, double range) { + // pos, adjusted to player eye level + Vec3d rayStart = player.getPos().add(0, player.getEyeHeight(player.getPose()), 0); + // extend ray by the range + Vec3d rayEnd = rayStart.add(player.getRotationVector().multiply(range)); + + BlockHitResult hitResult = world.raycast(new RaycastContext(rayStart, rayEnd, RaycastContext.ShapeType.OUTLINE, RaycastContext.FluidHandling.NONE, ShapeContext.absent())); + + if (hitResult.getType() == HitResult.Type.BLOCK) { + return hitResult.getBlockPos(); + } + + return new BlockPos(player.getBlockPos()); + } }