Skocz do zawartości
  • 0

Przedmioty z configu


Virosel

Pytanie

Cześć,

Chciałem zapytać w jaki sposób mogę wyciągnąć z configu wiele ItemStack'ów, np.: DHx5Iav.png

"Tytuł" listy, to slot, a co do reszty łatwo się domyślić. Z góry dzięki za pomoc.

 

 

 

     

Edytowane przez Wojciu
Odnośnik do komentarza
https://skript.pl/temat/39888-przedmioty-z-configu/
Udostępnij na innych stronach

  • Odpowiedzi 83
  • Dodano
  • Ostatniej odpowiedzi

Top użytkownicy dla tego pytania

Rekomendowane odpowiedzi

  • 0
    public static Map<ItemStack, Integer> items = new HashMap<>();

    public static void loadConfig(){
        int i = 0;

        for (final String a : Main.getInst().getConfig().getConfigurationSection("Items.Sell").getKeys(false)) {
            final String path = "Items.Sell." + a;
            final ItemStack item = new ItemStack(Material.getMaterial(Main.getInst().getConfig().getString(path + ".material")));
            item.setAmount(Main.getInst().getConfig().getInt(path + ".amount"));
            ItemMeta met = item.getItemMeta();
            met.setDisplayName(Utils.fixColor(Main.getInst().getConfig().getString(path + ".name")));
            List<String> lore = Main.getInst().getConfig().getStringList(path + ".lore")
                    .stream()
                    .map(s -> ChatColor.translateAlternateColorCodes('&', s).replace("<<", "«").replace(">>", "»"))
                    .collect(Collectors.toList());
            met.setLore(lore);
            item.setItemMeta(met);
            int price = Main.getInst().getConfig().getInt(path+".price");

            Map<Enchantment, Integer> map = new HashMap<>();
            for (String s : Main.getInst().getConfig().getStringList(path + ".enchantments")) {
                Enchantment ench = Enchantment.getByName(s.split(":")[0].toUpperCase());
                if (ench == null) continue;
                int level = Integer.parseInt(s.split(":")[1]);
                map.put(ench, level);
            }

            item.addUnsafeEnchantments(map);



            items.put(item, i);

            i++;
        }
    }

Tu jest metoda loadConfig

Odnośnik do komentarza
https://skript.pl/temat/39888-przedmioty-z-configu/#findComment-249928
Udostępnij na innych stronach

  • 0
10 minut temu, Virosel napisał:

 

Stworzyłem mapę <ItemStack, Integer> - Integer to slot. I teraz nasuwa się pytanie, w jaki sposób dodać to do inventory. (nie pracowałem wcześniej z mapami, więc nie wiem jak to działa).

czemu integer to slot

Odnośnik do komentarza
https://skript.pl/temat/39888-przedmioty-z-configu/#findComment-249930
Udostępnij na innych stronach

  • 0
Teraz, kerpson napisał:

wytłumacz dokładniej, bo się pogubiłem (jestem po treningu więc wolniej ogarniam, sory) XD

 

Więc tak, 

Przy ładowaniu przedmiotów z configu chcę załadować tylko przedmioty(cenę wyciągam w innym miejscu). Generalnie, cena działa.

Chodzi mi o metodę, która wrzuciłbym itemki z mapy do gui

Odnośnik do komentarza
https://skript.pl/temat/39888-przedmioty-z-configu/#findComment-249935
Udostępnij na innych stronach

  • 0
6 minut temu, Virosel napisał:

 

Więc tak, 

Przy ładowaniu przedmiotów z configu chcę załadować tylko przedmioty(cenę wyciągam w innym miejscu). Generalnie, cena działa.

Chodzi mi o metodę, która wrzuciłbym itemki z mapy do gui

możesz mieć tą mapkę dziku którą ci pokazałem <ItemStack, Integer> (przedmiot cena)

a przy gui zrobić tak:

Inventory inv = Bukkit.createInventory(null, *, *);
for (Map.Entry<ItemStack, Integer> entry : tutaj_mapka.entrySet()) {
	ItemStack is = entry.getKey(); #przedmiot
  	int price = entry.getValue(); #cena
  	inv.addItem(..);
}

Pobiera ci wszystkie przedmioty wraz z ich cenami

Edytowane przez kerpson
Odnośnik do komentarza
https://skript.pl/temat/39888-przedmioty-z-configu/#findComment-249936
Udostępnij na innych stronach

  • 0
35 minut temu, kerpson napisał:

możesz mieć tą mapkę dziku którą ci pokazałem <ItemStack, Integer> (przedmiot cena)

a przy gui zrobić tak:


Inventory inv = Bukkit.createInventory(null, *, *);
for (Map.Entry<ItemStack, Integer> map : tutaj_mapka.entrySet()) {
	ItemStack is = map.getKey(); #przedmiot
  	int price = map.getValue(); #cena
  	inv.addItem(..);
}

Pobiera ci wszystkie przedmioty wraz z ich cenami

Itemki się dodają, ale podczas sprzedaży wyświetla się komunikat o braku wystarczającej ilości przedmiotów

 

Odnośnik do komentarza
https://skript.pl/temat/39888-przedmioty-z-configu/#findComment-249939
Udostępnij na innych stronach

  • 0
4 minuty temu, Virosel napisał:

Itemki się dodają, ale podczas sprzedaży wyświetla się komunikat o braku wystarczającej ilości przedmiotów

 

pokaż tej urywek kodu gdzie się sprzedaje

Odnośnik do komentarza
https://skript.pl/temat/39888-przedmioty-z-configu/#findComment-249940
Udostępnij na innych stronach

  • 0
Teraz, kerpson napisał:

pokaż tej urywek kodu gdzie się sprzedaje

if (e.getCurrentItem().getItemMeta().getDisplayName() != null) {
                    ItemStack is = e.getCurrentItem();
                    ItemStack remove = new ItemStack(is.getType(), 1, is.getDurability());
                    if (!ItemManager.items.containsKey(is)) {

                    }
                    int amount = is.getAmount();

                    if(p.getInventory().containsAtLeast(is, is.getAmount())){
                        CoinsManager.addMoney(p, price);
                        String msg = String.join("\n", Main.getInst().getConfig().getStringList("sellSuccess"));
                        msg = msg.replace("{ITEM}", is.getType().toString());
                        msg = msg.replace("{AMOUNT}", String.valueOf(amount));
                        msg = msg.replace("{MONEY}", String.valueOf(price));
                        p.getInventory().removeItem(is);
                        p.sendMessage(Utils.fixColor(msg));
                    }else{
                        p.closeInventory();
                        Utils.sendTitle(p, Utils.fixColor(Main.getInst().getConfig().getString("titles.tag")));
                        Utils.sendSubTitle(p, Utils.fixColor(Main.getInst().getConfig().getString("titles.notEnounghtItems")));
                    }

                    e.setCancelled(true); 

 

Odnośnik do komentarza
https://skript.pl/temat/39888-przedmioty-z-configu/#findComment-249941
Udostępnij na innych stronach

  • 0
if(p.getInventory().containsAtLeast(remove, is.getAmount())){
                        CoinsManager.addMoney(p, price);
                        String msg = String.join("\n", Main.getInst().getConfig().getStringList("sellSuccess"));
                        msg = msg.replace("{ITEM}", is.getType().toString());
                        msg = msg.replace("{AMOUNT}", String.valueOf(amount));
                        msg = msg.replace("{MONEY}", String.valueOf(price));
                        p.getInventory().removeItem(remove);
                        p.sendMessage(Utils.fixColor(msg));

poprawione

Odnośnik do komentarza
https://skript.pl/temat/39888-przedmioty-z-configu/#findComment-249943
Udostępnij na innych stronach

  • 0
2 minuty temu, kerpson napisał:

if(p.getInventory().containsAtLeast(remove, is.getAmount())){
                        CoinsManager.addMoney(p, price);
                        String msg = String.join("\n", Main.getInst().getConfig().getStringList("sellSuccess"));
                        msg = msg.replace("{ITEM}", is.getType().toString());
                        msg = msg.replace("{AMOUNT}", String.valueOf(amount));
                        msg = msg.replace("{MONEY}", String.valueOf(price));
                        p.getInventory().removeItem(remove);
                        p.sendMessage(Utils.fixColor(msg));

poprawione

Sprzedaje, ale tylko po jednym

 

Odnośnik do komentarza
https://skript.pl/temat/39888-przedmioty-z-configu/#findComment-249945
Udostępnij na innych stronach

  • 0
2 minuty temu, kerpson napisał:

ItemStack remove = new ItemStack(is.getType(), is.getAmount(), is.getDurability());

 

Ok, działa, teraz trzeba zrobić jeszcze kupno, ale raczej sobie z tym poradzę, ewentualnie będę pytał :)

Odnośnik do komentarza
https://skript.pl/temat/39888-przedmioty-z-configu/#findComment-249949
Udostępnij na innych stronach

  • 0
8 minut temu, kerpson napisał:

oke

 

No i błąd... Wszystko było ok, póki nie postanowiłem sprawdzić enchantów. XD

Treść:

Cannot load plugins\vShop\config.yml
org.bukkit.configuration.InvalidConfigurationException: while scanning for the next token
found character          '\t(TAB)' that cannot start any token. (Do not use \t(TAB) for indentation)
 in 'string', line 71, column 1:
                        - 'durability:3'
    ^

        at org.bukkit.configuration.file.YamlConfiguration.loadFromString(YamlConfiguration.java:57) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.configuration.file.FileConfiguration.load(FileConfiguration.java:226) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.configuration.file.FileConfiguration.load(FileConfiguration.java:169) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.configuration.file.YamlConfiguration.loadConfiguration(YamlConfiguration.java:180) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.plugin.java.JavaPlugin.reloadConfig(JavaPlugin.java:188) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.plugin.java.JavaPlugin.getConfig(JavaPlugin.java:162) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at pl.viroz.shop.Main.onEnable(Main.java:26) [vShop2-1.0.jar:?]
        at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:321) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:340) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:405) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.loadPlugin(CraftServer.java:357) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.enablePlugins(CraftServer.java:317) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.s(MinecraftServer.java:414) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.k(MinecraftServer.java:378) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.a(MinecraftServer.java:333) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.DedicatedServer.init(DedicatedServer.java:263) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:525) [spigot.jar:git-Spigot-db6de12-18fbb24]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_231]
Caused by: org.yaml.snakeyaml.scanner.ScannerException: while scanning for the next token
found character          '\t(TAB)' that cannot start any token. (Do not use \t(TAB) for indentation)
 in 'string', line 71, column 1:
                        - 'durability:3'
    ^

        at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:420) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:226) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.yaml.snakeyaml.parser.ParserImpl$ParseBlockMappingValue.produce(ParserImpl.java:586) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:158) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:143) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:132) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:229) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:155) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:229) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:155) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:229) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:155) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:229) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:155) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.yaml.snakeyaml.composer.Composer.composeDocument(Composer.java:122) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.yaml.snakeyaml.composer.Composer.getSingleNode(Composer.java:105) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:120) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:450) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.yaml.snakeyaml.Yaml.load(Yaml.java:369) ~[spigot.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.configuration.file.YamlConfiguration.loadFromString(YamlConfiguration.java:55) ~[spigot.jar:git-Spigot-db6de12-18fbb24]

 

 

 

Sorry za wysłanie 2 błędów

Edytowane przez Virosel
Odnośnik do komentarza
https://skript.pl/temat/39888-przedmioty-z-configu/#findComment-249955
Udostępnij na innych stronach

Nieaktywny
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...