v3.6.4
This commit is contained in:
parent
962dc81bec
commit
ce7ca98351
12
Core/pom.xml
12
Core/pom.xml
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<artifactId>ExcellentEnchants</artifactId>
|
||||
<groupId>su.nightexpress.excellentenchants</groupId>
|
||||
<version>3.6.2</version>
|
||||
<version>3.6.3</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
@ -72,27 +72,27 @@
|
||||
<dependency>
|
||||
<groupId>su.nightexpress.excellentenchants</groupId>
|
||||
<artifactId>NMS</artifactId>
|
||||
<version>3.6.2</version>
|
||||
<version>3.6.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>su.nightexpress.excellentenchants</groupId>
|
||||
<artifactId>V1_18_R2</artifactId>
|
||||
<version>3.6.2</version>
|
||||
<version>3.6.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>su.nightexpress.excellentenchants</groupId>
|
||||
<artifactId>V1_19_R3</artifactId>
|
||||
<version>3.6.2</version>
|
||||
<version>3.6.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>su.nightexpress.excellentenchants</groupId>
|
||||
<artifactId>V1_20_R1</artifactId>
|
||||
<version>3.6.2</version>
|
||||
<version>3.6.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>su.nightexpress.excellentenchants</groupId>
|
||||
<artifactId>V1_20_R2</artifactId>
|
||||
<version>3.6.2</version>
|
||||
<version>3.6.3</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
@ -8,6 +8,8 @@ public class Placeholders extends su.nexmedia.engine.utils.Placeholders {
|
||||
public static final String URL_ENGINE_ITEMS = "https://github.com/nulli0n/NexEngine-spigot/wiki/Configuration-Tips#item-sections";
|
||||
|
||||
public static final String GENERIC_TYPE = "%type%";
|
||||
public static final String GENERIC_ITEM = "%item%";
|
||||
public static final String GENERIC_LEVEL = "%level%";
|
||||
public static final String GENERIC_AMOUNT = "%amount%";
|
||||
public static final String GENERIC_DESCRIPTION = "%description%";
|
||||
public static final String GENERIC_ENCHANT = "%enchant%";
|
||||
|
@ -4,13 +4,17 @@ import org.bukkit.NamespacedKey;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.EquipmentSlot;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import su.nexmedia.engine.api.command.AbstractCommand;
|
||||
import su.nexmedia.engine.api.command.CommandResult;
|
||||
import su.nexmedia.engine.lang.LangManager;
|
||||
import su.nexmedia.engine.utils.*;
|
||||
import su.nexmedia.engine.utils.random.Rnd;
|
||||
import su.nightexpress.excellentenchants.ExcellentEnchants;
|
||||
import su.nightexpress.excellentenchants.Perms;
|
||||
import su.nightexpress.excellentenchants.Placeholders;
|
||||
import su.nightexpress.excellentenchants.config.Lang;
|
||||
import su.nightexpress.excellentenchants.enchantment.util.EnchantUtils;
|
||||
|
||||
@ -23,7 +27,6 @@ public class EnchantCommand extends AbstractCommand<ExcellentEnchants> {
|
||||
super(plugin, new String[]{"enchant"}, Perms.COMMAND_ENCHANT);
|
||||
this.setDescription(plugin.getMessage(Lang.COMMAND_ENCHANT_DESC));
|
||||
this.setUsage(plugin.getMessage(Lang.COMMAND_ENCHANT_USAGE));
|
||||
this.setPlayerOnly(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -35,6 +38,12 @@ public class EnchantCommand extends AbstractCommand<ExcellentEnchants> {
|
||||
if (arg == 2) {
|
||||
return Arrays.asList("-1", "1", "5", "10");
|
||||
}
|
||||
if (arg == 3) {
|
||||
return CollectionsUtil.playerNames(player);
|
||||
}
|
||||
if (arg == 4) {
|
||||
return CollectionsUtil.getEnumsList(EquipmentSlot.class);
|
||||
}
|
||||
return super.getTab(player, arg, args);
|
||||
}
|
||||
|
||||
@ -45,19 +54,26 @@ public class EnchantCommand extends AbstractCommand<ExcellentEnchants> {
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = (Player) sender;
|
||||
ItemStack item = player.getInventory().getItemInMainHand();
|
||||
if (item.getType().isAir()) {
|
||||
this.plugin.getMessage(Lang.COMMAND_ENCHANT_ERROR_NO_ITEM).send(sender);
|
||||
return;
|
||||
}
|
||||
|
||||
Enchantment enchantment = Enchantment.getByKey(NamespacedKey.minecraft(result.getArg(1).toLowerCase()));
|
||||
if (enchantment == null) {
|
||||
plugin.getMessage(Lang.ERROR_NO_ENCHANT).send(sender);
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = PlayerUtil.getPlayer(result.getArg(3, sender.getName()));
|
||||
if (player == null) {
|
||||
this.errorPlayer(sender);
|
||||
return;
|
||||
}
|
||||
|
||||
EquipmentSlot slot = StringUtil.getEnum(result.getArg(4, ""), EquipmentSlot.class).orElse(EquipmentSlot.HAND);
|
||||
|
||||
ItemStack item = player.getInventory().getItem(slot);
|
||||
if (item == null || item.getType().isAir()) {
|
||||
this.plugin.getMessage(Lang.COMMAND_ENCHANT_ERROR_NO_ITEM).send(sender);
|
||||
return;
|
||||
}
|
||||
|
||||
int level = result.getInt(2, -1);
|
||||
if (level < 0) {
|
||||
level = Rnd.get(enchantment.getStartLevel(), enchantment.getMaxLevel());
|
||||
@ -69,6 +85,13 @@ public class EnchantCommand extends AbstractCommand<ExcellentEnchants> {
|
||||
else EnchantUtils.remove(item, enchantment);
|
||||
|
||||
EnchantUtils.updateDisplay(item);
|
||||
plugin.getMessage(Lang.COMMAND_ENCHANT_DONE).send(sender);
|
||||
player.getInventory().setItem(slot, item);
|
||||
|
||||
plugin.getMessage(sender == player ? Lang.COMMAND_ENCHANT_DONE_SELF : Lang.COMMAND_ENCHANT_DONE_OTHERS)
|
||||
.replace(Placeholders.forPlayer(player))
|
||||
.replace(Placeholders.GENERIC_ITEM, ItemUtil.getItemName(item))
|
||||
.replace(Placeholders.GENERIC_ENCHANT, LangManager.getEnchantment(enchantment))
|
||||
.replace(Placeholders.GENERIC_LEVEL, NumberUtil.toRoman(level))
|
||||
.send(sender);
|
||||
}
|
||||
}
|
||||
|
@ -10,10 +10,11 @@ public class Lang extends EngineLang {
|
||||
|
||||
public static final LangKey COMMAND_LIST_DESC = LangKey.of("Command.List.Desc", "List of all custom enchantments.");
|
||||
|
||||
public static final LangKey COMMAND_ENCHANT_USAGE = LangKey.of("Command.Enchant.Usage", "<enchant> <level>");
|
||||
public static final LangKey COMMAND_ENCHANT_USAGE = LangKey.of("Command.Enchant.Usage", "<enchant> <level> [player] [slot]");
|
||||
public static final LangKey COMMAND_ENCHANT_DESC = LangKey.of("Command.Enchant.Desc", "Enchants the item in your hand.");
|
||||
public static final LangKey COMMAND_ENCHANT_DONE = LangKey.of("Command.Enchant.Done", LIGHT_YELLOW + "Successfully enchanted!");
|
||||
public static final LangKey COMMAND_ENCHANT_ERROR_NO_ITEM = LangKey.of("Command.Enchant.Error.NoItem", RED + "You must hold an item to enchant it!");
|
||||
public static final LangKey COMMAND_ENCHANT_DONE_SELF = LangKey.of("Command.Enchant.Done.Self", ORANGE + GENERIC_ITEM + LIGHT_YELLOW + " enchanted with " + GENERIC_ENCHANT + " " + GENERIC_LEVEL + LIGHT_YELLOW + "!");
|
||||
public static final LangKey COMMAND_ENCHANT_DONE_OTHERS = LangKey.of("Command.Enchant.Done.Others", ORANGE + PLAYER_NAME + LIGHT_YELLOW + "'s " + ORANGE + GENERIC_ITEM + LIGHT_YELLOW + " enchanted with " + GENERIC_ENCHANT + " " + GENERIC_LEVEL + LIGHT_YELLOW + "!");
|
||||
public static final LangKey COMMAND_ENCHANT_ERROR_NO_ITEM = LangKey.of("Command.Enchant.Error.NoItem", RED + "There is no item to enchant!");
|
||||
|
||||
public static final LangKey COMMAND_BOOK_USAGE = LangKey.of("Command.Book.Usage", "<player> <enchant> <level>");
|
||||
public static final LangKey COMMAND_BOOK_DESC = LangKey.of("Command.Book.Desc", "Gives custom enchanted book.");
|
||||
|
@ -13,6 +13,7 @@ import org.bukkit.inventory.ItemStack;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import su.nexmedia.engine.api.config.JOption;
|
||||
import su.nexmedia.engine.api.manager.EventListener;
|
||||
import su.nexmedia.engine.utils.EngineUtils;
|
||||
import su.nexmedia.engine.utils.PDCUtil;
|
||||
import su.nexmedia.engine.utils.StringUtil;
|
||||
import su.nightexpress.excellentenchants.ExcellentEnchants;
|
||||
@ -21,6 +22,8 @@ import su.nightexpress.excellentenchants.api.enchantment.meta.Chanced;
|
||||
import su.nightexpress.excellentenchants.api.enchantment.type.DeathEnchant;
|
||||
import su.nightexpress.excellentenchants.enchantment.impl.ExcellentEnchant;
|
||||
import su.nightexpress.excellentenchants.enchantment.impl.meta.ChanceImplementation;
|
||||
import su.nightexpress.excellentenchants.hook.HookId;
|
||||
import su.nightexpress.excellentenchants.hook.impl.MythicMobsHook;
|
||||
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
@ -30,9 +33,11 @@ public class EnchantThrifty extends ExcellentEnchant implements Chanced, DeathEn
|
||||
|
||||
public static final String ID = "thrifty";
|
||||
|
||||
private final NamespacedKey keyEntityIgnored;
|
||||
|
||||
private Set<EntityType> ignoredEntityTypes;
|
||||
private Set<CreatureSpawnEvent.SpawnReason> ignoredSpawnReasons;
|
||||
private final NamespacedKey keyEntityIgnored;
|
||||
private boolean ignoreMythicMobs;
|
||||
|
||||
private ChanceImplementation chanceImplementation;
|
||||
|
||||
@ -54,8 +59,8 @@ public class EnchantThrifty extends ExcellentEnchant implements Chanced, DeathEn
|
||||
this.ignoredEntityTypes = JOption.create("Settings.Ignored_Entity_Types",
|
||||
Set.of(EntityType.WITHER.name(), EntityType.ENDER_DRAGON.name()),
|
||||
"List of entity types, that will not drop spawn eggs.",
|
||||
"https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/entity/EntityType.html")
|
||||
.read(cfg).stream().map(e -> StringUtil.getEnum(e, EntityType.class).orElse(null))
|
||||
"https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/entity/EntityType.html"
|
||||
).read(cfg).stream().map(e -> StringUtil.getEnum(e, EntityType.class).orElse(null))
|
||||
.filter(Objects::nonNull).collect(Collectors.toSet());
|
||||
|
||||
this.ignoredSpawnReasons = JOption.create("Settings.Ignored_Spawn_Reasons",
|
||||
@ -63,9 +68,13 @@ public class EnchantThrifty extends ExcellentEnchant implements Chanced, DeathEn
|
||||
CreatureSpawnEvent.SpawnReason.SPAWNER.name(),
|
||||
CreatureSpawnEvent.SpawnReason.DISPENSE_EGG.name()),
|
||||
"Entities will not drop spawn eggs if they were spawned by one of the reasons below.",
|
||||
"https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/event/entity/CreatureSpawnEvent.SpawnReason.html")
|
||||
.read(cfg).stream().map(e -> StringUtil.getEnum(e, CreatureSpawnEvent.SpawnReason.class).orElse(null))
|
||||
"https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/event/entity/CreatureSpawnEvent.SpawnReason.html"
|
||||
).read(cfg).stream().map(e -> StringUtil.getEnum(e, CreatureSpawnEvent.SpawnReason.class).orElse(null))
|
||||
.filter(Objects::nonNull).collect(Collectors.toSet());
|
||||
|
||||
this.ignoreMythicMobs = JOption.create("Settings.Ignore_MythicMobs", true,
|
||||
"Sets whether or not MythicMobs should be immune to enchantment effect."
|
||||
).read(cfg);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@ -84,6 +93,7 @@ public class EnchantThrifty extends ExcellentEnchant implements Chanced, DeathEn
|
||||
public boolean onKill(@NotNull EntityDeathEvent event, @NotNull LivingEntity entity, @NotNull Player killer, ItemStack weapon, int level) {
|
||||
if (this.ignoredEntityTypes.contains(entity.getType())) return false;
|
||||
if (PDCUtil.getBoolean(entity, this.keyEntityIgnored).orElse(false)) return false;
|
||||
if (this.ignoreMythicMobs && EngineUtils.hasPlugin(HookId.MYTHIC_MOBS) && MythicMobsHook.isMythicMob(entity)) return false;
|
||||
if (!this.checkTriggerChance(level)) return false;
|
||||
|
||||
ItemStack eggItem = plugin.getEnchantNMS().getSpawnEgg(entity);
|
||||
|
@ -0,0 +1,69 @@
|
||||
package su.nightexpress.excellentenchants.enchantment.util;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import su.nexmedia.engine.api.config.JOption;
|
||||
import su.nexmedia.engine.api.config.JYML;
|
||||
|
||||
public class Modifier {
|
||||
|
||||
private final double base;
|
||||
private final double perLevel;
|
||||
private final ModifierAction action;
|
||||
|
||||
public Modifier(double base, double perLevel, @NotNull ModifierAction action) {
|
||||
this.base = base;
|
||||
this.perLevel = perLevel;
|
||||
this.action = action;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static Modifier add(double base, double perLevel) {
|
||||
return new Modifier(base, perLevel, ModifierAction.ADD);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static Modifier multiply(double base, double perLevel) {
|
||||
return new Modifier(base, perLevel, ModifierAction.MULTIPLY);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static Modifier read(@NotNull JYML cfg, @NotNull String path, @NotNull Modifier def, @NotNull String... comments) {
|
||||
return new JOption<>(path,
|
||||
(cfg2, path2, def2) -> read(cfg2, path2),
|
||||
def,
|
||||
comments
|
||||
).setWriter((cfg2, path2, mod) -> mod.write(cfg2, path2)).read(cfg);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static Modifier read(@NotNull JYML cfg, @NotNull String path) {
|
||||
double base = JOption.create(path + ".Base", 0D).read(cfg);
|
||||
double perLevel = JOption.create(path + ".Per_Level", 0D).read(cfg);
|
||||
ModifierAction action = JOption.create(path + ".Action", ModifierAction.class, ModifierAction.ADD).read(cfg);
|
||||
|
||||
return new Modifier(base, perLevel, action);
|
||||
}
|
||||
|
||||
public void write(@NotNull JYML cfg, @NotNull String path) {
|
||||
cfg.set(path + ".Base", this.getBase());
|
||||
cfg.set(path + ".Per_Level", this.getPerLevel());
|
||||
cfg.set(path + ".Action", this.getAction().name());
|
||||
}
|
||||
|
||||
public double getValue(int level) {
|
||||
return this.action.math(this.getBase(), this.getPerLevel() * level);
|
||||
}
|
||||
|
||||
public double getBase() {
|
||||
return base;
|
||||
}
|
||||
|
||||
public double getPerLevel() {
|
||||
return perLevel;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public ModifierAction getAction() {
|
||||
return action;
|
||||
}
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
package su.nightexpress.excellentenchants.enchantment.util;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.function.BiFunction;
|
||||
|
||||
public enum ModifierAction {
|
||||
|
||||
ADD(Double::sum),
|
||||
MULTIPLY((origin, target) -> origin * target);
|
||||
|
||||
private final BiFunction<Double, Double, Double> function;
|
||||
|
||||
ModifierAction(@NotNull BiFunction<Double, Double, Double> function) {
|
||||
this.function = function;
|
||||
}
|
||||
|
||||
public double math(double origin, double target) {
|
||||
return this.function.apply(origin, target);
|
||||
}
|
||||
}
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<artifactId>ExcellentEnchants</artifactId>
|
||||
<groupId>su.nightexpress.excellentenchants</groupId>
|
||||
<version>3.6.2</version>
|
||||
<version>3.6.3</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<artifactId>ExcellentEnchants</artifactId>
|
||||
<groupId>su.nightexpress.excellentenchants</groupId>
|
||||
<version>3.6.2</version>
|
||||
<version>3.6.3</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
@ -26,7 +26,7 @@
|
||||
<dependency>
|
||||
<groupId>su.nightexpress.excellentenchants</groupId>
|
||||
<artifactId>NMS</artifactId>
|
||||
<version>3.6.2</version>
|
||||
<version>3.6.3</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<artifactId>ExcellentEnchants</artifactId>
|
||||
<groupId>su.nightexpress.excellentenchants</groupId>
|
||||
<version>3.6.2</version>
|
||||
<version>3.6.3</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
@ -26,7 +26,7 @@
|
||||
<dependency>
|
||||
<groupId>su.nightexpress.excellentenchants</groupId>
|
||||
<artifactId>NMS</artifactId>
|
||||
<version>3.6.2</version>
|
||||
<version>3.6.3</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<artifactId>ExcellentEnchants</artifactId>
|
||||
<groupId>su.nightexpress.excellentenchants</groupId>
|
||||
<version>3.6.2</version>
|
||||
<version>3.6.3</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
@ -26,7 +26,7 @@
|
||||
<dependency>
|
||||
<groupId>su.nightexpress.excellentenchants</groupId>
|
||||
<artifactId>NMS</artifactId>
|
||||
<version>3.6.2</version>
|
||||
<version>3.6.3</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<artifactId>ExcellentEnchants</artifactId>
|
||||
<groupId>su.nightexpress.excellentenchants</groupId>
|
||||
<version>3.6.2</version>
|
||||
<version>3.6.3</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
@ -26,7 +26,7 @@
|
||||
<dependency>
|
||||
<groupId>su.nightexpress.excellentenchants</groupId>
|
||||
<artifactId>NMS</artifactId>
|
||||
<version>3.6.2</version>
|
||||
<version>3.6.3</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user