获取近战攻击载具的精确位置
This commit is contained in:
parent
a0a3cf4ac7
commit
3f47b72d40
2 changed files with 33 additions and 6 deletions
|
@ -10,6 +10,8 @@ import com.atsuishio.superbwarfare.item.gun.GunItem;
|
|||
import com.atsuishio.superbwarfare.network.message.receive.SimulationDistanceMessage;
|
||||
import com.atsuishio.superbwarfare.tools.InventoryTool;
|
||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||
import com.atsuishio.superbwarfare.tools.TraceTool;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
|
@ -20,6 +22,7 @@ import net.minecraft.world.entity.ai.attributes.AttributeModifier;
|
|||
import net.minecraft.world.entity.ai.attributes.Attributes;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
import net.neoforged.bus.api.SubscribeEvent;
|
||||
import net.neoforged.fml.common.EventBusSubscriber;
|
||||
import net.neoforged.neoforge.event.AnvilUpdateEvent;
|
||||
|
@ -196,13 +199,19 @@ public class PlayerEventHandler {
|
|||
public static void onAttackEntity(AttackEntityEvent event) {
|
||||
var target = event.getTarget();
|
||||
if (target instanceof VehicleEntity vehicle) {
|
||||
Vec3 position;
|
||||
|
||||
position = TraceTool.playerFindLookingPos(event.getEntity(), vehicle, event.getEntity().entityInteractionRange());
|
||||
|
||||
if (position != null) {
|
||||
if (vehicle.shouldSendHitSounds()) {
|
||||
vehicle.level().playSound(null, vehicle.getOnPos(), ModSounds.HIT.get(), SoundSource.PLAYERS, 1, 1);
|
||||
vehicle.level().playSound(null, BlockPos.containing(position), ModSounds.HIT.get(), SoundSource.PLAYERS, 1, 1);
|
||||
}
|
||||
|
||||
if (vehicle.shouldSendHitParticles() && vehicle.level() instanceof ServerLevel serverLevel) {
|
||||
sendParticle(serverLevel, ModParticleTypes.FIRE_STAR.get(), vehicle.getX(), vehicle.getY() + 0.5 * vehicle.getBbHeight(), vehicle.getZ(),
|
||||
2, 0.4, 0.4, 0.4, 0.2, false);
|
||||
sendParticle(serverLevel, ModParticleTypes.FIRE_STAR.get(), position.x, position.y, position.z,
|
||||
2, 0, 0, 0, 0.2, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -123,6 +123,24 @@ public class TraceTool {
|
|||
return null;
|
||||
}
|
||||
|
||||
public static Vec3 playerFindLookingPos(Player player, VehicleEntity vehicle, double entityReach) {
|
||||
double distance = entityReach * entityReach;
|
||||
HitResult hitResult = player.pick(entityReach, 1.0f, false);
|
||||
|
||||
Vec3 viewVec = player.getViewVector(1);
|
||||
Vec3 toVec = player.getEyePosition().add(viewVec.x * entityReach, viewVec.y * entityReach, viewVec.z * entityReach);
|
||||
AABB aabb = vehicle.getBoundingBox().expandTowards(viewVec.scale(entityReach)).inflate(1.0D, 1.0D, 1.0D);
|
||||
EntityHitResult entityhitresult = ProjectileUtil.getEntityHitResult(player, player.getEyePosition(), toVec, aabb, p -> true, distance);
|
||||
if (entityhitresult != null) {
|
||||
hitResult = entityhitresult;
|
||||
|
||||
}
|
||||
if (hitResult.getType() == HitResult.Type.ENTITY) {
|
||||
return hitResult.getLocation();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Entity droneFindLookingEntity(Entity entity, Vec3 pos, double entityReach, float ticks) {
|
||||
double distance = entityReach * entityReach;
|
||||
HitResult hitResult = entity.pick(entityReach, 1.0f, false);
|
||||
|
|
Loading…
Add table
Reference in a new issue