enhancement of lucky draws
This commit is contained in:
parent
4a3ec6bc65
commit
dcea7c10a7
8 changed files with 111 additions and 47 deletions
|
@ -16,8 +16,6 @@ public class BetaCommand extends Command {
|
|||
@Override
|
||||
public void onCommand(CommandSender sender, String[] args) {
|
||||
if (sender instanceof Player player) {
|
||||
|
||||
|
||||
//ZombiePet a = new ZombiePet(player.getLocation(), player);
|
||||
//((CraftWorld) player.getWorld()).getHandle().b(a);
|
||||
}
|
||||
|
|
|
@ -17,5 +17,6 @@ public class CommandManager {
|
|||
new ShopCommand();
|
||||
new BetaCommand();
|
||||
new MinerCommand();
|
||||
new LuckyDrawCommand();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
package me.night.nullvalkyrie.commands;
|
||||
|
||||
import me.night.nullvalkyrie.ui.inventory.LuckyDraw;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class LuckyDrawCommand extends Command {
|
||||
public LuckyDrawCommand() {
|
||||
super("luckydraw", new String[]{"ld"}, "Generate a lucky draw", "");
|
||||
}
|
||||
@Override
|
||||
public void onCommand(CommandSender sender, String[] args) {
|
||||
if (sender instanceof Player player) {
|
||||
new LuckyDraw().UI(player);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender sender, String[] args) {
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -4,28 +4,29 @@ import org.bukkit.Material;
|
|||
|
||||
public enum Items {
|
||||
|
||||
ETERNALSTARE("Eternal Stare", 29, Rarity.LEGENDARY, Material.COAL), // legendary charm
|
||||
MORNINGTEA("Morning Tea", 28, Rarity.EPIC, Material.IRON_INGOT), // epic emote
|
||||
PARACHUTE("Parachute - Doomed Chorus", 11, Rarity.EPIC, Material.GOLD_INGOT), // epic parachute
|
||||
RALLYCAR("Rally Car - Doomed Chorus", 10, Rarity.EPIC, Material.REDSTONE), //epic backpack
|
||||
WORLDAFLAME("World Aflame", 6.5, Rarity.LEGENDARY, Material.LAPIS_LAZULI), // legendary background
|
||||
MOLOTOVCOTAIL("Molotov Cotail - Soul Flame", 5.5, Rarity.EPIC, Material.COPPER_INGOT), // epic throwable
|
||||
KATANA("Katana - Silent Echo", 4.67, Rarity.EPIC, Material.EMERALD), // epic melee
|
||||
DLQ33("DL Q33 - Doomed Chorus", 4, Rarity.EPIC, Material.QUARTZ), // epic gun
|
||||
DAME("Dame - Shot Caller", 1.25, Rarity.EPIC, Material.DIAMOND), // character epic
|
||||
KILO141("Kilo 141 - Demonsong", 0.08, Rarity.LEGENDARY, Material.NETHERITE_INGOT); // weapon legendary
|
||||
ETERNALSTARE("Eternal Stare", 29, Rarity.LEGENDARY, Material.COAL, 10), // legendary charm
|
||||
MORNINGTEA("Morning Tea", 28, Rarity.EPIC, Material.IRON_INGOT, 12), // epic emote
|
||||
PARACHUTE("Parachute - Doomed Chorus", 11, Rarity.EPIC, Material.GOLD_INGOT, 14), // epic parachute
|
||||
RALLYCAR("Rally Car - Doomed Chorus", 10, Rarity.EPIC, Material.REDSTONE, 16), //epic backpack
|
||||
WORLDAFLAME("World Aflame", 6.5, Rarity.LEGENDARY, Material.LAPIS_LAZULI, 28), // legendary background
|
||||
MOLOTOVCOTAIL("Molotov Cotail - Soul Flame", 5.5, Rarity.EPIC, Material.COPPER_INGOT, 30), // epic throwable
|
||||
KATANA("Katana - Silent Echo", 4.67, Rarity.EPIC, Material.EMERALD, 32), // epic melee
|
||||
DLQ33("DL Q33 - Doomed Chorus", 4, Rarity.EPIC, Material.QUARTZ, 34), // epic gun
|
||||
DAME("Dame - Shot Caller", 1.25, Rarity.EPIC, Material.DIAMOND, 19), // character epic
|
||||
KILO141("Kilo 141 - Demonsong", 0.08, Rarity.LEGENDARY, Material.NETHERITE_INGOT, 25); // weapon legendary
|
||||
|
||||
private final String name;
|
||||
private final double weight;
|
||||
private final Rarity rarity;
|
||||
private final Material material;
|
||||
private final int slot;
|
||||
|
||||
|
||||
Items(String name, double weight, Rarity rarity, Material material) {
|
||||
Items(String name, double weight, Rarity rarity, Material material, int slot) {
|
||||
this.name = name;
|
||||
this.weight = weight;
|
||||
this.rarity = rarity;
|
||||
this.material = material;
|
||||
this.slot = slot;
|
||||
}
|
||||
public static Items getByName(String name) {
|
||||
for (Items item : Items.values()) {
|
||||
|
@ -50,4 +51,8 @@ public enum Items {
|
|||
public Material getMaterial() {
|
||||
return material;
|
||||
}
|
||||
|
||||
public int getSlot() {
|
||||
return slot;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,19 +3,11 @@ package me.night.nullvalkyrie.enums;
|
|||
import org.bukkit.Material;
|
||||
|
||||
public enum MinerType {
|
||||
DIAMOND("Diamond", Material.DIAMOND_ORE, "https://textures.minecraft.net/texture/c09cc3c75bd13c59602040b5970f30dbc76825c0e817da815a65d76ab0e82198"),
|
||||
EMERALD("Emerald", Material.EMERALD_ORE, "https://textures.minecraft.net/texture/c09cc3c75bd13c59602040b5970f30dbc76825c0e817da815a65d76ab0e82198"),
|
||||
GOLD("Gold", Material.GOLD_ORE, "https://textures.minecraft.net/texture/c09cc3c75bd13c59602040b5970f30dbc76825c0e817da815a65d76ab0e82198"),
|
||||
IRON("Iron", Material.IRON_ORE, "https://textures.minecraft.net/texture/c09cc3c75bd13c59602040b5970f30dbc76825c0e817da815a65d76ab0e82198"),
|
||||
REDSTONE("Redstone", Material.REDSTONE_ORE, "https://textures.minecraft.net/texture/c09cc3c75bd13c59602040b5970f30dbc76825c0e817da815a65d76ab0e82198"),
|
||||
COAL("Coal", Material.COAL_ORE, "https://textures.minecraft.net/texture/c09cc3c75bd13c59602040b5970f30dbc76825c0e817da815a65d76ab0e82198"),
|
||||
LAPIS("Lapis", Material.LAPIS_ORE, "https://textures.minecraft.net/texture/c09cc3c75bd13c59602040b5970f30dbc76825c0e817da815a65d76ab0e82198"),
|
||||
QUARTZ("Quartz", Material.NETHER_QUARTZ_ORE, "https://textures.minecraft.net/texture/c09cc3c75bd13c59602040b5970f30dbc76825c0e817da815a65d76ab0e82198"),
|
||||
OBSIDIAN("Obsidian", Material.OBSIDIAN, "https://textures.minecraft.net/texture/c09cc3c75bd13c59602040b5970f30dbc76825c0e817da815a65d76ab0e82198"),
|
||||
NETHERITE("Netherite", Material.ANCIENT_DEBRIS, "https://textures.minecraft.net/texture/c09cc3c75bd13c59602040b5970f30dbc76825c0e817da815a65d76ab0e82198");
|
||||
DIAMOND("Diamond", Material.DIAMOND_ORE, "https://textures.minecraft.net/texture/c09cc3c75bd13c59602040b5970f30dbc76825c0e817da815a65d76ab0e82198"), EMERALD("Emerald", Material.EMERALD_ORE, "https://textures.minecraft.net/texture/c09cc3c75bd13c59602040b5970f30dbc76825c0e817da815a65d76ab0e82198"), GOLD("Gold", Material.GOLD_ORE, "https://textures.minecraft.net/texture/c09cc3c75bd13c59602040b5970f30dbc76825c0e817da815a65d76ab0e82198"), IRON("Iron", Material.IRON_ORE, "https://textures.minecraft.net/texture/c09cc3c75bd13c59602040b5970f30dbc76825c0e817da815a65d76ab0e82198"), REDSTONE("Redstone", Material.REDSTONE_ORE, "https://textures.minecraft.net/texture/c09cc3c75bd13c59602040b5970f30dbc76825c0e817da815a65d76ab0e82198"), COAL("Coal", Material.COAL_ORE, "https://textures.minecraft.net/texture/c09cc3c75bd13c59602040b5970f30dbc76825c0e817da815a65d76ab0e82198"), LAPIS("Lapis", Material.LAPIS_ORE, "https://textures.minecraft.net/texture/c09cc3c75bd13c59602040b5970f30dbc76825c0e817da815a65d76ab0e82198"), QUARTZ("Quartz", Material.NETHER_QUARTZ_ORE, "https://textures.minecraft.net/texture/c09cc3c75bd13c59602040b5970f30dbc76825c0e817da815a65d76ab0e82198"), OBSIDIAN("Obsidian", Material.OBSIDIAN, "https://textures.minecraft.net/texture/c09cc3c75bd13c59602040b5970f30dbc76825c0e817da815a65d76ab0e82198"), NETHERITE("Netherite", Material.ANCIENT_DEBRIS, "https://textures.minecraft.net/texture/c09cc3c75bd13c59602040b5970f30dbc76825c0e817da815a65d76ab0e82198");
|
||||
private final String name;
|
||||
private final Material material;
|
||||
private final String headTexture;
|
||||
|
||||
MinerType(String name, Material material, String headTexture) {
|
||||
this.name = name;
|
||||
this.material = material;
|
||||
|
|
|
@ -3,6 +3,7 @@ package me.night.nullvalkyrie.ui.inventory;
|
|||
import me.night.nullvalkyrie.Main;
|
||||
import me.night.nullvalkyrie.enums.Items;
|
||||
import me.night.nullvalkyrie.util.RandomCollection;
|
||||
import me.night.nullvalkyrie.util.Util;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
|
@ -18,13 +19,15 @@ import java.util.Collections;
|
|||
import java.util.List;
|
||||
|
||||
public class InventoryListener implements Listener {
|
||||
private final RandomCollection<String> randomCollection;
|
||||
public static RandomCollection<String> randomCollection;
|
||||
|
||||
public InventoryListener() {
|
||||
randomCollection = new RandomCollection<>();
|
||||
for (Items e : Items.values()) {
|
||||
randomCollection.add(e.getWeight(), e.getName());
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onClick(InventoryClickEvent e) {
|
||||
if (e.getCurrentItem() == null) return;
|
||||
|
@ -63,6 +66,11 @@ public class InventoryListener implements Listener {
|
|||
if (e.getRawSlot() == 0) {
|
||||
player.closeInventory();
|
||||
} else if (e.getRawSlot() == 22) {
|
||||
if (randomCollection.getAll().size() == 0) {
|
||||
player.closeInventory();
|
||||
player.sendMessage(ChatColor.RED + "You already got all the rewards!");
|
||||
return;
|
||||
}
|
||||
List<String> colors = List.of("WHITE", "ORANGE", "MAGENTA", "LIGHT_BLUE", "YELLOW", "LIME", "PINK", "GRAY", "LIGHT_GRAY", "CYAN", "PURPLE", "BLUE", "BROWN", "GREEN", "RED", "BLACK");
|
||||
List<String> slot1 = new ArrayList<>(colors);
|
||||
List<String> slot2 = new ArrayList<>(colors);
|
||||
|
@ -85,6 +93,7 @@ public class InventoryListener implements Listener {
|
|||
int i = 0;
|
||||
int ii = 0;
|
||||
int time = 0;
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
if (colors.size() - 1 <= i) i = 0;
|
||||
|
@ -139,15 +148,39 @@ public class InventoryListener implements Listener {
|
|||
LuckyDraw.GUI.setItem(slot, new ItemStack(Material.AIR));
|
||||
}
|
||||
String s = randomCollection.getRandom();
|
||||
randomCollection.remove(s);
|
||||
Items it = Items.getByName(s);
|
||||
ItemStack item = new ItemStack(it.getMaterial(), 1);
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
if (meta == null) return;
|
||||
meta.setDisplayName(ChatColor.GOLD + it.getName());
|
||||
meta.setLore(List.of(it.getRarity().getDisplay()));
|
||||
item.setItemMeta(meta);
|
||||
player.getInventory().addItem(item);
|
||||
if (s != null) {
|
||||
randomCollection.remove(s);
|
||||
int slot = 0;
|
||||
for (Items e : Items.values())
|
||||
if (e.getName().equals(s))
|
||||
slot = e.getSlot();
|
||||
LuckyDraw.GUI.remove(Items.getByName(s).getMaterial());
|
||||
ItemStack got = new ItemStack(Material.BLACK_STAINED_GLASS_PANE);
|
||||
ItemMeta gotmeta = got.getItemMeta();
|
||||
gotmeta.setDisplayName(ChatColor.RED + "You already got this reward!");
|
||||
got.setItemMeta(gotmeta);
|
||||
LuckyDraw.GUI.setItem(slot, got);
|
||||
for (String s1 : randomCollection.getAll()) {
|
||||
ItemStack item = new ItemStack(Items.getByName(s1).getMaterial());
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
meta.setDisplayName(ChatColor.GREEN + Items.getByName(s1).getName());
|
||||
List<String> lore = meta.getLore() == null ? new ArrayList<>() : meta.getLore();
|
||||
lore.add(0, "");
|
||||
lore.add(1, Util.color("&bChance: " + randomCollection.getChance(s1) + "%"));
|
||||
lore.add(2, Items.getByName(s1).getRarity().getDisplay());
|
||||
meta.setLore(lore);
|
||||
item.setItemMeta(meta);
|
||||
LuckyDraw.GUI.setItem(Items.getByName(s1).getSlot(), item);
|
||||
}
|
||||
Items it = Items.getByName(s);
|
||||
ItemStack item = new ItemStack(it.getMaterial(), 1);
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
if (meta == null) return;
|
||||
meta.setDisplayName(ChatColor.GOLD + it.getName());
|
||||
meta.setLore(List.of(it.getRarity().getDisplay()));
|
||||
item.setItemMeta(meta);
|
||||
player.getInventory().addItem(item);
|
||||
} else player.closeInventory();
|
||||
}
|
||||
}.runTaskLater(Main.getPlugin(Main.class), 5L * 20L);
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package me.night.nullvalkyrie.ui.inventory;
|
||||
|
||||
import me.night.nullvalkyrie.enums.Items;
|
||||
import me.night.nullvalkyrie.util.Util;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
|
@ -17,16 +18,24 @@ public class LuckyDraw extends GUIManager {
|
|||
setCloseButton(true);
|
||||
setFrame(true, Material.BLUE_STAINED_GLASS_PANE);
|
||||
int[] slots = new int[]{10, 12, 14, 16, 28, 30, 32, 34, 19, 25};
|
||||
int count = 0;
|
||||
for (Items name : Items.values()) {
|
||||
ItemStack item = new ItemStack(name.getMaterial());
|
||||
for (String s1 : InventoryListener.randomCollection.getAll()) {
|
||||
Items it = Items.getByName(s1);
|
||||
ItemStack item = new ItemStack(it.getMaterial());
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
if (meta == null) return;
|
||||
meta.setDisplayName(ChatColor.GOLD + name.getName());
|
||||
meta.setLore(List.of(name.getRarity().getDisplay()));
|
||||
meta.setDisplayName(ChatColor.GREEN + s1);
|
||||
meta.setLore(List.of("", Util.color("&bChance:" + InventoryListener.randomCollection.getChance(s1) + "%"), it.getRarity().getDisplay()));
|
||||
item.setItemMeta(meta);
|
||||
GUI.setItem(slots[count], item);
|
||||
count++;
|
||||
GUI.setItem(it.getSlot(), item);
|
||||
}
|
||||
for (int s : slots) {
|
||||
if (GUI.getItem(s) == null) {
|
||||
ItemStack got = new ItemStack(Material.BLACK_STAINED_GLASS_PANE);
|
||||
ItemMeta gotmeta = got.getItemMeta();
|
||||
gotmeta.setDisplayName(ChatColor.RED + "You already got this reward!");
|
||||
got.setItemMeta(gotmeta);
|
||||
GUI.setItem(s, got);
|
||||
}
|
||||
}
|
||||
ItemStack roll = new ItemStack(Material.ARROW);
|
||||
ItemMeta meta = roll.getItemMeta();
|
||||
|
|
|
@ -1,9 +1,6 @@
|
|||
package me.night.nullvalkyrie.util;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.NavigableMap;
|
||||
import java.util.Random;
|
||||
import java.util.TreeMap;
|
||||
import java.util.*;
|
||||
|
||||
public class RandomCollection<E> {
|
||||
|
||||
|
@ -36,7 +33,7 @@ public class RandomCollection<E> {
|
|||
return map.ceilingEntry(value).getValue();
|
||||
}
|
||||
|
||||
public double getChance(E v) {
|
||||
public long getChance(E v) {
|
||||
double c = 0;
|
||||
for (E d : chance.keySet()) {
|
||||
if (d == v) {
|
||||
|
@ -44,6 +41,10 @@ public class RandomCollection<E> {
|
|||
break;
|
||||
}
|
||||
}
|
||||
return (c / total) * 100;
|
||||
return Math.round((c / total) * 100);
|
||||
}
|
||||
// write a method to get all the values in the collection so you can iterate over them
|
||||
public List<E> getAll() {
|
||||
return new ArrayList<>(map.values());
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue