mirror of
https://github.com/Auxilor/Reforges.git
synced 2025-12-30 20:39:13 +00:00
Continued moving WatcherTriggers to kotlin
This commit is contained in:
@@ -43,238 +43,6 @@ public class WatcherTriggers extends PluginDependent<EcoPlugin> implements Liste
|
||||
super(plugin);
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when an entity shoots another entity with an arrow.
|
||||
*
|
||||
* @param event The event to listen for.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Called when an entity damages another entity with a trident throw.
|
||||
*
|
||||
* @param event The event to listen for.
|
||||
*/
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onTridentDamage(@NotNull final EntityDamageByEntityEvent event) {
|
||||
if (McmmoManager.isFake(event)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(event.getDamager() instanceof Trident trident)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(((Trident) event.getDamager()).getShooter() instanceof LivingEntity attacker)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (((Trident) event.getDamager()).getShooter() == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(event.getEntity() instanceof LivingEntity victim)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.isCancelled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
ItemStack item = trident.getItem();
|
||||
|
||||
if (attacker instanceof Player && !AntigriefManager.canInjure((Player) attacker, victim)) {
|
||||
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().onTridentDamage(attacker, victim, trident, event, entry.getValue());
|
||||
entry.getKey().onAnyDamage(attacker, victim, event, entry.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when a player jumps.
|
||||
*
|
||||
* @param event The event to listen for.
|
||||
*/
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onJump(@NotNull final PlayerJumpEvent event) {
|
||||
if (McmmoManager.isFake(event)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
for (ItemStack itemStack : player.getInventory().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().onJump(player, event, entry.getValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when an entity attacks another entity with a melee attack.
|
||||
*
|
||||
* @param event The event to listen for.
|
||||
*/
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onMeleeAttack(@NotNull final EntityDamageByEntityEvent event) {
|
||||
if (McmmoManager.isFake(event)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(event.getDamager() instanceof LivingEntity attacker)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(event.getEntity() instanceof LivingEntity victim)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.isCancelled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.getCause() == EntityDamageEvent.DamageCause.THORNS) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (attacker instanceof Player && !AntigriefManager.canInjure((Player) attacker, victim)) {
|
||||
return;
|
||||
}
|
||||
|
||||
EntityEquipment entityEquipment = attacker.getEquipment();
|
||||
|
||||
if (entityEquipment == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Reforge reforge = ReforgeUtils.getReforge(entityEquipment.getItemInMainHand());
|
||||
|
||||
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().onMeleeAttack(attacker, victim, event, entry.getValue());
|
||||
entry.getKey().onAnyDamage(attacker, victim, event, entry.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when an entity kills another entity.
|
||||
*
|
||||
* @param event The event to listen for.
|
||||
*/
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onKill(@NotNull final EntityDeathByEntityEvent event) {
|
||||
if (McmmoManager.isFake(event)) {
|
||||
return;
|
||||
}
|
||||
|
||||
LivingEntity killer = null;
|
||||
Entity uncast = event.getKiller();
|
||||
if (uncast instanceof LivingEntity) {
|
||||
killer = (LivingEntity) uncast;
|
||||
} else if (uncast instanceof Projectile projectile) {
|
||||
if (projectile.getShooter() instanceof LivingEntity) {
|
||||
killer = (Player) projectile.getShooter();
|
||||
}
|
||||
}
|
||||
|
||||
if (killer == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
LivingEntity victim = event.getVictim();
|
||||
|
||||
if (killer instanceof Player && !AntigriefManager.canInjure((Player) killer, victim)) {
|
||||
return;
|
||||
}
|
||||
|
||||
EntityEquipment entityEquipment = killer.getEquipment();
|
||||
|
||||
if (entityEquipment == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Reforge reforge = ReforgeUtils.getReforge(entityEquipment.getItemInMainHand());
|
||||
|
||||
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().onKill(killer, victim, event, entry.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when an entity shoots a bow.
|
||||
*
|
||||
* @param event The event to listen for.
|
||||
*/
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
public void onBowShoot(@NotNull final EntityShootBowEvent event) {
|
||||
if (McmmoManager.isFake(event)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.getProjectile().getType() != EntityType.ARROW) {
|
||||
return;
|
||||
}
|
||||
|
||||
LivingEntity shooter = event.getEntity();
|
||||
Arrow arrow = (Arrow) event.getProjectile();
|
||||
|
||||
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().onBowShoot(shooter, arrow, event, entry.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when an entity launches a projectile.
|
||||
*
|
||||
|
||||
@@ -1,17 +1,19 @@
|
||||
package com.willfp.reforges.reforges.util
|
||||
|
||||
import com.willfp.eco.core.EcoPlugin
|
||||
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 org.bukkit.entity.Arrow
|
||||
import org.bukkit.entity.LivingEntity
|
||||
import org.bukkit.entity.Player
|
||||
import org.bukkit.entity.*
|
||||
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
|
||||
|
||||
class WatcherTriggers(
|
||||
private val plugin: EcoPlugin
|
||||
@@ -81,4 +83,173 @@ class WatcherTriggers(
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
fun onTridentDamage(event: EntityDamageByEntityEvent) {
|
||||
if (McmmoManager.isFake(event)) {
|
||||
return
|
||||
}
|
||||
|
||||
val trident = event.damager
|
||||
val victim = event.entity
|
||||
|
||||
if (trident !is Trident) {
|
||||
return
|
||||
}
|
||||
|
||||
if (victim !is LivingEntity) {
|
||||
return
|
||||
}
|
||||
|
||||
val shooter = trident.shooter
|
||||
|
||||
if (shooter !is LivingEntity) {
|
||||
return
|
||||
}
|
||||
|
||||
val item = trident.item
|
||||
|
||||
if (shooter is Player && !AntigriefManager.canInjure(shooter, victim)) {
|
||||
return
|
||||
}
|
||||
|
||||
if (event.isCancelled) {
|
||||
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.onTridentDamage(shooter, victim, trident, event, config)
|
||||
effect.onAnyDamage(shooter, victim, event, config)
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
fun onJump(event: PlayerJumpEvent) {
|
||||
if (McmmoManager.isFake(event)) {
|
||||
return
|
||||
}
|
||||
val player = event.player
|
||||
for (itemStack in player.inventory.armorContents) {
|
||||
if (itemStack == null) {
|
||||
continue
|
||||
}
|
||||
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.onJump(player, event, config)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
fun onMeleeAttack(event: EntityDamageByEntityEvent) {
|
||||
if (McmmoManager.isFake(event)) {
|
||||
return
|
||||
}
|
||||
|
||||
val attacker = event.damager
|
||||
|
||||
if (attacker !is LivingEntity) {
|
||||
return
|
||||
}
|
||||
|
||||
val victim = event.entity
|
||||
|
||||
if (victim !is LivingEntity) {
|
||||
return
|
||||
}
|
||||
|
||||
if (event.isCancelled) {
|
||||
return
|
||||
}
|
||||
|
||||
if (event.cause == EntityDamageEvent.DamageCause.THORNS) {
|
||||
return
|
||||
}
|
||||
|
||||
if (attacker is Player && !AntigriefManager.canInjure(attacker, victim)) {
|
||||
return
|
||||
}
|
||||
|
||||
val equipment = attacker.equipment ?: return
|
||||
|
||||
val reforge = ReforgeUtils.getReforge(equipment.itemInMainHand) ?: return
|
||||
|
||||
for ((effect, config) in reforge.effects) {
|
||||
if (NumberUtils.randFloat(0.0, 100.0) > config.getDoubleOrNull("chance") ?: 100.0) {
|
||||
continue
|
||||
}
|
||||
effect.onMeleeAttack(attacker, victim, event, config)
|
||||
effect.onAnyDamage(attacker, victim, event, config)
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
fun onKill(event: EntityDeathByEntityEvent) {
|
||||
if (McmmoManager.isFake(event)) {
|
||||
return
|
||||
}
|
||||
|
||||
var killer: Any? = null
|
||||
if (event.killer is LivingEntity) {
|
||||
killer = event.killer
|
||||
} else if (event.killer is Projectile) {
|
||||
if ((event.killer as Projectile).shooter is LivingEntity) {
|
||||
killer = (event.killer as Projectile).shooter
|
||||
}
|
||||
}
|
||||
|
||||
if (killer !is LivingEntity) {
|
||||
return
|
||||
}
|
||||
|
||||
val victim = event.victim
|
||||
|
||||
if (killer is Player && !AntigriefManager.canInjure(killer, victim)) {
|
||||
return
|
||||
}
|
||||
|
||||
val equipment = killer.equipment ?: return
|
||||
|
||||
val reforge = ReforgeUtils.getReforge(equipment.itemInMainHand) ?: return
|
||||
|
||||
for ((effect, config) in reforge.effects) {
|
||||
if (NumberUtils.randFloat(0.0, 100.0) > config.getDoubleOrNull("chance") ?: 100.0) {
|
||||
continue
|
||||
}
|
||||
effect.onKill(killer, victim, event, config)
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(ignoreCancelled = true)
|
||||
fun onBowShoot(event: EntityShootBowEvent) {
|
||||
if (McmmoManager.isFake(event)) {
|
||||
return
|
||||
}
|
||||
if (event.projectile.type != EntityType.ARROW) {
|
||||
return
|
||||
}
|
||||
|
||||
val shooter = event.entity
|
||||
|
||||
val arrow = event.projectile as Arrow
|
||||
|
||||
val bow = ArrowUtils.getBow(arrow) ?: return
|
||||
|
||||
val reforge = ReforgeUtils.getReforge(bow) ?: 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)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user