project: Mixins
This commit is contained in:
@@ -35,11 +35,12 @@ import org.objectweb.asm.Opcodes;
|
||||
public class CopyRuneLiteClasses extends AbstractInjector
|
||||
{
|
||||
private static final List<String> RUNELITE_OBJECTS = List.of(
|
||||
"RuneLiteObject",
|
||||
"RuneLiteClanMember",
|
||||
"RuneLiteIterableLinkDeque",
|
||||
"RuneLiteIterableNodeDeque",
|
||||
"RuneLiteIterableNodeHashTable",
|
||||
"RuneLiteMenuEntry"
|
||||
"RuneLiteMenuEntry",
|
||||
"RuneLiteObject"
|
||||
);
|
||||
|
||||
public CopyRuneLiteClasses(InjectData inject)
|
||||
|
||||
@@ -47,13 +47,11 @@ public abstract class RSClanSettingsMixin implements RSClanSettings
|
||||
public List<ClanMember> getMembers()
|
||||
{
|
||||
int memberCount = getMemberCount();
|
||||
String[] memberNames = getMemberNames();
|
||||
byte[] memberRanks = getMemberRanks();
|
||||
List<ClanMember> memberList = new ArrayList<>(memberCount);
|
||||
|
||||
for (int i = 0; i < memberCount; i++)
|
||||
{
|
||||
// memberList.add(new ClanMember(memberNames[i], client.getClanRankFromRs(memberRanks[i])));
|
||||
memberList.add((ClanMember) client.runeliteClanMember(this, i));
|
||||
}
|
||||
|
||||
return memberList;
|
||||
@@ -65,7 +63,6 @@ public abstract class RSClanSettingsMixin implements RSClanSettings
|
||||
{
|
||||
name = name.replace(" ", "\u00A0").toLowerCase();
|
||||
String[] memberNames = getMemberNames();
|
||||
byte[] memberRanks = getMemberRanks();
|
||||
int[] sorted = getSortedMembers();
|
||||
|
||||
int i = 0;
|
||||
@@ -82,7 +79,7 @@ public abstract class RSClanSettingsMixin implements RSClanSettings
|
||||
}
|
||||
else if (compare == 0)
|
||||
{
|
||||
// return new ClanMember(memberName, client.getClanRankFromRs(memberRanks[tag]));
|
||||
return (ClanMember) client.runeliteClanMember(this, memberIndex);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -39,8 +39,10 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import net.runelite.api.Actor;
|
||||
import net.runelite.api.Animation;
|
||||
import net.runelite.api.ChatMessageType;
|
||||
import net.runelite.api.Deque;
|
||||
import net.runelite.api.EnumComposition;
|
||||
import net.runelite.api.FriendContainer;
|
||||
import net.runelite.api.GameState;
|
||||
@@ -70,7 +72,6 @@ import net.runelite.api.Model;
|
||||
import net.runelite.api.NPC;
|
||||
import net.runelite.api.NPCComposition;
|
||||
import net.runelite.api.NameableContainer;
|
||||
import net.runelite.api.Node;
|
||||
import net.runelite.api.NodeCache;
|
||||
import net.runelite.api.ObjectComposition;
|
||||
import net.runelite.api.Perspective;
|
||||
@@ -158,6 +159,8 @@ import net.runelite.rs.api.RSNodeDeque;
|
||||
import net.runelite.rs.api.RSNodeHashTable;
|
||||
import net.runelite.rs.api.RSPacketBuffer;
|
||||
import net.runelite.rs.api.RSPlayer;
|
||||
import net.runelite.rs.api.RSProjectile;
|
||||
import net.runelite.rs.api.RSRuneLiteClanMember;
|
||||
import net.runelite.rs.api.RSRuneLiteMenuEntry;
|
||||
import net.runelite.rs.api.RSScene;
|
||||
import net.runelite.rs.api.RSScriptEvent;
|
||||
@@ -1046,34 +1049,36 @@ public abstract class RSClientMixin implements RSClient
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public List<Projectile> getProjectiles()
|
||||
public Projectile createProjectile(int id, int plane, int startX, int startY, int startZ, int startCycle, int endCycle, int slope, int startHeight, int endHeight, Actor target, int targetX, int targetY)
|
||||
{
|
||||
List<Projectile> projectiles = new ArrayList<Projectile>();
|
||||
RSNodeDeque projectileDeque = this.getProjectilesDeque();
|
||||
Node head = projectileDeque.getSentinel();
|
||||
|
||||
for (Node node = head.getNext(); node != head; node = node.getNext())
|
||||
int targetIndex = 0;
|
||||
if (target instanceof NPC)
|
||||
{
|
||||
projectiles.add((Projectile) node);
|
||||
targetIndex = ((NPC)target).getIndex() + 1;
|
||||
}
|
||||
else if (target instanceof Player)
|
||||
{
|
||||
targetIndex = -(((Player)target).getPlayerId() + 1);
|
||||
}
|
||||
|
||||
return projectiles;
|
||||
RSProjectile projectile = client.newProjectile(id, plane, startX, startY, startZ, startCycle, endCycle, slope, startHeight, targetIndex, endHeight);
|
||||
projectile.setDestination(targetX, targetY, Perspective.getTileHeight(client, new LocalPoint(targetX, targetY), client.getPlane()), startCycle + client.getGameCycle());
|
||||
|
||||
return projectile;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public List<GraphicsObject> getGraphicsObjects()
|
||||
public Deque<Projectile> getProjectiles()
|
||||
{
|
||||
List<GraphicsObject> graphicsObjects = new ArrayList<GraphicsObject>();
|
||||
RSNodeDeque graphicsObjectDeque = this.getGraphicsObjectDeque();
|
||||
Node head = graphicsObjectDeque.getSentinel();
|
||||
|
||||
for (Node node = head.getNext(); node != head; node = node.getNext())
|
||||
{
|
||||
graphicsObjects.add((GraphicsObject) node);
|
||||
return this.getProjectilesDeque();
|
||||
}
|
||||
|
||||
return graphicsObjects;
|
||||
@Inject
|
||||
@Override
|
||||
public Deque<GraphicsObject> getGraphicsObjects()
|
||||
{
|
||||
return this.getGraphicsObjectDeque();
|
||||
}
|
||||
|
||||
@Inject
|
||||
@@ -1448,6 +1453,12 @@ public abstract class RSClientMixin implements RSClient
|
||||
}
|
||||
}
|
||||
|
||||
@Inject
|
||||
public static RSRuneLiteClanMember runeLiteClanMember()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
@FieldHook("friendsChat")
|
||||
@Inject
|
||||
public static void clanMemberManagerChanged(int idx)
|
||||
|
||||
@@ -43,6 +43,12 @@ public abstract class RSProjectileMixin implements RSProjectile
|
||||
@Shadow("client")
|
||||
private static RSClient client;
|
||||
|
||||
@Inject
|
||||
private int targetX;
|
||||
|
||||
@Inject
|
||||
private int targetY;
|
||||
|
||||
@Inject
|
||||
RSProjectileMixin()
|
||||
{
|
||||
@@ -90,6 +96,13 @@ public abstract class RSProjectileMixin implements RSProjectile
|
||||
}
|
||||
}
|
||||
|
||||
@Inject
|
||||
@Override
|
||||
public LocalPoint getTarget()
|
||||
{
|
||||
return new LocalPoint(this.targetX, this.targetY);
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when a projectile is set to move towards a point. For
|
||||
* projectiles that target the ground, like AoE projectiles from
|
||||
@@ -104,6 +117,8 @@ public abstract class RSProjectileMixin implements RSProjectile
|
||||
@MethodHook("setDestination")
|
||||
public void projectileMoved(int targetX, int targetY, int targetZ, int cycle)
|
||||
{
|
||||
this.targetX = targetX;
|
||||
this.targetY = targetY;
|
||||
final LocalPoint position = new LocalPoint(targetX, targetY);
|
||||
final ProjectileMoved projectileMoved = new ProjectileMoved();
|
||||
projectileMoved.setProjectile(this);
|
||||
|
||||
@@ -98,6 +98,14 @@ public interface RSActor extends RSRenderable, Actor
|
||||
@Override
|
||||
void setGraphic(int id);
|
||||
|
||||
@Import("spotAnimationHeight")
|
||||
@Override
|
||||
int getGraphicHeight();
|
||||
|
||||
@Import("spotAnimationHeight")
|
||||
@Override
|
||||
void setGraphicHeight(int id);
|
||||
|
||||
@Import("spotAnimationFrame")
|
||||
int getSpotAnimFrame();
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@ import net.runelite.api.Deque;
|
||||
import net.runelite.api.SpritePixels;
|
||||
import net.runelite.api.World;
|
||||
import net.runelite.api.clan.ClanRank;
|
||||
import net.runelite.api.clan.ClanSettings;
|
||||
import net.runelite.api.widgets.Widget;
|
||||
import net.runelite.mapping.Construct;
|
||||
import net.runelite.mapping.Import;
|
||||
@@ -1562,4 +1563,10 @@ public interface RSClient extends RSGameEngine, Client
|
||||
|
||||
@Construct
|
||||
RSIterableNodeHashTable createIterableNodeHashTable(int size);
|
||||
|
||||
@Construct
|
||||
RSRuneLiteClanMember runeliteClanMember(ClanSettings var1, int var2);
|
||||
|
||||
@Construct
|
||||
RSProjectile newProjectile(int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, int var11);
|
||||
}
|
||||
|
||||
@@ -62,12 +62,16 @@ public interface RSProjectile extends RSRenderable, Projectile
|
||||
|
||||
@Import("cycleStart")
|
||||
@Override
|
||||
int getStartMovementCycle();
|
||||
int getStartCycle();
|
||||
|
||||
@Import("cycleEnd")
|
||||
@Override
|
||||
int getEndCycle();
|
||||
|
||||
@Import("cycleEnd")
|
||||
@Override
|
||||
void setEndCycle(int cycle);
|
||||
|
||||
@Import("slope")
|
||||
@Override
|
||||
int getSlope();
|
||||
@@ -103,4 +107,7 @@ public interface RSProjectile extends RSRenderable, Projectile
|
||||
@Import("speedZ")
|
||||
@Override
|
||||
double getVelocityZ();
|
||||
|
||||
@Import("setDestination")
|
||||
void setDestination(int targetX, int targetY, int targetZ, int cycle);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
package net.runelite.rs.api;
|
||||
|
||||
import net.runelite.api.MenuEntry;
|
||||
import net.runelite.api.clan.ClanRank;
|
||||
|
||||
public interface RSRuneLiteClanMember extends MenuEntry
|
||||
{
|
||||
ClanRank getRank();
|
||||
|
||||
String getName();
|
||||
}
|
||||
@@ -233,7 +233,8 @@ public abstract class Actor extends Renderable {
|
||||
@ObfuscatedGetter(
|
||||
intValue = -2034554825
|
||||
)
|
||||
int field1131;
|
||||
@Export("spotAnimationHeight")
|
||||
int spotAnimationHeight;
|
||||
@ObfuscatedName("bo")
|
||||
@ObfuscatedGetter(
|
||||
intValue = -873586319
|
||||
|
||||
@@ -358,7 +358,7 @@ public class GrandExchangeOfferOwnWorldComparator implements Comparator {
|
||||
if ((var5 & 2) != 0) {
|
||||
var15.spotAnimation = var1.method7403();
|
||||
var6 = var1.method7412();
|
||||
var15.field1131 = var6 >> 16;
|
||||
var15.spotAnimationHeight = var6 >> 16;
|
||||
var15.field1130 = (var6 & 65535) + Client.cycle;
|
||||
var15.spotAnimationFrame = 0;
|
||||
var15.spotAnimationFrameCycle = 0;
|
||||
|
||||
@@ -118,7 +118,7 @@ public final class NPC extends Actor {
|
||||
if (super.spotAnimation != -1 && super.spotAnimationFrame != -1) {
|
||||
Model var4 = AccessFile.SpotAnimationDefinition_get(super.spotAnimation).getModel(super.spotAnimationFrame);
|
||||
if (var4 != null) {
|
||||
var4.offsetBy(0, -super.field1131, 0);
|
||||
var4.offsetBy(0, -super.spotAnimationHeight, 0);
|
||||
Model[] var5 = new Model[]{var3, var4};
|
||||
var3 = new Model(var5, 2);
|
||||
}
|
||||
|
||||
@@ -337,7 +337,7 @@ public final class Player extends Actor {
|
||||
if (!this.isUnanimated && super.spotAnimation != -1 && super.spotAnimationFrame != -1) {
|
||||
var4 = AccessFile.SpotAnimationDefinition_get(super.spotAnimation).getModel(super.spotAnimationFrame);
|
||||
if (var4 != null) {
|
||||
var4.offsetBy(0, -super.field1131, 0);
|
||||
var4.offsetBy(0, -super.spotAnimationHeight, 0);
|
||||
var5 = new Model[]{var3, var4};
|
||||
var3 = new Model(var5, 2);
|
||||
}
|
||||
|
||||
124
runescape-client/src/main/java/RuneLiteClanMember.java
Normal file
124
runescape-client/src/main/java/RuneLiteClanMember.java
Normal file
@@ -0,0 +1,124 @@
|
||||
import net.runelite.api.clan.ClanMember;
|
||||
import net.runelite.api.clan.ClanRank;
|
||||
|
||||
public class RuneLiteClanMember implements ClanMember
|
||||
{
|
||||
public final int idx;
|
||||
public final ClanSettings clanSettings;
|
||||
|
||||
public RuneLiteClanMember(ClanSettings clanSettings, int idx) {
|
||||
this.clanSettings = clanSettings;
|
||||
this.idx = idx;
|
||||
}
|
||||
|
||||
public ClanRank getRank() {
|
||||
return getClanRank(this.clanSettings.memberRanks[this.idx]);
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return this.clanSettings.memberNames[this.idx];
|
||||
}
|
||||
|
||||
public ClanRank getClanRank(int rank)
|
||||
{
|
||||
switch (rank)
|
||||
{
|
||||
case -1:
|
||||
return ClanRank.GUEST;
|
||||
case 10:
|
||||
return ClanRank.CLAN_RANK_2;
|
||||
case 20:
|
||||
return ClanRank.CLAN_RANK_3;
|
||||
case 30:
|
||||
return ClanRank.CLAN_RANK_4;
|
||||
case 40:
|
||||
return ClanRank.CLAN_RANK_5;
|
||||
case 50:
|
||||
return ClanRank.CLAN_RANK_6;
|
||||
case 60:
|
||||
return ClanRank.CLAN_RANK_7;
|
||||
case 70:
|
||||
return ClanRank.CLAN_RANK_8;
|
||||
case 80:
|
||||
return ClanRank.CLAN_RANK_9;
|
||||
case 90:
|
||||
return ClanRank.CLAN_RANK_10;
|
||||
case 100:
|
||||
return ClanRank.ADMINISTRATOR;
|
||||
case 105:
|
||||
return ClanRank.CLAN_RANK_11;
|
||||
case 110:
|
||||
return ClanRank.CLAN_RANK_12;
|
||||
case 115:
|
||||
return ClanRank.CLAN_RANK_13;
|
||||
case 120:
|
||||
return ClanRank.CLAN_RANK_14;
|
||||
case 125:
|
||||
return ClanRank.DEPUTY_OWNER;
|
||||
case 126:
|
||||
return ClanRank.OWNER;
|
||||
case 127:
|
||||
return ClanRank.JMOD;
|
||||
default:
|
||||
return ClanRank.CLAN_RANK_1;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean instanceOf(Object o) {
|
||||
return o instanceof RuneLiteClanMember;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (o == this) {
|
||||
return true;
|
||||
} else if (!(o instanceof RuneLiteClanMember)) {
|
||||
return false;
|
||||
} else {
|
||||
RuneLiteClanMember clanMember = (RuneLiteClanMember)o;
|
||||
if (!clanMember.instanceOf(this)) {
|
||||
return false;
|
||||
} else {
|
||||
String thisName = this.getName();
|
||||
String objName = clanMember.getName();
|
||||
|
||||
if (thisName == null) {
|
||||
if (objName != null) {
|
||||
return false;
|
||||
}
|
||||
} else if (!thisName.equals(objName)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
ClanRank thisRank = this.getRank();
|
||||
ClanRank objRank = clanMember.getRank();
|
||||
|
||||
if (thisRank == null) {
|
||||
if (objRank != null) {
|
||||
return false;
|
||||
}
|
||||
} else if (!thisRank.equals(objRank)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
byte b = 1;
|
||||
|
||||
String name = this.getName();
|
||||
int hash = b * 59 + (name == null ? 43 : name.hashCode());
|
||||
ClanRank rank = this.getRank();
|
||||
hash = hash * 59 + (rank == null ? 43 : rank.hashCode());
|
||||
|
||||
return hash;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return "ClanMemberImpl(getName=" + this.getName() + ", getRank=" + this.getRank() + ")";
|
||||
}
|
||||
}
|
||||
@@ -180,7 +180,7 @@ public class class65 {
|
||||
if ((var3 & 2048) != 0) {
|
||||
var2.spotAnimation = var0.method7499();
|
||||
var5 = var0.method7412();
|
||||
var2.field1131 = var5 >> 16;
|
||||
var2.spotAnimationHeight = var5 >> 16;
|
||||
var2.field1130 = (var5 & 65535) + Client.cycle;
|
||||
var2.spotAnimationFrame = 0;
|
||||
var2.spotAnimationFrameCycle = 0;
|
||||
|
||||
Reference in New Issue
Block a user