ExcellentEnchants-spigot/Core/src/main/java/su/nightexpress/excellentenchants/enchantment/impl/fishing/RiverMasterEnchant.java

69 lines
2.5 KiB
Java

package su.nightexpress.excellentenchants.enchantment.impl.fishing;
import org.bukkit.enchantments.EnchantmentTarget;
import org.bukkit.entity.FishHook;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.entity.ProjectileLaunchEvent;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
import su.nexmedia.engine.api.manager.EventListener;
import su.nightexpress.excellentenchants.ExcellentEnchants;
import su.nightexpress.excellentenchants.Placeholders;
import su.nightexpress.excellentenchants.api.enchantment.type.GenericEnchant;
import su.nightexpress.excellentenchants.enchantment.config.EnchantScaler;
import su.nightexpress.excellentenchants.enchantment.impl.ExcellentEnchant;
import su.nightexpress.excellentenchants.enchantment.util.EnchantUtils;
public class RiverMasterEnchant extends ExcellentEnchant implements GenericEnchant, EventListener {
public static final String ID = "river_master";
private EnchantScaler distanceMod;
public RiverMasterEnchant(@NotNull ExcellentEnchants plugin) {
super(plugin, ID);
this.getDefaults().setDescription("Increases casting distance.");
this.getDefaults().setLevelMax(5);
this.getDefaults().setTier(0.1);
}
@Override
public void loadSettings() {
super.loadSettings();
this.distanceMod = EnchantScaler.read(this, "Settings.Distance_Modifier",
"1.25 + " + Placeholders.ENCHANTMENT_LEVEL + " / 5",
"Multiplies the casted fish hook's velocity by specified value.",
"Setting too high values will result in hook auto removal by vanilla game/server mechanics.");
}
@NotNull
@Override
public EnchantmentTarget getCategory() {
return EnchantmentTarget.FISHING_ROD;
}
public double getDistanceMod(int level) {
return this.distanceMod.getValue(level);
}
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onHookLaunch(ProjectileLaunchEvent event) {
if (!(event.getEntity() instanceof FishHook hook)) return;
if (!(hook.getShooter() instanceof Player player)) return;
ItemStack rod = EnchantUtils.getFishingRod(player);
if (rod == null) return;
int level = EnchantUtils.getLevel(rod, this.getBackend());
if (level < 1) return;
if (this.isOutOfCharges(rod)) return;
hook.setVelocity(hook.getVelocity().multiply(this.getDistanceMod(level)));
this.consumeCharges(rod, level);
}
}