Patched the bain of my existence (swap hand into container thingy)
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.
2
.idea/discord.xml
generated
2
.idea/discord.xml
generated
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="DiscordProjectSettings">
|
||||
<option name="show" value="ASK" />
|
||||
<option name="show" value="PROJECT_FILES" />
|
||||
<option name="description" value="" />
|
||||
</component>
|
||||
</project>
|
||||
4
.idea/modules/ArmorSMP.main.iml
generated
4
.idea/modules/ArmorSMP.main.iml
generated
@@ -11,8 +11,4 @@
|
||||
</configuration>
|
||||
</facet>
|
||||
</component>
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
@@ -28,7 +28,7 @@ repositories {
|
||||
|
||||
dependencies {
|
||||
compileOnly("io.papermc.paper:paper-api:1.21.4-R0.1-SNAPSHOT")
|
||||
implementation files("libs/PDK-1.4.0.jar")
|
||||
implementation files("libs/PDK-1.5.0.jar")
|
||||
}
|
||||
|
||||
def targetJavaVersion = 21
|
||||
|
||||
@@ -23,3 +23,5 @@ commands:
|
||||
description: Utilize unique abilities.
|
||||
aliases:
|
||||
- a
|
||||
tips:
|
||||
description: Toggle tips in messages.
|
||||
Binary file not shown.
Binary file not shown.
@@ -21,110 +21,90 @@ public enum ArmorTier {
|
||||
ItemBuilder.create()
|
||||
.material(Material.LEATHER_HELMET)
|
||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||
.unbreakable(true)
|
||||
.build(),
|
||||
ItemBuilder.create()
|
||||
.material(Material.LEATHER_CHESTPLATE)
|
||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||
.unbreakable(true)
|
||||
.build(),
|
||||
ItemBuilder.create()
|
||||
.material(Material.LEATHER_LEGGINGS)
|
||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||
.unbreakable(true)
|
||||
.build(),
|
||||
ItemBuilder.create()
|
||||
.material(Material.LEATHER_BOOTS)
|
||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||
.unbreakable(true)
|
||||
.build()
|
||||
),
|
||||
CHAINMAIL(2,
|
||||
ItemBuilder.create()
|
||||
.material(Material.CHAINMAIL_HELMET)
|
||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||
.unbreakable(true)
|
||||
.build(),
|
||||
ItemBuilder.create()
|
||||
.material(Material.CHAINMAIL_CHESTPLATE)
|
||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||
.unbreakable(true)
|
||||
.build(),
|
||||
ItemBuilder.create()
|
||||
.material(Material.CHAINMAIL_LEGGINGS)
|
||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||
.unbreakable(true)
|
||||
.build(),
|
||||
ItemBuilder.create()
|
||||
.material(Material.CHAINMAIL_BOOTS)
|
||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||
.unbreakable(true)
|
||||
.build()
|
||||
),
|
||||
GOLD(3,
|
||||
ItemBuilder.create()
|
||||
.material(Material.GOLDEN_HELMET)
|
||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||
.unbreakable(true)
|
||||
.build(),
|
||||
ItemBuilder.create()
|
||||
.material(Material.GOLDEN_CHESTPLATE)
|
||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||
.unbreakable(true)
|
||||
.build(),
|
||||
ItemBuilder.create()
|
||||
.material(Material.GOLDEN_LEGGINGS)
|
||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||
.unbreakable(true)
|
||||
.build(),
|
||||
ItemBuilder.create()
|
||||
.material(Material.GOLDEN_BOOTS)
|
||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||
.unbreakable(true)
|
||||
.build()
|
||||
),
|
||||
IRON(4,
|
||||
ItemBuilder.create()
|
||||
.material(Material.IRON_HELMET)
|
||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||
.unbreakable(true)
|
||||
.build(),
|
||||
ItemBuilder.create()
|
||||
.material(Material.IRON_CHESTPLATE)
|
||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||
.unbreakable(true)
|
||||
.build(),
|
||||
ItemBuilder.create()
|
||||
.material(Material.IRON_LEGGINGS)
|
||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||
.unbreakable(true)
|
||||
.build(),
|
||||
ItemBuilder.create()
|
||||
.material(Material.IRON_BOOTS)
|
||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||
.unbreakable(true)
|
||||
.build()
|
||||
),
|
||||
DIAMOND(5,
|
||||
ItemBuilder.create()
|
||||
.material(Material.DIAMOND_HELMET)
|
||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||
.unbreakable(true)
|
||||
.build(),
|
||||
ItemBuilder.create()
|
||||
.material(Material.DIAMOND_CHESTPLATE)
|
||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||
.unbreakable(true)
|
||||
.build(),
|
||||
ItemBuilder.create()
|
||||
.material(Material.DIAMOND_LEGGINGS)
|
||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||
.unbreakable(true)
|
||||
.build(),
|
||||
ItemBuilder.create()
|
||||
.material(Material.DIAMOND_BOOTS)
|
||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||
.unbreakable(true)
|
||||
.build()
|
||||
);
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import io.github.itzispyder.pdk.plugin.builders.ItemBuilder;
|
||||
import io.github.itzispyder.pdk.utils.raytracers.CustomDisplayRaytracer;
|
||||
import me.trouper.armorsmp.ArmorSMP;
|
||||
import me.trouper.armorsmp.utils.Text;
|
||||
import me.trouper.armorsmp.utils.Verbose;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Particle;
|
||||
@@ -191,14 +192,23 @@ public enum Unique {
|
||||
public static boolean isUnique(ItemStack i) {
|
||||
for (Unique value : values()) {
|
||||
if (value.getInGameItem().isSimilar(i)) return true;
|
||||
if (i.getType().equals(Material.DRAGON_EGG)) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static Unique matchUnique(ItemStack i) {
|
||||
Verbose.send("Matching Unique, Item Type: %s",i.getType());
|
||||
Unique match = null;
|
||||
for (Unique value : values()) {
|
||||
if (value.getInGameItem().isSimilar(i)) match = value;
|
||||
if (value.getInGameItem().isSimilar(i)) {
|
||||
match = value;
|
||||
Verbose.send("Matched with, Unique: %s",match);
|
||||
}
|
||||
}
|
||||
if (i.getType().equals(Material.DRAGON_EGG)) {
|
||||
match = Unique.CHESTPLATE;
|
||||
Verbose.send("Matched with dragon egg: Unique: %s",match);
|
||||
}
|
||||
return match;
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package me.trouper.armorsmp.data.io;
|
||||
|
||||
import io.github.itzispyder.pdk.utils.misc.config.JsonSerializable;
|
||||
import me.trouper.armorsmp.ArmorSMP;
|
||||
import me.trouper.armorsmp.utils.Verbose;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Arrays;
|
||||
@@ -16,6 +17,12 @@ public class Config implements JsonSerializable<Config> {
|
||||
return ArmorSMP.getInstance().getManager().io.CONFIG_FILE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void save() {
|
||||
Verbose.send(1,"Saving Config...");
|
||||
JsonSerializable.super.save();
|
||||
}
|
||||
|
||||
public boolean maceCraftingEnabled = true;
|
||||
public boolean netherEnabled = true;
|
||||
public boolean endEnabled = true;
|
||||
|
||||
@@ -26,9 +26,6 @@ public class IO {
|
||||
ArmorSMP.getInstance().getLogger().info("Loading all IO Files");
|
||||
config = JsonSerializable.load(CONFIG_FILE,Config.class,new Config());
|
||||
storage = JsonSerializable.load(STORAGE_FILE,Storage.class,new Storage());
|
||||
|
||||
config.save();
|
||||
storage.save();
|
||||
}
|
||||
|
||||
public void saveAll() {
|
||||
|
||||
@@ -4,6 +4,7 @@ import io.github.itzispyder.pdk.utils.misc.config.JsonSerializable;
|
||||
import me.trouper.armorsmp.ArmorSMP;
|
||||
import me.trouper.armorsmp.data.ArmorTier;
|
||||
import me.trouper.armorsmp.data.Unique;
|
||||
import me.trouper.armorsmp.utils.Verbose;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.HashMap;
|
||||
@@ -19,18 +20,24 @@ public class Storage implements JsonSerializable<Storage> {
|
||||
return ArmorSMP.getInstance().getManager().io.STORAGE_FILE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void save() {
|
||||
Verbose.send(1,"Saving Storage...");
|
||||
JsonSerializable.super.save();
|
||||
}
|
||||
|
||||
public UserData userData = new UserData();
|
||||
public Uniques uniques = new Uniques();
|
||||
public Map<String,Boolean> armorUpdateCache = new ConcurrentHashMap<>();
|
||||
public Map<String,Boolean> armorUpdateCache = new HashMap<>();
|
||||
public Set<String> uniqueUpdateCache = new HashSet<>();
|
||||
|
||||
public class Uniques {
|
||||
public Map<Unique, String> owners = new ConcurrentHashMap<>();
|
||||
public Map<Unique, String> owners = new HashMap<>();
|
||||
}
|
||||
|
||||
public class UserData {
|
||||
public Set<String> tipsDisabled = new HashSet<>();
|
||||
public Map<String, ArmorTier> playerTiers = new ConcurrentHashMap<>();
|
||||
public Map<String, ArmorTier> playerTiers = new HashMap<>();
|
||||
public Map<String, Set<String>> playerTrust = new HashMap<>();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import me.trouper.armorsmp.ArmorSMP;
|
||||
import me.trouper.armorsmp.data.io.IO;
|
||||
import me.trouper.armorsmp.server.commands.AbilityCommand;
|
||||
import me.trouper.armorsmp.server.commands.AdminCommand;
|
||||
import me.trouper.armorsmp.server.commands.TipsCommand;
|
||||
import me.trouper.armorsmp.server.commands.TrustCommand;
|
||||
import me.trouper.armorsmp.server.crafting.ArmorUpgrade;
|
||||
import me.trouper.armorsmp.server.events.*;
|
||||
@@ -24,16 +25,16 @@ public class Manager {
|
||||
|
||||
public Manager() {
|
||||
io = new IO();
|
||||
|
||||
armor = new ArmorBackend(io);
|
||||
trust = new TrustBackend(io);
|
||||
uniques = new UniquesBackend(io);
|
||||
broadcaster = new Broadcaster(io);
|
||||
}
|
||||
|
||||
public void init() {
|
||||
io.loadAll();
|
||||
|
||||
armor = new ArmorBackend();
|
||||
trust = new TrustBackend();
|
||||
uniques = new UniquesBackend();
|
||||
broadcaster = new Broadcaster();
|
||||
|
||||
registerCommands();
|
||||
registerEvents();
|
||||
registerCrafting();
|
||||
@@ -51,6 +52,9 @@ public class Manager {
|
||||
new UpgradeRedeemEvent().register();
|
||||
new PickUpEvent().register();
|
||||
new ItemDestroyEvents().register();
|
||||
new TrustEvents().register();
|
||||
new DropItemEvent().register();
|
||||
new ContainerEvents().register();
|
||||
}
|
||||
|
||||
private void registerCommands() {
|
||||
@@ -58,6 +62,7 @@ public class Manager {
|
||||
new AdminCommand().register();
|
||||
new TrustCommand().register();
|
||||
new AbilityCommand().register();
|
||||
new TipsCommand().register();
|
||||
}
|
||||
|
||||
private void registerCrafting() {
|
||||
|
||||
@@ -30,8 +30,8 @@ public class AbilityCommand implements CustomCommand {
|
||||
Text.sendMessage(false, Text.Pallet.ERROR, sender, "Error: {0} is not a valid unique. Please choose from these values: ", args.get(2).toString(), Arrays.toString(Unique.values()));
|
||||
return;
|
||||
}
|
||||
if (p.getUniqueId().toString().equals(ArmorSMP.getInstance().getManager().io.storage.uniques.owners.get(piece))) {
|
||||
Text.sendMessage(false, Text.Pallet.WARNING, sender, "You do not own {0}.",piece.getCanonical());
|
||||
if (!p.getUniqueId().toString().equals(ArmorSMP.getInstance().getManager().io.storage.uniques.owners.get(piece))) {
|
||||
Text.sendMessage(false, Text.Pallet.WARNING, sender, "You do not own the {0}.",piece.getCanonical());
|
||||
return;
|
||||
}
|
||||
if (abilityCooldown.isOnCooldown(Pair.of(piece,p.getUniqueId()))) {
|
||||
@@ -40,6 +40,7 @@ public class AbilityCommand implements CustomCommand {
|
||||
}
|
||||
piece.getAbility().accept(p);
|
||||
abilityCooldown.addCooldown(Pair.of(piece,p.getUniqueId()),piece.getAbilityCooldownTicks() * 50L);
|
||||
Text.sendMessage(false, Text.Pallet.SUCCESS,sender,"Successfully used your {0}'s ability!",piece.getCanonical());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -25,11 +25,12 @@ public class AdminCommand implements CustomCommand {
|
||||
@Override
|
||||
public void dispatchCommand(CommandSender sender, Command command, String label, Args args) {
|
||||
if (args.getSize() < 1) {
|
||||
Text.sendError(sender, "Error: Valid sub-commands are: [change, give, toggle, reset, remove]");
|
||||
Text.sendError(sender, "Error: Valid sub-commands are: [reload, change, give, toggle, reset, remove]");
|
||||
return;
|
||||
}
|
||||
String sub = args.get(0).toString();
|
||||
switch (sub) {
|
||||
case "reload" -> handleReload(sender,args);
|
||||
case "change" -> handleChange(sender, args);
|
||||
case "give" -> handleGive(sender, args);
|
||||
case "toggle" -> handleToggle(sender, args);
|
||||
@@ -63,6 +64,11 @@ public class AdminCommand implements CustomCommand {
|
||||
.then(b.arg("end","nether","mace","debug")));
|
||||
}
|
||||
|
||||
private void handleReload(CommandSender sender, Args args) {
|
||||
Text.sendMessage(false, Text.Pallet.NEUTRAL,sender,"Reloading IO...");
|
||||
ArmorSMP.getInstance().getManager().io.loadAll();
|
||||
}
|
||||
|
||||
private void handleChange(CommandSender sender, Args args) {
|
||||
if (args.getSize() < 3) {
|
||||
Text.sendError(sender, "Usage: /armorsmp change <tier> <player>");
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
package me.trouper.armorsmp.server.commands;
|
||||
|
||||
import io.github.itzispyder.pdk.commands.Args;
|
||||
import io.github.itzispyder.pdk.commands.CommandRegistry;
|
||||
import io.github.itzispyder.pdk.commands.CustomCommand;
|
||||
import io.github.itzispyder.pdk.commands.completions.CompletionBuilder;
|
||||
import me.trouper.armorsmp.ArmorSMP;
|
||||
import me.trouper.armorsmp.utils.Text;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
@CommandRegistry(value = "tips",playersOnly = true)
|
||||
public class TipsCommand implements CustomCommand {
|
||||
@Override
|
||||
public void dispatchCommand(CommandSender sender, Command command, String s, Args args) {
|
||||
Player p = (Player) sender;
|
||||
boolean result = false;
|
||||
|
||||
if (ArmorSMP.getInstance().getManager().io.storage.userData.tipsDisabled.contains(p.getUniqueId().toString())) {
|
||||
ArmorSMP.getInstance().getManager().io.storage.userData.tipsDisabled.remove(p.getUniqueId().toString());
|
||||
result = true;
|
||||
} else {
|
||||
ArmorSMP.getInstance().getManager().io.storage.userData.tipsDisabled.add(p.getUniqueId().toString());
|
||||
}
|
||||
|
||||
ArmorSMP.getInstance().getManager().io.storage.save();
|
||||
|
||||
Text.sendMessage(false, Text.Pallet.SUCCESS,sender,"Successfully {0} tips.", result ? "enabled" : "disabled");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispatchCompletions(CommandSender sender, Command command, String s, CompletionBuilder completionBuilder) {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,116 @@
|
||||
package me.trouper.armorsmp.server.events;
|
||||
|
||||
import io.github.itzispyder.pdk.events.CustomListener;
|
||||
import me.trouper.armorsmp.data.Unique;
|
||||
import me.trouper.armorsmp.utils.Verbose;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.inventory.*;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.event.player.PlayerSwapHandItemsEvent;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.InventoryView;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.PlayerInventory;
|
||||
|
||||
public class ContainerEvents implements CustomListener {
|
||||
|
||||
@EventHandler
|
||||
public void onInventoryClick(InventoryClickEvent event) {
|
||||
if (!(event.getWhoClicked() instanceof Player)) return;
|
||||
Player player = (Player) event.getWhoClicked();
|
||||
Inventory clickedInventory = event.getClickedInventory();
|
||||
ItemStack currentItem = event.getCurrentItem();
|
||||
ItemStack cursorItem = event.getCursor();
|
||||
|
||||
if (event.isShiftClick() && currentItem != null && Unique.isUnique(currentItem)) {
|
||||
if (clickedInventory != null && clickedInventory.getType() == InventoryType.PLAYER) {
|
||||
event.setCancelled(true);
|
||||
player.closeInventory();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (cursorItem != null && Unique.isUnique(cursorItem)) {
|
||||
if (clickedInventory != null && clickedInventory.getType() != InventoryType.PLAYER) {
|
||||
event.setCancelled(true);
|
||||
player.closeInventory();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (event.getClick() == ClickType.NUMBER_KEY) {
|
||||
ItemStack hotbarItem = player.getInventory().getItem(event.getHotbarButton());
|
||||
if (hotbarItem != null && Unique.isUnique(hotbarItem)) {
|
||||
if (clickedInventory != null && clickedInventory.getType() != InventoryType.PLAYER) {
|
||||
event.setCancelled(true);
|
||||
player.closeInventory();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (event.getClick() == ClickType.SWAP_OFFHAND) {
|
||||
ItemStack offhandItem = player.getInventory().getItemInOffHand();
|
||||
Verbose.send("Detected");
|
||||
if (Unique.isUnique(cursorItem) || Unique.isUnique(offhandItem) || Unique.isUnique(currentItem)) {
|
||||
if (clickedInventory != null && clickedInventory.getType() != InventoryType.PLAYER) {
|
||||
event.setCancelled(true);
|
||||
player.closeInventory();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onInventoryDrag(InventoryDragEvent event) {
|
||||
if (!(event.getWhoClicked() instanceof Player)) return;
|
||||
Player player = (Player) event.getWhoClicked();
|
||||
ItemStack draggedItem = event.getOldCursor();
|
||||
|
||||
if (!Unique.isUnique(draggedItem)) return;
|
||||
for (int rawSlot : event.getRawSlots()) {
|
||||
if (!(rawSlot < event.getView().getTopInventory().getSize())) return;
|
||||
event.setCancelled(true);
|
||||
player.closeInventory();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onInventoryDrag(PlayerSwapHandItemsEvent event) {
|
||||
ItemStack draggedItem = event.getOffHandItem();
|
||||
|
||||
if (!Unique.isUnique(draggedItem)) return;
|
||||
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onInventoryDrag(InventoryPickupItemEvent event) {
|
||||
ItemStack draggedItem = event.getItem().getItemStack();
|
||||
if (!Unique.isUnique(draggedItem)) return;
|
||||
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onInventoryMoveItem(InventoryMoveItemEvent event) {
|
||||
ItemStack item = event.getItem();
|
||||
Inventory destination = event.getDestination();
|
||||
|
||||
if (!Unique.isUnique(item)) return;
|
||||
if ((destination.getHolder() instanceof Player)) return;
|
||||
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onInventoryMoveItem(PlayerInteractEvent e) {
|
||||
if (e.getClickedBlock() != null && !e.getClickedBlock().getType().equals(Material.DECORATED_POT)) return;
|
||||
if (!Unique.isUnique(e.getItem())) return;
|
||||
|
||||
e.setCancelled(true);
|
||||
}
|
||||
}
|
||||
@@ -7,13 +7,11 @@ import me.trouper.armorsmp.server.crafting.ArmorUpgrade;
|
||||
import me.trouper.armorsmp.utils.Text;
|
||||
import me.trouper.armorsmp.utils.Verbose;
|
||||
import me.trouper.armorsmp.utils.WorldUtils;
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
import org.bukkit.event.player.PlayerRespawnEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class DeathEvents implements CustomListener {
|
||||
|
||||
@@ -22,7 +20,7 @@ public class DeathEvents implements CustomListener {
|
||||
Player p = e.getEntity();
|
||||
final ArmorTier tier = ArmorSMP.getInstance().getManager().armor.getTier(p);
|
||||
Verbose.send("Handling death event for %s, their tier is %s",p.getName(),tier);
|
||||
e.getDrops().removeIf(WorldUtils::isDroppable);
|
||||
e.getDrops().removeIf(WorldUtils::notDroppable);
|
||||
|
||||
if (tier.equals(ArmorTier.NONE)) {
|
||||
Verbose.send("Tier was none");
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package me.trouper.armorsmp.server.events;
|
||||
|
||||
import io.github.itzispyder.pdk.events.CustomListener;
|
||||
import me.trouper.armorsmp.ArmorSMP;
|
||||
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.event.EventHandler;
|
||||
import org.bukkit.event.player.PlayerDropItemEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class DropItemEvent implements CustomListener {
|
||||
|
||||
@EventHandler
|
||||
public void onDrop(PlayerDropItemEvent e) {
|
||||
Player p = e.getPlayer();
|
||||
ItemStack i = e.getItemDrop().getItemStack();
|
||||
|
||||
if (!Unique.isUnique(i)) return;
|
||||
Unique match = Unique.matchUnique(i);
|
||||
|
||||
ArmorSMP.getInstance().getManager().uniques.dropUnique(p,match);
|
||||
}
|
||||
}
|
||||
@@ -22,23 +22,31 @@ public class JoinEvent implements CustomListener {
|
||||
}
|
||||
|
||||
private void initPlayer(Player p) {
|
||||
Verbose.send("Setting up data for %s",p.getName());
|
||||
ArmorSMP.getInstance().getManager().io.storage.userData.playerTiers.putIfAbsent(p.getUniqueId().toString(), ArmorTier.NONE);
|
||||
ArmorSMP.getInstance().getManager().io.storage.userData.playerTrust.putIfAbsent(p.getUniqueId().toString(), new HashSet<>(Set.of(p.getUniqueId().toString())));
|
||||
ArmorSMP.getInstance().getManager().io.storage.save();
|
||||
}
|
||||
|
||||
private void handleUpdates(Player p) {
|
||||
Verbose.send("Checking for updates needed on %s",p.getName());
|
||||
final Map<String, Boolean> armorCache = ArmorSMP.getInstance().getManager().io.storage.armorUpdateCache;
|
||||
if (armorCache.containsKey(p.getUniqueId().toString()) || !ArmorSMP.getInstance().getManager().armor.verifyArmor(p)) {
|
||||
if (!ArmorSMP.getInstance().getManager().armor.verifyArmor(p)) {
|
||||
Verbose.send("Updating armor");
|
||||
ArmorSMP.getInstance().getManager().armor.queueUpdate(p,armorCache.getOrDefault(p.getUniqueId().toString(),true));
|
||||
}
|
||||
if (armorCache.containsKey(p.getUniqueId().toString())) {
|
||||
Verbose.send("Updating armor from cache");
|
||||
ArmorSMP.getInstance().getManager().armor.queueUpdate(p,armorCache.getOrDefault(p.getUniqueId().toString(),true));
|
||||
ArmorSMP.getInstance().getManager().io.storage.armorUpdateCache.remove(p.getUniqueId().toString());
|
||||
ArmorSMP.getInstance().getManager().io.storage.save();
|
||||
}
|
||||
final Set<String> uniquesCache = ArmorSMP.getInstance().getManager().io.storage.uniqueUpdateCache;
|
||||
if (uniquesCache.contains(p.getUniqueId().toString())) {
|
||||
Verbose.send("Updating uniques");
|
||||
ArmorSMP.getInstance().getManager().uniques.queueUpdate(p);
|
||||
ArmorSMP.getInstance().getManager().io.storage.uniqueUpdateCache.remove(p.getUniqueId().toString());
|
||||
ArmorSMP.getInstance().getManager().io.storage.save();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,6 +22,8 @@ public class PickUpEvent implements CustomListener {
|
||||
|
||||
if (!Unique.isUnique(i)) return;
|
||||
Unique match = Unique.matchUnique(i);
|
||||
e.setCancelled(true);
|
||||
e.getItem().remove();
|
||||
|
||||
ArmorSMP.getInstance().getManager().uniques.setOwner(match,p);
|
||||
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());
|
||||
|
||||
@@ -5,6 +5,7 @@ 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 me.trouper.armorsmp.utils.Verbose;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
@@ -18,7 +19,10 @@ public class UpgradeRedeemEvent implements CustomListener {
|
||||
ItemStack holding = e.getItem();
|
||||
|
||||
if (holding == null || holding.isEmpty()) return;
|
||||
if (!holding.isSimilar(ArmorUpgrade.ARMOR_UGPRADE)) return;
|
||||
Verbose.send("Detected Interact Event Holding: %s", holding.getType());
|
||||
if (!holding.getType().equals(ArmorUpgrade.ARMOR_UGPRADE.getType())) return;
|
||||
if (!holding.hasItemMeta()) return;
|
||||
if (holding.getItemMeta().getCustomModelData() != ArmorUpgrade.ARMOR_UGPRADE.getItemMeta().getCustomModelData()) return;
|
||||
|
||||
final ArmorTier tier = ArmorSMP.getInstance().getManager().armor.getTier(p);
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package me.trouper.armorsmp.server.systems;
|
||||
|
||||
import me.trouper.armorsmp.ArmorSMP;
|
||||
import me.trouper.armorsmp.data.ArmorTier;
|
||||
import me.trouper.armorsmp.data.io.IO;
|
||||
import me.trouper.armorsmp.data.io.Storage;
|
||||
@@ -16,11 +17,7 @@ import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
public class ArmorBackend {
|
||||
|
||||
private final Storage storage;
|
||||
|
||||
public ArmorBackend(IO io) {
|
||||
storage = io.storage;
|
||||
}
|
||||
private final Storage storage = ArmorSMP.getInstance().getManager().io.storage;
|
||||
|
||||
public boolean shouldTransferEnchants(OfflinePlayer target, ArmorTier request) {
|
||||
final ArmorTier current = getTier(target);
|
||||
@@ -51,7 +48,7 @@ public class ArmorBackend {
|
||||
}
|
||||
|
||||
public boolean upTier(OfflinePlayer target) {
|
||||
int numeric = storage.userData.playerTiers.computeIfAbsent(target.getUniqueId().toString(),tier->ArmorTier.NONE).getNumeric();
|
||||
int numeric = storage.userData.playerTiers.getOrDefault(target.getUniqueId().toString(),ArmorTier.NONE).getNumeric();
|
||||
Verbose.send("Upgrading %s, current numeric: %s",target.getName(),numeric);
|
||||
if (numeric > 4) return false;
|
||||
numeric++;
|
||||
@@ -166,13 +163,14 @@ public class ArmorBackend {
|
||||
}
|
||||
}
|
||||
|
||||
public void queueUpdate(OfflinePlayer target, boolean 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 void dropUniqueArmor(Player target) {
|
||||
public synchronized void dropUniqueArmor(Player target) {
|
||||
final Map<Unique, String> uniques = storage.uniques.owners;
|
||||
if (!uniques.containsValue(target.getUniqueId().toString())) return;
|
||||
|
||||
@@ -186,7 +184,12 @@ public class ArmorBackend {
|
||||
storage.uniques.owners.remove(unique);
|
||||
//target.getLocation().getWorld().dropItem(target.getLocation(),unique.getInGameItem());
|
||||
}
|
||||
if (unique.equals(Unique.CHESTPLATE)) {
|
||||
target.getLocation().getWorld().dropItem(target.getLocation(),new ItemStack(Material.DRAGON_EGG));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
ArmorSMP.getInstance().getManager().io.storage.save();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,13 +8,10 @@ import org.bukkit.entity.Player;
|
||||
|
||||
public class Broadcaster {
|
||||
|
||||
private final IO io;
|
||||
|
||||
public Broadcaster(IO io) {
|
||||
this.io = io;
|
||||
}
|
||||
private final IO io = ArmorSMP.getInstance().getManager().io;
|
||||
|
||||
public void broadcastTip() {
|
||||
if (!io.config.tips.broadcastTips) return;
|
||||
String tip = new Randomizer().getRandomElement(io.config.tips.tipList);
|
||||
for (Player onlinePlayer : ArmorSMP.getInstance().getServer().getOnlinePlayers()) {
|
||||
if (ArmorSMP.getInstance().getManager().io.storage.userData.tipsDisabled.contains(onlinePlayer.getUniqueId().toString())) continue;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package me.trouper.armorsmp.server.systems;
|
||||
|
||||
import me.trouper.armorsmp.ArmorSMP;
|
||||
import me.trouper.armorsmp.data.io.IO;
|
||||
import me.trouper.armorsmp.data.io.Storage;
|
||||
import org.bukkit.entity.Player;
|
||||
@@ -9,11 +10,7 @@ import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
public class TrustBackend {
|
||||
private final Storage storage;
|
||||
|
||||
public TrustBackend(IO io) {
|
||||
storage = io.storage;
|
||||
}
|
||||
private final Storage storage = ArmorSMP.getInstance().getManager().io.storage;
|
||||
|
||||
public boolean addTrust(Player truster, UUID trustee) {
|
||||
Set<String> trustees = getTrustees(truster);
|
||||
@@ -32,7 +29,7 @@ public class TrustBackend {
|
||||
}
|
||||
|
||||
public Set<String> getTrustees(Player target) {
|
||||
return storage.userData.playerTrust.getOrDefault(target.getUniqueId(),new HashSet<>());
|
||||
return storage.userData.playerTrust.getOrDefault(target.getUniqueId().toString(),new HashSet<>());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ 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.utils.Verbose;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
@@ -12,11 +13,7 @@ import java.util.UUID;
|
||||
|
||||
public class UniquesBackend {
|
||||
|
||||
private final Storage storage;
|
||||
|
||||
public UniquesBackend(IO io) {
|
||||
storage = io.storage;
|
||||
}
|
||||
private final Storage storage = ArmorSMP.getInstance().getManager().io.storage;
|
||||
|
||||
private void updateUniques() {
|
||||
ArmorSMP.getInstance().getServer().getOnlinePlayers().forEach(this::updateUniques);
|
||||
@@ -24,8 +21,18 @@ public class UniquesBackend {
|
||||
|
||||
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())) {
|
||||
if (!p.getInventory().contains(unique.getInGameItem())) p.getInventory().addItem(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())) {
|
||||
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());
|
||||
}
|
||||
@@ -35,19 +42,27 @@ public class UniquesBackend {
|
||||
public void queueUpdate(OfflinePlayer target) {
|
||||
if (target.getPlayer() != null && target.isOnline()) updateUniques();
|
||||
else storage.uniqueUpdateCache.add(target.getUniqueId().toString());
|
||||
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) {
|
||||
storage.uniques.owners.remove(dropped);
|
||||
ArmorSMP.getInstance().getManager().io.storage.save();
|
||||
}
|
||||
|
||||
public void dropUniqueItems(Player p) {
|
||||
storage.uniques.owners.forEach((unique,owner)->{
|
||||
if (unique.equals(Unique.MACE) || unique.equals(Unique.SWORD) || unique.equals(Unique.AXE) && owner.equals(p.getUniqueId().toString()) && !p.getInventory().contains(unique.getInGameItem())) {
|
||||
storage.uniques.owners.remove(unique);
|
||||
}
|
||||
});
|
||||
ArmorSMP.getInstance().getManager().io.storage.save();
|
||||
}
|
||||
|
||||
public void applyPersistence() {
|
||||
|
||||
@@ -5,8 +5,13 @@ import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class WorldUtils {
|
||||
|
||||
public static boolean isDroppable(ItemStack i) {
|
||||
return isArmor(i) && !isUnique(i);
|
||||
public static boolean notDroppable(ItemStack i) {
|
||||
return isArmor(i) && !isUnique(i) && !isChestplateUnique(i);
|
||||
}
|
||||
|
||||
private static boolean isChestplateUnique(ItemStack i) {
|
||||
Material m = i.getType();
|
||||
return m.equals(Material.NETHERITE_CHESTPLATE);
|
||||
}
|
||||
|
||||
public static boolean isArmor(ItemStack i) {
|
||||
|
||||
@@ -23,3 +23,5 @@ commands:
|
||||
description: Utilize unique abilities.
|
||||
aliases:
|
||||
- a
|
||||
tips:
|
||||
description: Toggle tips in messages.
|
||||
Reference in New Issue
Block a user