ServerPlugin Plugin Funktioniert nicht extra inventar

Dieses Thema im Forum "Programmierung" wurde erstellt von Pichter, 22. Februar 2016.

  1. Pichter
    Offline

    Pichter

    Registriert seit:
    1. Februar 2016
    Beiträge:
    9
    Hey
    Ich habe ein Problem ich möchte das , das Plugin das item erkennt (Backpack) also ein stick nur umbenannt aber er nimmt beides.
    Und er erstellt kein ordner in dem jeder Player abgespeichert wird also sein Inventar
    Hier mal der Code
    Code (Text):
    1.  
    2. public class backpack implements Listener{
    3.     public backpack(JavaPlugin plugin){
    4.         plugin.getServer().getPluginManager().registerEvents(this, plugin);
    5.        
    6.     }
    7.     Inventory inv = null;
    8.     ArrayList<String> players = new ArrayList<String>();
    9.     public boolean openInventory(Player player){
    10.         this.checkOrdner();
    11.             inv = Bukkit.createInventory(null, 27, "Inventar");
    12.             String playername = player.getName();
    13.             File file = new File("plugins//tolana//Inventory//"+playername+ ".yml");
    14.             FileConfiguration cfg = YamlConfiguration.loadConfiguration(file);
    15.             if(!file.exists()){
    16.                 try {
    17.                     file.createNewFile();
    18.                 } catch (IOException e1) {
    19.                     e1.printStackTrace();
    20.                 }
    21.                 return true;
    22.             }
    23.          
    24.             for(int i = 0; i < inv.getSize(); i++){
    25.                 List<?> list = cfg.getList("inventory");
    26.                 inv.setItem(i, (ItemStack) list.get(i));
    27.             }
    28.             player.openInventory(inv);
    29.             players.add(player.getName());
    30.          
    31.             return true;
    32.          
    33.         }
    34.     public void checkOrdner(){
    35.         File file = new File("plugins//tolana//Inventory//");
    36.         if(!file.exists()){
    37.             file.mkdir();
    38.         }
    39.     }
    40.     @EventHandler
    41.     public void onPlayerInteract(PlayerInteractEvent event){
    42.         Player player = event.getPlayer();
    43.         ItemStack itemInHand = player.getItemInHand();
    44.         if(itemInHand == null){
    45.             return;
    46.         }
    47.        
    48.         if(itemInHand.getType().equals(Material.STICK) && (event.getAction() == Action.RIGHT_CLICK_AIR)){
    49.             ItemStack item = new ItemStack(Material.STICK);
    50.             ItemMeta meta = item.getItemMeta();
    51.             meta.setDisplayName("Backpack");
    52.                 openInventory(player);
    53.         }
    54.         return;
    55.        
    56.     }
    57.     @EventHandler
    58.     public void onInventoryClose(InventoryCloseEvent event){
    59.       Player player = (Player) event.getPlayer();
    60.       String playername = player.getName();
    61.       File file = new File("plugins//tolana//Inventory//"+playername+ ".yml");
    62.       FileConfiguration cfg = YamlConfiguration.loadConfiguration(file);
    63.      
    64.       inv = event.getInventory();
    65.       if(players.contains(player.getName())){
    66.          players.remove(player.getName());
    67.          cfg.set("inventory", inv.getContents());
    68.          try {
    69.             cfg.save(file);
    70.          } catch (IOException e1) {
    71.             e1.printStackTrace();
    72.          }
    73.       }
    74.       return;
    75.     }
    76. }
    77. [code]
     
    #1
  2. Verschraubt
    Online

    Verschraubt

    Ich glaube das "setDisplayName" solltest du in ein "getDisplayName" ändern, oder habe ich da etwas falsch verstanden?

    Wenn das "setDisplayName" beabsichtigt ist, dann würde ich noch die ItemMeta setzen.
     
    #2
    jensIO gefällt das.
  3. Pichter
    Offline

    Pichter

    Registriert seit:
    1. Februar 2016
    Beiträge:
    9
    er setzt denn ein fehler daran hatt eich auch gedacht aber hat nicht geklappt :/ oder ich muss das umschreiben
    Hier mal das wenn ich getDisplayName verwende

    upload_2016-2-22_22-32-44.png
     
    #3
  4. Verschraubt
    Online

    Verschraubt

    getDisplayName() liefert dir einen String. Diesen muss du nun nur noch mit "Backpack" vergleichen.



    Ich würde das so umsetzen:

    Code (Text):
    1. if (e.getAction() == Action.RIGHT_CLICK_AIR || (e.getAction() == Action.RIGHT_CLICK_BLOCK)) {
    2.             if ((e.getMaterial().equals(Material.STICK)) && (e.getItem().getItemMeta().getDisplayName().equalsIgnoreCase("Backpack"))) {
    3.                  openInventory;
    4.             }
    5.         }
     
    #4
    jensIO gefällt das.
  5. jensIO
    Offline

    jensIO

    Registriert seit:
    28. Juli 2015
    Beiträge:
    602
    Ort:
    Internet, im Neuland
    Minecraft:
    jens1o
    Warte?

    Du willst einer nicht vorhandenen Item Meta den Displaynamen zurückgeben lassen, machst aber gleichzeitig ein Argument zuviel(Getter haben (fast) immer keine Arguments). Bitte schaue dir erst mal die Grundlagen an.

    Grüße,
    Jens
     
    #5
    Verschraubt gefällt das.
  6. Verschraubt
    Online

    Verschraubt

    Und das ganze noch von einem neu erstellten ItemStack :
     
    #6
    jensIO gefällt das.
  7. Pichter
    Offline

    Pichter

    Registriert seit:
    1. Februar 2016
    Beiträge:
    9
    Ok danke erst mal ich probiere es mal aus :)
    ..
    Ich weis das es mit get...(/name\) nicht geht aber ich wusste nicht wie ich es umstreiben soll deswegen frage ich ja auch hier. Und ich lerne es damit neben bei und da frage ich lieber bevor ich mich hier tot suche und dafür sind ja diese themen da oder nicht?
    Auch die nicht so viel ahnung haben zu helfen so wird es fü r denn jenigen einfacher
    Lg pichter
    Und danke erst mal Verschraubt :)
     
    #7
    Verschraubt gefällt das.
  8. Pichter
    Offline

    Pichter

    Registriert seit:
    1. Februar 2016
    Beiträge:
    9
    Ok das mit dem new itemstack war echt dumm vormir:D das habe ich nicht mal mehr gesehn xD
     
    #8
    Verschraubt gefällt das.
  9. Nightishaman
    Offline

    Nightishaman

    Registriert seit:
    3. Januar 2015
    Beiträge:
    51
    @Pichter ich glaube du solltest erstmal Java lernen. Bei deinem Code bekomme ich Kopfschmerzen...
     
    #9
    skcxck und jensIO gefällt das.
  10. Pichter
    Offline

    Pichter

    Registriert seit:
    1. Februar 2016
    Beiträge:
    9
    Er speichert nicht die Items aber er stellt die .yml
    Code (Text):
    1.  
    2.     @EventHandler
    3.     public void onInventoryClose(InventoryCloseEvent event){
    4.         Player player = (Player) event.getPlayer();
    5.         String playername = player.getName();
    6.         ArrayList<ItemStack> list = new ArrayList<>();
    7.         File file = new File("plugins/tolana/Inventory"+playername+ ".yml");
    8.         FileConfiguration inv = YamlConfiguration.loadConfiguration(file);
    9.         ItemStack[] contents = player.getInventory().getContents();
    10.         for(int i = 0; i > contents.length; i++){
    11.             ItemStack item = contents[i];
    12.                 list.add(item);
    13.         }
    14.         player.getInventory().setContents(contents);
    15.         inv.set("B", list);
    16.             try {
    17.                 inv.save(file);
    18.             } catch (IOException e) {
    19.             }
    20.             }
    21. }
    22.  
    23.  
     
    #10
  11. Nightishaman
    Offline

    Nightishaman

    Registriert seit:
    3. Januar 2015
    Beiträge:
    51
    Du solltest übrigens das Inventar nicht nach dem Namen speichern sondern nach der UUID. Außerdem ohne Logs können wir nix machen.
     
    #11
  12. Pichter
    Offline

    Pichter

    Registriert seit:
    1. Februar 2016
    Beiträge:
    9
    hier :)
    gut also uuid
    er speichert es jetzt aber liest es nicht aus
    Code (Text):
    1.  
    2. public class backpack implements Listener{
    3.     public backpack(JavaPlugin plugin){
    4.         plugin.getServer().getPluginManager().registerEvents(this, plugin);
    5.      
    6.     }
    7.     ArrayList<String> players = new ArrayList<String>();
    8.     public void openInventory(Player player){
    9.      
    10.             Inventory inv = Bukkit.createInventory(null, 27, "Inventar");
    11.             String playername = player.getName();
    12.             File file = new File("plugins/tolana/Inventory"+playername+ ".yml");
    13.             FileConfiguration cfg = YamlConfiguration.loadConfiguration(file);
    14.             for(int i = 0; i < inv.getSize(); i++){
    15.                 List<?> list = cfg.getList("inventory");
    16.                 inv.setItem(i, (ItemStack) list.get(i));
    17.             }
    18.             if(!file.exists()){
    19.                 try {
    20.                     file.createNewFile();
    21.                 } catch (IOException e1) {
    22.                     e1.printStackTrace();
    23.                 }
    24.                 return;
    25.             }
    26.             player.openInventory(inv);
    27.             players.add(player.getName());
    28.  
    29.         }
    30.     @EventHandler
    31.     public void onPlayerInteract(PlayerInteractEvent event){
    32.         Player player = event.getPlayer();
    33.         if(event.getAction() == Action.RIGHT_CLICK_AIR | event.getAction() == Action.RIGHT_CLICK_BLOCK){
    34.             if(player.getItemInHand().getItemMeta().getDisplayName().equalsIgnoreCase("Backpack")){
    35.                 Inventory inv = Bukkit.createInventory(null, 27, "Backpack");
    36.                 player.openInventory(inv);
    37.             }
    38.              
    39.         }
    40.     }
    41.  
    42.  
    43.     @EventHandler
    44.     public void onInventoryClose(InventoryCloseEvent event){
    45.         Player player = (Player) event.getPlayer();
    46.         String playername = player.getName();
    47.         ArrayList<ItemStack> list = new ArrayList<>();
    48.         File file = new File("plugins/tolana/Inventory"+playername+ ".yml");
    49.         FileConfiguration inv = YamlConfiguration.loadConfiguration(file);
    50.         ItemStack[] contents = player.getInventory().getContents();
    51.         for(int i = 0; i > contents.length; i++){
    52.             ItemStack item = contents[i];
    53.                 list.add(item);
    54.         }
    55.         inv.set("Backpack", player.getInventory().getContents());
    56.             try {
    57.                 inv.save(file);
    58.             } catch (IOException e) {
    59.             }
    60.             }
    61. }
    62.  
    63.  
     
    #12
  13. Nightishaman
    Offline

    Nightishaman

    Registriert seit:
    3. Januar 2015
    Beiträge:
    51
    Ähem, da hat sich nix verändert
     
    #13