• 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!

Spigot Navigator - Items aus eine File lesen

eleminaiter

Minecrafter
Registriert
25 November 2015
Beiträge
7
Alter
26
Diamanten
300
Hallo,

sitze gerade irgendwie fest. Bin gerade dabei ein Lobby Navigator Plugin zu coden. Ich will dass man später über einen Command ein Warppunkt setzt und dabei der Warp ins Navigator iäInventar gesetzt wird. Dabei speichere ich alle nötigen Informationen in eine extra Config File ab, damit alles mach einem Neustart erhalten bleibt. Nur wie lese ich das alles wieder aus und sage dem Inventar er soll alle Items und warppunkte aus der Config auslesen und in das Inventar packen? Kann ich die Infos aus der Config in eine Arraylist packen oder wie genau sollte ich da vorgehen. Warppunkte können ja beliebig viele in der Datei stehen deswegen hatte ich an eine Arraylist gedacht, aber da scheitert es im Moment. Kann mir einer weiter helfen?

Gruß

Fabian
 

NitFlex

Minecrafter
Registriert
21 Dezember 2019
Beiträge
5
Diamanten
300
Hallo, ich habe dir mal was programmiert, du kannst versuchen es in deinen Code einzubinden. So wie ich es als Plugin habe, funktioniert es.

Java:
package de.nitcode.configwarp.commands;

import de.nitcode.configwarp.ConfigWarp;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;

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

public class WarpCommand implements CommandExecutor {

    FileConfiguration config = ConfigWarp.getInstance().getConfig();
    List<String> warps = config.getStringList("Warps") != null ? config.getStringList("Warps") : new ArrayList<>();

    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if (sender instanceof Player) {
            Player player = (Player) sender;
            if (args.length == 0) {
                player.sendMessage("§c/warp <add> <DisplayName> <Material> <Slot>");
            } else if (args.length == 5) {
                //warp add <Name> <DisplayName> <Material> <Slot>
                if (args[0].equalsIgnoreCase("add")) {

                    String name = args[1];
                    String displayName = args[2];

                    if (warps.contains(name)) {
                        player.sendMessage("§cDieser Warp existiert schon");
                        return false;
                    }

                    Material material;
                    int slot;

                    try {
                        material = Material.valueOf(args[3]);
                        slot = Integer.parseInt(args[4]);
                    } catch (Exception e) {
                        e.printStackTrace();
                        player.sendMessage("§cMaterial oder Slot falsch angegeben");
                        return false;
                    }

                    warps.add(name);
                    config.set(name + ".DisplayName", displayName);
                    config.set(name + ".Material", material.toString());
                    config.set(name + ".Slot", slot);
                    config.set("Warps", warps);
                    config.set(name+".WarpLocation.world", player.getLocation().getWorld().getName());
                    config.set(name+".WarpLocation.x", player.getLocation().getX());
                    config.set(name+".WarpLocation.y", player.getLocation().getY());
                    config.set(name+".WarpLocation.z", player.getLocation().getZ());
                    config.set(name+".WarpLocation.yaw", player.getLocation().getYaw());
                    config.set(name+".WarpLocation.pitch", player.getLocation().getPitch());
                    ConfigWarp.getInstance().saveConfig();
                    player.sendMessage("§aWarp hinzugefügt");
                }
            }
        }
        return false;
    }

}

Java:
package de.nitcode.configwarp.listener;

import de.nitcode.configwarp.ConfigWarp;
import de.nitcode.configwarp.utils.ItemsBuilder;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.Inventory;

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

public class InteractListener implements Listener {

    public InteractListener() {
        ConfigWarp.getInstance().getServer().getPluginManager().registerEvents(this, ConfigWarp.getInstance());
    }

    @EventHandler
    public void onInteract(PlayerInteractEvent event) {
        Player player = event.getPlayer();
        if (event.getAction().equals(Action.RIGHT_CLICK_BLOCK) || event.getAction().equals(Action.RIGHT_CLICK_AIR)) {
            if (event.getItem() != null & !event.getItem().getType().equals(Material.AIR)) {
                if (event.getItem().getType().equals(Material.COMPASS)) {
                    openInventory(player);
                }
            }
        }
    }

    private void openInventory(Player player) {
        Inventory inventory = Bukkit.createInventory(null, InventoryType.CHEST, "Warpmenü");
        FileConfiguration config = ConfigWarp.getInstance().getConfig();
        List<String> warps = config.getStringList("Warps") != null ? config.getStringList("Warps") : new ArrayList<>();

        if(!warps.isEmpty()) {

            Material material;
            String displayName;
            int slot;

            for(String warp : warps) {
                material = Material.valueOf(config.getString(warp + ".Material"));
                displayName = ChatColor.translateAlternateColorCodes('&', config.getString(warp + ".DisplayName"));
                slot = config.getInt(warp + ".Slot");

                inventory.setItem(slot, ItemsBuilder.createItem(material, displayName));
            }
        }

        player.openInventory(inventory);

    }

}

Java:
package de.nitcode.configwarp.listener;

import de.nitcode.configwarp.ConfigWarp;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;

public class InventoryClickListener implements Listener {

    public InventoryClickListener() {
        ConfigWarp.getInstance().getServer().getPluginManager().registerEvents(this, ConfigWarp.getInstance());
    }

    @EventHandler
    public void onInvClick(InventoryClickEvent event) {
        if(event.getWhoClicked() instanceof Player) {
            Player player = (Player) event.getWhoClicked();
            if(event.getInventory().getName().equalsIgnoreCase("Warpmenü")) {
                event.setCancelled(true);
                if(event.getCurrentItem() != null && !event.getCurrentItem().getType().equals(Material.AIR)) {
                    player.closeInventory();
                    String warpName = ChatColor.stripColor(event.getCurrentItem().getItemMeta().getDisplayName());
                    player.teleport(getLocationFromConfig(warpName));
                }
            }
        }
    }

    private Location getLocationFromConfig(String name) {
        Location location = null;
        FileConfiguration config = ConfigWarp.getInstance().getConfig();
        try {

            String world = config.getString(name + ".WarpLocation.world");
            double x = config.getDouble(name + ".WarpLocation.x");
            double y = config.getDouble(name + ".WarpLocation.y");
            double z = config.getDouble(name + ".WarpLocation.z");
            float yaw = (float) config.getDouble(name + ".WarpLocation.yaw");
            float pitch = (float) config.getDouble(name + ".WarpLocation.pitch");

            location = new Location(Bukkit.getWorld(world), x, y, z, yaw, pitch);

        } catch (Exception e) {
            e.printStackTrace();
        }
        return location;
    }

}

Java:
package de.nitcode.configwarp.utils;

import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

public class ItemsBuilder {

    public static ItemStack createItem(Material material, String name) {
        ItemStack item = new ItemStack(material, 1);
        ItemMeta meta = item.getItemMeta();
        meta.setDisplayName(name);
        item.setItemMeta(meta);

        return item;
    }

}

Java:
package de.nitcode.configwarp;

import de.nitcode.configwarp.commands.WarpCommand;
import de.nitcode.configwarp.listener.InteractListener;
import de.nitcode.configwarp.listener.InventoryClickListener;
import org.bukkit.plugin.java.JavaPlugin;

public final class ConfigWarp extends JavaPlugin {

    private static ConfigWarp instance;

    @Override
    public void onEnable() {
        instance = this;
        registerConfig();
        registerListener();
        registerCommands();
    }

    @Override
    public void onDisable() {
        instance = null;
    }

    private void registerConfig() {
        getConfig().options().copyDefaults(true);
        saveConfig();
    }

    private void registerListener() {
        new InteractListener();
        new InventoryClickListener();
    }

    private void registerCommands() {
        getCommand("warp").setExecutor(new WarpCommand());
    }

    public static ConfigWarp getInstance() {
        return instance;
    }

}

Code:
name: ConfigWarp
version: ${project.version}
main: de.nitcode.configwarp.ConfigWarp
authors: [nitCode]
website: https://NitFlex.de

commands:
  warp:

Viel Spaß, ich hoffe ich konnte dir helfen.

MFG Chris | nitCode
 
Zuletzt bearbeitet von einem Moderator:

eleminaiter

Minecrafter
Registriert
25 November 2015
Beiträge
7
Alter
26
Diamanten
300
Hi, vielen danke für deine Arbeit :) Habe es mittlerweile auch gelöst... hatte jetzt alle nötigen Infos in die Config speichern lassen und dann die Infos mit einer for Schleife ausgelesen wenn man das Inventar öffnet. Ist aber mal gut einen anderen Weg zusehen :D
 

Ativendus

Kuhfänger
Registriert
7 Dezember 2016
Beiträge
78
Diamanten
352
Hallo, ich habe dir mal was programmiert, du kannst versuchen es in deinen Code einzubinden. So wie ich es als Plugin habe, funktioniert es.

Java:
package de.nitcode.configwarp.commands;

import de.nitcode.configwarp.ConfigWarp;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;

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

public class WarpCommand implements CommandExecutor {

    FileConfiguration config = ConfigWarp.getInstance().getConfig();
    List<String> warps = config.getStringList("Warps") != null ? config.getStringList("Warps") : new ArrayList<>();

    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        if (sender instanceof Player) {
            Player player = (Player) sender;
            if (args.length == 0) {
                player.sendMessage("§c/warp <add> <DisplayName> <Material> <Slot>");
            } else if (args.length == 5) {
                //warp add <Name> <DisplayName> <Material> <Slot>
                if (args[0].equalsIgnoreCase("add")) {

                    String name = args[1];
                    String displayName = args[2];

                    if (warps.contains(name)) {
                        player.sendMessage("§cDieser Warp existiert schon");
                        return false;
                    }

                    Material material;
                    int slot;

                    try {
                        material = Material.valueOf(args[3]);
                        slot = Integer.parseInt(args[4]);
                    } catch (Exception e) {
                        e.printStackTrace();
                        player.sendMessage("§cMaterial oder Slot falsch angegeben");
                        return false;
                    }

                    warps.add(name);
                    config.set(name + ".DisplayName", displayName);
                    config.set(name + ".Material", material.toString());
                    config.set(name + ".Slot", slot);
                    config.set("Warps", warps);
                    config.set(name+".WarpLocation.world", player.getLocation().getWorld().getName());
                    config.set(name+".WarpLocation.x", player.getLocation().getX());
                    config.set(name+".WarpLocation.y", player.getLocation().getY());
                    config.set(name+".WarpLocation.z", player.getLocation().getZ());
                    config.set(name+".WarpLocation.yaw", player.getLocation().getYaw());
                    config.set(name+".WarpLocation.pitch", player.getLocation().getPitch());
                    ConfigWarp.getInstance().saveConfig();
                    player.sendMessage("§aWarp hinzugefügt");
                }
            }
        }
        return false;
    }

}

Java:
package de.nitcode.configwarp.listener;

import de.nitcode.configwarp.ConfigWarp;
import de.nitcode.configwarp.utils.ItemsBuilder;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.Inventory;

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

public class InteractListener implements Listener {

    public InteractListener() {
        ConfigWarp.getInstance().getServer().getPluginManager().registerEvents(this, ConfigWarp.getInstance());
    }

    @EventHandler
    public void onInteract(PlayerInteractEvent event) {
        Player player = event.getPlayer();
        if (event.getAction().equals(Action.RIGHT_CLICK_BLOCK) || event.getAction().equals(Action.RIGHT_CLICK_AIR)) {
            if (event.getItem() != null & !event.getItem().getType().equals(Material.AIR)) {
                if (event.getItem().getType().equals(Material.COMPASS)) {
                    openInventory(player);
                }
            }
        }
    }

    private void openInventory(Player player) {
        Inventory inventory = Bukkit.createInventory(null, InventoryType.CHEST, "Warpmenü");
        FileConfiguration config = ConfigWarp.getInstance().getConfig();
        List<String> warps = config.getStringList("Warps") != null ? config.getStringList("Warps") : new ArrayList<>();

        if(!warps.isEmpty()) {

            Material material;
            String displayName;
            int slot;

            for(String warp : warps) {
                material = Material.valueOf(config.getString(warp + ".Material"));
                displayName = ChatColor.translateAlternateColorCodes('&', config.getString(warp + ".DisplayName"));
                slot = config.getInt(warp + ".Slot");

                inventory.setItem(slot, ItemsBuilder.createItem(material, displayName));
            }
        }

        player.openInventory(inventory);

    }

}

Java:
package de.nitcode.configwarp.listener;

import de.nitcode.configwarp.ConfigWarp;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;

public class InventoryClickListener implements Listener {

    public InventoryClickListener() {
        ConfigWarp.getInstance().getServer().getPluginManager().registerEvents(this, ConfigWarp.getInstance());
    }

    @EventHandler
    public void onInvClick(InventoryClickEvent event) {
        if(event.getWhoClicked() instanceof Player) {
            Player player = (Player) event.getWhoClicked();
            if(event.getInventory().getName().equalsIgnoreCase("Warpmenü")) {
                event.setCancelled(true);
                if(event.getCurrentItem() != null && !event.getCurrentItem().getType().equals(Material.AIR)) {
                    player.closeInventory();
                    String warpName = ChatColor.stripColor(event.getCurrentItem().getItemMeta().getDisplayName());
                    player.teleport(getLocationFromConfig(warpName));
                }
            }
        }
    }

    private Location getLocationFromConfig(String name) {
        Location location = null;
        FileConfiguration config = ConfigWarp.getInstance().getConfig();
        try {

            String world = config.getString(name + ".WarpLocation.world");
            double x = config.getDouble(name + ".WarpLocation.x");
            double y = config.getDouble(name + ".WarpLocation.y");
            double z = config.getDouble(name + ".WarpLocation.z");
            float yaw = (float) config.getDouble(name + ".WarpLocation.yaw");
            float pitch = (float) config.getDouble(name + ".WarpLocation.pitch");

            location = new Location(Bukkit.getWorld(world), x, y, z, yaw, pitch);

        } catch (Exception e) {
            e.printStackTrace();
        }
        return location;
    }

}

Java:
package de.nitcode.configwarp.utils;

import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;

public class ItemsBuilder {

    public static ItemStack createItem(Material material, String name) {
        ItemStack item = new ItemStack(material, 1);
        ItemMeta meta = item.getItemMeta();
        meta.setDisplayName(name);
        item.setItemMeta(meta);

        return item;
    }

}

Java:
package de.nitcode.configwarp;

import de.nitcode.configwarp.commands.WarpCommand;
import de.nitcode.configwarp.listener.InteractListener;
import de.nitcode.configwarp.listener.InventoryClickListener;
import org.bukkit.plugin.java.JavaPlugin;

public final class ConfigWarp extends JavaPlugin {

    private static ConfigWarp instance;

    @Override
    public void onEnable() {
        instance = this;
        registerConfig();
        registerListener();
        registerCommands();
    }

    @Override
    public void onDisable() {
        instance = null;
    }

    private void registerConfig() {
        getConfig().options().copyDefaults(true);
        saveConfig();
    }

    private void registerListener() {
        new InteractListener();
        new InventoryClickListener();
    }

    private void registerCommands() {
        getCommand("warp").setExecutor(new WarpCommand());
    }

    public static ConfigWarp getInstance() {
        return instance;
    }

}

Code:
name: ConfigWarp
version: ${project.version}
main: de.nitcode.configwarp.ConfigWarp
authors: [nitCode]
website: https://NitFlex.de

commands:
  warp:

Viel Spaß, ich hoffe ich konnte dir helfen.

MFG Chris | nitCode

Hey, versuche dein Code doch nächstes mal zu kommentieren. Einfach dein Code zu posten bringt dem User auf längerer Sicht nicht viel. Ich glaube wenn du einen Code für jemanden schreibst würdest du dich auch freuen wenn er ihn versteht.

Achso und versuche bei dem Command nächstes mal lieber anstatt

Java:
if (args.length == 0) {
    player.sendMessage("§c/warp add <Name> <DisplayName> <Material> <Slot>");
} else if (args.length == 5) {

Java:
if (args.length != 5) {
    player.sendMessage("§c/warp add <Name> <DisplayName> <Material> <Slot>");
} else {

denn dann wird die Nachricht, in der erklärt wird, wie der Command funktioniert, immer geschickt, wenn man den Command nicht richtig hat. Bei deiner Lösung kommt nur eine Nachricht wenn man /warp eingitb oder /warp add <Name> <DisplayName> <Material> <Slot>, sonst nicht
 
Zuletzt bearbeitet:
Oben