Java 每个玩家的库存

Java 每个玩家的库存,java,bukkit,Java,Bukkit,非常简单的问题,很难解决,因为我需要编辑我的全部代码。 我正在做一个哈利波特插件,你可以在右击你的“魔杖”(本例中是一根棍子)后选择一个咒语 现在,我把事情搞砸了,因为。。。是的,我为所有人创建了一个清单。每个人都应该能够解锁不同的法术,现在当1改变时,所有法术都会改变 我在一个单独的类中创建了库存,通过一些方法我可以接收/设置我需要的一切。 现在,我找不到一种方法来接收库存类中的玩家 1) 删除修改器=无法再访问它 2) 需要删除/重写整个代码的90% 如果有人能解决它,那就更好了。。。现在坐

非常简单的问题,很难解决,因为我需要编辑我的全部代码。 我正在做一个哈利波特插件,你可以在右击你的“魔杖”(本例中是一根棍子)后选择一个咒语 现在,我把事情搞砸了,因为。。。是的,我为所有人创建了一个清单。每个人都应该能够解锁不同的法术,现在当1改变时,所有法术都会改变

我在一个单独的类中创建了库存,通过一些方法我可以接收/设置我需要的一切。
现在,我找不到一种方法来接收库存类中的玩家 1) 删除修改器=无法再访问它 2) 需要删除/重写整个代码的90% 如果有人能解决它,那就更好了。。。现在坐了3个小时

库存类别:

package at.skyblock.main;

import java.util.ArrayList;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.event.Listener;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

public class SpellInventory implements Listener {

   // Erstellt bei Rechtsklick mit dem Zauberstab das Inventar, in dem die
   // Spells gesetzt werden können. (!Nur erlernte werden angezeigt, siehe ->
   // SpellUnlocks!)
   // Die hier vorhandenen createDisplays() werden noch zu den Spellbooks (also
   // SpellUnlocks class) gemoved.

   public static Inventory spells = Bukkit.createInventory(null, 9,
       ChatColor.BOLD + "" + ChatColor.WHITE + "Choose your Spell");

   // Methode um dem Inventar auch von anderen Klassen (in diesem Fall
   // SpellUnlocks) Spells hinzuzufügen
   // Für die verarbeitung eines klicks auf eines der im Inventar vorhandenen
   // Items, ist die Main class zuständig

   public static void createDisplay(Material material, Inventory inv, int Slot, String name, String lore) {
     ItemStack item = new ItemStack(material);
     ItemMeta meta = item.getItemMeta();
     meta.setDisplayName(name);
     ArrayList<String> Lore = new ArrayList<String>();
     Lore.add(lore);
     meta.setLore(Lore);
     item.setItemMeta(meta);

     inv.setItem(Slot, item);

   }

   public static Inventory getInventory(){
   return spells;
   }

   // Selbsterklärend
   public static void removeDisplay(Inventory inv, Material material) {

     if (inv.contains(material)) {
       inv.remove(material);
     }

   }

   static {
     // Proceed to remove this section, and give all unlocks to the books
     // (see -> SpellUnlocks)
     createDisplay(Material.MOSSY_COBBLESTONE, spells, 6, "Petrificus Totalus", "Ganzkörperklammer Fluch");
     createDisplay(Material.TNT, spells, 7, "Bombarda", "Sprengzauber");
   }

}
包位于.skyblock.main;
导入java.util.ArrayList;
导入org.bukkit.bukkit;
导入org.bukkit.ChatColor;
导入org.bukkit.Material;
导入org.bukkit.event.Listener;
导入org.bukkit.inventory.inventory;
导入org.bukkit.inventory.ItemStack;
导入org.bukkit.inventory.meta.ItemMeta;
实现侦听器的公共类{
//他是一个发明家,他死了
//拼写为gesetzt werden können。(!Nur erlernte werden angezeigt,siehe->
//魔法解锁!)
//他创造了一本魔法书
//法术解锁类)gemoved。
public static Inventory spells=Bukkit.createInventory(null,9,
ChatColor.BOLD+“”+ChatColor.WHITE+“选择你的法术”);
//dem发明者auch von anderen Klassen的方法(秋季)
//咒语解锁)咒语hinzufügen
//在发明家沃汉德宁的作品中,我们可以看到很多东西
//物品,主要类别为zuständig
公共静态void createDisplay(物料、库存库存、整数槽、字符串名称、字符串知识){
ItemStack item=新的ItemStack(物料);
ItemMeta=item.getItemMeta();
meta.setDisplayName(名称);
ArrayList Lore=新的ArrayList();
知识。添加(知识);
梅塔·塞洛尔(Lore);
item.setItemMeta(meta);
库存设置项目(插槽、项目);
}
公共静态清单getInventory(){
返回咒语;
}
//Selbsterklärend
公共静态无效清除显示(库存库存、物料){
如果(库存包含(物料)){
库存移除(物料);
}
}
静止的{
//继续移除此部分,并为书本解锁
//(请参见->解锁)
createDisplay(Material.MOSSY_COBBLESTONE,咒语,6,“完全石化”,“甘茨克尔珀克拉默-弗鲁奇”);
createDisplay(Material.TNT,咒语,7,“Bombanda”,“Sprengzauber”);
}
}
主要类别:

package at.skyblock.main;

import java.util.HashSet;

import org.bukkit.ChatColor;
import org.bukkit.Color;
import org.bukkit.FireworkEffect;
import org.bukkit.FireworkEffect.Type;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Firework;
import org.bukkit.entity.LightningStrike;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.entity.TNTPrimed;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.FireworkMeta;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.util.Vector;


    public class Main extends JavaPlugin implements Listener {
       // Instanz der Main class wird in "SpellUnlocks" kreiiert
       private SpellUnlocks event = new SpellUnlocks(this);

       public void onEnable() {
         // Andere-Klassen Events werden regestriert
         getServer().getPluginManager().registerEvents(this, this);
         getServer().getPluginManager().registerEvents(event, this);
         getServer().getPluginManager().registerEvents(new SpellInventory(), this);
         // Fügt den Spellbooks die ItemMeta hinzu (Siehe funktion in SpellBooks)
         event.createSpellbooks();

         // Checkt im halben sekunden (20tick=1sec) Intervall ob der Spieler die
         // Sprüche schon hat, löscht sie falls nicht.

       }

       @EventHandler
       public void onSpellApply(PlayerJoinEvent e) {
         Player p = e.getPlayer();
         if (getConfig().getBoolean("MSPotter." + p.getUniqueId() + ".hasUnforgivableCurses") == true) {

           SpellInventory.createDisplay(Material.BEDROCK, SpellInventory.getInventory(), 0, "Avada Kedavra",
               "Todeszauber");

         } else if (getConfig().getBoolean("MSPotter." + p.getUniqueId() + ".hasUnforgivableCurses") != true) {
           SpellInventory.removeDisplay(SpellInventory.getInventory(), Material.BEDROCK);
         }
         if (getConfig().getBoolean("MSPotter." + p.getUniqueId() + ".hasBasicSpells") == true) {

           SpellInventory.createDisplay(Material.FIREWORK_CHARGE, SpellInventory.getInventory(), 1, "Stupefy",
               "Schockzauber");
           SpellInventory.createDisplay(Material.REDSTONE, SpellInventory.getInventory(), 2, "Expelliarmus",
               "Entwaffnungszauber");

         } else if (getConfig().getBoolean("MSPotter." + p.getUniqueId() + ".hasBasicSpells") != true) {

           SpellInventory.removeDisplay(SpellInventory.getInventory(), Material.FIREWORK_CHARGE);
           SpellInventory.removeDisplay(SpellInventory.getInventory(), Material.REDSTONE);

         }

       }

       // Selbsterklärend
       public void onDisable() {
         saveConfig();
       }

       // Checkt welcher Spell in Inventar ausgewählt wurde, und setzt diesen als
       // currentSpell für den Spieler
       @EventHandler
       public void chooseSpell(InventoryClickEvent event) {
         Player player = (Player) event.getWhoClicked();
         ItemStack clicked = event.getCurrentItem();
         Inventory inventory = event.getInventory();

         if (inventory.getName().equals(SpellInventory.spells.getName())) {
           event.setCancelled(true);
           if (clicked.getType() == Material.BEDROCK) {

             player.closeInventory();
             getConfig().set("MSPotter." + player.getUniqueId() + ".currentSpell", "AvadaKedavra");
             saveConfig();
           } else if (clicked.getType() == Material.FIREWORK_CHARGE) {

             player.closeInventory();
             getConfig().set("MSPotter." + player.getUniqueId() + ".currentSpell", "Stupefy");
             saveConfig();
           } else if (clicked.getType() == Material.REDSTONE) {

             player.closeInventory();
             getConfig().set("MSPotter." + player.getUniqueId() + ".currentSpell", "Expelliarmus");
             saveConfig();
           } else if (clicked.getType() == Material.MOSSY_COBBLESTONE) {

             player.closeInventory();
             getConfig().set("MSPotter." + player.getUniqueId() + ".currentSpell", "PetrificusTotalus");
             saveConfig();
           } else if (clicked.getType() == Material.TNT) {
             player.closeInventory();
             getConfig().set("MSPotter." + player.getUniqueId() + ".currentSpell", "Bombarda");
             saveConfig();
           }
         }

       }

       // Hauptteil: Checkt bei Linksklick mit dem Zauberstab, welcher Spell
       // gesetzt ist, führt diesen dann mit Partikeln sound on effekten aus.
       @SuppressWarnings({ "deprecation", "unused" })
       @EventHandler
       public void useSpell(PlayerInteractEvent e) {

         final Player p = e.getPlayer();
         if (e.getAction().equals(Action.LEFT_CLICK_AIR) || e.getAction().equals(Action.LEFT_CLICK_BLOCK)) {
           if (p.getItemInHand().getType().equals(Material.STICK)) {
             Location loc = p.getTargetBlock((HashSet<Byte>) null, 20).getLocation();

             final Firework f = (Firework) p.getWorld().spawn(loc.add(0, 1.5, 0), Firework.class);
             FireworkMeta fm = f.getFireworkMeta();

             if (getConfig().getString("MSPotter." + p.getUniqueId() + ".currentSpell").equals("AvadaKedavra")) {
               if (getConfig().getBoolean("MSPotter." + p.getUniqueId() + ".cooldowns.AvadaKedavra") == false) {

                 getConfig().set("MSPotter." + p.getUniqueId() + ".cooldowns.AvadaKedavra", true);

                 p.playSound(p.getLocation(), Sound.ENDERDRAGON_GROWL, 1.0F, 0);

                 fm.addEffect(FireworkEffect.builder().flicker(false).trail(true).with(Type.BURST)
                     .withColor(Color.GREEN).withFade(Color.BLACK).build());
                 fm.setPower(5);
                 f.setFireworkMeta(fm);

                 this.getServer().getScheduler().scheduleAsyncDelayedTask(this, new Runnable() {

                   public void run() {

                     f.detonate();

                   }
                 }, 2L);

                 for (Entity en : f.getNearbyEntities(1, 1, 1)) {

                   if (en instanceof LivingEntity) {
                     LivingEntity le = (LivingEntity) en;
                     LightningStrike ls = (LightningStrike) le.getWorld().spawn(le.getLocation(),
                         LightningStrike.class);
                     le.setHealth(0);

                   }
                 }

                 this.getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable() {

                   public void run() {
                     getConfig().set("MSPotter." + p.getUniqueId() + ".cooldowns.AvadaKedavra", false);
                   }
                 }, 6000L);
               }
               // #################################################################################################

             } else if (getConfig().getString("MSPotter." + p.getUniqueId() + ".currentSpell").equals("Stupefy")) {

               fm.addEffect(FireworkEffect.builder().flicker(false).trail(true).with(Type.BALL)
                   .withColor(Color.AQUA).withFade(Color.BLUE).build());
               fm.setPower(3);
               f.setFireworkMeta(fm);
               this.getServer().getScheduler().scheduleAsyncDelayedTask(this, new Runnable() {

                 public void run() {

                   f.detonate();

                 }
               }, 2L);

               for (Entity en : f.getNearbyEntities(1.5, 1.5, 1.5)) {

                 if (en instanceof LivingEntity) {
                   LivingEntity le = (LivingEntity) en;
                   le.setVelocity(p.getLocation().getDirection().multiply(3));
                   le.setVelocity(new Vector(le.getVelocity().getX(), 1.0D, le.getVelocity().getZ()));
                   if (le.getHealth() > 3) {
                     le.setHealth(le.getHealth() - 1.5);
                   }
                 }

               }

             } else
               if (getConfig().getString("MSPotter." + p.getUniqueId() + ".currentSpell").equals("Expelliarmus")) {

               p.playSound(p.getLocation(), Sound.SHOOT_ARROW, 1.0F, 0);
               fm.addEffect(FireworkEffect.builder().flicker(false).trail(true).with(Type.STAR)
                   .withColor(Color.RED).build());
               fm.setPower(1);
               f.setFireworkMeta(fm);
               this.getServer().getScheduler().scheduleAsyncDelayedTask(this, new Runnable() {

                 public void run() {

                   f.detonate();

                 }
               }, 2L);

               for (Entity en : f.getNearbyEntities(1, 1, 1)) {

                 if (en instanceof Player) {

                   Player target = (Player) en;

                   if (target.getInventory().getItemInHand().getType().equals(Material.STICK)) {
                     if (target.getInventory().getItemInHand() != null
                         && target.getInventory().getItemInHand().getType() != Material.AIR) {

                       ItemStack wand = target.getInventory().getItemInHand();
                       p.getWorld().dropItemNaturally(p.getLocation(), wand);

                       target.getInventory().remove(Material.STICK);

                     }
                   } else {
                     p.sendMessage(ChatColor.RED + "Dein Gegner hat keinen Zauberstab in der Hand!");
                   }

                 }

               }

             } else if (getConfig().getString("MSPotter." + p.getUniqueId() + ".currentSpell")
                 .equals("PetrificusTotalus")) {
               p.playSound(p.getLocation(), Sound.ITEM_BREAK, 1.0F, 0);

               fm.addEffect(FireworkEffect.builder().flicker(false).trail(true).with(Type.BALL)
                   .withColor(Color.WHITE).build());
               fm.setPower(1);
               f.setFireworkMeta(fm);
               this.getServer().getScheduler().scheduleAsyncDelayedTask(this, new Runnable() {

                 public void run() {

                   f.detonate();

                 }
               }, 2L);

               for (Entity en : f.getNearbyEntities(1, 1, 1)) {

                 if (en instanceof LivingEntity) {
                   LivingEntity le = (LivingEntity) en;
                   if (le.isOnGround()) {
                     le.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 100, 10000));
                     le.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 100, -10000));
                   } else {
                     p.sendMessage(ChatColor.RED + "Du kannst nur Gegner am Boden treffen!");
                   }
                 }

               }

             } else if (getConfig().getString("MSPotter." + p.getUniqueId() + ".currentSpell").equals("Bombarda")) {

               p.playSound(p.getLocation(), Sound.EXPLODE, 1.0F, 0);

               TNTPrimed tnt = loc.getWorld().spawn(loc, TNTPrimed.class);
               tnt.setFuseTicks(0);

             }
           }

         } else if (e.getAction().equals(Action.RIGHT_CLICK_AIR) || e.getAction().equals(Action.RIGHT_CLICK_BLOCK)) {
           if (p.getItemInHand().getType().equals(Material.STICK)) {
             p.openInventory(SpellInventory.spells);
           }
         }
       }

    }
包位于.skyblock.main;
导入java.util.HashSet;
导入org.bukkit.ChatColor;
导入org.bukkit.Color;
导入org.bukkit.FireworkEffect;
导入org.bukkit.FireworkEffect.Type;
导入org.bukkit.Location;
导入org.bukkit.Material;
导入org.bukkit.Sound;
导入org.bukkit.entity.entity;
导入org.bukkit.entity.Firework;
导入org.bukkit.entity.LightningStrike;
导入org.bukkit.entity.LivingEntity;
导入org.bukkit.entity.Player;
导入org.bukkit.entity.tntprimmed;
导入org.bukkit.event.EventHandler;
导入org.bukkit.event.Listener;
导入org.bukkit.event.block.Action;
导入org.bukkit.event.inventory.inventory ClickEvent;
导入org.bukkit.event.player.PlayerInteractEvent;
导入org.bukkit.event.player.PlayerJoinEvent;
导入org.bukkit.inventory.inventory;
导入org.bukkit.inventory.ItemStack;
导入org.bukkit.inventory.meta.FireworkMeta;
导入org.bukkit.plugin.java.JavaPlugin;
导入org.bukkit.potion.PotionEffect;
导入org.bukkit.potion.PotionEffectType;
导入org.bukkit.util.Vector;
公共类Main扩展JavaPlugin实现监听器{
//“魔法解锁”克雷厄特中主类的实例
私人法术解锁事件=新法术解锁(此);
public void onEnable(){
//安德烈·克拉森事件
getServer().getPluginManager().registerEvents(这个,这个);
getServer().getPluginManager().registerEvents(事件,此事件);
getServer().getPluginManager().registerEvents(新拼写清单(),此);
//符咒书中的符咒书
event.createSpellbooks();
//检查halben sekunden(20tick=1秒)在Spiler死后的间隔时间
//斯普吕切·肖恩帽子,你的帽子不见了。
}
@事件处理程序
公开作废申请(PlayerJoinEvent e){
Player p=e.getPlayer();
if(getConfig().getBoolean(“MSPotter.+p.getUniqueId()+”.hasUnforgivableCurses”)==true){
SpellInventory.createDisplay(Material.basem,SpellInventory.getInventory(),0,“Avada Kedavra”,
“Todeszauber”);
}else if(getConfig().getBoolean(“MSPotter.+p.getUniqueId()+”.hasUnforgivableCurses”)!=true){
SpellInventory.removeDisplay(SpellInventory.getInventory(),Material.based);
}
if(getConfig().getBoolean(“MSPotter.+p.getUniqueId()+”.hasBasicSpells”)==true){
SpellInventory.createDisplay(Material.FIREWORK\u CHARGE,SpellInventory.getInventory(),1,“昏迷”,
“Schockzauber”);
SpellInventory.createDisplay(Material.REDSTONE,SpellInventory.getInventory(),2,“Expelliarmus”,
“Entwaffnungszauber”);
}else if(getConfig().getBoolean(“MSPotter.”+p.getUniqueId()+“.hasBasicSpells”)!=true){
SpellInventory.removeDisplay(SpellInventory.getInventory(),材质。烟花费用);
SpellInventory.removeDisplay(SpellInventory.getInventory(),Material.REDSTONE);
}
}
//Selbsterklärend
公共无效不可撤销(){
saveConfig();
}
//发明者ausgewählt wurde和setzt中的Checkt welcher拼写
public class SpellInventory{  
    private Main plugin; //This is the main class you can access all public methods through it
    public SpellInventory(Main plugin){ //This is a constructor Method
        this.plugin = plugin; //The plugin class variable gets stored
    }
}
private SpellInventory si;
@Override
public void onEnable(){
    this.si = new SpellInventory(this); //You hand over the existing main instance with "this" as argument
}