Added a lot of functionality, still haven't tested anything.
This commit is contained in:
@@ -1,31 +1,164 @@
|
|||||||
package me.trouper.armorsmp.data;
|
package me.trouper.armorsmp.data;
|
||||||
|
|
||||||
|
import io.github.itzispyder.pdk.plugin.builders.ItemBuilder;
|
||||||
|
import me.trouper.armorsmp.ArmorSMP;
|
||||||
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.enchantments.Enchantment;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public enum ArmorTier {
|
public enum ArmorTier {
|
||||||
NONE(0),
|
NONE(0,
|
||||||
LEATHER(1),
|
new ItemStack(Material.AIR),
|
||||||
CHAINMAIL(2),
|
new ItemStack(Material.AIR),
|
||||||
GOLD(3),
|
new ItemStack(Material.AIR),
|
||||||
IRON(4),
|
new ItemStack(Material.AIR)
|
||||||
DIAMOND(5);
|
),
|
||||||
|
LEATHER(1,
|
||||||
|
ItemBuilder.create()
|
||||||
|
.material(Material.LEATHER_HELMET)
|
||||||
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
|
.build(),
|
||||||
|
ItemBuilder.create()
|
||||||
|
.material(Material.LEATHER_CHESTPLATE)
|
||||||
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
|
.build(),
|
||||||
|
ItemBuilder.create()
|
||||||
|
.material(Material.LEATHER_LEGGINGS)
|
||||||
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
|
.build(),
|
||||||
|
ItemBuilder.create()
|
||||||
|
.material(Material.LEATHER_BOOTS)
|
||||||
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
|
.build()
|
||||||
|
),
|
||||||
|
CHAINMAIL(2,
|
||||||
|
ItemBuilder.create()
|
||||||
|
.material(Material.CHAINMAIL_HELMET)
|
||||||
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
|
.build(),
|
||||||
|
ItemBuilder.create()
|
||||||
|
.material(Material.CHAINMAIL_CHESTPLATE)
|
||||||
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
|
.build(),
|
||||||
|
ItemBuilder.create()
|
||||||
|
.material(Material.CHAINMAIL_LEGGINGS)
|
||||||
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
|
.build(),
|
||||||
|
ItemBuilder.create()
|
||||||
|
.material(Material.CHAINMAIL_BOOTS)
|
||||||
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
|
.build()
|
||||||
|
),
|
||||||
|
GOLD(3,
|
||||||
|
ItemBuilder.create()
|
||||||
|
.material(Material.GOLDEN_HELMET)
|
||||||
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
|
.build(),
|
||||||
|
ItemBuilder.create()
|
||||||
|
.material(Material.GOLDEN_CHESTPLATE)
|
||||||
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
|
.build(),
|
||||||
|
ItemBuilder.create()
|
||||||
|
.material(Material.GOLDEN_LEGGINGS)
|
||||||
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
|
.build(),
|
||||||
|
ItemBuilder.create()
|
||||||
|
.material(Material.GOLDEN_BOOTS)
|
||||||
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
|
.build()
|
||||||
|
),
|
||||||
|
IRON(4,
|
||||||
|
ItemBuilder.create()
|
||||||
|
.material(Material.IRON_HELMET)
|
||||||
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
|
.build(),
|
||||||
|
ItemBuilder.create()
|
||||||
|
.material(Material.IRON_CHESTPLATE)
|
||||||
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
|
.build(),
|
||||||
|
ItemBuilder.create()
|
||||||
|
.material(Material.IRON_LEGGINGS)
|
||||||
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
|
.build(),
|
||||||
|
ItemBuilder.create()
|
||||||
|
.material(Material.IRON_BOOTS)
|
||||||
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
|
.build()
|
||||||
|
),
|
||||||
|
DIAMOND(5,
|
||||||
|
ItemBuilder.create()
|
||||||
|
.material(Material.DIAMOND_HELMET)
|
||||||
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
|
.build(),
|
||||||
|
ItemBuilder.create()
|
||||||
|
.material(Material.DIAMOND_CHESTPLATE)
|
||||||
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
|
.build(),
|
||||||
|
ItemBuilder.create()
|
||||||
|
.material(Material.DIAMOND_LEGGINGS)
|
||||||
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
|
.build(),
|
||||||
|
ItemBuilder.create()
|
||||||
|
.material(Material.DIAMOND_BOOTS)
|
||||||
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
|
.build()
|
||||||
|
);
|
||||||
|
|
||||||
private int numeric;
|
private final ItemStack helmet;
|
||||||
|
private final ItemStack chestplate;
|
||||||
|
private final ItemStack leggings;
|
||||||
|
private final ItemStack boots;
|
||||||
|
private final int numeric;
|
||||||
|
|
||||||
ArmorTier(int numeric) {
|
ArmorTier(int numeric, ItemStack helmet, ItemStack chestplate, ItemStack leggings, ItemStack boots) {
|
||||||
this.numeric = numeric;
|
this.numeric = numeric;
|
||||||
|
this.helmet = helmet;
|
||||||
|
this.chestplate = chestplate;
|
||||||
|
this.leggings = leggings;
|
||||||
|
this.boots = boots;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ArmorTier getTier(int numeric) {
|
||||||
|
for (ArmorTier value : values()) {
|
||||||
|
if (value.getNumeric() == numeric) return value;
|
||||||
|
if (value.getNumeric() < 1) return NONE;
|
||||||
|
if (value.getNumeric() > 5) return DIAMOND;
|
||||||
|
}
|
||||||
|
return NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ArmorTier inferTier(Player p) {
|
||||||
|
for (ArmorTier value : values()) {
|
||||||
|
if (p.getInventory().getHelmet() == null || p.getInventory().getHelmet().isEmpty()) return NONE;
|
||||||
|
if (p.getInventory().getChestplate() == null || p.getInventory().getHelmet().isEmpty()) return NONE;
|
||||||
|
if (p.getInventory().getLeggings() == null || p.getInventory().getHelmet().isEmpty()) return NONE;
|
||||||
|
if (p.getInventory().getBoots() == null || p.getInventory().getHelmet().isEmpty()) return NONE;
|
||||||
|
if (value.getHelmet().getType().equals(p.getInventory().getHelmet().getType())) return value;
|
||||||
|
if (value.getChestplate().getType().equals(p.getInventory().getChestplate().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;
|
||||||
|
}
|
||||||
|
return ArmorSMP.getInstance().getManager().armor.getTier(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getNumeric() {
|
public int getNumeric() {
|
||||||
return numeric;
|
return numeric;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ArmorTier getTier(int numeric) {
|
public ItemStack getHelmet() {
|
||||||
for (ArmorTier value : values()) {
|
return helmet;
|
||||||
if (value.getNumeric() == numeric) return value;
|
|
||||||
if (value.getNumeric() < 1 ) return NONE;
|
|
||||||
if (value.getNumeric() > 5) {
|
|
||||||
return DIAMOND;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ItemStack getChestplate() {
|
||||||
|
return chestplate;
|
||||||
}
|
}
|
||||||
return NONE;
|
|
||||||
|
public ItemStack getLeggings() {
|
||||||
|
return leggings;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemStack getBoots() {
|
||||||
|
return boots;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import java.util.HashMap;
|
|||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
public class Storage implements JsonSerializable<Storage> {
|
public class Storage implements JsonSerializable<Storage> {
|
||||||
|
|
||||||
@@ -17,10 +18,16 @@ public class Storage implements JsonSerializable<Storage> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public UserData userData = new UserData();
|
public UserData userData = new UserData();
|
||||||
|
public Uniques uniques = new Uniques();
|
||||||
|
public Map<String,Boolean> updateCache = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
|
public class Uniques {
|
||||||
|
public Map<Unique, String> owners = new HashMap<>();
|
||||||
|
}
|
||||||
|
|
||||||
public class UserData {
|
public class UserData {
|
||||||
public Set<String> tipsDisabled = new HashSet<>();
|
public Set<String> tipsDisabled = new HashSet<>();
|
||||||
public Map<String, Integer> playerTiers = new HashMap<>();
|
public Map<String, ArmorTier> playerTiers = new HashMap<>();
|
||||||
public Map<String, Set<String>> playerTrust = new HashMap<>();
|
public Map<String, Set<String>> playerTrust = new HashMap<>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import org.bukkit.Material;
|
|||||||
import org.bukkit.enchantments.Enchantment;
|
import org.bukkit.enchantments.Enchantment;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
public enum NetheritePiece {
|
public enum Unique {
|
||||||
HELMET(ItemBuilder.create()
|
HELMET(ItemBuilder.create()
|
||||||
.material(Material.NETHERITE_HELMET)
|
.material(Material.NETHERITE_HELMET)
|
||||||
.lore(Text.legacyColor("&bAbilities:"))
|
.lore(Text.legacyColor("&bAbilities:"))
|
||||||
@@ -18,6 +18,7 @@ public enum NetheritePiece {
|
|||||||
.enchant(Enchantment.MENDING,1)
|
.enchant(Enchantment.MENDING,1)
|
||||||
.enchant(Enchantment.RESPIRATION,3)
|
.enchant(Enchantment.RESPIRATION,3)
|
||||||
.enchant(Enchantment.AQUA_AFFINITY,1)
|
.enchant(Enchantment.AQUA_AFFINITY,1)
|
||||||
|
.customModelData(2)
|
||||||
.build()
|
.build()
|
||||||
),
|
),
|
||||||
CHESTPLATE(ItemBuilder.create()
|
CHESTPLATE(ItemBuilder.create()
|
||||||
@@ -30,6 +31,7 @@ public enum NetheritePiece {
|
|||||||
.enchant(Enchantment.PROTECTION,4)
|
.enchant(Enchantment.PROTECTION,4)
|
||||||
.enchant(Enchantment.UNBREAKING,3)
|
.enchant(Enchantment.UNBREAKING,3)
|
||||||
.enchant(Enchantment.MENDING,1)
|
.enchant(Enchantment.MENDING,1)
|
||||||
|
.customModelData(3)
|
||||||
.build()
|
.build()
|
||||||
),
|
),
|
||||||
LEGGINGS(ItemBuilder.create()
|
LEGGINGS(ItemBuilder.create()
|
||||||
@@ -42,6 +44,7 @@ public enum NetheritePiece {
|
|||||||
.enchant(Enchantment.UNBREAKING,3)
|
.enchant(Enchantment.UNBREAKING,3)
|
||||||
.enchant(Enchantment.MENDING,1)
|
.enchant(Enchantment.MENDING,1)
|
||||||
.enchant(Enchantment.SWIFT_SNEAK,3)
|
.enchant(Enchantment.SWIFT_SNEAK,3)
|
||||||
|
.customModelData(4)
|
||||||
.build()
|
.build()
|
||||||
),
|
),
|
||||||
BOOTS(ItemBuilder.create()
|
BOOTS(ItemBuilder.create()
|
||||||
@@ -56,12 +59,64 @@ public enum NetheritePiece {
|
|||||||
.enchant(Enchantment.SOUL_SPEED,3)
|
.enchant(Enchantment.SOUL_SPEED,3)
|
||||||
.enchant(Enchantment.FEATHER_FALLING,4)
|
.enchant(Enchantment.FEATHER_FALLING,4)
|
||||||
.enchant(Enchantment.DEPTH_STRIDER,3)
|
.enchant(Enchantment.DEPTH_STRIDER,3)
|
||||||
|
.customModelData(5)
|
||||||
|
.build()
|
||||||
|
),
|
||||||
|
MACE(ItemBuilder.create()
|
||||||
|
.material(Material.MACE)
|
||||||
|
.lore(Text.legacyColor("&bAbilities:"))
|
||||||
|
.lore(Text.legacyColor("&3| &7Speed 1"))
|
||||||
|
.enchant(Enchantment.UNBREAKING,1)
|
||||||
|
.enchant(Enchantment.WIND_BURST,2)
|
||||||
|
.enchant(Enchantment.DENSITY,3)
|
||||||
|
.enchant(Enchantment.MENDING,1)
|
||||||
|
.customModelData(6)
|
||||||
|
.build()
|
||||||
|
),
|
||||||
|
SWORD(ItemBuilder.create()
|
||||||
|
.material(Material.NETHERITE_SWORD)
|
||||||
|
.enchant(Enchantment.UNBREAKING,3)
|
||||||
|
.enchant(Enchantment.MENDING,1)
|
||||||
|
.enchant(Enchantment.SHARPNESS,5)
|
||||||
|
.customModelData(7)
|
||||||
|
.build()
|
||||||
|
),
|
||||||
|
AXE(ItemBuilder.create()
|
||||||
|
.material(Material.NETHERITE_AXE)
|
||||||
|
.enchant(Enchantment.UNBREAKING,3)
|
||||||
|
.enchant(Enchantment.MENDING,1)
|
||||||
|
.enchant(Enchantment.SHARPNESS,5)
|
||||||
|
.enchant(Enchantment.EFFICIENCY,5)
|
||||||
|
.customModelData(8)
|
||||||
|
.build()
|
||||||
|
),
|
||||||
|
PICKAXE(ItemBuilder.create()
|
||||||
|
.material(Material.NETHERITE_PICKAXE)
|
||||||
|
.enchant(Enchantment.UNBREAKING,3)
|
||||||
|
.enchant(Enchantment.MENDING,1)
|
||||||
|
.enchant(Enchantment.EFFICIENCY,5)
|
||||||
|
.customModelData(9)
|
||||||
|
.build()
|
||||||
|
),
|
||||||
|
SHOVEL(ItemBuilder.create()
|
||||||
|
.material(Material.NETHERITE_SHOVEL)
|
||||||
|
.enchant(Enchantment.UNBREAKING,3)
|
||||||
|
.enchant(Enchantment.MENDING,1)
|
||||||
|
.enchant(Enchantment.EFFICIENCY,5)
|
||||||
|
.customModelData(10)
|
||||||
|
.build()
|
||||||
|
),
|
||||||
|
HOE(ItemBuilder.create()
|
||||||
|
.material(Material.NETHERITE_HOE)
|
||||||
|
.enchant(Enchantment.UNBREAKING,3)
|
||||||
|
.enchant(Enchantment.MENDING,1)
|
||||||
|
.enchant(Enchantment.EFFICIENCY,5)
|
||||||
|
.customModelData(11)
|
||||||
.build()
|
.build()
|
||||||
);
|
);
|
||||||
|
|
||||||
private ItemStack inGame;
|
private ItemStack inGame;
|
||||||
|
|
||||||
NetheritePiece(ItemStack inGame) {
|
Unique(ItemStack inGame) {
|
||||||
this.inGame = inGame;
|
this.inGame = inGame;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -7,7 +7,7 @@ import io.github.itzispyder.pdk.commands.Permission;
|
|||||||
import io.github.itzispyder.pdk.commands.completions.CompletionBuilder;
|
import io.github.itzispyder.pdk.commands.completions.CompletionBuilder;
|
||||||
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.NetheritePiece;
|
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 org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
@@ -17,7 +17,6 @@ import org.bukkit.command.CommandSender;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@CommandRegistry(value = "armorsmp", permission = @Permission("op"), printStackTrace = true)
|
@CommandRegistry(value = "armorsmp", permission = @Permission("op"), printStackTrace = true)
|
||||||
public class AdminCommand implements CustomCommand {
|
public class AdminCommand implements CustomCommand {
|
||||||
@@ -57,7 +56,7 @@ public class AdminCommand implements CustomCommand {
|
|||||||
Text.sendError(sender, "Usage: /armorsmp give <upgrader|netherite|mace> ...");
|
Text.sendError(sender, "Usage: /armorsmp give <upgrader|netherite|mace> ...");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String type = args.get(1).toString().toLowerCase();
|
final String type = args.get(1).toString().toLowerCase();
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case "upgrader" -> {
|
case "upgrader" -> {
|
||||||
@@ -80,7 +79,7 @@ public class AdminCommand implements CustomCommand {
|
|||||||
Text.sendError(sender, "Usage: /armorsmp give netherite <piece> <player>");
|
Text.sendError(sender, "Usage: /armorsmp give netherite <piece> <player>");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
NetheritePiece piece = args.get(2).toEnum(NetheritePiece.class);
|
final Unique piece = args.get(2).toEnum(Unique.class);
|
||||||
if (piece == null) {
|
if (piece == null) {
|
||||||
Text.sendMessage(false, Text.Pallet.ERROR,sender,"Error: {0} is not a valid Netherite piece.",args.get(2).toString());
|
Text.sendMessage(false, Text.Pallet.ERROR,sender,"Error: {0} is not a valid Netherite piece.",args.get(2).toString());
|
||||||
return;
|
return;
|
||||||
@@ -120,7 +119,7 @@ public class AdminCommand implements CustomCommand {
|
|||||||
Text.sendError(sender, "Usage: /armorsmp toggle <end|nether|mace>");
|
Text.sendError(sender, "Usage: /armorsmp toggle <end|nether|mace>");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String feature = args.get(1).toString().toLowerCase();
|
final String feature = args.get(1).toString().toLowerCase();
|
||||||
// TODO: toggles
|
// TODO: toggles
|
||||||
Text.sendMessage(false, Text.Pallet.SUCCESS, sender, "Toggled the {0}",feature);
|
Text.sendMessage(false, Text.Pallet.SUCCESS, sender, "Toggled the {0}",feature);
|
||||||
}
|
}
|
||||||
@@ -133,7 +132,7 @@ public class AdminCommand implements CustomCommand {
|
|||||||
Text.sendMessage(false, Text.Pallet.SUCCESS, sender, "Reset Mace");
|
Text.sendMessage(false, Text.Pallet.SUCCESS, sender, "Reset Mace");
|
||||||
}
|
}
|
||||||
case "remove" -> {
|
case "remove" -> {
|
||||||
String type = args.get(1).toString().toLowerCase();
|
final String type = args.get(1).toString().toLowerCase();
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case "netherite" -> {
|
case "netherite" -> {
|
||||||
@@ -141,7 +140,7 @@ public class AdminCommand implements CustomCommand {
|
|||||||
Text.sendError(sender, "Usage: /armorsmp remove <piece> <player>");
|
Text.sendError(sender, "Usage: /armorsmp remove <piece> <player>");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
NetheritePiece piece = args.get(2).toEnum(NetheritePiece.class);
|
final Unique piece = args.get(2).toEnum(Unique.class);
|
||||||
Player target = Bukkit.getPlayer(args.get(3).toString());
|
Player target = Bukkit.getPlayer(args.get(3).toString());
|
||||||
|
|
||||||
if (target == null) {
|
if (target == null) {
|
||||||
@@ -169,7 +168,7 @@ public class AdminCommand implements CustomCommand {
|
|||||||
.then(b.arg("upgrader")
|
.then(b.arg("upgrader")
|
||||||
.then(b.argOnlinePlayers()))
|
.then(b.argOnlinePlayers()))
|
||||||
.then(b.arg("netherite")
|
.then(b.arg("netherite")
|
||||||
.then(b.argEnum(NetheritePiece.class)
|
.then(b.argEnum(Unique.class)
|
||||||
.then(b.argOnlinePlayers())))
|
.then(b.argOnlinePlayers())))
|
||||||
.then(b.arg("mace")
|
.then(b.arg("mace")
|
||||||
.then(b.argOnlinePlayers()))
|
.then(b.argOnlinePlayers()))
|
||||||
@@ -179,7 +178,7 @@ public class AdminCommand implements CustomCommand {
|
|||||||
).then(
|
).then(
|
||||||
b.arg("remove")
|
b.arg("remove")
|
||||||
.then(b.arg("netherite")
|
.then(b.arg("netherite")
|
||||||
.then(b.argEnum(NetheritePiece.class)
|
.then(b.argEnum(Unique.class)
|
||||||
.then(b.argOnlinePlayers())))
|
.then(b.argOnlinePlayers())))
|
||||||
).then(b.arg("toggle")
|
).then(b.arg("toggle")
|
||||||
.then(b.arg("end","nether","mace")));
|
.then(b.arg("end","nether","mace")));
|
||||||
|
|||||||
@@ -2,8 +2,10 @@ 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.utils.Text;
|
import me.trouper.armorsmp.utils.Text;
|
||||||
import me.trouper.armorsmp.utils.Verbose;
|
import me.trouper.armorsmp.utils.Verbose;
|
||||||
|
import org.bukkit.Material;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.inventory.CraftItemEvent;
|
import org.bukkit.event.inventory.CraftItemEvent;
|
||||||
@@ -13,12 +15,27 @@ public class CraftEvent implements CustomListener {
|
|||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onCraft(CraftItemEvent e) {
|
public void onCraft(CraftItemEvent e) {
|
||||||
final ItemStack result = e.getRecipe().getResult();
|
ItemStack result = e.getRecipe().getResult();
|
||||||
final String name = result.getType().name();
|
final String name = result.getType().name();
|
||||||
final Player p = (Player) e.getWhoClicked();
|
Player p = (Player) e.getWhoClicked();
|
||||||
|
|
||||||
Verbose.send("Handling craft for %s, result: %s", p.getName(), result.getType().name());
|
Verbose.send("Handling craft for %s, result: %s", p.getName(), result.getType().name());
|
||||||
|
|
||||||
|
if (result.getType().equals(Material.MACE)) {
|
||||||
|
if (!ArmorSMP.getInstance().getManager().io.config.maceCraftingEnabled) {
|
||||||
|
e.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
result.addEnchantments(Unique.MACE.getInGameItem().getEnchantments());
|
||||||
|
result.lore(Unique.MACE.getInGameItem().lore());
|
||||||
|
result.setItemMeta(Unique.MACE.getInGameItem().getItemMeta());
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!name.contains("HELMET")
|
if (!name.contains("HELMET")
|
||||||
&& !name.contains("CHESTPLATE")
|
&& !name.contains("CHESTPLATE")
|
||||||
&& !name.contains("LEGGINGS")
|
&& !name.contains("LEGGINGS")
|
||||||
@@ -28,7 +45,6 @@ public class CraftEvent implements CustomListener {
|
|||||||
&& !name.contains("NETHERITE_AXE")
|
&& !name.contains("NETHERITE_AXE")
|
||||||
&& !name.contains("NETHERITE_SHOVEL")
|
&& !name.contains("NETHERITE_SHOVEL")
|
||||||
&& !name.contains("NETHERITE_HOE")
|
&& !name.contains("NETHERITE_HOE")
|
||||||
&& (!ArmorSMP.getInstance().getManager().io.config.maceCraftingEnabled && !name.contains("MACE"))
|
|
||||||
) return;
|
) return;
|
||||||
|
|
||||||
Verbose.send("%s Attempted to craft a disabled item.", p.getName());
|
Verbose.send("%s Attempted to craft a disabled item.", p.getName());
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package me.trouper.armorsmp.server.events;
|
||||||
|
|
||||||
|
import io.github.itzispyder.pdk.events.CustomListener;
|
||||||
|
import me.trouper.armorsmp.ArmorSMP;
|
||||||
|
import me.trouper.armorsmp.data.ArmorTier;
|
||||||
|
import me.trouper.armorsmp.server.crafting.ArmorUpgrade;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||||
|
|
||||||
|
public class DeathEvent implements CustomListener {
|
||||||
|
@EventHandler
|
||||||
|
public void onDeath(PlayerDeathEvent e) {
|
||||||
|
Player p = e.getEntity();
|
||||||
|
final ArmorTier tier = ArmorSMP.getInstance().getManager().armor.getTier(p);
|
||||||
|
if (tier.equals(ArmorTier.NONE)) return;
|
||||||
|
if (ArmorSMP.getInstance().getManager().armor.downTier(p)) {
|
||||||
|
e.getDrops().add(ArmorUpgrade.ARMOR_UGPRADE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package me.trouper.armorsmp.server.events;
|
||||||
|
|
||||||
|
import io.github.itzispyder.pdk.events.CustomListener;
|
||||||
|
import me.trouper.armorsmp.ArmorSMP;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
|
|
||||||
|
public class JoinEvent implements CustomListener {
|
||||||
|
public void onJoin(PlayerJoinEvent e) {
|
||||||
|
Player p = e.getPlayer();
|
||||||
|
if (ArmorSMP.getInstance().getManager().io.storage.updateCache.containsKey(e.getPlayer().getUniqueId().toString())) {
|
||||||
|
ArmorSMP.getInstance().getManager().armor.updateArmor(p,ArmorSMP.getInstance().getManager().io.storage.updateCache.get(p.getUniqueId().toString()));
|
||||||
|
ArmorSMP.getInstance().getManager().io.storage.updateCache.remove(p.getUniqueId().toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package me.trouper.armorsmp.server.events;
|
||||||
|
|
||||||
|
import io.github.itzispyder.pdk.events.CustomListener;
|
||||||
|
import me.trouper.armorsmp.ArmorSMP;
|
||||||
|
import me.trouper.armorsmp.data.ArmorTier;
|
||||||
|
import me.trouper.armorsmp.server.crafting.ArmorUpgrade;
|
||||||
|
import me.trouper.armorsmp.utils.Text;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public class UpgradeRedeemEvent implements CustomListener {
|
||||||
|
|
||||||
|
public void onClick(PlayerInteractEvent e) {
|
||||||
|
Player p = e.getPlayer();
|
||||||
|
ItemStack holding = e.getItem();
|
||||||
|
final ArmorTier tier = ArmorSMP.getInstance().getManager().armor.getTier(p);
|
||||||
|
|
||||||
|
if (holding == null || holding.isEmpty()) return;
|
||||||
|
if (!holding.equals(ArmorUpgrade.ARMOR_UGPRADE)) return;
|
||||||
|
|
||||||
|
if (ArmorSMP.getInstance().getManager().armor.upTier(p)) {
|
||||||
|
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));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,8 +3,15 @@ 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.Storage;
|
import me.trouper.armorsmp.data.Storage;
|
||||||
|
import me.trouper.armorsmp.data.Unique;
|
||||||
import me.trouper.armorsmp.utils.Verbose;
|
import me.trouper.armorsmp.utils.Verbose;
|
||||||
|
import org.bukkit.Material;
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.PlayerInventory;
|
||||||
|
|
||||||
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
|
||||||
public class ArmorBackend {
|
public class ArmorBackend {
|
||||||
|
|
||||||
@@ -14,38 +21,107 @@ public class ArmorBackend {
|
|||||||
storage = ArmorSMP.getInstance().getManager().io.storage;
|
storage = ArmorSMP.getInstance().getManager().io.storage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean shouldTransferEnchants(OfflinePlayer target, ArmorTier request) {
|
||||||
|
final ArmorTier current = getTier(target);
|
||||||
|
return request.getNumeric() >= current.getNumeric();
|
||||||
|
}
|
||||||
|
|
||||||
public void setTier(OfflinePlayer target, ArmorTier tier) {
|
public void setTier(OfflinePlayer target, ArmorTier 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);
|
Verbose.send("Setting tier of %s to %s",target.getName(),tier);
|
||||||
storage.userData.playerTiers.put(target.getUniqueId().toString(),tier.getNumeric());
|
storage.userData.playerTiers.put(target.getUniqueId().toString(),tier);
|
||||||
|
if (target.getPlayer() != null && target.isOnline()) updateArmor(target.getPlayer(), transferEnchants);
|
||||||
|
else storage.updateCache.put(target.getUniqueId().toString(),transferEnchants);
|
||||||
storage.save();
|
storage.save();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setTier(OfflinePlayer target, int tier) {
|
public boolean downTier(OfflinePlayer target) {
|
||||||
Verbose.send("Setting tier of %s to %s",target.getName(),tier);
|
final int numeric = storage.userData.playerTiers.get(target.getUniqueId().toString()).getNumeric();
|
||||||
setTier(target,ArmorTier.getTier(tier));
|
if (numeric < 0) return false;
|
||||||
|
|
||||||
|
setTier(target,ArmorTier.getTier(numeric - 1),true);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void downTier(OfflinePlayer target) {
|
public boolean upTier(OfflinePlayer target) {
|
||||||
int numeric = storage.userData.playerTiers.get(target.getUniqueId().toString());
|
final int numeric = storage.userData.playerTiers.get(target.getUniqueId().toString()).getNumeric();
|
||||||
setTier(target,ArmorTier.getTier(numeric - 1));
|
if (numeric > 4) return false;
|
||||||
}
|
|
||||||
|
|
||||||
public void upTier(OfflinePlayer target) {
|
setTier(target,ArmorTier.getTier(numeric + 1),false);
|
||||||
int numeric = storage.userData.playerTiers.get(target.getUniqueId().toString());
|
return true;
|
||||||
setTier(target,ArmorTier.getTier(numeric + 1));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArmorTier getTier(OfflinePlayer target) {
|
public ArmorTier getTier(OfflinePlayer target) {
|
||||||
Verbose.send("Getting tier of %s", target.getName());
|
Verbose.send("Getting tier of %s", target.getName());
|
||||||
int numeric = storage.userData.playerTiers.get(target.getUniqueId().toString());
|
return storage.userData.playerTiers.getOrDefault(target.getUniqueId().toString(),ArmorTier.NONE);
|
||||||
for (ArmorTier value : ArmorTier.values()) {
|
|
||||||
if (value.getNumeric() == numeric) return value;
|
|
||||||
if (value.getNumeric() > 5) {
|
|
||||||
ArmorSMP.getInstance().getLogger().warning("Detected a player above tier 5 (diamond) this should not be possible. Setting them back to diamond.");
|
|
||||||
setTier(target,ArmorTier.DIAMOND);
|
|
||||||
return ArmorTier.DIAMOND;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean verifyArmor(Player p) {
|
||||||
|
PlayerInventory e = p.getInventory();
|
||||||
|
final ArmorTier tier = getTier(p);
|
||||||
|
|
||||||
|
final Material correctHelmet = tier.getHelmet().getType();
|
||||||
|
final Material correctChestplate = tier.getChestplate().getType();
|
||||||
|
final Material correctLeggings = tier.getLeggings().getType();
|
||||||
|
final Material correctBoots = tier.getBoots().getType();
|
||||||
|
|
||||||
|
final Material helmet = e.getHelmet() == null ? Material.AIR : e.getHelmet().getType() == Material.NETHERITE_HELMET ? correctHelmet : e.getHelmet().getType();
|
||||||
|
final Material chestplate = e.getChestplate() == null ? Material.AIR : e.getChestplate().getType() == Material.NETHERITE_CHESTPLATE ? correctChestplate : e.getChestplate().getType();
|
||||||
|
final Material leggings = e.getLeggings() == null ? Material.AIR : e.getLeggings().getType() == Material.NETHERITE_LEGGINGS ? correctLeggings : e.getLeggings().getType();
|
||||||
|
final Material boots = e.getBoots() == null ? Material.AIR : e.getBoots().getType() == Material.NETHERITE_BOOTS ? correctBoots : e.getBoots().getType();
|
||||||
|
|
||||||
|
return helmet.equals(correctHelmet) && chestplate.equals(correctChestplate) && leggings.equals(correctLeggings) && boots.equals(correctBoots);
|
||||||
}
|
}
|
||||||
return ArmorTier.NONE;
|
|
||||||
|
public void updateArmor(Player p, boolean transferEnchants) {
|
||||||
|
PlayerInventory e = p.getInventory();
|
||||||
|
final ArmorTier tier = getTier(p);
|
||||||
|
|
||||||
|
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)) {
|
||||||
|
e.setHelmet(new ItemStack(Material.AIR));
|
||||||
|
e.setChestplate(new ItemStack(Material.AIR));
|
||||||
|
e.setLeggings(new ItemStack(Material.AIR));
|
||||||
|
e.setBoots(new ItemStack(Material.AIR));
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AtomicReference<ItemStack> updatedHelmet = new AtomicReference<>(tier.getHelmet());
|
||||||
|
AtomicReference<ItemStack> updatedChestplate = new AtomicReference<>(tier.getChestplate());
|
||||||
|
AtomicReference<ItemStack> updatedLeggings = new AtomicReference<>(tier.getLeggings());
|
||||||
|
AtomicReference<ItemStack> updatedBoots = new AtomicReference<>(tier.getBoots());
|
||||||
|
|
||||||
|
|
||||||
|
if (transferEnchants) {
|
||||||
|
if (helmet != null) updatedHelmet.get().addEnchantments(helmet.getEnchantments());
|
||||||
|
if (chestplate != null) updatedChestplate.get().addEnchantments(chestplate.getEnchantments());
|
||||||
|
if (leggings != null) updatedLeggings.get().addEnchantments(leggings.getEnchantments());
|
||||||
|
if (boots != null) updatedBoots.get().addEnchantments(boots.getEnchantments());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (storage.uniques.owners.containsValue(p.getUniqueId().toString())) {
|
||||||
|
storage.uniques.owners.forEach((unique,owner)->{
|
||||||
|
if (owner.equals(p.getUniqueId().toString())) {
|
||||||
|
if (unique.equals(Unique.HELMET)) updatedHelmet.set(unique.getInGameItem());
|
||||||
|
if (unique.equals(Unique.CHESTPLATE)) updatedChestplate.set(unique.getInGameItem());
|
||||||
|
if (unique.equals(Unique.LEGGINGS)) updatedLeggings.set(unique.getInGameItem());
|
||||||
|
if (unique.equals(Unique.BOOTS)) updatedBoots.set(unique.getInGameItem());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
e.setHelmet(updatedHelmet.get());
|
||||||
|
e.setChestplate(updatedChestplate.get());
|
||||||
|
e.setLeggings(updatedLeggings.get());
|
||||||
|
e.setBoots(updatedBoots.get());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ public class TrustBackend {
|
|||||||
|
|
||||||
public boolean addTrust(Player truster, UUID trustee) {
|
public boolean addTrust(Player truster, UUID trustee) {
|
||||||
Set<String> trustees = getTrustees(truster);
|
Set<String> trustees = getTrustees(truster);
|
||||||
boolean added = trustees.add(trustee.toString());
|
final boolean added = trustees.add(trustee.toString());
|
||||||
storage.userData.playerTrust.put(truster.getUniqueId().toString(),trustees);
|
storage.userData.playerTrust.put(truster.getUniqueId().toString(),trustees);
|
||||||
storage.save();
|
storage.save();
|
||||||
return added;
|
return added;
|
||||||
@@ -25,7 +25,7 @@ public class TrustBackend {
|
|||||||
|
|
||||||
public boolean removeTrust(Player truster, UUID trustee) {
|
public boolean removeTrust(Player truster, UUID trustee) {
|
||||||
Set<String> trustees = getTrustees(truster);
|
Set<String> trustees = getTrustees(truster);
|
||||||
boolean removed = trustees.remove(trustee.toString());
|
final boolean removed = trustees.remove(trustee.toString());
|
||||||
storage.userData.playerTrust.put(truster.getUniqueId().toString(),trustees);
|
storage.userData.playerTrust.put(truster.getUniqueId().toString(),trustees);
|
||||||
storage.save();
|
storage.save();
|
||||||
return removed;
|
return removed;
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package me.trouper.armorsmp.utils;
|
|||||||
|
|
||||||
import io.github.itzispyder.pdk.utils.misc.Randomizer;
|
import io.github.itzispyder.pdk.utils.misc.Randomizer;
|
||||||
import me.trouper.armorsmp.ArmorSMP;
|
import me.trouper.armorsmp.ArmorSMP;
|
||||||
import net.kyori.adventure.audience.Audience;
|
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.format.NamedTextColor;
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
import net.kyori.adventure.text.format.TextColor;
|
import net.kyori.adventure.text.format.TextColor;
|
||||||
@@ -11,7 +10,10 @@ import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ import me.trouper.armorsmp.ArmorSMP;
|
|||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
|
|
||||||
public class Verbose {
|
public class Verbose {
|
||||||
|
|
||||||
public static void send(int backtrace, String message, Object... args) {
|
public static void send(int backtrace, String message, Object... args) {
|
||||||
|
|||||||
Reference in New Issue
Block a user