嗯,你好,我是这里的新成员,这是我在开发论坛上的第一篇文章。
我正在为我的世界做一个任务插件。
让我们回答我的问题,我有一个config.yml文件,其中包含从0到5编号的任务列表,每个数字都是一种任务。例:
任务0类型是我的。任务1类型是农场。任务2类型是KillMob。等等...
每种类型都有15个不同的任务,目标不同。
我想随机化类型和任务本身,并将其中的10个放入我创建的自定义库存中,我是如何做到这一点的?有谁可以帮助我吗?您需要的任何代码我都会在这里发布,谢谢!!
@Edit: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
我正在尝试添加randomize的文件(我的代码中的解决方案对我来说没有用,我想以百分比的机会工作):
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);
}
}
我不知道这是否仍然与你有关,但我刚刚给你解决方案:
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方法使用id来获取配置文件中的相应字符串(很好地选择了数字来存储你的任务)