前提・実現したいこと
マインクラフトで既存のモブの動きを変更したい。
goalSelector, targetSelector に追加されている goal を変更 or 削除出来れば解決できる。
(以降 targetSelector のみで記述)
下記の試したことは例として、「既存のゾンビの動きから、プレイヤーをターゲットにしようとする動きを消す」
試したこと
1.targetSelector に新しいインスタンスを再代入する
java
1 public final GoalSelector goalSelector; 2 public final GoalSelector targetSelector;
→ final のため出来ない
2.特定の goal を消すようなコードを無理やり書く
java
1 @SubscribeEvent 2 public static void mobEvent(LivingSpawnEvent event) { 3 4 if (!(event.getEntity() instanceof ZombieEntity)) { 5 return; 6 } 7 ZombieEntity zombie = (ZombieEntity) event.getEntity(); 8 Stream<PrioritizedGoal> pgStream = zombie.targetSelector.getRunningGoals() 9 .filter(prioritizedGoal -> prioritizedGoal.getPriority() == 2); 10 Optional<PrioritizedGoal> prioritizedGoal = pgStream.findAny(); 11 if (prioritizedGoal.isPresent()) { 12 zombie.targetSelector.removeGoal(prioritizedGoal.get().getGoal()); 13 }
targetSelector.removeGoal は用意されているが、インスタンスを引数にしなければならない。
ゾンビがプレイヤーをターゲットにするgoalは PrioritizedGoal のPriority 2 で設定されている。
targetSelector.getRunningGoals() でしか既存の goal を取得する方法がないので、RunningGoal が Priority 2 になった瞬間(プレイヤーをターゲットにしようとした瞬間) Priority 2 のgoal を消すという無理矢理なコード
補足情報(FW/ツールのバージョンなど)
minecraft version 1.16.3
minecraft forge version 1.16.3
色々調べて試してみたのですが、どうしても解決できず困っています。
どうかご教授願います。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。