• 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!

Zufällige Statuseffekte | Teleport, Schaden und Levitation von Shulkern vermeiden

Rindex

Minecrafter
Registriert
21 März 2018
Beiträge
2
Diamanten
0
Moin Leute,

da ich seit kurzem Interesse für das Programmieren besitze, wollte ich mir ein eigenes Plugin schreiben, mit dem Spieler zufällige Statuseffekte (entweder Speed, Regeneration oder Stärke) erhalten, wenn sie von einer ShulkerBullet getroffen wurden. Dabei habe ich schon selber das grundlegende Event erfolgreich registriert, jedoch würde ich gerne noch weitere Details hinzufügen. Einerseits weiß ich nicht, wie ich die zufälligen Statuseffekte einem Spieler zu schreiben kann. Habe zwar mit "||" mein Glück versucht, jedoch kamen nur Fehlermeldungen. Ebenso will ich, dass die Shulker keinen Schaden mehr machen, sich nicht mehr teleportieren können sowie den Standard-Levitation-Effekt nicht mehr bei einem Treffer übertragen. Hier nun mein bisheriges Grundkonzept. Zuerst das dazugehörige Event und dann der Command, der die speziellen Shulker spawnt, welche jeweils in einer eigenen Klasse liegen. Hiermit bedanke ich mich schon mal an die ganzen Antworten!

- Rindex

Code:
package de.rindex.shulker.listener;

import org.bukkit.entity.Player;
import org.bukkit.entity.ShulkerBullet;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.ProjectileHitEvent;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;


public class BulletListener implements Listener {

    @EventHandler
    public boolean onBulletHit(ProjectileHitEvent e) {
        if (e.getEntity() instanceof ShulkerBullet) {
            Player p = (Player) e.getHitEntity();
            p.sendMessage("§aDu wurdest von einer ShulkerBullet getroffen!");
            p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 500, 1));
        }
        return false;
    }
}
:
Code:
package de.rindex.shulker.commands;;

import org.bukkit.DyeColor;
import org.bukkit.Location;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.entity.Shulker;

public class SummonCommand1 implements CommandExecutor {

    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if(sender instanceof Player) {
            Player player = (Player) sender;
            Location loc = player.getLocation();
            Shulker shulker = (Shulker) player.getWorld().spawnEntity(loc, EntityType.SHULKER);
            shulker.setColor(DyeColor.BLUE);
            shulker.setSilent(true);
            shulker.setCustomName("§1Blauer Shulker");
            player.sendMessage("Du hast einen blauen Shulker gespawnt!");
        }
        return true;
    }
}
 

BlackHole

Workaholic
Registriert
1 Juli 2012
Beiträge
752
Diamanten
0
Minecraft
BlackHole
Derzeit gibt es bei Spigot kein Event, wenn ein Spieler einen Effekt zugewiesen bekommt. Du kannst aber das EntityDamageByEntityEvent behandeln und entsprechend bei Shulkerprojektilen abbrechen.

Die möglichen Statuseffekte könntest du dir in einer Liste speichern und aus dieser zufällig einen auswählen:
Code:
int index = random.nextInt(list.length());

Schaue dir auch mal das EntityTeleportEvent an.

Bei deiner Methode onBulletHit() solltest du überprüfen, ob das getroffene Entity auch wirklich ein Spieler ist.
 

Rindex

Minecrafter
Registriert
21 März 2018
Beiträge
2
Diamanten
0
Moin,
danke schon mal für deine Tipps. Habe jene Probleme bereits alle gelöst. Nun wollte ich gerne den Projectilen nach dem ProjectileLaunchEvent Namen nach den entsprechenden Statuseffekten geben, jedoch funktioniert mein Code nicht. Wäre dankbar, ob jemand eventuell Fehler in meinem Code finden würde. Das Event ist bereits in der Main registriert.
Code:
pm.registerEvents(new LaunchListener(), this);

- Rindex
Code:
package de.rindex.shulker.listener;

import org.bukkit.entity.ShulkerBullet;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.ProjectileLaunchEvent;

public class LaunchListener implements Listener {

    @EventHandler
    public void onBulletLaunch(ProjectileLaunchEvent e) {
        if(e.getEntity()instanceof ShulkerBullet) {
            ShulkerBullet bullet = (ShulkerBullet) e.getEntity();
            bullet.setCustomName("§bGeschwindigkeit");
            bullet.setInvulnerable(true);

        }
    }

}
 
Oben