Minecraft Plugins Wie erstellt man einen EventListener für Stärketränke?

2 Antworten

@EventHandler
public void on(PlayerItemConsumeEvent e) {
    ItemStack item = e.getItem();
    if(item.getType.equals(Material.POTION) {
        PotionType type = Potion.fromItemStack(item).getType();
        if(type.equals(PotionType.STRENGTH) {
            e.setCancelled(true);
        }
    }
}
Woher ich das weiß: eigene Erfahrung
if(item.getType.equals(Material.POTION)

Kann es sein dass da ein getType() kommt?

0
@TechnicGuru

Ich habe meinen Code jetzt überarbeitet und es kommt in Eclipse zwar kein Fehler, aber wenn ich einen Stärketrank trinke, passiert nichts. Hier ist mein Code von meinem Listener-Klasse:

public void on(PlayerItemConsumeEvent event) {
		
	    ItemStack itemStack = event.getItem();
	    if(itemStack.getType().equals(Material.POTION)) {
	    	
	    	PotionMeta pmeta = (PotionMeta) itemStack.getItemMeta();
	    	if(pmeta.equals(PotionType.STRENGTH)) {
	            event.setCancelled(Varo.getInstance().notStarted);
	        }
	    	
	    }
		
	    }

Das ist der Codeabschnitt von meiner Main, die Varo.class heißt:

getServer().getPluginManager().registerEvents(new StrengthLevelChangeListener(), this);

Habe ich irgendwo falsch abgeschrieben?(Habe den ItemStack umgeändert also nicht wundern)

1
@Halllomenschen

Im Event cancel reicht ein "true".

Kannst ja mal debuggen, was pmeta ausgibt.

Wenn nicht mit PotionData über getBase... probieren.

Und dort über getType den PotionType abgleichen.

1
@TechnicGuru
Kannst ja mal debuggen, was pmeta ausgibt.

Wie kann ich pmeta debuggen, wenn mein plugin auf nem Server läuft, der nicht von mir gehostet wird?

0
@TechnicGuru

Wie verwirkliche ich Variante 2 in meinem Code kenne mich nicht sooo... gut mit Plugin Programmieren aus

0
@Halllomenschen

Ich bin mobil also recht sporadisch:

PotionType ptype = pmeta.getBasePotionData().getType();

Ptype equals PotionType. STRENGTH

1
@TechnicGuru
public void on(PlayerItemConsumeEvent event) {
		
	    ItemStack itemStack = event.getItem();
	    if(itemStack.getType().equals(Material.POTION)) {
	    	
	    	PotionMeta pmeta = (PotionMeta) itemStack.getItemMeta();
	    	PotionType ptype = pmeta.getBasePotionData().getType();
	    	if(pmeta.equals(PotionType.STRENGTH)) {
	            event.setCancelled(true);
	            event.getPlayer().sendMessage("§4Du darfst in §1Salvos§c keine Stärketränke verwenden!!!");
	            
	        }
	    	
	    }
		
	    }
	}

Das ist meine gesamte Klasse. Bei PotionType ptype = pmeta.getBasePotionData().getType(); kommt ein Fehler, und es ist kein Importfehler. Was habe ich falsch gemacht?

0
@TechnicGuru

habe deinen #Funktion Code 1:1 Copy & Pasted und es kommt schon wieder der Fehler mit dem .getBasePotionData(). Ist das Versionenabhängig?

0
@TechnicGuru
package de.nurteam.varo.listeners;


import org.bukkit.Material;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerItemConsumeEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.PotionMeta;
import org.bukkit.potion.PotionType;


import de.nurteam.varo.Varo;


public class StrengthLevelChangeListener implements Listener{
	
	@EventHandler
	public void on(PlayerItemConsumeEvent event) {
		
		ItemStack itemStack = event.getItem();
        if(itemStack.getType().equals(Material.POTION)) {
            PotionType type = Potion.fromItemStack(itemStack).getType();
            if(type.equals(PotionType.STRENGTH)) {
                event.setCancelled(true);
                event.getPlayer().sendMessage("§4Du darfst in §1Salvos§c keine Stärketränke verwenden!!!");
            }
        }
		
	    }
	}

Das ist mein gesamter Code. Ich bekomme bei Potion.fromItemStack(itemStack).getType();

einen Fehler. Ist das ein Fehler am einem PC?

0
@Halllomenschen

Du hast Potion nicht importiert. Meine IDE macht das automatisch, es fehlt:

Import org.bukkit.potion.Potion

1
@TechnicGuru

Ok mein Fehler mit Import vielen Dank für alles , das du so schnell geantwortet hast etc.

1

Minecraft plugin coding Schneebälle mit einer Iron Hoe schießen klappt nicht was tun?

Hallöchen,

Da ich mich jetzt langsam an das programmieren von Minecraft Plugins ran tasten wollte habe ich versucht mit einer eisen hacke schneebälle zu schießen. jedoch klappt das nicht ganz wie es soll bzw GARNICHT :)

Hier der code:

import java.util.ArrayList;

import org.bukkit.Material; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.entity.Snowball; import org.bukkit.entity.WitherSkull; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.plugin.java.JavaPlugin;

public class Daten extends JavaPlugin implements Listener{

private Daten plugin;
ArrayList<String> used = new ArrayList<>();

@Override
public void onEnable() {
    System.out.println("[Daten] Plugin wurde erfolgreich geladen.");
}

@Override
public void onDisable() {
    System.out.println("[Daten] Plugin erfolgreich deaktiviert.");
}


public boolean onCommand(CommandSender sender, Command cmd, String cmdlabel, String[] args) {
    Player p = (Player) sender;
    
    if(cmd.getName().equalsIgnoreCase("daten")) {
        p.sendMessage("§7§l--[§8§lAIRPVP§7§l]--");
        p.sendMessage("§7§l- §bTeamspeak: /");
        
        return true;
    }
    
    return false;
}

@EventHandler
public void inteact(PlayerInteractEvent e){
    
    if(e.getItem().getType() == Material.ARROW){
        e.getPlayer().launchProjectile(Snowball.class);
    }
}

}

mit freundlichen Grüßen Dustin

...zur Frage

Minecraft Spigot 1.8 plugin Bug (Selbst programmiert)!?

Hallo. ich ahbe eein plugin geschrieben (mit video hilfe) womit ich ein hideall item habe also wnen man mit nem item (im meinem fall Lohrenrute) rechtsklick macht, sollen alle unsichtbar werden, abber in aclipse meckert der an, das ".getServer()" nicht definiert wäre.

Heir mal der code:

package System;

import java.util.ArrayList;

import javax.sound.midi.MidiDevice.Info;

import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerInteractEvent;

public class Items implements Listener {

private Info plugin;
ArrayList<String> hidden = new ArrayList<>();

public Items(Info info) {
    this.plugin = info;
    this.plugin.getServer().getPluginManager().registerEvents(this, plugin);
}

@EventHandler
public void onplayerItneract(PlayerInteractEvent e) {
    Player p = e.getPlayer();
    
    if(e.getAction() ==Action.RIGHT_CLICK_AIR | e.getAction() == Action.RIGHT_CLICK_BLOCK) {
        if(e.getMaterial().equals(Material.BLAZE_ROD)) {
            
            for(Player players : Bukkit.getOnlinePlayers()) {
                
                if(hidden.contains(p.getName())) {
                    hidden.remove(p.getName());
                    p.showPlayer(players);
                    p.sendMessage("§aAlle Spieler sind nun wieder sichtbar!");
                }else
                    if(!hidden.contains(p.getName())) {
                        hidden.add(p.getName());
                        p.hidePlayer(players);
                        p.sendMessage("§cAlle Spieler sind nun unsichtbar");
                        
                    }
            }
        }
    }
}

}

...zur Frage

Was möchtest Du wissen?