project(mixins): Misc

This commit is contained in:
Owain van Brakel
2022-06-21 13:13:56 +02:00
parent 76109e3502
commit c6b74a216b
2 changed files with 45 additions and 19 deletions

View File

@@ -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;
@@ -230,7 +236,7 @@ public abstract class RSActorMixin implements RSActor
int size = 1; int size = 1;
if (this instanceof NPC) if (this instanceof NPC)
{ {
NPCComposition composition = ((NPC)this).getComposition(); NPCComposition composition = ((NPC) this).getComposition();
if (composition != null && composition.getConfigs() != null) if (composition != null && composition.getConfigs() != null)
{ {
composition = composition.transform(); composition = composition.transform();
@@ -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);
}
} }
/** /**
@@ -279,12 +304,12 @@ public abstract class RSActorMixin implements RSActor
* Note that this event runs even if the hitsplat didn't show up, * Note that this event runs even if the hitsplat didn't show up,
* i.e. the actor already had 4 visible hitsplats. * i.e. the actor already had 4 visible hitsplats.
* *
* @param type The hitsplat type (i.e. color) * @param type The hitsplat type (i.e. color)
* @param value The value of the hitsplat (i.e. how high the hit was) * @param value The value of the hitsplat (i.e. how high the hit was)
* @param var3 unknown * @param var3 unknown
* @param var4 unknown * @param var4 unknown
* @param gameCycle The gamecycle the hitsplat was applied on * @param gameCycle The gamecycle the hitsplat was applied on
* @param duration The amount of gamecycles the hitsplat will last for * @param duration The amount of gamecycles the hitsplat will last for
*/ */
@Inject @Inject
@MethodHook(value = "addHitSplat", end = true) @MethodHook(value = "addHitSplat", end = true)

View File

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