Coding mit Java | Java-basierten APIs

  • Ersteller Ersteller ij9F_i0FaF-d9lrDSDDpDbfo
  • Erstellt am Erstellt am
Status
Für weitere Antworten geschlossen.
Ich denke mal das das ziemlich viel Rechenleistung ziehen würde.

Am besten wäre es, wenn man irgendwie das Gehen des Villagers cancel könnte.

Gibt es denn ein Event das ausgeführt wird wenn ein Spieler den Villager schlägt? Der sollte nämlich auch unsterblich sein.
EntityDamageByEntityEvent

einfach schauen ob das Entity n Villager ist und der Damager n Player.
 
Du musst halt die aktuelle Position des Villagers abspeichern und jeden Tick überprüfen, ob die sich verändert hat. Wenn das so sein sollte, teleportiere ihn wieder an die ursprüngliche Location. Sowas wie ein "EntityMoveEvent" gibt es in Bukkit einfach nicht.

EDIT: Hier gibt es ein Beispiel im Bukkit Forum: http://bukkit.org/threads/entity-move-event-or-how-to-stop-mobs.28443/
Allerdings solltest du auf jeden Fall den BukkitScheduler statt einem Java Timer nutzen!

Gruß
1Darco1
 
Du musst halt die aktuelle Position des Villagers abspeichern und jeden Tick überprüfen, ob die sich verändert hat. Wenn das so sein sollte, teleportiere ihn wieder an die ursprüngliche Location. Sowas wie ein "EntityMoveEvent" gibt es in Bukkit einfach nicht.

EDIT: Hier gibt es ein Beispiel im Bukkit Forum: http://bukkit.org/threads/entity-move-event-or-how-to-stop-mobs.28443/
Allerdings solltest du auf jeden Fall den BukkitScheduler statt einem Java Timer nutzen!

Gruß
1Darco1


Ok. Dann mach ich das so :)

Schade eigentlich sollte eigentlich mal in Spigot implementiert werden ;)

Danke. Werde ich mir mal durchlesen.
 
Ok. Dann mach ich das so :)

Schade eigentlich sollte eigentlich mal in Spigot implementiert werden ;)

Danke. Werde ich mir mal durchlesen.
Hey, es wird nie in Spigot implementiert werden, jedenfalls habe ich das lesen können. Ein Event , dass bei jedem EntityMove triggerd, wäre einfach zu performance-lastig.

Aber wenn der Villager sich sowieso nicht bewegen soll, wieso baust du ihn nicht einfach, wie in BedWars, mit Zäunen ein und cancelst das EntityDamageEvent , wobei das EntityDamageByEntityEvent hierbei Quatsch ist, da man den Villager dann z.B. mit Lava töten könnte.

Ich habe versucht ein EntityMoveEvent zu erstellen , aber Bukkit will nicht.
 
Wisst ihr wie ich einen Villager dazu bringe sich nicht mehr zu bewegen, wie auf dem GommeServer bei Aura, die Villager für die Schuhe?

Man könnte ihn immer wieder zurück zu seiner Position porten, aber ich denke das zieht zu viel Rechenleistung. :/

Habt ihr eine Idee?

Gruß,
lusu007

//EDIT: Ich glaube ich spamme diesen Thread wirklich zu. XD
Gibts da nicht diese goalpaths? Ich hatte mal was gehört, dass man die löschen kann :/
 
Hey, es wird nie in Spigot implementiert werden, jedenfalls habe ich das lesen können. Ein Event , dass bei jedem EntityMove triggerd, wäre einfach zu performance-lastig.

Aber wenn der Villager sich sowieso nicht bewegen soll, wieso baust du ihn nicht einfach, wie in BedWars, mit Zäunen ein und cancelst das EntityDamageEvent , wobei das EntityDamageByEntityEvent hierbei Quatsch ist, da man den Villager dann z.B. mit Lava töten könnte.

Ich habe versucht ein EntityMoveEvent zu erstellen , aber Bukkit will nicht.
Sonst gibts da einen Entry in der BKCommons lib. :) https://github.com/bergerkiller/BKC...ler/bukkit/common/events/EntityMoveEvent.java
Bin mir aber nicht sicher, ob die up to date ist :)
 
  • Like
Reaktionen: lusu007
Hey.
Langsam komme ich net weiter xD
Ich will , wenn ein Spieler in einer ArrayList ist , dass er keinen Schaden bekommt aber dieser Code hier geht nicht :(

Code:
public class DamageEvent implements Listener {
   
    @EventHandler
    public void onDamage(EntityDamageEvent e ) {
       
        Entity p = e.getEntity();
       
        if(main.DamageList.contains(p)) {
           
            e.setCancelled(true);
           
        } else {
            e.setCancelled(false);
        }
           
        }
       
    }
 
Hey.
Langsam komme ich net weiter xD
Ich will , wenn ein Spieler in einer ArrayList ist , dass er keinen Schaden bekommt aber dieser Code hier geht nicht :(

Code:
public class DamageEvent implements Listener {
   
    @EventHandler
    public void onDamage(EntityDamageEvent e ) {
       
        Entity p = e.getEntity();
       
        if(main.DamageList.contains(p)) {
           
            e.setCancelled(true);
           
        } else {
            e.setCancelled(false);
        }
           
        }
       
    }
Ich glaube du musst "Player p = e.getPlayer" schreiben anstatt "Entity e = e.getEntity"

Ich würde das so machen weil du nur Spieler willst :)
Was für eine arraylist hast du im Main? <Was?>
 
Ich glaube du musst "Player p = e.getPlayer" schreiben anstatt "Entity e = e.getEntity"

Ich würde das so machen weil du nur Spieler willst :)
Was für eine arraylist hast du im Main? <Was?>
e.getPlayer() geht nicht. Er returnt ein Entity.
Wenn dann Player p = (Player)e.getEntity();
Also den Spieler casten.
 
Ich glaube du musst "Player p = e.getPlayer" schreiben anstatt "Entity e = e.getEntity"

Ich würde das so machen weil du nur Spieler willst :)
Was für eine arraylist hast du im Main? <Was?>
Ich hab diese List :)
public static ArrayList<Player> DamageList = new ArrayList<Player>();
 
Status
Für weitere Antworten geschlossen.

Soziale Medien

  • X
  • TikTok

Über uns

  • GommeHD.net ist einer der größten Minecraft-Server der Welt. Dir gefällt unser Server? Dann unterstütze uns durch einen Kauf im Shop!
  • Shop