优化实体查找逻辑

This commit is contained in:
Light_Quanta 2024-11-20 18:50:43 +08:00
parent b09ed41f02
commit ed05ee2abf
No known key found for this signature in database
GPG key ID: 11A39A1B8C890959
12 changed files with 160 additions and 117 deletions

View file

@ -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;

View file

@ -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)));

View file

@ -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) {

View file

@ -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);
}
}
}

View file

@ -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);
}
}
}

View file

@ -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);

View file

@ -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();

View file

@ -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);

View file

@ -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;
}
}
}
}
});

View file

@ -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());

View file

@ -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;
}
}

View file

@ -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