More Bug patching, next round of testing coming soon
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -8,8 +8,6 @@ import org.bukkit.enchantments.Enchantment;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import java.util.function.Consumer;
|
|
||||||
|
|
||||||
public enum ArmorTier {
|
public enum ArmorTier {
|
||||||
NONE(0,
|
NONE(0,
|
||||||
new ItemStack(Material.AIR),
|
new ItemStack(Material.AIR),
|
||||||
@@ -146,7 +144,7 @@ public enum ArmorTier {
|
|||||||
if (value.getLeggings().getType().equals(p.getInventory().getLeggings().getType())) return value;
|
if (value.getLeggings().getType().equals(p.getInventory().getLeggings().getType())) return value;
|
||||||
if (value.getBoots().getType().equals(p.getInventory().getBoots().getType())) return value;
|
if (value.getBoots().getType().equals(p.getInventory().getBoots().getType())) return value;
|
||||||
}
|
}
|
||||||
return ArmorSMP.getInstance().getManager().armor.getTier(p);
|
return ArmorSMP.getInstance().getManager().tiers.getTier(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getNumeric() {
|
public int getNumeric() {
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import me.trouper.armorsmp.ArmorSMP;
|
|||||||
import me.trouper.armorsmp.utils.Display;
|
import me.trouper.armorsmp.utils.Display;
|
||||||
import me.trouper.armorsmp.utils.Text;
|
import me.trouper.armorsmp.utils.Text;
|
||||||
import me.trouper.armorsmp.utils.Verbose;
|
import me.trouper.armorsmp.utils.Verbose;
|
||||||
import me.trouper.armorsmp.utils.WorldUtils;
|
import me.trouper.armorsmp.utils.ItemUtils;
|
||||||
import org.bukkit.*;
|
import org.bukkit.*;
|
||||||
import org.bukkit.enchantments.Enchantment;
|
import org.bukkit.enchantments.Enchantment;
|
||||||
import org.bukkit.entity.*;
|
import org.bukkit.entity.*;
|
||||||
@@ -41,7 +41,7 @@ public enum Unique {
|
|||||||
p.addPotionEffect(new PotionEffect(PotionEffectType.HEALTH_BOOST,25,2,true,false,false));
|
p.addPotionEffect(new PotionEffect(PotionEffectType.HEALTH_BOOST,25,2,true,false,false));
|
||||||
}, (p) -> {
|
}, (p) -> {
|
||||||
}, 50),
|
}, 50),
|
||||||
CHESTPLATE(ItemBuilder.create()
|
DRAGON_EGG(ItemBuilder.create()
|
||||||
.material(Material.NETHERITE_CHESTPLATE)
|
.material(Material.NETHERITE_CHESTPLATE)
|
||||||
.lore(Text.legacyColor("&bAbilities:"))
|
.lore(Text.legacyColor("&bAbilities:"))
|
||||||
.lore(Text.legacyColor("&3| &7Dragon's Breath"))
|
.lore(Text.legacyColor("&3| &7Dragon's Breath"))
|
||||||
@@ -216,24 +216,29 @@ public enum Unique {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isUnique(ItemStack i) {
|
public static boolean isUnique(ItemStack i) {
|
||||||
|
if (i == null) return false;
|
||||||
for (Unique value : values()) {
|
for (Unique value : values()) {
|
||||||
if (WorldUtils.isSimilar(value.getInGameItem(),i)) return true;
|
if (ItemUtils.isSimilar(value.getInGameItem(),i)) return true;
|
||||||
if (i.getType().equals(Material.DRAGON_EGG)) return true;
|
if (i.getType().equals(Material.DRAGON_EGG)) return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isArmor(Unique unique) {
|
||||||
|
return ItemUtils.isArmor(unique.getInGameItem());
|
||||||
|
}
|
||||||
|
|
||||||
public static Unique matchUnique(ItemStack i) {
|
public static Unique matchUnique(ItemStack i) {
|
||||||
Verbose.send("Matching Unique, Item Type: %s",i.getType());
|
Verbose.send("Matching Unique, Item Type: %s",i.getType());
|
||||||
Unique match = null;
|
Unique match = null;
|
||||||
for (Unique value : values()) {
|
for (Unique value : values()) {
|
||||||
if (WorldUtils.isSimilar(value.getInGameItem(),i)) {
|
if (ItemUtils.isSimilar(value.getInGameItem(),i)) {
|
||||||
match = value;
|
match = value;
|
||||||
Verbose.send("Matched with, Unique: %s",match);
|
Verbose.send("Matched with, Unique: %s",match);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (i.getType().equals(Material.DRAGON_EGG)) {
|
if (i.getType().equals(Material.DRAGON_EGG)) {
|
||||||
match = Unique.CHESTPLATE;
|
match = Unique.DRAGON_EGG;
|
||||||
Verbose.send("Matched with dragon egg: Unique: %s",match);
|
Verbose.send("Matched with dragon egg: Unique: %s",match);
|
||||||
}
|
}
|
||||||
return match;
|
return match;
|
||||||
|
|||||||
@@ -8,20 +8,17 @@ import me.trouper.armorsmp.server.commands.TipsCommand;
|
|||||||
import me.trouper.armorsmp.server.commands.TrustCommand;
|
import me.trouper.armorsmp.server.commands.TrustCommand;
|
||||||
import me.trouper.armorsmp.server.crafting.ArmorUpgrade;
|
import me.trouper.armorsmp.server.crafting.ArmorUpgrade;
|
||||||
import me.trouper.armorsmp.server.events.*;
|
import me.trouper.armorsmp.server.events.*;
|
||||||
import me.trouper.armorsmp.server.systems.ArmorBackend;
|
import me.trouper.armorsmp.server.systems.*;
|
||||||
import me.trouper.armorsmp.server.systems.Broadcaster;
|
|
||||||
import me.trouper.armorsmp.server.systems.TrustBackend;
|
|
||||||
import me.trouper.armorsmp.server.systems.UniquesBackend;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
|
||||||
public class Manager {
|
public class Manager {
|
||||||
// My systems
|
// My systems
|
||||||
public IO io;
|
public IO io;
|
||||||
|
|
||||||
public ArmorBackend armor;
|
|
||||||
public TrustBackend trust;
|
public TrustBackend trust;
|
||||||
public UniquesBackend uniques;
|
public TierBackend tiers;
|
||||||
public Broadcaster broadcaster;
|
public Broadcaster broadcaster;
|
||||||
|
public UniquesBackend uniques;
|
||||||
|
|
||||||
public Manager() {
|
public Manager() {
|
||||||
io = new IO();
|
io = new IO();
|
||||||
@@ -30,17 +27,19 @@ public class Manager {
|
|||||||
public void init() {
|
public void init() {
|
||||||
io.loadAll();
|
io.loadAll();
|
||||||
|
|
||||||
armor = new ArmorBackend();
|
|
||||||
trust = new TrustBackend();
|
trust = new TrustBackend();
|
||||||
uniques = new UniquesBackend();
|
tiers = new TierBackend();
|
||||||
|
//uniques = new UniquesBackend();
|
||||||
broadcaster = new Broadcaster();
|
broadcaster = new Broadcaster();
|
||||||
|
uniques = new UniquesBackend();
|
||||||
|
|
||||||
registerCommands();
|
registerCommands();
|
||||||
registerEvents();
|
registerEvents();
|
||||||
registerCrafting();
|
registerCrafting();
|
||||||
|
|
||||||
Bukkit.getScheduler().runTaskTimer(ArmorSMP.getInstance(),broadcaster::broadcastTip,0,io.config.tips.tipInterval);
|
Bukkit.getScheduler().runTaskTimer(ArmorSMP.getInstance(),broadcaster::broadcastTip,0,io.config.tips.tipInterval);
|
||||||
Bukkit.getScheduler().runTaskTimer(ArmorSMP.getInstance(),uniques::applyPersistence,0,20);
|
Bukkit.getScheduler().runTaskTimer(ArmorSMP.getInstance(), uniques::applyPersistence,0,20);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ import me.trouper.armorsmp.data.io.Config;
|
|||||||
import me.trouper.armorsmp.data.Unique;
|
import me.trouper.armorsmp.data.Unique;
|
||||||
import me.trouper.armorsmp.server.crafting.ArmorUpgrade;
|
import me.trouper.armorsmp.server.crafting.ArmorUpgrade;
|
||||||
import me.trouper.armorsmp.utils.Text;
|
import me.trouper.armorsmp.utils.Text;
|
||||||
import me.trouper.armorsmp.utils.Verbose;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
@@ -153,7 +152,7 @@ public class AdminCommand implements CustomCommand {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ArmorSMP.getInstance().getManager().armor.setTier(target, tier);
|
ArmorSMP.getInstance().getManager().tiers.setTier(target, tier);
|
||||||
Text.sendMessage(false, Text.Pallet.SUCCESS, sender, "Changed armor tier to {0} for {1}", tier, target.getName());
|
Text.sendMessage(false, Text.Pallet.SUCCESS, sender, "Changed armor tier to {0} for {1}", tier, target.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -205,8 +204,7 @@ public class AdminCommand implements CustomCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ArmorSMP.getInstance().getManager().uniques.setOwner(piece, target);
|
ArmorSMP.getInstance().getManager().uniques.setOwner(piece, target);
|
||||||
ArmorSMP.getInstance().getManager().armor.queueUpdate(target, true);
|
ArmorSMP.getInstance().getManager().tiers.queueUpdate(target, true);
|
||||||
ArmorSMP.getInstance().getManager().uniques.queueUpdate(target);
|
|
||||||
|
|
||||||
Text.sendMessage(false, Text.Pallet.SUCCESS, sender, "Set the owner of unique {0} to {1}.", piece.getCanonical(), target.getName());
|
Text.sendMessage(false, Text.Pallet.SUCCESS, sender, "Set the owner of unique {0} to {1}.", piece.getCanonical(), target.getName());
|
||||||
}
|
}
|
||||||
@@ -287,7 +285,7 @@ public class AdminCommand implements CustomCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ArmorSMP.getInstance().getManager().uniques.dropUnique(target,piece);
|
ArmorSMP.getInstance().getManager().uniques.dropUnique(target,piece);
|
||||||
ArmorSMP.getInstance().getManager().armor.queueUpdate(target, true);
|
ArmorSMP.getInstance().getManager().tiers.queueUpdate(target, true);
|
||||||
ArmorSMP.getInstance().getManager().uniques.queueUpdate(target);
|
ArmorSMP.getInstance().getManager().uniques.queueUpdate(target);
|
||||||
|
|
||||||
Text.sendMessage(false, Text.Pallet.SUCCESS, sender, "Removed {0} from {1}", piece.getCanonical(), target.getName());
|
Text.sendMessage(false, Text.Pallet.SUCCESS, sender, "Removed {0} from {1}", piece.getCanonical(), target.getName());
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import me.trouper.armorsmp.data.ArmorTier;
|
|||||||
import me.trouper.armorsmp.server.crafting.ArmorUpgrade;
|
import me.trouper.armorsmp.server.crafting.ArmorUpgrade;
|
||||||
import me.trouper.armorsmp.utils.Text;
|
import me.trouper.armorsmp.utils.Text;
|
||||||
import me.trouper.armorsmp.utils.Verbose;
|
import me.trouper.armorsmp.utils.Verbose;
|
||||||
import me.trouper.armorsmp.utils.WorldUtils;
|
import me.trouper.armorsmp.utils.ItemUtils;
|
||||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
@@ -18,26 +18,25 @@ public class DeathEvents implements CustomListener {
|
|||||||
@EventHandler
|
@EventHandler
|
||||||
public void onDeath(PlayerDeathEvent e) {
|
public void onDeath(PlayerDeathEvent e) {
|
||||||
Player p = e.getEntity();
|
Player p = e.getEntity();
|
||||||
final ArmorTier tier = ArmorSMP.getInstance().getManager().armor.getTier(p);
|
final ArmorTier tier = ArmorSMP.getInstance().getManager().tiers.getTier(p);
|
||||||
Verbose.send("Handling death event for %s, their tier is %s",p.getName(),tier);
|
Verbose.send("Handling death event for %s, their tier is %s",p.getName(),tier);
|
||||||
e.getDrops().removeIf(WorldUtils::notDroppable);
|
e.getDrops().removeIf(ItemUtils::notDroppable);
|
||||||
|
|
||||||
if (tier.equals(ArmorTier.NONE)) {
|
if (tier.equals(ArmorTier.NONE)) {
|
||||||
Verbose.send("Tier was none");
|
Verbose.send("Tier was none");
|
||||||
Text.sendMessage(true, Text.Pallet.INFO,p,"You have died! Since you were at tier {0}, you didn't drop an Armor Upgrader.",tier);
|
Text.sendMessage(true, Text.Pallet.INFO,p,"You have died! Since you were at tier {0}, you didn't drop an Armor Upgrader.",tier);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (ArmorSMP.getInstance().getManager().armor.downTier(p)) {
|
if (ArmorSMP.getInstance().getManager().tiers.downTier(p)) {
|
||||||
Verbose.send("They have been down-tiered");
|
Verbose.send("They have been down-tiered");
|
||||||
e.getDrops().add(ArmorUpgrade.ARMOR_UGPRADE);
|
e.getDrops().add(ArmorUpgrade.ARMOR_UGPRADE);
|
||||||
e.deathMessage(Text.getMessage(false, Text.Pallet.INFO,"{0} has died, and dropped an {1}!", LegacyComponentSerializer.legacyAmpersand().serialize(p.name()),"Armor Upgrader"));
|
e.deathMessage(Text.getMessage(false, Text.Pallet.INFO,"{0} has died, and dropped an {1}!", LegacyComponentSerializer.legacyAmpersand().serialize(p.name()),"Armor Upgrader"));
|
||||||
}
|
}
|
||||||
ArmorSMP.getInstance().getManager().armor.dropUniqueArmor(p);
|
ArmorSMP.getInstance().getManager().uniques.dropAllUniques(p);
|
||||||
ArmorSMP.getInstance().getManager().uniques.dropUniqueItems(p);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onRespawn(PlayerRespawnEvent e) {
|
public void onRespawn(PlayerRespawnEvent e) {
|
||||||
ArmorSMP.getInstance().getManager().armor.queueUpdate(e.getPlayer(),false);
|
ArmorSMP.getInstance().getManager().tiers.queueUpdate(e.getPlayer(),false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,8 +3,6 @@ package me.trouper.armorsmp.server.events;
|
|||||||
import io.github.itzispyder.pdk.events.CustomListener;
|
import io.github.itzispyder.pdk.events.CustomListener;
|
||||||
import me.trouper.armorsmp.ArmorSMP;
|
import me.trouper.armorsmp.ArmorSMP;
|
||||||
import me.trouper.armorsmp.data.Unique;
|
import me.trouper.armorsmp.data.Unique;
|
||||||
import me.trouper.armorsmp.utils.Text;
|
|
||||||
import me.trouper.armorsmp.utils.WorldUtils;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.player.PlayerDropItemEvent;
|
import org.bukkit.event.player.PlayerDropItemEvent;
|
||||||
|
|||||||
@@ -32,9 +32,9 @@ public class JoinEvent implements CustomListener {
|
|||||||
Verbose.send("Checking for updates needed on %s",p.getName());
|
Verbose.send("Checking for updates needed on %s",p.getName());
|
||||||
final Map<String, Boolean> armorCache = ArmorSMP.getInstance().getManager().io.storage.armorUpdateCache;
|
final Map<String, Boolean> armorCache = ArmorSMP.getInstance().getManager().io.storage.armorUpdateCache;
|
||||||
final Set<String> uniquesCache = ArmorSMP.getInstance().getManager().io.storage.uniqueUpdateCache;
|
final Set<String> uniquesCache = ArmorSMP.getInstance().getManager().io.storage.uniqueUpdateCache;
|
||||||
if (!ArmorSMP.getInstance().getManager().armor.verifyArmor(p)) {
|
if (!ArmorSMP.getInstance().getManager().tiers.verifyArmor(p)) {
|
||||||
Verbose.send("Updating armor");
|
Verbose.send("Updating armor");
|
||||||
ArmorSMP.getInstance().getManager().armor.queueUpdate(p,armorCache.getOrDefault(p.getUniqueId().toString(),true));
|
ArmorSMP.getInstance().getManager().tiers.queueUpdate(p,armorCache.getOrDefault(p.getUniqueId().toString(),true));
|
||||||
}
|
}
|
||||||
if (!ArmorSMP.getInstance().getManager().uniques.verifyUniques(p)) {
|
if (!ArmorSMP.getInstance().getManager().uniques.verifyUniques(p)) {
|
||||||
Verbose.send("Updating uniques");
|
Verbose.send("Updating uniques");
|
||||||
@@ -42,7 +42,7 @@ public class JoinEvent implements CustomListener {
|
|||||||
}
|
}
|
||||||
if (armorCache.containsKey(p.getUniqueId().toString())) {
|
if (armorCache.containsKey(p.getUniqueId().toString())) {
|
||||||
Verbose.send("Updating armor from cache");
|
Verbose.send("Updating armor from cache");
|
||||||
ArmorSMP.getInstance().getManager().armor.queueUpdate(p,armorCache.getOrDefault(p.getUniqueId().toString(),true));
|
ArmorSMP.getInstance().getManager().tiers.queueUpdate(p,armorCache.getOrDefault(p.getUniqueId().toString(),true));
|
||||||
ArmorSMP.getInstance().getManager().io.storage.armorUpdateCache.remove(p.getUniqueId().toString());
|
ArmorSMP.getInstance().getManager().io.storage.armorUpdateCache.remove(p.getUniqueId().toString());
|
||||||
ArmorSMP.getInstance().getManager().io.storage.save();
|
ArmorSMP.getInstance().getManager().io.storage.save();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import io.github.itzispyder.pdk.events.CustomListener;
|
|||||||
import me.trouper.armorsmp.ArmorSMP;
|
import me.trouper.armorsmp.ArmorSMP;
|
||||||
import me.trouper.armorsmp.data.Unique;
|
import me.trouper.armorsmp.data.Unique;
|
||||||
import me.trouper.armorsmp.utils.Text;
|
import me.trouper.armorsmp.utils.Text;
|
||||||
import me.trouper.armorsmp.utils.WorldUtils;
|
import me.trouper.armorsmp.utils.ItemUtils;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.entity.EntityPickupItemEvent;
|
import org.bukkit.event.entity.EntityPickupItemEvent;
|
||||||
@@ -29,9 +29,9 @@ public class PickUpEvent implements CustomListener {
|
|||||||
Text.sendMessage(true, Text.Pallet.INFO,p,"Congratulations! You have picked up the unique {0}. There is only one of each in the whole server!",match.getCanonical());
|
Text.sendMessage(true, Text.Pallet.INFO,p,"Congratulations! You have picked up the unique {0}. There is only one of each in the whole server!",match.getCanonical());
|
||||||
ArmorSMP.getInstance().getServer().broadcast(Text.getMessage(false, Text.Pallet.INFO,"GG, {0}! They are the new owner of the unique {1}.",p.getName(),match.getCanonical()));
|
ArmorSMP.getInstance().getServer().broadcast(Text.getMessage(false, Text.Pallet.INFO,"GG, {0}! They are the new owner of the unique {1}.",p.getName(),match.getCanonical()));
|
||||||
|
|
||||||
if (WorldUtils.isArmor(match.getInGameItem())) {
|
if (ItemUtils.isArmor(match.getInGameItem())) {
|
||||||
p.getInventory().remove(i);
|
p.getInventory().remove(i);
|
||||||
ArmorSMP.getInstance().getManager().armor.queueUpdate(p,true);
|
ArmorSMP.getInstance().getManager().tiers.queueUpdate(p,true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,11 +24,11 @@ public class UpgradeRedeemEvent implements CustomListener {
|
|||||||
if (!holding.hasItemMeta()) return;
|
if (!holding.hasItemMeta()) return;
|
||||||
if (holding.getItemMeta().getCustomModelData() != ArmorUpgrade.ARMOR_UGPRADE.getItemMeta().getCustomModelData()) return;
|
if (holding.getItemMeta().getCustomModelData() != ArmorUpgrade.ARMOR_UGPRADE.getItemMeta().getCustomModelData()) return;
|
||||||
|
|
||||||
final ArmorTier tier = ArmorSMP.getInstance().getManager().armor.getTier(p);
|
final ArmorTier tier = ArmorSMP.getInstance().getManager().tiers.getTier(p);
|
||||||
|
|
||||||
if (ArmorSMP.getInstance().getManager().armor.upTier(p)) {
|
if (ArmorSMP.getInstance().getManager().tiers.upTier(p)) {
|
||||||
holding.setAmount(holding.getAmount() - 1);
|
holding.setAmount(holding.getAmount() - 1);
|
||||||
Text.sendMessage(true, Text.Pallet.INFO,p,"Successfully redeemed armor upgrade! Tier {0} -> Tier {1}",tier,ArmorSMP.getInstance().getManager().armor.getTier(p));
|
Text.sendMessage(true, Text.Pallet.INFO,p,"Successfully redeemed armor upgrade! Tier {0} -> Tier {1}",tier,ArmorSMP.getInstance().getManager().tiers.getTier(p));
|
||||||
} else {
|
} else {
|
||||||
Text.sendMessage(true, Text.Pallet.ERROR,p,"Unable to upgrade. You are already at the maximum Armor Tier!");
|
Text.sendMessage(true, Text.Pallet.ERROR,p,"Unable to upgrade. You are already at the maximum Armor Tier!");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,9 +2,8 @@ package me.trouper.armorsmp.server.systems;
|
|||||||
|
|
||||||
import me.trouper.armorsmp.ArmorSMP;
|
import me.trouper.armorsmp.ArmorSMP;
|
||||||
import me.trouper.armorsmp.data.ArmorTier;
|
import me.trouper.armorsmp.data.ArmorTier;
|
||||||
import me.trouper.armorsmp.data.io.IO;
|
|
||||||
import me.trouper.armorsmp.data.io.Storage;
|
import me.trouper.armorsmp.data.io.Storage;
|
||||||
import me.trouper.armorsmp.data.Unique;
|
import me.trouper.armorsmp.utils.ItemUtils;
|
||||||
import me.trouper.armorsmp.utils.Verbose;
|
import me.trouper.armorsmp.utils.Verbose;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
@@ -12,13 +11,27 @@ import org.bukkit.entity.Player;
|
|||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.PlayerInventory;
|
import org.bukkit.inventory.PlayerInventory;
|
||||||
|
|
||||||
import java.util.Map;
|
public class TierBackend {
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
|
||||||
|
|
||||||
public class ArmorBackend {
|
|
||||||
|
|
||||||
private final Storage storage = ArmorSMP.getInstance().getManager().io.storage;
|
private final Storage storage = ArmorSMP.getInstance().getManager().io.storage;
|
||||||
|
|
||||||
|
public synchronized void setTier(OfflinePlayer target, ArmorTier tier, boolean transferEnchants) {
|
||||||
|
Verbose.send("Setting tier of %s to %s",target.getName(),tier);
|
||||||
|
storage.userData.playerTiers.put(target.getUniqueId().toString(),tier);
|
||||||
|
storage.save();
|
||||||
|
queueUpdate(target,transferEnchants);
|
||||||
|
}
|
||||||
|
|
||||||
|
public synchronized void queueUpdate(OfflinePlayer target, boolean transferEnchants) {
|
||||||
|
Verbose.send("Queueing update for %s",target.getName());
|
||||||
|
if (target.getPlayer() != null && target.isOnline()) updateArmor(target.getPlayer(), transferEnchants);
|
||||||
|
else {
|
||||||
|
storage.armorUpdateCache.put(target.getUniqueId().toString(),transferEnchants);
|
||||||
|
ArmorSMP.getInstance().getManager().io.storage.save();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public boolean shouldTransferEnchants(OfflinePlayer target, ArmorTier request) {
|
public boolean shouldTransferEnchants(OfflinePlayer target, ArmorTier request) {
|
||||||
final ArmorTier current = getTier(target);
|
final ArmorTier current = getTier(target);
|
||||||
return request.getNumeric() >= current.getNumeric();
|
return request.getNumeric() >= current.getNumeric();
|
||||||
@@ -28,13 +41,6 @@ public class ArmorBackend {
|
|||||||
setTier(target, tier, shouldTransferEnchants(target, tier));
|
setTier(target, tier, shouldTransferEnchants(target, tier));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setTier(OfflinePlayer target, ArmorTier tier, boolean transferEnchants) {
|
|
||||||
Verbose.send("Setting tier of %s to %s",target.getName(),tier);
|
|
||||||
storage.userData.playerTiers.put(target.getUniqueId().toString(),tier);
|
|
||||||
storage.save();
|
|
||||||
queueUpdate(target,transferEnchants);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean downTier(OfflinePlayer target) {
|
public boolean downTier(OfflinePlayer target) {
|
||||||
int numeric = storage.userData.playerTiers.get(target.getUniqueId().toString()).getNumeric();
|
int numeric = storage.userData.playerTiers.get(target.getUniqueId().toString()).getNumeric();
|
||||||
Verbose.send("Downgrading %s, current numeric: %s",target.getName(),numeric);
|
Verbose.send("Downgrading %s, current numeric: %s",target.getName(),numeric);
|
||||||
@@ -74,78 +80,57 @@ public class ArmorBackend {
|
|||||||
final Material correctChestplate = tier.getChestplate().getType();
|
final Material correctChestplate = tier.getChestplate().getType();
|
||||||
final Material correctLeggings = tier.getLeggings().getType();
|
final Material correctLeggings = tier.getLeggings().getType();
|
||||||
final Material correctBoots = tier.getBoots().getType();
|
final Material correctBoots = tier.getBoots().getType();
|
||||||
Verbose.send("""
|
|
||||||
Correct Gear:
|
|
||||||
%s
|
|
||||||
%s
|
|
||||||
%s
|
|
||||||
%s
|
|
||||||
""", correctHelmet,correctChestplate,correctLeggings,correctBoots
|
|
||||||
);
|
|
||||||
|
|
||||||
final Material helmet = e.getHelmet() == null ? Material.AIR : e.getHelmet().getType() == Material.NETHERITE_HELMET ? correctHelmet : e.getHelmet().getType();
|
boolean helmetValid = (e.getHelmet() != null && ItemUtils.isUniqueArmor(e.getHelmet())) || (e.getHelmet() != null ? e.getHelmet().getType() : Material.AIR) == correctHelmet;
|
||||||
final Material chestplate = e.getChestplate() == null ? Material.AIR : e.getChestplate().getType() == Material.NETHERITE_CHESTPLATE ? correctChestplate : e.getChestplate().getType();
|
boolean chestplateValid = (e.getChestplate() != null && ItemUtils.isUniqueArmor(e.getChestplate())) || (e.getChestplate() != null ? e.getChestplate().getType() : Material.AIR) == correctChestplate;
|
||||||
final Material leggings = e.getLeggings() == null ? Material.AIR : e.getLeggings().getType() == Material.NETHERITE_LEGGINGS ? correctLeggings : e.getLeggings().getType();
|
boolean leggingsValid = (e.getLeggings() != null && ItemUtils.isUniqueArmor(e.getLeggings())) || (e.getLeggings() != null ? e.getLeggings().getType() : Material.AIR) == correctLeggings;
|
||||||
final Material boots = e.getBoots() == null ? Material.AIR : e.getBoots().getType() == Material.NETHERITE_BOOTS ? correctBoots : e.getBoots().getType();
|
boolean bootsValid = (e.getBoots() != null && ItemUtils.isUniqueArmor(e.getBoots())) || (e.getBoots() != null ? e.getBoots().getType() : Material.AIR) == correctBoots;
|
||||||
Verbose.send("""
|
|
||||||
Equipped Gear:
|
|
||||||
%s
|
|
||||||
%s
|
|
||||||
%s
|
|
||||||
%s
|
|
||||||
""", helmet,chestplate,leggings,boots
|
|
||||||
);
|
|
||||||
|
|
||||||
return helmet.equals(correctHelmet) && chestplate.equals(correctChestplate) && leggings.equals(correctLeggings) && boots.equals(correctBoots);
|
Verbose.send("Armor validation result: [%b, %b, %b, %b]",
|
||||||
|
helmetValid, chestplateValid, leggingsValid, bootsValid);
|
||||||
|
|
||||||
|
return helmetValid && chestplateValid && leggingsValid && bootsValid;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateArmor(Player target, boolean transferEnchants) {
|
private void updateArmor(Player target, boolean transferEnchants) {
|
||||||
Verbose.send("Updating the armor of %s",target.getName());
|
Verbose.send("Updating the armor of %s", target.getName());
|
||||||
PlayerInventory e = target.getInventory();
|
PlayerInventory e = target.getInventory();
|
||||||
final ArmorTier tier = getTier(target);
|
final ArmorTier tier = getTier(target);
|
||||||
|
|
||||||
Verbose.send("Tier is %s",tier);
|
|
||||||
|
|
||||||
final ItemStack helmet = e.getHelmet();
|
|
||||||
final ItemStack chestplate = e.getChestplate();
|
|
||||||
final ItemStack leggings = e.getLeggings();
|
|
||||||
final ItemStack boots = e.getBoots();
|
|
||||||
|
|
||||||
if (tier.equals(ArmorTier.NONE)) {
|
if (tier.equals(ArmorTier.NONE)) {
|
||||||
e.setHelmet(new ItemStack(Material.AIR));
|
e.setHelmet(new ItemStack(Material.AIR));
|
||||||
e.setChestplate(new ItemStack(Material.AIR));
|
e.setChestplate(new ItemStack(Material.AIR));
|
||||||
e.setLeggings(new ItemStack(Material.AIR));
|
e.setLeggings(new ItemStack(Material.AIR));
|
||||||
e.setBoots(new ItemStack(Material.AIR));
|
e.setBoots(new ItemStack(Material.AIR));
|
||||||
|
ArmorSMP.getInstance().getManager().uniques.queueUpdate(target);
|
||||||
updateUniqueArmor(target);
|
Verbose.send("Cleared armor slots for tier NONE.");
|
||||||
Verbose.send("Returning to prevent NPE");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
AtomicReference<ItemStack> updatedHelmet = new AtomicReference<>(tier.getHelmet());
|
ItemStack updatedHelmet = tier.getHelmet().clone();
|
||||||
AtomicReference<ItemStack> updatedChestplate = new AtomicReference<>(tier.getChestplate());
|
ItemStack updatedChestplate = tier.getChestplate().clone();
|
||||||
AtomicReference<ItemStack> updatedLeggings = new AtomicReference<>(tier.getLeggings());
|
ItemStack updatedLeggings = tier.getLeggings().clone();
|
||||||
AtomicReference<ItemStack> updatedBoots = new AtomicReference<>(tier.getBoots());
|
ItemStack updatedBoots = tier.getBoots().clone();
|
||||||
|
|
||||||
|
|
||||||
if (transferEnchants) {
|
if (transferEnchants) {
|
||||||
Verbose.send("Transfering enchants...");
|
Verbose.send("Transfering enchants (non-unique only)...");
|
||||||
if (helmet != null && !helmet.getType().name().contains("NETHERITE")) updatedHelmet.get().addEnchantments(helmet.getEnchantments());
|
ItemUtils.transferEnchants(e.getHelmet(), updatedHelmet);
|
||||||
if (chestplate != null && !chestplate.getType().name().contains("NETHERITE")) updatedChestplate.get().addEnchantments(chestplate.getEnchantments());
|
ItemUtils.transferEnchants(e.getChestplate(), updatedChestplate);
|
||||||
if (leggings != null && !leggings.getType().name().contains("NETHERITE")) updatedLeggings.get().addEnchantments(leggings.getEnchantments());
|
ItemUtils.transferEnchants(e.getLeggings(), updatedLeggings);
|
||||||
if (boots != null && !boots.getType().name().contains("NETHERITE")) updatedBoots.get().addEnchantments(boots.getEnchantments());
|
ItemUtils.transferEnchants(e.getBoots(), updatedBoots);
|
||||||
}
|
}
|
||||||
|
|
||||||
Verbose.send("Setting items...");
|
e.setHelmet(updatedHelmet);
|
||||||
e.setHelmet(updatedHelmet.get());
|
e.setChestplate(updatedChestplate);
|
||||||
e.setChestplate(updatedChestplate.get());
|
e.setLeggings(updatedLeggings);
|
||||||
e.setLeggings(updatedLeggings.get());
|
e.setBoots(updatedBoots);
|
||||||
e.setBoots(updatedBoots.get());
|
|
||||||
|
|
||||||
updateUniqueArmor(target);
|
ArmorSMP.getInstance().getManager().uniques.queueUpdate(target);
|
||||||
Verbose.send("Update complete!");
|
Verbose.send("Armor update complete!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
private void updateUniqueArmor(Player target) {
|
private void updateUniqueArmor(Player target) {
|
||||||
PlayerInventory e = target.getInventory();
|
PlayerInventory e = target.getInventory();
|
||||||
|
|
||||||
@@ -163,12 +148,7 @@ public class ArmorBackend {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void queueUpdate(OfflinePlayer target, boolean transferEnchants) {
|
|
||||||
Verbose.send("Queueing update for %s",target.getName());
|
|
||||||
if (target.getPlayer() != null && target.isOnline()) updateArmor(target.getPlayer(), transferEnchants);
|
|
||||||
else storage.armorUpdateCache.put(target.getUniqueId().toString(),transferEnchants);
|
|
||||||
ArmorSMP.getInstance().getManager().io.storage.save();
|
|
||||||
}
|
|
||||||
|
|
||||||
public synchronized void dropUniqueArmor(Player target) {
|
public synchronized void dropUniqueArmor(Player target) {
|
||||||
final Map<Unique, String> uniques = storage.uniques.owners;
|
final Map<Unique, String> uniques = storage.uniques.owners;
|
||||||
@@ -191,4 +171,6 @@ public class ArmorBackend {
|
|||||||
|
|
||||||
ArmorSMP.getInstance().getManager().io.storage.save();
|
ArmorSMP.getInstance().getManager().io.storage.save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
@@ -1,71 +1,93 @@
|
|||||||
package me.trouper.armorsmp.server.systems;
|
package me.trouper.armorsmp.server.systems;
|
||||||
|
|
||||||
import me.trouper.armorsmp.ArmorSMP;
|
import me.trouper.armorsmp.ArmorSMP;
|
||||||
import me.trouper.armorsmp.data.io.IO;
|
|
||||||
import me.trouper.armorsmp.data.io.Storage;
|
|
||||||
import me.trouper.armorsmp.data.Unique;
|
import me.trouper.armorsmp.data.Unique;
|
||||||
|
import me.trouper.armorsmp.data.io.Storage;
|
||||||
|
import me.trouper.armorsmp.utils.ItemUtils;
|
||||||
import me.trouper.armorsmp.utils.Verbose;
|
import me.trouper.armorsmp.utils.Verbose;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.PlayerInventory;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
|
||||||
|
|
||||||
public class UniquesBackend {
|
public class UniquesBackend {
|
||||||
|
|
||||||
private final Storage storage = ArmorSMP.getInstance().getManager().io.storage;
|
private final Storage storage = ArmorSMP.getInstance().getManager().io.storage;
|
||||||
|
|
||||||
private void updateUniques() {
|
|
||||||
ArmorSMP.getInstance().getServer().getOnlinePlayers().forEach(this::updateUniques);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateUniques(Player p) {
|
|
||||||
ArmorSMP.getInstance().getManager().io.storage.uniques.owners.forEach(((unique, id) -> {
|
|
||||||
if (unique.equals(Unique.HELMET)
|
|
||||||
|| unique.equals(Unique.CHESTPLATE)
|
|
||||||
|| unique.equals(Unique.LEGGINGS)
|
|
||||||
|| unique.equals(Unique.BOOTS)
|
|
||||||
) return;
|
|
||||||
if (id.equals(p.getUniqueId().toString())) {
|
|
||||||
Verbose.send(1, "They own the unique, checking if they have it: ", p.getInventory().contains(unique.getInGameItem()));
|
|
||||||
if (!p.getInventory().contains(unique.getInGameItem())) {
|
|
||||||
Verbose.send(1, "They don't have it, giving them the item.");
|
|
||||||
p.getInventory().removeItemAnySlot(unique.getInGameItem());
|
|
||||||
p.getInventory().addItem(unique.getInGameItem());
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
p.getInventory().removeItemAnySlot(unique.getInGameItem());
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void queueUpdate(OfflinePlayer target) {
|
public void queueUpdate(OfflinePlayer target) {
|
||||||
if (target.getPlayer() != null && target.isOnline()) updateUniques();
|
if (target.getPlayer() != null && target.isOnline()) updateUniques(target.getPlayer());
|
||||||
else storage.uniqueUpdateCache.add(target.getUniqueId().toString());
|
else {
|
||||||
|
storage.uniqueUpdateCache.add(target.getUniqueId().toString());
|
||||||
ArmorSMP.getInstance().getManager().io.storage.save();
|
ArmorSMP.getInstance().getManager().io.storage.save();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setOwner(Unique u, OfflinePlayer p) {
|
|
||||||
storage.uniques.owners.put(u,p.getUniqueId().toString());
|
|
||||||
ArmorSMP.getInstance().getManager().io.storage.save();
|
|
||||||
queueUpdate(p);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void dropUnique(Player p, Unique dropped) {
|
private void updateUniques(Player p) {
|
||||||
storage.uniques.owners.remove(dropped);
|
|
||||||
ArmorSMP.getInstance().getManager().io.storage.save();
|
removeUnowned(p);
|
||||||
|
equipOwnedArmor(p);
|
||||||
|
addMissing(p);
|
||||||
|
|
||||||
|
storage.save();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void dropUniqueItems(Player p) {
|
private void removeUnowned(Player p) {
|
||||||
storage.uniques.owners.forEach((unique,owner)->{
|
PlayerInventory inv = p.getInventory();
|
||||||
if (unique.equals(Unique.MACE) || unique.equals(Unique.SWORD) || unique.equals(Unique.AXE) && owner.equals(p.getUniqueId().toString())) {
|
for (ItemStack item : inv.getContents()) {
|
||||||
storage.uniques.owners.remove(unique);
|
if (item == null || !ItemUtils.isUnique(item)) continue;
|
||||||
|
Unique unique = Unique.matchUnique(item);
|
||||||
|
if (unique == null || !isOwner(p, unique)) {
|
||||||
|
inv.removeItemAnySlot(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (ItemStack armor : inv.getArmorContents()) {
|
||||||
|
if (armor == null || !ItemUtils.isUnique(armor)) continue;
|
||||||
|
Unique unique = Unique.matchUnique(armor);
|
||||||
|
if (unique == null || !isOwner(p, unique)) {
|
||||||
|
inv.setItem(inv.first(armor), null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void equipOwnedArmor(Player p) {
|
||||||
|
storage.uniques.owners.forEach((unique, ownerId) -> {
|
||||||
|
if (ownerId.equals(p.getUniqueId().toString()) && Unique.isArmor(unique)) {
|
||||||
|
if (ItemUtils.isHelmet(unique.getInGameItem())) p.getInventory().setHelmet(unique.getInGameItem());
|
||||||
|
else if (ItemUtils.isChestplate(unique.getInGameItem())) p.getInventory().setChestplate(unique.getInGameItem());
|
||||||
|
else if (ItemUtils.isLeggings(unique.getInGameItem())) p.getInventory().setLeggings(unique.getInGameItem());
|
||||||
|
else if (ItemUtils.isBoots(unique.getInGameItem())) p.getInventory().setBoots(unique.getInGameItem());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
ArmorSMP.getInstance().getManager().io.storage.save();
|
}
|
||||||
|
|
||||||
|
private void addMissing(Player p) {
|
||||||
|
storage.uniques.owners.forEach((unique, ownerId) -> {
|
||||||
|
if (ownerId.equals(p.getUniqueId().toString())) {
|
||||||
|
if (!Unique.isArmor(unique) && !hasItem(p, unique)) {
|
||||||
|
p.getInventory().addItem(unique.getInGameItem());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isOwner(Player p, Unique unique) {
|
||||||
|
return storage.uniques.owners.containsKey(unique) && storage.uniques.owners.get(unique).equals(p.getUniqueId().toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private boolean hasItem(Player p, Unique unique) {
|
||||||
|
for (ItemStack item : p.getInventory().getContents()) {
|
||||||
|
if (item != null && ItemUtils.isSimilar(item, unique.getInGameItem())) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void applyPersistence() {
|
public void applyPersistence() {
|
||||||
@@ -80,18 +102,32 @@ public class UniquesBackend {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void dropUnique(Player p, Unique dropped) {
|
||||||
|
storage.uniques.owners.remove(dropped);
|
||||||
|
storage.save();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void dropAllUniques(Player p) {
|
||||||
|
storage.uniques.owners.forEach((unique,owner)->{
|
||||||
|
if (owner.equals(p.getUniqueId().toString())) {
|
||||||
|
storage.uniques.owners.remove(unique);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
storage.save();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOwner(Unique u, OfflinePlayer p) {
|
||||||
|
storage.uniques.owners.put(u, p.getUniqueId().toString());
|
||||||
|
storage.save();
|
||||||
|
if (p.isOnline()) updateUniques(p.getPlayer());
|
||||||
|
}
|
||||||
|
|
||||||
public boolean verifyUniques(Player p) {
|
public boolean verifyUniques(Player p) {
|
||||||
AtomicBoolean success = new AtomicBoolean(false);
|
|
||||||
List<Boolean> checks = new ArrayList<>();
|
List<Boolean> checks = new ArrayList<>();
|
||||||
ArmorSMP.getInstance().getManager().io.storage.uniques.owners.forEach(((unique, id) -> {
|
ArmorSMP.getInstance().getManager().io.storage.uniques.owners.forEach(((unique, id) -> {
|
||||||
if (unique.equals(Unique.HELMET)
|
|
||||||
|| unique.equals(Unique.CHESTPLATE)
|
|
||||||
|| unique.equals(Unique.LEGGINGS)
|
|
||||||
|| unique.equals(Unique.BOOTS)
|
|
||||||
) return;
|
|
||||||
if (id.equals(p.getUniqueId().toString())) {
|
if (id.equals(p.getUniqueId().toString())) {
|
||||||
Verbose.send(1, "They own the unique, checking if they have it: ", p.getInventory().contains(unique.getInGameItem()));
|
Verbose.send(1, "They own the unique, checking if they have it: ", p.getInventory().contains(unique.getInGameItem()));
|
||||||
if (p.getInventory().contains(unique.getInGameItem())) {
|
if (hasItem(p,unique)) {
|
||||||
Verbose.send(1, "They have it");
|
Verbose.send(1, "They have it");
|
||||||
checks.add(true);
|
checks.add(true);
|
||||||
} else {
|
} else {
|
||||||
@@ -102,4 +138,6 @@ public class UniquesBackend {
|
|||||||
}));
|
}));
|
||||||
return !checks.contains(false);
|
return !checks.contains(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -36,11 +36,14 @@ public class Display implements Global {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final Function<Particle, Consumer<Location>> PARTICLE_FACTORY = particle -> l -> l.getWorld().spawnParticle(particle, l, 1, 0, 0, 0, 0);
|
public static final Function<Particle, Consumer<Location>> PARTICLE_FACTORY = particle -> l -> l.getWorld().spawnParticle(particle, l, 1, 0, 0, 0, 0);
|
||||||
|
|
||||||
public static final BiFunction<Color, Float, Consumer<Location>> DUST_PARTICLE_FACTORY = (color, thickness) -> {
|
public static final BiFunction<Color, Float, Consumer<Location>> DUST_PARTICLE_FACTORY = (color, thickness) -> {
|
||||||
Particle.DustOptions dust = new Particle.DustOptions(color, thickness);
|
Particle.DustOptions dust = new Particle.DustOptions(color, thickness);
|
||||||
return l -> l.getWorld().spawnParticle(Particle.DUST, l, 1, 0, 0, 0, 0, dust);
|
return l -> l.getWorld().spawnParticle(Particle.DUST, l, 1, 0, 0, 0, 0, dust);
|
||||||
};
|
};
|
||||||
|
|
||||||
public static final Function<Boolean, Consumer<Location>> FLAME_PARTICLE_FACTORY = soul -> {
|
public static final Function<Boolean, Consumer<Location>> FLAME_PARTICLE_FACTORY = soul -> {
|
||||||
Particle flame = soul ? Particle.SOUL_FIRE_FLAME : Particle.FLAME;
|
Particle flame = soul ? Particle.SOUL_FIRE_FLAME : Particle.FLAME;
|
||||||
return l -> l.getWorld().spawnParticle(flame, l, 1, 0, 0, 0, 0);
|
return l -> l.getWorld().spawnParticle(flame, l, 1, 0, 0, 0, 0);
|
||||||
|
|||||||
81
src/main/java/me/trouper/armorsmp/utils/ItemUtils.java
Normal file
81
src/main/java/me/trouper/armorsmp/utils/ItemUtils.java
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
package me.trouper.armorsmp.utils;
|
||||||
|
|
||||||
|
import me.trouper.armorsmp.data.Unique;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class ItemUtils {
|
||||||
|
|
||||||
|
public static boolean notDroppable(ItemStack i) {
|
||||||
|
return isArmor(i) && !isUnique(i) && !isDragonEggEquivalent(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isDragonEggEquivalent(ItemStack i) {
|
||||||
|
Material m = i.getType();
|
||||||
|
return m.equals(Unique.DRAGON_EGG);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isArmor(ItemStack i) {
|
||||||
|
return isHelmet(i) || isChestplate(i) || isLeggings(i) || isBoots(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isHelmet(ItemStack i) {
|
||||||
|
Material m = i.getType();
|
||||||
|
String n = m.name();
|
||||||
|
return n.contains("HELMET");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isChestplate(ItemStack i) {
|
||||||
|
Material m = i.getType();
|
||||||
|
String n = m.name();
|
||||||
|
return n.contains("CHESTPLATE");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isLeggings(ItemStack i) {
|
||||||
|
Material m = i.getType();
|
||||||
|
String n = m.name();
|
||||||
|
return n.contains("LEGGINGS");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isBoots(ItemStack i) {
|
||||||
|
Material m = i.getType();
|
||||||
|
String n = m.name();
|
||||||
|
return n.contains("BOOTS");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isUnique(ItemStack i) {
|
||||||
|
Material m = i.getType();
|
||||||
|
List<Material> uniqueMets = new ArrayList<>();
|
||||||
|
for (Unique value : Unique.values()) {
|
||||||
|
uniqueMets.add(value.getInGameItem().getType());
|
||||||
|
}
|
||||||
|
|
||||||
|
return uniqueMets.contains(m);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isUniqueArmor(ItemStack i) {
|
||||||
|
return isUnique(i) && isArmor(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isSimilar(ItemStack item1, ItemStack item2) {
|
||||||
|
if (item1 == null || item2 == null) return false;
|
||||||
|
if (item1.getType() != item2.getType()) return false;
|
||||||
|
if (item1.hasItemMeta() != item2.hasItemMeta()) return false;
|
||||||
|
|
||||||
|
ItemMeta meta1 = item1.getItemMeta();
|
||||||
|
ItemMeta meta2 = item2.getItemMeta();
|
||||||
|
|
||||||
|
return meta1 == null || meta2 == null || meta1.equals(meta2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @excludes unique enchants */
|
||||||
|
public static void transferEnchants(ItemStack oldItem, ItemStack newItem) {
|
||||||
|
if (oldItem != null && !isUnique(oldItem)) {
|
||||||
|
newItem.addEnchantments(oldItem.getEnchantments());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
package me.trouper.armorsmp.utils;
|
|
||||||
|
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
|
||||||
|
|
||||||
public class WorldUtils {
|
|
||||||
|
|
||||||
public static boolean notDroppable(ItemStack i) {
|
|
||||||
return isArmor(i) && !isUnique(i) && !isDragonEggEquivalent(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static boolean isDragonEggEquivalent(ItemStack i) {
|
|
||||||
Material m = i.getType();
|
|
||||||
return m.equals(Material.NETHERITE_CHESTPLATE);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isArmor(ItemStack i) {
|
|
||||||
Material m = i.getType();
|
|
||||||
String n = m.name();
|
|
||||||
return n.contains("HELMET")
|
|
||||||
|| n.contains("CHESTPLATE")
|
|
||||||
|| n.contains("LEGGINGS")
|
|
||||||
|| n.contains("BOOTS");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isUnique(ItemStack i) {
|
|
||||||
Material m = i.getType();
|
|
||||||
String n = m.name();
|
|
||||||
return (n.contains("NETHERITE") && isArmor(i))
|
|
||||||
|| n.contains("MACE")
|
|
||||||
|| n.contains("NETHERITE_SWORD")
|
|
||||||
|| n.contains("NETHERITE_AXE");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isSimilar(ItemStack item1, ItemStack item2) {
|
|
||||||
if (item1 == null || item2 == null) return false;
|
|
||||||
if (item1.getType() != item2.getType()) return false;
|
|
||||||
if (item1.hasItemMeta() != item2.hasItemMeta()) return false;
|
|
||||||
|
|
||||||
ItemMeta meta1 = item1.getItemMeta();
|
|
||||||
ItemMeta meta2 = item2.getItemMeta();
|
|
||||||
|
|
||||||
return meta1 == null || meta2 == null || meta1.equals(meta2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user