2016-04-06 8 views
-3

Kürzlich habe ich dieses Plugin codiert, das ein Inventar öffnen würde, wenn Sie auf einen Player geklickt haben, aber aus irgendeinem Grund öffnet sich das Inventar nicht.Ich brauche meinen Listener, um so schnell wie möglich zu arbeiten - Spigot Plugin

bitte helfen Sie mir.

Main:

package me.jacobsscoots.main; 

import java.util.ArrayList; 
import java.util.List; 

import org.bukkit.Bukkit; 
import org.bukkit.ChatColor; 
import org.bukkit.Material; 
import org.bukkit.command.Command; 
import org.bukkit.command.CommandSender; 
import org.bukkit.entity.Player; 
import org.bukkit.inventory.ItemStack; 
import org.bukkit.inventory.PlayerInventory; 
import org.bukkit.inventory.meta.ItemMeta; 
import org.bukkit.plugin.java.JavaPlugin; 

import me.jacobsscoots.listeners.Admin; 

public class Main extends JavaPlugin{ 

Admin admin; 

List<String> toggle = new ArrayList<String>(); 

public void onEnable() { 
    getLogger().info("Utils is now enabled"); 
    admin = new Admin(); 
    Bukkit.getServer().getPluginManager().registerEvents(admin, this); 
} 

public void onDisable() { 
    getLogger().info("Utils is now disabled"); 
} 

public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { 
    Player player = (Player) sender; 
    PlayerInventory pi = player.getInventory(); 
    if(label.equalsIgnoreCase("admin")){ 
     if(!(sender instanceof Player)){ 
      sender.sendMessage(ChatColor.RED + "Staff Mode" + ChatColor.WHITE + " >> " + ChatColor.GRAY + "You muse be a player to use this command!"); 
      return false; 
     } 
     if(toggle.contains(player.getName())){ 
      player.sendMessage(ChatColor.RED + "Staff Mode" + ChatColor.WHITE + " >> " + ChatColor.GRAY + "You are no longer in staff mode."); 
      toggle.remove(player.getName()); 

      pi.clear(); 

      return true; 
     } 

     player.sendMessage(ChatColor.RED + "Staff Mode" + ChatColor.WHITE + " >> " + ChatColor.GRAY + "You are now in staff mode."); 
     toggle.add(player.getName()); 


     ItemStack paper = new ItemStack(Material.PAPER, 1); 
     ItemMeta meta = paper.getItemMeta(); 
     meta.setDisplayName(ChatColor.RED + "Punish"); 
     paper.setItemMeta(meta); 

     pi.addItem(paper); 

     admin.setEnabled(true); 

     return true; 
    } 
    return false; 
} 

}

Listener Klasse:

package me.jacobsscoots.listeners; 

import org.bukkit.Bukkit; 
import org.bukkit.Material; 
import org.bukkit.entity.EntityType; 
import org.bukkit.entity.Player; 
import org.bukkit.event.EventHandler; 
import org.bukkit.event.EventPriority; 
import org.bukkit.event.Listener; 
import org.bukkit.event.inventory.InventoryClickEvent; 
import org.bukkit.event.player.PlayerInteractEntityEvent; 
import org.bukkit.inventory.Inventory; 
import org.bukkit.inventory.ItemStack; 
import org.bukkit.inventory.meta.ItemMeta; 

import net.md_5.bungee.api.ChatColor; 

public class Admin implements Listener{ 

private boolean enabled = false; 

@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) 
public void onAdminEvent(PlayerInteractEntityEvent e) { 
    if (!(e.getRightClicked() instanceof Player)) 
     return; 

    if(enabled == false){ 
     return; 
    } 
    Player p = e.getPlayer(); 
    Player target = (Player) e.getRightClicked(); 

    if(p.isOp() && p.getInventory().getItemInMainHand().equals(Material.PAPER) && e.getRightClicked().getType() == EntityType.PLAYER){ 
     openGUI(p, target); 
    } 

}

@EventHandler 
public void onInventoryClick(InventoryClickEvent event) 
{ 
    if (event.isCancelled()) 
     return; 

    if (!event.getInventory().getName().contains(" Punishment")) 
     return; 

    Player player = (Player) event.getWhoClicked(); 
    Player target = Bukkit.getPlayer(ChatColor.stripColor(event.getClickedInventory().getName().split(" ")[0])); 
    ItemStack item = event.getCurrentItem(); 
    Integer slot = event.getSlot(); 

    if (item == null || item.getType() == Material.AIR || !item.hasItemMeta()) 
     return; 

    if (slot == 20){ 
     target.kickPlayer(player.getName() + " Banned you for: " + item.getItemMeta().getDisplayName()); 
    } 
    event.setCancelled(true); 
} 

private void openGUI(Player player, Player target) { 

    Inventory inv = Bukkit.createInventory(null, 54, ChatColor.GRAY + target.getName() + " Punishment"); 

    ItemStack Ban_1 = new ItemStack(Material.IRON_BARDING, 1); 
    ItemMeta BanMeta_1 = Ban_1.getItemMeta(); 
    BanMeta_1.setDisplayName(ChatColor.RED + "Hacked Clients, Cheats and Exploits"); 
    Ban_1.setItemMeta(BanMeta_1); 

    ItemStack Ban_2 = new ItemStack(Material.IRON_BARDING, 1); 
    ItemMeta BanMeta_2 = Ban_2.getItemMeta(); 
    BanMeta_2.setDisplayName(ChatColor.RED + "Spamming/Advertising"); 
    Ban_2.setItemMeta(BanMeta_2); 

    ItemStack Ban_3 = new ItemStack(Material.IRON_BARDING, 1); 
    ItemMeta BanMeta_3 = Ban_3.getItemMeta(); 
    BanMeta_3.setDisplayName(ChatColor.RED + "Not Respecting Players or Staff Members"); 
    Ban_3.setItemMeta(BanMeta_3); 

    ItemStack Ban_4 = new ItemStack(Material.IRON_BARDING, 1); 
    ItemMeta BanMeta_4 = Ban_4.getItemMeta(); 
    BanMeta_4.setDisplayName(ChatColor.RED + "DDOS/Dox Jokes and Threats"); 
    Ban_4.setItemMeta(BanMeta_4); 

    ItemStack Ban_5 = new ItemStack(Material.IRON_BARDING, 1); 
    ItemMeta BanMeta_5 = Ban_5.getItemMeta(); 
    BanMeta_5.setDisplayName(ChatColor.RED + "Mods that provide unfair advantages"); 
    Ban_5.setItemMeta(BanMeta_5); 

    ItemStack Ban_6 = new ItemStack(Material.IRON_BARDING, 1); 
    ItemMeta BanMeta_6 = Ban_6.getItemMeta(); 
    BanMeta_6.setDisplayName(ChatColor.RED + "Racism and Sexism"); 
    Ban_6.setItemMeta(BanMeta_6); 

    ItemStack Ban_7 = new ItemStack(Material.IRON_BARDING, 1); 
    ItemMeta BanMeta_7 = Ban_7.getItemMeta(); 
    BanMeta_7.setDisplayName(ChatColor.RED + "False Reporting"); 
    Ban_7.setItemMeta(BanMeta_7); 

    ItemStack Ban_8 = new ItemStack(Material.IRON_BARDING, 1); 
    ItemMeta BanMeta_8 = Ban_8.getItemMeta(); 
    BanMeta_8.setDisplayName(ChatColor.RED + "Greifing/Block Spam"); 
    Ban_8.setItemMeta(BanMeta_8); 

    ItemStack Pane_1 = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 11); 

    ItemStack Pane_2 = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 14); 
    ItemMeta PaneMeta_2 = Pane_2.getItemMeta(); 
    PaneMeta_2.setDisplayName(ChatColor.RED + "Kick"); 
    Pane_2.setItemMeta(PaneMeta_2); 

    ItemStack Pane_3 = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) 10); 
    ItemMeta PaneMeta_3 = Pane_3.getItemMeta(); 
    PaneMeta_3.setDisplayName(ChatColor.GREEN + "Warn"); 
    Pane_3.setItemMeta(PaneMeta_3); 

    ItemStack Exit = new ItemStack(Material.BARRIER, 1, (short) 10); 
    ItemMeta ExitMeta = Exit.getItemMeta(); 
    ExitMeta.setDisplayName(ChatColor.RED + "Exit GUI"); 
    Exit.setItemMeta(ExitMeta); 

    ItemStack skull = new ItemStack(Material.SKULL_ITEM, 1, (short) 3); 

    inv.setItem(0, Pane_1); 
    inv.setItem(1, Pane_1); 
    inv.setItem(2, Pane_1); 
    inv.setItem(3, Pane_2); 
    inv.setItem(4, skull); 
    inv.setItem(5, Pane_2); 
    inv.setItem(6, Pane_1); 
    inv.setItem(7, Pane_1); 
    inv.setItem(8, Pane_1); 
    inv.setItem(20, Ban_1); 
    inv.setItem(21, Ban_2); 
    inv.setItem(22, Ban_3); 
    inv.setItem(23, Ban_4); 
    inv.setItem(24, Ban_5); 
    inv.setItem(30, Ban_6); 
    inv.setItem(31, Ban_7); 
    inv.setItem(32, Ban_8); 
    inv.setItem(45, Pane_1); 
    inv.setItem(46, Pane_1); 
    inv.setItem(47, Pane_1); 
    inv.setItem(48, Pane_3); 
    inv.setItem(49, Exit); 
    inv.setItem(50, Pane_3); 
    inv.setItem(51, Pane_1); 
    inv.setItem(52, Pane_1); 
    inv.setItem(53, Pane_1); 

    player.openInventory(inv); 
} 

public boolean isEnabled(){ 
    return enabled; 
} 

public void setEnabled(boolean enabled){ 
    this.enabled = enabled; 
} 
} 

Plugin.yml:

name: Utils 
version: 1.4.1 
description: Staff mode plugin for servers 
author: SickNation 
main: me.jacobsscoots.main.Main 
database: false 
commands: 
admin: 
description: Default toggle command for staff mode. 
usage: Syntax error! Simply type /&lt;command&gt; to go into staff mode. 

Danke für die Hilfe, wenn Sie können,

Jacob.

+1

Namenskonventionen, bitte! 'BanMeta2', nicht' BanMeta_2'! – bcsb1001

Antwort

3

Der Vergleich in der letzten Anweisung des PlayerInteractEntityEvent Methode:

p.getInventory().getItemInMainHand().equals(Material.PAPER) 

immer false sein wird, weil getItemInMainHand() ein ItemStack zurückgibt, Material.PAPER ist ein Enumerator und die equals Methode in der ItemStack Schnittstelle enthält die Zeile:

if (!(obj instanceof ItemStack)) { 
    return false; 
} 

Ich vermute, Sie wollten schreiben

getItemInMainHand().getType().equals(Material.PAPER) 

... vergleicht zwei Material Enumeratoren. Als ich den Code getestet und die Zeile geändert habe, wurde die GUI geöffnet.