9
0
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:
Auxilor
2021-09-29 12:33:48 +01:00
parent 2b36619a8d
commit af56449145
2 changed files with 174 additions and 235 deletions

View File

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

View File

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