diff --git a/src/main/java/com/github/tartaricacid/touhoulittlemaid/compat/tacz/ai/GunShootTargetTask.java b/src/main/java/com/github/tartaricacid/touhoulittlemaid/compat/tacz/ai/GunShootTargetTask.java index da484da76..740e371f9 100644 --- a/src/main/java/com/github/tartaricacid/touhoulittlemaid/compat/tacz/ai/GunShootTargetTask.java +++ b/src/main/java/com/github/tartaricacid/touhoulittlemaid/compat/tacz/ai/GunShootTargetTask.java @@ -53,7 +53,7 @@ protected void start(ServerLevel worldIn, EntityMaid entityIn, long gameTimeIn) @Override protected void tick(ServerLevel worldIn, EntityMaid owner, long gameTime) { owner.getBrain().getMemory(MemoryModuleType.ATTACK_TARGET).ifPresent((target) -> { - //实际上按照原版mc判定是看不见的,强行看见并朝向(没关就是开了?) + // 实际上按照原版mc判定是看不见的,强行看见并朝向(没关就是开了?) owner.getLookControl().setLookAt(target.getX(), target.getY(), target.getZ()); boolean canSee = GunBehaviorUtils.canSee(owner, target); boolean seeTimeMoreThanZero = this.seeTime > 0; diff --git a/src/main/java/com/github/tartaricacid/touhoulittlemaid/compat/tacz/task/TaskGunAttack.java b/src/main/java/com/github/tartaricacid/touhoulittlemaid/compat/tacz/task/TaskGunAttack.java index 148979c63..6132eed60 100644 --- a/src/main/java/com/github/tartaricacid/touhoulittlemaid/compat/tacz/task/TaskGunAttack.java +++ b/src/main/java/com/github/tartaricacid/touhoulittlemaid/compat/tacz/task/TaskGunAttack.java @@ -69,6 +69,19 @@ public List>> createBrainTasks ); } + @Override + public List>> createRideBrainTasks(EntityMaid maid) { + BehaviorControl supplementedTask = StartAttacking.create(this::mainhandHoldGun, GunBehaviorUtils::findFirstValidAttackTarget); + BehaviorControl findTargetTask = StopAttackingIfTargetInvalid.create(target -> !mainhandHoldGun(maid) || farAway(target, maid)); + BehaviorControl gunShootTargetTask = new GunShootTargetTask(); + + return Lists.newArrayList( + Pair.of(5, supplementedTask), + Pair.of(5, findTargetTask), + Pair.of(5, gunShootTargetTask) + ); + } + @Override public List>> getConditionDescription(EntityMaid maid) { return Collections.singletonList(Pair.of("has_tacz_gun", this::mainhandHoldGun)); diff --git a/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/ai/brain/MaidBrain.java b/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/ai/brain/MaidBrain.java index 60842b360..752c6e4c5 100644 --- a/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/ai/brain/MaidBrain.java +++ b/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/ai/brain/MaidBrain.java @@ -160,7 +160,7 @@ private static void registerRideWorkGoals(Brain brain, EntityMaid ma if (task.enableLookAndRandomWalk(maid)) { pairMaidList.add(Pair.of(20, getLook())); } - brain.addActivity(InitEntities.RIDE_WORK.get(), ImmutableList.of(updateActivity)); + brain.addActivity(InitEntities.RIDE_WORK.get(), ImmutableList.copyOf(pairMaidList)); } private static void registerRideRestGoals(Brain brain) { diff --git a/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/ai/brain/task/MaidShootTargetTask.java b/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/ai/brain/task/MaidShootTargetTask.java index fa9e6a3eb..ae5ae1e64 100644 --- a/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/ai/brain/task/MaidShootTargetTask.java +++ b/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/ai/brain/task/MaidShootTargetTask.java @@ -32,8 +32,8 @@ protected boolean checkExtraStartConditions(ServerLevel worldIn, EntityMaid owne if (memory.isPresent()) { LivingEntity target = memory.get(); return owner.isHolding(item -> item.getItem() instanceof ProjectileWeaponItem) - && BehaviorUtils.canSee(owner, target) - && BehaviorUtils.isWithinAttackRange(owner, target, 0); + && BehaviorUtils.canSee(owner, target) + && BehaviorUtils.isWithinAttackRange(owner, target, 0); } return false; } @@ -51,6 +51,8 @@ protected void start(ServerLevel worldIn, EntityMaid entityIn, long gameTimeIn) @Override protected void tick(ServerLevel worldIn, EntityMaid owner, long gameTime) { owner.getBrain().getMemory(MemoryModuleType.ATTACK_TARGET).ifPresent((target) -> { + // 强行看见并朝向 + owner.getLookControl().setLookAt(target.getX(), target.getY(), target.getZ()); boolean canSee = BehaviorUtils.canSee(owner, target); boolean seeTimeMoreThanZero = this.seeTime > 0; diff --git a/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/task/TaskBowAttack.java b/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/task/TaskBowAttack.java index 17fc9a23f..bf0139cbd 100644 --- a/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/task/TaskBowAttack.java +++ b/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/task/TaskBowAttack.java @@ -19,10 +19,7 @@ import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.ai.attributes.AttributeInstance; import net.minecraft.world.entity.ai.attributes.Attributes; -import net.minecraft.world.entity.ai.behavior.BehaviorControl; -import net.minecraft.world.entity.ai.behavior.SetWalkTargetFromAttackTargetIfTargetOutOfReach; -import net.minecraft.world.entity.ai.behavior.StartAttacking; -import net.minecraft.world.entity.ai.behavior.StopAttackingIfTargetInvalid; +import net.minecraft.world.entity.ai.behavior.*; import net.minecraft.world.entity.projectile.AbstractArrow; import net.minecraft.world.entity.projectile.ProjectileUtil; import net.minecraft.world.item.BowItem; @@ -73,6 +70,19 @@ public List>> createBrainTasks ); } + @Override + public List>> createRideBrainTasks(EntityMaid maid) { + BehaviorControl supplementedTask = StartAttacking.create(e -> hasBow(e) && hasArrow(e), IAttackTask::findFirstValidAttackTarget); + BehaviorControl findTargetTask = StopAttackingIfTargetInvalid.create((target) -> !hasBow(maid) || !hasArrow(maid) || farAway(target, maid)); + BehaviorControl shootTargetTask = new MaidShootTargetTask(2); + + return Lists.newArrayList( + Pair.of(5, supplementedTask), + Pair.of(5, findTargetTask), + Pair.of(5, shootTargetTask) + ); + } + @Override public void performRangedAttack(EntityMaid shooter, LivingEntity target, float distanceFactor) { AbstractArrow entityArrow = getArrow(shooter, distanceFactor); diff --git a/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/task/TaskCrossBowAttack.java b/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/task/TaskCrossBowAttack.java index c6fb11db5..dbef3ca5e 100644 --- a/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/task/TaskCrossBowAttack.java +++ b/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/task/TaskCrossBowAttack.java @@ -62,6 +62,19 @@ public List>> createBrainTasks ); } + @Override + public List>> createRideBrainTasks(EntityMaid maid) { + BehaviorControl supplementedTask = StartAttacking.create(entityMaid -> hasCrossBow(entityMaid) && hasAmmunition(entityMaid), IAttackTask::findFirstValidAttackTarget); + BehaviorControl findTargetTask = StopAttackingIfTargetInvalid.create((target) -> !hasCrossBow(maid) || !hasAmmunition(maid) || farAway(target, maid)); + BehaviorControl shootTargetTask = new CrossbowAttack<>(); + + return Lists.newArrayList( + Pair.of(5, supplementedTask), + Pair.of(5, findTargetTask), + Pair.of(5, shootTargetTask) + ); + } + @Override public void performRangedAttack(EntityMaid shooter, LivingEntity target, float distanceFactor) { shooter.performCrossbowAttack(shooter, 1.6F); diff --git a/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/task/TaskDanmakuAttack.java b/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/task/TaskDanmakuAttack.java index 9c57dc4b8..86b38857f 100644 --- a/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/task/TaskDanmakuAttack.java +++ b/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/task/TaskDanmakuAttack.java @@ -73,6 +73,19 @@ public List>> createBrainTasks ); } + @Override + public List>> createRideBrainTasks(EntityMaid maid) { + BehaviorControl supplementedTask = StartAttacking.create(this::hasGohei, IAttackTask::findFirstValidAttackTarget); + BehaviorControl findTargetTask = StopAttackingIfTargetInvalid.create((target) -> !hasGohei(maid) || farAway(target, maid)); + BehaviorControl shootTargetTask = new MaidShootTargetTask(2); + + return Lists.newArrayList( + Pair.of(5, supplementedTask), + Pair.of(5, findTargetTask), + Pair.of(5, shootTargetTask) + ); + } + @Override public void performRangedAttack(EntityMaid shooter, LivingEntity target, float distanceFactor) { shooter.getBrain().getMemory(MemoryModuleType.NEAREST_LIVING_ENTITIES).ifPresent(livingEntities -> {