• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Problem, Partikel in form von einem Item auf 3 Inventare zu verteilen.

Felix.

Redstoneengineer
Registriert
10 April 2020
Beiträge
40
Diamanten
253
Moin,
habe folgendes Problem, und hoffe, dass ihr mir helfen könnt!

Das Konzept:
Ich möchte gerne mit einem Befehl, ein Inventar öffen, und in das Inventar alle Partikel inform von einem Netherstar in das Inventar setzen.
Wenn das Inventar voll ist, soll er aber beim 2ten Inventar weitermachen, die Partikel aufzuzählen. Insgesammt brauche ich also 3 Inventare, aufgrund der Anzahl der Partikel.


Mein Problem:
Ich weiß nicht, wie ich wenn das eine Inventar voll ist, beim anderen weitermachen soll.

Was ich versucht habe:
Die Partikel, die schon gesetzt worden sind, in eine ArrayList zu packen, und beim 2ten Inventar abfragen, ob die vorkommen.
Leider ohne Erfolg!
Ich gebe euch mal alles an Code, damit ihr vollständig aufgeklärt seit!


Die Command-Klasse:
package de.devfelix.commands;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.Particle;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

public class SpawnParticleCommand implements CommandExecutor {

    public static List<String> alreadyset = new ArrayList<String>();
    
    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        
        File invdatafile = new File("plugins/Particle", "InvData.yml");
        FileConfiguration invdata = YamlConfiguration.loadConfiguration(invdatafile);
        
        Inventory particlemenu1 = Bukkit.createInventory(null, 9*6, "§8» §6Choose Particle! §8| §cSite 1");
        
        if(sender instanceof Player) {
            
            Player player = (Player)sender;
            
            for (Particle particle : Particle.values()) {
                
                ArrayList<String> particlelore = new ArrayList<String>();
                particlelore.add(" ");
                particlelore.add("§8» §6Click to Choose!");
                
                ItemStack barrier = new ItemStack(Material.BARRIER, 1);
                ItemStack glass = new ItemStack(Material.BLUE_STAINED_GLASS_PANE, 1);
                ItemStack particleitem = new ItemStack(Material.NETHER_STAR, 1);
                ItemStack arrow = new ItemStack(Material.OAK_SIGN, 1);
                ItemMeta arrowmeta = arrow.getItemMeta();
                ItemMeta glassmeta = glass.getItemMeta();
                ItemMeta barriermeta = barrier.getItemMeta();
                ItemMeta particlemeta  = particleitem.getItemMeta();
                arrowmeta.setDisplayName("§6Next Site §8| §c2");
                barriermeta.setDisplayName("§4Exit");
                glassmeta.setDisplayName(" ");
                particlemeta.setDisplayName("§c" + particle.toString().replace("_", " "));
                particlemeta.setLore(particlelore);
                arrow.setItemMeta(arrowmeta);
                glass.setItemMeta(glassmeta);
                barrier.setItemMeta(barriermeta);
                particleitem.setItemMeta(particlemeta);
                
                invdata.set("Items." + particle.toString(), particleitem);
                try {
                    invdata.save(invdatafile);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                
                ItemStack item = invdata.getItemStack("Items." + particle.toString());
                
                particlemenu1.setItem(0, glass);
                particlemenu1.setItem(1, glass);
                particlemenu1.setItem(2, glass);
                particlemenu1.setItem(3, glass);
                particlemenu1.setItem(4, glass);
                particlemenu1.setItem(5, glass);
                particlemenu1.setItem(6, glass);
                particlemenu1.setItem(7, glass);
                particlemenu1.setItem(8, glass);
                particlemenu1.setItem(9, glass);
                particlemenu1.setItem(17, glass);
                particlemenu1.setItem(18, glass);
                particlemenu1.setItem(26, glass);
                particlemenu1.setItem(27, glass);
                particlemenu1.setItem(35, glass);
                particlemenu1.setItem(36, glass);
                particlemenu1.setItem(44, glass);
                particlemenu1.setItem(45, glass);
                particlemenu1.setItem(46, glass);
                particlemenu1.setItem(47, glass);
                particlemenu1.setItem(48, glass);
                particlemenu1.setItem(49, glass);
                particlemenu1.setItem(50, arrow);
                particlemenu1.setItem(51, glass);
                particlemenu1.setItem(52, glass);
                particlemenu1.setItem(53, barrier);
                
                player.sendMessage(particle.toString());
                
                if(particlemenu1.firstEmpty() != -1) {
                    particlemenu1.addItem(item);
                    alreadyset.add(item.getItemMeta().getDisplayName().replace(" ", "_"));
                }
                
            }

            player.openInventory(particlemenu1);
            
            
            
        }
        
        return false;
    }
    
    

}

Die Listener-Klasse:
package de.devfelix.listeners;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.Particle;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

import de.devfelix.commands.SpawnParticleCommand;

public class InventoryClickListener implements Listener {
    
    List<String> alreadyset2 = new ArrayList<String>();
    
    @EventHandler
    public void onClick(InventoryClickEvent event) {
        
        File invdatafile = new File("plugins/Particle", "InvData.yml");
        FileConfiguration invdata = YamlConfiguration.loadConfiguration(invdatafile);
        
        Player player= (Player) event.getWhoClicked();
        
        if(event.getView().getTitle().equalsIgnoreCase("§8» §6Choose Particle! §8| §cSite 1") ||
        event.getView().getTitle().equalsIgnoreCase("§8» §6Choose Particle! §8| §cSite 2") ||
        event.getView().getTitle().equalsIgnoreCase("§8» §6Choose Particle! §8| §cSite 3")) {
            
            event.setCancelled(true);
            
            if(event.getCurrentItem() != null) {
                
                if(event.getCurrentItem().getType() == Material.BARRIER &&
                event.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase("§4Exit")) {
                    player.closeInventory();
                }
                
                if(event.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase("§6Next Site §8| §c2")) {
                    
                    Inventory particlemenu2 = Bukkit.createInventory(null, 9*6, "§8» §6Choose Particle! §8| §cSite 2");
                    
                    for (Particle particle : Particle.values()) {
                        
                    if(!particle.toString().contains(SpawnParticleCommand.alreadyset.toString())) {
                        
                        ArrayList<String> particlelore = new ArrayList<String>();
                        particlelore.add(" ");
                        particlelore.add("§8» §6Click to Choose!");
                        
                        ItemStack barrier = new ItemStack(Material.BARRIER, 1);
                        ItemStack arrow = new ItemStack(Material.OAK_SIGN, 1);
                        ItemStack glass = new ItemStack(Material.BLUE_STAINED_GLASS_PANE, 1);
                        ItemStack particleitem = new ItemStack(Material.NETHER_STAR, 1);
                        ItemMeta glassmeta = glass.getItemMeta();
                        ItemMeta arrowmeta = glass.getItemMeta();
                        ItemMeta barriermeta = barrier.getItemMeta();
                        ItemMeta particlemeta  = particleitem.getItemMeta();
                        arrowmeta.setDisplayName("§6Next Site §8| §c2");
                        barriermeta.setDisplayName("§4Exit");
                        glassmeta.setDisplayName(" ");
                        particlemeta.setDisplayName("§c" + particle.toString().replace("_", " "));
                        particlemeta.setLore(particlelore);
                        glass.setItemMeta(glassmeta);
                        barrier.setItemMeta(barriermeta);
                        particleitem.setItemMeta(particlemeta);
                        
                        invdata.set("Items." + particle.toString(), particleitem);
                        try {
                            invdata.save(invdatafile);
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        
                        ItemStack item = invdata.getItemStack("Items." + particle.toString());
                        
                        particlemenu2.setItem(0, glass);
                        particlemenu2.setItem(1, glass);
                        particlemenu2.setItem(2, glass);
                        particlemenu2.setItem(3, glass);
                        particlemenu2.setItem(4, glass);
                        particlemenu2.setItem(5, glass);
                        particlemenu2.setItem(6, glass);
                        particlemenu2.setItem(7, glass);
                        particlemenu2.setItem(8, glass);
                        particlemenu2.setItem(9, glass);
                        particlemenu2.setItem(17, glass);
                        particlemenu2.setItem(18, glass);
                        particlemenu2.setItem(26, glass);
                        particlemenu2.setItem(27, glass);
                        particlemenu2.setItem(35, glass);   
                        particlemenu2.setItem(36, glass);
                        particlemenu2.setItem(44, glass);
                        particlemenu2.setItem(45, glass);
                        particlemenu2.setItem(46, glass);
                        particlemenu2.setItem(47, glass);
                        particlemenu2.setItem(48, glass);
                        particlemenu2.setItem(49, glass);
                        particlemenu2.setItem(50, new ItemStack(Material.OAK_SIGN));
                        particlemenu2.setItem(51, glass);
                        particlemenu2.setItem(52, glass);
                        particlemenu2.setItem(53, barrier);
                        
                        player.sendMessage(particle.toString());
                        
                        if(particlemenu2.firstEmpty() != -1) {
                            particlemenu2.addItem(item);
                            alreadyset2.add(item.getItemMeta().getDisplayName().replace(" ", "_"));
                        }
                        
                    }
                        
                    }
                    
                    player.openInventory(particlemenu2);
                    
                }else {
                    if(event.getCurrentItem().getItemMeta().getDisplayName().equalsIgnoreCase("§6Next Site §8| §c3")) {
                        //3te Seite mache ich noch!
                    }
                }
                
                
            }
            
        }
        
    }

}

Danke im Vorraus für die Hilfe, und noch einen schönen Abend!
 

TrinityX

Redstoneengineer
Registriert
17 Mai 2020
Beiträge
47
Alter
23
Diamanten
337
Minecraft
NichtTrinity
Ich bin mir nicht sicher ob ich richtig verstanden habe was du zu erreichen versuchst, aber was mir so spontan einfällt, wäre doch einfach zu überprüfen ob der letzte belegbare Slot im Inventar nicht null ist, falls das zutrifft mit dem nächsten Inventar weitermachen.

Aber jetzt mal eine andere Sache, mir ist aufgefallen, dass es einige Probleme mit deinem Code gibt. Du verwendest die gleichen Zeilen Code in zwei unterschiedlichen Klassen. Hier wäre es doch einfacher eine Methode zu verwenden. Somit sparst du ein paar extra Zeilen Code.
Und jetzt wohl noch entscheidender, deine Inventare, ItemStacks und File Objekte werden JEDES MAL beim Inventarklick und beim Befehl neu erstellt. Das ist sehr ineffizient und könnte zu Performance Problemen führen.
Oh und statt 52 mal Glas zu setzen würde ich dir empfehlen alle anderen Slots vorher zu belegen und anschließend mit einer For-Schleife alle leeren übrigen Slots mit Glas zu füllen.

Allein aus Gründen der Übersichtlichkeit würde ich dir dringlichst empfehlen alles was mit Dateien zu tun hat und auch deine Inventare und ItemStacks in extra Klassen zu verlegen.
Da, so wie ich es verstanden habe, alle deine Items und Inventare schon im Voraus bekannt sind, musst du sie auch nur EINMAL erstellen und zwar beim Laden des Plugins.
 
Zuletzt bearbeitet:

Felix.

Redstoneengineer
Registriert
10 April 2020
Beiträge
40
Diamanten
253
Moin, danke für deine schnelle Hilfe!
Dieses im nächsten Inventar weitermachen, ist ja mein Problem.
Weiß leider nicht wie ich das anstellen soll.
Bin gerade dabei, so wie du es geraten hast, meinen Code aufzuräumen.
 

Felix.

Redstoneengineer
Registriert
10 April 2020
Beiträge
40
Diamanten
253
Habe jetzt eine Klasse namens InvManager erstellt, und dadrin eine Methode, wo alles drin ist.
Die Methode wird in der onEnable methode aufgerufen!
Nun habe ich aber das Problem, dass nur ein Item im Inv ist von den Partikeln siehe Bild.
Ich hoffe, dass ihr/du da auch helfen kannst.
LG
lol.PNG


InvManager:
package de.devfelix.utils;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.Particle;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

public class InvManager {
    
    public static File invdatafile = new File("plugins/Particle", "InvData.yml");
    public static FileConfiguration invdata = YamlConfiguration.loadConfiguration(invdatafile);
    
    public static Inventory inv1;
    public static Inventory inv2;
    public static Inventory inv3;
    
    public static void createParticleInventory(Material surroundmaterial, Material particlematerial, Material exitbutton) {

        for(Particle particle : Particle.values()) {
            
            String placeholder = particle.toString().replace("_", " ");
            String particleitemname = placeholder.substring(0, 1).toUpperCase() + placeholder.substring(1);
                
            List<String> particlelore = new ArrayList<String>();
            particlelore.add(" ");
            particlelore.add("§6Click to choose!");
            
            List<String> exitlore = new ArrayList<String>();
            exitlore.add(" ");
            exitlore.add("§6Click to close the Inventory!");
            
            List<String> sitelorenext1 = new ArrayList<String>();
            sitelorenext1.add(" ");
            sitelorenext1.add("§6Click to change the Site!");
            sitelorenext1.add("§6Next Site §8» §b2");
            
            List<String> sitelorenext2 = new ArrayList<String>();
            sitelorenext2.add(" ");
            sitelorenext2.add("§6Click to change the Site!");
            sitelorenext2.add("§6Next Site §8» §b3");
            
            List<String> siteloreback1 = new ArrayList<String>();
            siteloreback1.add(" ");
            siteloreback1.add("§6Click to change the Site!");
            siteloreback1.add("§6Next Site §8» §b2");
            
            List<String> siteloreback2 = new ArrayList<String>();
            siteloreback2.add(" ");
            siteloreback2.add("§6Click to change the Site!");
            siteloreback2.add("§6Next Site §8» §b1");
                
            ItemStack glass = new ItemStack(surroundmaterial, 1);
            ItemStack exititem = new ItemStack(exitbutton, 1);
            ItemStack sitechangenext1item = new ItemStack(Material.OAK_SIGN, 1);
            ItemStack sitechangenext2item = new ItemStack(Material.OAK_SIGN, 1);
            ItemStack sitechangeback1item = new ItemStack(Material.OAK_SIGN, 1);
            ItemStack sitechangeback2item = new ItemStack(Material.OAK_SIGN, 1);
            ItemStack particleitem = new ItemStack(particlematerial, 1);
            
            ItemMeta glassmeta = glass.getItemMeta();
            ItemMeta particlemeta = particleitem.getItemMeta();
            ItemMeta exitmeta = exititem.getItemMeta();
            ItemMeta sitenext1meta = sitechangenext1item.getItemMeta();
            ItemMeta sitenext2meta = sitechangenext2item.getItemMeta();
            ItemMeta siteback1meta = sitechangeback1item.getItemMeta();
            ItemMeta siteback2meta = sitechangeback2item.getItemMeta();
            
            glassmeta.setDisplayName(" ");
            particlemeta.setDisplayName(particleitemname);
            exitmeta.setDisplayName("§4Exit");
            sitenext1meta.setDisplayName("§aNext");
            sitenext2meta.setDisplayName("§aNext");
            siteback1meta.setDisplayName("§aBack");
            siteback2meta.setDisplayName("§aBack");
            
            particlemeta.setLore(particlelore);
            exitmeta.setLore(exitlore);
            sitenext1meta.setLore(sitelorenext1);
            sitenext2meta.setLore(sitelorenext2);
            siteback1meta.setLore(siteloreback1);
            siteback2meta.setLore(siteloreback2);
            
            particleitem.setItemMeta(particlemeta);
            glass.setItemMeta(glassmeta);
            exititem.setItemMeta(exitmeta);
            sitechangenext1item.setItemMeta(sitenext1meta);
            sitechangenext2item.setItemMeta(sitenext2meta);
            sitechangeback1item.setItemMeta(siteback1meta);
            sitechangeback2item.setItemMeta(siteback2meta);
            
            inv1 = Bukkit.createInventory(null, 9*6, "§8» §6Choose Particle! §8| §cSite 1");
            inv2 = Bukkit.createInventory(null, 9*6, "§8» §6Choose Particle! §8| §cSite 2");
            inv3 =Bukkit.createInventory(null, 9*6, "§8» §6Choose Particle! §8| §cSite 3");
            
            inv1.setItem(0, glass);
            inv1.setItem(1, glass);
            inv1.setItem(2, glass);
            inv1.setItem(3, glass);
            inv1.setItem(4, glass);
            inv1.setItem(5, glass);
            inv1.setItem(6, glass);
            inv1.setItem(7, glass);
            inv1.setItem(8, glass);
            inv1.setItem(9, glass);
            inv1.setItem(17, glass);
            inv1.setItem(18, glass);
            inv1.setItem(26, glass);
            inv1.setItem(27, glass);
            inv1.setItem(35, glass);    
            inv1.setItem(36, glass);
            inv1.setItem(44, glass);
            inv1.setItem(45, glass);
            inv1.setItem(46, glass);
            inv1.setItem(47, glass);
            inv1.setItem(48, glass);
            inv1.setItem(49, glass);
            inv1.setItem(50, sitechangenext1item);
            inv1.setItem(51, glass);
            inv1.setItem(52, glass);
            inv1.setItem(53, exititem);
            
            inv2.setItem(0, glass);
            inv2.setItem(1, glass);
            inv2.setItem(2, glass);
            inv2.setItem(3, glass);
            inv2.setItem(4, glass);
            inv2.setItem(5, glass);
            inv2.setItem(6, glass);
            inv2.setItem(7, glass);
            inv2.setItem(8, glass);
            inv2.setItem(9, glass);
            inv2.setItem(17, glass);
            inv2.setItem(18, glass);
            inv2.setItem(26, glass);
            inv2.setItem(27, glass);
            inv2.setItem(35, glass);    
            inv2.setItem(36, glass);
            inv2.setItem(44, glass);
            inv2.setItem(45, glass);
            inv2.setItem(46, glass);
            inv2.setItem(47, glass);
            inv2.setItem(48, sitechangeback1item);
            inv2.setItem(49, glass);
            inv2.setItem(50, sitechangenext2item);
            inv2.setItem(51, glass);
            inv2.setItem(52, glass);
            inv2.setItem(53, exititem);
            
            inv3.setItem(0, glass);
            inv3.setItem(1, glass);
            inv3.setItem(2, glass);
            inv3.setItem(3, glass);
            inv3.setItem(4, glass);
            inv3.setItem(5, glass);
            inv3.setItem(6, glass);
            inv3.setItem(7, glass);
            inv3.setItem(8, glass);
            inv3.setItem(9, glass);
            inv3.setItem(17, glass);
            inv3.setItem(18, glass);
            inv3.setItem(26, glass);
            inv3.setItem(27, glass);
            inv3.setItem(35, glass);    
            inv3.setItem(36, glass);
            inv3.setItem(44, glass);
            inv3.setItem(45, glass);
            inv3.setItem(46, glass);
            inv3.setItem(47, glass);
            inv3.setItem(48, sitechangeback2item);
            inv3.setItem(49, glass);
            inv3.setItem(50, glass);
            inv3.setItem(51, glass);
            inv3.setItem(52, glass);
            inv3.setItem(53, exititem);
            
            if(inv1.firstEmpty() != -1) {
                inv1.addItem(particleitem);
            }else {
                if(inv2.firstEmpty() != -1) {
                    inv2.addItem(particleitem);
                }else {
                    inv3.addItem(particleitem);
                }
            }
            
        }
        
    }

}
 

TrinityX

Redstoneengineer
Registriert
17 Mai 2020
Beiträge
47
Alter
23
Diamanten
337
Minecraft
NichtTrinity
Ich habe das Gefühl, dass dir die Java Basics fehlen. Du solltest wirklich erst Java lernen bzw. wenigstens die Basics kennen bevor du dich an die SpigotAPI wagst.

Ich würde ja gerne helfen aber dadurch, dass dir die Basics in beiden Bereichen fehlen, müsste ich sehr viel Code für dich schreiben.
Das hätte wenig Sinn, wenn man diesen nicht wirklich versteht.

Hier mal ein paar Dinge, die mir aufgefallen sind:
Alles in deiner InvManager Klasse ist Static. Warum?
Der Sinn meines Rates eine Manager Klasse für das Inventar anzulegen, war es um vorherige Effizienz Probleme zu beheben. Jedoch beginnt deine Methode zum Erstellen des Inventars mit einer For-Schleife die durch jedes Particle iteriert. In dieser Schleife wird für JEDES PARTIKEL das gesamte Inventar inklusive ItemStacks neu erstellt. Außerdem verwendest du fast 100 Zeilen Code um Glas ins Inventar zu setzen, statt, wie vorher schon beschrieben, eine For-Schleife zu verwenden um es auf eine Zeile Code zu reduzieren.

Zum Schluss setzt du das Particle Item in den ersten leeren Slot. Da du vorher aber jedes Mal ein neues Inventar erstellt hattest, ist hier auch nur ein Item im ersten Slot.
 

Felix.

Redstoneengineer
Registriert
10 April 2020
Beiträge
40
Diamanten
253
Zum Schluss setzt du das Particle Item in den ersten leeren Slot. Da du vorher aber jedes ein neues Inventar erstellt hattest, ist hier auch nur ein Item im ersten Slot.

Hab ich übersehen Danke.
Zu deinen Worten mit den Java Kenntnissen.
Ja, es haben mir auch schon mehere Developer drauf hingewiesen, meine Java Kenntnisse ein bisschen zu "erneuern".
Ich habe mir gestern ein Java Grundkenntnis Buch gekauft, und danke dir für deine Hilfe, und deiner Kritik.

Schönen Abend noch! ^^
 
Oben