PathfinderGoals von Entity ändern

  • Guten Abend,

    ich möcht gern einen Eisengolem so programmieren, dass dieser nicht automatisch Zombies in seiner Nähe angreift, sondern sich ganz ruhig verhält.

    Das kann man ja soweit ich weiß nur mit PathfinderGoals machen.

    Da aber eine CustomEntity-Klasse bei mir nicht funktioniert (Entity wird einfach nicht gespawnt), hab ich überlegt, ob man das ganze vielleicht von einem gespawnten Entity ändern kann.

    Ich hab noch den Code da von dem damaligen Test mit der CustomEntity-Klasse und hab den Golem daher so verändert:


    getPrivateField-Methode:



    Das ganze funktioniert aber nicht, da man laut Error einen CraftIronGolem nicht zu einem EntityIronGolem casten kann:

    Nun meine Frage:

    Gibt es noch einen anderen Weg die Pathfinder-Goals von einem bereits gespawnten Entity zu verändern?


    Danke für die Hilfe!

  • Guten Tag MadeByProxxy,


    wäre es möglich deine Imports zu zeigen und was in Zeile 50 aus aus deinem Lv4ShadowDefender ist?
    Ich denke du hast da nur falsche Imports genutzt. Der kann halt org.bukkit.craftbukkit.v1_8_R3.entity.CraftIronGolemzu net.minecraft.server.v1_8_R3.EntityIronGolem casten

    Da es in der 1.16 mit dem Pathgoal einfacher geht, kann ich dir ansonsten leider nicht weiter helfen.


    Mit freundlichen Grüßen


    MrFireDevil :evil:

  • Guten Tag,


    ja klar.

    Hier die Imports:


    Zeile 50 ist diese hier:

    Code
    List goalB = (List)getPrivateField("b", PathfinderGoalSelector.class, ((EntityIronGolem)golem).goalSelector); goalB.clear();


    Kann ich nicht theoretisch alle x Sekunden das Target der Entities auf den Spieler setzen, falls das nicht funktionieren sollte? Bzw. wenn ich das Target mit #setTarget ändere, targetten die dann auch wirklich mich, oder targettet ein Eisengolem ein Zombie, bevor er einen passiven Spieler angreift?


    MfG

  • Natürlich kannst du das auch machen, aber es gibt ein Event ob der Target sich verändert EntityTargetEvent ich weiß allerdings nicht ob es das schon der 1.18 gibt.
    Dies kannst du einfach canceln, wenn du sowieso mit Packets arbeitest. Kann dir aber nicht genau sagen ob das zu 100% jetzt so funktioniert.

    Ich arbeite absolut nicht mit Packets (höchstens mit ProtocolLib, damit kannst du solche Packets einfacherer verwenden.
    Kann ich nur empfehlen.

    Mit freundlichen Grüßen


    MrFireDevil :evil:


    Kannst du das weiter ausführen? Das würde mich auch interessieren.

    Guten Tag,


    ich habe noch mal nachgesehen, es wäre nur mit PaperMC möglich. Hatte es anders in Erinnerung.
    Aber soweit ich weiß, geht es so:

    Code
    Player player;
    Sheep sheep = player.getWorld().spawn(player.getLocation(), Sheep.class);
    Pathfinder pathfinder = sheep.getPathfinder();
    pathfinder.findPath(player);

    Das sollte bereits schon ausreichen. Wenn du noch Fragen hast, zögere nicht :S


    Mit freundlichen Grüßen


    MrFireDevil :evil:

    Einmal editiert, zuletzt von DevTek () aus folgendem Grund: Ein Beitrag von MrFireDevil mit diesem Beitrag zusammengefügt.