• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Spigot Creeperexplosion mit eigenen Partikeleffekten.

WlanGehtNicht

Schafhirte
Registriert
30 Mai 2017
Beiträge
105
Diamanten
312
Hallo,
ich wollte ein Plugin schreiben, wo wenn ein Creeper explodiert, Partikeleffecte an der Stelle der Explosion erscheinen.
Habe jetzt das geschrieben, aber es funktioniert nicht und im Internet finde ich auch nichts, was mir weiter hilft.

Code:
    @EventHandler
    public void onCreeper(EntityExplodeEvent e) {
        if(e.getEntity() instanceof Creeper) {
            Creeper creeper = (Creeper) e.getEntity();
            if(creeper.isPowered()) {
                creeper.getWorld().playEffect(creeper.getLocation().add(0.0D, 1.0D, 0.0D), Effect.LAVA_POP, 1);
                creeper.getWorld().playEffect(creeper.getLocation().add(0.0D, 1.0D, 0.0D), Effect.ENDER_SIGNAL, 1);
            }
        }
    }
}

Eventuell kann mir jemand hier weiter helfen. Danke
 

Chrisliebär❤️

nur echt mit ❤️
Moderator
Registriert
19 Mai 2014
Beiträge
1.675
Diamanten
830
Es fällt mir schwer zu glauben, dass man diese zwei Partikel wirklich in der Explosion sehen würde. Das sieht ansonsten ziemlich korrekt aus. Versuchs vielleicht erstmal mit mehreren Partikeln. Wenn du mutig bist, kannst du auch einfach ein paar tausend spawnen. Wenn dann dein Client laggt, weißt du, dass es funktioniert hat.

if(creeper.isPowered()) {

Merkste selbst oder brauchst du weitere Tipps?
 

WlanGehtNicht

Schafhirte
Registriert
30 Mai 2017
Beiträge
105
Diamanten
312
Es fällt mir schwer zu glauben, dass man diese zwei Partikel wirklich in der Explosion sehen würde. Das sieht ansonsten ziemlich korrekt aus. Versuchs vielleicht erstmal mit mehreren Partikeln. Wenn du mutig bist, kannst du auch einfach ein paar tausend spawnen. Wenn dann dein Client laggt, weißt du, dass es funktioniert hat.


if(creeper.isPowered()) {

Merkste selbst oder brauchst du weitere Tipps?

Habe in der Forschleife auf 10000 gestellt, aber es laggt nichts. Habe ich eventuell doch etwas im Code vergessen?

Vielleicht solltest du dir die Javadocs der Funktionen durchlesen die du benutzt anstatt sie zu verwenden, wenn du offensichtlich nicht weißt, was sie tun.


Danke
 

Chrisliebär❤️

nur echt mit ❤️
Moderator
Registriert
19 Mai 2014
Beiträge
1.675
Diamanten
830
Könnten wir uns darauf einigen, dass du präzise beschreibst, was du jeweils zwischen deinen Nachrichten versucht hast und das aktuelle Ergebnisse wiederholst? So als Faustregel, sollte keiner deiner Beiträge in eine Zeile auf meinem Bildschirm passen. Es macht nämlich wenig Spaß, wenn man jedes Mal nachfragen muss, weil die Aussage nicht eindeutig ist.

Kannst du Mal etwas mehr Code teilen? Insbesondere wüsste ich gerne, wie du den Event Händler registrierst. Ich vermute nämlich, dass du genau das nicht tust. Und bau zusätzlich Mal eine Testnachricht in die Methode ein, die an alle Spieler geschickt wird, wenn die Creeper explodiert.
 

WlanGehtNicht

Schafhirte
Registriert
30 Mai 2017
Beiträge
105
Diamanten
312
Ich möchte, dass bei der Explosion eines Creepers, dass Partikel gespawnt werden, es klappt aber nicht.
Dein Vorschlag habe ich mit einer Forschleife umgesetzt (1000 Partikel zu spawnen, um zu schauen, ob mein Client laggt). Der Client hat aber nicht gelaggt, auch bei 10000 Partikeln.

Hier der Code:

Event:
    @EventHandler
    public void onCreeper(EntityExplodeEvent e) {
        if(e.getEntity() instanceof Creeper) {
            Creeper creeper = (Creeper) e.getEntity();
            for(int i = 0; i <= 10000; i++) {
                creeper.getWorld().playEffect(creeper.getLocation().add(0.0D, 1.0D, 0.0D), Effect.LAVA_POP, 1);
                creeper.getWorld().playEffect(creeper.getLocation().add(0.0D, 1.0D, 0.0D), Effect.ENDER_SIGNAL, 1);
                creeper.getWorld().playEffect(creeper.getLocation().add(0.0D, 1.0D, 0.0D), Effect.BOW_FIRE, 1);
            }
                creeper.getWorld().playEffect(creeper.getLocation().add(0.0D, 1.0D, 0.0D), Effect.BOW_FIRE, 1);
                creeper.getWorld().playEffect(creeper.getLocation().add(0.0D, 1.0D, 0.0D), Effect.ENDER_SIGNAL, 1);
               
        }
    }

Event mit Testnachricht:
    @EventHandler
    public void onCreeper(EntityExplodeEvent e) {
        if(e.getEntity() instanceof Creeper) {
            Creeper creeper = (Creeper) e.getEntity();
            
            for(Player all : Bukkit.getOnlinePlayers()) {
                all.sendMessage("Testnachricht1");
            }
            
            for(int i = 0; i <= 10000; i++) {
                creeper.getWorld().playEffect(creeper.getLocation().add(0.0D, 1.0D, 0.0D), Effect.LAVA_POP, 1);
                creeper.getWorld().playEffect(creeper.getLocation().add(0.0D, 1.0D, 0.0D), Effect.ENDER_SIGNAL, 1);
                creeper.getWorld().playEffect(creeper.getLocation().add(0.0D, 1.0D, 0.0D), Effect.BOW_FIRE, 1);
            }
                creeper.getWorld().playEffect(creeper.getLocation().add(0.0D, 1.0D, 0.0D), Effect.BOW_FIRE, 1);
                creeper.getWorld().playEffect(creeper.getLocation().add(0.0D, 1.0D, 0.0D), Effect.ENDER_SIGNAL, 1);
                
                for(Player all : Bukkit.getOnlinePlayers()) {
                    all.sendMessage("Testnachricht2");
                }
                
        }
    }
}

Es erscheint keine Testnachricht.

Main:
    @Override
    public void onEnable() {
        getServer().getPluginManager().registerEvents(new CreeperExplode(), this);
    }
   
    @Override
    public void onDisable() {
       
    }
 

Chojo-chan

Teammaid
Social Media
Moderator
Administrator
Registriert
24 März 2013
Beiträge
293
Alter
5
Diamanten
645
Minecraft
Hadde
Wie wäre es, wenn du mal die Methode World#spawnParticle() benutzt?
Eventuell passt die besser als playEffect, schließlich willst du ja particle Spawnen und keinen Effekt abspielen :3

Außerdem solltest du eher auf den EntityType checken, der ist erheblich besser als ein instanceOf check.
Mach außerdem mal einen print vor dem ersten check, damit wir sicher sein können, dass die methode überhaupt allg aufgerufen wird.

Die Location kannst du übrigens nicht aus dem entity ziehen, sondern direkt aus dem Event. Das entity existiert zum Zeitpunkt des events nicht mehr. Das kannst du übrigens auch in den JavaDocs des Events nachlesen.
Returns the location where the explosion happened.
It is not possible to get this value from the Entity as the Entity no longer exists in the world.
 
Zuletzt bearbeitet:

Chrisliebär❤️

nur echt mit ❤️
Moderator
Registriert
19 Mai 2014
Beiträge
1.675
Diamanten
830
Ich würde noch anregen, dass du einfach mal die Plugin.jar aus deinem Serverordner hier im Forum hoch lädst. Wenn du das nicht willst, weil du nicht mit der ganzen Welt das Plugin teilen willst, dann kann ich dir noch anbieten, dass du mir die Datei als PN schickst. Ich würd mich gerne selbst davon überzeugen, dass du das alles richtig machst.
 

WlanGehtNicht

Schafhirte
Registriert
30 Mai 2017
Beiträge
105
Diamanten
312
Code:
    @EventHandler
    public void onCreeper(EntityExplodeEvent e) {
        System.out.println("Methode wird aufgerufen");
        if(e.getEntityType().equals(EntityType.CREEPER)) {
            Creeper creeper = (Creeper) e.getEntity();
            
            for(Player all : Bukkit.getOnlinePlayers()) {
                all.sendMessage("Testnachricht1");
            }
            
            for(int i = 0; i <= 10000; i++) {
                
                creeper.getWorld().spawnParticle(Particle.DRIP_LAVA, creeper.getLocation(), 1);
                
                //creeper.getWorld().playEffect(creeper.getLocation().add(0.0D, 1.0D, 0.0D), Effect.LAVA_POP, 1);
                //creeper.getWorld().playEffect(creeper.getLocation().add(0.0D, 1.0D, 0.0D), Effect.ENDER_SIGNAL, 1);
                //creeper.getWorld().playEffect(creeper.getLocation().add(0.0D, 1.0D, 0.0D), Effect.BOW_FIRE, 1);
            }
                //creeper.getWorld().playEffect(creeper.getLocation().add(0.0D, 1.0D, 0.0D), Effect.BOW_FIRE, 1);
                //creeper.getWorld().playEffect(creeper.getLocation().add(0.0D, 1.0D, 0.0D), Effect.ENDER_SIGNAL, 1);
                
                for(Player all : Bukkit.getOnlinePlayers()) {
                    all.sendMessage("Testnachricht2");
                }
                
        }
    }

Habe ich gemacht, passiert aber nichts.
 

Malfrador

Threadripper
Registriert
16 Juni 2013
Beiträge
1.473
Diamanten
396
Minecraft
Malfrador
Nichts = Die Methode wird nicht aufgerufen (Testnachricht erscheint nicht)? Oder es spawnt kein Partikel? Oder die zweite Testnachricht erscheint nicht? Dir alles aus der Nase ziehen zu müssen ist wirklich nicht hilfreich.
 

Chojo-chan

Teammaid
Social Media
Moderator
Administrator
Registriert
24 März 2013
Beiträge
293
Alter
5
Diamanten
645
Minecraft
Hadde
Dann wird deine Methode nicht aufgerufen. Du beziehst die location btw immer noch auf dem Entity. Lies dir bitte nochmal meine letzte Nachricht durch.

Könntest du uns einfach deinen Source schicken? Du machst anscheinend irgendwo einen größeren Fehler. Anscheinend wird dein EventHandler nicht registriert.
 

Chrisliebär❤️

nur echt mit ❤️
Moderator
Registriert
19 Mai 2014
Beiträge
1.675
Diamanten
830
Also ich seh in deinem Code keine Fehler und mal abgesehen davon, dass playEffect für Soundeffekte ist und du eigentlich spawnParticle benutzen solltest, scheint der Eventhandler auch zu funktionieren. Und du solltest außerdem die Location aus dem Event nutzen, aber das hat @Hadde-chan ja schon erklärt: https://hub.spigotmc.org/javadocs/s.../entity/EntityExplodeEvent.html#getLocation()

1598447448114.png


Startest du den Server wirklich für jeden neuen Test auch neu? Und bist du sicher, dass du das Plugin nach dem Kompilieren auch in den Pluginordner kopiert hast?

Es wird sogar etwas gespawnt.

1598447653821.png
 

Chrisliebär❤️

nur echt mit ❤️
Moderator
Registriert
19 Mai 2014
Beiträge
1.675
Diamanten
830
Habe den Fehler.
Hatte Mobgriefing auf false, jetzt habe ich es auf true gesetzt und es geht.
Aber Danke für die Hilfe.
:yuno::zombie:
Uh, das ist aber tatsächlich eine spannende Beobachtung, ich würde ja erwarten, dass es bei einer Explosion auch grundsätzlich zu einem Explosionsevent kommt.
 
Oben