NPC clicking event and miner updates(working)

This commit is contained in:
NK 2022-11-23 22:25:08 +00:00
parent 05ca15ef0c
commit 9090b473cb
17 changed files with 297 additions and 268 deletions

View file

@ -8,12 +8,14 @@ import me.night.nullvalkyrie.events.CustomItemEvents;
import me.night.nullvalkyrie.events.DamageEffect;
import me.night.nullvalkyrie.hardpoint.ConfigManager;
import me.night.nullvalkyrie.items.CustomItemManager;
import me.night.nullvalkyrie.npc.ClickNPC;
import me.night.nullvalkyrie.npc.NPC;
import me.night.nullvalkyrie.npc.PacketInjector;
import me.night.nullvalkyrie.rank.ScoreboardListener;
import me.night.nullvalkyrie.util.FileManager;
import me.night.nullvalkyrie.util.Util;
import me.night.nullvalkyrie.commands.*;
import me.night.nullvalkyrie.database.Client;
import me.night.nullvalkyrie.miners.CryptoMiner;
import me.night.nullvalkyrie.database.DatabaseManager;
import org.bukkit.*;
import org.bukkit.boss.BarColor;
import org.bukkit.boss.BarStyle;
@ -25,23 +27,19 @@ import org.bukkit.event.server.ServerListPingEvent;
import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;
import java.util.Date;
import static me.night.nullvalkyrie.items.CustomItemManager.updateYamlFilesToPlugin;
public final class Main extends JavaPlugin implements Listener {
private BossBar bossbar;
private PacketInjector injector;
@Override
public void onEnable() {
getConfig().options().copyDefaults();
saveDefaultConfig();
new NPC(this);
EnchantmentManager.register();
new CustomItemManager(this);
updateYamlFilesToPlugin("shop.yml");
updateYamlFilesToPlugin("hardpoint.yml");
updateYamlFilesToPlugin("miners.yml");
new FileManager();
new CommandManager(this).register();
bossbar = Bukkit.createBossBar(ChatColor.GOLD + "Kuudra", BarColor.RED, BarStyle.SEGMENTED_12);
Bukkit.getPluginManager().registerEvents(this, this);
@ -49,16 +47,18 @@ public final class Main extends JavaPlugin implements Listener {
Bukkit.getPluginManager().registerEvents(new ScoreboardListener(this), this);
Bukkit.getPluginManager().registerEvents(new CustomItemEvents(this), this);
Bukkit.getPluginManager().registerEvents(new DamageEffect(this), this);
Bukkit.getPluginManager().registerEvents(new ClickNPC(), this);
//Bukkit.getPluginManager().registerEvents(new GameEvent(this), this);
new DiscordClientManager();
new CryptoMiner(this, "Baka", Material.ENDER_CHEST, 10, 0.7, new Date().getTime());
new Client();
new DatabaseManager();
ConfigManager.setConfig();
NPC.loadNPC(CustomItemManager.loadConfig("npcs.yml"));
this.injector = new PacketInjector();
}
@EventHandler
public void onJoin(PlayerJoinEvent e) {
bossbar.addPlayer(e.getPlayer());
injector.addPlayer(e.getPlayer());
}
@EventHandler

View file

@ -1,7 +1,9 @@
package me.night.nullvalkyrie.commands;
import me.night.nullvalkyrie.Main;
import me.night.nullvalkyrie.miners.CryptoMiner;
import me.night.nullvalkyrie.miners.MinerGUI;
import org.bukkit.Material;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@ -27,11 +29,27 @@ public class MinerCommand extends Command {
@Override
public void onCommand(CommandSender sender, String[] args) {
if (sender instanceof Player) {
if(args.length == 0) {
Player player = (Player) sender;
new MinerGUI(main, player);
int seconds = (int) (new Date().getTime() - (long) getMiner("1").get("lastclaim")) / 1000;
int seconds = (int) (new Date().getTime() - getMiner("0").getLastclaim()) / 1000;
System.out.println("Seconds" + seconds);
generate(50, seconds);
} else if (args[0].equalsIgnoreCase("new")) {
String name = args[1];
Material pick = Material.STONE_PICKAXE;
int level = 20;
double rate = 0.4;
long time = System.currentTimeMillis();
CryptoMiner miner = new CryptoMiner(main, name, pick, level, rate, time);
miner.setMiner(name, pick.name(), level, rate, time);
} else if (args[0].equalsIgnoreCase("claim")) {
String minerIndex = args[1];
CryptoMiner miner = getMiner(minerIndex);
miner.setLastClaim(minerIndex, System.currentTimeMillis());
System.out.println("Done");
}
}
}

View file

@ -8,10 +8,9 @@ import org.bson.conversions.Bson;
import java.util.HashMap;
public class Client {
private MongoClient client;
public class DatabaseManager {
private static MongoCollection<Document> users;
public Client() {
public DatabaseManager() {
connect();
}
public void connect() {
@ -31,7 +30,7 @@ public class Client {
users.insertOne(document);
}
public void updateUserBank(String username, Number coins) {
Document document = (Document) users.find(new Document("Username", username)).first();
Document document = users.find(new Document("Username", username)).first();
if(document != null) {
Bson updated = new Document("Bank", coins);
Bson update = new Document("$set", updated);

View file

@ -3,17 +3,24 @@ package me.night.nullvalkyrie.enchantments;
import org.bukkit.enchantments.Enchantment;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class EnchantmentManager {
public static final Enchantment ThunderBolt = new CustomEnchantment("thunderbolt", "ThunderBolt", 5);
public static final Enchantment SmeltingTouch = new CustomEnchantment("smelting-touch", "Smelting Touch", 1);
public static void register() {
boolean registered = Arrays.stream(Enchantment.values()).collect(Collectors.toList()).contains(ThunderBolt);
if(!registered) {
registerEnchantment(ThunderBolt);
registerEnchantment(SmeltingTouch);
List<Enchantment> enchants = new ArrayList<>();
enchants.add(ThunderBolt);
enchants.add(SmeltingTouch);
List<Boolean> registeredList = new ArrayList<>();
for (Enchantment enchant : enchants) {
registeredList.add(Arrays.stream(Enchantment.values()).collect(Collectors.toList()).contains(enchant));
}
for (int counter = 0; counter < registeredList.size(); counter++) {
if (!registeredList.get(counter)) registerEnchantment(enchants.get(counter));
}
}

View file

@ -221,7 +221,7 @@ public class CustomItemManager {
}
public static void updateYamlFilesToPlugin(String path) {
File file = new File(main.getDataFolder(), path); //xxx.yml
File file = new File(main.getDataFolder(), path);
if (!file.exists()) main.saveResource(path, true);
else main.saveResource(path, true);
}

View file

@ -6,7 +6,6 @@ import org.bukkit.configuration.file.FileConfiguration;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.ThreadLocalRandom;
@ -28,8 +27,7 @@ public class CryptoMiner {
this.level = level;
this.rate = rate; // Percentage generate chance in each tick 20tick per sec
this.lastclaim = lastclaim;
FileConfiguration file = loadConfig("miners.yml");
setMiner(Integer.toString(file.getKeys(false).size()), name, type.name(), level, rate, lastclaim);
}
public String getName() {
@ -57,8 +55,15 @@ public class CryptoMiner {
public long getLastclaim() {
return lastclaim;
}
public void setLastClaim(long lastclaim) {
public void setLastClaim(String index, long lastclaim) {
this.lastclaim = lastclaim;
FileConfiguration file = loadConfig("miners.yml");
file.set(index + ".last-claim", lastclaim);
try {
file.save(loadFile("miners.yml"));
} catch (IOException ignored) {
}
}
public static void generate(int pp, int times) {
for (int counter = 0; counter < times; counter++) {
@ -75,18 +80,18 @@ public class CryptoMiner {
}
return arr;
}
public static HashMap<String, Object> getMiner(String index) {
public static CryptoMiner getMiner(String index) {
FileConfiguration file = loadConfig("miners.yml");
HashMap<String, Object> details = new HashMap<>();
details.put("name", file.getString(index + ".name"));
details.put("material", Material.matchMaterial(file.getString(index + ".material")));
details.put("level", file.getInt(index + ".level"));
details.put("rate", file.getDouble(index + ".rate"));
details.put("lastclaim", file.getLong(index + ".last-claim"));
return details;
String name = file.getString(index + ".name");
Material material = Material.matchMaterial(file.getString(index + ".material"));
int level = file.getInt(index + ".level");
double rate = file.getDouble(index + ".rate");
long lastclaim = file.getLong(index + ".last-claim");
return new CryptoMiner(main, name, material, level, rate, lastclaim);
}
public void setMiner(String index, String name, String material, int level, double rate, long time) {
public void setMiner(String name, String material, int level, double rate, long time) {
FileConfiguration file = loadConfig("miners.yml");
String index = Integer.toString(file.getKeys(false).size());
file.createSection(index);
file.set(index + ".name", name);
file.set(index + ".material", material);

View file

@ -11,7 +11,9 @@ import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class MinerGUI {
@ -45,6 +47,7 @@ public class MinerGUI {
List<String> lore = new ArrayList<>();
lore.add("Level: " + file.getString(c + ".level"));
lore.add("Rate: " + file.getString(c + ".rate"));
lore.add("Last Claim: " + new SimpleDateFormat("d MMM yyyy HH:mm:ss").format(new Date(file.getLong(c + ".last-claim"))));
boolean b = file.getBoolean(c + ".rate") ? lore.add(ChatColor.GRAY + "Click to enable miner!") : lore.add(ChatColor.RED + "Click to disable miner!");
itemMeta.setLore(lore);
item.setItemMeta(itemMeta);

View file

@ -0,0 +1,16 @@
package me.night.nullvalkyrie.npc;
import me.night.nullvalkyrie.util.Util;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
public class ClickNPC implements Listener {
@EventHandler
public void onClick(RightClickNPC e) {
Player player = e.getPlayer();
if (e.getNPC().getBukkitEntity().getName().equalsIgnoreCase(Util.color("&a&lNK"))) {
player.sendMessage(Util.color("Hi"));
}
}
}

View file

@ -4,6 +4,7 @@ import com.mojang.authlib.GameProfile;
import com.mojang.authlib.properties.Property;
import com.mojang.datafixers.util.Pair;
import me.night.nullvalkyrie.Main;
import me.night.nullvalkyrie.items.CustomItemManager;
import me.night.nullvalkyrie.util.Util;
import net.minecraft.network.protocol.game.*;
import net.minecraft.network.syncher.DataWatcher;
@ -17,51 +18,86 @@ import net.minecraft.world.entity.EnumItemSlot;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.craftbukkit.v1_19_R1.CraftServer;
import org.bukkit.craftbukkit.v1_19_R1.CraftWorld;
import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftItemStack;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
public class NPC {
private static Main main;
public NPC(Main main) {
NPC.main = main;
}
private static final List<EntityPlayer> NPCs = new ArrayList<>();
public static List<EntityPlayer> getNPCs() {
return NPCs;
}
public static void createNPC(Player player, String name) { //name must be less than 16 characters including color codes **
CraftPlayer creaftPlayer = (CraftPlayer) player;
EntityPlayer sp = creaftPlayer.getHandle();
EntityPlayer sp = ((CraftPlayer) player).getHandle();
MinecraftServer server = sp.c;
WorldServer level = ((CraftWorld) Bukkit.getWorld(player.getWorld().getName())).getHandle();
WorldServer level = ((CraftWorld) player.getLocation().getWorld()).getHandle();
GameProfile gameProfile = new GameProfile(UUID.randomUUID(), Util.color(name));
String[] skin = Skin.getSkin("Lendortv");
String[] skin = Skin.getSkin(player);
gameProfile.getProperties().put("textures", new Property("textures", skin[0], skin[1]));
EntityPlayer npc = new EntityPlayer(server, level, gameProfile, null);
Location location = player.getLocation();
npc.a(location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch());
addNPCPacket(npc);
NPCs.add(npc);
int var = 1;
FileConfiguration npcFile = CustomItemManager.loadConfig("npcs.yml");
if (npcFile.contains("data")) var = npcFile.getConfigurationSection("data").getKeys(false).size() + 1;
npcFile.set("data." + var + ".x", (int) player.getLocation().getX());
npcFile.set("data." + var + ".y", (int) player.getLocation().getY());
npcFile.set("data." + var + ".z", (int) player.getLocation().getZ());
npcFile.set("data." + var + ".pitch", (int) player.getLocation().getPitch());
npcFile.set("data." + var + ".yaw", (int) player.getLocation().getYaw());
npcFile.set("data." + var + ".world", player.getLocation().getWorld().getName());
npcFile.set("data." + var + ".name", name);
npcFile.set("data." + var + ".texture", skin[0]);
npcFile.set("data." + var + ".signature", skin[1]);
try {
npcFile.save(CustomItemManager.loadFile("npcs.yml"));
} catch (IOException e) {
e.printStackTrace();
}
}
public static void loadNPC(FileConfiguration npcFile) {
npcFile.getConfigurationSection("data").getKeys(false).forEach(npc -> {
Location location = new Location(Bukkit.getWorld(Objects.requireNonNull(npcFile.getString("data." + npc + ".world"))), npcFile.getInt("data." + npc + ".x"), npcFile.getInt("data." + npc + ".y"), npcFile.getInt("data." + npc + ".z"));
location.setPitch((float) npcFile.getDouble("data." + npc + ".pitch"));
location.setYaw((float) npcFile.getDouble("data." + npc + ".yaw"));
String name = npcFile.getString("data." + npc + ".name");
GameProfile gameProfile = new GameProfile(UUID.randomUUID(), Util.color(name));
gameProfile.getProperties().put("textures", new Property("textures", npcFile.getString("data." + npc + ".texture"), npcFile.getString("data." + npc + ".signature")));
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
WorldServer world = ((CraftWorld) location.getWorld()).getHandle();
EntityPlayer npcs = new EntityPlayer(server, world, gameProfile, null);
npcs.a(location.getX(), location.getY(), location.getZ(), location.getPitch(), location.getPitch());
addNPCPacket(npcs);
NPCs.add(npcs);
});
}
public static void addNPCPacket(EntityPlayer npc) {
for (Player player : Bukkit.getOnlinePlayers()) {
CraftPlayer creaftPlayer = (CraftPlayer) player;
EntityPlayer sp = creaftPlayer.getHandle();
PlayerConnection pc = sp.b;
PlayerConnection pc = ((CraftPlayer) player).getHandle().b;
pc.a(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.a, npc));
pc.a(new PacketPlayOutNamedEntitySpawn(npc));
pc.a(new PacketPlayOutEntityHeadRotation(npc, (byte) (npc.getBukkitYaw() * 256 / 360)));
DataWatcher watcher = npc.ai();
watcher.b(new DataWatcherObject<>(17, DataWatcherRegistry.a), (byte) 127);
pc.a(new PacketPlayOutEntityMetadata(npc.ae(), watcher, true));
Bukkit.getScheduler().runTaskLaterAsynchronously(main, () -> pc.a(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.e, npc)), 50);
Bukkit.getScheduler().runTaskLaterAsynchronously(Main.getPlugin(Main.class), () -> pc.a(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.e, npc)), 50);
ItemStack netheriteAxe = new ItemStack(Material.NETHERITE_AXE);
ItemStack anotherAxe = new ItemStack(Material.NETHERITE_INGOT);
List<Pair<EnumItemSlot, net.minecraft.world.item.ItemStack>> list = new ArrayList<>();
@ -70,18 +106,24 @@ public class NPC {
pc.a(new PacketPlayOutEntityEquipment(npc.ae(), list));
}
}
public static void addJoinPacket(Player player) {
for (EntityPlayer npc : NPCs) {
CraftPlayer creaftPlayer = (CraftPlayer) player;
EntityPlayer sp = creaftPlayer.getHandle();
PlayerConnection pc = sp.b;
PlayerConnection pc = ((CraftPlayer) player).getHandle().b;
pc.a(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.a, npc));
pc.a(new PacketPlayOutNamedEntitySpawn(npc));
pc.a(new PacketPlayOutEntityHeadRotation(npc, (byte) (npc.getBukkitYaw() * 256 / 360)));
DataWatcher watcher = npc.ai();
watcher.b(new DataWatcherObject<>(17, DataWatcherRegistry.a), (byte) 127);
pc.a(new PacketPlayOutEntityMetadata(npc.ae(), watcher, true));
Bukkit.getScheduler().runTaskLaterAsynchronously(main, () -> pc.a(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.e, npc)), 50);
Bukkit.getScheduler().runTaskLaterAsynchronously(Main.getPlugin(Main.class), () -> pc.a(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.e, npc)), 50);
ItemStack netheriteAxe = new ItemStack(Material.NETHERITE_AXE);
ItemStack anotherAxe = new ItemStack(Material.NETHERITE_INGOT);
List<Pair<EnumItemSlot, net.minecraft.world.item.ItemStack>> list = new ArrayList<>();
list.add(new Pair<>(EnumItemSlot.a, CraftItemStack.asNMSCopy(netheriteAxe)));
list.add(new Pair<>(EnumItemSlot.b, CraftItemStack.asNMSCopy(anotherAxe)));
pc.a(new PacketPlayOutEntityEquipment(npc.ae(), list));
}
}
}

View file

@ -0,0 +1,57 @@
package me.night.nullvalkyrie.npc;
import io.netty.channel.ChannelDuplexHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelPromise;
import me.night.nullvalkyrie.Main;
import net.minecraft.network.protocol.game.PacketPlayInUseEntity;
import net.minecraft.server.level.EntityPlayer;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import java.lang.reflect.Field;
public class PacketHandler extends ChannelDuplexHandler {
private final Player player;
public PacketHandler(Player player) {
this.player = player;
}
@Override
public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
super.write(ctx, msg, promise);
}
@Override
public void channelRead(ChannelHandlerContext c, Object packet) throws Exception {
if (packet.getClass().getSimpleName().equalsIgnoreCase("PacketPlayInUseEntity")) {
PacketPlayInUseEntity pk = (PacketPlayInUseEntity) packet;
int entityID = (int) PacketInjector.getFieldValue(packet, "a");
boolean sneak = (boolean) PacketInjector.getFieldValue(packet, "c");
Field type = pk.getClass().getDeclaredField("b");
type.setAccessible(true);
Object data = type.get(pk);
if (data.toString().split("\\$")[1].charAt(0) == 'e') { return; }
try {
Field hand = data.getClass().getDeclaredField("a");
hand.setAccessible(true);
if (!hand.get(data).toString().equals("MAIN_HAND")) { return; }
//Right Click
for (EntityPlayer npcs : NPC.getNPCs()) {
if (npcs.ae() == entityID && sneak) {
Bukkit.getScheduler().scheduleSyncDelayedTask(Main.getPlugin(Main.class), new Runnable() {
@Override
public void run() {
Bukkit.getPluginManager().callEvent(new RightClickNPC(player, npcs));
}
}, 0);
}
}
} catch (NoSuchFieldException x) {
//Left Click
}
} else {
super.channelRead(c, packet);
}
}
}

View file

@ -0,0 +1,41 @@
package me.night.nullvalkyrie.npc;
import io.netty.channel.Channel;
import net.minecraft.server.level.EntityPlayer;
import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer;
import org.bukkit.entity.Player;
import java.lang.reflect.Field;
public class PacketInjector {
public void addPlayer(Player p) {
try {
Channel ch = nms(p).b.b.m;
if(ch.pipeline().get("PacketInjector") == null) {
PacketHandler h = new PacketHandler(p);
ch.pipeline().addBefore("packet_handler", "PacketInjector", h);
}
} catch (Throwable t) {
t.printStackTrace();
}
}
public void removePlayer(Player p) {
try {
Channel ch = nms(p).b.b.m;
if(ch.pipeline().get("PacketInjector") != null) {
ch.pipeline().remove("PacketInjector");
}
} catch (Throwable t) {
t.printStackTrace();
}
}
public static Object getFieldValue(Object instance, String fieldName) throws Exception {
Field field = instance.getClass().getDeclaredField(fieldName);
field.setAccessible(true);
return field.get(instance);
}
public static EntityPlayer nms(Player p) {
return ((CraftPlayer) p).getHandle();
}
}

View file

@ -0,0 +1,40 @@
package me.night.nullvalkyrie.npc;
import net.minecraft.server.level.EntityPlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
public class RightClickNPC extends Event implements Cancellable {
private final Player player;
private final EntityPlayer npc;
private boolean isCancelled;
private static final HandlerList HANDLERS = new HandlerList();
public RightClickNPC(Player player, EntityPlayer npc) {
this.player = player;
this.npc = npc;
}
public Player getPlayer() {
return player;
}
public EntityPlayer getNPC() {
return npc;
}
@Override
public boolean isCancelled() {
return isCancelled;
}
@Override
public void setCancelled(boolean cancel) {
isCancelled = cancel;
}
@NotNull
@Override
public HandlerList getHandlers() {
return HANDLERS;
}
}

View file

@ -12,7 +12,7 @@ import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import static me.night.nullvalkyrie.database.Client.createUserSchema;
import static me.night.nullvalkyrie.database.DatabaseManager.createUserSchema;
public class ScoreboardListener implements Listener {

View file

@ -0,0 +1,10 @@
package me.night.nullvalkyrie.util;
import static me.night.nullvalkyrie.items.CustomItemManager.updateYamlFilesToPlugin;
public class FileManager {
public FileManager() {
updateYamlFilesToPlugin("shop.yml");
updateYamlFilesToPlugin("hardpoint.yml");
}
}

View file

View file

@ -12,213 +12,3 @@
rate: 0.7
enabled: true
last-claim: 1668208245832
'2':
name: Sussy
material: ENDER_CHEST
level: 10
rate: 0.7
enabled: true
last-claim: 1668208370651
'3':
name: Sussy
material: ENDER_CHEST
level: 10
rate: 0.7
enabled: true
last-claim: 1668208676271
'4':
name: Sussy
material: ENDER_CHEST
level: 10
rate: 0.7
enabled: true
last-claim: 1668210448531
'5':
name: Sussy
material: ENDER_CHEST
level: 10
rate: 0.7
enabled: true
last-claim: 1668210799036
'6':
name: Sussy
material: ENDER_CHEST
level: 10
rate: 0.7
enabled: true
last-claim: 1668254119769
'7':
name: Sussy
material: ENDER_CHEST
level: 10
rate: 0.7
enabled: true
last-claim: 1668254787702
'8':
name: Sussy
material: ENDER_CHEST
level: 10
rate: 0.7
enabled: true
last-claim: 1668256451864
'9':
name: Sussy
material: ENDER_CHEST
level: 10
rate: 0.7
enabled: true
last-claim: 1668257458167
'10':
name: Sussy
material: ENDER_CHEST
level: 10
rate: 0.7
enabled: true
last-claim: 1668257773080
'11':
name: Sussy
material: ENDER_CHEST
level: 10
rate: 0.7
enabled: true
last-claim: 1668259524393
'12':
name: Sussy
material: ENDER_CHEST
level: 10
rate: 0.7
enabled: true
last-claim: 1668260226503
'13':
name: Sussy
material: ENDER_CHEST
level: 10
rate: 0.7
enabled: true
last-claim: 1668261403911
'14':
name: Sussy
material: ENDER_CHEST
level: 10
rate: 0.7
enabled: true
last-claim: 1668261796376
'15':
name: Sussy
material: ENDER_CHEST
level: 10
rate: 0.7
enabled: true
last-claim: 1668262686577
'16':
name: Sussy
material: ENDER_CHEST
level: 10
rate: 0.7
enabled: true
last-claim: 1668262788190
'17':
name: Sussy
material: ENDER_CHEST
level: 10
rate: 0.7
enabled: true
last-claim: 1668263553259
'18':
name: Sussy
material: ENDER_CHEST
level: 10
rate: 0.7
enabled: true
last-claim: 1668263687264
'19':
name: Sussy
material: ENDER_CHEST
level: 10
rate: 0.7
enabled: true
last-claim: 1668267428787
'20':
name: Sussy
material: ENDER_CHEST
level: 10
rate: 0.7
enabled: true
last-claim: 1668267550253
'21':
name: Sussy
material: ENDER_CHEST
level: 10
rate: 0.7
enabled: true
last-claim: 1668267769594
'22':
name: Sussy
material: ENDER_CHEST
level: 10
rate: 0.7
enabled: true
last-claim: 1668268013534
'23':
name: Sussy
material: ENDER_CHEST
level: 10
rate: 0.7
enabled: true
last-claim: 1668268096781
'24':
name: Sussy
material: ENDER_CHEST
level: 10
rate: 0.7
enabled: true
last-claim: 1668268392432
'25':
name: Sussy
material: ENDER_CHEST
level: 10
rate: 0.7
enabled: true
last-claim: 1668268601044
'26':
name: Sussy
material: ENDER_CHEST
level: 10
rate: 0.7
enabled: true
last-claim: 1668300216256
'27':
name: Sussy
material: ENDER_CHEST
level: 10
rate: 0.7
enabled: true
last-claim: 1668300740524
'28':
name: Sussy
material: ENDER_CHEST
level: 10
rate: 0.7
enabled: true
last-claim: 1668301188489
'29':
name: Sussy
material: ENDER_CHEST
level: 10
rate: 0.7
enabled: true
last-claim: 1668303289593
'30':
name: Sussy
material: ENDER_CHEST
level: 10
rate: 0.7
enabled: true
last-claim: 1668303659410
'31':
name: Sussy
material: ENDER_CHEST
level: 10
rate: 0.7
enabled: true
last-claim: 1668304689097

View file

@ -0,0 +1 @@
data: