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"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="DiscordProjectSettings">
|
<component name="DiscordProjectSettings">
|
||||||
<option name="show" value="ASK" />
|
<option name="show" value="PROJECT_FILES" />
|
||||||
<option name="description" value="" />
|
<option name="description" value="" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
||||||
4
.idea/modules/ArmorSMP.main.iml
generated
4
.idea/modules/ArmorSMP.main.iml
generated
@@ -11,8 +11,4 @@
|
|||||||
</configuration>
|
</configuration>
|
||||||
</facet>
|
</facet>
|
||||||
</component>
|
</component>
|
||||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
|
||||||
<exclude-output />
|
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
|
||||||
</component>
|
|
||||||
</module>
|
</module>
|
||||||
@@ -28,7 +28,7 @@ repositories {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compileOnly("io.papermc.paper:paper-api:1.21.4-R0.1-SNAPSHOT")
|
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
|
def targetJavaVersion = 21
|
||||||
|
|||||||
@@ -23,3 +23,5 @@ commands:
|
|||||||
description: Utilize unique abilities.
|
description: Utilize unique abilities.
|
||||||
aliases:
|
aliases:
|
||||||
- a
|
- a
|
||||||
|
tips:
|
||||||
|
description: Toggle tips in messages.
|
||||||
Binary file not shown.
Binary file not shown.
@@ -21,110 +21,90 @@ public enum ArmorTier {
|
|||||||
ItemBuilder.create()
|
ItemBuilder.create()
|
||||||
.material(Material.LEATHER_HELMET)
|
.material(Material.LEATHER_HELMET)
|
||||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
.unbreakable(true)
|
|
||||||
.build(),
|
.build(),
|
||||||
ItemBuilder.create()
|
ItemBuilder.create()
|
||||||
.material(Material.LEATHER_CHESTPLATE)
|
.material(Material.LEATHER_CHESTPLATE)
|
||||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
.unbreakable(true)
|
|
||||||
.build(),
|
.build(),
|
||||||
ItemBuilder.create()
|
ItemBuilder.create()
|
||||||
.material(Material.LEATHER_LEGGINGS)
|
.material(Material.LEATHER_LEGGINGS)
|
||||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
.unbreakable(true)
|
|
||||||
.build(),
|
.build(),
|
||||||
ItemBuilder.create()
|
ItemBuilder.create()
|
||||||
.material(Material.LEATHER_BOOTS)
|
.material(Material.LEATHER_BOOTS)
|
||||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
.unbreakable(true)
|
|
||||||
.build()
|
.build()
|
||||||
),
|
),
|
||||||
CHAINMAIL(2,
|
CHAINMAIL(2,
|
||||||
ItemBuilder.create()
|
ItemBuilder.create()
|
||||||
.material(Material.CHAINMAIL_HELMET)
|
.material(Material.CHAINMAIL_HELMET)
|
||||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
.unbreakable(true)
|
|
||||||
.build(),
|
.build(),
|
||||||
ItemBuilder.create()
|
ItemBuilder.create()
|
||||||
.material(Material.CHAINMAIL_CHESTPLATE)
|
.material(Material.CHAINMAIL_CHESTPLATE)
|
||||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
.unbreakable(true)
|
|
||||||
.build(),
|
.build(),
|
||||||
ItemBuilder.create()
|
ItemBuilder.create()
|
||||||
.material(Material.CHAINMAIL_LEGGINGS)
|
.material(Material.CHAINMAIL_LEGGINGS)
|
||||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
.unbreakable(true)
|
|
||||||
.build(),
|
.build(),
|
||||||
ItemBuilder.create()
|
ItemBuilder.create()
|
||||||
.material(Material.CHAINMAIL_BOOTS)
|
.material(Material.CHAINMAIL_BOOTS)
|
||||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
.unbreakable(true)
|
|
||||||
.build()
|
.build()
|
||||||
),
|
),
|
||||||
GOLD(3,
|
GOLD(3,
|
||||||
ItemBuilder.create()
|
ItemBuilder.create()
|
||||||
.material(Material.GOLDEN_HELMET)
|
.material(Material.GOLDEN_HELMET)
|
||||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
.unbreakable(true)
|
|
||||||
.build(),
|
.build(),
|
||||||
ItemBuilder.create()
|
ItemBuilder.create()
|
||||||
.material(Material.GOLDEN_CHESTPLATE)
|
.material(Material.GOLDEN_CHESTPLATE)
|
||||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
.unbreakable(true)
|
|
||||||
.build(),
|
.build(),
|
||||||
ItemBuilder.create()
|
ItemBuilder.create()
|
||||||
.material(Material.GOLDEN_LEGGINGS)
|
.material(Material.GOLDEN_LEGGINGS)
|
||||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
.unbreakable(true)
|
|
||||||
.build(),
|
.build(),
|
||||||
ItemBuilder.create()
|
ItemBuilder.create()
|
||||||
.material(Material.GOLDEN_BOOTS)
|
.material(Material.GOLDEN_BOOTS)
|
||||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
.unbreakable(true)
|
|
||||||
.build()
|
.build()
|
||||||
),
|
),
|
||||||
IRON(4,
|
IRON(4,
|
||||||
ItemBuilder.create()
|
ItemBuilder.create()
|
||||||
.material(Material.IRON_HELMET)
|
.material(Material.IRON_HELMET)
|
||||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
.unbreakable(true)
|
|
||||||
.build(),
|
.build(),
|
||||||
ItemBuilder.create()
|
ItemBuilder.create()
|
||||||
.material(Material.IRON_CHESTPLATE)
|
.material(Material.IRON_CHESTPLATE)
|
||||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
.unbreakable(true)
|
|
||||||
.build(),
|
.build(),
|
||||||
ItemBuilder.create()
|
ItemBuilder.create()
|
||||||
.material(Material.IRON_LEGGINGS)
|
.material(Material.IRON_LEGGINGS)
|
||||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
.unbreakable(true)
|
|
||||||
.build(),
|
.build(),
|
||||||
ItemBuilder.create()
|
ItemBuilder.create()
|
||||||
.material(Material.IRON_BOOTS)
|
.material(Material.IRON_BOOTS)
|
||||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
.unbreakable(true)
|
|
||||||
.build()
|
.build()
|
||||||
),
|
),
|
||||||
DIAMOND(5,
|
DIAMOND(5,
|
||||||
ItemBuilder.create()
|
ItemBuilder.create()
|
||||||
.material(Material.DIAMOND_HELMET)
|
.material(Material.DIAMOND_HELMET)
|
||||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
.unbreakable(true)
|
|
||||||
.build(),
|
.build(),
|
||||||
ItemBuilder.create()
|
ItemBuilder.create()
|
||||||
.material(Material.DIAMOND_CHESTPLATE)
|
.material(Material.DIAMOND_CHESTPLATE)
|
||||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
.unbreakable(true)
|
|
||||||
.build(),
|
.build(),
|
||||||
ItemBuilder.create()
|
ItemBuilder.create()
|
||||||
.material(Material.DIAMOND_LEGGINGS)
|
.material(Material.DIAMOND_LEGGINGS)
|
||||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
.unbreakable(true)
|
|
||||||
.build(),
|
.build(),
|
||||||
ItemBuilder.create()
|
ItemBuilder.create()
|
||||||
.material(Material.DIAMOND_BOOTS)
|
.material(Material.DIAMOND_BOOTS)
|
||||||
.enchant(Enchantment.BINDING_CURSE, 1)
|
.enchant(Enchantment.BINDING_CURSE, 1)
|
||||||
.unbreakable(true)
|
|
||||||
.build()
|
.build()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import io.github.itzispyder.pdk.plugin.builders.ItemBuilder;
|
|||||||
import io.github.itzispyder.pdk.utils.raytracers.CustomDisplayRaytracer;
|
import io.github.itzispyder.pdk.utils.raytracers.CustomDisplayRaytracer;
|
||||||
import me.trouper.armorsmp.ArmorSMP;
|
import me.trouper.armorsmp.ArmorSMP;
|
||||||
import me.trouper.armorsmp.utils.Text;
|
import me.trouper.armorsmp.utils.Text;
|
||||||
|
import me.trouper.armorsmp.utils.Verbose;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.Particle;
|
import org.bukkit.Particle;
|
||||||
@@ -191,14 +192,23 @@ public enum Unique {
|
|||||||
public static boolean isUnique(ItemStack i) {
|
public static boolean isUnique(ItemStack i) {
|
||||||
for (Unique value : values()) {
|
for (Unique value : values()) {
|
||||||
if (value.getInGameItem().isSimilar(i)) return true;
|
if (value.getInGameItem().isSimilar(i)) return true;
|
||||||
|
if (i.getType().equals(Material.DRAGON_EGG)) return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Unique matchUnique(ItemStack i) {
|
public static Unique matchUnique(ItemStack i) {
|
||||||
|
Verbose.send("Matching Unique, Item Type: %s",i.getType());
|
||||||
Unique match = null;
|
Unique match = null;
|
||||||
for (Unique value : values()) {
|
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;
|
return match;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package me.trouper.armorsmp.data.io;
|
|||||||
|
|
||||||
import io.github.itzispyder.pdk.utils.misc.config.JsonSerializable;
|
import io.github.itzispyder.pdk.utils.misc.config.JsonSerializable;
|
||||||
import me.trouper.armorsmp.ArmorSMP;
|
import me.trouper.armorsmp.ArmorSMP;
|
||||||
|
import me.trouper.armorsmp.utils.Verbose;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@@ -16,6 +17,12 @@ public class Config implements JsonSerializable<Config> {
|
|||||||
return ArmorSMP.getInstance().getManager().io.CONFIG_FILE;
|
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 maceCraftingEnabled = true;
|
||||||
public boolean netherEnabled = true;
|
public boolean netherEnabled = true;
|
||||||
public boolean endEnabled = true;
|
public boolean endEnabled = true;
|
||||||
|
|||||||
@@ -26,9 +26,6 @@ public class IO {
|
|||||||
ArmorSMP.getInstance().getLogger().info("Loading all IO Files");
|
ArmorSMP.getInstance().getLogger().info("Loading all IO Files");
|
||||||
config = JsonSerializable.load(CONFIG_FILE,Config.class,new Config());
|
config = JsonSerializable.load(CONFIG_FILE,Config.class,new Config());
|
||||||
storage = JsonSerializable.load(STORAGE_FILE,Storage.class,new Storage());
|
storage = JsonSerializable.load(STORAGE_FILE,Storage.class,new Storage());
|
||||||
|
|
||||||
config.save();
|
|
||||||
storage.save();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void saveAll() {
|
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.ArmorSMP;
|
||||||
import me.trouper.armorsmp.data.ArmorTier;
|
import me.trouper.armorsmp.data.ArmorTier;
|
||||||
import me.trouper.armorsmp.data.Unique;
|
import me.trouper.armorsmp.data.Unique;
|
||||||
|
import me.trouper.armorsmp.utils.Verbose;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -19,18 +20,24 @@ public class Storage implements JsonSerializable<Storage> {
|
|||||||
return ArmorSMP.getInstance().getManager().io.STORAGE_FILE;
|
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 UserData userData = new UserData();
|
||||||
public Uniques uniques = new Uniques();
|
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 Set<String> uniqueUpdateCache = new HashSet<>();
|
||||||
|
|
||||||
public class Uniques {
|
public class Uniques {
|
||||||
public Map<Unique, String> owners = new ConcurrentHashMap<>();
|
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, ArmorTier> playerTiers = new ConcurrentHashMap<>();
|
public Map<String, ArmorTier> playerTiers = new HashMap<>();
|
||||||
public Map<String, Set<String>> playerTrust = 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.data.io.IO;
|
||||||
import me.trouper.armorsmp.server.commands.AbilityCommand;
|
import me.trouper.armorsmp.server.commands.AbilityCommand;
|
||||||
import me.trouper.armorsmp.server.commands.AdminCommand;
|
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.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.*;
|
||||||
@@ -24,16 +25,16 @@ public class Manager {
|
|||||||
|
|
||||||
public Manager() {
|
public Manager() {
|
||||||
io = new IO();
|
io = new IO();
|
||||||
|
|
||||||
armor = new ArmorBackend(io);
|
|
||||||
trust = new TrustBackend(io);
|
|
||||||
uniques = new UniquesBackend(io);
|
|
||||||
broadcaster = new Broadcaster(io);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void init() {
|
public void init() {
|
||||||
io.loadAll();
|
io.loadAll();
|
||||||
|
|
||||||
|
armor = new ArmorBackend();
|
||||||
|
trust = new TrustBackend();
|
||||||
|
uniques = new UniquesBackend();
|
||||||
|
broadcaster = new Broadcaster();
|
||||||
|
|
||||||
registerCommands();
|
registerCommands();
|
||||||
registerEvents();
|
registerEvents();
|
||||||
registerCrafting();
|
registerCrafting();
|
||||||
@@ -51,6 +52,9 @@ public class Manager {
|
|||||||
new UpgradeRedeemEvent().register();
|
new UpgradeRedeemEvent().register();
|
||||||
new PickUpEvent().register();
|
new PickUpEvent().register();
|
||||||
new ItemDestroyEvents().register();
|
new ItemDestroyEvents().register();
|
||||||
|
new TrustEvents().register();
|
||||||
|
new DropItemEvent().register();
|
||||||
|
new ContainerEvents().register();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void registerCommands() {
|
private void registerCommands() {
|
||||||
@@ -58,6 +62,7 @@ public class Manager {
|
|||||||
new AdminCommand().register();
|
new AdminCommand().register();
|
||||||
new TrustCommand().register();
|
new TrustCommand().register();
|
||||||
new AbilityCommand().register();
|
new AbilityCommand().register();
|
||||||
|
new TipsCommand().register();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void registerCrafting() {
|
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()));
|
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;
|
return;
|
||||||
}
|
}
|
||||||
if (p.getUniqueId().toString().equals(ArmorSMP.getInstance().getManager().io.storage.uniques.owners.get(piece))) {
|
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());
|
Text.sendMessage(false, Text.Pallet.WARNING, sender, "You do not own the {0}.",piece.getCanonical());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (abilityCooldown.isOnCooldown(Pair.of(piece,p.getUniqueId()))) {
|
if (abilityCooldown.isOnCooldown(Pair.of(piece,p.getUniqueId()))) {
|
||||||
@@ -40,6 +40,7 @@ public class AbilityCommand implements CustomCommand {
|
|||||||
}
|
}
|
||||||
piece.getAbility().accept(p);
|
piece.getAbility().accept(p);
|
||||||
abilityCooldown.addCooldown(Pair.of(piece,p.getUniqueId()),piece.getAbilityCooldownTicks() * 50L);
|
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
|
@Override
|
||||||
|
|||||||
@@ -25,11 +25,12 @@ public class AdminCommand implements CustomCommand {
|
|||||||
@Override
|
@Override
|
||||||
public void dispatchCommand(CommandSender sender, Command command, String label, Args args) {
|
public void dispatchCommand(CommandSender sender, Command command, String label, Args args) {
|
||||||
if (args.getSize() < 1) {
|
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;
|
return;
|
||||||
}
|
}
|
||||||
String sub = args.get(0).toString();
|
String sub = args.get(0).toString();
|
||||||
switch (sub) {
|
switch (sub) {
|
||||||
|
case "reload" -> handleReload(sender,args);
|
||||||
case "change" -> handleChange(sender, args);
|
case "change" -> handleChange(sender, args);
|
||||||
case "give" -> handleGive(sender, args);
|
case "give" -> handleGive(sender, args);
|
||||||
case "toggle" -> handleToggle(sender, args);
|
case "toggle" -> handleToggle(sender, args);
|
||||||
@@ -63,6 +64,11 @@ public class AdminCommand implements CustomCommand {
|
|||||||
.then(b.arg("end","nether","mace","debug")));
|
.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) {
|
private void handleChange(CommandSender sender, Args args) {
|
||||||
if (args.getSize() < 3) {
|
if (args.getSize() < 3) {
|
||||||
Text.sendError(sender, "Usage: /armorsmp change <tier> <player>");
|
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.Text;
|
||||||
import me.trouper.armorsmp.utils.Verbose;
|
import me.trouper.armorsmp.utils.Verbose;
|
||||||
import me.trouper.armorsmp.utils.WorldUtils;
|
import me.trouper.armorsmp.utils.WorldUtils;
|
||||||
import net.kyori.adventure.text.Component;
|
|
||||||
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;
|
||||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||||
import org.bukkit.event.player.PlayerRespawnEvent;
|
import org.bukkit.event.player.PlayerRespawnEvent;
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
|
|
||||||
public class DeathEvents implements CustomListener {
|
public class DeathEvents implements CustomListener {
|
||||||
|
|
||||||
@@ -22,7 +20,7 @@ public class DeathEvents implements CustomListener {
|
|||||||
Player p = e.getEntity();
|
Player p = e.getEntity();
|
||||||
final ArmorTier tier = ArmorSMP.getInstance().getManager().armor.getTier(p);
|
final ArmorTier tier = ArmorSMP.getInstance().getManager().armor.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::isDroppable);
|
e.getDrops().removeIf(WorldUtils::notDroppable);
|
||||||
|
|
||||||
if (tier.equals(ArmorTier.NONE)) {
|
if (tier.equals(ArmorTier.NONE)) {
|
||||||
Verbose.send("Tier was 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) {
|
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.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.userData.playerTrust.putIfAbsent(p.getUniqueId().toString(), new HashSet<>(Set.of(p.getUniqueId().toString())));
|
||||||
|
ArmorSMP.getInstance().getManager().io.storage.save();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleUpdates(Player p) {
|
private void handleUpdates(Player p) {
|
||||||
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;
|
||||||
if (armorCache.containsKey(p.getUniqueId().toString()) || !ArmorSMP.getInstance().getManager().armor.verifyArmor(p)) {
|
if (!ArmorSMP.getInstance().getManager().armor.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().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.armorUpdateCache.remove(p.getUniqueId().toString());
|
||||||
|
ArmorSMP.getInstance().getManager().io.storage.save();
|
||||||
}
|
}
|
||||||
final Set<String> uniquesCache = ArmorSMP.getInstance().getManager().io.storage.uniqueUpdateCache;
|
final Set<String> uniquesCache = ArmorSMP.getInstance().getManager().io.storage.uniqueUpdateCache;
|
||||||
if (uniquesCache.contains(p.getUniqueId().toString())) {
|
if (uniquesCache.contains(p.getUniqueId().toString())) {
|
||||||
Verbose.send("Updating uniques");
|
Verbose.send("Updating uniques");
|
||||||
ArmorSMP.getInstance().getManager().uniques.queueUpdate(p);
|
ArmorSMP.getInstance().getManager().uniques.queueUpdate(p);
|
||||||
ArmorSMP.getInstance().getManager().io.storage.uniqueUpdateCache.remove(p.getUniqueId().toString());
|
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;
|
if (!Unique.isUnique(i)) return;
|
||||||
Unique match = Unique.matchUnique(i);
|
Unique match = Unique.matchUnique(i);
|
||||||
|
e.setCancelled(true);
|
||||||
|
e.getItem().remove();
|
||||||
|
|
||||||
ArmorSMP.getInstance().getManager().uniques.setOwner(match,p);
|
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());
|
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.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 org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
@@ -18,7 +19,10 @@ public class UpgradeRedeemEvent implements CustomListener {
|
|||||||
ItemStack holding = e.getItem();
|
ItemStack holding = e.getItem();
|
||||||
|
|
||||||
if (holding == null || holding.isEmpty()) return;
|
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);
|
final ArmorTier tier = ArmorSMP.getInstance().getManager().armor.getTier(p);
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package me.trouper.armorsmp.server.systems;
|
package me.trouper.armorsmp.server.systems;
|
||||||
|
|
||||||
|
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.IO;
|
||||||
import me.trouper.armorsmp.data.io.Storage;
|
import me.trouper.armorsmp.data.io.Storage;
|
||||||
@@ -16,11 +17,7 @@ import java.util.concurrent.atomic.AtomicReference;
|
|||||||
|
|
||||||
public class ArmorBackend {
|
public class ArmorBackend {
|
||||||
|
|
||||||
private final Storage storage;
|
private final Storage storage = ArmorSMP.getInstance().getManager().io.storage;
|
||||||
|
|
||||||
public ArmorBackend(IO io) {
|
|
||||||
storage = io.storage;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean shouldTransferEnchants(OfflinePlayer target, ArmorTier request) {
|
public boolean shouldTransferEnchants(OfflinePlayer target, ArmorTier request) {
|
||||||
final ArmorTier current = getTier(target);
|
final ArmorTier current = getTier(target);
|
||||||
@@ -51,7 +48,7 @@ public class ArmorBackend {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean upTier(OfflinePlayer target) {
|
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);
|
Verbose.send("Upgrading %s, current numeric: %s",target.getName(),numeric);
|
||||||
if (numeric > 4) return false;
|
if (numeric > 4) return false;
|
||||||
numeric++;
|
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());
|
Verbose.send("Queueing update for %s",target.getName());
|
||||||
if (target.getPlayer() != null && target.isOnline()) updateArmor(target.getPlayer(), transferEnchants);
|
if (target.getPlayer() != null && target.isOnline()) updateArmor(target.getPlayer(), transferEnchants);
|
||||||
else storage.armorUpdateCache.put(target.getUniqueId().toString(),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;
|
final Map<Unique, String> uniques = storage.uniques.owners;
|
||||||
if (!uniques.containsValue(target.getUniqueId().toString())) return;
|
if (!uniques.containsValue(target.getUniqueId().toString())) return;
|
||||||
|
|
||||||
@@ -186,7 +184,12 @@ public class ArmorBackend {
|
|||||||
storage.uniques.owners.remove(unique);
|
storage.uniques.owners.remove(unique);
|
||||||
//target.getLocation().getWorld().dropItem(target.getLocation(),unique.getInGameItem());
|
//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 {
|
public class Broadcaster {
|
||||||
|
|
||||||
private final IO io;
|
private final IO io = ArmorSMP.getInstance().getManager().io;
|
||||||
|
|
||||||
public Broadcaster(IO io) {
|
|
||||||
this.io = io;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void broadcastTip() {
|
public void broadcastTip() {
|
||||||
|
if (!io.config.tips.broadcastTips) return;
|
||||||
String tip = new Randomizer().getRandomElement(io.config.tips.tipList);
|
String tip = new Randomizer().getRandomElement(io.config.tips.tipList);
|
||||||
for (Player onlinePlayer : ArmorSMP.getInstance().getServer().getOnlinePlayers()) {
|
for (Player onlinePlayer : ArmorSMP.getInstance().getServer().getOnlinePlayers()) {
|
||||||
if (ArmorSMP.getInstance().getManager().io.storage.userData.tipsDisabled.contains(onlinePlayer.getUniqueId().toString())) continue;
|
if (ArmorSMP.getInstance().getManager().io.storage.userData.tipsDisabled.contains(onlinePlayer.getUniqueId().toString())) continue;
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package me.trouper.armorsmp.server.systems;
|
package me.trouper.armorsmp.server.systems;
|
||||||
|
|
||||||
|
import me.trouper.armorsmp.ArmorSMP;
|
||||||
import me.trouper.armorsmp.data.io.IO;
|
import me.trouper.armorsmp.data.io.IO;
|
||||||
import me.trouper.armorsmp.data.io.Storage;
|
import me.trouper.armorsmp.data.io.Storage;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@@ -9,11 +10,7 @@ import java.util.Set;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class TrustBackend {
|
public class TrustBackend {
|
||||||
private final Storage storage;
|
private final Storage storage = ArmorSMP.getInstance().getManager().io.storage;
|
||||||
|
|
||||||
public TrustBackend(IO io) {
|
|
||||||
storage = io.storage;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean addTrust(Player truster, UUID trustee) {
|
public boolean addTrust(Player truster, UUID trustee) {
|
||||||
Set<String> trustees = getTrustees(truster);
|
Set<String> trustees = getTrustees(truster);
|
||||||
@@ -32,7 +29,7 @@ public class TrustBackend {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Set<String> getTrustees(Player target) {
|
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.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.data.Unique;
|
||||||
|
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;
|
||||||
@@ -12,11 +13,7 @@ import java.util.UUID;
|
|||||||
|
|
||||||
public class UniquesBackend {
|
public class UniquesBackend {
|
||||||
|
|
||||||
private final Storage storage;
|
private final Storage storage = ArmorSMP.getInstance().getManager().io.storage;
|
||||||
|
|
||||||
public UniquesBackend(IO io) {
|
|
||||||
storage = io.storage;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateUniques() {
|
private void updateUniques() {
|
||||||
ArmorSMP.getInstance().getServer().getOnlinePlayers().forEach(this::updateUniques);
|
ArmorSMP.getInstance().getServer().getOnlinePlayers().forEach(this::updateUniques);
|
||||||
@@ -24,8 +21,18 @@ public class UniquesBackend {
|
|||||||
|
|
||||||
public void updateUniques(Player p) {
|
public void updateUniques(Player p) {
|
||||||
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())) {
|
||||||
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 {
|
} else {
|
||||||
p.getInventory().removeItemAnySlot(unique.getInGameItem());
|
p.getInventory().removeItemAnySlot(unique.getInGameItem());
|
||||||
}
|
}
|
||||||
@@ -35,19 +42,27 @@ public class UniquesBackend {
|
|||||||
public void queueUpdate(OfflinePlayer target) {
|
public void queueUpdate(OfflinePlayer target) {
|
||||||
if (target.getPlayer() != null && target.isOnline()) updateUniques();
|
if (target.getPlayer() != null && target.isOnline()) updateUniques();
|
||||||
else storage.uniqueUpdateCache.add(target.getUniqueId().toString());
|
else storage.uniqueUpdateCache.add(target.getUniqueId().toString());
|
||||||
|
ArmorSMP.getInstance().getManager().io.storage.save();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setOwner(Unique u, OfflinePlayer p) {
|
public void setOwner(Unique u, OfflinePlayer p) {
|
||||||
storage.uniques.owners.put(u,p.getUniqueId().toString());
|
storage.uniques.owners.put(u,p.getUniqueId().toString());
|
||||||
|
ArmorSMP.getInstance().getManager().io.storage.save();
|
||||||
queueUpdate(p);
|
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) {
|
public void dropUniqueItems(Player p) {
|
||||||
storage.uniques.owners.forEach((unique,owner)->{
|
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())) {
|
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);
|
storage.uniques.owners.remove(unique);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
ArmorSMP.getInstance().getManager().io.storage.save();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void applyPersistence() {
|
public void applyPersistence() {
|
||||||
|
|||||||
@@ -5,8 +5,13 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
|
|
||||||
public class WorldUtils {
|
public class WorldUtils {
|
||||||
|
|
||||||
public static boolean isDroppable(ItemStack i) {
|
public static boolean notDroppable(ItemStack i) {
|
||||||
return isArmor(i) && !isUnique(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) {
|
public static boolean isArmor(ItemStack i) {
|
||||||
|
|||||||
@@ -23,3 +23,5 @@ commands:
|
|||||||
description: Utilize unique abilities.
|
description: Utilize unique abilities.
|
||||||
aliases:
|
aliases:
|
||||||
- a
|
- a
|
||||||
|
tips:
|
||||||
|
description: Toggle tips in messages.
|
||||||
Reference in New Issue
Block a user