mysteriöse Fehler meldung

Dieses Thema im Forum "Programmierung" wurde erstellt von TheFreshTobi, 6. Februar 2016.

  1. TheFreshTobi
    Offline

    TheFreshTobi

    Registriert seit:
    6. Februar 2016
    Beiträge:
    1
    Hallo, ich habe ein kleines problem.und zwar bin ich grade ein Plugin am schreiben und die befehle gehen irgendwie nicht...die Konsole sagt mir das das problem am Player p = (Player) sender; liegt nur ich finde kein fehler...auch an der Konsole geht der test befehl "Info" nicht, ich habe ihn extra mit cmd.sendmessage("") geschrieben. aber immer noch kommt die fehler meldung.

    ich programmiere mit Bukkit 1.8.8 Java 8



    hier ist der Code:


    package fresh;

    import org.bukkit.Material;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.event.Listener;
    import org.bukkit.inventory.Inventory;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.meta.ItemMeta;
    import org.bukkit.plugin.java.JavaPlugin;

    public class McOpMain extends JavaPlugin implements Listener {

    private Inventory inv=null;


    public void onEnable(){
    System.out.println("[McOpServerSystem]§2 wurde erfolgreich gestartet");
    }

    public void onDisable(){
    System.out.println("§6[McOpServerSystem]§cWurde erfolgreich deaktiviert :(");
    }


    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
    Player p = (Player) sender;
    if(cmd.getName().equalsIgnoreCase("mcop")){
    inv = p.getPlayer().getServer().createInventory(null, 18, "Klassen");

    ItemStack istack = new ItemStack(Material.STONE_SWORD);
    ItemMeta istackmeta = istack.getItemMeta();
    istackmeta.setDisplayName("§a§lVip-Kit");


    ItemStack istack2 = new ItemStack(Material.GOLD_SWORD);
    ItemMeta istackmeta2 = istack2.getItemMeta();
    istackmeta2.setDisplayName("§b§lElite-Kit");


    ItemStack istack3 = new ItemStack(Material.IRON_SWORD);
    ItemMeta istackmeta3 = istack3.getItemMeta();
    istackmeta3.setDisplayName("§6§lSupper-Kit");


    ItemStack istack4 = new ItemStack(Material.WOOD_SWORD);
    ItemMeta istackmeta4 = istack.getItemMeta();
    istackmeta4.setDisplayName("§a§lGamer-Kit");


    inv.setItem(5, istack);
    inv.setItem(10, istack2);
    inv.setItem(13, istack3);
    inv.setItem(2, istack4);


    p.getPlayer().openInventory(inv);

    }

    if(cmd.getName().equalsIgnoreCase("Info")){
    sender.sendMessage("Test");
    }


    return true;



    }





    }
     
    #1
  2. GPSforLEGENDS
    Offline

    GPSforLEGENDS

    Registriert seit:
    21. März 2014
    Beiträge:
    295
    Ort:
    Bürostuhl
    Minecraft:
    GPSforLEGENDS
    http://wiki.bukkit.org/Plugin_Tutorial/de
    Lesen und durcharbeiten ;)

    Ansonsten (auch wenn ich weiß das du keinen Plan hast wie man das macht) vorher überprüfen ob der Sender wirklich ein Spieler ist bevor du ihn zu einen player castest.

    Edit: es bringt nichts die itemmeta zu ändern wenn du sie nicht wieder auf ein Item setzt und das nächste mal bitte den Code tag benutzen.
     
    #2
    jensIO gefällt das.
  3. McWizzardDev
    Offline

    McWizzardDev

    Registriert seit:
    7. Oktober 2015
    Beiträge:
    58
    Du hast bei den ItemStacks einen Fehler,
    istack.setItemMeta(istackmeta);

    Aber ich habe dir eine Methode, wie du viel einfacher ItemStacks erstellen kannst geschrieben:

    Code (Text):
    1.     private static ItemStack createItemStack(Material mat, String name) {
    2.         ItemStack item = new ItemStack(mat);
    3.         ItemMeta meta = item.getItemMeta();
    4.         meta.setDisplayName(name);
    5.         item.setItemMeta(meta);
    6.         return item;
    7.     }
    Du kannst diese Methode so anwenden:

    Code (Text):
    1. ItemStack item = createItemStack(Material.GOLD_BLOCK, "§9Der Name");
    2.  
    3. inv.setItem(1, item);
    Sonst ist mir auf die schnell nichts aufgefallen ;)

    #Packe deinen Code nächstes mal doch besser in einen Code (Du musst dafür auf diese Klammer klicken und dann Code auswählen, dort bitte den Code eintragen, so ist das ganze schon ein wenig übersichtlicher
     
    #3
  4. Cyrox
    Offline

    Cyrox

    Vielleicht solltest du nicht nur den Code sondern auch den Fehler posten? Nur so ne Idee
     
    #4
  5. skcxck
    Offline

    skcxck

    Registriert seit:
    9. November 2013
    Beiträge:
    12
    Ort:
    Frankfurt am Main
    Minecraft:
    skcxck
    Wie @GPSforLEGENDS bereits erwähnte: Du solltest vorher überprüfen, ob der Sender tatsächlich ein Spieler ist.
    Code (Text):
    1.  
    2. Player p = null;
    3. if (sender instanceof Player) { p = (Player) sender; } else { sender.sendMessage("Du bist kein Spieler!"); }
    4.  
    Das hilft dir vermutlich nur geringfügig bei deiner Problemlösung, allerdings solltest du dir das auf die Seele binden.
     
    #5
    jensIO gefällt das.