diff --git a/src/main/java/net/mcreator/superbwarfare/client/screens/DroneUIOverlay.java b/src/main/java/net/mcreator/superbwarfare/client/screens/DroneUIOverlay.java index ca30267c4..0b94b21f6 100644 --- a/src/main/java/net/mcreator/superbwarfare/client/screens/DroneUIOverlay.java +++ b/src/main/java/net/mcreator/superbwarfare/client/screens/DroneUIOverlay.java @@ -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; diff --git a/src/main/java/net/mcreator/superbwarfare/entity/DroneEntity.java b/src/main/java/net/mcreator/superbwarfare/entity/DroneEntity.java index 4799249d8..5af3de0ea 100644 --- a/src/main/java/net/mcreator/superbwarfare/entity/DroneEntity.java +++ b/src/main/java/net/mcreator/superbwarfare/entity/DroneEntity.java @@ -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))); diff --git a/src/main/java/net/mcreator/superbwarfare/entity/projectile/JavelinMissileEntity.java b/src/main/java/net/mcreator/superbwarfare/entity/projectile/JavelinMissileEntity.java index 822d4be64..30c47d638 100644 --- a/src/main/java/net/mcreator/superbwarfare/entity/projectile/JavelinMissileEntity.java +++ b/src/main/java/net/mcreator/superbwarfare/entity/projectile/JavelinMissileEntity.java @@ -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) { diff --git a/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java index c638df4e8..cb55c5aae 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java @@ -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); + } } } diff --git a/src/main/java/net/mcreator/superbwarfare/item/Monitor.java b/src/main/java/net/mcreator/superbwarfare/item/Monitor.java index 11f3fc1ac..3d28b27ef 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/Monitor.java +++ b/src/main/java/net/mcreator/superbwarfare/item/Monitor.java @@ -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 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); } } } diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/launcher/JavelinItem.java b/src/main/java/net/mcreator/superbwarfare/item/gun/launcher/JavelinItem.java index 58fcadd69..f3c235248 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/launcher/JavelinItem.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/launcher/JavelinItem.java @@ -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); diff --git a/src/main/java/net/mcreator/superbwarfare/mixins/CameraMixin.java b/src/main/java/net/mcreator/superbwarfare/mixins/CameraMixin.java index dd0794906..45833f44f 100644 --- a/src/main/java/net/mcreator/superbwarfare/mixins/CameraMixin.java +++ b/src/main/java/net/mcreator/superbwarfare/mixins/CameraMixin.java @@ -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(); diff --git a/src/main/java/net/mcreator/superbwarfare/network/message/DroneFireMessage.java b/src/main/java/net/mcreator/superbwarfare/network/message/DroneFireMessage.java index b61a07e23..423f8ee93 100644 --- a/src/main/java/net/mcreator/superbwarfare/network/message/DroneFireMessage.java +++ b/src/main/java/net/mcreator/superbwarfare/network/message/DroneFireMessage.java @@ -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); diff --git a/src/main/java/net/mcreator/superbwarfare/network/message/DroneMovementMessage.java b/src/main/java/net/mcreator/superbwarfare/network/message/DroneMovementMessage.java index 5c39c20e2..6bb0b096e 100644 --- a/src/main/java/net/mcreator/superbwarfare/network/message/DroneMovementMessage.java +++ b/src/main/java/net/mcreator/superbwarfare/network/message/DroneMovementMessage.java @@ -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; + } + } } } }); diff --git a/src/main/java/net/mcreator/superbwarfare/network/message/InteractMessage.java b/src/main/java/net/mcreator/superbwarfare/network/message/InteractMessage.java index 7a8633f26..0fc9995a6 100644 --- a/src/main/java/net/mcreator/superbwarfare/network/message/InteractMessage.java +++ b/src/main/java/net/mcreator/superbwarfare/network/message/InteractMessage.java @@ -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()); diff --git a/src/main/java/net/mcreator/superbwarfare/tools/EntityFindUtil.java b/src/main/java/net/mcreator/superbwarfare/tools/EntityFindUtil.java new file mode 100644 index 000000000..68b05885a --- /dev/null +++ b/src/main/java/net/mcreator/superbwarfare/tools/EntityFindUtil.java @@ -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; + } + +} diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index ee4636f2b..3d3316533 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -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 \ No newline at end of file +public net.minecraft.server.level.DistanceManager$PlayerTicketTracker +public net.minecraft.client.multiplayer.ClientLevel m_142646_()Lnet/minecraft/world/level/entity/LevelEntityGetter; # getEntities \ No newline at end of file