优化实体查找逻辑
This commit is contained in:
parent
b09ed41f02
commit
ed05ee2abf
12 changed files with 160 additions and 117 deletions
|
@ -5,6 +5,7 @@ import com.mojang.blaze3d.systems.RenderSystem;
|
|||
import net.mcreator.superbwarfare.ModUtils;
|
||||
import net.mcreator.superbwarfare.entity.DroneEntity;
|
||||
import net.mcreator.superbwarfare.init.ModItems;
|
||||
import net.mcreator.superbwarfare.tools.EntityFindUtil;
|
||||
import net.mcreator.superbwarfare.tools.TraceTool;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.GameRenderer;
|
||||
|
@ -46,8 +47,7 @@ public class DroneUIOverlay {
|
|||
if (stack.is(ModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) {
|
||||
event.getGuiGraphics().blit(ModUtils.loc("textures/screens/drone.png"), w / 2 - 16, h / 2 - 16, 0, 0, 32, 32, 32, 32);
|
||||
|
||||
DroneEntity entity = player.level().getEntitiesOfClass(DroneEntity.class, player.getBoundingBox().inflate(512))
|
||||
.stream().filter(e -> e.getStringUUID().equals(stack.getOrCreateTag().getString("LinkedDrone"))).findFirst().orElse(null);
|
||||
DroneEntity entity = EntityFindUtil.findDrone(player.level(), stack.getOrCreateTag().getString("LinkedDrone"));
|
||||
|
||||
if (entity != null) {
|
||||
boolean lookAtEntity = false;
|
||||
|
|
|
@ -8,6 +8,7 @@ import net.mcreator.superbwarfare.init.ModItems;
|
|||
import net.mcreator.superbwarfare.init.ModSounds;
|
||||
import net.mcreator.superbwarfare.item.Monitor;
|
||||
import net.mcreator.superbwarfare.tools.CustomExplosion;
|
||||
import net.mcreator.superbwarfare.tools.EntityFindUtil;
|
||||
import net.mcreator.superbwarfare.tools.ParticleTool;
|
||||
import net.mcreator.superbwarfare.tools.SoundTool;
|
||||
import net.minecraft.ChatFormatting;
|
||||
|
@ -190,31 +191,31 @@ public class DroneEntity extends LivingEntity implements GeoEntity {
|
|||
|
||||
if (this.getPersistentData().getBoolean("left")) {
|
||||
this.entityData.set(MOVE_X, -1.5f);
|
||||
this.entityData.set(ROT_X, Mth.lerp(0.1f ,this.entityData.get(ROT_X) ,0.5f));
|
||||
this.entityData.set(ROT_X, Mth.lerp(0.1f, this.entityData.get(ROT_X), 0.5f));
|
||||
}
|
||||
if (this.getPersistentData().getBoolean("right")) {
|
||||
this.entityData.set(MOVE_X, 1.5f);
|
||||
this.entityData.set(ROT_X, Mth.lerp(0.1f ,this.entityData.get(ROT_X) ,-0.5f));
|
||||
this.entityData.set(ROT_X, Mth.lerp(0.1f, this.entityData.get(ROT_X), -0.5f));
|
||||
}
|
||||
|
||||
this.entityData.set(ROT_X, Mth.lerp(0.05f ,this.entityData.get(ROT_X) ,0));
|
||||
this.entityData.set(ROT_X, Mth.lerp(0.05f, this.entityData.get(ROT_X), 0));
|
||||
|
||||
if (!this.getPersistentData().getBoolean("left") && !this.getPersistentData().getBoolean("right")) {
|
||||
this.entityData.set(MOVE_X, Mth.lerp(0.1f ,this.entityData.get(MOVE_X) ,0));
|
||||
this.entityData.set(MOVE_X, Mth.lerp(0.1f, this.entityData.get(MOVE_X), 0));
|
||||
}
|
||||
|
||||
if (this.getPersistentData().getBoolean("forward")) {
|
||||
this.entityData.set(MOVE_Z, this.entityData.get(MOVE_Z) - 0.11f);
|
||||
this.entityData.set(ROT_Z, Mth.lerp(0.1f ,this.entityData.get(ROT_Z) ,-0.5f));
|
||||
this.entityData.set(ROT_Z, Mth.lerp(0.1f, this.entityData.get(ROT_Z), -0.5f));
|
||||
}
|
||||
if (this.getPersistentData().getBoolean("backward")) {
|
||||
this.entityData.set(MOVE_Z, this.entityData.get(MOVE_Z) + 0.11f);
|
||||
this.entityData.set(ROT_Z, Mth.lerp(0.1f ,this.entityData.get(ROT_Z) ,0.5f));
|
||||
this.entityData.set(ROT_Z, Mth.lerp(0.1f, this.entityData.get(ROT_Z), 0.5f));
|
||||
}
|
||||
|
||||
this.entityData.set(ROT_Z, Mth.lerp(0.05f ,this.entityData.get(ROT_Z) ,0));
|
||||
this.entityData.set(ROT_Z, Mth.lerp(0.05f, this.entityData.get(ROT_Z), 0));
|
||||
|
||||
this.entityData.set(MOVE_Z, Mth.lerp(0.1f ,this.entityData.get(MOVE_Z) ,0));
|
||||
this.entityData.set(MOVE_Z, Mth.lerp(0.1f, this.entityData.get(MOVE_Z), 0));
|
||||
|
||||
if (this.getPersistentData().getBoolean("up")) {
|
||||
this.entityData.set(MOVE_Y, -1.5f);
|
||||
|
@ -223,7 +224,7 @@ public class DroneEntity extends LivingEntity implements GeoEntity {
|
|||
this.entityData.set(MOVE_Y, 1.5f);
|
||||
}
|
||||
|
||||
this.entityData.set(MOVE_Y, Mth.lerp(0.1f ,this.entityData.get(MOVE_Y) ,0));
|
||||
this.entityData.set(MOVE_Y, Mth.lerp(0.1f, this.entityData.get(MOVE_Y), 0));
|
||||
|
||||
this.setDeltaMovement(new Vec3(
|
||||
this.getDeltaMovement().x + -this.entityData.get(MOVE_Z) * 0.1f * this.getLookAngle().x,
|
||||
|
@ -245,29 +246,28 @@ public class DroneEntity extends LivingEntity implements GeoEntity {
|
|||
}
|
||||
}
|
||||
|
||||
LivingEntity control = this.level().getEntitiesOfClass(Player.class, this.getBoundingBox().inflate(512))
|
||||
.stream().filter(e -> e.getStringUUID().equals(this.entityData.get(CONTROLLER))).findFirst().orElse(null);
|
||||
Player controller = EntityFindUtil.findPlayer(this.level(), this.entityData.get(CONTROLLER));
|
||||
|
||||
if (!this.onGround()) {
|
||||
this.level().playSound(null, this.getOnPos(), ModSounds.DRONE_SOUND.get(), SoundSource.AMBIENT, 3, 1);
|
||||
if (control != null) {
|
||||
ItemStack stack = control.getMainHandItem();
|
||||
if (stack.getOrCreateTag().getBoolean("Using") && control instanceof ServerPlayer serverPlayer) {
|
||||
if (controller != null) {
|
||||
ItemStack stack = controller.getMainHandItem();
|
||||
if (stack.getOrCreateTag().getBoolean("Using") && controller instanceof ServerPlayer serverPlayer) {
|
||||
SoundTool.playLocalSound(serverPlayer, ModSounds.DRONE_SOUND.get(), 100, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (this.getPersistentData().getBoolean("firing")) {
|
||||
if (control instanceof Player player) {
|
||||
if (this.entityData.get(AMMO) > 0) {
|
||||
this.entityData.set(AMMO, this.entityData.get(AMMO) - 1);
|
||||
droneDrop(player);
|
||||
}
|
||||
if (this.entityData.get(KAMIKAZE)) {
|
||||
this.hurt(new DamageSource(level().registryAccess().registryOrThrow(Registries.DAMAGE_TYPE).getHolderOrThrow(DamageTypes.EXPLOSION), player), 10000);
|
||||
if (this.entityData.get(AMMO) > 0) {
|
||||
this.entityData.set(AMMO, this.entityData.get(AMMO) - 1);
|
||||
if (controller != null) {
|
||||
droneDrop(controller);
|
||||
}
|
||||
}
|
||||
if (this.entityData.get(KAMIKAZE)) {
|
||||
this.hurt(new DamageSource(level().registryAccess().registryOrThrow(Registries.DAMAGE_TYPE).getHolderOrThrow(DamageTypes.EXPLOSION), controller), 10000);
|
||||
}
|
||||
this.getPersistentData().putBoolean("firing", false);
|
||||
}
|
||||
|
||||
|
@ -371,18 +371,17 @@ public class DroneEntity extends LivingEntity implements GeoEntity {
|
|||
|
||||
@Override
|
||||
public void travel(Vec3 dir) {
|
||||
LivingEntity control = this.level().getEntitiesOfClass(Player.class, this.getBoundingBox().inflate(512))
|
||||
.stream().filter(e -> e.getStringUUID().equals(this.entityData.get(CONTROLLER))).findFirst().orElse(null);
|
||||
Player controller = EntityFindUtil.findPlayer(this.level(), this.entityData.get(CONTROLLER));
|
||||
|
||||
if (control != null) {
|
||||
ItemStack stack = control.getMainHandItem();
|
||||
if (controller != null) {
|
||||
ItemStack stack = controller.getMainHandItem();
|
||||
if (stack.getOrCreateTag().getBoolean("Using")) {
|
||||
this.setYRot(control.getYRot());
|
||||
this.setYRot(controller.getYRot());
|
||||
this.yRotO = this.getYRot();
|
||||
this.setXRot(Mth.clamp(control.getXRot(), -25, 90));
|
||||
this.setXRot(Mth.clamp(controller.getXRot(), -25, 90));
|
||||
this.setRot(this.getYRot(), this.getXRot());
|
||||
this.yBodyRot = control.getYRot();
|
||||
this.yHeadRot = control.getYRot();
|
||||
this.yBodyRot = controller.getYRot();
|
||||
this.yHeadRot = controller.getYRot();
|
||||
this.setSpeed((float) this.getAttributeValue(Attributes.MOVEMENT_SPEED));
|
||||
float strafe = -this.entityData.get(MOVE_X);
|
||||
super.travel(new Vec3(2 * strafe, -this.entityData.get(MOVE_Y), -this.entityData.get(MOVE_Z)));
|
||||
|
|
|
@ -7,6 +7,7 @@ import net.mcreator.superbwarfare.init.ModEntities;
|
|||
import net.mcreator.superbwarfare.init.ModItems;
|
||||
import net.mcreator.superbwarfare.init.ModSounds;
|
||||
import net.mcreator.superbwarfare.network.message.ClientIndicatorMessage;
|
||||
import net.mcreator.superbwarfare.tools.EntityFindUtil;
|
||||
import net.mcreator.superbwarfare.tools.ParticleTool;
|
||||
import net.mcreator.superbwarfare.tools.ProjectileTool;
|
||||
import net.minecraft.commands.arguments.EntityAnchorArgument;
|
||||
|
@ -164,9 +165,7 @@ public class JavelinMissileEntity extends ThrowableItemProjectile implements Geo
|
|||
@Override
|
||||
public void tick() {
|
||||
super.tick();
|
||||
Entity entity = this.level().getEntitiesOfClass(Entity.class, this.getBoundingBox().inflate(512))
|
||||
.stream().filter(e -> e.getStringUUID().equals(entityData.get(TARGET_UUID))).findFirst().orElse(null);
|
||||
|
||||
Entity entity = EntityFindUtil.findEntity(this.level(), entityData.get(TARGET_UUID));
|
||||
|
||||
if (this.tickCount == 4) {
|
||||
if (!this.level().isClientSide() && this.level() instanceof ServerLevel serverLevel) {
|
||||
|
|
|
@ -10,6 +10,7 @@ import net.mcreator.superbwarfare.network.message.ShootMessage;
|
|||
import net.mcreator.superbwarfare.perk.AmmoPerk;
|
||||
import net.mcreator.superbwarfare.perk.Perk;
|
||||
import net.mcreator.superbwarfare.perk.PerkHelper;
|
||||
import net.mcreator.superbwarfare.tools.EntityFindUtil;
|
||||
import net.mcreator.superbwarfare.tools.GunsTool;
|
||||
import net.mcreator.superbwarfare.tools.MillisTimer;
|
||||
import net.mcreator.superbwarfare.tools.SeekTool;
|
||||
|
@ -161,9 +162,9 @@ public class ClientEventHandler {
|
|||
ItemStack stack = player.getMainHandItem();
|
||||
if (!stack.is(ModTags.Items.REVOLVER)) {
|
||||
return true;
|
||||
} else if (stack.is(ModTags.Items.REVOLVER) && (stack.getOrCreateTag().getBoolean("DA") || stack.getOrCreateTag().getBoolean("canImmediatelyShoot"))){
|
||||
} else if (stack.is(ModTags.Items.REVOLVER) && (stack.getOrCreateTag().getBoolean("DA") || stack.getOrCreateTag().getBoolean("canImmediatelyShoot"))) {
|
||||
return true;
|
||||
}else {
|
||||
} else {
|
||||
return revolverPreTime >= 1;
|
||||
}
|
||||
}
|
||||
|
@ -273,10 +274,10 @@ public class ClientEventHandler {
|
|||
//左轮类
|
||||
|
||||
if (clientTimer.getProgress() == 0 && stack.is(ModTags.Items.REVOLVER) && ((holdFire && !stack.getOrCreateTag().getBoolean("DA")) || (stack.getOrCreateTag().getInt("bolt_action_anim") < 7 && stack.getOrCreateTag().getInt("bolt_action_anim") > 2) || stack.getOrCreateTag().getBoolean("canImmediatelyShoot"))) {
|
||||
revolverPreTime = Mth.clamp(revolverPreTime + 0.21 * times, 0 , 1);
|
||||
revolverWheelPreTime = Mth.clamp(revolverWheelPreTime + 0.23 * times, 0 , revolverPreTime > 0.7 ? 1 : 0.55);
|
||||
revolverPreTime = Mth.clamp(revolverPreTime + 0.21 * times, 0, 1);
|
||||
revolverWheelPreTime = Mth.clamp(revolverWheelPreTime + 0.23 * times, 0, revolverPreTime > 0.7 ? 1 : 0.55);
|
||||
} else if (!stack.getOrCreateTag().getBoolean("DA") && !stack.getOrCreateTag().getBoolean("canImmediatelyShoot")) {
|
||||
revolverPreTime = Mth.clamp(revolverPreTime - 1.2 * times, 0 , 1);
|
||||
revolverPreTime = Mth.clamp(revolverPreTime - 1.2 * times, 0, 1);
|
||||
}
|
||||
|
||||
|
||||
|
@ -333,7 +334,7 @@ public class ClientEventHandler {
|
|||
|
||||
gunPartMove(times);
|
||||
|
||||
if (mode == 0 && clientTimer.getProgress() >= cooldown) {
|
||||
if (mode == 0 && clientTimer.getProgress() >= cooldown) {
|
||||
clientTimer.stop();
|
||||
}
|
||||
|
||||
|
@ -353,7 +354,7 @@ public class ClientEventHandler {
|
|||
|
||||
if (mode == 1) {
|
||||
if (stack.getOrCreateTag().getInt("ammo") == 1) {
|
||||
burstFireSize = 1;
|
||||
burstFireSize = 1;
|
||||
}
|
||||
if (burstFireSize == 1) {
|
||||
cantFireTime = 40;
|
||||
|
@ -395,12 +396,10 @@ public class ClientEventHandler {
|
|||
player.playSound(ModSounds.HENG.get(), 1f, 1f);
|
||||
}
|
||||
|
||||
double shooterHeight = player.getEyePosition().distanceTo((Vec3.atLowerCornerOf(player.level().clip( new ClipContext(player.getEyePosition(), player.getEyePosition().add(new Vec3(0, -1 , 0).scale(10)),
|
||||
double shooterHeight = player.getEyePosition().distanceTo((Vec3.atLowerCornerOf(player.level().clip(new ClipContext(player.getEyePosition(), player.getEyePosition().add(new Vec3(0, -1, 0).scale(10)),
|
||||
ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)).getBlockPos())));
|
||||
|
||||
ModUtils.queueClientWork((int) (1 + 1.5 * shooterHeight), () -> {
|
||||
player.playSound(ModSounds.SHELL_CASING_NORMAL.get(), (float) Math.max(1.5 - 0.2 * shooterHeight, 0), 1);
|
||||
});
|
||||
ModUtils.queueClientWork((int) (1 + 1.5 * shooterHeight), () -> player.playSound(ModSounds.SHELL_CASING_NORMAL.get(), (float) Math.max(1.5 - 0.2 * shooterHeight, 0), 1));
|
||||
}
|
||||
|
||||
handleClientShoot();
|
||||
|
@ -474,7 +473,7 @@ public class ClientEventHandler {
|
|||
player.playSound(sound1p, 1f, 1);
|
||||
}
|
||||
|
||||
double shooterHeight = player.getEyePosition().distanceTo((Vec3.atLowerCornerOf(player.level().clip( new ClipContext(player.getEyePosition(), player.getEyePosition().add(new Vec3(0, -1 , 0).scale(10)),
|
||||
double shooterHeight = player.getEyePosition().distanceTo((Vec3.atLowerCornerOf(player.level().clip(new ClipContext(player.getEyePosition(), player.getEyePosition().add(new Vec3(0, -1, 0).scale(10)),
|
||||
ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)).getBlockPos())));
|
||||
|
||||
ModUtils.queueClientWork((int) (1 + 1.5 * shooterHeight), () -> {
|
||||
|
@ -567,8 +566,7 @@ public class ClientEventHandler {
|
|||
double pitch = event.getPitch();
|
||||
double roll = event.getRoll();
|
||||
|
||||
DroneEntity drone = entity.level().getEntitiesOfClass(DroneEntity.class, entity.getBoundingBox().inflate(512))
|
||||
.stream().filter(e -> e.getStringUUID().equals(stack.getOrCreateTag().getString("LinkedDrone"))).findFirst().orElse(null);
|
||||
DroneEntity drone = EntityFindUtil.findDrone(entity.level(), stack.getOrCreateTag().getString("LinkedDrone"));
|
||||
|
||||
if (drone != null) {
|
||||
droneRotZ = Mth.lerp(0.1 * times, droneRotZ, drone.getEntityData().get(ROT_Z));
|
||||
|
@ -610,8 +608,9 @@ public class ClientEventHandler {
|
|||
|
||||
ItemStack stack = player.getMainHandItem();
|
||||
if (stack.is(ModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) {
|
||||
player.level().getEntitiesOfClass(DroneEntity.class, player.getBoundingBox().inflate(512))
|
||||
.stream().filter(e -> e.getStringUUID().equals(stack.getOrCreateTag().getString("LinkedDrone"))).findFirst().ifPresent(drone -> event.setCanceled(true));
|
||||
if (EntityFindUtil.findDrone(player.level(), stack.getOrCreateTag().getString("LinkedDrone")) != null) {
|
||||
event.setCanceled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@ package net.mcreator.superbwarfare.item;
|
|||
import com.google.common.collect.ImmutableMultimap;
|
||||
import com.google.common.collect.Multimap;
|
||||
import net.mcreator.superbwarfare.entity.DroneEntity;
|
||||
import net.mcreator.superbwarfare.tools.EntityFindUtil;
|
||||
import net.mcreator.superbwarfare.tools.ItemNBTTool;
|
||||
import net.minecraft.ChatFormatting;
|
||||
import net.minecraft.client.CameraType;
|
||||
|
@ -44,6 +45,17 @@ public class Monitor extends Item {
|
|||
itemstack.getOrCreateTag().putString(LINKED_DRONE, "none");
|
||||
}
|
||||
|
||||
private void resetDroneData(DroneEntity drone) {
|
||||
if (drone == null) return;
|
||||
|
||||
drone.getPersistentData().putBoolean("left", false);
|
||||
drone.getPersistentData().putBoolean("right", false);
|
||||
drone.getPersistentData().putBoolean("forward", false);
|
||||
drone.getPersistentData().putBoolean("backward", false);
|
||||
drone.getPersistentData().putBoolean("up", false);
|
||||
drone.getPersistentData().putBoolean("down", false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public InteractionResultHolder<ItemStack> use(Level world, Player player, InteractionHand hand) {
|
||||
ItemStack stack = player.getMainHandItem();
|
||||
|
@ -64,17 +76,8 @@ public class Monitor extends Item {
|
|||
}
|
||||
}
|
||||
|
||||
DroneEntity drone = player.level().getEntitiesOfClass(DroneEntity.class, player.getBoundingBox().inflate(512))
|
||||
.stream().filter(e -> e.getStringUUID().equals(stack.getOrCreateTag().getString("LinkedDrone"))).findFirst().orElse(null);
|
||||
|
||||
if (drone != null) {
|
||||
drone.getPersistentData().putBoolean("left", false);
|
||||
drone.getPersistentData().putBoolean("right", false);
|
||||
drone.getPersistentData().putBoolean("forward", false);
|
||||
drone.getPersistentData().putBoolean("backward", false);
|
||||
drone.getPersistentData().putBoolean("up", false);
|
||||
drone.getPersistentData().putBoolean("down", false);
|
||||
}
|
||||
DroneEntity drone = EntityFindUtil.findDrone(player.level(), stack.getOrCreateTag().getString(LINKED_DRONE));
|
||||
this.resetDroneData(drone);
|
||||
|
||||
return super.use(world, player, hand);
|
||||
}
|
||||
|
@ -100,20 +103,18 @@ public class Monitor extends Item {
|
|||
Player player = Minecraft.getInstance().player;
|
||||
if (player == null) return;
|
||||
|
||||
DroneEntity entity = player.level().getEntitiesOfClass(DroneEntity.class, player.getBoundingBox().inflate(512))
|
||||
.stream().filter(e -> e.getStringUUID().equals(stack.getOrCreateTag().getString(LINKED_DRONE))).findFirst().orElse(null);
|
||||
if (entity == null) return;
|
||||
DroneEntity drone = EntityFindUtil.findDrone(player.level(), stack.getOrCreateTag().getString(LINKED_DRONE));
|
||||
if (drone == null) return;
|
||||
|
||||
list.add(Component.translatable("des.superbwarfare.tips.distance").withStyle(ChatFormatting.GRAY)
|
||||
.append(Component.literal("").withStyle(ChatFormatting.RESET))
|
||||
.append(Component.literal("Distance:" + new DecimalFormat("##.#").format(player.distanceTo(entity)) + "M").withStyle(ChatFormatting.GRAY)));
|
||||
.append(Component.literal("Distance:" + new DecimalFormat("##.#").format(player.distanceTo(drone)) + "M").withStyle(ChatFormatting.GRAY)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void inventoryTick(ItemStack itemstack, Level world, Entity entity, int slot, boolean selected) {
|
||||
super.inventoryTick(itemstack, world, entity, slot, selected);
|
||||
DroneEntity drone = entity.level().getEntitiesOfClass(DroneEntity.class, entity.getBoundingBox().inflate(512))
|
||||
.stream().filter(e -> e.getStringUUID().equals(itemstack.getOrCreateTag().getString("LinkedDrone"))).findFirst().orElse(null);
|
||||
DroneEntity drone = EntityFindUtil.findDrone(entity.level(), itemstack.getOrCreateTag().getString(LINKED_DRONE));
|
||||
|
||||
if (!selected) {
|
||||
if (itemstack.getOrCreateTag().getBoolean("Using")) {
|
||||
|
@ -122,22 +123,12 @@ public class Monitor extends Item {
|
|||
Minecraft.getInstance().options.setCameraType(CameraType.FIRST_PERSON);
|
||||
}
|
||||
}
|
||||
|
||||
if (drone != null) {
|
||||
drone.getPersistentData().putBoolean("left", false);
|
||||
drone.getPersistentData().putBoolean("right", false);
|
||||
drone.getPersistentData().putBoolean("forward", false);
|
||||
drone.getPersistentData().putBoolean("backward", false);
|
||||
drone.getPersistentData().putBoolean("up", false);
|
||||
drone.getPersistentData().putBoolean("down", false);
|
||||
}
|
||||
} else {
|
||||
if (drone == null) {
|
||||
if (itemstack.getOrCreateTag().getBoolean("Using")) {
|
||||
itemstack.getOrCreateTag().putBoolean("Using", false);
|
||||
if (entity.level().isClientSide) {
|
||||
Minecraft.getInstance().options.setCameraType(CameraType.FIRST_PERSON);
|
||||
}
|
||||
this.resetDroneData(drone);
|
||||
} else if (drone == null) {
|
||||
if (itemstack.getOrCreateTag().getBoolean("Using")) {
|
||||
itemstack.getOrCreateTag().putBoolean("Using", false);
|
||||
if (entity.level().isClientSide) {
|
||||
Minecraft.getInstance().options.setCameraType(CameraType.FIRST_PERSON);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -140,8 +140,7 @@ public class JavelinItem extends GunItem implements GeoItem, AnimatedItem {
|
|||
tag.putInt("max_ammo", getAmmoCount(player));
|
||||
|
||||
if (tag.getBoolean("Seeking")) {
|
||||
Entity targetEntity = player.level().getEntitiesOfClass(Entity.class, player.getBoundingBox().inflate(512))
|
||||
.stream().filter(e -> e.getStringUUID().equals(tag.getString("TargetEntity"))).findFirst().orElse(null);
|
||||
Entity targetEntity = EntityFindUtil.findEntity(player.level(), tag.getString("TargetEntity"));
|
||||
Entity seekingEntity = SeekTool.seekEntity(player, player.level(), 512, 8);
|
||||
if (seekingEntity != null && seekingEntity == targetEntity) {
|
||||
tag.putInt("SeekTime", tag.getInt("SeekTime") + 1);
|
||||
|
|
|
@ -6,6 +6,7 @@ import net.mcreator.superbwarfare.entity.Mle1934Entity;
|
|||
import net.mcreator.superbwarfare.event.ClientEventHandler;
|
||||
import net.mcreator.superbwarfare.init.ModItems;
|
||||
import net.mcreator.superbwarfare.init.ModTags;
|
||||
import net.mcreator.superbwarfare.tools.EntityFindUtil;
|
||||
import net.minecraft.client.Camera;
|
||||
import net.minecraft.client.CameraType;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -40,8 +41,7 @@ public abstract class CameraMixin {
|
|||
ItemStack stack = player.getMainHandItem();
|
||||
|
||||
if (stack.is(ModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) {
|
||||
DroneEntity drone = player.level().getEntitiesOfClass(DroneEntity.class, player.getBoundingBox().inflate(512))
|
||||
.stream().filter(e -> e.getStringUUID().equals(stack.getOrCreateTag().getString("LinkedDrone"))).findFirst().orElse(null);
|
||||
DroneEntity drone = EntityFindUtil.findDrone(player.level(), stack.getOrCreateTag().getString("LinkedDrone"));
|
||||
|
||||
if (drone != null) {
|
||||
float yRot = drone.getYRot();
|
||||
|
|
|
@ -2,6 +2,7 @@ package net.mcreator.superbwarfare.network.message;
|
|||
|
||||
import net.mcreator.superbwarfare.entity.DroneEntity;
|
||||
import net.mcreator.superbwarfare.init.ModItems;
|
||||
import net.mcreator.superbwarfare.tools.EntityFindUtil;
|
||||
import net.mcreator.superbwarfare.tools.TraceTool;
|
||||
import net.minecraft.ChatFormatting;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
|
@ -40,8 +41,7 @@ public class DroneFireMessage {
|
|||
ItemStack stack = player.getMainHandItem();
|
||||
|
||||
if (stack.is(ModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) {
|
||||
DroneEntity drone = player.level().getEntitiesOfClass(DroneEntity.class, player.getBoundingBox().inflate(512))
|
||||
.stream().filter(e -> e.getStringUUID().equals(stack.getOrCreateTag().getString("LinkedDrone"))).findFirst().orElse(null);
|
||||
DroneEntity drone = EntityFindUtil.findDrone(player.level(), stack.getOrCreateTag().getString("LinkedDrone"));
|
||||
if (drone != null) {
|
||||
if (!player.getOffhandItem().is(ModItems.FIRING_PARAMETERS.get())) {
|
||||
drone.getPersistentData().putBoolean("firing", true);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package net.mcreator.superbwarfare.network.message;
|
||||
|
||||
import net.mcreator.superbwarfare.entity.DroneEntity;
|
||||
import net.mcreator.superbwarfare.init.ModItems;
|
||||
import net.mcreator.superbwarfare.tools.EntityFindUtil;
|
||||
import net.minecraft.network.FriendlyByteBuf;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
|
@ -36,30 +36,29 @@ public class DroneMovementMessage {
|
|||
ItemStack stack = player.getMainHandItem();
|
||||
|
||||
if (stack.is(ModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) {
|
||||
player.level().getEntitiesOfClass(DroneEntity.class, player.getBoundingBox().inflate(512))
|
||||
.stream().filter(e -> e.getStringUUID().equals(stack.getOrCreateTag().getString("LinkedDrone"))).findFirst()
|
||||
.ifPresent(drone -> {
|
||||
switch (message.direction) {
|
||||
case 0:
|
||||
drone.getPersistentData().putBoolean("left", message.clicked);
|
||||
break;
|
||||
case 1:
|
||||
drone.getPersistentData().putBoolean("right", message.clicked);
|
||||
break;
|
||||
case 2:
|
||||
drone.getPersistentData().putBoolean("forward", message.clicked);
|
||||
break;
|
||||
case 3:
|
||||
drone.getPersistentData().putBoolean("backward", message.clicked);
|
||||
break;
|
||||
case 4:
|
||||
drone.getPersistentData().putBoolean("up", message.clicked);
|
||||
break;
|
||||
case 5:
|
||||
drone.getPersistentData().putBoolean("down", message.clicked);
|
||||
break;
|
||||
}
|
||||
});
|
||||
var drone = EntityFindUtil.findDrone(player.level(), stack.getOrCreateTag().getString("LinkedDrone"));
|
||||
if (drone != null) {
|
||||
switch (message.direction) {
|
||||
case 0:
|
||||
drone.getPersistentData().putBoolean("left", message.clicked);
|
||||
break;
|
||||
case 1:
|
||||
drone.getPersistentData().putBoolean("right", message.clicked);
|
||||
break;
|
||||
case 2:
|
||||
drone.getPersistentData().putBoolean("forward", message.clicked);
|
||||
break;
|
||||
case 3:
|
||||
drone.getPersistentData().putBoolean("backward", message.clicked);
|
||||
break;
|
||||
case 4:
|
||||
drone.getPersistentData().putBoolean("up", message.clicked);
|
||||
break;
|
||||
case 5:
|
||||
drone.getPersistentData().putBoolean("down", message.clicked);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -3,6 +3,7 @@ package net.mcreator.superbwarfare.network.message;
|
|||
import net.mcreator.superbwarfare.entity.DroneEntity;
|
||||
import net.mcreator.superbwarfare.init.ModItems;
|
||||
import net.mcreator.superbwarfare.init.ModTags;
|
||||
import net.mcreator.superbwarfare.tools.EntityFindUtil;
|
||||
import net.mcreator.superbwarfare.tools.TraceTool;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
|
@ -71,8 +72,7 @@ public class InteractMessage {
|
|||
|
||||
} else if (stack.is(ModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked") && !player.getCooldowns().isOnCooldown(stack.getItem())) {
|
||||
|
||||
DroneEntity drone = player.level().getEntitiesOfClass(DroneEntity.class, player.getBoundingBox().inflate(512))
|
||||
.stream().filter(e -> e.getStringUUID().equals(stack.getOrCreateTag().getString("LinkedDrone"))).findFirst().orElse(null);
|
||||
DroneEntity drone = EntityFindUtil.findDrone(player.level(), stack.getOrCreateTag().getString("LinkedDrone"));
|
||||
|
||||
if (drone != null) {
|
||||
Vec3 looking = Vec3.atLowerCornerOf(player.level().clip(new ClipContext(drone.getEyePosition(), drone.getEyePosition().add(drone.getLookAngle().scale(2)), ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)).getBlockPos());
|
||||
|
|
|
@ -0,0 +1,56 @@
|
|||
package net.mcreator.superbwarfare.tools;
|
||||
|
||||
import net.mcreator.superbwarfare.entity.DroneEntity;
|
||||
import net.minecraft.client.multiplayer.ClientLevel;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.level.Level;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class EntityFindUtil {
|
||||
/**
|
||||
* 查找当前已知实体,对ClientLevel和ServerLevel均有效
|
||||
*
|
||||
* @param level 实体所在世界
|
||||
* @param uuidString 目标实体UUID字符串
|
||||
* @return 目标实体或null
|
||||
*/
|
||||
public static Entity findEntity(Level level, String uuidString) {
|
||||
try {
|
||||
var uuid = UUID.fromString(uuidString);
|
||||
Entity target;
|
||||
|
||||
if (level instanceof ServerLevel serverLevel) {
|
||||
target = serverLevel.getEntity(uuid);
|
||||
} else {
|
||||
var clientLevel = (ClientLevel) level;
|
||||
target = clientLevel.getEntities().get(uuid);
|
||||
}
|
||||
return target;
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Player findPlayer(Level level, String uuidString) {
|
||||
var target = findEntity(level, uuidString);
|
||||
if (target instanceof Player player) {
|
||||
return player;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public static DroneEntity findDrone(Level level, String uuidString) {
|
||||
var target = findEntity(level, uuidString);
|
||||
if (target instanceof DroneEntity drone) {
|
||||
return drone;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,3 +1,4 @@
|
|||
public net.minecraft.server.level.DistanceManager f_140764_ # playerTicketManager
|
||||
public net.minecraft.server.level.DistanceManager$PlayerTicketTracker f_140905_ # viewDistance
|
||||
public net.minecraft.server.level.DistanceManager$PlayerTicketTracker
|
||||
public net.minecraft.server.level.DistanceManager$PlayerTicketTracker
|
||||
public net.minecraft.client.multiplayer.ClientLevel m_142646_()Lnet/minecraft/world/level/entity/LevelEntityGetter; # getEntities
|
Loading…
Add table
Reference in a new issue