mirror of
https://github.com/Auxilor/Reforges.git
synced 2025-12-19 15:09:23 +00:00
Finished triggers migration and lots of internal changes
This commit is contained in:
@@ -29,6 +29,7 @@ allprojects {
|
||||
mavenCentral()
|
||||
maven { url 'https://jitpack.io' }
|
||||
maven { url 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/' }
|
||||
maven { url 'https://papermc.io/repo/repository/maven-public/' }
|
||||
maven { url 'https://repo.codemc.org/repository/nms/' }
|
||||
}
|
||||
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
group 'com.willfp'
|
||||
version rootProject.version
|
||||
|
||||
repositories {
|
||||
maven { url 'https://papermc.io/repo/repository/maven-public/' }
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compileOnly project(":eco-core:core-plugin")
|
||||
compileOnly 'io.papermc.paper:paper-api:1.17.1-R0.1-SNAPSHOT'
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
package com.willfp.reforges.paper;
|
||||
|
||||
import com.willfp.reforges.ReforgesPlugin;
|
||||
|
||||
public class PaperLoader {
|
||||
static {
|
||||
ReforgesPlugin plugin = ReforgesPlugin.getInstance();
|
||||
plugin.setPaperHandler(new EcoPaperHandler(plugin));
|
||||
}
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
package com.willfp.reforges.paper
|
||||
|
||||
import com.willfp.reforges.ReforgesPlugin
|
||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer
|
||||
import org.bukkit.inventory.ItemStack
|
||||
|
||||
class EcoPaperHandler(
|
||||
private val plugin: ReforgesPlugin
|
||||
) : PaperHandler {
|
||||
private val serializer = LegacyComponentSerializer.builder()
|
||||
.hexColors()
|
||||
.useUnusualXRepeatedCharacterHexFormat()
|
||||
.character('§')
|
||||
.build()
|
||||
|
||||
override fun getDisplayName(itemStack: ItemStack): String {
|
||||
return serializer.serialize(itemStack.displayName())
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,6 @@ group 'com.willfp'
|
||||
version rootProject.version
|
||||
|
||||
dependencies {
|
||||
compileOnly 'org.spigotmc:spigot-api:1.16.5-R0.1-SNAPSHOT'
|
||||
compileOnly 'io.papermc.paper:paper-api:1.17.1-R0.1-SNAPSHOT'
|
||||
compileOnly 'com.github.MilkBowl:VaultAPI:1.7'
|
||||
}
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.willfp.reforges;
|
||||
|
||||
import com.willfp.eco.core.EcoPlugin;
|
||||
import com.willfp.eco.core.Prerequisite;
|
||||
import com.willfp.eco.core.command.impl.PluginCommand;
|
||||
import com.willfp.eco.core.display.DisplayModule;
|
||||
import com.willfp.eco.core.items.Items;
|
||||
@@ -12,7 +11,6 @@ import com.willfp.reforges.config.TargetYml;
|
||||
import com.willfp.reforges.display.ReforgesDisplay;
|
||||
import com.willfp.reforges.effects.Effect;
|
||||
import com.willfp.reforges.effects.Effects;
|
||||
import com.willfp.reforges.paper.PaperHandler;
|
||||
import com.willfp.reforges.reforges.Reforges;
|
||||
import com.willfp.reforges.reforges.util.ReforgeArgParser;
|
||||
import com.willfp.reforges.reforges.util.WatcherTriggers;
|
||||
@@ -20,7 +18,6 @@ import com.willfp.reforges.util.AntiPlaceListener;
|
||||
import com.willfp.reforges.util.DiscoverRecipeListener;
|
||||
import com.willfp.reforges.vault.EconomyHandler;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.bukkit.event.HandlerList;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -47,13 +44,6 @@ public class ReforgesPlugin extends EcoPlugin {
|
||||
@Getter
|
||||
private final ReforgesJson reforgesJson;
|
||||
|
||||
/**
|
||||
* Paper handler.
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
private PaperHandler paperHandler;
|
||||
|
||||
/**
|
||||
* Internal constructor called by bukkit on plugin load.
|
||||
*/
|
||||
@@ -62,17 +52,6 @@ public class ReforgesPlugin extends EcoPlugin {
|
||||
this.targetYml = new TargetYml(this);
|
||||
this.reforgesJson = new ReforgesJson(this);
|
||||
instance = this;
|
||||
|
||||
/*
|
||||
I still use the spigot api for most things and don't want to suppress deprecation warnings
|
||||
every 2 seconds, so I'm moving all paper related things off to their own module.
|
||||
*/
|
||||
if (Prerequisite.HAS_PAPER.isMet()) {
|
||||
try {
|
||||
Class.forName("com.willfp.reforges.paper.PaperLoader");
|
||||
} catch (ClassNotFoundException ignored) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -11,7 +11,6 @@ import org.bukkit.entity.Trident;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import org.bukkit.event.entity.EntityDamageEvent;
|
||||
import org.bukkit.event.entity.EntityShootBowEvent;
|
||||
import org.bukkit.event.entity.ProjectileHitEvent;
|
||||
import org.bukkit.event.entity.ProjectileLaunchEvent;
|
||||
import org.bukkit.event.player.PlayerMoveEvent;
|
||||
@@ -112,21 +111,6 @@ public interface Watcher {
|
||||
// Empty default as effects only override required watchers.
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when an entity shoots a bow.
|
||||
*
|
||||
* @param shooter The entity that shot the bow.
|
||||
* @param arrow The arrow that was shot.
|
||||
* @param event The event that called this watcher.
|
||||
* @param config The effect config.
|
||||
*/
|
||||
default void onBowShoot(@NotNull final LivingEntity shooter,
|
||||
@NotNull final Arrow arrow,
|
||||
@NotNull final EntityShootBowEvent event,
|
||||
@NotNull final JSONConfig config) {
|
||||
// Empty default as effects only override required watchers.
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when an entity shoots a projectile.
|
||||
*
|
||||
@@ -156,15 +140,15 @@ public interface Watcher {
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when an arrow hits a block or entity.
|
||||
* Called when a projectile hits a block or entity.
|
||||
*
|
||||
* @param shooter The entity that shot the arrow.
|
||||
* @param event The event that called this watcher.
|
||||
* @param config The effect config.
|
||||
*/
|
||||
default void onArrowHit(@NotNull final LivingEntity shooter,
|
||||
@NotNull final ProjectileHitEvent event,
|
||||
@NotNull final JSONConfig config) {
|
||||
default void onProjectileHit(@NotNull final LivingEntity shooter,
|
||||
@NotNull final ProjectileHitEvent event,
|
||||
@NotNull final JSONConfig config) {
|
||||
// Empty default as effects only override required watchers.
|
||||
}
|
||||
|
||||
@@ -183,19 +167,6 @@ public interface Watcher {
|
||||
// Empty default as effects only override required watchers.
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when a trident hits a block or entity.
|
||||
*
|
||||
* @param shooter The entity that threw the trident.
|
||||
* @param event The event that called this watcher.
|
||||
* @param config The effect config.
|
||||
*/
|
||||
default void onTridentHit(@NotNull final LivingEntity shooter,
|
||||
@NotNull final ProjectileHitEvent event,
|
||||
@NotNull final JSONConfig config) {
|
||||
// Empty default as effects only override required watchers.
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when an entity takes damage wearing armor.
|
||||
*
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
package com.willfp.reforges.display
|
||||
|
||||
import com.willfp.eco.core.Prerequisite
|
||||
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.ReforgesPlugin
|
||||
import com.willfp.reforges.paper.toBukkit
|
||||
import com.willfp.reforges.reforges.meta.ReforgeTarget
|
||||
import com.willfp.reforges.reforges.util.ReforgeUtils
|
||||
import org.bukkit.ChatColor
|
||||
@@ -14,6 +16,7 @@ import org.bukkit.inventory.ItemStack
|
||||
import org.bukkit.inventory.meta.SkullMeta
|
||||
import org.bukkit.persistence.PersistentDataType
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
class ReforgesDisplay(private val plugin: ReforgesPlugin) : DisplayModule(plugin, DisplayPriority.HIGHEST) {
|
||||
override fun display(
|
||||
itemStack: ItemStack,
|
||||
@@ -67,14 +70,16 @@ class ReforgesDisplay(private val plugin: ReforgesPlugin) : DisplayModule(plugin
|
||||
lore.addAll(addLore)
|
||||
}
|
||||
if (plugin.configYml.getBool("reforge.display-in-name")) {
|
||||
val displayName = plugin.paperHandler.getDisplayName(itemStack)
|
||||
val newName = "${reforge.name} ${ChatColor.RESET}${displayName}"
|
||||
meta.setDisplayName(newName)
|
||||
meta.persistentDataContainer.set(
|
||||
plugin.namespacedKeyFactory.create("shadowed_name"),
|
||||
PersistentDataType.STRING,
|
||||
displayName
|
||||
)
|
||||
if (Prerequisite.HAS_PAPER.isMet) {
|
||||
val displayName = itemStack.displayName().toBukkit()
|
||||
val newName = "${reforge.name} ${ChatColor.RESET}${displayName}"
|
||||
meta.setDisplayName(newName)
|
||||
meta.persistentDataContainer.set(
|
||||
plugin.namespacedKeyFactory.create("shadowed_name"),
|
||||
PersistentDataType.STRING,
|
||||
displayName
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
itemStack.itemMeta = meta
|
||||
@@ -86,7 +91,6 @@ class ReforgesDisplay(private val plugin: ReforgesPlugin) : DisplayModule(plugin
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
val target = ReforgeTarget.getForItem(itemStack)
|
||||
|
||||
if (target == null && itemStack.type != Material.PLAYER_HEAD) {
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.willfp.reforges.paper
|
||||
|
||||
import net.kyori.adventure.text.Component
|
||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer
|
||||
|
||||
private val serializer = LegacyComponentSerializer.builder()
|
||||
.hexColors()
|
||||
.useUnusualXRepeatedCharacterHexFormat()
|
||||
.character('§')
|
||||
.build()
|
||||
|
||||
fun String.toComponent(): Component {
|
||||
return serializer.deserialize(this)
|
||||
}
|
||||
|
||||
fun Component.toBukkit(): String {
|
||||
return serializer.serialize(this)
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
package com.willfp.reforges.paper
|
||||
|
||||
import org.bukkit.inventory.ItemStack
|
||||
|
||||
interface PaperHandler {
|
||||
fun getDisplayName(itemStack: ItemStack): String
|
||||
}
|
||||
@@ -1,303 +0,0 @@
|
||||
package com.willfp.reforges.reforges.util;
|
||||
|
||||
import com.willfp.eco.core.EcoPlugin;
|
||||
import com.willfp.eco.core.PluginDependent;
|
||||
import com.willfp.eco.core.config.interfaces.JSONConfig;
|
||||
import com.willfp.eco.core.events.EntityDeathByEntityEvent;
|
||||
import com.willfp.eco.core.events.PlayerJumpEvent;
|
||||
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.reforges.Reforge;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.AbstractArrow;
|
||||
import org.bukkit.entity.Arrow;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Projectile;
|
||||
import org.bukkit.entity.Trident;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||
import org.bukkit.event.entity.EntityDamageEvent;
|
||||
import org.bukkit.event.entity.EntityShootBowEvent;
|
||||
import org.bukkit.event.entity.ProjectileHitEvent;
|
||||
import org.bukkit.event.entity.ProjectileLaunchEvent;
|
||||
import org.bukkit.inventory.EntityEquipment;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class WatcherTriggers extends PluginDependent<EcoPlugin> implements Listener {
|
||||
/**
|
||||
* Create new listener for watcher events.
|
||||
*
|
||||
* @param plugin The plugin to link the events to.
|
||||
*/
|
||||
public WatcherTriggers(@NotNull final EcoPlugin plugin) {
|
||||
super(plugin);
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when an entity launches a projectile.
|
||||
*
|
||||
* @param event The event to listen for.
|
||||
*/
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onProjectileLaunch(@NotNull final ProjectileLaunchEvent event) {
|
||||
if (McmmoManager.isFake(event)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(event.getEntity() instanceof AbstractArrow)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(event.getEntity().getShooter() instanceof Player)) {
|
||||
return;
|
||||
}
|
||||
|
||||
LivingEntity shooter = (LivingEntity) event.getEntity().getShooter();
|
||||
|
||||
Projectile projectile = event.getEntity();
|
||||
|
||||
if (shooter.getEquipment() == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
ItemStack item = shooter.getEquipment().getItemInMainHand();
|
||||
|
||||
if (projectile instanceof Trident trident) {
|
||||
item = trident.getItem();
|
||||
}
|
||||
|
||||
Reforge reforge = ReforgeUtils.getReforge(item);
|
||||
|
||||
if (reforge == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (Map.Entry<Effect, JSONConfig> entry : reforge.getEffects().entrySet()) {
|
||||
if (NumberUtils.randFloat(0, 100) > (entry.getValue().has("chance") ? entry.getValue().getDouble("chance") : 100)) {
|
||||
continue;
|
||||
}
|
||||
entry.getKey().onProjectileLaunch(shooter, projectile, event, entry.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when an entity takes fall damage.
|
||||
*
|
||||
* @param event The event to listen for.
|
||||
*/
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onFallDamage(@NotNull final EntityDamageEvent event) {
|
||||
if (McmmoManager.isFake(event)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!event.getCause().equals(EntityDamageEvent.DamageCause.FALL)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(event.getEntity() instanceof LivingEntity victim)) {
|
||||
return;
|
||||
}
|
||||
|
||||
EntityEquipment entityEquipment = victim.getEquipment();
|
||||
|
||||
if (entityEquipment == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (ItemStack itemStack : entityEquipment.getArmorContents()) {
|
||||
if (itemStack == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
Reforge reforge = ReforgeUtils.getReforge(itemStack);
|
||||
|
||||
if (reforge == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
for (Map.Entry<Effect, JSONConfig> entry : reforge.getEffects().entrySet()) {
|
||||
if (NumberUtils.randFloat(0, 100) > (entry.getValue().has("chance") ? entry.getValue().getDouble("chance") : 100)) {
|
||||
continue;
|
||||
}
|
||||
entry.getKey().onFallDamage(victim, event, entry.getValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when an arrow hits a block or entity.
|
||||
*
|
||||
* @param event The event to listen for.
|
||||
*/
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onArrowHit(@NotNull final ProjectileHitEvent event) {
|
||||
if (McmmoManager.isFake(event)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(event.getEntity().getShooter() instanceof LivingEntity shooter)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(event.getEntity() instanceof Arrow arrow)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.getEntity().getShooter() == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
ItemStack bow = ArrowUtils.getBow(arrow);
|
||||
|
||||
if (bow == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Reforge reforge = ReforgeUtils.getReforge(bow);
|
||||
|
||||
if (reforge == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
for (Map.Entry<Effect, JSONConfig> entry : reforge.getEffects().entrySet()) {
|
||||
if (NumberUtils.randFloat(0, 100) > (entry.getValue().has("chance") ? entry.getValue().getDouble("chance") : 100)) {
|
||||
continue;
|
||||
}
|
||||
entry.getKey().onArrowHit(shooter, event, entry.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when a trident hits a block or entity.
|
||||
*
|
||||
* @param event The event to listen for.
|
||||
*/
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onTridentHit(@NotNull final ProjectileHitEvent event) {
|
||||
if (McmmoManager.isFake(event)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(event.getEntity().getShooter() instanceof LivingEntity shooter)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.getEntity().getShooter() == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(event.getEntity() instanceof Trident trident)) {
|
||||
return;
|
||||
}
|
||||
|
||||
ItemStack item = trident.getItem();
|
||||
|
||||
Reforge reforge = ReforgeUtils.getReforge(item);
|
||||
|
||||
if (reforge == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (Map.Entry<Effect, JSONConfig> entry : reforge.getEffects().entrySet()) {
|
||||
if (NumberUtils.randFloat(0, 100) > (entry.getValue().has("chance") ? entry.getValue().getDouble("chance") : 100)) {
|
||||
continue;
|
||||
}
|
||||
entry.getKey().onTridentHit(shooter, event, entry.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when an entity takes damage wearing armor.
|
||||
*
|
||||
* @param event The event to listen for.
|
||||
*/
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onDamageWearingArmor(@NotNull final EntityDamageEvent event) {
|
||||
if (McmmoManager.isFake(event)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(event.getEntity() instanceof LivingEntity victim)) {
|
||||
return;
|
||||
}
|
||||
|
||||
EntityEquipment entityEquipment = victim.getEquipment();
|
||||
|
||||
if (entityEquipment == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (ItemStack itemStack : entityEquipment.getArmorContents()) {
|
||||
if (itemStack == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
Reforge reforge = ReforgeUtils.getReforge(itemStack);
|
||||
|
||||
if (reforge == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
for (Map.Entry<Effect, JSONConfig> entry : reforge.getEffects().entrySet()) {
|
||||
if (NumberUtils.randFloat(0, 100) > (entry.getValue().has("chance") ? entry.getValue().getDouble("chance") : 100)) {
|
||||
continue;
|
||||
}
|
||||
entry.getKey().onDamageWearingArmor(victim, event, entry.getValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when an entity throws a trident.
|
||||
*
|
||||
* @param event The event to listen for.
|
||||
*/
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onTridentLaunch(@NotNull final ProjectileLaunchEvent event) {
|
||||
if (McmmoManager.isFake(event)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(event.getEntity() instanceof Trident trident)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(event.getEntity().getShooter() instanceof LivingEntity)) {
|
||||
return;
|
||||
}
|
||||
|
||||
LivingEntity shooter = (LivingEntity) trident.getShooter();
|
||||
ItemStack item = trident.getItem();
|
||||
|
||||
if (shooter == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Reforge reforge = ReforgeUtils.getReforge(item);
|
||||
|
||||
if (reforge == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (Map.Entry<Effect, JSONConfig> entry : reforge.getEffects().entrySet()) {
|
||||
if (NumberUtils.randFloat(0, 100) > (entry.getValue().has("chance") ? entry.getValue().getDouble("chance") : 100)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
entry.getKey().onTridentLaunch(shooter, trident, event, entry.getValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -13,7 +13,8 @@ import org.bukkit.event.Listener
|
||||
import org.bukkit.event.block.BlockBreakEvent
|
||||
import org.bukkit.event.entity.EntityDamageByEntityEvent
|
||||
import org.bukkit.event.entity.EntityDamageEvent
|
||||
import org.bukkit.event.entity.EntityShootBowEvent
|
||||
import org.bukkit.event.entity.ProjectileHitEvent
|
||||
import org.bukkit.event.entity.ProjectileLaunchEvent
|
||||
|
||||
class WatcherTriggers(
|
||||
private val plugin: EcoPlugin
|
||||
@@ -228,28 +229,117 @@ class WatcherTriggers(
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
fun onBowShoot(event: EntityShootBowEvent) {
|
||||
fun onProjectileLaunch(event: ProjectileLaunchEvent) {
|
||||
if (McmmoManager.isFake(event)) {
|
||||
return
|
||||
}
|
||||
if (event.projectile.type != EntityType.ARROW) {
|
||||
|
||||
val shooter = event.entity.shooter
|
||||
|
||||
if (shooter !is LivingEntity) {
|
||||
return
|
||||
}
|
||||
|
||||
val shooter = event.entity
|
||||
val equipment = shooter.equipment ?: return
|
||||
|
||||
val arrow = event.projectile as Arrow
|
||||
var item = equipment.itemInMainHand
|
||||
|
||||
val bow = ArrowUtils.getBow(arrow) ?: return
|
||||
if (event.entity is Trident) {
|
||||
item = (event.entity as Trident).item
|
||||
}
|
||||
|
||||
val reforge = ReforgeUtils.getReforge(bow) ?: return
|
||||
val reforge = ReforgeUtils.getReforge(item) ?: return
|
||||
|
||||
for ((effect, config) in reforge.effects) {
|
||||
if (NumberUtils.randFloat(0.0, 100.0) > config.getDoubleOrNull("chance") ?: 100.0) {
|
||||
continue
|
||||
}
|
||||
effect.onBowShoot(shooter, arrow, event, config)
|
||||
effect.onProjectileLaunch(shooter, event.entity, event, config)
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
fun onFallDamage(event: EntityDamageEvent) {
|
||||
if (McmmoManager.isFake(event)) {
|
||||
return
|
||||
}
|
||||
|
||||
if (event.cause != EntityDamageEvent.DamageCause.FALL) {
|
||||
return
|
||||
}
|
||||
|
||||
val victim = event.entity
|
||||
|
||||
if (victim !is LivingEntity) {
|
||||
return
|
||||
}
|
||||
|
||||
val equipment = victim.equipment ?: return
|
||||
|
||||
for (itemStack in equipment.armorContents) {
|
||||
val reforge = ReforgeUtils.getReforge(itemStack) ?: continue
|
||||
|
||||
for ((effect, config) in reforge.effects) {
|
||||
if (NumberUtils.randFloat(0.0, 100.0) > config.getDoubleOrNull("chance") ?: 100.0) {
|
||||
continue
|
||||
}
|
||||
effect.onFallDamage(victim, event, config)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
fun onProjectileHit(event: ProjectileHitEvent) {
|
||||
if (McmmoManager.isFake(event)) {
|
||||
return
|
||||
}
|
||||
|
||||
val projectile = event.entity
|
||||
val shooter = projectile.shooter
|
||||
|
||||
if (shooter !is LivingEntity) {
|
||||
return
|
||||
}
|
||||
|
||||
val item = when (projectile) {
|
||||
is Arrow -> ArrowUtils.getBow(projectile)
|
||||
is Trident -> projectile.item
|
||||
else -> null
|
||||
} ?: return
|
||||
|
||||
val reforge = ReforgeUtils.getReforge(item) ?: return
|
||||
|
||||
for ((effect, config) in reforge.effects) {
|
||||
if (NumberUtils.randFloat(0.0, 100.0) > config.getDoubleOrNull("chance") ?: 100.0) {
|
||||
continue
|
||||
}
|
||||
effect.onProjectileHit(shooter, event, config)
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
fun onDamageWearingArmor(event: EntityDamageEvent) {
|
||||
if (McmmoManager.isFake(event)) {
|
||||
return
|
||||
}
|
||||
|
||||
val victim = event.entity
|
||||
|
||||
if (victim !is LivingEntity) {
|
||||
return
|
||||
}
|
||||
|
||||
val equipment = victim.equipment ?: return
|
||||
|
||||
for (itemStack in equipment.armorContents) {
|
||||
val reforge = ReforgeUtils.getReforge(itemStack) ?: continue
|
||||
|
||||
for ((effect, config) in reforge.effects) {
|
||||
if (NumberUtils.randFloat(0.0, 100.0) > config.getDoubleOrNull("chance") ?: 100.0) {
|
||||
continue
|
||||
}
|
||||
effect.onDamageWearingArmor(victim, event, config)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,4 +3,3 @@ rootProject.name = 'Reforges'
|
||||
// Core
|
||||
include ':eco-core'
|
||||
include ':eco-core:core-plugin'
|
||||
include ':eco-core:core-paper'
|
||||
Reference in New Issue
Block a user