2017-07-15 7 views
-1

私は可視性を切り替えるハブサーバー用のプラグインを作成しようとしています。 Hypixelのように、または実際にハブを持つ他のセミポピュラーなサーバー。Spigot API - Player Visibility Toggle Not Working

メインクラス:

package com.infxnty.HubCore; 

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

import org.bukkit.Bukkit; 
import org.bukkit.ChatColor; 
import org.bukkit.Material; 
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 Main extends JavaPlugin implements Listener { 

    private static Main Instance; 

    @Override 
    public void onEnable() { 
     setInstance(this); 

     String text = "&1&lHubCore Enabled! &8» &aCoded by &b&lInfxnty"; 

     System.out.println(ChatColor.translateAlternateColorCodes('&', text)); 

     this.getConfig().options().copyDefaults(); 
     saveDefaultConfig(); 

     getCommand("star").setExecutor(new StarCommand(this)); 
     Bukkit.getPluginManager().registerEvents(new Gamemode(), this); 
     Bukkit.getPluginManager().registerEvents(this, this); 
    } 


    String serverone = this.getConfig().getString("Serverone"); 
    String servertwo = this.getConfig().getString("Servertwo"); 
    String serverthree = this.getConfig().getString("Serverthree"); 
    String guititle = this.getConfig().getString("GUI-Title"); 
    /* Array Lists */ 
    ArrayList<Player> enabled = new ArrayList<>(); 

    /* Star UI */ 

    public void applyStarUI(Player player) { 

     // Beginning 
     Inventory gui = Bukkit.createInventory(null, 9, ChatColor.translateAlternateColorCodes('&', guititle)); 

     // Lores 
     List<String> factionsLore = new ArrayList<>(); 
     factionsLore.add(" "); 
     factionsLore.add(ChatColor.GRAY + "Click to connect"); 
     factionsLore.add(ChatColor.GRAY + "to " + servertwo + "!"); 

     List<String> cannoningLore = new ArrayList<>(); 
     cannoningLore.add(" "); 
     cannoningLore.add(ChatColor.GRAY + "Click to connect"); 
     cannoningLore.add(ChatColor.GRAY + "to " + serverone + "!"); 

     List<String> eventsLore = new ArrayList<>(); 
     eventsLore.add(" "); 
     eventsLore.add(ChatColor.GRAY + "Click to connect"); 
     eventsLore.add(ChatColor.GRAY + "to " + serverthree + "!"); 

     // ItemStacks 


     ItemStack cannoning; 
     ItemMeta cannoningMeta; 
     cannoning = new ItemStack(Material.DISPENSER); 
     cannoningMeta = cannoning.getItemMeta(); 

     cannoningMeta.setDisplayName(ChatColor.DARK_RED + serverone); 
     cannoningMeta.setLore(cannoningLore); 
     cannoning.setItemMeta(cannoningMeta); 


     ItemStack factions; 
     ItemMeta factionsMeta; 
     factions = new ItemStack(Material.DIAMOND_SWORD); 
     factionsMeta = factions.getItemMeta(); 

     factionsMeta.setDisplayName(ChatColor.DARK_RED + servertwo); 
     factionsMeta.setLore(factionsLore); 
     factions.setItemMeta(factionsMeta); 


     ItemStack events; 
     ItemMeta eventsMeta; 
     events = new ItemStack(Material.FIREWORK); 
     eventsMeta = events.getItemMeta(); 

     eventsMeta.setDisplayName(ChatColor.DARK_RED + serverthree); 
     eventsMeta.setLore(eventsLore); 
     events.setItemMeta(eventsMeta); 

     // Inventory Setting 

     gui.setItem(0, cannoning); 
     gui.setItem(4, factions); 
     gui.setItem(8, events); 

     // Final 

     player.openInventory(gui); 

    } 

    public static Main getInstance() { 
     return Instance; 
    } 

    public static void setInstance(Main instance) { 
     Instance = instance; 
    } 

} 

ゲームモードクラス:

package com.infxnty.HubCore; 

import org.bukkit.ChatColor; 
import org.bukkit.Material; 
import org.bukkit.entity.Player; 
import org.bukkit.event.EventHandler; 
import org.bukkit.event.Listener; 
import org.bukkit.event.entity.EntityDamageEvent; 
import org.bukkit.event.entity.EntitySpawnEvent; 
import org.bukkit.event.entity.FoodLevelChangeEvent; 
import org.bukkit.event.inventory.InventoryClickEvent; 
import org.bukkit.event.player.PlayerDropItemEvent; 
import org.bukkit.event.player.PlayerInteractEvent; 
import org.bukkit.event.player.PlayerJoinEvent; 
import org.bukkit.event.player.PlayerRespawnEvent; 
import org.bukkit.inventory.Inventory; 
import org.bukkit.inventory.ItemStack; 
import org.bukkit.inventory.meta.ItemMeta; 

import com.infxnty.HubCore.Main; 

public class Gamemode implements Listener {  

    @SuppressWarnings("deprecation") 
    @EventHandler 
    public void onJoin(PlayerJoinEvent e) { 
     e.getPlayer().setMaxHealth(2.0); 
     e.getPlayer().setHealth(2.0); 

     Player p = e.getPlayer(); 
     int slot = 0; 
     int slot2 = 8; 

     ItemStack star; 
     ItemMeta starMeta; 
     star = new ItemStack(Material.NETHER_STAR); 
     starMeta = star.getItemMeta(); 

     starMeta.setDisplayName(ChatColor.AQUA + "Server Selector"); 
     star.setItemMeta(starMeta); 

     ItemStack visibility; 
     ItemMeta visibilityMeta; 
     visibility = new ItemStack(Material.SLIME_BALL); 
     visibilityMeta = visibility.getItemMeta(); 

     visibilityMeta.setDisplayName(ChatColor.GREEN + "Player Visibility Enabled!"); 
     visibility.setItemMeta(visibilityMeta); 

     // Setting item in their inventory 
     p.getInventory().setItem(slot, star); 
     p.getInventory().setItem(slot2, visibility); 

     } 

     String serverone = Main.getInstance().getConfig().getString("Serverone"); 
     String servertwo = Main.getInstance().getConfig().getString("Servertwo"); 
     String serverthree = Main.getInstance().getConfig().getString("Serverthree"); 
     String guititle = Main.getInstance().getConfig().getString("GUI-Title"); 


     @EventHandler 
     public void onPlayerClickInv(InventoryClickEvent e) { 

     Player player = (Player) e.getWhoClicked(); 

     Inventory Inv = e.getClickedInventory(); 

     // Clicked inventory obj 

     ItemStack visibility = new ItemStack(Material.SLIME_BALL); 
     ItemStack star = new ItemStack(Material.NETHER_STAR); 

     // Title of the inventory (container.inventory is the name of a default player inventory) 
     if(Inv.getTitle().equals("container.inventory")){ 
      if (e.getCurrentItem().isSimilar(visibility)) { 
       e.setCancelled(true); 
      } 
     // Checking if clicked item is your compass or anything else 
     if(e.getCurrentItem().isSimilar(star)) { 
      e.setCancelled(true); 
      } 


     if (ChatColor.translateAlternateColorCodes('&', e.getClickedInventory().getTitle()).equals(guititle)) { 
      if (e.getCurrentItem() != null) { 
      e.setCancelled(true); 

       switch (e.getCurrentItem().getType()) { 
       case DISPENSER: 
        player.performCommand("server " + serverone); 
        player.sendMessage(ChatColor.RED + "Sending you to our " + serverone + "Server!"); 
        break; 
       case DIAMOND_SWORD: 
        player.performCommand("server " + servertwo); 
        player.sendMessage(ChatColor.RED + "Sending you to our " + servertwo + "Server!"); 
        break; 
       case FIREWORK: 
        player.performCommand("server " + serverthree); 
        player.sendMessage(ChatColor.RED + "Sending you to our " + serverthree + "Server!"); 
        break; 
       default: 
        return; 
       } 

      player.closeInventory(); 
     } 

     } 
     e.setCancelled(true); 
    } 
} 

    @SuppressWarnings("deprecation") 
    @EventHandler 
    public void onRespawn(PlayerRespawnEvent e) { 
     e.getPlayer().setMaxHealth(2.0); 
     e.getPlayer().setHealth(2.0); 

    } 

    @EventHandler 
    public void onDrop(PlayerDropItemEvent e) { 
     e.setCancelled(true); 

    } 

    @EventHandler 
    public void onEntitySpawn(EntitySpawnEvent e) { 
     e.setCancelled(true); 

    } 

    @EventHandler 
    public void onFoodChange(FoodLevelChangeEvent e) { 
     e.setCancelled(true); 

    } 

    @EventHandler 
    public void onDamage(EntityDamageEvent e) { 
     e.setCancelled(true); 

    } 

    @SuppressWarnings({ "deprecation" }) 
    @EventHandler 
    public void onClick(PlayerInteractEvent e) { 

     Player p = e.getPlayer(); 

     int slot = 8; 

     ItemStack visibility; 
     ItemMeta visibilityMeta; 
     visibility = new ItemStack(Material.SLIME_BALL); 
     visibilityMeta = visibility.getItemMeta(); 

     visibilityMeta.setDisplayName(ChatColor.GREEN + "Player Visibility Enabled!"); 
     visibility.setItemMeta(visibilityMeta); 

     ItemStack visibility3; 
     ItemMeta visibility3Meta; 
     visibility3 = new ItemStack(Material.FIREBALL); 
     visibility3Meta = visibility3.getItemMeta(); 

     visibility3Meta.setDisplayName(ChatColor.GRAY + "Player Visibility Disabled"); 
     visibility3.setItemMeta(visibility3Meta); 

     if (p.getItemInHand().getType().equals(Material.NETHER_STAR)) { 
      p.performCommand("star"); 

     } 

     if (p.getItemInHand().getType().equals(Material.SLIME_BALL)) { 
      p.getInventory().setItem(slot, visibility3); 

     } 

     if (p.getItemInHand().getType().equals(Material.FIREBALL)) { 
      p.getInventory().setItem(slot, visibility); 

     } 

    } 

} 

ゲームでスライムボールを右クリックし、それは適切な項目に変更し、その後、すぐに戻って変更します。ゲームでそれを見たいのであれば、私が正しく説明していないかもしれないので、テストサーバーに参加してください。

IP:172.93.238.170:28584(バージョン1.11.2)スピゴットAPIとは何か、それはMinecraftのためにあるのと混同されて誰のための

。私が混乱したコードの行と、それを変更する方法を提供していただければ幸いです。ありがとう!

+1

外部リンクの内部ではなく、ここにコードを入力してください。それだけでなく、ここで誰もあなたのサーバーをテストするために参加する可能性が高いです。理解できるように答えを明確にする必要があります – Kerooker

答えて

1

何が起こっているのかは、コード内のスライムボールを切り替えて、次の数行で元に戻すことです。

この:

if (p.getItemInHand().getType().equals(Material.NETHER_STAR)) { 
     p.performCommand("star"); 

    } 

    if (p.getItemInHand().getType().equals(Material.SLIME_BALL)) { 
     p.getInventory().setItem(slot, visibility3); 

    } 

    if (p.getItemInHand().getType().equals(Material.FIREBALL)) { 
     p.getInventory().setItem(slot, visibility); 

    } 

は、このように変更します。

if (p.getItemInHand().getType().equals(Material.NETHER_STAR)) { 
     p.performCommand("star"); 

    }else if (p.getItemInHand().getType().equals(Material.SLIME_BALL)) { 
     p.getInventory().setItem(slot, visibility3); 

    }else if (p.getItemInHand().getType().equals(Material.FIREBALL)) { 
     p.getInventory().setItem(slot, visibility); 

    } 

基本的には、火球にスライムボールを変更し、コードの次の部分は、バックに火球を変更しますスライムボール。 else文を追加すると、項目が変更された場合、if文の残りの項目はチェックされません。希望は意味をなさない!