project(mixins): Misc
This commit is contained in:
@@ -24,6 +24,11 @@
|
|||||||
*/
|
*/
|
||||||
package net.runelite.mixins;
|
package net.runelite.mixins;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableSet;
|
||||||
|
import java.awt.Graphics2D;
|
||||||
|
import java.awt.Polygon;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.util.Set;
|
||||||
import net.runelite.api.Actor;
|
import net.runelite.api.Actor;
|
||||||
import net.runelite.api.Hitsplat;
|
import net.runelite.api.Hitsplat;
|
||||||
import net.runelite.api.NPC;
|
import net.runelite.api.NPC;
|
||||||
@@ -37,14 +42,11 @@ import net.runelite.api.coords.WorldArea;
|
|||||||
import net.runelite.api.coords.WorldPoint;
|
import net.runelite.api.coords.WorldPoint;
|
||||||
import net.runelite.api.events.ActorDeath;
|
import net.runelite.api.events.ActorDeath;
|
||||||
import net.runelite.api.events.AnimationChanged;
|
import net.runelite.api.events.AnimationChanged;
|
||||||
import net.runelite.api.events.HitsplatApplied;
|
|
||||||
import net.runelite.api.events.HealthBarUpdated;
|
|
||||||
import net.runelite.api.events.GraphicChanged;
|
import net.runelite.api.events.GraphicChanged;
|
||||||
|
import net.runelite.api.events.HealthBarUpdated;
|
||||||
|
import net.runelite.api.events.HitsplatApplied;
|
||||||
import net.runelite.api.events.InteractingChanged;
|
import net.runelite.api.events.InteractingChanged;
|
||||||
import net.runelite.api.events.OverheadTextChanged;
|
import net.runelite.api.events.OverheadTextChanged;
|
||||||
import java.awt.Graphics2D;
|
|
||||||
import java.awt.Polygon;
|
|
||||||
import java.awt.image.BufferedImage;
|
|
||||||
import net.runelite.api.mixins.FieldHook;
|
import net.runelite.api.mixins.FieldHook;
|
||||||
import net.runelite.api.mixins.Inject;
|
import net.runelite.api.mixins.Inject;
|
||||||
import net.runelite.api.mixins.MethodHook;
|
import net.runelite.api.mixins.MethodHook;
|
||||||
@@ -56,6 +58,7 @@ import net.runelite.rs.api.RSHealthBar;
|
|||||||
import net.runelite.rs.api.RSHealthBarDefinition;
|
import net.runelite.rs.api.RSHealthBarDefinition;
|
||||||
import net.runelite.rs.api.RSHealthBarUpdate;
|
import net.runelite.rs.api.RSHealthBarUpdate;
|
||||||
import net.runelite.rs.api.RSIterableNodeDeque;
|
import net.runelite.rs.api.RSIterableNodeDeque;
|
||||||
|
import net.runelite.rs.api.RSNPC;
|
||||||
import net.runelite.rs.api.RSNode;
|
import net.runelite.rs.api.RSNode;
|
||||||
|
|
||||||
@Mixin(RSActor.class)
|
@Mixin(RSActor.class)
|
||||||
@@ -64,6 +67,9 @@ public abstract class RSActorMixin implements RSActor
|
|||||||
@Shadow("client")
|
@Shadow("client")
|
||||||
private static RSClient client;
|
private static RSClient client;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private final Set<Integer> combatInfoFilter = ImmutableSet.of(0, 2, 16, 17, 18, 19, 20, 21, 22);
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private boolean dead;
|
private boolean dead;
|
||||||
|
|
||||||
@@ -262,16 +268,35 @@ public abstract class RSActorMixin implements RSActor
|
|||||||
@MethodHook("addHealthBar")
|
@MethodHook("addHealthBar")
|
||||||
public void setCombatInfo(int combatInfoId, int gameCycle, int var3, int var4, int healthRatio, int health)
|
public void setCombatInfo(int combatInfoId, int gameCycle, int var3, int var4, int healthRatio, int health)
|
||||||
{
|
{
|
||||||
if (healthRatio == 0)
|
|
||||||
{
|
|
||||||
final ActorDeath event = new ActorDeath(this);
|
|
||||||
client.getCallbacks().post(event);
|
|
||||||
|
|
||||||
this.setDead(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
final HealthBarUpdated event = new HealthBarUpdated(this, healthRatio);
|
final HealthBarUpdated event = new HealthBarUpdated(this, healthRatio);
|
||||||
client.getCallbacks().post(event);
|
client.getCallbacks().post(event);
|
||||||
|
|
||||||
|
if (healthRatio == 0)
|
||||||
|
{
|
||||||
|
if (!isDead())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!combatInfoFilter.contains(combatInfoId))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
setDead(true);
|
||||||
|
|
||||||
|
final ActorDeath actorDeath = new ActorDeath(this);
|
||||||
|
client.getCallbacks().post(actorDeath);
|
||||||
|
}
|
||||||
|
else if (healthRatio > 0)
|
||||||
|
{
|
||||||
|
if (this instanceof RSNPC && ((RSNPC) this).getId() == 319 && isDead())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
setDead(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -131,6 +131,7 @@ public abstract class RSNPCMixin implements RSNPC
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setDead(false);
|
||||||
client.getCallbacks().postDeferred(new NpcChanged(this, oldComposition));
|
client.getCallbacks().postDeferred(new NpcChanged(this, oldComposition));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user