Added ability command, and prevented unique destruction by lava, cactus, tnt, etc...
This commit is contained in:
@@ -14,7 +14,7 @@ public final class ArmorSMP extends JavaPlugin {
|
|||||||
getLogger().info("Instantiating Plugin");
|
getLogger().info("Instantiating Plugin");
|
||||||
instance = this;
|
instance = this;
|
||||||
|
|
||||||
getLogger().info("Initializing Manager");
|
getLogger().info("Instantiating Manager");
|
||||||
manager = new Manager();
|
manager = new Manager();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -23,6 +23,7 @@ public final class ArmorSMP extends JavaPlugin {
|
|||||||
getLogger().info("Initializing PDK");
|
getLogger().info("Initializing PDK");
|
||||||
PDK.init(this);
|
PDK.init(this);
|
||||||
|
|
||||||
|
getLogger().info("Initializing Manager");
|
||||||
manager.init();
|
manager.init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ import org.bukkit.enchantments.Enchantment;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
public enum ArmorTier {
|
public enum ArmorTier {
|
||||||
NONE(0,
|
NONE(0,
|
||||||
new ItemStack(Material.AIR),
|
new ItemStack(Material.AIR),
|
||||||
@@ -186,4 +188,5 @@ public enum ArmorTier {
|
|||||||
public ItemStack getBoots() {
|
public ItemStack getBoots() {
|
||||||
return boots;
|
return boots;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,12 @@ import io.github.itzispyder.pdk.plugin.builders.ItemBuilder;
|
|||||||
import me.trouper.armorsmp.utils.Text;
|
import me.trouper.armorsmp.utils.Text;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.enchantments.Enchantment;
|
import org.bukkit.enchantments.Enchantment;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.potion.PotionEffect;
|
||||||
|
import org.bukkit.potion.PotionEffectType;
|
||||||
|
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
public enum Unique {
|
public enum Unique {
|
||||||
HELMET(ItemBuilder.create()
|
HELMET(ItemBuilder.create()
|
||||||
@@ -20,7 +25,11 @@ public enum Unique {
|
|||||||
.enchant(Enchantment.AQUA_AFFINITY,1)
|
.enchant(Enchantment.AQUA_AFFINITY,1)
|
||||||
.customModelData(2)
|
.customModelData(2)
|
||||||
.build(),
|
.build(),
|
||||||
"Netherite Helmet"),
|
"Netherite Helmet", (p) -> {
|
||||||
|
p.addPotionEffect(new PotionEffect(PotionEffectType.FIRE_RESISTANCE,21,1,true,false,false));
|
||||||
|
p.addPotionEffect(new PotionEffect(PotionEffectType.HEALTH_BOOST,25,3,true,false,false));
|
||||||
|
}, (p) -> {
|
||||||
|
}, 50),
|
||||||
CHESTPLATE(ItemBuilder.create()
|
CHESTPLATE(ItemBuilder.create()
|
||||||
.material(Material.NETHERITE_CHESTPLATE)
|
.material(Material.NETHERITE_CHESTPLATE)
|
||||||
.lore(Text.legacyColor("&bAbilities:"))
|
.lore(Text.legacyColor("&bAbilities:"))
|
||||||
@@ -33,7 +42,11 @@ public enum Unique {
|
|||||||
.enchant(Enchantment.MENDING,1)
|
.enchant(Enchantment.MENDING,1)
|
||||||
.customModelData(3)
|
.customModelData(3)
|
||||||
.build(),
|
.build(),
|
||||||
"Dragon Egg"),
|
"Dragon Egg", (p) -> {
|
||||||
|
p.addPotionEffect(new PotionEffect(PotionEffectType.STRENGTH,21,0,true,false,false));
|
||||||
|
p.addPotionEffect(new PotionEffect(PotionEffectType.RESISTANCE,21,0,true,false,false));
|
||||||
|
}, (p) -> {
|
||||||
|
}, 50),
|
||||||
LEGGINGS(ItemBuilder.create()
|
LEGGINGS(ItemBuilder.create()
|
||||||
.material(Material.NETHERITE_LEGGINGS)
|
.material(Material.NETHERITE_LEGGINGS)
|
||||||
.lore(Text.legacyColor("&bAbilities:"))
|
.lore(Text.legacyColor("&bAbilities:"))
|
||||||
@@ -46,7 +59,12 @@ public enum Unique {
|
|||||||
.enchant(Enchantment.SWIFT_SNEAK,3)
|
.enchant(Enchantment.SWIFT_SNEAK,3)
|
||||||
.customModelData(4)
|
.customModelData(4)
|
||||||
.build(),
|
.build(),
|
||||||
"Netherite Leggings"),
|
"Netherite Leggings", (p) -> {
|
||||||
|
p.addPotionEffect(new PotionEffect(PotionEffectType.RESISTANCE,21,0,true,false,false));
|
||||||
|
|
||||||
|
}, (p) -> {
|
||||||
|
// TODO: yoink shield ability from OgreDupeAlias
|
||||||
|
}, 45),
|
||||||
BOOTS(ItemBuilder.create()
|
BOOTS(ItemBuilder.create()
|
||||||
.material(Material.NETHERITE_BOOTS)
|
.material(Material.NETHERITE_BOOTS)
|
||||||
.lore(Text.legacyColor("&bAbilities:"))
|
.lore(Text.legacyColor("&bAbilities:"))
|
||||||
@@ -61,7 +79,11 @@ public enum Unique {
|
|||||||
.enchant(Enchantment.DEPTH_STRIDER,3)
|
.enchant(Enchantment.DEPTH_STRIDER,3)
|
||||||
.customModelData(5)
|
.customModelData(5)
|
||||||
.build(),
|
.build(),
|
||||||
"Netherite Boots"),
|
"Netherite Boots", (p) -> {
|
||||||
|
p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED,21,0,true,false,false));
|
||||||
|
}, (p) -> {
|
||||||
|
// TODO: Vector math for dash ability
|
||||||
|
}, 50),
|
||||||
MACE(ItemBuilder.create()
|
MACE(ItemBuilder.create()
|
||||||
.material(Material.MACE)
|
.material(Material.MACE)
|
||||||
.lore(Text.legacyColor("&bAbilities:"))
|
.lore(Text.legacyColor("&bAbilities:"))
|
||||||
@@ -72,7 +94,11 @@ public enum Unique {
|
|||||||
.enchant(Enchantment.MENDING,1)
|
.enchant(Enchantment.MENDING,1)
|
||||||
.customModelData(6)
|
.customModelData(6)
|
||||||
.build(),
|
.build(),
|
||||||
"Mace"),
|
"Mace", (p) -> {
|
||||||
|
p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED,21,0,true,false,false));
|
||||||
|
}, (p) -> {
|
||||||
|
|
||||||
|
}, 50),
|
||||||
SWORD(ItemBuilder.create()
|
SWORD(ItemBuilder.create()
|
||||||
.material(Material.NETHERITE_SWORD)
|
.material(Material.NETHERITE_SWORD)
|
||||||
.enchant(Enchantment.UNBREAKING,3)
|
.enchant(Enchantment.UNBREAKING,3)
|
||||||
@@ -80,7 +106,10 @@ public enum Unique {
|
|||||||
.enchant(Enchantment.SHARPNESS,5)
|
.enchant(Enchantment.SHARPNESS,5)
|
||||||
.customModelData(7)
|
.customModelData(7)
|
||||||
.build(),
|
.build(),
|
||||||
"Netherite Sword"),
|
"Netherite Sword", (p) -> {
|
||||||
|
}, (p) -> {
|
||||||
|
p.addPotionEffect(new PotionEffect(PotionEffectType.STRENGTH,140,1,true,false,false));
|
||||||
|
}, 50),
|
||||||
AXE(ItemBuilder.create()
|
AXE(ItemBuilder.create()
|
||||||
.material(Material.NETHERITE_AXE)
|
.material(Material.NETHERITE_AXE)
|
||||||
.enchant(Enchantment.UNBREAKING,3)
|
.enchant(Enchantment.UNBREAKING,3)
|
||||||
@@ -89,14 +118,23 @@ public enum Unique {
|
|||||||
.enchant(Enchantment.EFFICIENCY,5)
|
.enchant(Enchantment.EFFICIENCY,5)
|
||||||
.customModelData(8)
|
.customModelData(8)
|
||||||
.build(),
|
.build(),
|
||||||
"Netherite Axe");
|
"Netherite Axe", (p) -> {
|
||||||
|
}, (p) -> {
|
||||||
|
p.addPotionEffect(new PotionEffect(PotionEffectType.HASTE,140,5,true,false,false));
|
||||||
|
}, 50);
|
||||||
|
|
||||||
private final ItemStack inGame;
|
private final ItemStack inGame;
|
||||||
private final String canonical;
|
private final String canonical;
|
||||||
|
private final Consumer<Player> passiveAbility;
|
||||||
|
private final Consumer<Player> ability;
|
||||||
|
private final int abilityCooldownTicks;
|
||||||
|
|
||||||
Unique(ItemStack inGame, String canonical) {
|
Unique(ItemStack inGame, String canonical, Consumer<Player> passiveAbility, Consumer<Player> ability, int abilityCooldownTicks) {
|
||||||
this.inGame = inGame;
|
this.inGame = inGame;
|
||||||
this.canonical = canonical;
|
this.canonical = canonical;
|
||||||
|
this.passiveAbility = passiveAbility;
|
||||||
|
this.ability = ability;
|
||||||
|
this.abilityCooldownTicks = abilityCooldownTicks;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ItemStack getInGameItem() {
|
public ItemStack getInGameItem() {
|
||||||
@@ -121,4 +159,16 @@ public enum Unique {
|
|||||||
public String getCanonical() {
|
public String getCanonical() {
|
||||||
return canonical;
|
return canonical;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Consumer<Player> getAbility() {
|
||||||
|
return ability;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Consumer<Player> getPassiveAbility() {
|
||||||
|
return passiveAbility;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getAbilityCooldownTicks() {
|
||||||
|
return abilityCooldownTicks;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package me.trouper.armorsmp.data;
|
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;
|
||||||
@@ -28,6 +28,8 @@ public class Config implements JsonSerializable<Config> {
|
|||||||
public Tips tips = new Tips();
|
public Tips tips = new Tips();
|
||||||
public class Tips {
|
public class Tips {
|
||||||
public boolean tipsEnabled = true;
|
public boolean tipsEnabled = true;
|
||||||
|
public boolean broadcastTips = true;
|
||||||
|
public int tipInterval = 1200;
|
||||||
public List<String> tipList = Arrays.asList(
|
public List<String> tipList = Arrays.asList(
|
||||||
"Kill players to obtain Armor Upgraders and progress through armor tiers!",
|
"Kill players to obtain Armor Upgraders and progress through armor tiers!",
|
||||||
"Right-click an Armor Upgrader to upgrade your armor to the next tier!",
|
"Right-click an Armor Upgrader to upgrade your armor to the next tier!",
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
package me.trouper.armorsmp.data;
|
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 java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
@@ -22,6 +23,7 @@ public class IO {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void loadAll() {
|
public void loadAll() {
|
||||||
|
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());
|
||||||
|
|
||||||
@@ -30,6 +32,7 @@ public class IO {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void saveAll() {
|
public void saveAll() {
|
||||||
|
ArmorSMP.getInstance().getLogger().info("Saving all IO Files");
|
||||||
config.save();
|
config.save();
|
||||||
storage.save();
|
storage.save();
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,9 @@
|
|||||||
package me.trouper.armorsmp.data;
|
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.data.ArmorTier;
|
||||||
|
import me.trouper.armorsmp.data.Unique;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -1,21 +1,26 @@
|
|||||||
package me.trouper.armorsmp.server;
|
package me.trouper.armorsmp.server;
|
||||||
|
|
||||||
import me.trouper.armorsmp.ArmorSMP;
|
import me.trouper.armorsmp.ArmorSMP;
|
||||||
import me.trouper.armorsmp.data.IO;
|
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.AdminCommand;
|
||||||
import me.trouper.armorsmp.server.commands.TrustCommand;
|
import me.trouper.armorsmp.server.commands.TrustCommand;
|
||||||
import me.trouper.armorsmp.server.crafting.ArmorUpgrade;
|
import me.trouper.armorsmp.server.crafting.ArmorUpgrade;
|
||||||
import me.trouper.armorsmp.server.events.*;
|
import me.trouper.armorsmp.server.events.*;
|
||||||
import me.trouper.armorsmp.server.systems.ArmorBackend;
|
import me.trouper.armorsmp.server.systems.ArmorBackend;
|
||||||
|
import me.trouper.armorsmp.server.systems.Broadcaster;
|
||||||
import me.trouper.armorsmp.server.systems.TrustBackend;
|
import me.trouper.armorsmp.server.systems.TrustBackend;
|
||||||
import me.trouper.armorsmp.server.systems.UniquesBackend;
|
import me.trouper.armorsmp.server.systems.UniquesBackend;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
|
||||||
public class Manager {
|
public class Manager {
|
||||||
// My systems
|
// My systems
|
||||||
public IO io;
|
public IO io;
|
||||||
|
|
||||||
public ArmorBackend armor;
|
public ArmorBackend armor;
|
||||||
public TrustBackend trust;
|
public TrustBackend trust;
|
||||||
public UniquesBackend uniques;
|
public UniquesBackend uniques;
|
||||||
|
public Broadcaster broadcaster;
|
||||||
|
|
||||||
public Manager() {
|
public Manager() {
|
||||||
io = new IO();
|
io = new IO();
|
||||||
@@ -23,15 +28,18 @@ public class Manager {
|
|||||||
armor = new ArmorBackend(io);
|
armor = new ArmorBackend(io);
|
||||||
trust = new TrustBackend(io);
|
trust = new TrustBackend(io);
|
||||||
uniques = new UniquesBackend(io);
|
uniques = new UniquesBackend(io);
|
||||||
|
broadcaster = new Broadcaster(io);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void init() {
|
public void init() {
|
||||||
ArmorSMP.getInstance().getLogger().info("Loading all IO Files");
|
|
||||||
io.loadAll();
|
io.loadAll();
|
||||||
|
|
||||||
registerCommands();
|
registerCommands();
|
||||||
registerEvents();
|
registerEvents();
|
||||||
registerCrafting();
|
registerCrafting();
|
||||||
|
|
||||||
|
Bukkit.getScheduler().runTaskTimer(ArmorSMP.getInstance(),broadcaster::broadcastTip,0,io.config.tips.tipInterval);
|
||||||
|
Bukkit.getScheduler().runTaskTimer(ArmorSMP.getInstance(),uniques::applyPersistence,0,20);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -42,19 +50,21 @@ public class Manager {
|
|||||||
new JoinEvent().register();
|
new JoinEvent().register();
|
||||||
new UpgradeRedeemEvent().register();
|
new UpgradeRedeemEvent().register();
|
||||||
new PickUpEvent().register();
|
new PickUpEvent().register();
|
||||||
|
new ItemDestroyEvents().register();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void registerCommands() {
|
private void registerCommands() {
|
||||||
ArmorSMP.getInstance().getLogger().info("Registering Commands");
|
ArmorSMP.getInstance().getLogger().info("Registering Commands");
|
||||||
new AdminCommand().register();
|
new AdminCommand().register();
|
||||||
new TrustCommand().register();
|
new TrustCommand().register();
|
||||||
|
new AbilityCommand().register();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void registerCrafting() {
|
private void registerCrafting() {
|
||||||
ArmorSMP.getInstance().getLogger().info("Repairing Crafts");
|
ArmorSMP.getInstance().getLogger().info("Registering Crafts");
|
||||||
ArmorUpgrade.removeRecipe();
|
ArmorUpgrade armorUpgrade = new ArmorUpgrade();
|
||||||
|
armorUpgrade.removeRecipe();
|
||||||
ArmorUpgrade.addRecipe();
|
armorUpgrade.addRecipe();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,43 @@
|
|||||||
|
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 io.github.itzispyder.pdk.utils.misc.Cooldown;
|
||||||
|
import io.github.itzispyder.pdk.utils.misc.Pair;
|
||||||
|
import me.trouper.armorsmp.data.Unique;
|
||||||
|
import me.trouper.armorsmp.utils.Text;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
@CommandRegistry(value = "ability", printStackTrace = true, playersOnly = true)
|
||||||
|
public class AbilityCommand implements CustomCommand {
|
||||||
|
|
||||||
|
Cooldown<Pair<Unique, UUID>> abilityCooldown = new Cooldown<>();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void dispatchCommand(CommandSender sender, Command command, String label, Args args) {
|
||||||
|
final Unique piece = args.get(0).toEnum(Unique.class);
|
||||||
|
Player p = (Player) sender;
|
||||||
|
if (piece == null) {
|
||||||
|
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 (abilityCooldown.isOnCooldown(Pair.of(piece,p.getUniqueId()))) {
|
||||||
|
Text.sendMessage(false, Text.Pallet.WARNING, sender, "The ability for your {0} is on cooldown for {1} seconds.",piece.getCanonical(),abilityCooldown.getCooldownSec(Pair.of(piece,p.getUniqueId())));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
piece.getAbility().accept(p);
|
||||||
|
abilityCooldown.addCooldown(Pair.of(piece,p.getUniqueId()),piece.getAbilityCooldownTicks() * 50L);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void dispatchCompletions(CommandSender commandSender, Command command, String label, CompletionBuilder b) {
|
||||||
|
b.then(b.argEnum(Unique.class));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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.Config;
|
import me.trouper.armorsmp.data.io.Config;
|
||||||
import me.trouper.armorsmp.data.Unique;
|
import me.trouper.armorsmp.data.Unique;
|
||||||
import me.trouper.armorsmp.server.crafting.ArmorUpgrade;
|
import me.trouper.armorsmp.server.crafting.ArmorUpgrade;
|
||||||
import me.trouper.armorsmp.utils.Text;
|
import me.trouper.armorsmp.utils.Text;
|
||||||
@@ -30,150 +30,11 @@ public class AdminCommand implements CustomCommand {
|
|||||||
}
|
}
|
||||||
String sub = args.get(0).toString();
|
String sub = args.get(0).toString();
|
||||||
switch (sub) {
|
switch (sub) {
|
||||||
case "change" -> {
|
case "change" -> handleChange(sender, args);
|
||||||
if (args.getSize() < 3) {
|
case "give" -> handleGive(sender, args);
|
||||||
Text.sendError(sender, "Usage: /armorsmp change <tier> <player>");
|
case "toggle" -> handleToggle(sender, args);
|
||||||
return;
|
case "reset" -> handleReset(sender, args);
|
||||||
}
|
case "remove" -> handleRemove(sender, args);
|
||||||
final String tierName = args.get(1).toString();
|
|
||||||
final String playerName = args.get(2).toString();
|
|
||||||
final OfflinePlayer target = Bukkit.getPlayer(playerName);
|
|
||||||
|
|
||||||
if (target == null) {
|
|
||||||
Text.sendError(sender, "Player not found or offline.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
ArmorTier tier = ArmorTier.valueOf(tierName.toUpperCase());
|
|
||||||
ArmorSMP.getInstance().getManager().armor.setTier(target,tier);
|
|
||||||
|
|
||||||
Text.sendMessage(false, Text.Pallet.SUCCESS, sender,"Changed armor tier to {0} for {1}",tier,target.getName());
|
|
||||||
} catch (IllegalArgumentException e) {
|
|
||||||
Text.sendError(sender, "Invalid tier! Valid tiers: " + Arrays.toString(ArmorTier.values()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
case "give" -> {
|
|
||||||
if (args.getSize() < 2) {
|
|
||||||
Text.sendError(sender, "Usage: /armorsmp give <upgrader|netherite|mace> ...");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
final String type = args.get(1).toString().toLowerCase();
|
|
||||||
|
|
||||||
switch (type) {
|
|
||||||
case "upgrader" -> {
|
|
||||||
if (args.getSize() < 3) {
|
|
||||||
Text.sendError(sender, "Usage: /armorsmp give upgrader <player>");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Player target = Bukkit.getPlayer(args.get(2).toString());
|
|
||||||
if (target == null) {
|
|
||||||
Text.sendError(sender, "Player not found online.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
target.getInventory().addItem(ArmorUpgrade.ARMOR_UGPRADE);
|
|
||||||
|
|
||||||
Text.sendMessage(false, Text.Pallet.SUCCESS, sender, "Given and Upgrader to {0}",target.getName());
|
|
||||||
}
|
|
||||||
case "unique" -> {
|
|
||||||
if (args.getSize() < 4) {
|
|
||||||
Text.sendError(sender, "Usage: /armorsmp give unique <piece> <player>");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
final Unique piece = args.get(2).toEnum(Unique.class);
|
|
||||||
if (piece == null) {
|
|
||||||
Text.sendMessage(false, Text.Pallet.ERROR,sender,"Error: {0} is not a valid unique piece.",args.get(2).toString());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
OfflinePlayer target = Bukkit.getPlayer(args.get(3).toString());
|
|
||||||
|
|
||||||
if (target == null) {
|
|
||||||
Text.sendError(sender, "Player not found online or offline.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ArmorSMP.getInstance().getManager().uniques.setOwner(piece,target);
|
|
||||||
ArmorSMP.getInstance().getManager().armor.queueUpdate(target,true);
|
|
||||||
ArmorSMP.getInstance().getManager().uniques.queueUpdate(target);
|
|
||||||
|
|
||||||
Text.sendMessage(false, Text.Pallet.SUCCESS, sender, "Set the owner of unique {0} to {1}.",piece.getCanonical(), target.getName());
|
|
||||||
}
|
|
||||||
default -> Text.sendError(sender, "Invalid give type! Valid types: upgrader, netherite, mace");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
case "toggle" -> {
|
|
||||||
if (args.getSize() < 2) {
|
|
||||||
Text.sendError(sender, "Usage: /armorsmp toggle <end|nether|mace>");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Config config = ArmorSMP.getInstance().getManager().io.config;
|
|
||||||
String feature = args.get(1).toString().toLowerCase();
|
|
||||||
boolean result = false;
|
|
||||||
switch (feature) {
|
|
||||||
case "end" -> {
|
|
||||||
config.endEnabled = result = !config.endEnabled;
|
|
||||||
config.save();
|
|
||||||
|
|
||||||
feature = "The End";
|
|
||||||
}
|
|
||||||
case "nether" -> {
|
|
||||||
config.netherEnabled = result = !config.netherEnabled;
|
|
||||||
config.save();
|
|
||||||
|
|
||||||
feature = "The Nether";
|
|
||||||
}
|
|
||||||
case "mace" -> {
|
|
||||||
config.maceCraftingEnabled = result = !config.maceCraftingEnabled;
|
|
||||||
config.save();
|
|
||||||
|
|
||||||
feature = "Mace Crafting";
|
|
||||||
}
|
|
||||||
case "debug" -> {
|
|
||||||
config.debugMode = result = !config.debugMode;
|
|
||||||
config.save();
|
|
||||||
|
|
||||||
feature = "Debug Mode";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Text.sendMessage(false, Text.Pallet.SUCCESS, sender, "Toggled {0} {1}.",feature,result ? "on" : "off");
|
|
||||||
}
|
|
||||||
case "reset" -> {
|
|
||||||
if (args.getSize() < 2 || !args.get(1).toString().equalsIgnoreCase("mace")) {
|
|
||||||
Text.sendError(sender, "Usage: /armorsmp reset mace");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ArmorSMP.getInstance().getManager().io.storage.uniques.owners.remove(Unique.MACE);
|
|
||||||
|
|
||||||
Text.sendMessage(false, Text.Pallet.SUCCESS, sender, "Reset Mace");
|
|
||||||
}
|
|
||||||
case "remove" -> {
|
|
||||||
final String type = args.get(1).toString().toLowerCase();
|
|
||||||
|
|
||||||
switch (type) {
|
|
||||||
case "unique" -> {
|
|
||||||
if (args.getSize() < 4) {
|
|
||||||
Text.sendError(sender, "Usage: /armorsmp remove unique <piece> <player>");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
final Unique piece = args.get(2).toEnum(Unique.class);
|
|
||||||
Player target = Bukkit.getPlayer(args.get(3).toString());
|
|
||||||
|
|
||||||
if (target == null) {
|
|
||||||
Text.sendError(sender, "Player not found or offline.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ArmorSMP.getInstance().getManager().io.storage.uniques.owners.remove(piece);
|
|
||||||
ArmorSMP.getInstance().getManager().armor.queueUpdate(target,true);
|
|
||||||
ArmorSMP.getInstance().getManager().uniques.queueUpdate(target);
|
|
||||||
|
|
||||||
Text.sendMessage(false, Text.Pallet.SUCCESS, sender, "Removed {0} from {1}", piece.getCanonical(), target.getName());
|
|
||||||
}
|
|
||||||
default -> Text.sendError(sender, "Invalid give type! Valid types: netherite");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
default -> Text.sendError(sender, "Error: Valid sub-commands are: [change, give, toggle, reset, remove]");
|
default -> Text.sendError(sender, "Error: Valid sub-commands are: [change, give, toggle, reset, remove]");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -202,5 +63,166 @@ public class AdminCommand implements CustomCommand {
|
|||||||
.then(b.arg("end","nether","mace","debug")));
|
.then(b.arg("end","nether","mace","debug")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void handleChange(CommandSender sender, Args args) {
|
||||||
|
if (args.getSize() < 3) {
|
||||||
|
Text.sendError(sender, "Usage: /armorsmp change <tier> <player>");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
final ArmorTier tier = args.get(1).toEnum(ArmorTier.class);
|
||||||
|
final String playerName = args.get(2).toString();
|
||||||
|
final OfflinePlayer target = Bukkit.getPlayer(playerName);
|
||||||
|
|
||||||
|
if (target == null) {
|
||||||
|
Text.sendError(sender, "Player not found or offline.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (tier == null) {
|
||||||
|
Text.sendMessage(false, Text.Pallet.ERROR, sender, "Error: {0} is not a valid armor tier. Please choose from these values: ", args.get(2).toString(), Arrays.toString(ArmorTier.values()));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ArmorSMP.getInstance().getManager().armor.setTier(target, tier);
|
||||||
|
Text.sendMessage(false, Text.Pallet.SUCCESS, sender, "Changed armor tier to {0} for {1}", tier, target.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleGive(CommandSender sender, Args args) {
|
||||||
|
if (args.getSize() < 2) {
|
||||||
|
Text.sendError(sender, "Usage: /armorsmp give <upgrader|netherite|mace> ...");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
final String type = args.get(1).toString().toLowerCase();
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
case "upgrader" -> handleGiveUpgrader(sender, args);
|
||||||
|
case "unique" -> handleGiveUnique(sender, args);
|
||||||
|
default -> Text.sendError(sender, "Invalid give type! Valid types: upgrader, netherite, mace");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleGiveUpgrader(CommandSender sender, Args args) {
|
||||||
|
if (args.getSize() < 3) {
|
||||||
|
Text.sendError(sender, "Usage: /armorsmp give upgrader <player>");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Player target = Bukkit.getPlayer(args.get(2).toString());
|
||||||
|
if (target == null) {
|
||||||
|
Text.sendError(sender, "Player not found online.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
target.getInventory().addItem(ArmorUpgrade.ARMOR_UGPRADE);
|
||||||
|
Text.sendMessage(false, Text.Pallet.SUCCESS, sender, "Given and Upgrader to {0}", target.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleGiveUnique(CommandSender sender, Args args) {
|
||||||
|
if (args.getSize() < 4) {
|
||||||
|
Text.sendError(sender, "Usage: /armorsmp give unique <piece> <player>");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
final Unique piece = args.get(2).toEnum(Unique.class);
|
||||||
|
if (piece == null) {
|
||||||
|
Text.sendMessage(false, Text.Pallet.ERROR, sender, "Error: {0} is not a valid unique piece. Please choose from these values: ", args.get(2).toString(), Arrays.toString(Unique.values()));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
OfflinePlayer target = Bukkit.getPlayer(args.get(3).toString());
|
||||||
|
|
||||||
|
if (target == null) {
|
||||||
|
Text.sendError(sender, "Player not found online or offline.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ArmorSMP.getInstance().getManager().uniques.setOwner(piece, target);
|
||||||
|
ArmorSMP.getInstance().getManager().armor.queueUpdate(target, true);
|
||||||
|
ArmorSMP.getInstance().getManager().uniques.queueUpdate(target);
|
||||||
|
|
||||||
|
Text.sendMessage(false, Text.Pallet.SUCCESS, sender, "Set the owner of unique {0} to {1}.", piece.getCanonical(), target.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleToggle(CommandSender sender, Args args) {
|
||||||
|
if (args.getSize() < 2) {
|
||||||
|
Text.sendError(sender, "Usage: /armorsmp toggle <end|nether|mace>");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Config config = ArmorSMP.getInstance().getManager().io.config;
|
||||||
|
String feature = args.get(1).toString().toLowerCase();
|
||||||
|
|
||||||
|
boolean result = false;
|
||||||
|
switch (feature) {
|
||||||
|
case "end" -> {
|
||||||
|
config.endEnabled = result = !config.endEnabled;
|
||||||
|
config.save();
|
||||||
|
feature = "The End";
|
||||||
|
}
|
||||||
|
case "nether" -> {
|
||||||
|
config.netherEnabled = result = !config.netherEnabled;
|
||||||
|
config.save();
|
||||||
|
feature = "The Nether";
|
||||||
|
}
|
||||||
|
case "mace" -> {
|
||||||
|
config.maceCraftingEnabled = result = !config.maceCraftingEnabled;
|
||||||
|
config.save();
|
||||||
|
feature = "Mace Crafting";
|
||||||
|
}
|
||||||
|
case "debug" -> {
|
||||||
|
config.debugMode = result = !config.debugMode;
|
||||||
|
config.save();
|
||||||
|
feature = "Debug Mode";
|
||||||
|
}
|
||||||
|
default -> {
|
||||||
|
Text.sendMessage(false, Text.Pallet.ERROR, sender, "Error: {0} is not a valid feature.", feature);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Text.sendMessage(false, Text.Pallet.SUCCESS, sender, "Toggled {0} {1}.", feature, result ? "on" : "off");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void handleReset(CommandSender sender, Args args) {
|
||||||
|
if (args.getSize() < 2 || !args.get(1).toString().equalsIgnoreCase("mace")) {
|
||||||
|
Text.sendError(sender, "Usage: /armorsmp reset mace");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ArmorSMP.getInstance().getManager().io.storage.uniques.owners.remove(Unique.MACE);
|
||||||
|
Text.sendMessage(false, Text.Pallet.SUCCESS, sender, "Reset Mace");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleRemove(CommandSender sender, Args args) {
|
||||||
|
if (args.getSize() < 2) {
|
||||||
|
Text.sendError(sender, "Usage: /armorsmp remove unique <piece> <player>");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
final String type = args.get(1).toString().toLowerCase();
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
case "unique" -> handleRemoveUnique(sender, args);
|
||||||
|
default -> Text.sendError(sender,"Invalid argument. Valid args: {0}","unique");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleRemoveUnique(CommandSender sender, Args args) {
|
||||||
|
if (args.getSize() < 4) {
|
||||||
|
Text.sendError(sender, "Usage: /armorsmp remove unique <piece> <player>");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
final Unique piece = args.get(2).toEnum(Unique.class);
|
||||||
|
Player target = Bukkit.getPlayer(args.get(3).toString());
|
||||||
|
|
||||||
|
if (target == null) {
|
||||||
|
Text.sendError(sender, "Player not found or offline.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (piece == null) {
|
||||||
|
Text.sendError(sender, "Invalid unique, Please pick form these values: {0}", Arrays.toString(Unique.values()));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ArmorSMP.getInstance().getManager().io.storage.uniques.owners.remove(piece);
|
||||||
|
ArmorSMP.getInstance().getManager().armor.queueUpdate(target, true);
|
||||||
|
ArmorSMP.getInstance().getManager().uniques.queueUpdate(target);
|
||||||
|
|
||||||
|
Text.sendMessage(false, Text.Pallet.SUCCESS, sender, "Removed {0} from {1}", piece.getCanonical(), target.getName());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ public class ArmorUpgrade {
|
|||||||
|
|
||||||
public static ShapedRecipe recipe = new ShapedRecipe(KEY, ARMOR_UGPRADE);
|
public static ShapedRecipe recipe = new ShapedRecipe(KEY, ARMOR_UGPRADE);
|
||||||
|
|
||||||
public static void addRecipe() {
|
public void addRecipe() {
|
||||||
recipe.shape("ABC", "DEF", "GHI");
|
recipe.shape("ABC", "DEF", "GHI");
|
||||||
|
|
||||||
recipe.setIngredient('A', Material.DIAMOND_BLOCK);
|
recipe.setIngredient('A', Material.DIAMOND_BLOCK);
|
||||||
@@ -38,7 +38,7 @@ public class ArmorUpgrade {
|
|||||||
ArmorSMP.getInstance().getServer().addRecipe(recipe);
|
ArmorSMP.getInstance().getServer().addRecipe(recipe);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void removeRecipe() {
|
public void removeRecipe() {
|
||||||
ArmorSMP.getInstance().getServer().removeRecipe(KEY);
|
ArmorSMP.getInstance().getServer().removeRecipe(KEY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
package me.trouper.armorsmp.server.events;
|
||||||
|
|
||||||
|
import io.github.itzispyder.pdk.events.CustomListener;
|
||||||
|
import io.papermc.paper.event.entity.EntityDamageItemEvent;
|
||||||
|
import me.trouper.armorsmp.data.Unique;
|
||||||
|
import org.bukkit.entity.Item;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.entity.EntityDamageByBlockEvent;
|
||||||
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||||
|
import org.bukkit.event.entity.ItemDespawnEvent;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
|
public class ItemDestroyEvents implements CustomListener {
|
||||||
|
@EventHandler
|
||||||
|
public void onDespawn(ItemDespawnEvent e) {
|
||||||
|
ItemStack i = e.getEntity().getItemStack();
|
||||||
|
|
||||||
|
if (!Unique.isUnique(i)) return;
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onBlockDamage(EntityDamageByBlockEvent e) {
|
||||||
|
if (!(e.getEntity() instanceof Item i)) return;
|
||||||
|
if (!Unique.isUnique(i.getItemStack())) return;
|
||||||
|
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onBlockDamage(EntityDamageByEntityEvent e) {
|
||||||
|
if (!(e.getEntity() instanceof Item i)) return;
|
||||||
|
if (!Unique.isUnique(i.getItemStack())) return;
|
||||||
|
|
||||||
|
e.setCancelled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -14,7 +14,10 @@ public class PickUpEvent implements CustomListener {
|
|||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onItemPickUp(EntityPickupItemEvent e) {
|
public void onItemPickUp(EntityPickupItemEvent e) {
|
||||||
if (!(e.getEntity() instanceof Player p)) return;
|
if (!(e.getEntity() instanceof Player p)) {
|
||||||
|
e.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
ItemStack i = e.getItem().getItemStack();
|
ItemStack i = e.getItem().getItemStack();
|
||||||
|
|
||||||
if (!Unique.isUnique(i)) return;
|
if (!Unique.isUnique(i)) return;
|
||||||
@@ -22,7 +25,7 @@ public class PickUpEvent implements CustomListener {
|
|||||||
|
|
||||||
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());
|
||||||
ArmorSMP.getInstance().getServer().broadcast(Text.getMessage(false, Text.Pallet.INFO,"GG, {0}! They are the new owner of the unique {1}",p.getName(),match.getCanonical()));
|
ArmorSMP.getInstance().getServer().broadcast(Text.getMessage(false, Text.Pallet.INFO,"GG, {0}! They are the new owner of the unique {1}.",p.getName(),match.getCanonical()));
|
||||||
|
|
||||||
if (WorldUtils.isArmor(match.getInGameItem())) {
|
if (WorldUtils.isArmor(match.getInGameItem())) {
|
||||||
p.getInventory().remove(i);
|
p.getInventory().remove(i);
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ public class UpgradeRedeemEvent implements CustomListener {
|
|||||||
if (ArmorSMP.getInstance().getManager().armor.upTier(p)) {
|
if (ArmorSMP.getInstance().getManager().armor.upTier(p)) {
|
||||||
holding.setAmount(holding.getAmount() - 1);
|
holding.setAmount(holding.getAmount() - 1);
|
||||||
Text.sendMessage(true, Text.Pallet.INFO,p,"Successfully redeemed armor upgrade! Tier {0} -> Tier {1}",tier,ArmorSMP.getInstance().getManager().armor.getTier(p));
|
Text.sendMessage(true, Text.Pallet.INFO,p,"Successfully redeemed armor upgrade! Tier {0} -> Tier {1}",tier,ArmorSMP.getInstance().getManager().armor.getTier(p));
|
||||||
|
} else {
|
||||||
|
Text.sendMessage(true, Text.Pallet.ERROR,p,"Unable to upgrade. You are already at the maximum Armor Tier!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
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;
|
import me.trouper.armorsmp.data.io.IO;
|
||||||
import me.trouper.armorsmp.data.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 me.trouper.armorsmp.utils.Verbose;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package me.trouper.armorsmp.server.systems;
|
||||||
|
|
||||||
|
import io.github.itzispyder.pdk.utils.misc.Randomizer;
|
||||||
|
import me.trouper.armorsmp.ArmorSMP;
|
||||||
|
import me.trouper.armorsmp.data.io.IO;
|
||||||
|
import me.trouper.armorsmp.utils.Text;
|
||||||
|
|
||||||
|
public class Broadcaster {
|
||||||
|
|
||||||
|
private final IO io;
|
||||||
|
|
||||||
|
public Broadcaster(IO io) {
|
||||||
|
this.io = io;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void broadcastTip() {
|
||||||
|
String tip = new Randomizer().getRandomElement(io.config.tips.tipList);
|
||||||
|
ArmorSMP.getInstance().getServer().broadcast(Text.getMessage(false, Text.Pallet.NEUTRAL,tip));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,8 +1,7 @@
|
|||||||
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;
|
import me.trouper.armorsmp.data.io.Storage;
|
||||||
import me.trouper.armorsmp.data.Storage;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
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;
|
import me.trouper.armorsmp.data.io.Storage;
|
||||||
import me.trouper.armorsmp.data.Storage;
|
|
||||||
import me.trouper.armorsmp.data.Unique;
|
import me.trouper.armorsmp.data.Unique;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@@ -17,7 +17,9 @@ public class UniquesBackend {
|
|||||||
|
|
||||||
private void updateUniques(Player p) {
|
private void updateUniques(Player p) {
|
||||||
if (!storage.uniques.owners.containsValue(p.getUniqueId().toString())) return;
|
if (!storage.uniques.owners.containsValue(p.getUniqueId().toString())) return;
|
||||||
|
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||||
|
|
||||||
|
}
|
||||||
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())) {
|
||||||
p.getInventory().addItem(unique.getInGameItem());
|
p.getInventory().addItem(unique.getInGameItem());
|
||||||
@@ -42,4 +44,11 @@ public class UniquesBackend {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void applyPersistence() {
|
||||||
|
storage.uniques.owners.forEach((unique, owner) -> {
|
||||||
|
Player p = Bukkit.getPlayer(owner);
|
||||||
|
if (p != null && p.isOnline()) unique.getPassiveAbility().accept(p);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user