Added Economical

This commit is contained in:
Auxilor 2020-10-12 19:37:29 +01:00
parent fea61a382d
commit dc3585dc64
13 changed files with 156 additions and 32 deletions

View File

@ -249,5 +249,11 @@
<version>1.7</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.destroystokyo.paper</groupId>
<artifactId>paper-api</artifactId>
<version>1.16.3-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>

View File

@ -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);
}

View File

@ -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<String> args) {
if(args.size() == 0) {

View File

@ -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
*/

View File

@ -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

View File

@ -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);
}
}

View File

@ -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("");
}

View File

@ -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;

View File

@ -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;
}
}
}

View File

@ -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"));
}
}

View File

@ -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

View File

@ -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

View File

@ -60,6 +60,10 @@
<id>dmulloy2-repo</id>
<url>https://repo.dmulloy2.net/nexus/repository/public/</url>
</repository>
<repository>
<id>papermc</id>
<url>https://papermc.io/repo/repository/maven-public/</url>
</repository>
</repositories>
<build>