diff --git a/build.gradle b/build.gradle index dd85aec..ec40b64 100644 --- a/build.gradle +++ b/build.gradle @@ -1,3 +1,13 @@ +buildscript { + repositories { + mavenCentral() + } + + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.31" + } +} + plugins { id 'java-library' id 'com.github.johnrengelman.shadow' version '7.0.0' @@ -13,6 +23,7 @@ allprojects { apply plugin: 'java' apply plugin: 'maven-publish' apply plugin: 'com.github.johnrengelman.shadow' + apply plugin: 'kotlin' repositories { mavenCentral() @@ -45,16 +56,17 @@ allprojects { onlyIf { !sourceSets.main.allSource.files.isEmpty() } } + shadowJar { + relocate('com.willfp.libreforge', 'com.willfp.ecoweapons.libreforge') + } + dependencies { - compileOnly 'com.willfp:eco:6.8.1' + compileOnly 'com.willfp:eco:6.13.11' + implementation 'com.willfp:libreforge:1.1.0' - compileOnly 'org.jetbrains:annotations:19.0.0' + compileOnly 'org.jetbrains:annotations:23.0.0' - compileOnly 'org.projectlombok:lombok:1.18.20' - annotationProcessor 'org.projectlombok:lombok:1.18.20' - - testCompileOnly 'org.projectlombok:lombok:1.18.20' - testAnnotationProcessor 'org.projectlombok:lombok:1.18.20' + compileOnly 'org.jetbrains.kotlin:kotlin-stdlib:1.5.21' } tasks.withType(JavaCompile) { diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/EcoWeaponsPlugin.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/EcoWeaponsPlugin.java deleted file mode 100644 index 63fb8fb..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/EcoWeaponsPlugin.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.willfp.ecoweapons; - -import com.willfp.eco.core.EcoPlugin; -import com.willfp.eco.core.command.impl.PluginCommand; -import com.willfp.eco.core.display.DisplayModule; -import com.willfp.ecoweapons.commands.CommandEcoweapons; -import com.willfp.ecoweapons.config.EcoWeaponsJson; -import com.willfp.ecoweapons.display.WeaponsDisplay; -import com.willfp.ecoweapons.effects.Effect; -import com.willfp.ecoweapons.effects.Effects; -import com.willfp.ecoweapons.effects.util.EffectListener; -import com.willfp.ecoweapons.util.DiscoverRecipeListener; -import lombok.Getter; -import org.bukkit.event.Listener; -import org.jetbrains.annotations.Nullable; - -import java.util.Arrays; -import java.util.List; - -public class EcoWeaponsPlugin extends EcoPlugin { - /** - * Instance of EcoWeapons. - */ - @Getter - private static EcoWeaponsPlugin instance; - - /** - * tiers.json. - */ - @Getter - private final EcoWeaponsJson ecoWeaponsJson; - - /** - * Internal constructor called by bukkit on plugin load. - */ - public EcoWeaponsPlugin() { - super(1241, 12134, "&#ff0000"); - instance = this; - - this.ecoWeaponsJson = new EcoWeaponsJson(this); - } - - @Override - protected void handleEnable() { - for (Effect effect : Effects.values()) { - if (effect instanceof Listener) { - this.getEventManager().registerListener((Listener) effect); - } - } - } - - @Override - protected List loadListeners() { - return Arrays.asList( - new EffectListener(), - new DiscoverRecipeListener(this) - ); - } - - @Override - protected List loadPluginCommands() { - return Arrays.asList( - new CommandEcoweapons(this) - ); - } - - @Override - protected @Nullable DisplayModule createDisplayModule() { - return new WeaponsDisplay(this); - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/commands/CommandEcoweapons.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/commands/CommandEcoweapons.java deleted file mode 100644 index ae9501d..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/commands/CommandEcoweapons.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.willfp.ecoweapons.commands; - - -import com.willfp.eco.core.EcoPlugin; -import com.willfp.eco.core.command.CommandHandler; -import com.willfp.eco.core.command.impl.PluginCommand; -import org.jetbrains.annotations.NotNull; - -public class CommandEcoweapons extends PluginCommand { - /** - * Instantiate a new command handler. - * - * @param plugin The plugin for the commands to listen for. - */ - public CommandEcoweapons(@NotNull final EcoPlugin plugin) { - super(plugin, "ecoweapons", "ecoweapons.command.ecoweapons", false); - - this.addSubcommand(new CommandReload(plugin)) - .addSubcommand(new CommandGive(plugin)); - } - - @Override - public CommandHandler getHandler() { - return (sender, args) -> { - sender.sendMessage(this.getPlugin().getLangYml().getMessage("invalid-command")); - }; - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/commands/CommandGive.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/commands/CommandGive.java deleted file mode 100644 index 81275f5..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/commands/CommandGive.java +++ /dev/null @@ -1,144 +0,0 @@ -package com.willfp.ecoweapons.commands; - -import com.willfp.eco.core.EcoPlugin; -import com.willfp.eco.core.command.CommandHandler; -import com.willfp.eco.core.command.TabCompleteHandler; -import com.willfp.eco.core.command.impl.Subcommand; -import com.willfp.eco.core.config.updating.ConfigUpdater; -import com.willfp.ecoweapons.weapons.Weapon; -import com.willfp.ecoweapons.weapons.Weapons; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.util.StringUtil; -import org.jetbrains.annotations.NotNull; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.stream.Collectors; - -public class CommandGive extends Subcommand { - /** - * The cached names. - */ - private static final List ITEM_NAMES = new ArrayList<>(); - - /** - * The cached numbers. - */ - private static final List NUMBERS = Arrays.asList( - "1", - "2", - "3", - "4", - "5", - "10", - "32", - "64" - ); - - /** - * Instantiate a new command handler. - * - * @param plugin The plugin for the commands to listen for. - */ - public CommandGive(@NotNull final EcoPlugin plugin) { - super(plugin, "give", "ecoweapons.command.give", false); - reload(); - } - - /** - * Called on reload. - */ - @ConfigUpdater - public static void reload() { - ITEM_NAMES.clear(); - ITEM_NAMES.addAll(Weapons.values().stream().map(Weapon::getName).collect(Collectors.toList())); - } - - @Override - public CommandHandler getHandler() { - return (sender, args) -> { - if (args.isEmpty()) { - sender.sendMessage(this.getPlugin().getLangYml().getMessage("needs-player")); - return; - } - - if (args.size() == 1) { - sender.sendMessage(this.getPlugin().getLangYml().getMessage("needs-item")); - return; - } - - String recieverName = args.get(0); - Player reciever = Bukkit.getPlayer(recieverName); - - if (reciever == null) { - sender.sendMessage(this.getPlugin().getLangYml().getMessage("invalid-player")); - return; - } - - String itemID = args.get(1); - - int amount = 1; - - Weapon weapon = Weapons.getByName(itemID.toLowerCase()); - - if (weapon == null) { - sender.sendMessage(this.getPlugin().getLangYml().getMessage("invalid-item")); - return; - } - - String message = this.getPlugin().getLangYml().getMessage("give-success"); - message = message.replace("%item%", weapon.getName()).replace("%recipient%", reciever.getName()); - sender.sendMessage(message); - - if (args.size() == 3) { - try { - amount = Integer.parseInt(args.get(2)); - } catch (NumberFormatException ignored) { - // do nothing - } - } - - ItemStack item = weapon.getItem(); - item.setAmount(amount); - reciever.getInventory().addItem(item); - - }; - } - - @Override - public TabCompleteHandler getTabCompleter() { - return (sender, args) -> { - - List completions = new ArrayList<>(); - - if (args.isEmpty()) { - // Currently, this case is not ever reached - return ITEM_NAMES; - } - - if (args.size() == 1) { - StringUtil.copyPartialMatches(args.get(0), Bukkit.getOnlinePlayers().stream().map(Player::getName).collect(Collectors.toList()), completions); - return completions; - } - - if (args.size() == 2) { - StringUtil.copyPartialMatches(args.get(1), ITEM_NAMES, completions); - - Collections.sort(completions); - return completions; - } - - if (args.size() == 3) { - StringUtil.copyPartialMatches(args.get(2), NUMBERS, completions); - - return completions; - } - - return new ArrayList<>(0); - }; - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/commands/CommandReload.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/commands/CommandReload.java deleted file mode 100644 index 50215b1..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/commands/CommandReload.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.willfp.ecoweapons.commands; - - -import com.willfp.eco.core.EcoPlugin; -import com.willfp.eco.core.command.CommandHandler; -import com.willfp.eco.core.command.impl.Subcommand; -import org.jetbrains.annotations.NotNull; - -public class CommandReload extends Subcommand { - /** - * Instantiate a new command handler. - * - * @param plugin The plugin for the commands to listen for. - */ - public CommandReload(@NotNull final EcoPlugin plugin) { - super(plugin, "reload", "ecoweapons.command.reload", false); - } - - @Override - public CommandHandler getHandler() { - return (sender, args) -> { - this.getPlugin().reload(); - sender.sendMessage(this.getPlugin().getLangYml().getMessage("reloaded")); - }; - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/Condition.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/Condition.java deleted file mode 100644 index 60752ca..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/Condition.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.willfp.ecoweapons.conditions; - -import com.willfp.ecoweapons.EcoWeaponsPlugin; -import lombok.AccessLevel; -import lombok.Getter; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -public abstract class Condition { - /** - * Instance of EcoWeapons. - */ - @Getter(AccessLevel.PROTECTED) - private final EcoWeaponsPlugin plugin = EcoWeaponsPlugin.getInstance(); - - /** - * The name of the effect. - */ - @Getter - private final String name; - - /** - * The class of the config getter type. - */ - @Getter - private final Class typeClass; - - /** - * Create a new condition. - * - * @param name The condition name. - * @param typeClass The class of the config type. - */ - protected Condition(@NotNull final String name, - @NotNull final Class typeClass) { - this.name = name; - this.typeClass = typeClass; - - Conditions.addNewCondition(this); - } - - /** - * Get if condition is met for a player. - * - * @param player The player. - * @param value The value of the condition. - * @return If met. - */ - public final boolean isMet(@NotNull final Player player, - @NotNull final Object value) { - return isConditionMet(player, typeClass.cast(value)); - } - - protected abstract boolean isConditionMet(@NotNull Player player, - @NotNull T value); -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/Conditions.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/Conditions.java deleted file mode 100644 index b04986a..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/Conditions.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.willfp.ecoweapons.conditions; - -import com.google.common.collect.BiMap; -import com.google.common.collect.HashBiMap; -import com.google.common.collect.ImmutableList; -import com.willfp.ecoweapons.conditions.conditions.ConditionAboveHealthPercent; -import com.willfp.ecoweapons.conditions.conditions.ConditionAboveHungerPercent; -import com.willfp.ecoweapons.conditions.conditions.ConditionAboveXPLevel; -import com.willfp.ecoweapons.conditions.conditions.ConditionAboveY; -import com.willfp.ecoweapons.conditions.conditions.ConditionBelowHealthPercent; -import com.willfp.ecoweapons.conditions.conditions.ConditionBelowHungerPercent; -import com.willfp.ecoweapons.conditions.conditions.ConditionBelowXPLevel; -import com.willfp.ecoweapons.conditions.conditions.ConditionBelowY; -import com.willfp.ecoweapons.conditions.conditions.ConditionHasPermission; -import com.willfp.ecoweapons.conditions.conditions.ConditionInBiome; -import com.willfp.ecoweapons.conditions.conditions.ConditionInWater; -import com.willfp.ecoweapons.conditions.conditions.ConditionInWorld; -import lombok.experimental.UtilityClass; -import org.jetbrains.annotations.NotNull; - -import java.util.List; - -@UtilityClass -@SuppressWarnings("unused") -public class Conditions { - /** - * All registered effects. - */ - private static final BiMap> BY_NAME = HashBiMap.create(); - - public static final Condition BELOW_Y = new ConditionBelowY(); - public static final Condition ABOVE_Y = new ConditionAboveY(); - public static final Condition ABOVE_HEALTH_PERCENT = new ConditionAboveHealthPercent(); - public static final Condition BELOW_HEALTH_PERCENT = new ConditionBelowHealthPercent(); - public static final Condition IN_WATER = new ConditionInWater(); - public static final Condition IN_WORLD = new ConditionInWorld(); - public static final Condition ABOVE_XP_LEVEL = new ConditionAboveXPLevel(); - public static final Condition BELOW_XP_LEVEL = new ConditionBelowXPLevel(); - public static final Condition ABOVE_HUNGER_PERCENT = new ConditionAboveHungerPercent(); - public static final Condition BELOW_HUNGER_PERCENT = new ConditionBelowHungerPercent(); - public static final Condition IN_BIOME = new ConditionInBiome(); - public static final Condition HAS_PERMISSION = new ConditionHasPermission(); - - /** - * Get condition matching name.s - * - * @param name The name to query. - * @return The matching condition, or null if not found. - */ - public static Condition getByName(@NotNull final String name) { - return BY_NAME.get(name); - } - - /** - * List of all registered conditions. - * - * @return The conditions. - */ - public static List> values() { - return ImmutableList.copyOf(BY_NAME.values()); - } - - /** - * Add new condition to EcoWeapons. - * - * @param condition The condition to add. - */ - public static void addNewCondition(@NotNull final Condition condition) { - BY_NAME.remove(condition.getName()); - BY_NAME.put(condition.getName(), condition); - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionAboveHealthPercent.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionAboveHealthPercent.java deleted file mode 100644 index e5d33d4..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionAboveHealthPercent.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.willfp.ecoweapons.conditions.conditions; - -import com.willfp.ecoweapons.conditions.Condition; -import org.bukkit.attribute.Attribute; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -public class ConditionAboveHealthPercent extends Condition { - public ConditionAboveHealthPercent() { - super("above-health-percent", Double.class); - } - - @Override - public boolean isConditionMet(@NotNull final Player player, - @NotNull final Double value) { - double maxHealth = player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue(); - double health = player.getHealth(); - - return (health / maxHealth) * 100 >= value; - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionAboveHungerPercent.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionAboveHungerPercent.java deleted file mode 100644 index c1ade27..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionAboveHungerPercent.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.willfp.ecoweapons.conditions.conditions; - -import com.willfp.ecoweapons.conditions.Condition; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -public class ConditionAboveHungerPercent extends Condition { - public ConditionAboveHungerPercent() { - super("above-hunger-percent", Double.class); - } - - @Override - public boolean isConditionMet(@NotNull final Player player, - @NotNull final Double value) { - double maxFood = 20; - double food = player.getFoodLevel(); - - return (food / maxFood) * 100 >= value; - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionAboveXPLevel.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionAboveXPLevel.java deleted file mode 100644 index 49824bc..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionAboveXPLevel.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.willfp.ecoweapons.conditions.conditions; - -import com.willfp.ecoweapons.conditions.Condition; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -public class ConditionAboveXPLevel extends Condition { - public ConditionAboveXPLevel() { - super("above-xp-level", Integer.class); - } - - @Override - public boolean isConditionMet(@NotNull final Player player, - @NotNull final Integer value) { - return player.getLevel() >= value; - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionAboveY.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionAboveY.java deleted file mode 100644 index e1799c8..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionAboveY.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.willfp.ecoweapons.conditions.conditions; - -import com.willfp.ecoweapons.conditions.Condition; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -public class ConditionAboveY extends Condition { - public ConditionAboveY() { - super("above-y", Double.class); - } - - @Override - public boolean isConditionMet(@NotNull final Player player, - @NotNull final Double value) { - return player.getLocation().getY() >= value; - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionBelowHealthPercent.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionBelowHealthPercent.java deleted file mode 100644 index 56819e1..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionBelowHealthPercent.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.willfp.ecoweapons.conditions.conditions; - -import com.willfp.ecoweapons.conditions.Condition; -import org.bukkit.attribute.Attribute; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -public class ConditionBelowHealthPercent extends Condition { - public ConditionBelowHealthPercent() { - super("below-health-percent", Double.class); - } - - @Override - public boolean isConditionMet(@NotNull final Player player, - @NotNull final Double value) { - double maxHealth = player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue(); - double health = player.getHealth(); - - return (health / maxHealth) * 100 < value; - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionBelowHungerPercent.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionBelowHungerPercent.java deleted file mode 100644 index 207e9d1..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionBelowHungerPercent.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.willfp.ecoweapons.conditions.conditions; - -import com.willfp.ecoweapons.conditions.Condition; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -public class ConditionBelowHungerPercent extends Condition { - public ConditionBelowHungerPercent() { - super("below-hunger-percent", Double.class); - } - - @Override - public boolean isConditionMet(@NotNull final Player player, - @NotNull final Double value) { - double maxFood = 20; - double food = player.getFoodLevel(); - - return (food / maxFood) * 100 < value; - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionBelowXPLevel.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionBelowXPLevel.java deleted file mode 100644 index 1a0ade1..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionBelowXPLevel.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.willfp.ecoweapons.conditions.conditions; - -import com.willfp.ecoweapons.conditions.Condition; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -public class ConditionBelowXPLevel extends Condition { - public ConditionBelowXPLevel() { - super("below-xp-level", Integer.class); - } - - @Override - public boolean isConditionMet(@NotNull final Player player, - @NotNull final Integer value) { - return player.getLevel() < value; - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionBelowY.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionBelowY.java deleted file mode 100644 index bcde1ec..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionBelowY.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.willfp.ecoweapons.conditions.conditions; - -import com.willfp.ecoweapons.conditions.Condition; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -public class ConditionBelowY extends Condition { - public ConditionBelowY() { - super("below-y", Double.class); - } - - @Override - public boolean isConditionMet(@NotNull final Player player, - @NotNull final Double value) { - return player.getLocation().getY() < value; - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionHasPermission.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionHasPermission.java deleted file mode 100644 index dad5b6c..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionHasPermission.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.willfp.ecoweapons.conditions.conditions; - -import com.willfp.ecoweapons.conditions.Condition; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -public class ConditionHasPermission extends Condition { - public ConditionHasPermission() { - super("has-permission", String.class); - } - - @Override - public boolean isConditionMet(@NotNull final Player player, - @NotNull final String value) { - return player.hasPermission(value); - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionInBiome.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionInBiome.java deleted file mode 100644 index 5e55911..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionInBiome.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.willfp.ecoweapons.conditions.conditions; - -import com.willfp.ecoweapons.conditions.Condition; -import org.bukkit.block.Biome; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -import java.util.Arrays; -import java.util.List; - -public class ConditionInBiome extends Condition { - public ConditionInBiome() { - super("in-biome", String.class); - } - - @Override - public boolean isConditionMet(@NotNull final Player player, - @NotNull final String value) { - List biomeNames = Arrays.asList(value.toLowerCase().split(" ")); - Biome biome = player.getLocation().getWorld().getBiome(player.getLocation().getBlockX(), player.getLocation().getBlockY(), player.getLocation().getBlockZ()); - return biomeNames.contains(biome.name().toLowerCase()); - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionInWater.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionInWater.java deleted file mode 100644 index 7157466..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionInWater.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.willfp.ecoweapons.conditions.conditions; - -import com.willfp.ecoweapons.conditions.Condition; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -public class ConditionInWater extends Condition { - public ConditionInWater() { - super("in-water", Boolean.class); - } - - @Override - public boolean isConditionMet(@NotNull final Player player, - @NotNull final Boolean value) { - return (player.getLocation().getBlock().getType() == Material.WATER) == value; - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionInWorld.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionInWorld.java deleted file mode 100644 index 3246cf6..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/conditions/conditions/ConditionInWorld.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.willfp.ecoweapons.conditions.conditions; - -import com.willfp.ecoweapons.conditions.Condition; -import org.bukkit.World; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -import java.util.Arrays; -import java.util.List; - -public class ConditionInWorld extends Condition { - public ConditionInWorld() { - super("in-world", String.class); - } - - @Override - public boolean isConditionMet(@NotNull final Player player, - @NotNull final String value) { - List worldNames = Arrays.asList(value.toLowerCase().split(" ")); - World world = player.getLocation().getWorld(); - if (world == null) { - return false; - } - - return worldNames.contains(world.getName().toLowerCase()); - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/config/EcoWeaponsJson.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/config/EcoWeaponsJson.java deleted file mode 100644 index aeb3193..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/config/EcoWeaponsJson.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.willfp.ecoweapons.config; - -import com.willfp.eco.core.EcoPlugin; -import com.willfp.eco.core.config.json.JSONStaticBaseConfig; -import org.jetbrains.annotations.NotNull; - -public class EcoWeaponsJson extends JSONStaticBaseConfig { - /** - * Create tiers.json. - * - * @param plugin Instance of EcoWeapons. - */ - public EcoWeaponsJson(@NotNull final EcoPlugin plugin) { - super("ecoweapons", plugin); - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/display/WeaponsDisplay.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/display/WeaponsDisplay.java deleted file mode 100644 index 10d73f2..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/display/WeaponsDisplay.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.willfp.ecoweapons.display; - -import com.willfp.eco.core.EcoPlugin; -import com.willfp.eco.core.display.DisplayModule; -import com.willfp.eco.core.display.DisplayPriority; -import com.willfp.ecoweapons.weapons.Weapon; -import com.willfp.ecoweapons.weapons.util.WeaponUtils; -import org.bukkit.inventory.ItemFlag; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.jetbrains.annotations.NotNull; - -import java.util.ArrayList; -import java.util.List; - -public class WeaponsDisplay extends DisplayModule { - /** - * Create weapons display. - * - * @param plugin Instance of EcoWeapons. - */ - public WeaponsDisplay(@NotNull final EcoPlugin plugin) { - super(plugin, DisplayPriority.LOWEST); - } - - @Override - public void display(@NotNull final ItemStack itemStack, - @NotNull final Object... args) { - ItemMeta meta = itemStack.getItemMeta(); - if (meta == null) { - return; - } - - Weapon weapon = WeaponUtils.getWeaponFromItem(meta); - - if (weapon == null) { - return; - } - - ItemMeta weaponMeta = weapon.getItem().getItemMeta(); - assert weaponMeta != null; - - List lore = new ArrayList<>(weaponMeta.getLore()); - - if (meta.hasLore()) { - lore.addAll(meta.getLore()); - } - meta.setLore(lore); - meta.setDisplayName(weaponMeta.getDisplayName()); - meta.addItemFlags(weaponMeta.getItemFlags().toArray(new ItemFlag[0])); - - itemStack.setItemMeta(meta); - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/Effect.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/Effect.java deleted file mode 100644 index 924a6e1..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/Effect.java +++ /dev/null @@ -1,171 +0,0 @@ -package com.willfp.ecoweapons.effects; - -import com.willfp.eco.core.config.interfaces.JSONConfig; -import com.willfp.ecoweapons.EcoWeaponsPlugin; -import com.willfp.ecoweapons.weapons.Weapon; -import lombok.AccessLevel; -import lombok.Getter; -import net.md_5.bungee.api.ChatMessageType; -import net.md_5.bungee.api.chat.TextComponent; -import org.bukkit.Sound; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.entity.Projectile; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.ProjectileHitEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.util.NumberConversions; -import org.bukkit.util.RayTraceResult; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; - -public abstract class Effect { - /** - * Instance of EcoWeapons. - */ - @Getter(AccessLevel.PROTECTED) - private final EcoWeaponsPlugin plugin = EcoWeaponsPlugin.getInstance(); - - /** - * The name of the effect. - */ - @Getter - private final String name; - - /** - * The cooldown end times linked to players. - */ - private final Map tracker = new HashMap<>(); - - /** - * Create a new effect. - * - * @param name The effect name. - */ - protected Effect(@NotNull final String name) { - this.name = name; - - Effects.addNewEffect(this); - } - - /** - * Handle {@link TriggerType#MELEE_ATTACK}. - * - * @param player The player. - * @param victim The victim. - * @param event The event. - * @param args The effect args. - */ - public void handleMeleeAttack(@NotNull final Player player, - @NotNull final LivingEntity victim, - @NotNull final EntityDamageByEntityEvent event, - @NotNull final JSONConfig args) { - // Override when needed. - } - - /** - * Handle {@link TriggerType#PROJECTILE_HIT_ENTITY}. - * - * @param player The player. - * @param victim The victim. - * @param projectile The projectile. - * @param event The event. - * @param args The effect args. - */ - public void handleProjectileHitEntity(@NotNull final Player player, - @NotNull final LivingEntity victim, - @NotNull final Projectile projectile, - @NotNull final ProjectileHitEvent event, - @NotNull final JSONConfig args) { - // Override when needed. - } - - /** - * Handle {@link TriggerType#PROJECTILE_HIT}. - * - * @param player The player. - * @param projectile The projectile. - * @param event The event. - * @param args The effect args. - */ - public void handleProjectileHit(@NotNull final Player player, - @NotNull final Projectile projectile, - @NotNull final ProjectileHitEvent event, - @NotNull final JSONConfig args) { - // Override when needed. - } - - /** - * Handle {@link TriggerType#ALT_CLICK} and {@link TriggerType#SHIFT_ALT_CLICK}. - * - * @param player The player. - * @param blockRay The block ray. - * @param entityRay The entity ray. - * @param event The event. - * @param args The effect args. - */ - public void handleAltClick(@NotNull final Player player, - @NotNull final RayTraceResult blockRay, - @Nullable final RayTraceResult entityRay, - @NotNull final PlayerInteractEvent event, - @NotNull final JSONConfig args) { - // Override when needed. - } - - /** - * Utility method to get a player's cooldown time of a specific effect. - * - * @param player The player to query. - * @return The time left in seconds before next use. - */ - public int getCooldown(@NotNull final Player player) { - if (!tracker.containsKey(player.getUniqueId())) { - return 0; - } - - long msLeft = tracker.get(player.getUniqueId()) - System.currentTimeMillis(); - - long secondsLeft = (long) Math.ceil((double) msLeft / 1000); - - return NumberConversions.toInt(secondsLeft); - } - - /** - * Handle cooldowns. - * - * @param player The player. - * @param weapon The weapon. - * @param triggerType The trigger type. - * @return If the cooldown is over. - */ - public boolean isCooldownOver(@NotNull final Player player, - @NotNull final Weapon weapon, - @NotNull final TriggerType triggerType) { - int cooldown = getCooldown(player); - - if (cooldown > 0) { - if (this.getPlugin().getConfigYml().getBool("cooldown-in-actionbar")) { - String message = this.getPlugin().getLangYml().getString("messages.on-cooldown").replace("%seconds%", String.valueOf(cooldown)); - - player.spigot().sendMessage( - ChatMessageType.ACTION_BAR, - TextComponent.fromLegacyText(message) - ); - } else { - String message = this.getPlugin().getLangYml().getMessage("on-cooldown").replace("%seconds%", String.valueOf(cooldown)); - player.sendMessage(message); - } - player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_BASS, 1, 0.5f); - - return false; - } else { - tracker.remove(player.getUniqueId()); - tracker.put(player.getUniqueId(), System.currentTimeMillis() + (long) ((weapon.getCooldownTime(this, triggerType) * 1000L))); - return true; - } - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/Effects.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/Effects.java deleted file mode 100644 index be8841d..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/Effects.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.willfp.ecoweapons.effects; - -import com.google.common.collect.BiMap; -import com.google.common.collect.HashBiMap; -import com.google.common.collect.ImmutableList; -import com.willfp.ecoweapons.effects.effects.EffectArrowStorm; -import com.willfp.ecoweapons.effects.effects.EffectBleed; -import com.willfp.ecoweapons.effects.effects.EffectConsoleCommand; -import com.willfp.ecoweapons.effects.effects.EffectGivePotionEffect; -import com.willfp.ecoweapons.effects.effects.EffectRailgun; -import com.willfp.ecoweapons.effects.effects.EffectSpawnHelper; -import com.willfp.ecoweapons.effects.effects.EffectStrikeLightning; -import com.willfp.ecoweapons.effects.effects.EffectWarp; -import lombok.experimental.UtilityClass; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.List; - -@UtilityClass -@SuppressWarnings("unused") -public class Effects { - /** - * All registered effects. - */ - private static final BiMap BY_NAME = HashBiMap.create(); - - public static final Effect STRIKE_LIGHTNING = new EffectStrikeLightning(); - public static final Effect RAILGUN = new EffectRailgun(); - public static final Effect ARROW_STORM = new EffectArrowStorm(); - public static final Effect WARP = new EffectWarp(); - public static final Effect CONSOLE_COMMAND = new EffectConsoleCommand(); - public static final Effect SPAWN_HELPER = new EffectSpawnHelper(); - public static final Effect BLEED = new EffectBleed(); - public static final Effect GIVE_POTION_EFFECT = new EffectGivePotionEffect(); - - /** - * Get effect matching name. - * - * @param name The name to query. - * @return The matching effect, or null if not found. - */ - @Nullable - public static Effect getByName(@NotNull final String name) { - return BY_NAME.get(name); - } - - /** - * List of all registered effects. - * - * @return The effects. - */ - public static List values() { - return ImmutableList.copyOf(BY_NAME.values()); - } - - /** - * Add new effect to EcoWeapons. - * - * @param effect The effect to add. - */ - public static void addNewEffect(@NotNull final Effect effect) { - BY_NAME.remove(effect.getName()); - BY_NAME.put(effect.getName(), effect); - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/TriggerType.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/TriggerType.java deleted file mode 100644 index 31e8ce8..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/TriggerType.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.willfp.ecoweapons.effects; - -import org.jetbrains.annotations.NotNull; - -public enum TriggerType { - /** - * Secondary click. - */ - ALT_CLICK, - - /** - * Melee attack. - */ - MELEE_ATTACK, - - /** - * Projectile hit. - */ - PROJECTILE_HIT, - - /** - * Shift Secondary Click. - */ - SHIFT_ALT_CLICK, - - /** - * Projectile damage entity. - */ - PROJECTILE_HIT_ENTITY; - - /** - * Get trigger type by name. - * - * @param name The name. - * @return The found type, or null if not found. - */ - public static TriggerType getByName(@NotNull final String name) { - return switch (name.toLowerCase()) { - case "alt_click" -> ALT_CLICK; - case "melee_attack" -> MELEE_ATTACK; - case "projectile_hit" -> PROJECTILE_HIT; - case "shift_alt_click" -> SHIFT_ALT_CLICK; - case "projectile_hit_entity" -> PROJECTILE_HIT_ENTITY; - default -> null; - }; - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/effects/EffectArrowStorm.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/effects/EffectArrowStorm.java deleted file mode 100644 index 05fc238..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/effects/EffectArrowStorm.java +++ /dev/null @@ -1,85 +0,0 @@ -package com.willfp.ecoweapons.effects.effects; - -import com.willfp.eco.core.config.interfaces.JSONConfig; -import com.willfp.ecoweapons.effects.Effect; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.entity.Arrow; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.entity.Projectile; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.ProjectileHitEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.util.RayTraceResult; -import org.bukkit.util.Vector; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public class EffectArrowStorm extends Effect { - public EffectArrowStorm() { - super("arrow-storm"); - } - @Override - public void handleMeleeAttack(@NotNull final Player player, - @NotNull final LivingEntity victim, - @NotNull final EntityDamageByEntityEvent event, - @NotNull final JSONConfig args) { - handle(victim.getLocation(), args); - } - - @Override - public void handleProjectileHitEntity(@NotNull final Player player, - @NotNull final LivingEntity victim, - @NotNull final Projectile projectile, - @NotNull final ProjectileHitEvent event, - @NotNull final JSONConfig args) { - handle(victim.getLocation(), args); - } - - @Override - public void handleProjectileHit(@NotNull final Player player, - @NotNull final Projectile projectile, - @NotNull final ProjectileHitEvent event, - @NotNull final JSONConfig args) { - handle(projectile.getLocation(), args); - } - - @Override - public void handleAltClick(@NotNull final Player player, - @NotNull final RayTraceResult blockRay, - @Nullable final RayTraceResult entityRay, - @NotNull final PlayerInteractEvent event, - @NotNull final JSONConfig args) { - handle(blockRay.getHitPosition().toLocation(player.getWorld()), args); - } - - private void handle(@NotNull final Location location, - @NotNull final JSONConfig args) { - int amount = args.getInt("amount"); - double height = args.getDouble("height"); - double radius = args.getDouble("radius"); - - Location apex = location.clone().add(0, height, 0); - - World world = location.getWorld(); - assert world != null; - - double angle = (Math.PI * 2) / amount; - - for (int i = 0; i < amount; i++) { - Location spawn = apex.clone(); - - spawn.add( - Math.sin(angle * i) * radius, - 0, - Math.cos(angle * i) * radius - ); - - world.spawn( - spawn, - Arrow.class - ).setVelocity(new Vector(0, -1, 0)); - } - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/effects/EffectBleed.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/effects/EffectBleed.java deleted file mode 100644 index 978c7df..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/effects/EffectBleed.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.willfp.ecoweapons.effects.effects; - -import com.willfp.eco.core.config.interfaces.JSONConfig; -import com.willfp.ecoweapons.effects.Effect; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.entity.Projectile; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.ProjectileHitEvent; -import org.jetbrains.annotations.NotNull; - -import java.util.concurrent.atomic.AtomicInteger; - -public class EffectBleed extends Effect implements Listener { - public EffectBleed() { - super("bleed"); - } - - @Override - public void handleMeleeAttack(@NotNull final Player player, - @NotNull final LivingEntity victim, - @NotNull final EntityDamageByEntityEvent event, - @NotNull final JSONConfig args) { - handle(player, victim, args); - } - - @Override - public void handleProjectileHitEntity(@NotNull final Player player, - @NotNull final LivingEntity victim, - @NotNull final Projectile projectile, - @NotNull final ProjectileHitEvent event, - @NotNull final JSONConfig args) { - handle(player, victim, args); - } - - private void handle(@NotNull final Player player, - @NotNull final LivingEntity victim, - @NotNull final JSONConfig args) { - double bleedDamage = args.getDouble("damage"); - - int bleedCount = args.getInt("amount"); - - AtomicInteger currentBleedCount = new AtomicInteger(0); - - this.getPlugin().getRunnableFactory().create(bukkitRunnable -> { - currentBleedCount.addAndGet(1); - - victim.damage(bleedDamage); - - if (currentBleedCount.get() >= bleedCount) { - bukkitRunnable.cancel(); - } - }).runTaskTimer(0, 10); - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/effects/EffectConsoleCommand.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/effects/EffectConsoleCommand.java deleted file mode 100644 index 2f0603e..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/effects/EffectConsoleCommand.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.willfp.ecoweapons.effects.effects; - -import com.willfp.eco.core.config.interfaces.JSONConfig; -import com.willfp.ecoweapons.effects.Effect; -import org.bukkit.Bukkit; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.entity.Projectile; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.ProjectileHitEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.util.RayTraceResult; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public class EffectConsoleCommand extends Effect { - public EffectConsoleCommand() { - super("console-command"); - } - - @Override - public void handleMeleeAttack(@NotNull final Player player, - @NotNull final LivingEntity victim, - @NotNull final EntityDamageByEntityEvent event, - @NotNull final JSONConfig args) { - Bukkit.getServer().dispatchCommand( - Bukkit.getConsoleSender(), - args.getString("command", false).replace("%player%", player.getName()) - ); - } - - @Override - public void handleProjectileHitEntity(@NotNull final Player player, - @NotNull final LivingEntity victim, - @NotNull final Projectile projectile, - @NotNull final ProjectileHitEvent event, - @NotNull final JSONConfig args) { - Bukkit.getServer().dispatchCommand( - Bukkit.getConsoleSender(), - args.getString("command", false).replace("%player%", player.getName()) - ); - } - - @Override - public void handleProjectileHit(@NotNull final Player player, - @NotNull final Projectile projectile, - @NotNull final ProjectileHitEvent event, - @NotNull final JSONConfig args) { - Bukkit.getServer().dispatchCommand( - Bukkit.getConsoleSender(), - args.getString("command", false).replace("%player%", player.getName()) - ); - } - - @Override - public void handleAltClick(@NotNull final Player player, - @NotNull final RayTraceResult blockRay, - @Nullable final RayTraceResult entityRay, - @NotNull final PlayerInteractEvent event, - @NotNull final JSONConfig args) { - Bukkit.getServer().dispatchCommand( - Bukkit.getConsoleSender(), - args.getString("command", false).replace("%player%", player.getName()) - ); - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/effects/EffectGivePotionEffect.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/effects/EffectGivePotionEffect.java deleted file mode 100644 index 4c21f8d..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/effects/EffectGivePotionEffect.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.willfp.ecoweapons.effects.effects; - -import com.willfp.eco.core.config.interfaces.JSONConfig; -import com.willfp.ecoweapons.effects.Effect; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.entity.Projectile; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.ProjectileHitEvent; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; -import org.jetbrains.annotations.NotNull; - -public class EffectGivePotionEffect extends Effect implements Listener { - public EffectGivePotionEffect() { - super("give-potion-effect"); - } - - @Override - public void handleMeleeAttack(@NotNull final Player player, - @NotNull final LivingEntity victim, - @NotNull final EntityDamageByEntityEvent event, - @NotNull final JSONConfig args) { - handle(player, victim, args); - } - - @Override - public void handleProjectileHitEntity(@NotNull final Player player, - @NotNull final LivingEntity victim, - @NotNull final Projectile projectile, - @NotNull final ProjectileHitEvent event, - @NotNull final JSONConfig args) { - handle(player, victim, args); - } - - private void handle(@NotNull final Player player, - @NotNull final LivingEntity victim, - @NotNull final JSONConfig args) { - PotionEffectType type = PotionEffectType.getByName(args.getString("potion").toUpperCase()); - int duration = args.getInt("duration"); - int strength = args.getInt("strength") - 1; - - if (args.getString("target").equalsIgnoreCase("player")) { - player.addPotionEffect( - new PotionEffect( - type, - duration, - strength - ) - ); - } else { - victim.addPotionEffect( - new PotionEffect( - type, - duration, - strength - ) - ); - } - - - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/effects/EffectRailgun.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/effects/EffectRailgun.java deleted file mode 100644 index 205ab29..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/effects/EffectRailgun.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.willfp.ecoweapons.effects.effects; - -import com.willfp.eco.core.config.interfaces.JSONConfig; -import com.willfp.ecoweapons.effects.Effect; -import org.bukkit.Location; -import org.bukkit.Particle; -import org.bukkit.Sound; -import org.bukkit.World; -import org.bukkit.entity.Entity; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.util.RayTraceResult; -import org.bukkit.util.Vector; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public class EffectRailgun extends Effect { - public EffectRailgun() { - super("railgun"); - } - - @Override - public void handleAltClick(@NotNull final Player player, - @NotNull final RayTraceResult blockRay, - @Nullable final RayTraceResult entityRay, - @NotNull final PlayerInteractEvent event, - @NotNull final JSONConfig args) { - double damage = args.getDouble("damage"); - Particle particle = Particle.valueOf(args.getString("particle", false).toUpperCase()); - - player.playSound(player.getLocation(), Sound.valueOf(args.getString("sound", false).toUpperCase()), 1, 1); - - showBeam(player.getLocation().add(0, player.getEyeHeight(), 0), blockRay, particle); - - if (entityRay.getHitEntity() instanceof LivingEntity victim) { - if (victim.equals(player)) { - return; - } - victim.damage(damage, player); - } else { - Location location = blockRay.getHitPosition().toLocation(player.getWorld()); - assert location.getWorld() != null; - - for (Entity nearbyEntity : location.getWorld().getNearbyEntities(location, 2, 2, 2)) { - if (nearbyEntity instanceof LivingEntity livingEntity) { - livingEntity.damage(damage, player); - } - } - } - } - - private void showBeam(@NotNull final Location playerLoc, - @NotNull final RayTraceResult rayTrace, - @NotNull final Particle particle) { - Vector ray = rayTrace.getHitPosition().clone().subtract(playerLoc.toVector()); - Vector raySegment = ray.clone().normalize(); - Location pos = playerLoc.clone(); - World world = pos.getWorld(); - assert world != null; - - double rayLength = ray.length(); - for (int i = 0; i < rayLength; i++) { - pos.add(raySegment); - world.spawnParticle(particle, pos, 1, 0, 0, 0, 0, null, true); - } - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/effects/EffectSpawnHelper.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/effects/EffectSpawnHelper.java deleted file mode 100644 index 4195808..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/effects/EffectSpawnHelper.java +++ /dev/null @@ -1,122 +0,0 @@ -package com.willfp.ecoweapons.effects.effects; - -import com.willfp.eco.core.config.interfaces.JSONConfig; -import com.willfp.eco.util.NumberUtils; -import com.willfp.ecoweapons.effects.Effect; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.attribute.Attribute; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Mob; -import org.bukkit.entity.Player; -import org.bukkit.entity.Projectile; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.EntityDeathEvent; -import org.bukkit.event.entity.EntityTargetEvent; -import org.bukkit.event.entity.ProjectileHitEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.util.RayTraceResult; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public class EffectSpawnHelper extends Effect implements Listener { - public EffectSpawnHelper() { - super("spawn-helper"); - } - - @Override - public void handleMeleeAttack(@NotNull final Player player, - @NotNull final LivingEntity victim, - @NotNull final EntityDamageByEntityEvent event, - @NotNull final JSONConfig args) { - doSpawn(victim, victim.getLocation(), args); - } - - @Override - public void handleProjectileHitEntity(@NotNull final Player player, - @NotNull final LivingEntity victim, - @NotNull final Projectile projectile, - @NotNull final ProjectileHitEvent event, - @NotNull final JSONConfig args) { - doSpawn(victim, victim.getLocation(), args); - } - - @Override - public void handleProjectileHit(@NotNull final Player player, - @NotNull final Projectile projectile, - @NotNull final ProjectileHitEvent event, - @NotNull final JSONConfig args) { - doSpawn(null, projectile.getLocation(), args); - } - - @Override - public void handleAltClick(@NotNull final Player player, - @NotNull final RayTraceResult blockRay, - @Nullable final RayTraceResult entityRay, - @NotNull final PlayerInteractEvent event, - @NotNull final JSONConfig args) { - doSpawn(entityRay.getHitEntity(), blockRay.getHitPosition().toLocation(player.getWorld()), args); - } - - private void doSpawn(@Nullable final Entity victim, - @NotNull final Location location, - @NotNull final JSONConfig args) { - if (victim != null) { - if (!victim.getMetadata("eco-target").isEmpty()) { - return; - } - } - - World world = location.getWorld(); - assert world != null; - - int toSpawn = args.getInt("amount"); - int ticksToLive = args.getInt("ticks-to-live"); - double health = args.getDouble("health"); - double range = args.getDouble("range"); - - EntityType entityType = EntityType.valueOf(args.getString("entity").toUpperCase()); - - for (int i = 0; i < toSpawn; i++) { - Location locToSpawn = location.clone().add(NumberUtils.randFloat(-range, range), NumberUtils.randFloat(0, range), NumberUtils.randFloat(-range, range)); - Mob entity = (Mob) world.spawnEntity(locToSpawn, entityType); - - if (victim instanceof LivingEntity) { - entity.setTarget((LivingEntity) victim); - } - if (health > entity.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue()) { - health = entity.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue(); - } - entity.setHealth(health); - if (victim != null) { - entity.setMetadata("eco-target", this.getPlugin().getMetadataValueFactory().create(victim)); - } - this.getPlugin().getScheduler().runLater(entity::remove, ticksToLive); - } - } - - @EventHandler - public void onSwitchTarget(@NotNull final EntityTargetEvent event) { - if (event.getEntity().getMetadata("eco-target").isEmpty()) { - return; - } - - LivingEntity target = (LivingEntity) event.getEntity().getMetadata("eco-target").get(0).value(); - event.setTarget(target); - } - - @EventHandler(priority = EventPriority.LOW) - public void onDropItem(@NotNull final EntityDeathEvent event) { - if (event.getEntity().getMetadata("eco-target").isEmpty()) { - return; - } - - event.getDrops().clear(); - event.setDroppedExp(0); - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/effects/EffectStrikeLightning.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/effects/EffectStrikeLightning.java deleted file mode 100644 index c5e27ed..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/effects/EffectStrikeLightning.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.willfp.ecoweapons.effects.effects; - -import com.willfp.eco.core.config.interfaces.JSONConfig; -import com.willfp.ecoweapons.effects.Effect; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.entity.Projectile; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.ProjectileHitEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.util.RayTraceResult; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public class EffectStrikeLightning extends Effect { - public EffectStrikeLightning() { - super("strike-lightning"); - } - - @Override - public void handleMeleeAttack(@NotNull final Player player, - @NotNull final LivingEntity victim, - @NotNull final EntityDamageByEntityEvent event, - @NotNull final JSONConfig args) { - handle(victim.getLocation(), args); - } - - @Override - public void handleProjectileHit(@NotNull final Player player, - @NotNull final Projectile projectile, - @NotNull final ProjectileHitEvent event, - @NotNull final JSONConfig args) { - handle(projectile.getLocation(), args); - } - - @Override - public void handleProjectileHitEntity(@NotNull final Player player, - @NotNull final LivingEntity victim, - @NotNull final Projectile projectile, - @NotNull final ProjectileHitEvent event, - @NotNull final JSONConfig args) { - handle(victim.getLocation(), args); - } - - @Override - public void handleAltClick(@NotNull final Player player, - @NotNull final RayTraceResult blockRay, - @Nullable final RayTraceResult entityRay, - @NotNull final PlayerInteractEvent event, - @NotNull final JSONConfig args) { - handle(entityRay.getHitPosition().toLocation(player.getWorld()), args); - } - - private void handle(@NotNull final Location location, - @NotNull final JSONConfig args) { - World world = location.getWorld(); - assert world != null; - - for (int i = 0; i < args.getDouble("amount"); i++) { - this.getPlugin().getScheduler().runLater(() -> { - world.strikeLightning(location); - }, i); - } - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/effects/EffectWarp.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/effects/EffectWarp.java deleted file mode 100644 index b9551b1..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/effects/EffectWarp.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.willfp.ecoweapons.effects.effects; - -import com.willfp.eco.core.config.interfaces.JSONConfig; -import com.willfp.ecoweapons.effects.Effect; -import org.bukkit.Location; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.entity.Projectile; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.ProjectileHitEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.util.RayTraceResult; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public class EffectWarp extends Effect { - public EffectWarp() { - super("warp"); - } - - @Override - public void handleMeleeAttack(@NotNull final Player player, - @NotNull final LivingEntity victim, - @NotNull final EntityDamageByEntityEvent event, - @NotNull final JSONConfig args) { - handle(player, victim.getLocation(), args); - } - - @Override - public void handleProjectileHitEntity(@NotNull final Player player, - @NotNull final LivingEntity victim, - @NotNull final Projectile projectile, - @NotNull final ProjectileHitEvent event, - @NotNull final JSONConfig args) { - handle(player, victim.getLocation(), args); - } - - @Override - public void handleProjectileHit(@NotNull final Player player, - @NotNull final Projectile projectile, - @NotNull final ProjectileHitEvent event, - @NotNull final JSONConfig args) { - handle(player, projectile.getLocation(), args); - } - - @Override - public void handleAltClick(@NotNull final Player player, - @NotNull final RayTraceResult blockRay, - @Nullable final RayTraceResult entityRay, - @NotNull final PlayerInteractEvent event, - @NotNull final JSONConfig args) { - handle(player, blockRay.getHitPosition().toLocation(player.getWorld()), args); - } - - private void handle(@NotNull final Player player, - @NotNull final Location location, - @NotNull final JSONConfig args) { - player.teleport(location); - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/util/EffectListener.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/util/EffectListener.java deleted file mode 100644 index dd06df9..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/effects/util/EffectListener.java +++ /dev/null @@ -1,282 +0,0 @@ -package com.willfp.ecoweapons.effects.util; - -import com.willfp.eco.core.config.interfaces.JSONConfig; -import com.willfp.eco.core.integrations.antigrief.AntigriefManager; -import com.willfp.eco.util.ArrowUtils; -import com.willfp.eco.util.NumberUtils; -import com.willfp.ecoweapons.effects.Effect; -import com.willfp.ecoweapons.effects.TriggerType; -import com.willfp.ecoweapons.weapons.Weapon; -import com.willfp.ecoweapons.weapons.util.WeaponUtils; -import org.bukkit.FluidCollisionMode; -import org.bukkit.Material; -import org.bukkit.Tag; -import org.bukkit.World; -import org.bukkit.entity.Arrow; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.entity.Trident; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.ProjectileHitEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.inventory.ItemStack; -import org.bukkit.util.RayTraceResult; -import org.jetbrains.annotations.NotNull; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -public class EffectListener implements Listener { - /** - * Items that must be left-clicked to activate spells for. - */ - private static final List LEFT_CLICK_ITEMS = Arrays.asList( - Material.FISHING_ROD, - Material.BOW, - Material.CROSSBOW, - Material.TRIDENT - ); - - /** - * Items that don't cause spells to activate when right clicked. - */ - private static final List BLACKLIST_CLICKED_BLOCKS = new ArrayList<>(Arrays.asList( - Material.CRAFTING_TABLE, - Material.GRINDSTONE, - Material.ENCHANTING_TABLE, - Material.FURNACE, - Material.SMITHING_TABLE, - Material.LEVER, - Material.REPEATER, - Material.COMPARATOR, - Material.RESPAWN_ANCHOR, - Material.NOTE_BLOCK, - Material.ITEM_FRAME, - Material.CHEST, - Material.BARREL, - Material.BEACON, - Material.LECTERN, - Material.FLETCHING_TABLE, - Material.SMITHING_TABLE, - Material.STONECUTTER, - Material.SMOKER, - Material.BLAST_FURNACE, - Material.BREWING_STAND, - Material.DISPENSER, - Material.DROPPER - )); - - static { - BLACKLIST_CLICKED_BLOCKS.addAll(Tag.BUTTONS.getValues()); - BLACKLIST_CLICKED_BLOCKS.addAll(Tag.BEDS.getValues()); - BLACKLIST_CLICKED_BLOCKS.addAll(Tag.DOORS.getValues()); - BLACKLIST_CLICKED_BLOCKS.addAll(Tag.FENCE_GATES.getValues()); - BLACKLIST_CLICKED_BLOCKS.addAll(Tag.TRAPDOORS.getValues()); - BLACKLIST_CLICKED_BLOCKS.addAll(Tag.ANVIL.getValues()); - BLACKLIST_CLICKED_BLOCKS.addAll(Tag.SHULKER_BOXES.getValues()); - } - - /** - * Handle {@link TriggerType#MELEE_ATTACK}. - * - * @param event The event. - */ - @EventHandler( - ignoreCancelled = true - ) - public void meleeAttackListener(@NotNull final EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player player)) { - return; - } - - if (!(event.getEntity() instanceof LivingEntity victim)) { - return; - } - - Weapon weapon = WeaponUtils.getWeaponFromItem(player.getInventory().getItemInMainHand()); - if (weapon == null) { - return; - } - - if (!WeaponUtils.areConditionsMet(player, weapon)) { - return; - } - - - for (Effect effect : weapon.getEffects(TriggerType.MELEE_ATTACK)) { - if (AntigriefManager.canInjure(player, victim)) { - if (effect.isCooldownOver(player, weapon, TriggerType.MELEE_ATTACK)) { - JSONConfig args = weapon.getEffectArgs(effect, TriggerType.MELEE_ATTACK); - Double chance = args.getDoubleOrNull("chance"); - - if (chance != null) { - if (NumberUtils.randInt(0, 100) > chance) { - continue; - } - } - - effect.handleMeleeAttack(player, victim, event, args); - } - } - } - } - - /** - * Handle {@link TriggerType#PROJECTILE_HIT} and {@link TriggerType#PROJECTILE_HIT_ENTITY}. - * - * @param event The event. - */ - @EventHandler( - ignoreCancelled = true - ) - public void projectileHitListener(@NotNull final ProjectileHitEvent event) { - if (!(event.getEntity() instanceof Trident || event.getEntity() instanceof Arrow)) { - return; - } - - ItemStack item; - - if (event.getEntity() instanceof Trident trident) { - item = trident.getItem(); - } else { - item = ArrowUtils.getBow((Arrow) event.getEntity()); - } - - if (item == null) { - return; - } - - if (!(event.getEntity().getShooter() instanceof Player player)) { - return; - } - - Weapon weapon = WeaponUtils.getWeaponFromItem(item); - if (weapon == null) { - return; - } - - if (!WeaponUtils.areConditionsMet(player, weapon)) { - return; - } - - if (event.getHitEntity() == null) { - for (Effect effect : weapon.getEffects(TriggerType.PROJECTILE_HIT)) { - if (effect.isCooldownOver(player, weapon, TriggerType.PROJECTILE_HIT)) { - JSONConfig args = weapon.getEffectArgs(effect, TriggerType.PROJECTILE_HIT); - Double chance = args.getDoubleOrNull("chance"); - - if (chance != null) { - if (NumberUtils.randInt(0, 100) > chance) { - continue; - } - } - effect.handleProjectileHit(player, event.getEntity(), event, args); - } - } - } else { - if (event.getHitEntity() instanceof LivingEntity victim) { - for (Effect effect : weapon.getEffects(TriggerType.PROJECTILE_HIT_ENTITY)) { - if (AntigriefManager.canInjure(player, victim)) { - if (effect.isCooldownOver(player, weapon, TriggerType.PROJECTILE_HIT_ENTITY)) { - JSONConfig args = weapon.getEffectArgs(effect, TriggerType.PROJECTILE_HIT_ENTITY); - Double chance = args.getDoubleOrNull("chance"); - - if (chance != null) { - if (NumberUtils.randInt(0, 100) > chance) { - continue; - } - } - effect.handleProjectileHitEntity(player, victim, event.getEntity(), event, args); - } - } - } - } - } - } - - /** - * Handle {@link TriggerType#ALT_CLICK} and {@link TriggerType#SHIFT_ALT_CLICK}. - * - * @param event The event. - */ - @EventHandler - public void altClickListener(@NotNull final PlayerInteractEvent event) { - Player player = event.getPlayer(); - ItemStack itemStack = player.getInventory().getItemInMainHand(); - - Weapon weapon = WeaponUtils.getWeaponFromItem(itemStack); - if (weapon == null) { - return; - } - - if (LEFT_CLICK_ITEMS.contains(itemStack.getType())) { - if (event.getAction() == Action.RIGHT_CLICK_AIR || event.getAction() == Action.RIGHT_CLICK_BLOCK) { - return; - } - } else { - if (event.getAction() == Action.LEFT_CLICK_AIR || event.getAction() == Action.LEFT_CLICK_BLOCK) { - return; - } - } - - if (event.getClickedBlock() != null) { - if (BLACKLIST_CLICKED_BLOCKS.contains(event.getClickedBlock().getType())) { - return; - } - } - - if (!WeaponUtils.areConditionsMet(player, weapon)) { - return; - } - - RayTraceResult result = player.rayTraceBlocks(50, FluidCollisionMode.NEVER); - if (result == null) { - return; - } - - World world = player.getLocation().getWorld(); - assert world != null; - - RayTraceResult entityResult = world.rayTraceEntities( - player.getEyeLocation(), - player.getEyeLocation().getDirection(), - 50, - 3, - entity -> entity instanceof LivingEntity - ); - - if (player.isSneaking()) { - for (Effect effect : weapon.getEffects(TriggerType.SHIFT_ALT_CLICK)) { - if (effect.isCooldownOver(player, weapon, TriggerType.SHIFT_ALT_CLICK)) { - JSONConfig args = weapon.getEffectArgs(effect, TriggerType.SHIFT_ALT_CLICK); - Double chance = args.getDoubleOrNull("chance"); - - if (chance != null) { - if (NumberUtils.randInt(0, 100) > chance) { - continue; - } - } - effect.handleAltClick(player, result, entityResult, event, args); - } - } - } else { - for (Effect effect : weapon.getEffects(TriggerType.ALT_CLICK)) { - if (effect.isCooldownOver(player, weapon, TriggerType.ALT_CLICK)) { - JSONConfig args = weapon.getEffectArgs(effect, TriggerType.ALT_CLICK); - Double chance = args.getDoubleOrNull("chance"); - - if (chance != null) { - if (NumberUtils.randInt(0, 100) > chance) { - continue; - } - } - effect.handleAltClick(player, result, entityResult, event, args); - } - } - } - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/util/DiscoverRecipeListener.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/util/DiscoverRecipeListener.java deleted file mode 100644 index 1e16c03..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/util/DiscoverRecipeListener.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.willfp.ecoweapons.util; - -import com.willfp.eco.core.EcoPlugin; -import com.willfp.eco.core.PluginDependent; -import org.bukkit.Bukkit; -import org.bukkit.NamespacedKey; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.inventory.ShapedRecipe; -import org.jetbrains.annotations.NotNull; - -public class DiscoverRecipeListener extends PluginDependent implements Listener { - /** - * Register listener. - * - * @param plugin Talismans. - */ - public DiscoverRecipeListener(@NotNull final EcoPlugin plugin) { - super(plugin); - } - - /** - * Unlock all recipes on player join. - * - * @param event The event to listen for. - */ - @EventHandler - public void onJoin(@NotNull final PlayerJoinEvent event) { - Player player = event.getPlayer(); - - if (this.getPlugin().getConfigYml().getBool("discover-recipes")) { - Bukkit.getServer().recipeIterator().forEachRemaining(recipe -> { - if (recipe instanceof ShapedRecipe) { - NamespacedKey key = ((ShapedRecipe) recipe).getKey(); - if (key.getNamespace().equals("ecoweapons")) { - if (!key.getKey().contains("displayed")) { - player.discoverRecipe(key); - } - } - } - }); - } - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/weapons/Weapon.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/weapons/Weapon.java deleted file mode 100644 index fe919a5..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/weapons/Weapon.java +++ /dev/null @@ -1,244 +0,0 @@ -package com.willfp.ecoweapons.weapons; - -import com.willfp.eco.core.EcoPlugin; -import com.willfp.eco.core.config.interfaces.JSONConfig; -import com.willfp.eco.core.display.Display; -import com.willfp.eco.core.items.CustomItem; -import com.willfp.eco.core.items.builder.ItemBuilder; -import com.willfp.eco.core.items.builder.ItemStackBuilder; -import com.willfp.eco.core.recipe.Recipes; -import com.willfp.eco.util.NumberUtils; -import com.willfp.ecoweapons.conditions.Condition; -import com.willfp.ecoweapons.conditions.Conditions; -import com.willfp.ecoweapons.effects.Effect; -import com.willfp.ecoweapons.effects.Effects; -import com.willfp.ecoweapons.effects.TriggerType; -import com.willfp.ecoweapons.weapons.util.WeaponUtils; -import lombok.AccessLevel; -import lombok.Getter; -import org.bukkit.Material; -import org.bukkit.NamespacedKey; -import org.bukkit.attribute.Attribute; -import org.bukkit.attribute.AttributeModifier; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.inventory.EquipmentSlot; -import org.bukkit.inventory.ItemFlag; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.persistence.PersistentDataType; -import org.jetbrains.annotations.NotNull; - -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; -import java.util.Set; -import java.util.UUID; -import java.util.stream.Collectors; - -@SuppressWarnings("unchecked") -public class Weapon { - /** - * Instance of EcoWeapons. - */ - @Getter(AccessLevel.PRIVATE) - private final EcoPlugin plugin; - - /** - * The config of the weapon. - */ - @Getter(AccessLevel.PRIVATE) - private final JSONConfig config; - - /** - * The name of the weapon. - */ - @Getter - private final String name; - - /** - * Conditions and their values. - */ - @Getter - private final Map, Object> conditions = new HashMap<>(); - - /** - * Effects and their strengths. - */ - private final Map> effects = new HashMap<>(); - - /** - * Weapon item. - */ - @Getter - private final ItemStack item; - - /** - * Create a new weapon. - * - * @param config The weapons's config. - * @param plugin Instance of EcoWeapons. - */ - public Weapon(@NotNull final JSONConfig config, - @NotNull final EcoPlugin plugin) { - this.config = config; - this.plugin = plugin; - this.name = config.getString("name"); - - for (JSONConfig cfg : this.getConfig().getSubsections("conditions")) { - Condition effect = Conditions.getByName(cfg.getString("id")); - Object value = cfg.get("args"); - conditions.put(effect, value); - } - - for (JSONConfig cfg : this.getConfig().getSubsections("effects")) { - Effect effect = Effects.getByName(cfg.getString("id")); - if (effect == null) { - this.getPlugin().getLogger().warning("Invalid effect " + cfg.getString("id") + " specified in " + this.getName()); - continue; - } - - JSONConfig value = (JSONConfig) cfg.getSubsection("args"); - TriggerType triggerType = TriggerType.getByName(cfg.getString("trigger")); - effects.computeIfAbsent(triggerType, k -> new HashMap<>()); - Map triggerEffects = effects.get(triggerType); - triggerEffects.put(effect, value); - effects.put(triggerType, triggerEffects); - } - - for (TriggerType value : TriggerType.values()) { - if (!effects.containsKey(value)) { - effects.put(value, new HashMap<>()); - } - } - - item = construct((JSONConfig) this.getConfig().getSubsection("item")); - } - - private ItemStack construct(@NotNull final JSONConfig itemConfig) { - Material material = Material.getMaterial(itemConfig.getString("material").toUpperCase()); - - assert material != null; - - ItemBuilder builder = new ItemStackBuilder(material); - - builder.setDisplayName(itemConfig.getString("displayName")) - .addItemFlag( - itemConfig.getStrings("flags").stream() - .map(s -> ItemFlag.valueOf(s.toUpperCase())) - .toArray(ItemFlag[]::new) - ) - .setUnbreakable(itemConfig.getBool("unbreakable")) - .addLoreLines(itemConfig.getStrings("lore").stream().map(s -> Display.PREFIX + s).collect(Collectors.toList())) - .setCustomModelData(() -> { - int data = itemConfig.getInt("customModelData"); - return data != -1 ? data : null; - }) - .writeMetaKey( - this.getPlugin().getNamespacedKeyFactory().create("weapon"), - PersistentDataType.STRING, - name - ); - - Map enchants = new HashMap<>(); - - for (JSONConfig enchantSection : itemConfig.getSubsections("enchants")) { - Enchantment enchantment = Enchantment.getByKey(NamespacedKey.minecraft(enchantSection.getString("id"))); - int level = enchantSection.getInt("level"); - enchants.put(enchantment, level); - } - - enchants.forEach(builder::addEnchantment); - - ItemStack itemStack = builder.build(); - - ItemMeta meta = itemStack.getItemMeta(); - assert meta != null; - - for (JSONConfig attribute : itemConfig.getSubsections("attributes")) { - meta.addAttributeModifier( - Attribute.valueOf(attribute.getString("id").toUpperCase()), - new AttributeModifier( - UUID.randomUUID(), - String.valueOf(NumberUtils.randInt(0, 10000000)), - attribute.getDouble("amount"), - AttributeModifier.Operation.valueOf(attribute.getString("operation").toUpperCase()), - EquipmentSlot.HAND - ) - ); - } - - itemStack.setItemMeta(meta); - - new CustomItem(this.getPlugin().getNamespacedKeyFactory().create(name.toLowerCase()), test -> Objects.equals(this, WeaponUtils.getWeaponFromItem(test)), itemStack).register(); - - if (itemConfig.getBool("craftable")) { - Recipes.createAndRegisterRecipe( - this.getPlugin(), - this.getName(), - itemStack, - itemConfig.getStrings("recipe") - ); - } - - return itemStack; - } - - /** - * Get effect strength of effect. - * - * @param effect The effect to query. - * @param triggerType The trigger type. - * @return The strength. - */ - public JSONConfig getEffectArgs(@NotNull final Effect effect, - @NotNull final TriggerType triggerType) { - return effects.get(triggerType).get(effect); - } - - /** - * Get cooldown time. - * - * @param effect The effect. - * @param triggerType The trigger type. - * @return The time. - */ - public double getCooldownTime(@NotNull final Effect effect, - @NotNull final TriggerType triggerType) { - return getEffectArgs(effect, triggerType).getDouble("cooldown"); - } - - /** - * Get all effects for a trigger type. - * - * @param triggerType The type. - * @return The effects. - */ - public Set getEffects(@NotNull final TriggerType triggerType) { - return effects.get(triggerType).keySet(); - } - - @Override - public boolean equals(final Object o) { - if (this == o) { - return true; - } - - if (!(o instanceof Weapon set)) { - return false; - } - - return this.name.equals(set.name); - } - - @Override - public int hashCode() { - return Objects.hash(this.name); - } - - @Override - public String toString() { - return "Weapon{" - + this.name - + "}"; - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/weapons/Weapons.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/weapons/Weapons.java deleted file mode 100644 index ad57f12..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/weapons/Weapons.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.willfp.ecoweapons.weapons; - - -import com.google.common.collect.BiMap; -import com.google.common.collect.HashBiMap; -import com.google.common.collect.ImmutableList; -import com.willfp.eco.core.config.interfaces.JSONConfig; -import com.willfp.eco.core.config.updating.ConfigUpdater; -import com.willfp.ecoweapons.EcoWeaponsPlugin; -import lombok.experimental.UtilityClass; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.List; - -@UtilityClass -public class Weapons { - /** - * Registered weapons. - */ - private static final BiMap BY_NAME = HashBiMap.create(); - - /** - * Get all registered {@link Weapon}s. - * - * @return A list of all {@link Weapon}s. - */ - public static List values() { - return ImmutableList.copyOf(BY_NAME.values()); - } - - /** - * Get {@link Weapon} matching name. - * - * @param name The name to search for. - * @return The matching {@link Weapon}, or null if not found. - */ - @Nullable - public static Weapon getByName(@NotNull final String name) { - return BY_NAME.get(name); - } - - /** - * Update all {@link Weapon}s. - * - * @param plugin Instance of EcoWeapons. - */ - @ConfigUpdater - public static void update(@NotNull final EcoWeaponsPlugin plugin) { - for (Weapon weapon : values()) { - removeWeapon(weapon); - } - - for (JSONConfig setConfig : plugin.getEcoWeaponsJson().getSubsections("weapons")) { - addNewWeapon(new Weapon(setConfig, plugin)); - } - } - - /** - * Add new {@link Weapon} to EcoWeapons. - * - * @param weapon The {@link Weapon} to add. - */ - public static void addNewWeapon(@NotNull final Weapon weapon) { - BY_NAME.remove(weapon.getName()); - BY_NAME.put(weapon.getName(), weapon); - } - - /** - * Remove {@link Weapon} from EcoWeapons. - * - * @param weapon The {@link Weapon} to remove. - */ - public static void removeWeapon(@NotNull final Weapon weapon) { - BY_NAME.remove(weapon.getName()); - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/weapons/util/WeaponUtils.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/weapons/util/WeaponUtils.java deleted file mode 100644 index 566cab5..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoweapons/weapons/util/WeaponUtils.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.willfp.ecoweapons.weapons.util; - -import com.willfp.ecoweapons.EcoWeaponsPlugin; -import com.willfp.ecoweapons.conditions.Condition; -import com.willfp.ecoweapons.weapons.Weapon; -import com.willfp.ecoweapons.weapons.Weapons; -import lombok.experimental.UtilityClass; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.persistence.PersistentDataContainer; -import org.bukkit.persistence.PersistentDataType; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Map; - -@UtilityClass -public class WeaponUtils { - /** - * Instance of EcoWeapons. - */ - private static final EcoWeaponsPlugin PLUGIN = EcoWeaponsPlugin.getInstance(); - - /** - * Get weapon from an item. - * - * @param itemStack The itemStack to check. - * @return The weapon, or null if no weapon is found. - */ - @Nullable - public Weapon getWeaponFromItem(@Nullable final ItemStack itemStack) { - if (itemStack == null) { - return null; - } - - ItemMeta meta = itemStack.getItemMeta(); - - if (meta == null) { - return null; - } - - return getWeaponFromItem(meta); - } - - /** - * Get weapon on an item. - * - * @param meta The itemStack to check. - * @return The weapon, or null if no weapon is found. - */ - @Nullable - public Weapon getWeaponFromItem(@NotNull final ItemMeta meta) { - PersistentDataContainer container = meta.getPersistentDataContainer(); - String weaponName = container.get(PLUGIN.getNamespacedKeyFactory().create("weapon"), PersistentDataType.STRING); - - if (weaponName == null) { - return null; - } - - return Weapons.getByName(weaponName); - } - - /** - * Get if all conditions are met for a player. - * - * @param player The player. - * @param weapon The weapon. - * @return If conditions are met. - */ - public boolean areConditionsMet(@NotNull final Player player, - @NotNull final Weapon weapon) { - for (Map.Entry, Object> entry : weapon.getConditions().entrySet()) { - if (!entry.getKey().isMet(player, entry.getValue())) { - return false; - } - } - - return true; - } -} diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoweapons/EcoWeaponsPlugin.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoweapons/EcoWeaponsPlugin.kt new file mode 100644 index 0000000..e5f90fe --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoweapons/EcoWeaponsPlugin.kt @@ -0,0 +1,75 @@ +package com.willfp.ecoweapons + +import com.willfp.eco.core.EcoPlugin +import com.willfp.eco.core.command.impl.PluginCommand +import com.willfp.eco.core.display.DisplayModule +import com.willfp.ecoweapons.commands.CommandEcoweapons +import com.willfp.ecoweapons.config.EcoWeaponsJson +import com.willfp.ecoweapons.display.WeaponsDisplay +import com.willfp.ecoweapons.util.DiscoverRecipeListener +import com.willfp.ecoweapons.weapons.WeaponListener +import com.willfp.ecoweapons.weapons.WeaponUtils +import com.willfp.libreforge.Holder +import com.willfp.libreforge.HolderProvider +import com.willfp.libreforge.LibReforge +import org.bukkit.entity.Player +import org.bukkit.event.Listener + +class EcoWeaponsPlugin : EcoPlugin(1241, 12134, "&#ff0000") { + /** + * tiers.json. + */ + val ecoWeaponsJson: EcoWeaponsJson + + /** + * Internal constructor called by bukkit on plugin load. + */ + init { + instance = this + ecoWeaponsJson = EcoWeaponsJson(this) + LibReforge.init(this) + LibReforge.registerHolderProvider(object : HolderProvider { + override fun providerHolders(player: Player): Iterable { + val weapon = WeaponUtils.getWeaponOnPlayer(player) + return if (weapon == null) emptyList() else listOf(weapon) + } + }) + } + + override fun handleEnable() { + LibReforge.enable(this) + } + + override fun handleDisable() { + LibReforge.disable(this) + } + + override fun handleReload() { + LibReforge.reload(this) + } + + override fun loadListeners(): List { + return listOf( + DiscoverRecipeListener(this), + WeaponListener() + ) + } + + override fun loadPluginCommands(): List { + return listOf( + CommandEcoweapons(this) + ) + } + + override fun createDisplayModule(): DisplayModule { + return WeaponsDisplay(this) + } + + companion object { + /** + * Instance of EcoWeapons. + */ + @JvmStatic + lateinit var instance: EcoWeaponsPlugin + } +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoweapons/commands/CommandEcoweapons.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoweapons/commands/CommandEcoweapons.kt new file mode 100644 index 0000000..43994b3 --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoweapons/commands/CommandEcoweapons.kt @@ -0,0 +1,25 @@ +package com.willfp.ecoweapons.commands + +import com.willfp.eco.core.EcoPlugin +import com.willfp.eco.core.command.CommandHandler +import com.willfp.eco.core.command.impl.PluginCommand + +class CommandEcoweapons( + plugin: EcoPlugin +) : PluginCommand( + plugin, + "ecoweapons", + "ecoweapons.command.ecoweapons", + false) { + init { + addSubcommand(CommandReload(plugin)) + .addSubcommand(CommandGive(plugin)) + } + override fun getHandler(): CommandHandler { + return CommandHandler { sender, _ -> + sender.sendMessage( + plugin.langYml.getMessage("invalid-command") + ) + } + } +} diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoweapons/commands/CommandGive.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoweapons/commands/CommandGive.kt new file mode 100644 index 0000000..36e539a --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoweapons/commands/CommandGive.kt @@ -0,0 +1,89 @@ +package com.willfp.ecoweapons.commands + +import com.willfp.eco.core.EcoPlugin +import com.willfp.eco.core.command.CommandHandler +import com.willfp.eco.core.command.TabCompleteHandler +import com.willfp.eco.core.command.impl.Subcommand +import org.bukkit.Bukkit +import org.bukkit.inventory.ItemStack +import org.bukkit.util.StringUtil +import com.willfp.ecoweapons.weapons.Weapons + +class CommandGive(plugin: EcoPlugin) : Subcommand(plugin, "give", "ecoweapons.command.give", false) { + private val numbers = listOf( + "1", + "2", + "3", + "4", + "5", + "10", + "32", + "64" + ) + + override fun getHandler(): CommandHandler { + return CommandHandler { sender, args -> + if (args.isEmpty()) { + sender.sendMessage(plugin.langYml.getMessage("needs-player")) + return@CommandHandler + } + if (args.size == 1) { + sender.sendMessage(plugin.langYml.getMessage("needs-item")) + return@CommandHandler + } + val receiverName = args[0] + val receiver = Bukkit.getPlayer(receiverName) + if (receiver == null) { + sender.sendMessage(plugin.langYml.getMessage("invalid-player")) + return@CommandHandler + } + val itemID = args[1] + var amount = 1 + val weapon = Weapons.getByID(itemID.lowercase()) + if (weapon == null) { + sender.sendMessage(plugin.langYml.getMessage("invalid-item")) + return@CommandHandler + } + var message = plugin.langYml.getMessage("give-success") + message = message.replace("%item%", weapon.id).replace("%recipient%", receiver.name) + sender.sendMessage(message) + if (args.size == 3) { + amount = args[2].toIntOrNull() ?: 1 + } + val item: ItemStack = weapon.itemStack + item.amount = amount + receiver.inventory.addItem(item) + } + } + + override fun getTabCompleter(): TabCompleteHandler { + return TabCompleteHandler { _, args -> + val completions = mutableListOf() + + if (args.isEmpty()) { + return@TabCompleteHandler Weapons.values().map { it.id } + } + + if (args.size == 1) { + StringUtil.copyPartialMatches( + args[0], + Bukkit.getOnlinePlayers().map { it.name }, + completions) + return@TabCompleteHandler completions + } + + if (args.size == 2) { + StringUtil.copyPartialMatches(args[1], Weapons.values().map { it.id }, completions) + completions.sort() + return@TabCompleteHandler completions + } + + if (args.size == 3) { + StringUtil.copyPartialMatches(args[2], numbers, completions) + return@TabCompleteHandler completions + } + + emptyList() + } + } +} diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoweapons/commands/CommandReload.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoweapons/commands/CommandReload.kt new file mode 100644 index 0000000..762369b --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoweapons/commands/CommandReload.kt @@ -0,0 +1,15 @@ +package com.willfp.ecoweapons.commands + +import com.willfp.eco.core.EcoPlugin +import com.willfp.eco.core.command.impl.Subcommand +import com.willfp.eco.core.command.CommandHandler +import org.bukkit.command.CommandSender + +class CommandReload(plugin: EcoPlugin) : Subcommand(plugin, "reload", "ecoweapons.command.reload", false) { + override fun getHandler(): CommandHandler { + return CommandHandler { sender: CommandSender, args: List? -> + plugin.reload() + sender.sendMessage(plugin.langYml.getMessage("reloaded")) + } + } +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoweapons/config/EcoWeaponsJson.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoweapons/config/EcoWeaponsJson.kt new file mode 100644 index 0000000..6394d7e --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoweapons/config/EcoWeaponsJson.kt @@ -0,0 +1,6 @@ +package com.willfp.ecoweapons.config + +import com.willfp.eco.core.EcoPlugin +import com.willfp.eco.core.config.json.JSONStaticBaseConfig + +class EcoWeaponsJson(plugin: EcoPlugin) : JSONStaticBaseConfig("ecoweapons", plugin) \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoweapons/display/WeaponsDisplay.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoweapons/display/WeaponsDisplay.kt new file mode 100644 index 0000000..2a0b261 --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoweapons/display/WeaponsDisplay.kt @@ -0,0 +1,28 @@ +package com.willfp.ecoweapons.display + +import com.willfp.eco.core.EcoPlugin +import com.willfp.eco.core.display.DisplayModule +import com.willfp.eco.core.display.DisplayPriority +import org.bukkit.inventory.ItemStack +import com.willfp.ecoweapons.weapons.WeaponUtils + +class WeaponsDisplay(plugin: EcoPlugin) : DisplayModule(plugin, DisplayPriority.LOWEST) { + override fun display( + itemStack: ItemStack, + vararg args: Any + ) { + val meta = itemStack.itemMeta ?: return + val weapon = WeaponUtils.getWeaponFromItem(meta) ?: return + val weaponMeta = weapon.itemStack.itemMeta ?: return + val lore: MutableList = weaponMeta.lore?.toMutableList() ?: return + + if (meta.hasLore()) { + lore.addAll(meta.lore ?: return) + } + + meta.lore = lore + meta.setDisplayName(weaponMeta.displayName) + meta.addItemFlags(*weaponMeta.itemFlags.toTypedArray()) + itemStack.itemMeta = meta + } +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoweapons/util/DiscoverRecipeListener.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoweapons/util/DiscoverRecipeListener.kt new file mode 100644 index 0000000..0a30f73 --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoweapons/util/DiscoverRecipeListener.kt @@ -0,0 +1,28 @@ +package com.willfp.ecoweapons.util + +import com.willfp.eco.core.EcoPlugin +import org.bukkit.Bukkit +import org.bukkit.event.EventHandler +import org.bukkit.event.Listener +import org.bukkit.event.player.PlayerJoinEvent +import org.bukkit.inventory.Recipe +import org.bukkit.inventory.ShapedRecipe + +class DiscoverRecipeListener(private val plugin: EcoPlugin) : Listener { + @EventHandler + fun onJoin(event: PlayerJoinEvent) { + val player = event.player + if (plugin.configYml.getBool("discover-recipes")) { + Bukkit.getServer().recipeIterator().forEachRemaining { recipe: Recipe? -> + if (recipe is ShapedRecipe) { + val key = recipe.key + if (key.namespace == "ecoweapons") { + if (!key.key.contains("displayed")) { + player.discoverRecipe(key) + } + } + } + } + } + } +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoweapons/weapons/Weapon.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoweapons/weapons/Weapon.kt new file mode 100644 index 0000000..93cff55 --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoweapons/weapons/Weapon.kt @@ -0,0 +1,95 @@ +package com.willfp.ecoweapons.weapons + +import com.willfp.eco.core.EcoPlugin +import com.willfp.eco.core.config.interfaces.JSONConfig +import com.willfp.eco.core.display.Display +import com.willfp.eco.core.items.CustomItem +import com.willfp.eco.core.items.Items +import com.willfp.eco.core.items.builder.ItemStackBuilder +import com.willfp.eco.core.recipe.Recipes +import com.willfp.libreforge.Holder +import com.willfp.libreforge.conditions.Conditions +import com.willfp.libreforge.effects.Effects +import org.bukkit.NamespacedKey +import org.bukkit.enchantments.Enchantment +import org.bukkit.inventory.ItemFlag +import org.bukkit.inventory.ItemStack +import org.bukkit.persistence.PersistentDataType +import org.jetbrains.annotations.NotNull +import java.util.* + +class Weapon( + private val config: JSONConfig, + private val plugin: EcoPlugin +) : Holder { + val id = config.getString("name") + + override val effects = config.getSubsections("effects").mapNotNull { + Effects.compile(it, "Weapon ID $id") + }.toSet() + + override val conditions = config.getSubsections("conditions").mapNotNull { + Conditions.compile(it, "Weapon ID $id") + }.toSet() + + val itemStack: ItemStack = run { + val itemConfig = config.getSubsection("item") + ItemStackBuilder(Items.lookup(itemConfig.getString("material")).item).apply { + setDisplayName(itemConfig.getFormattedString("displayName")) + addItemFlag( + *itemConfig.getStrings("flags") + .mapNotNull { ItemFlag.valueOf(it.uppercase()) } + .toTypedArray<@NotNull ItemFlag>() + ) + setUnbreakable(itemConfig.getBool("unbreakable")) + addLoreLines( + itemConfig.getFormattedStrings("lore").map { "${Display.PREFIX}$it" }) + setCustomModelData { + val data = itemConfig.getInt("customModelData") + if (data != -1) data else null + } + writeMetaKey( + this@Weapon.plugin.namespacedKeyFactory.create("weapon"), + PersistentDataType.STRING, + this@Weapon.id + ) + for (enchantConfig in itemConfig.getSubsections("enchants")) { + addEnchantment( + Enchantment.getByKey(NamespacedKey.minecraft(enchantConfig.getString("id"))) ?: continue, + enchantConfig.getInt("level") + ) + } + }.build() + } + + val customItem = CustomItem( + plugin.namespacedKeyFactory.create(id), + { test -> WeaponUtils.getWeaponFromItem(test) == this }, + itemStack + ).apply { register() } + + val craftingRecipe = if (config.getBool("item.craftable")) { + Recipes.createAndRegisterRecipe( + plugin, + id, + itemStack, + config.getStrings("item.recipe") + ) + } else null + + override fun equals(other: Any?): Boolean { + if (other !is Weapon) { + return false + } + + return this.id == other.id + } + + override fun hashCode(): Int { + return Objects.hash(this.id) + } + + override fun toString(): String { + return "Weapon{$id}" + } +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoweapons/weapons/WeaponListener.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoweapons/weapons/WeaponListener.kt new file mode 100644 index 0000000..e824371 --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoweapons/weapons/WeaponListener.kt @@ -0,0 +1,13 @@ +package com.willfp.ecoweapons.weapons + +import com.willfp.libreforge.updateEffects +import org.bukkit.event.EventHandler +import org.bukkit.event.Listener +import org.bukkit.event.player.PlayerItemHeldEvent + +class WeaponListener: Listener { + @EventHandler + fun onHoldItem(event: PlayerItemHeldEvent) { + event.player.updateEffects() + } +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoweapons/weapons/WeaponUtils.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoweapons/weapons/WeaponUtils.kt new file mode 100644 index 0000000..01a89a7 --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoweapons/weapons/WeaponUtils.kt @@ -0,0 +1,51 @@ +package com.willfp.ecoweapons.weapons + +import com.willfp.ecoweapons.EcoWeaponsPlugin.Companion.instance +import org.bukkit.entity.Player +import org.bukkit.inventory.ItemStack +import org.bukkit.inventory.meta.ItemMeta +import org.bukkit.persistence.PersistentDataType + +object WeaponUtils { + /** + * Instance of EcoWeapons. + */ + private val PLUGIN = instance + + /** + * Get weapon from an item. + * + * @param itemStack The itemStack to check. + * @return The weapon, or null if no weapon is found. + */ + fun getWeaponFromItem(itemStack: ItemStack?): Weapon? { + itemStack ?: return null + val meta = itemStack.itemMeta ?: return null + return getWeaponFromItem(meta) + } + + /** + * Get weapon on an item. + * + * @param meta The itemStack to check. + * @return The weapon, or null if no weapon is found. + */ + fun getWeaponFromItem(meta: ItemMeta): Weapon? { + val container = meta.persistentDataContainer + val weaponName = container.get( + PLUGIN.namespacedKeyFactory.create("weapon"), + PersistentDataType.STRING + ) ?: return null + return Weapons.getByID(weaponName) + } + + /** + * Get weapon on a player. + * + * @param player The player to check. + * @return The weapon, or null if no weapon is found. + */ + fun getWeaponOnPlayer(player: Player): Weapon? { + return getWeaponFromItem(player.inventory.itemInMainHand) + } +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoweapons/weapons/Weapons.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoweapons/weapons/Weapons.kt new file mode 100644 index 0000000..f1aef28 --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoweapons/weapons/Weapons.kt @@ -0,0 +1,72 @@ +package com.willfp.ecoweapons.weapons + +import com.google.common.collect.BiMap +import com.google.common.collect.HashBiMap +import com.google.common.collect.ImmutableList +import com.willfp.eco.core.config.updating.ConfigUpdater +import com.willfp.ecoweapons.EcoWeaponsPlugin + +object Weapons { + /** + * Registered weapons. + */ + private val BY_ID: BiMap = HashBiMap.create() + + /** + * Get all registered [Weapon]s. + * + * @return A list of all [Weapon]s. + */ + @JvmStatic + fun values(): List { + return ImmutableList.copyOf(BY_ID.values) + } + + /** + * Get [Weapon] matching id. + * + * @param name The id to search for. + * @return The matching [Weapon], or null if not found. + */ + @JvmStatic + fun getByID(name: String): Weapon? { + return BY_ID[name] + } + + /** + * Update all [Weapon]s. + * + * @param plugin Instance of EcoWeapons. + */ + @ConfigUpdater + @JvmStatic + fun update(plugin: EcoWeaponsPlugin) { + for (weapon in values()) { + removeWeapon(weapon) + } + for (setConfig in plugin.ecoWeaponsJson.getSubsections("weapons")) { + addNewWeapon(Weapon(setConfig, plugin)) + } + } + + /** + * Add new [Weapon] to EcoWeapons. + * + * @param weapon The [Weapon] to add. + */ + @JvmStatic + fun addNewWeapon(weapon: Weapon) { + BY_ID.remove(weapon.id) + BY_ID[weapon.id] = weapon + } + + /** + * Remove [Weapon] from EcoWeapons. + * + * @param weapon The [Weapon] to remove. + */ + @JvmStatic + fun removeWeapon(weapon: Weapon) { + BY_ID.remove(weapon.id) + } +} diff --git a/eco-core/core-plugin/src/main/resources/config.yml b/eco-core/core-plugin/src/main/resources/config.yml index 236cd5b..af30d25 100644 --- a/eco-core/core-plugin/src/main/resources/config.yml +++ b/eco-core/core-plugin/src/main/resources/config.yml @@ -4,4 +4,9 @@ # discover-recipes: true # If all recipes should be automatically discovered. -cooldown-in-actionbar: true # If effect cooldown messages should be shown in the actionbar rather than in chat. \ No newline at end of file +cooldown: + in-actionbar: true + sound: + enabled: true + sound: "BLOCK_NOTE_BLOCK_PLING" + pitch: 0.5 \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/resources/ecoweapons.json b/eco-core/core-plugin/src/main/resources/ecoweapons.json index 5869180..595af8f 100644 --- a/eco-core/core-plugin/src/main/resources/ecoweapons.json +++ b/eco-core/core-plugin/src/main/resources/ecoweapons.json @@ -32,18 +32,7 @@ "", "&8&oYou must be on full health to activate bleed" ], - "attributes": [ - { - "id": "generic_attack_speed", - "amount": 0.15, - "operation": "multiply_scalar_1" - }, - { - "id": "generic_attack_damage", - "amount": 0.2, - "operation": "multiply_scalar_1" - } - ], + "attributes": [], "unbreakable": false, "flags": [ "hide_attributes" @@ -110,8 +99,7 @@ "&8» &310% chance to summon lightning", "&8» &3Surround your opponent with arrows" ], - "attributes": [ - ], + "attributes": [], "unbreakable": false, "flags": [], "customModelData": -1, @@ -173,8 +161,7 @@ "&8» &e10% chance to give nausea", "&8» &e5% chance to give blindness" ], - "attributes": [ - ], + "attributes": [], "unbreakable": false, "flags": [], "customModelData": -1, diff --git a/eco-core/core-plugin/src/main/resources/lang.yml b/eco-core/core-plugin/src/main/resources/lang.yml index bfa4b93..c875659 100644 --- a/eco-core/core-plugin/src/main/resources/lang.yml +++ b/eco-core/core-plugin/src/main/resources/lang.yml @@ -9,4 +9,4 @@ messages: needs-item: "&cYou must specify an item!" invalid-item: "&cInvalid item!" give-success: "Gave &a%item%&r to &a%recipient%" - on-cooldown: "This effect is on cooldown! Wait &a%seconds% seconds&f to use it!" \ No newline at end of file + on-cooldown: "&cThis effect is on cooldown! &fTime left: &a%seconds% seconds" \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/resources/plugin.yml b/eco-core/core-plugin/src/main/resources/plugin.yml index a2374ef..c10c75d 100644 --- a/eco-core/core-plugin/src/main/resources/plugin.yml +++ b/eco-core/core-plugin/src/main/resources/plugin.yml @@ -8,6 +8,8 @@ load: STARTUP depend: - eco - ProtocolLib +libraries: + - 'org.jetbrains.kotlin:kotlin-stdlib:1.5.21' commands: ecoweapons: