diff --git a/Plugin/pom.xml b/Plugin/pom.xml index 1e89fd06..590ae3ad 100644 --- a/Plugin/pom.xml +++ b/Plugin/pom.xml @@ -249,5 +249,11 @@ 1.7 compile + + com.destroystokyo.paper + paper-api + 1.16.3-R0.1-SNAPSHOT + provided + diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/command/AbstractCommand.java b/Plugin/src/main/java/com/willfp/ecoenchants/command/AbstractCommand.java index ff93bb9a..16f8a02a 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/command/AbstractCommand.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/command/AbstractCommand.java @@ -23,9 +23,8 @@ public abstract class AbstractCommand implements CommandExecutor, Registerable { this.playersOnly = playersOnly; } - public AbstractCommand setTab(AbstractTabCompleter tabCompleter) { - this.tabCompleter = tabCompleter; - return this; + public AbstractTabCompleter getTab() { + return null; } public String getPermission() { @@ -58,6 +57,8 @@ public abstract class AbstractCommand implements CommandExecutor, Registerable { @Override public final void register() { Bukkit.getPluginCommand(name).setExecutor(this); + + this.tabCompleter = this.getTab(); if(tabCompleter != null) { Bukkit.getPluginCommand(name).setTabCompleter(tabCompleter); } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/command/commands/CommandEnchantinfo.java b/Plugin/src/main/java/com/willfp/ecoenchants/command/commands/CommandEnchantinfo.java index cad5436b..32031f2e 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/command/commands/CommandEnchantinfo.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/command/commands/CommandEnchantinfo.java @@ -1,6 +1,8 @@ package com.willfp.ecoenchants.command.commands; import com.willfp.ecoenchants.command.AbstractCommand; +import com.willfp.ecoenchants.command.AbstractTabCompleter; +import com.willfp.ecoenchants.command.tabcompleters.TabCompleterEnchantinfo; import com.willfp.ecoenchants.config.ConfigManager; import com.willfp.ecoenchants.enchantments.EcoEnchant; import com.willfp.ecoenchants.enchantments.EcoEnchants; @@ -20,6 +22,11 @@ public final class CommandEnchantinfo extends AbstractCommand { super("enchantinfo", "ecoenchants.enchantinfo", false); } + @Override + public AbstractTabCompleter getTab() { + return new TabCompleterEnchantinfo(); + } + @Override public void onExecute(CommandSender sender, List args) { if(args.size() == 0) { diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/EcoEnchant.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/EcoEnchant.java index 43d9ad40..36fb5433 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/EcoEnchant.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/EcoEnchant.java @@ -4,7 +4,9 @@ import com.willfp.ecoenchants.config.ConfigManager; import com.willfp.ecoenchants.config.configs.EnchantmentConfig; import com.willfp.ecoenchants.enchantments.meta.EnchantmentRarity; import com.willfp.ecoenchants.enchantments.util.Watcher; +import com.willfp.ecoenchants.util.Logger; import com.willfp.ecoenchants.util.interfaces.Registerable; +import com.willfp.ecoenchants.util.optional.Prerequisite; import net.md_5.bungee.api.ChatColor; import org.apache.commons.lang.WordUtils; import org.bukkit.Material; @@ -39,11 +41,11 @@ public abstract class EcoEnchant extends Enchantment implements Listener, Regist private boolean enabled; /** - * Create new EcoEnchant matching builder + * Create new EcoEnchant matching builder and prerequisites * * @param builder The {@link EcoEnchantBuilder} for enchantment */ - protected EcoEnchant(EcoEnchantBuilder builder) { + protected EcoEnchant(EcoEnchantBuilder builder, Prerequisite[] prerequisites) { super(NamespacedKey.minecraft(builder.key)); this.type = builder.type; @@ -51,10 +53,28 @@ public abstract class EcoEnchant extends Enchantment implements Listener, Regist this.configVersion = builder.configVersion; this.config = builder.config; + if(!Arrays.stream(prerequisites).allMatch(Prerequisite::isMet)) { + Arrays.stream(prerequisites).forEach(prerequisite -> { + if(!prerequisite.isMet()) { + Logger.warn("Enchantment " + builder.key + " does not match prerequisite \"" + prerequisite.name() + "\". It will not be available."); + } + }); + return; + } + this.update(); this.add(); } + /** + * Create new EcoEnchant matching builder + * + * @param builder The {@link EcoEnchantBuilder} for enchantment + */ + protected EcoEnchant(EcoEnchantBuilder builder) { + this(builder, new Prerequisite[]{}); + } + /** * Update the enchantment based off config values */ diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/EcoEnchants.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/EcoEnchants.java index 56e28b63..91d54121 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/EcoEnchants.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/EcoEnchants.java @@ -227,6 +227,7 @@ public class EcoEnchants { public static final EcoEnchant INACCURACY_CURSE = new InaccuracyCurse(); public static final EcoEnchant RESPIRATOR = new Respirator(); public static final EcoEnchant FETCHING = new Fetching(); + public static final EcoEnchant ECONOMICAL = new Economical(); /** * Get all registered {@link EcoEnchant}s diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Economical.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Economical.java new file mode 100644 index 00000000..367ccbfb --- /dev/null +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Economical.java @@ -0,0 +1,24 @@ +package com.willfp.ecoenchants.enchantments.ecoenchants.normal; + +import com.destroystokyo.paper.event.player.PlayerElytraBoostEvent; +import com.willfp.ecoenchants.enchantments.EcoEnchant; +import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder; +import com.willfp.ecoenchants.enchantments.util.EnchantChecks; +import com.willfp.ecoenchants.enchantments.util.EnchantmentUtils; +import com.willfp.ecoenchants.util.optional.Prerequisite; +import org.bukkit.event.EventHandler; + +public class Economical extends EcoEnchant { + public Economical() { + super( + new EcoEnchantBuilder("economical", EnchantmentType.NORMAL, 5.0), + new Prerequisite[]{Prerequisite.HasPaper} + ); + } + + @EventHandler + public void onElytraBoost(PlayerElytraBoostEvent event) { + if(EnchantmentUtils.passedChance(this, EnchantChecks.getArmorPoints(event.getPlayer(), this))) + event.setShouldConsume(false); + } +} diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/loader/Loader.java b/Plugin/src/main/java/com/willfp/ecoenchants/loader/Loader.java index f31933fd..b5cf76b7 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/loader/Loader.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/loader/Loader.java @@ -5,7 +5,6 @@ import com.willfp.ecoenchants.EcoEnchantsPlugin; import com.willfp.ecoenchants.command.commands.CommandEcodebug; import com.willfp.ecoenchants.command.commands.CommandEcoreload; import com.willfp.ecoenchants.command.commands.CommandEnchantinfo; -import com.willfp.ecoenchants.command.tabcompleters.TabCompleterEnchantinfo; import com.willfp.ecoenchants.config.ConfigManager; import com.willfp.ecoenchants.display.EnchantDisplay; import com.willfp.ecoenchants.display.packets.PacketOpenWindowMerchant; @@ -44,6 +43,7 @@ import com.willfp.ecoenchants.nms.TridentStack; import com.willfp.ecoenchants.util.Logger; import com.willfp.ecoenchants.util.UpdateChecker; import com.willfp.ecoenchants.util.interfaces.EcoRunnable; +import com.willfp.ecoenchants.util.optional.Prerequisite; import org.apache.maven.artifact.versioning.DefaultArtifactVersion; import org.bstats.bukkit.Metrics; import org.bukkit.Bukkit; @@ -70,30 +70,6 @@ public class Loader { Logger.info(""); Logger.info("=========================================="); - /* - Check for paper - */ - - boolean isPapermc = false; - try { - isPapermc = Class.forName("com.destroystokyo.paper.VersionHistoryManager$VersionData") != null; - } catch (ClassNotFoundException ignored) {} - - if (!isPapermc) { - Bukkit.getScheduler().runTaskLater(EcoEnchantsPlugin.getInstance(), () -> { - Logger.info(""); - Logger.info("----------------------------"); - Logger.info(""); - Logger.error("You don't seem to be running paper!"); - Logger.error("Paper is strongly recommended for all servers,"); - Logger.error("and enchantments like Drill may not function properly without it"); - Logger.error("Download Paper from §fhttps://papermc.io"); - Logger.info(""); - Logger.info("----------------------------"); - Logger.info(""); - }, 1); - } - /* Load Configs */ @@ -283,7 +259,7 @@ public class Loader { Logger.info("Loading Commands..."); new CommandEcoreload().register(); new CommandEcodebug().register(); - new CommandEnchantinfo().setTab(new TabCompleterEnchantinfo()).register(); + new CommandEnchantinfo().register(); Logger.info(""); /* @@ -412,6 +388,23 @@ public class Loader { Logger.info("Spartan: §9DISABLED"); } + /* + Check for paper + */ + + if (!Prerequisite.HasPaper.isMet()) { + Logger.info(""); + Logger.info("----------------------------"); + Logger.info(""); + Logger.error("You don't seem to be running paper!"); + Logger.error("Paper is strongly recommended for all servers,"); + Logger.error("and enchantments like Drill may not function properly without it"); + Logger.error("Download Paper from §fhttps://papermc.io"); + Logger.info(""); + Logger.info("----------------------------"); + Logger.info(""); + } + Logger.info(""); } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/nms/BlockBreak.java b/Plugin/src/main/java/com/willfp/ecoenchants/nms/BlockBreak.java index 175e7405..bd1fda29 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/nms/BlockBreak.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/nms/BlockBreak.java @@ -1,6 +1,5 @@ package com.willfp.ecoenchants.nms; - import com.willfp.ecoenchants.nms.API.BlockBreakWrapper; import org.bukkit.Bukkit; import org.bukkit.block.Block; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/util/ClassUtils.java b/Plugin/src/main/java/com/willfp/ecoenchants/util/ClassUtils.java new file mode 100644 index 00000000..bffab7f5 --- /dev/null +++ b/Plugin/src/main/java/com/willfp/ecoenchants/util/ClassUtils.java @@ -0,0 +1,12 @@ +package com.willfp.ecoenchants.util; + +public class ClassUtils { + public static boolean exists(String className) { + try { + Class.forName(className); + return true; + } catch (ClassNotFoundException e) { + return false; + } + } +} diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/util/optional/Prerequisite.java b/Plugin/src/main/java/com/willfp/ecoenchants/util/optional/Prerequisite.java new file mode 100644 index 00000000..18cbf610 --- /dev/null +++ b/Plugin/src/main/java/com/willfp/ecoenchants/util/optional/Prerequisite.java @@ -0,0 +1,29 @@ +package com.willfp.ecoenchants.util.optional; + +import com.willfp.ecoenchants.util.ClassUtils; +import org.bukkit.Bukkit; + +public enum Prerequisite { + MinVer1_16(false), + HasPaper(false), + Dummy(false); + + private boolean isMet; + + Prerequisite(boolean isMet) { + this.isMet = isMet; + } + + public boolean isMet() { + return isMet; + } + + private void setMet(boolean met) { + isMet = met; + } + + static { + MinVer1_16.setMet(!Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3].contains("15")); + HasPaper.setMet(ClassUtils.exists("com.destroystokyo.paper.event.player.PlayerElytraBoostEvent")); + } +} diff --git a/Plugin/src/main/resources/enchants/normal/economical.yml b/Plugin/src/main/resources/enchants/normal/economical.yml new file mode 100644 index 00000000..ec4adb4a --- /dev/null +++ b/Plugin/src/main/resources/enchants/normal/economical.yml @@ -0,0 +1,25 @@ +# +# Economical EcoEnchant +# + +config-version: 5.0 # Don't edit this. + +name: "Economical" +description: Chance to not consume fireworks while boosting. +enabled: true + +obtaining: + table: true + villager: true + loot: true + rarity: epic + +general-config: + targets: + - elytra + grindstoneable: true + conflicts: [] + maximum-level: 4 + +config: + chance-per-level: 20 \ No newline at end of file diff --git a/Plugin/src/main/resources/plugin.yml b/Plugin/src/main/resources/plugin.yml index d64f6a97..6a8070f0 100644 --- a/Plugin/src/main/resources/plugin.yml +++ b/Plugin/src/main/resources/plugin.yml @@ -853,4 +853,7 @@ permissions: default: true ecoenchants.fromtable.fetching: description: Allows getting fetching from an enchanting table + default: true + ecoenchants.fromtable.economical: + description: Allows getting economical from an enchanting table default: true \ No newline at end of file diff --git a/pom.xml b/pom.xml index 9d5fc46f..d35718ec 100644 --- a/pom.xml +++ b/pom.xml @@ -60,6 +60,10 @@ dmulloy2-repo https://repo.dmulloy2.net/nexus/repository/public/ + + papermc + https://papermc.io/repo/repository/maven-public/ +