improvements for miners
This commit is contained in:
parent
5b6e509cbf
commit
4a3ec6bc65
5 changed files with 173 additions and 109 deletions
|
@ -1,6 +1,8 @@
|
|||
package me.night.nullvalkyrie.commands;
|
||||
|
||||
//import me.night.nullvalkyrie.entities.pets.ZombiePet;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.craftbukkit.v1_19_R1.CraftWorld;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.List;
|
||||
|
@ -8,16 +10,16 @@ import java.util.List;
|
|||
public class BetaCommand extends Command {
|
||||
|
||||
public BetaCommand() {
|
||||
super("beta", new String[]{"b", "npc"}, "Beta", "");
|
||||
super("beta", new String[]{"b"}, "Beta", "");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCommand(CommandSender sender, String[] args) {
|
||||
if (sender instanceof Player player) {
|
||||
|
||||
// CryptoMiner miner = new CryptoMiner(args[0], Material.DIAMOND_ORE, 1, 0.5, System.currentTimeMillis());
|
||||
// miner.spawn(player, "https://textures.minecraft.net/texture/c09cc3c75bd13c59602040b5970f30dbc76825c0e817da815a65d76ab0e82198");
|
||||
// new LuckyDraw().UI(player);
|
||||
|
||||
//ZombiePet a = new ZombiePet(player.getLocation(), player);
|
||||
//((CraftWorld) player.getWorld()).getHandle().b(a);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,47 +1,72 @@
|
|||
package me.night.nullvalkyrie.commands;
|
||||
|
||||
import me.night.nullvalkyrie.database.MinerDataManager;
|
||||
import me.night.nullvalkyrie.entities.miners.CryptoMiner;
|
||||
import me.night.nullvalkyrie.enums.MinerType;
|
||||
import me.night.nullvalkyrie.ui.inventory.Miner;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.util.StringUtil;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
|
||||
import static me.night.nullvalkyrie.entities.miners.CryptoMiner.generate;
|
||||
|
||||
public class MinerCommand extends Command {
|
||||
|
||||
public MinerCommand() {
|
||||
super("miner", new String[]{"m", "miners"}, "Miner list", "");
|
||||
super("miner", new String[]{"miners"}, "Miners", "");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCommand(CommandSender sender, String[] args) {
|
||||
if (sender instanceof Player player) {
|
||||
if (args.length == 0) {
|
||||
player.sendMessage(ChatColor.RED + "Invalid command");
|
||||
return;
|
||||
}
|
||||
if (args[0].equalsIgnoreCase("list")) {
|
||||
new Miner().UI(player);
|
||||
int seconds = (int) (new Date().getTime() - MinerDataManager.getLastClaim(1)) / 1000;
|
||||
generate(50, seconds);
|
||||
} else if (args[0].equalsIgnoreCase("new")) {
|
||||
String name = args[1];
|
||||
Material pick = Material.NETHERITE_AXE;
|
||||
String name = args[2];
|
||||
MinerType type = MinerType.getByName(args[1]);
|
||||
int level = 20;
|
||||
double rate = 0.4;
|
||||
long time = System.currentTimeMillis();
|
||||
MinerDataManager.setNPC(name, pick, level, rate, true, time);
|
||||
assert type != null;
|
||||
MinerDataManager.setMiner(name, type, level, rate, true, time);
|
||||
CryptoMiner miner = new CryptoMiner(name, type, level, rate, time);
|
||||
miner.spawn(player);
|
||||
} else if (args[0].equalsIgnoreCase("claim")) {
|
||||
String minerIndex = args[1];
|
||||
MinerDataManager.setLastClaim(Long.parseLong(minerIndex));
|
||||
player.sendMessage("Claimed");
|
||||
MinerDataManager.setLastClaim(args[1]);
|
||||
player.sendMessage(ChatColor.GREEN + "Claimed");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> onTabComplete(CommandSender sender, String[] args) {
|
||||
return null;
|
||||
if (args.length == 1) {
|
||||
List<String> cc = List.of("new", "claim", "list");
|
||||
return StringUtil.copyPartialMatches(args[0], cc, new ArrayList<>());
|
||||
} else if (args.length == 2) {
|
||||
if (args[0].equalsIgnoreCase("new")) {
|
||||
List<String> choices = new ArrayList<>();
|
||||
for (MinerType type : MinerType.values()) {
|
||||
choices.add(type.getName());
|
||||
}
|
||||
return StringUtil.copyPartialMatches(args[1], choices, new ArrayList<>());
|
||||
} else if (args[0].equalsIgnoreCase("claim")) {
|
||||
List<String> choices = new ArrayList<>();
|
||||
for (CryptoMiner miner : MinerDataManager.getMiners().values()) {
|
||||
choices.add(miner.getName());
|
||||
}
|
||||
return StringUtil.copyPartialMatches(args[1], choices, new ArrayList<>());
|
||||
}
|
||||
}
|
||||
return new ArrayList<>();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,18 +2,18 @@ package me.night.nullvalkyrie.database;
|
|||
|
||||
import com.mongodb.client.MongoCursor;
|
||||
import me.night.nullvalkyrie.entities.miners.CryptoMiner;
|
||||
import me.night.nullvalkyrie.enums.MinerType;
|
||||
import org.bson.Document;
|
||||
import org.bson.conversions.Bson;
|
||||
import org.bukkit.Material;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
public class MinerDataManager {
|
||||
public static void setNPC(String name, Material material, int level, double rate, boolean enabled, long lastclaim) {
|
||||
public static void setMiner(String name, MinerType type, int level, double rate, boolean enabled, long lastclaim) {
|
||||
Document newDocument = new Document();
|
||||
newDocument.put("ID", DatabaseManager.getMinersDB().countDocuments() + 1);
|
||||
newDocument.put("Name", name);
|
||||
newDocument.put("Material", material.name());
|
||||
newDocument.put("Material", type.getName());
|
||||
newDocument.put("Level", level);
|
||||
newDocument.put("Rate", rate);
|
||||
newDocument.put("Enabled", enabled);
|
||||
|
@ -21,8 +21,8 @@ public class MinerDataManager {
|
|||
DatabaseManager.getMinersDB().insertOne(newDocument);
|
||||
}
|
||||
|
||||
public static void setLastClaim(long id) {
|
||||
Document document = DatabaseManager.getMinersDB().find(new Document("ID", id)).first();
|
||||
public static void setLastClaim(String name) {
|
||||
Document document = DatabaseManager.getMinersDB().find(new Document("Name", name)).first();
|
||||
if (document != null) {
|
||||
Bson updated = new Document("LastClaim", System.currentTimeMillis());
|
||||
Bson update = new Document("$set", updated);
|
||||
|
@ -43,7 +43,7 @@ public class MinerDataManager {
|
|||
public static CryptoMiner getMiner(long id) {
|
||||
Document doc = DatabaseManager.getMinersDB().find(new Document("ID", id)).first();
|
||||
if (doc != null) {
|
||||
return new CryptoMiner(doc.getString("Name"), Material.matchMaterial(doc.getString("Material")), doc.getInteger("Level"), doc.getDouble("Rate"), doc.getLong("LastClaim"));
|
||||
return new CryptoMiner(doc.getString("Name"), MinerType.getByName(doc.getString("Material")), doc.getInteger("Level"), doc.getDouble("Rate"), doc.getLong("LastClaim"));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
@ -53,7 +53,7 @@ public class MinerDataManager {
|
|||
try (MongoCursor<Document> cursor = DatabaseManager.getMinersDB().find().cursor()) {
|
||||
while (cursor.hasNext()) {
|
||||
Document doc = cursor.next();
|
||||
list.put(doc.getLong("ID"), new CryptoMiner(doc.getString("Name"), Material.matchMaterial(doc.getString("Material")), doc.getInteger("Level"), doc.getDouble("Rate"), doc.getLong("LastClaim")));
|
||||
list.put(doc.getLong("ID"), new CryptoMiner(doc.getString("Name"), MinerType.getByName(doc.getString("Material")), doc.getInteger("Level"), doc.getDouble("Rate"), doc.getLong("LastClaim")));
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
|
|
@ -2,6 +2,8 @@ package me.night.nullvalkyrie.entities.miners;
|
|||
|
||||
import com.mojang.authlib.GameProfile;
|
||||
import com.mojang.authlib.properties.Property;
|
||||
|
||||
import me.night.nullvalkyrie.enums.MinerType;
|
||||
import me.night.nullvalkyrie.util.Skin;
|
||||
import me.night.nullvalkyrie.util.Util;
|
||||
import net.minecraft.network.protocol.game.PacketPlayOutPlayerInfo;
|
||||
|
@ -30,14 +32,14 @@ import java.util.concurrent.ThreadLocalRandom;
|
|||
|
||||
public class CryptoMiner {
|
||||
protected String name;
|
||||
protected Material type;
|
||||
protected MinerType type;
|
||||
protected int level;
|
||||
protected double rate;
|
||||
protected final long lastclaim;
|
||||
|
||||
public CryptoMiner(String name, Material type, int level, double rate, long lastclaim) {
|
||||
public CryptoMiner(String name, MinerType type, int level, double rate, long lastclaim) {
|
||||
this.name = name; // Name of the miner
|
||||
this.type = type; // Material to mine
|
||||
this.type = type; // Type of the miner
|
||||
this.level = level;
|
||||
this.rate = rate; // Percentage generate chance in each tick 20tick per sec
|
||||
this.lastclaim = lastclaim;
|
||||
|
@ -60,10 +62,10 @@ public class CryptoMiner {
|
|||
}
|
||||
|
||||
public Material getType() {
|
||||
return type;
|
||||
return this.type.getMaterial();
|
||||
}
|
||||
|
||||
public void setType(Material type) {
|
||||
public void setType(MinerType type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
|
@ -88,7 +90,7 @@ public class CryptoMiner {
|
|||
System.out.println(generated);
|
||||
}
|
||||
|
||||
public void spawn(Player player, String url) {
|
||||
public void spawn(Player player) {
|
||||
Location loc = player.getLocation().getWorld().getBlockAt(player.getLocation()).getLocation().add(0.5, 0, 0.5);
|
||||
if (player.getLocation().getWorld() == null) return;
|
||||
ArmorStand stand = player.getLocation().getWorld().spawn(loc, ArmorStand.class);
|
||||
|
@ -101,7 +103,7 @@ public class CryptoMiner {
|
|||
SkullMeta meta = (SkullMeta) head.getItemMeta();
|
||||
if (meta == null) return;
|
||||
GameProfile profile = new GameProfile(UUID.randomUUID(), null);
|
||||
byte[] encodedData = Base64.encodeBase64(String.format("{textures:{SKIN:{url:\"%s\"}}}", url).getBytes());
|
||||
byte[] encodedData = Base64.encodeBase64(String.format("{textures:{SKIN:{url:\"%s\"}}}", this.type.getHeadTexture()).getBytes());
|
||||
profile.getProperties().put("textures", new Property("textures", new String(encodedData)));
|
||||
try {
|
||||
Util.setFieldValue(meta, "profile", profile);
|
||||
|
@ -145,19 +147,20 @@ public class CryptoMiner {
|
|||
for (int x = (int) stand.getLocation().getX() - 3; x <= stand.getLocation().getX() + 2; x++) {
|
||||
for (int z = (int) stand.getLocation().getZ() - 2; z <= stand.getLocation().getZ() + 2; z++) {
|
||||
for (int y = (int) stand.getLocation().getY() - 1; y <= stand.getLocation().getY() - 1; y++) {
|
||||
if (world.getBlockAt(x, y, z).getType() == this.type)
|
||||
if (world.getBlockAt(x, y, z).getType() == this.getType())
|
||||
locs.add(world.getBlockAt(x, y, z).getLocation());
|
||||
}
|
||||
}
|
||||
}
|
||||
locs.remove(world.getBlockAt(stand.getLocation().subtract(0, -1, 0)).getLocation());
|
||||
if (locs.size() != 0) {
|
||||
Location closest = locs.get(0);
|
||||
for (Location location : locs) {
|
||||
if (location.distance(stand.getLocation()) < closest.distance(stand.getLocation())) closest = location;
|
||||
}
|
||||
ArrayList<ItemStack> items = new ArrayList<>();
|
||||
ThreadLocalRandom random = ThreadLocalRandom.current();
|
||||
if (closest.getBlock().getType() == this.type) {
|
||||
if (closest.getBlock().getType() == this.getType()) {
|
||||
closest.getBlock().getDrops().clear();
|
||||
int lower = 0;
|
||||
int upper = 0;
|
||||
|
@ -222,7 +225,7 @@ public class CryptoMiner {
|
|||
lower = 20;
|
||||
upper = 41;
|
||||
}
|
||||
items.add(new ItemStack(this.type, random.nextInt(lower, upper)));
|
||||
items.add(new ItemStack(this.getType(), random.nextInt(lower, upper)));
|
||||
closest.getBlock().setType(Material.AIR);
|
||||
}
|
||||
// drop the items
|
||||
|
@ -230,4 +233,6 @@ public class CryptoMiner {
|
|||
world.dropItemNaturally(closest, item);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,13 +1,45 @@
|
|||
package me.night.nullvalkyrie.enums;
|
||||
|
||||
import org.bukkit.Material;
|
||||
|
||||
public enum MinerType {
|
||||
DIAMOND("Diamond"), EMERALD("Emerald"), GOLD("Gold"), IRON("Iron"), REDSTONE("Redstone"), COAL("Coal"), LAPIS("Lapis"), QUARTZ("Quartz"), OBSIDIAN("Obsidian"), NETHERITE("Netherite");
|
||||
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;
|
||||
MinerType(String name) {
|
||||
private final Material material;
|
||||
private final String headTexture;
|
||||
MinerType(String name, Material material, String headTexture) {
|
||||
this.name = name;
|
||||
this.material = material;
|
||||
this.headTexture = headTexture;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public Material getMaterial() {
|
||||
return material;
|
||||
}
|
||||
|
||||
public String getHeadTexture() {
|
||||
return headTexture;
|
||||
}
|
||||
|
||||
public static MinerType getByName(String name) {
|
||||
for (MinerType type : MinerType.values()) {
|
||||
if (type.getName().equalsIgnoreCase(name)) {
|
||||
return type;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue