diff --git a/build.gradle b/build.gradle index 7b23e94..2fb973d 100644 --- a/build.gradle +++ b/build.gradle @@ -1,3 +1,13 @@ +buildscript { + repositories { + mavenCentral() + } + + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.21" + } +} + plugins { id 'java-library' id 'com.github.johnrengelman.shadow' version '7.0.0' @@ -10,6 +20,7 @@ dependencies { } allprojects { + apply plugin: 'kotlin' apply plugin: 'java' apply plugin: 'maven-publish' apply plugin: 'com.github.johnrengelman.shadow' diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/ReforgesPlugin.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/ReforgesPlugin.java index 8d3ab40..47521d5 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/ReforgesPlugin.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/reforges/ReforgesPlugin.java @@ -73,9 +73,7 @@ public class ReforgesPlugin extends EcoPlugin { protected void handleReload() { for (Effect effect : Effects.values()) { HandlerList.unregisterAll(effect); - this.getScheduler().run(() -> { - this.getEventManager().registerListener(effect); - }); + this.getScheduler().run(() -> this.getEventManager().registerListener(effect)); } } @@ -83,7 +81,7 @@ public class ReforgesPlugin extends EcoPlugin { protected List loadListeners() { return Arrays.asList( new DiscoverRecipeListener(this), - new AntiPlaceListener(this), + new AntiPlaceListener(), new WatcherTriggers(this) ); } @@ -103,6 +101,6 @@ public class ReforgesPlugin extends EcoPlugin { @Override public String getMinimumEcoVersion() { - return "6.7.0"; + return "6.8.0"; } } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/commands/CommandGive.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/commands/CommandGive.java index 2a78d21..02c3c2d 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/commands/CommandGive.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/reforges/commands/CommandGive.java @@ -56,7 +56,7 @@ public class CommandGive extends Subcommand { public static void reload() { STONE_NAMES.clear(); STONE_NAMES.addAll(Reforges.values().stream() - .filter(Reforge::isRequiresStone) + .filter(Reforge::getRequiresStone) .map(Reforge::getId) .collect(Collectors.toList())); } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/display/ReforgesDisplay.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/display/ReforgesDisplay.java deleted file mode 100644 index 3fbc153..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/display/ReforgesDisplay.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.willfp.reforges.display; - -import com.willfp.eco.core.EcoPlugin; -import com.willfp.eco.core.display.Display; -import com.willfp.eco.core.display.DisplayModule; -import com.willfp.eco.core.display.DisplayPriority; -import com.willfp.eco.core.fast.FastItemStack; -import com.willfp.eco.util.SkullUtils; -import com.willfp.reforges.reforges.Reforge; -import com.willfp.reforges.reforges.meta.ReforgeTarget; -import com.willfp.reforges.reforges.util.ReforgeUtils; -import org.apache.commons.lang.WordUtils; -import org.bukkit.Material; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.inventory.meta.SkullMeta; -import org.jetbrains.annotations.NotNull; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -public class ReforgesDisplay extends DisplayModule { - /** - * Create weapons display. - * - * @param plugin Instance of Reforges. - */ - public ReforgesDisplay(@NotNull final EcoPlugin plugin) { - super(plugin, DisplayPriority.HIGHEST); - } - - @Override - public void display(@NotNull final ItemStack itemStack, - @NotNull final Object... args) { - ReforgeTarget target = ReforgeTarget.getForItem(itemStack); - - if (target == null && itemStack.getType() != Material.PLAYER_HEAD) { - return; - } - - ItemMeta meta = itemStack.getItemMeta(); - FastItemStack fastItemStack = FastItemStack.wrap(itemStack); - assert meta != null; - List lore = fastItemStack.getLore(); - assert lore != null; - - Reforge reforge = ReforgeUtils.getReforge(meta); - Reforge stone = ReforgeUtils.getReforgeStone(meta); - - if (reforge == null && stone == null && target != null) { - if (this.getPlugin().getConfigYml().getBool("reforge.show-reforgable")) { - List addLore = new ArrayList<>(); - - for (String string : this.getPlugin().getConfigYml().getStrings("reforge.reforgable-suffix")) { - addLore.add(Display.PREFIX + string); - } - - lore.addAll(addLore); - } - } - - if (stone != null) { - meta.setDisplayName(this.getPlugin().getConfigYml().getString("reforge.stone.name").replace("%reforge%", stone.getName())); - SkullUtils.setSkullTexture((SkullMeta) meta, stone.getConfig().getString("stone-config.texture")); - itemStack.setItemMeta(meta); - List stoneLore = new ArrayList<>(); - for (String string : this.getPlugin().getConfigYml().getStrings("reforge.stone.lore")) { - stoneLore.add(Display.PREFIX + string.replace("%reforge%", stone.getName())); - } - lore.addAll(0, stoneLore); - } - - if (reforge != null) { - if (this.getPlugin().getConfigYml().getBool("reforge.display-in-lore")) { - List addLore = new ArrayList<>(); - - addLore.add(" "); - addLore.add(reforge.getName()); - - List description = new ArrayList<>(Arrays.asList(WordUtils.wrap( - reforge.getDescription(), - this.getPlugin().getConfigYml().getInt("reforge.line-wrap"), - "\n", - false - ).split("\\r?\\n"))); - description.replaceAll(s -> this.getPlugin().getLangYml().getString("description-color") + s.replace("%description%", reforge.getDescription())); - description.replaceAll(s -> s.replace("§r", this.getPlugin().getLangYml().getString("description-color"))); - addLore.addAll(description); - - addLore.replaceAll(s -> Display.PREFIX + s); - lore.addAll(addLore); - } - } - - itemStack.setItemMeta(meta); - fastItemStack.setLore(lore); - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/Effect.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/Effect.java deleted file mode 100644 index 89cb9b8..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/Effect.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.willfp.reforges.effects; - -import com.willfp.eco.core.config.interfaces.JSONConfig; -import com.willfp.reforges.ReforgesPlugin; -import com.willfp.reforges.reforges.util.Watcher; -import lombok.AccessLevel; -import lombok.Getter; -import org.bukkit.event.Listener; -import org.bukkit.inventory.meta.ItemMeta; -import org.jetbrains.annotations.NotNull; - -import java.util.UUID; - -public abstract class Effect implements Listener, Watcher { - /** - * Instance of Reforges. - */ - @Getter(AccessLevel.PROTECTED) - private final ReforgesPlugin plugin = ReforgesPlugin.getInstance(); - - /** - * The name of the effect. - */ - @Getter - private final String name; - - /** - * The effect uuid. - */ - @Getter - private final UUID uuid; - - /** - * Create a new effect. - * - * @param name The effect name. - */ - protected Effect(@NotNull final String name) { - this.name = name; - this.uuid = UUID.nameUUIDFromBytes(name.getBytes()); - - Effects.addNewEffect(this); - } - - /** - * Handle reforge application. - * - * @param meta The meta. - * @param config The config. - */ - public void handleApplication(@NotNull final ItemMeta meta, - @NotNull final JSONConfig config) { - // Override when needed - } - - /** - * Handle reforge removal. - * - * @param meta The meta. - */ - public void handleRemoval(@NotNull final ItemMeta meta) { - // Override when needed - } -} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/effects/EffectCritMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/effects/EffectCritMultiplier.java deleted file mode 100644 index f726c94..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/effects/EffectCritMultiplier.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.willfp.reforges.effects.effects; - -import com.willfp.eco.core.config.interfaces.JSONConfig; -import com.willfp.reforges.effects.Effect; -import org.bukkit.entity.LivingEntity; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.jetbrains.annotations.NotNull; - -public class EffectCritMultiplier extends Effect { - /** - * Create a new effect. - */ - public EffectCritMultiplier() { - super("crit_multiplier"); - } - - @Override - public void onAnyDamage(@NotNull final LivingEntity attacker, - @NotNull final LivingEntity victim, - @NotNull final EntityDamageByEntityEvent event, - @NotNull final JSONConfig config) { - if (attacker.getVelocity().getY() > 0) { - return; - } - - event.setDamage(event.getDamage() * config.getDouble("multiplier")); - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/effects/EffectDamageMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/effects/EffectDamageMultiplier.java deleted file mode 100644 index dfe08b8..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/effects/EffectDamageMultiplier.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.willfp.reforges.effects.effects; - -import com.willfp.eco.core.config.interfaces.JSONConfig; -import com.willfp.reforges.effects.Effect; -import org.bukkit.entity.LivingEntity; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.jetbrains.annotations.NotNull; - -public class EffectDamageMultiplier extends Effect { - /** - * Create a new effect. - */ - public EffectDamageMultiplier() { - super("damage_multiplier"); - } - - @Override - public void onAnyDamage(@NotNull final LivingEntity attacker, - @NotNull final LivingEntity victim, - @NotNull final EntityDamageByEntityEvent event, - @NotNull final JSONConfig config) { - event.setDamage(event.getDamage() * config.getDouble("multiplier")); - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/effects/EffectIncomingDamageMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/effects/EffectIncomingDamageMultiplier.java deleted file mode 100644 index 975b5b6..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/effects/EffectIncomingDamageMultiplier.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.willfp.reforges.effects.effects; - -import com.willfp.eco.core.config.interfaces.JSONConfig; -import com.willfp.reforges.effects.Effect; -import org.bukkit.entity.LivingEntity; -import org.bukkit.event.entity.EntityDamageEvent; -import org.jetbrains.annotations.NotNull; - -public class EffectIncomingDamageMultiplier extends Effect { - /** - * Create a new effect. - */ - public EffectIncomingDamageMultiplier() { - super("incoming_damage_multiplier"); - } - - @Override - public void onDamageWearingArmor(@NotNull final LivingEntity victim, - @NotNull final EntityDamageEvent event, - @NotNull final JSONConfig config) { - event.setDamage(event.getDamage() * config.getDouble("multiplier")); - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/effects/EffectKnockbackMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/effects/EffectKnockbackMultiplier.java deleted file mode 100644 index 9cfe369..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/effects/EffectKnockbackMultiplier.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.willfp.reforges.effects.effects; - -import com.willfp.eco.core.config.interfaces.JSONConfig; -import com.willfp.reforges.effects.Effect; -import org.bukkit.attribute.Attribute; -import org.bukkit.attribute.AttributeModifier; -import org.bukkit.inventory.meta.ItemMeta; -import org.jetbrains.annotations.NotNull; - -public class EffectKnockbackMultiplier extends Effect { - /** - * Create a new effect. - */ - public EffectKnockbackMultiplier() { - super("knockback_multiplier"); - } - - @Override - public void handleApplication(@NotNull final ItemMeta meta, - @NotNull final JSONConfig config) { - meta.addAttributeModifier( - Attribute.GENERIC_ATTACK_KNOCKBACK, - new AttributeModifier( - this.getUuid(), - this.getName(), - config.getDouble("multiplier") - 1, - AttributeModifier.Operation.MULTIPLY_SCALAR_1 - ) - ); - } - - @Override - public void handleRemoval(@NotNull final ItemMeta meta) { - meta.removeAttributeModifier( - Attribute.GENERIC_ATTACK_KNOCKBACK, - new AttributeModifier( - this.getUuid(), - this.getName(), - 0, - AttributeModifier.Operation.MULTIPLY_SCALAR_1 - ) - ); - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/effects/EffectRewardBlockBreak.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/effects/EffectRewardBlockBreak.java deleted file mode 100644 index de29855..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/effects/EffectRewardBlockBreak.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.willfp.reforges.effects.effects; - -import com.willfp.eco.core.config.interfaces.JSONConfig; -import com.willfp.reforges.effects.Effect; -import com.willfp.reforges.vault.EconomyHandler; -import org.bukkit.block.Block; -import org.bukkit.entity.Player; -import org.bukkit.event.block.BlockBreakEvent; -import org.jetbrains.annotations.NotNull; - -public class EffectRewardBlockBreak extends Effect { - /** - * Create a new effect. - */ - public EffectRewardBlockBreak() { - super("reward_kill"); - } - - @Override - public void onBlockBreak(@NotNull final Player player, - @NotNull final Block block, - @NotNull final BlockBreakEvent event, - @NotNull final JSONConfig config) { - EconomyHandler.getInstance().depositPlayer(player, config.getDouble("amount")); - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/effects/EffectRewardKill.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/effects/EffectRewardKill.java deleted file mode 100644 index 5459f04..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/effects/EffectRewardKill.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.willfp.reforges.effects.effects; - -import com.willfp.eco.core.config.interfaces.JSONConfig; -import com.willfp.eco.core.events.EntityDeathByEntityEvent; -import com.willfp.reforges.effects.Effect; -import com.willfp.reforges.vault.EconomyHandler; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -public class EffectRewardKill extends Effect { - /** - * Create a new effect. - */ - public EffectRewardKill() { - super("reward_kill"); - } - - @Override - public void onKill(@NotNull final LivingEntity killer, - @NotNull final LivingEntity victim, - @NotNull final EntityDeathByEntityEvent event, - @NotNull final JSONConfig config) { - if (!(killer instanceof Player player)) { - return; - } - - EconomyHandler.getInstance().depositPlayer(player, config.getDouble("amount")); - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/Reforge.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/Reforge.java deleted file mode 100644 index 5801dcb..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/Reforge.java +++ /dev/null @@ -1,200 +0,0 @@ -package com.willfp.reforges.reforges; - -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.SkullBuilder; -import com.willfp.eco.core.recipe.Recipes; -import com.willfp.reforges.ReforgesPlugin; -import com.willfp.reforges.effects.Effect; -import com.willfp.reforges.effects.Effects; -import com.willfp.reforges.reforges.meta.ReforgeTarget; -import com.willfp.reforges.reforges.util.ReforgeUtils; -import lombok.AccessLevel; -import lombok.Getter; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.jetbrains.annotations.NotNull; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; - -public class Reforge { - /** - * Instance of Reforges for reforges to be able to access. - */ - @Getter(AccessLevel.PROTECTED) - private final EcoPlugin plugin = ReforgesPlugin.getInstance(); - - /** - * The key to store reforges in meta. - */ - @Getter - private final String id; - - /** - * The reforges config. - */ - @Getter - private final JSONConfig config; - - /** - * The effects. - */ - @Getter - private final Map effects; - - /** - * The display name. - */ - @Getter - private final String name; - - /** - * The display name. - */ - @Getter - private final String description; - - /** - * If a reforge stone is required. - */ - @Getter - private boolean requiresStone; - - /** - * The reforge stone. - */ - @Getter - private ItemStack stone; - - /** - * The reforge target. - */ - @Getter - private final Set targets; - - /** - * Create a new Reforge. - * - * @param config The config. - * @param plugin Instance of reforges. - */ - protected Reforge(@NotNull final JSONConfig config, - @NotNull final ReforgesPlugin plugin) { - this.config = config; - this.id = config.getString("id"); - - this.name = config.getString("name"); - this.description = config.getString("description"); - - this.targets = new HashSet<>(); - for (String targetName : config.getStrings("targets")) { - this.targets.add(ReforgeTarget.getByName(targetName)); - } - - this.effects = new HashMap<>(); - for (JSONConfig effectConfig : config.getSubsections("effects")) { - Effect effect = Effects.getByName(effectConfig.getString("id")); - if (effect != null) { - effects.put(effect, effectConfig); - } - } - - handleStone(config.getSubsection("stone"), plugin); - } - - private void handleStone(@NotNull final JSONConfig config, - @NotNull final ReforgesPlugin plugin) { - this.requiresStone = config.getBool("enabled"); - - if (requiresStone) { - List stoneLore = new ArrayList<>(); - for (String string : this.getPlugin().getConfigYml().getStrings("reforge.stone.lore")) { - stoneLore.add(Display.PREFIX + string.replace("%reforge%", this.getName())); - } - stone = new SkullBuilder() - .setSkullTexture(config.getString("texture")) - .setDisplayName(this.getPlugin().getConfigYml().getString("stone.name").replace("%reforge%", this.getName())) - .addLoreLines(stoneLore) - .build(); - } else { - stone = new SkullBuilder() - .build(); - } - - ReforgeUtils.setReforgeStone(stone, this); - - new CustomItem( - plugin.getNamespacedKeyFactory().create("stone_" + this.getId()), - test -> Objects.equals(ReforgeUtils.getReforgeStone(test), this), - stone - ).register(); - - if (config.getBool("craftable")) { - Recipes.createAndRegisterRecipe( - plugin, - "stone_" + this.getId(), - stone, - config.getStrings("recipe", false) - ); - } - } - - public final void handleApplication(@NotNull final ItemStack itemStack) { - handleRemoval(itemStack); - itemStack.setItemMeta(this.handleApplication(Objects.requireNonNull(itemStack.getItemMeta()))); - } - - public final ItemMeta handleApplication(@NotNull final ItemMeta meta) { - for (Map.Entry entry : this.getEffects().entrySet()) { - entry.getKey().handleApplication(meta, entry.getValue()); - } - - return meta; - } - - public final void handleRemoval(@NotNull final ItemStack itemStack) { - itemStack.setItemMeta(this.handleRemoval(Objects.requireNonNull(itemStack.getItemMeta()))); - } - - public final ItemMeta handleRemoval(@NotNull final ItemMeta meta) { - for (Map.Entry entry : this.getEffects().entrySet()) { - entry.getKey().handleApplication(meta, entry.getValue()); - } - - return meta; - } - - - @Override - public boolean equals(final Object o) { - if (this == o) { - return true; - } - - if (!(o instanceof Reforge reforge)) { - return false; - } - - return this.getId().equals(reforge.getId()); - } - - @Override - public int hashCode() { - return Objects.hash(this.getId()); - } - - @Override - public String toString() { - return "Reforge{" - + this.getId() - + "}"; - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/util/ReforgeHandler.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/util/ReforgeHandler.java index 250b27c..ed12de3 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/util/ReforgeHandler.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/util/ReforgeHandler.java @@ -4,7 +4,6 @@ import com.willfp.eco.core.EcoPlugin; import com.willfp.eco.core.PluginDependent; import com.willfp.eco.core.gui.menu.Menu; import com.willfp.eco.core.gui.slot.Slot; -import com.willfp.reforges.reforges.Reforge; import com.willfp.reforges.reforges.meta.ReforgeTarget; import com.willfp.reforges.vault.EconomyHandler; import org.bukkit.Sound; diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/util/AntiPlaceListener.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/util/AntiPlaceListener.java deleted file mode 100644 index 7912ff5..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/util/AntiPlaceListener.java +++ /dev/null @@ -1,39 +0,0 @@ - -package com.willfp.reforges.util; - -import com.willfp.eco.core.EcoPlugin; -import com.willfp.eco.core.PluginDependent; -import com.willfp.reforges.reforges.util.ReforgeUtils; -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.block.BlockPlaceEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.inventory.ShapedRecipe; -import org.jetbrains.annotations.NotNull; - -public class AntiPlaceListener extends PluginDependent implements Listener { - /** - * Register listener. - * - * @param plugin Talismans. - */ - public AntiPlaceListener(@NotNull final EcoPlugin plugin) { - super(plugin); - } - - /** - * Prevent block place. - * - * @param event The event. - */ - @EventHandler - public void onBlockPlace(@NotNull final BlockPlaceEvent event) { - if (ReforgeUtils.getReforgeStone(event.getItemInHand()) != null) { - event.setCancelled(true); - event.setBuild(false); - } - } -} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/util/DiscoverRecipeListener.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/util/DiscoverRecipeListener.java deleted file mode 100644 index 91f2081..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/util/DiscoverRecipeListener.java +++ /dev/null @@ -1,47 +0,0 @@ - -package com.willfp.reforges.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("reforges")) { - if (!key.getKey().contains("displayed")) { - player.discoverRecipe(key); - } - } - } - }); - } - } -} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/display/ReforgesDisplay.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/display/ReforgesDisplay.kt new file mode 100644 index 0000000..5b6da74 --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/display/ReforgesDisplay.kt @@ -0,0 +1,92 @@ +package com.willfp.reforges.display + +import com.willfp.eco.core.EcoPlugin +import com.willfp.eco.core.display.Display +import com.willfp.eco.core.display.DisplayModule +import com.willfp.eco.core.display.DisplayPriority +import com.willfp.eco.core.fast.FastItemStack +import com.willfp.eco.util.SkullUtils +import com.willfp.reforges.reforges.meta.ReforgeTarget +import com.willfp.reforges.reforges.util.ReforgeUtils +import org.apache.commons.lang.WordUtils +import org.bukkit.Material +import org.bukkit.inventory.ItemStack +import org.bukkit.inventory.meta.SkullMeta + +class ReforgesDisplay(plugin: EcoPlugin) : DisplayModule(plugin, DisplayPriority.HIGHEST) { + override fun display( + itemStack: ItemStack, + vararg args: Any + ) { + val target = ReforgeTarget.getForItem(itemStack) + + if (target == null && itemStack.type != Material.PLAYER_HEAD) { + return + } + + val meta = itemStack.itemMeta ?: return + + val fastItemStack = FastItemStack.wrap(itemStack) + + val lore = fastItemStack.lore + + val reforge = ReforgeUtils.getReforge(meta) + + val stone = ReforgeUtils.getReforgeStone(meta) + + if (reforge == null && stone == null && target != null) { + if (plugin.configYml.getBool("reforge.show-reforgable")) { + val addLore: MutableList = ArrayList() + for (string in plugin.configYml.getStrings("reforge.reforgable-suffix")) { + addLore.add(Display.PREFIX + string) + } + lore.addAll(addLore) + } + } + + if (stone != null) { + meta.setDisplayName(plugin.configYml.getString("reforge.stone.name").replace("%reforge%", stone.name)) + SkullUtils.setSkullTexture( + meta as SkullMeta, + SkullUtils.getSkullTexture(stone.stone.itemMeta as SkullMeta) ?: return + ) + itemStack.itemMeta = meta + val stoneLore = plugin.configYml.getStrings("reforge.stone.lore").map { + "${Display.PREFIX}${it.replace("%reforge%", stone.name)}" + }.toList() + lore.addAll(0, stoneLore) + } + if (reforge != null) { + if (plugin.configYml.getBool("reforge.display-in-lore")) { + val addLore: MutableList = ArrayList() + addLore.add(" ") + addLore.add(reforge.name) + val description = mutableListOf( + *WordUtils.wrap( + reforge.description, + plugin.configYml.getInt("reforge.line-wrap"), + "\n", + false + ).split("\\r?\\n").toTypedArray() + ) + description.replaceAll { s: String -> + plugin.langYml.getString("description-color") + s.replace( + "%description%", + reforge.description + ) + } + description.replaceAll { s: String -> + s.replace( + "§r", + plugin.langYml.getString("description-color") + ) + } + addLore.addAll(description) + addLore.replaceAll { "${Display.PREFIX}$it" } + lore.addAll(addLore) + } + } + itemStack.itemMeta = meta + fastItemStack.lore = lore + } +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/effects/ConfiguredEffect.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/effects/ConfiguredEffect.kt new file mode 100644 index 0000000..7453aeb --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/effects/ConfiguredEffect.kt @@ -0,0 +1,5 @@ +package com.willfp.reforges.effects + +import com.willfp.eco.core.config.interfaces.JSONConfig + +data class ConfiguredEffect(val effect: Effect, val config: JSONConfig) \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/effects/Effect.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/effects/Effect.kt new file mode 100644 index 0000000..6a54995 --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/effects/Effect.kt @@ -0,0 +1,46 @@ +package com.willfp.reforges.effects + +import com.willfp.eco.core.config.interfaces.JSONConfig +import com.willfp.reforges.ReforgesPlugin +import com.willfp.reforges.reforges.util.Watcher +import org.bukkit.event.Listener +import org.bukkit.inventory.meta.ItemMeta +import java.util.* + +abstract class Effect( + val id: String +) : Listener, Watcher { + protected val plugin: ReforgesPlugin = ReforgesPlugin.getInstance() + + val uuid: UUID = UUID.nameUUIDFromBytes(id.encodeToByteArray()) + + init { + register() + } + + private fun register() { + Effects.addNewEffect(this) + } + + /** + * Handle reforge application. + * + * @param meta The meta. + * @param config The config. + */ + open fun handleApplication( + meta: ItemMeta, + config: JSONConfig + ) { + // Override when needed + } + + /** + * Handle reforge removal. + * + * @param meta The meta. + */ + open fun handleRemoval(meta: ItemMeta) { + // Override when needed + } +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/effects/effects/EffectCritMultiplier.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/effects/effects/EffectCritMultiplier.kt new file mode 100644 index 0000000..f498bf8 --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/effects/effects/EffectCritMultiplier.kt @@ -0,0 +1,20 @@ +package com.willfp.reforges.effects.effects + +import com.willfp.eco.core.config.interfaces.JSONConfig +import com.willfp.reforges.effects.Effect +import org.bukkit.entity.LivingEntity +import org.bukkit.event.entity.EntityDamageByEntityEvent + +class EffectCritMultiplier : Effect("crit_multiplier") { + override fun onAnyDamage( + attacker: LivingEntity, + victim: LivingEntity, + event: EntityDamageByEntityEvent, + config: JSONConfig + ) { + if (attacker.velocity.y > 0) { + return + } + event.damage *= config.getDouble("multiplier") + } +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/effects/effects/EffectDamageMultiplier.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/effects/effects/EffectDamageMultiplier.kt new file mode 100644 index 0000000..a319c02 --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/effects/effects/EffectDamageMultiplier.kt @@ -0,0 +1,17 @@ +package com.willfp.reforges.effects.effects + +import com.willfp.eco.core.config.interfaces.JSONConfig +import com.willfp.reforges.effects.Effect +import org.bukkit.entity.LivingEntity +import org.bukkit.event.entity.EntityDamageByEntityEvent + +class EffectDamageMultiplier : Effect("damage_multiplier") { + override fun onAnyDamage( + attacker: LivingEntity, + victim: LivingEntity, + event: EntityDamageByEntityEvent, + config: JSONConfig + ) { + event.damage *= config.getDouble("multiplier") + } +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/effects/effects/EffectIncomingDamageMultiplier.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/effects/effects/EffectIncomingDamageMultiplier.kt new file mode 100644 index 0000000..449c69b --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/effects/effects/EffectIncomingDamageMultiplier.kt @@ -0,0 +1,16 @@ +package com.willfp.reforges.effects.effects + +import com.willfp.eco.core.config.interfaces.JSONConfig +import com.willfp.reforges.effects.Effect +import org.bukkit.entity.LivingEntity +import org.bukkit.event.entity.EntityDamageEvent + +class EffectIncomingDamageMultiplier : Effect("incoming_damage_multiplier") { + override fun onDamageWearingArmor( + victim: LivingEntity, + event: EntityDamageEvent, + config: JSONConfig + ) { + event.damage *= config.getDouble("multiplier") + } +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/effects/effects/EffectKnockbackMultiplier.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/effects/effects/EffectKnockbackMultiplier.kt new file mode 100644 index 0000000..8eb532f --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/effects/effects/EffectKnockbackMultiplier.kt @@ -0,0 +1,36 @@ +package com.willfp.reforges.effects.effects + +import com.willfp.eco.core.config.interfaces.JSONConfig +import com.willfp.reforges.effects.Effect +import org.bukkit.attribute.Attribute +import org.bukkit.attribute.AttributeModifier +import org.bukkit.inventory.meta.ItemMeta + +class EffectKnockbackMultiplier : Effect("knockback_multiplier") { + override fun handleApplication( + meta: ItemMeta, + config: JSONConfig + ) { + meta.addAttributeModifier( + Attribute.GENERIC_ATTACK_KNOCKBACK, + AttributeModifier( + this.uuid, + this.id, + config.getDouble("multiplier") - 1, + AttributeModifier.Operation.MULTIPLY_SCALAR_1 + ) + ) + } + + override fun handleRemoval(meta: ItemMeta) { + meta.removeAttributeModifier( + Attribute.GENERIC_ATTACK_KNOCKBACK, + AttributeModifier( + this.uuid, + this.id, + 0.0, + AttributeModifier.Operation.MULTIPLY_SCALAR_1 + ) + ) + } +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/effects/effects/EffectRewardBlockBreak.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/effects/effects/EffectRewardBlockBreak.kt new file mode 100644 index 0000000..1bd55a4 --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/effects/effects/EffectRewardBlockBreak.kt @@ -0,0 +1,19 @@ +package com.willfp.reforges.effects.effects + +import com.willfp.eco.core.config.interfaces.JSONConfig +import com.willfp.reforges.effects.Effect +import com.willfp.reforges.vault.EconomyHandler +import org.bukkit.block.Block +import org.bukkit.entity.Player +import org.bukkit.event.block.BlockBreakEvent + +class EffectRewardBlockBreak : Effect("reward_kill") { + override fun onBlockBreak( + player: Player, + block: Block, + event: BlockBreakEvent, + config: JSONConfig + ) { + EconomyHandler.getInstance().depositPlayer(player, config.getDouble("amount")) + } +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/effects/effects/EffectRewardKill.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/effects/effects/EffectRewardKill.kt new file mode 100644 index 0000000..4ace99c --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/effects/effects/EffectRewardKill.kt @@ -0,0 +1,23 @@ +package com.willfp.reforges.effects.effects + +import com.willfp.eco.core.config.interfaces.JSONConfig +import com.willfp.eco.core.events.EntityDeathByEntityEvent +import com.willfp.reforges.effects.Effect +import com.willfp.reforges.vault.EconomyHandler +import org.bukkit.entity.LivingEntity +import org.bukkit.entity.Player + +class EffectRewardKill : Effect("reward_kill") { + override fun onKill( + killer: LivingEntity, + victim: LivingEntity, + event: EntityDeathByEntityEvent, + config: JSONConfig + ) { + if (killer !is Player) { + return + } + + EconomyHandler.getInstance().depositPlayer(killer, config.getDouble("amount")) + } +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/reforges/Reforge.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/reforges/Reforge.kt new file mode 100644 index 0000000..1e19218 --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/reforges/Reforge.kt @@ -0,0 +1,106 @@ +package com.willfp.reforges.reforges + +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.SkullBuilder +import com.willfp.eco.core.recipe.Recipes +import com.willfp.reforges.ReforgesPlugin +import com.willfp.reforges.effects.ConfiguredEffect +import com.willfp.reforges.effects.Effects +import com.willfp.reforges.reforges.meta.ReforgeTarget +import com.willfp.reforges.reforges.util.ReforgeUtils +import org.bukkit.inventory.ItemStack +import org.bukkit.inventory.meta.ItemMeta +import java.util.* + +class Reforge( + private val config: JSONConfig, + private val plugin: ReforgesPlugin +) { + val id = config.getString("id") + + val name = config.getString("name") + + val description = config.getString("description") + + val targets = config.getStrings("targets").map { ReforgeTarget.getByName(it) }.toSet() + + val effects = config.getSubsections("effects").map { + val effect = Effects.getByName(it.getString("id")) ?: return@map null + ConfiguredEffect(effect, it) + }.filterNotNull().toSet() + + val requiresStone = config.getBool("stone.enabled") + + val stone: ItemStack = SkullBuilder().apply { + if (config.has("stone.texture")) { + setSkullTexture(config.getString("texture")) + } + setDisplayName(plugin.configYml.getString("stone.name").replace("%reforge%", name)) + addLoreLines( + plugin.configYml.getStrings("stone.lore").map { "${Display.PREFIX}${it.replace("%reforge%", name)}" }) + }.build() + + init { + ReforgeUtils.setReforgeStone(stone, this) + + CustomItem( + plugin.namespacedKeyFactory.create("stone_" + this.id), + { test -> ReforgeUtils.getReforgeStone(test) == this }, + stone + ).register() + + if (config.getBool("craftable")) { + Recipes.createAndRegisterRecipe( + plugin, + "stone_" + this.id, + stone, + config.getStrings("recipe", false) + ) + } + } + + fun handleApplication(itemStack: ItemStack) { + handleRemoval(itemStack) + itemStack.itemMeta = this.handleApplication(itemStack.itemMeta!!) + } + + fun handleApplication(meta: ItemMeta): ItemMeta { + for ((effect, config) in this.effects) { + effect.handleApplication(meta, config) + } + return meta + } + + fun handleRemoval(itemStack: ItemStack) { + itemStack.itemMeta = this.handleRemoval(itemStack.itemMeta!!) + } + + fun handleRemoval(meta: ItemMeta): ItemMeta { + for ((effect, _) in this.effects) { + effect.handleRemoval(meta) + } + return meta + } + + override fun equals(other: Any?): Boolean { + if (this === other) { + return true + } + + if (other !is Reforge) { + return false + } + + return other.id == this.id + } + + override fun hashCode(): Int { + return Objects.hash(id) + } + + override fun toString(): String { + return "Reforge{$id}" + } +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/util/WatcherTriggers.java b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/reforges/util/WatcherTriggers.java similarity index 86% rename from eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/util/WatcherTriggers.java rename to eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/reforges/util/WatcherTriggers.java index cbe9442..7c51789 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/util/WatcherTriggers.java +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/reforges/util/WatcherTriggers.java @@ -9,7 +9,6 @@ import com.willfp.eco.core.integrations.antigrief.AntigriefManager; import com.willfp.eco.core.integrations.mcmmo.McmmoManager; import com.willfp.eco.util.ArrowUtils; import com.willfp.eco.util.NumberUtils; -import com.willfp.reforges.effects.Effect; import com.willfp.reforges.reforges.Reforge; import org.bukkit.block.Block; import org.bukkit.entity.AbstractArrow; @@ -44,96 +43,11 @@ public class WatcherTriggers extends PluginDependent implements Liste super(plugin); } - /** - * Called when a player breaks a block. - * - * @param event The event to listen for. - */ - @EventHandler(ignoreCancelled = true) - public void onBlockBreak(@NotNull final BlockBreakEvent event) { - - if (McmmoManager.isFake(event)) { - return; - } - - Player player = event.getPlayer(); - Block block = event.getBlock(); - - if (!AntigriefManager.canBreakBlock(player, block)) { - return; - } - - ItemStack itemStack = player.getInventory().getItemInMainHand(); - - Reforge reforge = ReforgeUtils.getReforge(itemStack); - - if (reforge == null) { - return; - } - - for (Map.Entry entry : reforge.getEffects().entrySet()) { - if (NumberUtils.randFloat(0, 100) > (entry.getValue().has("chance") ? entry.getValue().getDouble("chance") : 100)) { - continue; - } - entry.getKey().onBlockBreak(player, block, event, entry.getValue()); - } - } - /** * Called when an entity shoots another entity with an arrow. * * @param event The event to listen for. */ - @EventHandler(ignoreCancelled = true) - public void onArrowDamage(@NotNull final EntityDamageByEntityEvent event) { - if (McmmoManager.isFake(event)) { - return; - } - - if (!(event.getDamager() instanceof Arrow arrow)) { - return; - } - - if (!(event.getEntity() instanceof LivingEntity victim)) { - return; - } - - if (arrow.getShooter() == null) { - return; - } - - if (!(arrow.getShooter() instanceof LivingEntity attacker)) { - return; - } - - if (attacker instanceof Player && !AntigriefManager.canInjure((Player) attacker, victim)) { - return; - } - - if (event.isCancelled()) { - return; - } - - ItemStack bow = ArrowUtils.getBow(arrow); - - if (bow == null) { - return; - } - - Reforge reforge = ReforgeUtils.getReforge(bow); - - if (reforge == null) { - return; - } - - for (Map.Entry entry : reforge.getEffects().entrySet()) { - if (NumberUtils.randFloat(0, 100) > (entry.getValue().has("chance") ? entry.getValue().getDouble("chance") : 100)) { - continue; - } - entry.getKey().onArrowDamage(attacker, victim, arrow, event, entry.getValue()); - entry.getKey().onAnyDamage(attacker, victim, event, entry.getValue()); - } - } /** * Called when an entity damages another entity with a trident throw. diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/reforges/util/WatcherTriggers.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/reforges/util/WatcherTriggers.kt new file mode 100644 index 0000000..9975da7 --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/reforges/util/WatcherTriggers.kt @@ -0,0 +1,84 @@ +package com.willfp.reforges.reforges.util + +import com.willfp.eco.core.EcoPlugin +import com.willfp.eco.core.integrations.antigrief.AntigriefManager +import com.willfp.eco.core.integrations.mcmmo.McmmoManager +import com.willfp.eco.util.ArrowUtils +import com.willfp.eco.util.NumberUtils +import org.bukkit.entity.Arrow +import org.bukkit.entity.LivingEntity +import org.bukkit.entity.Player +import org.bukkit.event.EventHandler +import org.bukkit.event.Listener +import org.bukkit.event.block.BlockBreakEvent +import org.bukkit.event.entity.EntityDamageByEntityEvent + +class WatcherTriggers( + private val plugin: EcoPlugin +) : Listener { + @EventHandler(ignoreCancelled = true) + fun onBlockBreak(event: BlockBreakEvent) { + if (McmmoManager.isFake(event)) { + return + } + + val player = event.player + val block = event.block + if (!AntigriefManager.canBreakBlock(player, block)) { + return + } + val itemStack = player.inventory.itemInMainHand + val reforge = ReforgeUtils.getReforge(itemStack) ?: return + for ((key, value) in reforge.effects) { + if (NumberUtils.randFloat(0.0, 100.0) > value.getDoubleOrNull("chance") ?: 100.0) { + continue + } + key.onBlockBreak(player, block, event, value) + } + } + + @EventHandler(ignoreCancelled = true) + fun onArrowDamage(event: EntityDamageByEntityEvent) { + if (McmmoManager.isFake(event)) { + return + } + + val arrow = event.damager + val victim = event.entity + + if (arrow !is Arrow) { + return + } + + if (victim !is LivingEntity) { + return + } + + val shooter = arrow.shooter + + if (shooter !is LivingEntity) { + return + } + + if (shooter is Player && !AntigriefManager.canInjure(shooter, victim)) { + return + } + + if (event.isCancelled) { + return + } + + val bow = ArrowUtils.getBow(arrow) ?: return + + val reforge = ReforgeUtils.getReforge(bow) ?: return + + for ((effect, config) in reforge.effects) { + if (NumberUtils.randFloat(0.0, 100.0) > config.getDoubleOrNull("chance") ?: 100.0) { + continue + } + effect.onArrowDamage(shooter, victim, arrow, event, config) + effect.onAnyDamage(shooter, victim, event, config) + } + } + +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/util/AntiPlaceListener.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/util/AntiPlaceListener.kt new file mode 100644 index 0000000..df842ec --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/util/AntiPlaceListener.kt @@ -0,0 +1,16 @@ +package com.willfp.reforges.util + +import com.willfp.reforges.reforges.util.ReforgeUtils +import org.bukkit.event.EventHandler +import org.bukkit.event.Listener +import org.bukkit.event.block.BlockPlaceEvent + +class AntiPlaceListener : Listener { + @EventHandler + fun onBlockPlace(event: BlockPlaceEvent) { + if (ReforgeUtils.getReforgeStone(event.itemInHand) != null) { + event.isCancelled = true + event.setBuild(false) + } + } +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/util/DiscoverRecipeListener.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/util/DiscoverRecipeListener.kt new file mode 100644 index 0000000..82cae96 --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/util/DiscoverRecipeListener.kt @@ -0,0 +1,30 @@ +package com.willfp.reforges.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 == "reforges") { + if (!key.key.contains("displayed")) { + player.discoverRecipe(key) + } + } + } + } + } + } +} \ 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 fb10067..fefcdf9 100644 --- a/eco-core/core-plugin/src/main/resources/plugin.yml +++ b/eco-core/core-plugin/src/main/resources/plugin.yml @@ -10,6 +10,8 @@ depend: - ProtocolLib softdepend: - Vault +libraries: + - 'org.jetbrains.kotlin:kotlin-stdlib:1.5.21' commands: reforges: