ServerPlugin Speichert nicht in das virtuelle Inventar

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

  1. Pichter
    Offline

    Pichter

    Registriert seit:
    1. Februar 2016
    Beiträge:
    9
    Bitte mal um Hilfe , er speichert die nicht ab vom Virtuellen Inventar nur das vom Spieler also das normale bitte um hilfe ;/
    Code (Text):
    1.  
    2. package Pichter.Tolana;
    3.  
    4. import java.io.File;
    5. import java.io.IOException;
    6. import java.util.ArrayList;
    7. import java.util.List;
    8.  
    9. import org.bukkit.Bukkit;
    10. import org.bukkit.configuration.file.FileConfiguration;
    11. import org.bukkit.configuration.file.YamlConfiguration;
    12. import org.bukkit.entity.Player;
    13. import org.bukkit.event.EventHandler;
    14. import org.bukkit.event.Listener;
    15. import org.bukkit.event.block.Action;
    16. import org.bukkit.event.inventory.InventoryCloseEvent;
    17. import org.bukkit.event.player.PlayerInteractEvent;
    18. import org.bukkit.inventory.Inventory;
    19. import org.bukkit.inventory.ItemStack;
    20. import org.bukkit.plugin.java.JavaPlugin;
    21.  
    22. public class backpack implements Listener{
    23.     public backpack(JavaPlugin plugin){
    24.         plugin.getServer().getPluginManager().registerEvents(this, plugin);
    25.        
    26.     }
    27.     ArrayList<String> players = new ArrayList<String>();
    28.     public void openInventory(Player player){
    29.             Inventory inv = Bukkit.createInventory(null, 27, "Inventar");
    30.             String playername = player.getName();
    31.             File file = new File("plugins/tolana/Inventory"+playername+ ".yml");
    32.             if(!file.exists()){
    33.                 ItemStack[] contents = player.getInventory().getContents();
    34.                 FileConfiguration cfg = YamlConfiguration.loadConfiguration(file);
    35.                 List<?> list = cfg.getList("inventory");
    36.                 for(int i = 0; i > contents.length; i++){
    37.                     contents[i] = (ItemStack) list.get(i);
    38.                 }
    39.                 player.getInventory().setContents(contents);
    40.                 file.delete();
    41.                 try {
    42.                     file.createNewFile();
    43.                 } catch (IOException e1) {
    44.                     e1.printStackTrace();
    45.                 }
    46.                 return;
    47.             }
    48.             player.openInventory(inv);
    49.             players.add(player.getName());
    50.  
    51.         }
    52.     @EventHandler
    53.     public void onPlayerInteract(PlayerInteractEvent event){
    54.         Player player = event.getPlayer();
    55.         if(event.getAction() == Action.RIGHT_CLICK_AIR | event.getAction() == Action.RIGHT_CLICK_BLOCK){
    56.                 try{
    57.                     if(player.getItemInHand().getItemMeta().getDisplayName().equalsIgnoreCase("Backpack")){
    58.                         Inventory inv = Bukkit.createInventory(null, 27, "Backpack");
    59.                         player.openInventory(inv);
    60.                     }
    61.                 }catch(NullPointerException ex) {
    62.                     ex.printStackTrace();
    63.                 }
    64.             }return;
    65.         }
    66.     @EventHandler
    67.     public void onInventoryClose(InventoryCloseEvent event){
    68.         Player player = (Player) event.getPlayer();
    69.         String playername = player.getName();
    70.         ArrayList<ItemStack> list = new ArrayList<>();
    71.         File file = new File("plugins/tolana/Inventory"+playername+ ".yml");
    72.         FileConfiguration inv = YamlConfiguration.loadConfiguration(file);
    73.         ItemStack[] contents = player.getInventory().getContents();
    74.         for(int i = 0;  i < 27; i++){
    75.             ItemStack item = contents[i];
    76.                 list.add(item);
    77.         }
    78.         inv.set("Backpack", player.getInventory().getContents());
    79.             try {
    80.                 inv.save(file);
    81.             } catch (IOException e) {
    82.             }
    83.             }
    84. }
    85.  
    86.  
     
    #1
  2. GPSforLEGENDS
    Offline

    GPSforLEGENDS

    Registriert seit:
    21. März 2014
    Beiträge:
    295
    Ort:
    Bürostuhl
    Minecraft:
    GPSforLEGENDS
    Wer ist er und wer ist die?
    Was, wann, wo abspeichern?
    Bevor man eine zweite Sprache lernt, sollte man die Muttersprache einigermaßen beherrschen.
     
    #2
    jensIO und JTK222 gefällt das.
  3. Pichter
    Offline

    Pichter

    Registriert seit:
    1. Februar 2016
    Beiträge:
    9
    Sorry :D
    Also ich habe ein Virtuellen Rucksack erstellt, aber die Items die ich im Rucksack reinpacke speichert das plugin nicht. Beim Öffnen ist es leer. Das Plugin Speichert das Player Inventar also das ganz Normale. Aber das Plugin soll ja den Inhalt des Rucksacks Speichern.
    Beim Schließen des Rucksackes soll er es in die angeleckte Player Config speichern und beim Öffnen soll das Plugin den Player bezogenen Rucksack aufrufen.
    PS: beim schreiben ohne es danach zu lesen kommt nur Müll heraus sorry :/​
     
    #3
  4. GPSforLEGENDS
    Offline

    GPSforLEGENDS

    Registriert seit:
    21. März 2014
    Beiträge:
    295
    Ort:
    Bürostuhl
    Minecraft:
    GPSforLEGENDS
    Was mir spontan auffällt:
    - Zeile 32: was machst du wenn die Datei bereits existiert?
    - Zeile 40: Du versuchst eine Datei zu löschen die nicht existieren kann!
    - Sehe ich keine Stelle wo deine Methode Openinventory genutzt wird
    - Zeile 55: http://stackoverflow.com/questions/4014535/differences-in-boolean-operators-vs-and-vs
    Zeile 57: Du überprüfst vorher nicht ob das Item eine itemmeta hat.
    Zeile 68: http://www.java-tutorial.org/typecasting.html
    Zeile 74: http://schabby.de/java-for/ for each schleife angucken

     
    #4
    jensIO gefällt das.
  5. UnityGaming
    Offline

    UnityGaming

    Registriert seit:
    25. Oktober 2015
    Beiträge:
    89
    Ort:
    Hohenfels
    Minecraft:
    FastFelix771
    Hier ist dein Plugin in eine Klasse gepackt... evtl. funktionierts auch, ich habs ausm Kopf gebastelt.
    Die Idee mit dem Item Displayname finde ich echt sinnfrei, da ist ein Command besser... aber ich habs mal so umgesetzt!

    Code (Text):
    1.  
    2. package Pichter.Tolana;
    3.  
    4. import java.io.File;
    5. import java.io.FileInputStream;
    6. import java.io.FileOutputStream;
    7. import org.bukkit.Bukkit;
    8. import org.bukkit.Material;
    9. import org.bukkit.entity.Player;
    10. import org.bukkit.event.EventHandler;
    11. import org.bukkit.event.Listener;
    12. import org.bukkit.event.block.Action;
    13. import org.bukkit.event.inventory.InventoryCloseEvent;
    14. import org.bukkit.event.player.PlayerInteractEvent;
    15. import org.bukkit.inventory.Inventory;
    16. import org.bukkit.inventory.ItemStack;
    17. import org.bukkit.plugin.java.JavaPlugin;
    18. import org.bukkit.util.io.BukkitObjectInputStream;
    19. import org.bukkit.util.io.BukkitObjectOutputStream;
    20.  
    21. public class BackPack extends JavaPlugin implements Listener {
    22.  
    23.     private static String FOLDER_PATH;
    24.     private static String FILE_PATH;
    25.  
    26.     private static final String INVENTORY_TITLE = "BackPack of %s";
    27.  
    28.     @Override
    29.     public void onEnable() {
    30.         FOLDER_PATH = getDataFolder().getAbsolutePath().concat("/inventories/");
    31.         FILE_PATH = FOLDER_PATH.concat("%s.inv");
    32.  
    33.         if(!new File(FOLDER_PATH).mkdirs()) {
    34.             getLogger().severe("Failed to create necessary directories!");
    35.             return;
    36.         }
    37.  
    38.         getServer().getPluginManager().registerEvents(this, this);
    39.     }
    40.  
    41.     @EventHandler
    42.     public void onPlayerInteract(PlayerInteractEvent e) {
    43.         Player player = e.getPlayer();
    44.  
    45.         ItemStack item = player.getItemInHand();
    46.         if(item == null || item.getType() == Material.AIR) return;
    47.  
    48.         Action action = e.getAction();
    49.         if(!(action == Action.RIGHT_CLICK_AIR) && !(action == Action.RIGHT_CLICK_BLOCK)) return;
    50.  
    51.         if(!item.hasItemMeta() || !item.getItemMeta().hasDisplayName()) return;
    52.         String displayName = item.getItemMeta().getDisplayName();
    53.  
    54.         if(!displayName.equalsIgnoreCase("BackPack")) return;
    55.  
    56.         // LOAD INVENTORY //
    57.  
    58.         File file = new File(String.format(FILE_PATH, player.getUniqueId().toString()));
    59.         if(!file.exists()) {
    60.             player.openInventory(Bukkit.createInventory(null, 27, String.format(INVENTORY_TITLE, player.getName())));
    61.             return;
    62.         }
    63.  
    64.         try(BukkitObjectInputStream in = new BukkitObjectInputStream(new FileInputStream(file))) {
    65.             Inventory inv = (Inventory) in.readObject();
    66.             player.openInventory(inv);
    67.         } catch(Exception ex) {
    68.             ex.printStackTrace();
    69.         }
    70.  
    71.     }
    72.  
    73.     @EventHandler
    74.     public void onInventoryClose(InventoryCloseEvent e) {
    75.         if(!(e.getPlayer() instanceof Player)) return;
    76.      
    77.         Player player = (Player) e.getPlayer();
    78.         Inventory inv = e.getInventory();
    79.      
    80.         String title = inv.getTitle();
    81.         if(title == null || title.trim().isEmpty() || !title.equals(String.format(INVENTORY_TITLE, player.getName()))) return;
    82.      
    83.         // SAVE INVENTORY //
    84.      
    85.         File file = new File(String.format(FILE_PATH, player.getUniqueId().toString()));
    86.         try(BukkitObjectOutputStream out = new BukkitObjectOutputStream(new FileOutputStream(file))) {
    87.             out.writeObject(inv);
    88.         } catch(Exception ex) {
    89.             ex.printStackTrace();
    90.         }
    91.      
    92.     }
    93.  
    94. }
    95.  
    Ungetestet... ich brech mir für nen Forenbeitrag jetz keinen ab!
    Heute ist nicht mein bester Tag, kann sein das ich an manchen Stellen gepennt hab, also Vorsicht & testen! :)
     
    #5