miners improvement
This commit is contained in:
parent
85ccd11904
commit
baf34db7ae
11 changed files with 119 additions and 131 deletions
|
@ -1,7 +1,8 @@
|
||||||
package me.night.nullvalkyrie;
|
package me.night.nullvalkyrie;
|
||||||
|
|
||||||
|
import me.night.nullvalkyrie.entities.miners.CryptoMiner;
|
||||||
import me.night.nullvalkyrie.events.listeners.*;
|
import me.night.nullvalkyrie.events.listeners.*;
|
||||||
import me.night.nullvalkyrie.tasks.AlwaysDayTask;
|
import me.night.nullvalkyrie.game.tasks.AlwaysDayTask;
|
||||||
import me.night.nullvalkyrie.ui.inventory.InventoryListener;
|
import me.night.nullvalkyrie.ui.inventory.InventoryListener;
|
||||||
import me.night.nullvalkyrie.database.NPCDataManager;
|
import me.night.nullvalkyrie.database.NPCDataManager;
|
||||||
import me.night.nullvalkyrie.discord.DiscordClientManager;
|
import me.night.nullvalkyrie.discord.DiscordClientManager;
|
||||||
|
@ -12,7 +13,6 @@ import me.night.nullvalkyrie.database.DatabaseManager;
|
||||||
import org.bukkit.*;
|
import org.bukkit.*;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
|
|
||||||
public final class NullValkyrie extends JavaPlugin {
|
public final class NullValkyrie extends JavaPlugin {
|
||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
|
@ -27,6 +27,7 @@ public final class NullValkyrie extends JavaPlugin {
|
||||||
Bukkit.getPluginManager().registerEvents(new NPCEvents(), this);
|
Bukkit.getPluginManager().registerEvents(new NPCEvents(), this);
|
||||||
new DiscordClientManager();
|
new DiscordClientManager();
|
||||||
NPCDataManager.reloadNPC();
|
NPCDataManager.reloadNPC();
|
||||||
|
CryptoMiner.reloadMiner();
|
||||||
new AlwaysDayTask().runTaskTimer(this, 0, 100);
|
new AlwaysDayTask().runTaskTimer(this, 0, 100);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,8 +34,8 @@ public class MinerCommand extends Command {
|
||||||
double rate = 0.4;
|
double rate = 0.4;
|
||||||
long time = System.currentTimeMillis();
|
long time = System.currentTimeMillis();
|
||||||
assert type != null;
|
assert type != null;
|
||||||
MinerDataManager.setMiner(name, type, level, rate, true, time);
|
MinerDataManager.setMiner(name, type, level, rate, true, time, player.getLocation());
|
||||||
CryptoMiner miner = new CryptoMiner(name, type, level, rate, time);
|
CryptoMiner miner = new CryptoMiner(name, type, level, rate, time, player.getLocation());
|
||||||
miner.spawn(player);
|
miner.spawn(player);
|
||||||
} else if (args[0].equalsIgnoreCase("claim")) {
|
} else if (args[0].equalsIgnoreCase("claim")) {
|
||||||
MinerDataManager.setLastClaim(args[1]);
|
MinerDataManager.setLastClaim(args[1]);
|
||||||
|
|
|
@ -5,11 +5,13 @@ import me.night.nullvalkyrie.entities.miners.CryptoMiner;
|
||||||
import me.night.nullvalkyrie.enums.MinerType;
|
import me.night.nullvalkyrie.enums.MinerType;
|
||||||
import org.bson.Document;
|
import org.bson.Document;
|
||||||
import org.bson.conversions.Bson;
|
import org.bson.conversions.Bson;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
public class MinerDataManager {
|
public class MinerDataManager {
|
||||||
public static void setMiner(String name, MinerType type, int level, double rate, boolean enabled, long lastclaim) {
|
public static void setMiner(String name, MinerType type, int level, double rate, boolean enabled, long lastclaim, Location location) {
|
||||||
Document newDocument = new Document();
|
Document newDocument = new Document();
|
||||||
newDocument.put("ID", new DatabaseManager().getMinersDB().countDocuments() + 1);
|
newDocument.put("ID", new DatabaseManager().getMinersDB().countDocuments() + 1);
|
||||||
newDocument.put("Name", name);
|
newDocument.put("Name", name);
|
||||||
|
@ -18,6 +20,9 @@ public class MinerDataManager {
|
||||||
newDocument.put("Rate", rate);
|
newDocument.put("Rate", rate);
|
||||||
newDocument.put("Enabled", enabled);
|
newDocument.put("Enabled", enabled);
|
||||||
newDocument.put("LastClaim", lastclaim);
|
newDocument.put("LastClaim", lastclaim);
|
||||||
|
newDocument.put("x", location.getX());
|
||||||
|
newDocument.put("y", location.getY());
|
||||||
|
newDocument.put("z", location.getZ());
|
||||||
new DatabaseManager().getMinersDB().insertOne(newDocument);
|
new DatabaseManager().getMinersDB().insertOne(newDocument);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,20 +45,12 @@ public class MinerDataManager {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static CryptoMiner getMiner(long id) {
|
|
||||||
Document doc = new DatabaseManager().getMinersDB().find(new Document("ID", id)).first();
|
|
||||||
if (doc != null) {
|
|
||||||
return new CryptoMiner(doc.getString("Name"), MinerType.getByName(doc.getString("Material")), doc.getInteger("Level"), doc.getDouble("Rate"), doc.getLong("LastClaim"));
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static HashMap<Long, CryptoMiner> getMiners() {
|
public static HashMap<Long, CryptoMiner> getMiners() {
|
||||||
HashMap<Long, CryptoMiner> list = new HashMap<>();
|
HashMap<Long, CryptoMiner> list = new HashMap<>();
|
||||||
try (MongoCursor<Document> cursor = new DatabaseManager().getMinersDB().find().cursor()) {
|
try (MongoCursor<Document> cursor = new DatabaseManager().getMinersDB().find().cursor()) {
|
||||||
while (cursor.hasNext()) {
|
while (cursor.hasNext()) {
|
||||||
Document doc = cursor.next();
|
Document doc = cursor.next();
|
||||||
list.put(doc.getLong("ID"), new CryptoMiner(doc.getString("Name"), MinerType.getByName(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"), new Location(Bukkit.getWorld("world"), doc.getDouble("x"), doc.getDouble("y"), doc.getDouble("z"))));
|
||||||
}
|
}
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@ import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
public class NPCDataManager {
|
public class NPCDataManager {
|
||||||
public static void setNPC(String name, int x, int y, int z, int pitch, int yaw, String world, String texture, String signature) {
|
public static void setNPC(String name, double x, double y, double z, int pitch, int yaw, String world, String texture, String signature) {
|
||||||
Document document = new DatabaseManager().getNPCsDB().find(new Document("Name", name)).first();
|
Document document = new DatabaseManager().getNPCsDB().find(new Document("Name", name)).first();
|
||||||
if (document != null) {
|
if (document != null) {
|
||||||
System.out.println("A NPC with this name already exist");
|
System.out.println("A NPC with this name already exist");
|
||||||
|
@ -36,9 +36,9 @@ public class NPCDataManager {
|
||||||
Document document = cursor.next();
|
Document document = cursor.next();
|
||||||
HashMap<String, Object> npc = new HashMap<>();
|
HashMap<String, Object> npc = new HashMap<>();
|
||||||
String name = document.getString("Name");
|
String name = document.getString("Name");
|
||||||
int x = document.getInteger("x");
|
double x = document.getDouble("x");
|
||||||
int y = document.getInteger("y");
|
double y = document.getDouble("y");
|
||||||
int z = document.getInteger("z");
|
double z = document.getDouble("z");
|
||||||
int pitch = document.getInteger("pitch");
|
int pitch = document.getInteger("pitch");
|
||||||
int yaw = document.getInteger("yaw");
|
int yaw = document.getInteger("yaw");
|
||||||
String world = document.getString("world");
|
String world = document.getString("world");
|
||||||
|
|
|
@ -2,48 +2,65 @@ package me.night.nullvalkyrie.entities.miners;
|
||||||
|
|
||||||
import com.mojang.authlib.GameProfile;
|
import com.mojang.authlib.GameProfile;
|
||||||
import com.mojang.authlib.properties.Property;
|
import com.mojang.authlib.properties.Property;
|
||||||
|
import com.mojang.datafixers.util.Pair;
|
||||||
|
import me.night.nullvalkyrie.NullValkyrie;
|
||||||
|
import me.night.nullvalkyrie.database.MinerDataManager;
|
||||||
import me.night.nullvalkyrie.enums.MinerType;
|
import me.night.nullvalkyrie.enums.MinerType;
|
||||||
|
import me.night.nullvalkyrie.packets.protocol.PacketPlayOutEntityMetadata;
|
||||||
import me.night.nullvalkyrie.util.Skin;
|
import me.night.nullvalkyrie.util.Skin;
|
||||||
import me.night.nullvalkyrie.util.Util;
|
import me.night.nullvalkyrie.util.Util;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundAddEntityPacket;
|
||||||
import net.minecraft.network.protocol.game.ClientboundPlayerInfoPacket;
|
import net.minecraft.network.protocol.game.ClientboundPlayerInfoPacket;
|
||||||
|
import net.minecraft.network.protocol.game.ClientboundSetEquipmentPacket;
|
||||||
|
import net.minecraft.network.syncher.EntityDataAccessor;
|
||||||
|
import net.minecraft.network.syncher.EntityDataSerializers;
|
||||||
|
import net.minecraft.network.syncher.SynchedEntityData;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraft.server.network.ServerGamePacketListenerImpl;
|
import net.minecraft.server.network.ServerGamePacketListenerImpl;
|
||||||
|
import net.minecraft.world.entity.EquipmentSlot;
|
||||||
|
import net.minecraft.world.entity.decoration.ArmorStand;
|
||||||
import org.apache.commons.codec.binary.Base64;
|
import org.apache.commons.codec.binary.Base64;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.World;
|
|
||||||
import org.bukkit.craftbukkit.v1_19_R1.CraftServer;
|
import org.bukkit.craftbukkit.v1_19_R1.CraftServer;
|
||||||
import org.bukkit.craftbukkit.v1_19_R1.CraftWorld;
|
import org.bukkit.craftbukkit.v1_19_R1.CraftWorld;
|
||||||
import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer;
|
import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer;
|
||||||
import org.bukkit.entity.ArmorStand;
|
import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftItemStack;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.LeatherArmorMeta;
|
import org.bukkit.inventory.meta.LeatherArmorMeta;
|
||||||
import org.bukkit.inventory.meta.SkullMeta;
|
import org.bukkit.inventory.meta.SkullMeta;
|
||||||
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.ThreadLocalRandom;
|
import java.util.concurrent.ThreadLocalRandom;
|
||||||
|
|
||||||
|
|
||||||
public class CryptoMiner {
|
public class CryptoMiner {
|
||||||
protected String name;
|
protected String name;
|
||||||
protected MinerType type;
|
protected MinerType type;
|
||||||
protected int level;
|
protected int level;
|
||||||
protected double rate;
|
protected double rate;
|
||||||
protected final long lastclaim;
|
protected final long lastclaim;
|
||||||
|
protected final double x;
|
||||||
|
protected final double y;
|
||||||
|
protected final double z;
|
||||||
|
protected final Location location;
|
||||||
|
|
||||||
public CryptoMiner(String name, MinerType type, int level, double rate, long lastclaim) {
|
public CryptoMiner(String name, MinerType type, int level, double rate, long lastclaim, Location location) {
|
||||||
this.name = name; // Name of the miner
|
this.name = name; // Name of the miner
|
||||||
this.type = type; // Type of the miner
|
this.type = type; // Type of the miner
|
||||||
this.level = level;
|
this.level = level;
|
||||||
this.rate = rate; // Percentage generate chance in each tick 20tick per sec
|
this.rate = rate; // Percentage generate chance in each tick 20tick per sec
|
||||||
this.lastclaim = lastclaim;
|
this.lastclaim = lastclaim;
|
||||||
|
this.x = location.getX();
|
||||||
|
this.y = location.getY();
|
||||||
|
this.z = location.getZ();
|
||||||
|
this.location = location;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getName() {
|
public String getName() {
|
||||||
|
@ -58,16 +75,12 @@ public class CryptoMiner {
|
||||||
return rate;
|
return rate;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setRate(double rate) {
|
|
||||||
this.rate = rate;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Material getType() {
|
public Material getType() {
|
||||||
return this.type.getMaterial();
|
return this.type.getMaterial();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setType(MinerType type) {
|
public MinerType getMinerType() {
|
||||||
this.type = type;
|
return this.type;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getLevel() {
|
public int getLevel() {
|
||||||
|
@ -82,6 +95,10 @@ public class CryptoMiner {
|
||||||
return lastclaim;
|
return lastclaim;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Location getLocation() {
|
||||||
|
return location;
|
||||||
|
}
|
||||||
|
|
||||||
public static void generate(int pp, int times) {
|
public static void generate(int pp, int times) {
|
||||||
int generated = 0;
|
int generated = 0;
|
||||||
for (int counter = 0; counter < times; counter++) {
|
for (int counter = 0; counter < times; counter++) {
|
||||||
|
@ -90,21 +107,15 @@ public class CryptoMiner {
|
||||||
}
|
}
|
||||||
System.out.println(generated);
|
System.out.println(generated);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void spawn(Player player) {
|
public void spawn(Player player) {
|
||||||
Location loc = player.getLocation().getWorld().getBlockAt(player.getLocation()).getLocation().add(0.5, 0, 0.5);
|
ArmorStand stand = new ArmorStand(((CraftWorld) this.getLocation().getWorld()).getHandle(), this.getLocation().getX() + 0.5, this.getLocation().getY(), this.getLocation().getZ() + 0.5);
|
||||||
if (player.getLocation().getWorld() == null) return;
|
stand.setInvulnerable(true);
|
||||||
ArmorStand stand = player.getLocation().getWorld().spawn(loc, ArmorStand.class);
|
stand.setPos(this.getLocation().getX() + 0.5, this.getLocation().getY(), this.getLocation().getZ() + 0.5);
|
||||||
stand.setGravity(false);
|
|
||||||
stand.setBasePlate(false);
|
|
||||||
stand.setSmall(true);
|
|
||||||
stand.setArms(true);
|
|
||||||
stand.setVisible(true);
|
|
||||||
ItemStack head = new ItemStack(Material.PLAYER_HEAD, 1);
|
ItemStack head = new ItemStack(Material.PLAYER_HEAD, 1);
|
||||||
SkullMeta meta = (SkullMeta) head.getItemMeta();
|
SkullMeta meta = (SkullMeta) head.getItemMeta();
|
||||||
if (meta == null) return;
|
if (meta == null) return;
|
||||||
GameProfile profile = new GameProfile(UUID.randomUUID(), null);
|
GameProfile profile = new GameProfile(UUID.randomUUID(), null);
|
||||||
byte[] encodedData = Base64.encodeBase64(String.format("{textures:{SKIN:{url:\"%s\"}}}", this.type.getHeadTexture()).getBytes());
|
byte[] encodedData = Base64.encodeBase64(String.format("{textures:{SKIN:{url:\"%s\"}}}", this.getMinerType().getHeadTexture()).getBytes());
|
||||||
profile.getProperties().put("textures", new Property("textures", new String(encodedData)));
|
profile.getProperties().put("textures", new Property("textures", new String(encodedData)));
|
||||||
try {
|
try {
|
||||||
Util.setFieldValue(meta, "profile", profile);
|
Util.setFieldValue(meta, "profile", profile);
|
||||||
|
@ -129,109 +140,76 @@ public class CryptoMiner {
|
||||||
bootdata.setColor(org.bukkit.Color.fromRGB(2, 2, 58));
|
bootdata.setColor(org.bukkit.Color.fromRGB(2, 2, 58));
|
||||||
boot.setItemMeta(bootdata);
|
boot.setItemMeta(bootdata);
|
||||||
ItemStack pick = new ItemStack(Material.GOLDEN_PICKAXE);
|
ItemStack pick = new ItemStack(Material.GOLDEN_PICKAXE);
|
||||||
stand.getEquipment().setItemInMainHand(pick);
|
List<Pair<EquipmentSlot, net.minecraft.world.item.ItemStack>> list = new ArrayList<>();
|
||||||
stand.getEquipment().setHelmet(head);
|
list.add(new Pair<>(EquipmentSlot.HEAD, CraftItemStack.asNMSCopy(head)));
|
||||||
stand.getEquipment().setChestplate(chest);
|
list.add(new Pair<>(EquipmentSlot.CHEST, CraftItemStack.asNMSCopy(chest)));
|
||||||
stand.getEquipment().setLeggings(leg);
|
list.add(new Pair<>(EquipmentSlot.LEGS, CraftItemStack.asNMSCopy(leg)));
|
||||||
stand.getEquipment().setBoots(boot);
|
list.add(new Pair<>(EquipmentSlot.FEET, CraftItemStack.asNMSCopy(boot)));
|
||||||
|
list.add(new Pair<>(EquipmentSlot.MAINHAND, CraftItemStack.asNMSCopy(pick)));
|
||||||
|
|
||||||
GameProfile gameProfile = new GameProfile(UUID.randomUUID(), Util.color(this.name));
|
GameProfile gameProfile = new GameProfile(UUID.randomUUID(), Util.color(this.name));
|
||||||
String[] skin = Skin.getSkin("Shiba_");
|
String[] skin = Skin.getSkin("Shiba_");
|
||||||
gameProfile.getProperties().put("textures", new Property("textures", skin[0], skin[1]));
|
gameProfile.getProperties().put("textures", new Property("textures", skin[0], skin[1]));
|
||||||
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
|
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
|
||||||
ServerLevel w = ((CraftWorld) player.getLocation().getWorld()).getHandle();
|
ServerLevel w = ((CraftWorld) player.getLocation().getWorld()).getHandle();
|
||||||
ServerPlayer miner = new ServerPlayer(server, w, gameProfile, null);
|
ServerPlayer m = new ServerPlayer(server, w, gameProfile, null);
|
||||||
ServerGamePacketListenerImpl pc = ((CraftPlayer) player).getHandle().connection;
|
ServerGamePacketListenerImpl pc = ((CraftPlayer) player).getHandle().connection;
|
||||||
pc.send(new ClientboundPlayerInfoPacket(ClientboundPlayerInfoPacket.Action.ADD_PLAYER, miner));
|
pc.send(new ClientboundAddEntityPacket(stand));
|
||||||
World world = miner.getBukkitEntity().getWorld();
|
pc.send(new ClientboundSetEquipmentPacket(stand.getId(), list));
|
||||||
|
pc.send(new ClientboundPlayerInfoPacket(ClientboundPlayerInfoPacket.Action.ADD_PLAYER, m));
|
||||||
|
SynchedEntityData watcher = stand.getEntityData();
|
||||||
|
watcher.set(new EntityDataAccessor<>(0, EntityDataSerializers.BYTE), (byte) 20);
|
||||||
|
watcher.set(new EntityDataAccessor<>(5, EntityDataSerializers.BOOLEAN), true);
|
||||||
|
watcher.set(new EntityDataAccessor<>(15, EntityDataSerializers.BYTE), (byte) 13);
|
||||||
|
new PacketPlayOutEntityMetadata(player, stand, watcher);
|
||||||
|
new BukkitRunnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
generate();
|
||||||
|
}
|
||||||
|
}.runTaskTimer(NullValkyrie.getPlugin(NullValkyrie.class), 0, 40);
|
||||||
|
}
|
||||||
|
public void generate() {
|
||||||
List<Location> locs = new ArrayList<>();
|
List<Location> locs = new ArrayList<>();
|
||||||
for (int x = (int) stand.getLocation().getX() - 3; x <= stand.getLocation().getX() + 2; x++) {
|
for (int x = (int) this.getLocation().getX() - 2; x <= this.getLocation().getX() + 2; x++) {
|
||||||
for (int z = (int) stand.getLocation().getZ() - 2; z <= stand.getLocation().getZ() + 2; z++) {
|
for (int z = (int) this.getLocation().getZ() - 2; z <= this.getLocation().getZ() + 2; z++) {
|
||||||
for (int y = (int) stand.getLocation().getY() - 1; y <= stand.getLocation().getY() - 1; y++) {
|
for (int y = (int) this.getLocation().getY() - 1; y <= this.getLocation().getY() - 1; y++) {
|
||||||
if (world.getBlockAt(x, y, z).getType() == this.getType())
|
this.getLocation().setY(17.0F);
|
||||||
locs.add(world.getBlockAt(x, y, z).getLocation());
|
System.out.println(x + " " + y + " " + z);
|
||||||
|
if (this.getLocation().getWorld().getBlockAt(x, y, z).getType() == this.getType()) {
|
||||||
|
locs.add(this.getLocation().getWorld().getBlockAt(x, y, z).getLocation());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
locs.remove(world.getBlockAt(stand.getLocation().subtract(0, -1, 0)).getLocation());
|
|
||||||
if (locs.size() != 0) {
|
if (locs.size() != 0) {
|
||||||
Location closest = locs.get(0);
|
Location closest = locs.get(0);
|
||||||
for (Location location : locs)
|
for (Location location : locs)
|
||||||
if (location.distance(stand.getLocation()) < closest.distance(stand.getLocation())) closest = location;
|
if (location.distance(this.getLocation()) < closest.distance(this.getLocation()))
|
||||||
|
closest = location;
|
||||||
ArrayList<ItemStack> items = new ArrayList<>();
|
ArrayList<ItemStack> items = new ArrayList<>();
|
||||||
ThreadLocalRandom random = ThreadLocalRandom.current();
|
ThreadLocalRandom random = ThreadLocalRandom.current();
|
||||||
if (closest.getBlock().getType() == this.getType()) {
|
closest.getBlock().getDrops().clear();
|
||||||
closest.getBlock().getDrops().clear();
|
List<int[]> levels = List.of(new int[]{1, 3}, new int[]{2, 5}, new int[]{3, 7}, new int[]{4, 9}, new int[]{5, 11}, new int[]{6, 13}, new int[]{7, 15}, new int[]{8, 17}, new int[]{9, 19}, new int[]{10, 21}, new int[]{11, 23}, new int[]{12, 25}, new int[]{13, 27}, new int[]{14, 29}, new int[]{15, 31}, new int[]{16, 33}, new int[]{17, 35}, new int[]{18, 37}, new int[]{19, 39}, new int[]{20, 41}, new int[]{21, 43}, new int[]{22, 45}, new int[]{23, 47}, new int[]{24, 49}, new int[]{25, 51}, new int[]{26, 53}, new int[]{27, 55}, new int[]{28, 57}, new int[]{29, 59}, new int[]{30, 61}, new int[]{31, 63}, new int[]{32, 65}, new int[]{33, 67}, new int[]{34, 69}, new int[]{35, 71}, new int[]{36, 73}, new int[]{37, 75}, new int[]{38, 77}, new int[]{39, 79}, new int[]{40, 81}, new int[]{41, 83}, new int[]{42, 85}, new int[]{43, 87}, new int[]{44, 89}, new int[]{45, 91}, new int[]{46, 93}, new int[]{47, 95}, new int[]{48, 97}, new int[]{49, 99}, new int[]{50, 100});
|
||||||
int lower = 0;
|
items.add(new ItemStack(this.getType(), random.nextInt(levels.get(this.getLevel())[0], levels.get(this.getLevel())[1])));
|
||||||
int upper = 0;
|
closest.getBlock().setType(Material.AIR);
|
||||||
if (this.level == 1) {
|
|
||||||
lower = 1;
|
|
||||||
upper = 3;
|
|
||||||
} else if (this.level == 2) {
|
|
||||||
lower = 2;
|
|
||||||
upper = 5;
|
|
||||||
} else if (this.level == 3) {
|
|
||||||
lower = 3;
|
|
||||||
upper = 7;
|
|
||||||
} else if (this.level == 4) {
|
|
||||||
lower = 4;
|
|
||||||
upper = 9;
|
|
||||||
} else if (this.level == 5) {
|
|
||||||
lower = 5;
|
|
||||||
upper = 11;
|
|
||||||
} else if (this.level == 6) {
|
|
||||||
lower = 6;
|
|
||||||
upper = 13;
|
|
||||||
} else if (this.level == 7) {
|
|
||||||
lower = 7;
|
|
||||||
upper = 15;
|
|
||||||
} else if (this.level == 8) {
|
|
||||||
lower = 8;
|
|
||||||
upper = 17;
|
|
||||||
} else if (this.level == 9) {
|
|
||||||
lower = 9;
|
|
||||||
upper = 19;
|
|
||||||
} else if (this.level == 10) {
|
|
||||||
lower = 10;
|
|
||||||
upper = 21;
|
|
||||||
} else if (this.level == 11) {
|
|
||||||
lower = 11;
|
|
||||||
upper = 23;
|
|
||||||
} else if (this.level == 12) {
|
|
||||||
lower = 12;
|
|
||||||
upper = 25;
|
|
||||||
} else if (this.level == 13) {
|
|
||||||
lower = 13;
|
|
||||||
upper = 27;
|
|
||||||
} else if (this.level == 14) {
|
|
||||||
lower = 14;
|
|
||||||
upper = 29;
|
|
||||||
} else if (this.level == 15) {
|
|
||||||
lower = 15;
|
|
||||||
upper = 31;
|
|
||||||
} else if (this.level == 16) {
|
|
||||||
lower = 16;
|
|
||||||
upper = 33;
|
|
||||||
} else if (this.level == 17) {
|
|
||||||
lower = 17;
|
|
||||||
upper = 35;
|
|
||||||
} else if (this.level == 18) {
|
|
||||||
lower = 18;
|
|
||||||
upper = 37;
|
|
||||||
} else if (this.level == 19) {
|
|
||||||
lower = 19;
|
|
||||||
upper = 39;
|
|
||||||
} else if (this.level == 20) {
|
|
||||||
lower = 20;
|
|
||||||
upper = 41;
|
|
||||||
}
|
|
||||||
items.add(new ItemStack(this.getType(), random.nextInt(lower, upper)));
|
|
||||||
closest.getBlock().setType(Material.AIR);
|
|
||||||
}
|
|
||||||
// drop the items
|
// drop the items
|
||||||
for (ItemStack item : items) {
|
for (ItemStack item : items) {
|
||||||
world.dropItemNaturally(closest, item);
|
this.getLocation().add(0, 2, 0).getWorld().dropItemNaturally(closest, item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
public static void reloadMiner() {
|
||||||
|
for (Player player : Bukkit.getOnlinePlayers())
|
||||||
|
for (CryptoMiner miner : MinerDataManager.getMiners().values()) {
|
||||||
|
miner.spawn(player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void onJoin(Player player) {
|
||||||
|
for (CryptoMiner miner : MinerDataManager.getMiners().values()) {
|
||||||
|
System.out.println(miner.getName());
|
||||||
|
miner.spawn(player);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,8 +35,8 @@ public class NPCManager {
|
||||||
public static List<ServerPlayer> getNPCs() {
|
public static List<ServerPlayer> getNPCs() {
|
||||||
return NPCs;
|
return NPCs;
|
||||||
}
|
}
|
||||||
|
@SuppressWarnings("ConstantConditions")
|
||||||
public static void createNPC(Player player, String name) { // name must be less than 16 characters including color codes
|
public static void createNPC(Player player, String name) { // name must be less than 16 characters including color codes
|
||||||
// TODO: npc not even spawning rn
|
|
||||||
ServerPlayer sp = ((CraftPlayer) player).getHandle();
|
ServerPlayer sp = ((CraftPlayer) player).getHandle();
|
||||||
MinecraftServer server = sp.server;
|
MinecraftServer server = sp.server;
|
||||||
ServerLevel level = ((CraftWorld) player.getLocation().getWorld()).getHandle();
|
ServerLevel level = ((CraftWorld) player.getLocation().getWorld()).getHandle();
|
||||||
|
@ -48,8 +48,9 @@ public class NPCManager {
|
||||||
npc.setPos(location.getX(), location.getY(), location.getZ());
|
npc.setPos(location.getX(), location.getY(), location.getZ());
|
||||||
addNPCPacket(npc);
|
addNPCPacket(npc);
|
||||||
NPCs.add(npc);
|
NPCs.add(npc);
|
||||||
NPCDataManager.setNPC(name, (int) player.getLocation().getX(), (int) player.getLocation().getY(), (int) player.getLocation().getZ(), (int) player.getLocation().getPitch(), (int) player.getLocation().getYaw(), player.getLocation().getWorld().getName(), skin[0], skin[1]);
|
NPCDataManager.setNPC(name, player.getLocation().getX(), player.getLocation().getY(), player.getLocation().getZ(), (int) player.getLocation().getPitch(), (int) player.getLocation().getYaw(), player.getLocation().getWorld().getName(), skin[0], skin[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void addNPCPacket(ServerPlayer npc) {
|
public static void addNPCPacket(ServerPlayer npc) {
|
||||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||||
ServerGamePacketListenerImpl pc = ((CraftPlayer) player).getHandle().connection;
|
ServerGamePacketListenerImpl pc = ((CraftPlayer) player).getHandle().connection;
|
||||||
|
@ -87,9 +88,10 @@ public class NPCManager {
|
||||||
pc.send(new ClientboundSetEquipmentPacket(npc.getBukkitEntity().getEntityId(), itemList));
|
pc.send(new ClientboundSetEquipmentPacket(npc.getBukkitEntity().getEntityId(), itemList));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@SuppressWarnings("ConstantConditions")
|
||||||
public static void reloadNPC(List<HashMap<String, Object>> npcs) {
|
public static void reloadNPC(List<HashMap<String, Object>> npcs) {
|
||||||
for (HashMap<String, Object> npc : npcs) {
|
for (HashMap<String, Object> npc : npcs) {
|
||||||
Location location = new Location(Bukkit.getWorld((String) npc.get("world")), (int) npc.get("x"), (int) npc.get("y"), (int) npc.get("z"), (int) npc.get("yaw"), (int) npc.get("pitch"));
|
Location location = new Location(Bukkit.getWorld((String) npc.get("world")), (double) npc.get("x"), (double) npc.get("y"), (double) npc.get("z"), (int) npc.get("yaw"), (int) npc.get("pitch"));
|
||||||
GameProfile gameProfile = new GameProfile(UUID.randomUUID(), Util.color((String) npc.get("name")));
|
GameProfile gameProfile = new GameProfile(UUID.randomUUID(), Util.color((String) npc.get("name")));
|
||||||
gameProfile.getProperties().put("textures", new Property("textures", (String) npc.get("texture"), (String) npc.get("signature")));
|
gameProfile.getProperties().put("textures", new Property("textures", (String) npc.get("texture"), (String) npc.get("signature")));
|
||||||
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
|
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
|
||||||
|
|
|
@ -3,7 +3,16 @@ package me.night.nullvalkyrie.enums;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
|
||||||
public enum MinerType {
|
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/d42a15a4be4196aba5b9ebc9545eb34186660970fac2b44e93723fff02fee7b2"),
|
||||||
|
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 String name;
|
||||||
private final Material material;
|
private final Material material;
|
||||||
private final String headTexture;
|
private final String headTexture;
|
||||||
|
|
|
@ -29,7 +29,6 @@ public class ServerEvents implements Listener {
|
||||||
public void onJoin(PlayerJoinEvent e) {
|
public void onJoin(PlayerJoinEvent e) {
|
||||||
bossbar.addPlayer(e.getPlayer());
|
bossbar.addPlayer(e.getPlayer());
|
||||||
injector.addPlayer(e.getPlayer());
|
injector.addPlayer(e.getPlayer());
|
||||||
e.getPlayer().setResourcePack("https://www.dropbox.com/s/7y7p93xzhar6vvw/%C2%A7b%C2%A7lNKRP%201.19.3.zip?dl=1");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package me.night.nullvalkyrie.tasks;
|
package me.night.nullvalkyrie.game.tasks;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
|
@ -52,8 +52,7 @@ public class PacketHandler extends ChannelDuplexHandler {
|
||||||
List<SynchedEntityData.DataItem<?>> list = pk.getUnpackedData();
|
List<SynchedEntityData.DataItem<?>> list = pk.getUnpackedData();
|
||||||
SynchedEntityData.DataItem<Float> value = (SynchedEntityData.DataItem<Float>) list.get(9);
|
SynchedEntityData.DataItem<Float> value = (SynchedEntityData.DataItem<Float>) list.get(9);
|
||||||
System.out.println(value.getAccessor());
|
System.out.println(value.getAccessor());
|
||||||
ThreadLocalRandom random = ThreadLocalRandom.current();
|
float health = ThreadLocalRandom.current().nextInt(5,20);
|
||||||
float health = random.nextFloat(5F,20F);
|
|
||||||
list.set(9, new SynchedEntityData.DataItem<>(new EntityDataAccessor<>(value.getAccessor().getId(), EntityDataSerializers.FLOAT), health));
|
list.set(9, new SynchedEntityData.DataItem<>(new EntityDataAccessor<>(value.getAccessor().getId(), EntityDataSerializers.FLOAT), health));
|
||||||
}
|
}
|
||||||
super.write(ctx, packet, promise);
|
super.write(ctx, packet, promise);
|
||||||
|
|
|
@ -2,6 +2,7 @@ package me.night.nullvalkyrie.ui.player;
|
||||||
|
|
||||||
import me.night.nullvalkyrie.database.RankDataManager;
|
import me.night.nullvalkyrie.database.RankDataManager;
|
||||||
import me.night.nullvalkyrie.database.UserDataManager;
|
import me.night.nullvalkyrie.database.UserDataManager;
|
||||||
|
import me.night.nullvalkyrie.entities.miners.CryptoMiner;
|
||||||
import me.night.nullvalkyrie.enums.Rank;
|
import me.night.nullvalkyrie.enums.Rank;
|
||||||
import me.night.nullvalkyrie.entities.npcs.NPCManager;
|
import me.night.nullvalkyrie.entities.npcs.NPCManager;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
@ -30,6 +31,7 @@ public class ScoreboardListener implements Listener {
|
||||||
public void onJoin(PlayerJoinEvent e) {
|
public void onJoin(PlayerJoinEvent e) {
|
||||||
Player player = e.getPlayer();
|
Player player = e.getPlayer();
|
||||||
if (!player.hasPlayedBefore()) {
|
if (!player.hasPlayedBefore()) {
|
||||||
|
e.getPlayer().setResourcePack("https://www.dropbox.com/s/7y7p93xzhar6vvw/%C2%A7b%C2%A7lNKRP%201.19.3.zip?dl=1");
|
||||||
e.getPlayer().sendTitle(ChatColor.RED + "Welcome to Vanadium!", ChatColor.GREEN + "LOL", 20, 100, 20);
|
e.getPlayer().sendTitle(ChatColor.RED + "Welcome to Vanadium!", ChatColor.GREEN + "LOL", 20, 100, 20);
|
||||||
RankDataManager.setRank(player.getUniqueId(), Rank.ROOKIE, this);
|
RankDataManager.setRank(player.getUniqueId(), Rank.ROOKIE, this);
|
||||||
new UserDataManager().createUserBank(e.getPlayer().getUniqueId().toString());
|
new UserDataManager().createUserBank(e.getPlayer().getUniqueId().toString());
|
||||||
|
@ -44,6 +46,7 @@ public class ScoreboardListener implements Listener {
|
||||||
if (NPCManager.getNPCs() == null) return;
|
if (NPCManager.getNPCs() == null) return;
|
||||||
if (NPCManager.getNPCs().isEmpty()) return;
|
if (NPCManager.getNPCs().isEmpty()) return;
|
||||||
NPCManager.addJoinPacket(e.getPlayer());
|
NPCManager.addJoinPacket(e.getPlayer());
|
||||||
|
CryptoMiner.onJoin(e.getPlayer());
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
|
|
Loading…
Reference in a new issue