Возьмите Random itens из конфига и поместите его в пользовательский инвентарь (Bukkit) - PullRequest
0 голосов
/ 28 февраля 2019

Что ж, привет, я здесь новый участник и вот мой первый пост на форуме разработчиков.

Я делаю плагин квестов для minecraft.

Давайте перейдем к моему вопросуУ меня есть файл config.yml со списком квестов, пронумерованных от 0 до 5, каждое число является типом квестов.Пример:

Тип квеста 0 - Мой.Тип квеста 1 - Ферма.Квест 2 типа это KillMob.И т.д. ...

У каждого типа есть 15 различных квестов с разными целями.

Я хочу рандомизировать тип и сам квест и поместить 10 из них в пользовательский инвентарь, который я создал,как я это делаю?Может кто-то помочь мне, пожалуйста?Любой код, который вам нужен, я выложу здесь, спасибо !!

@ Редактировать: Config.yml:

 Diaria:
    Spawner:
        0:
            Nome: MissaoSpawner
            Tipo: Spawner
            Quantidade: 250
            Chance: 50
            Dificuldade: Facil
    Minerar:
        0:
            Nome: Minerar Blocos0
            Tipo: Minerar
            Quantidade: 250
            Chance: 50
            Dificuldade: Facil
        1:
            Nome: Minerar Blocos1
            Tipo: Minerar
            Quantidade: 250
            Chance: 50
            Dificuldade: Facil
        2:
            Nome: Minerar Blocos2
            Tipo: Minerar
            Quantidade: 250
            Chance: 50
            Dificuldade: Facil
        3:
            Nome: Minerar Blocos3
            Tipo: Minerar
            Quantidade: 250
            Chance: 50
            Dificuldade: Facil
        4:
            Nome: Minerar Blocos4
            Tipo: Minerar
            Quantidade: 250
            Chance: 50
            Dificuldade: Facil
        5:
            Nome: Minerar Blocos5
            Tipo: Minerar
            Quantidade: 250
            Chance: 50
            Dificuldade: Facil
        6:
            Nome: Minerar Blocos6
            Tipo: Minerar
            Quantidade: 250
            Chance: 50
            Dificuldade: Facil
        7:
            Nome: Minerar Bloco7
            Tipo: Minerar
            Quantidade: 250
            Chance: 50
            Dificuldade: Facil
        8:
            Nome: Minerar Blocos8
            Tipo: Minerar
            Quantidade: 250
            Chance: 50
            Dificuldade: Facil
        9:
            Nome: Minerar Blocos9
            Tipo: Minerar
            Quantidade: 250
            Chance: 50
            Dificuldade: Facil
        10:
            Nome: Minerar Blocos10
            Tipo: Minerar
            Quantidade: 250
            Chance: 50
            Dificuldade: Facil
        11:
            Nome: Minerar Blocos11
            Tipo: Minerar
            Quantidade: 250
            Chance: 50
            Dificuldade: Facil
        12:
            Nome: Minerar Blocos12
            Tipo: Minerar
            Quantidade: 250
            Chance: 50
            Dificuldade: Facil
        13:
            Nome: Minerar Blocos13
            Tipo: Minerar
            Quantidade: 250
            Chance: 50
            Dificuldade: Facil
        14:
            Nome: Minerar Blocos14
            Tipo: Minerar
            Quantidade: 250
            Chance: 50
            Dificuldade: Facil

    Pescar:
        0:
            Nome: Pescar
            Tipo: Pescar
            Quantidade: 250
            Chance: 50
            Dificuldade: Facil
    Votar:
        0:
            Nome: Voto
            Tipo: Votar
            Quantidade: 250
            Chance: 50
            Dificuldade: Facil
    Plantar:
        0:
            Nome: Farm
            Tipo: Plantar
            Quantidade: 250
            Chance: 50
            Dificuldade: Facil

Файл, который я пытаюсь добавить рандомизировать (Это решение, котороев моем коде не работает для меня, и я хочу работать с вероятностью в процентах):

package me.missoes.Menus;

import me.missoes.Main;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;

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


public class MenuFarm {

    public void menuFarm(Player p){
        Inventory inv = Bukkit.createInventory(null,27,"Missões de Farm");

        if (randomize() <= 1) {
            inv.setItem(2, Main.getInstance().getMissionManager().missaoFarm());
            inv.setItem(3, Main.getInstance().getMissionManager().missaoFarm());
            inv.setItem(4, Main.getInstance().getMissionManager().missaoFarm());
            inv.setItem(5, Main.getInstance().getMissionManager().missaoFarm());
            inv.setItem(6, Main.getInstance().getMissionManager().missaoFarm());
            inv.setItem(11, Main.getInstance().getMissionManager().missaoFarm());
            inv.setItem(12, Main.getInstance().getMissionManager().missaoFarm());
            inv.setItem(13, Main.getInstance().getMissionManager().missaoFarm());
            inv.setItem(14, Main.getInstance().getMissionManager().missaoFarm());
            inv.setItem(15, Main.getInstance().getMissionManager().missaoFarm());
            inv.setItem(22, Main.getInstance().getItemManager().voltar());

            p.openInventory(inv);
        }
    }

    public int randomize(){

        List<Integer> numb = new ArrayList<Integer>();
        numb.add(0);
        numb.add(1);
        numb.add(2);
        numb.add(3);
        numb.add(4);
        numb.add(5);
        numb.add(6);
        numb.add(7);
        numb.add(8);
        numb.add(9);
        numb.add(10);
        numb.add(11);
        numb.add(12);
        numb.add(13);
        numb.add(14);

        Random rng = new Random();

        int res = numb.get(rng.nextInt(numb.size()));

        return res;
    }
}

Этот файл связан с кодом выше:

package me.missoes.Mission;

import me.missoes.Main;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.Plugin;

import java.util.ArrayList;

public class MissionManager {

    Plugin p = Main.getPlugin(Main.class);

    public ItemStack missaoMinerar(){
        ArrayList<String> lore = new ArrayList<>();
        lore.add("Tipo: " + ChatColor.AQUA + p.getConfig().get("Diaria.Minerar.0.Nome"));
        lore.add("Quantidade: " + ChatColor.RED + p.getConfig().get("Diaria.Minerar.0.Quantidade"));
        lore.add("Dificuldade: " + ChatColor.GREEN + p.getConfig().get("Diaria.Minerar.0.Dificuldade"));
        lore.add(ChatColor.AQUA + "§lCLIQUE PARA PEGAR");
        return Main.getInstance().getMissionBuilder().criarMissao(Material.PAPER, ChatColor.DARK_RED + "Missão Diária", lore);
    }

    public ItemStack missaoFarm(){
        ArrayList<String> lore = new ArrayList<>();
        lore.add("Tipo: " + ChatColor.AQUA + p.getConfig().get("Diaria.Plantar.0.Nome"));
        lore.add("Quantidade: " + ChatColor.RED + p.getConfig().get("Diaria.Plantar.0.Quantidade"));
        lore.add("Dificuldade: " + ChatColor.GREEN + p.getConfig().get("Diaria.Plantar.0.Dificuldade"));
        lore.add(ChatColor.AQUA + "§lCLIQUE PARA PEGAR");
        return Main.getInstance().getMissionBuilder().criarMissao(Material.PAPER, ChatColor.DARK_RED + "Missão Diária", lore);
    }

    public ItemStack missaoPesca(){
        ArrayList<String> lore = new ArrayList<>();
        lore.add("Tipo: " + ChatColor.AQUA + p.getConfig().get("Diaria.Pescar.0.Nome"));
        lore.add("Quantidade: " + ChatColor.RED + p.getConfig().get("Diaria.Pescar.0.Quantidade"));
        lore.add("Dificuldade: " + ChatColor.GREEN + p.getConfig().get("Diaria.Pescar.0.Dificuldade"));
        lore.add(ChatColor.AQUA + "§lCLIQUE PARA PEGAR");
        return Main.getInstance().getMissionBuilder().criarMissao(Material.PAPER, ChatColor.DARK_RED + "Missão Diária", lore);
    }

    public ItemStack missaoSpawner(){
        ArrayList<String> lore = new ArrayList<>();
        lore.add("Tipo: " + ChatColor.AQUA + p.getConfig().get("Diaria.Spawner.0.Nome"));
        lore.add("Quantidade: " + ChatColor.RED + p.getConfig().get("Diaria.Spawner.0.Quantidade"));
        lore.add("Dificuldade: " + ChatColor.GREEN + p.getConfig().get("Diaria.Spawner.0.Dificuldade"));
        lore.add(ChatColor.AQUA + "§lCLIQUE PARA PEGAR");
        return Main.getInstance().getMissionBuilder().criarMissao(Material.PAPER, ChatColor.DARK_RED + "Missão Diária", lore);
    }

    public ItemStack missaoVoto(){
        ArrayList<String> lore = new ArrayList<>();
        lore.add("Tipo: " + ChatColor.AQUA + p.getConfig().get("Diaria.Votar.0.Nome"));
        lore.add("Quantidade: " + ChatColor.RED + p.getConfig().get("Diaria.Votar.0.Quantidade"));
        lore.add("Dificuldade: " + ChatColor.GREEN + p.getConfig().get("Diaria.Votar.0.Dificuldade"));
        lore.add(ChatColor.AQUA + "§lCLIQUE PARA PEGAR");
        return Main.getInstance().getMissionBuilder().criarMissao(Material.PAPER, ChatColor.DARK_RED + "Missão Diária", lore);
    }
}

1 Ответ

0 голосов
/ 28 апреля 2019

Я не знаю, относится ли это к вам, но я только что нашел решение:

    private static Random rnd = new Random();

    public void menuFarm(Player p) {
        Inventory inv = Bukkit.createInventory(null, 27, "Missões de Farm");
        ItemStack[] chosen = new ItemStack[10];
        boolean[] already = new boolean[NUMBER_OF_TOTAL_ITEMS];
        for (int i = 0; i < NUMBER_OF_TOTAL_ITEMS; i ++) {
            int r;
            do {
                r = rnd.nextInt(NUMBER_OF_TOTAL_ITEMS);
            } while (already[r]);
            already[r] = true;
            chosen[i] = getItem(r);
        }
        inv.setItem(2, chosen[0]);
        inv.setItem(3, chosen[1]);
        inv.setItem(4, chosen[2]);
        inv.setItem(5, chosen[3]);
        inv.setItem(6, chosen[4]);
        inv.setItem(11, chosen[5]);
        inv.setItem(12, chosen[6]);
        inv.setItem(13, chosen[7]);
        inv.setItem(14, chosen[8]);
        inv.setItem(15, chosen[9]);
        inv.setItem(22, Main.getInstance().getItemManager().voltar());
        p.openInventory(inv);
    }

    private ItemStack getItem(int r) {
        ArrayList<String> lore = new ArrayList<>();
        lore.add("Tipo: " + ChatColor.AQUA + p.getConfig().get("Diaria.Plantar." + r + ".Nome"));
        lore.add("Quantidade: " + ChatColor.RED + p.getConfig().get("Diaria.Plantar." + r + ".Quantidade"));
        lore.add("Dificuldade: " + ChatColor.GREEN + p.getConfig().get("Diaria.Plantar." + r + ".Dificuldade"));
        lore.add(ChatColor.AQUA + "§lCLIQUE PARA PEGAR");
        return Main.getInstance().getMissionBuilder().criarMissao(Material.PAPER, ChatColor.DARK_RED + "Missão Diária", lore);
    }

Я не буду вдаваться в подробности, но в основном сначала получим 10 случайных предметов ипроверяет, нет ли дубликатов, а затем, наконец, помещает предметы в инвентарь.

Метод getItem работает с идентификатором, чтобы получить соответствующие строки в файле конфигурации (хорошо сделано для выбора номеров для хранения ваших квестов)

...