Fix EntityRegainHealthEvent called twice.

This commit is contained in:
IzzelAliz 2020-06-11 08:59:57 +08:00
parent eb065aa667
commit 58552371bf
4 changed files with 19 additions and 30 deletions

View File

@ -776,9 +776,11 @@ public abstract class LivingEntityMixin extends EntityMixin implements LivingEnt
@Redirect(method = "heal", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;setHealth(F)V"))
public void arclight$healEvent(LivingEntity livingEntity, float health) {
EntityRegainHealthEvent.RegainReason regainReason = arclight$regainReason == null ? EntityRegainHealthEvent.RegainReason.CUSTOM : arclight$regainReason;
arclight$regainReason = null;
float f = this.getHealth();
float amount = health - f;
EntityRegainHealthEvent event = new EntityRegainHealthEvent(this.getBukkitEntity(), amount, arclight$regainReason == null ? EntityRegainHealthEvent.RegainReason.CUSTOM : arclight$regainReason);
EntityRegainHealthEvent event = new EntityRegainHealthEvent(this.getBukkitEntity(), amount, regainReason);
if (this.valid) {
Bukkit.getPluginManager().callEvent(event);
}

View File

@ -9,7 +9,7 @@ public abstract class ArclightEventDispatcherRegistry {
MinecraftForge.EVENT_BUS.register(new BlockBreakEventDispatcher());
MinecraftForge.EVENT_BUS.register(new BlockPlaceEventDispatcher());
MinecraftForge.EVENT_BUS.register(new EntityPotionEffectEventDispatcher());
MinecraftForge.EVENT_BUS.register(new EntityRegainHealthEventDispatcher());
MinecraftForge.EVENT_BUS.register(new WorldEventDispatcher());
MinecraftForge.EVENT_BUS.register(new EntityEventDispatcher());
MinecraftForge.EVENT_BUS.register(new NetworkEventDispatcher());
MinecraftForge.EVENT_BUS.register(new EntityTeleportEventDispatcher());

View File

@ -1,28 +0,0 @@
package io.izzel.arclight.common.mod.server.event;
import io.izzel.arclight.common.bridge.entity.EntityBridge;
import io.izzel.arclight.common.bridge.world.WorldBridge;
import net.minecraftforge.event.entity.living.LivingHealEvent;
import net.minecraftforge.event.world.WorldEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import org.bukkit.Bukkit;
import org.bukkit.event.entity.EntityRegainHealthEvent;
import org.bukkit.event.world.WorldLoadEvent;
public class EntityRegainHealthEventDispatcher {
@SubscribeEvent(receiveCanceled = true)
public void onLivingHeal(LivingHealEvent event) {
EntityRegainHealthEvent bukkitEvent = ArclightEventFactory.callEntityRegainHealthEvent(((EntityBridge) event.getEntity()).bridge$getBukkitEntity(),
event.getAmount(), EntityRegainHealthEvent.RegainReason.CUSTOM);
event.setAmount((float) bukkitEvent.getAmount());
if (bukkitEvent.isCancelled()) {
event.setCanceled(true);
}
}
@SubscribeEvent
public void onWorldLoad(WorldEvent.Load event) {
Bukkit.getPluginManager().callEvent(new WorldLoadEvent(((WorldBridge) event.getWorld()).bridge$getWorld()));
}
}

View File

@ -0,0 +1,15 @@
package io.izzel.arclight.common.mod.server.event;
import io.izzel.arclight.common.bridge.world.WorldBridge;
import net.minecraftforge.event.world.WorldEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import org.bukkit.Bukkit;
import org.bukkit.event.world.WorldLoadEvent;
public class WorldEventDispatcher {
@SubscribeEvent
public void onWorldLoad(WorldEvent.Load event) {
Bukkit.getPluginManager().callEvent(new WorldLoadEvent(((WorldBridge) event.getWorld()).bridge$getWorld()));
}
}