Hack in opponent info, seems to work

This commit is contained in:
Adam
2016-04-17 15:14:37 -04:00
parent 7f7ac1c6e2
commit f0aa055ec5
10 changed files with 272 additions and 9 deletions

55
pom.xml
View File

@@ -10,6 +10,10 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<slf4j.version>1.7.12</slf4j.version>
<aether.version>1.1.0</aether.version>
<maven.version>3.1.0</maven.version>
</properties>
<distributionManagement>
@@ -21,13 +25,54 @@
<dependencies>
<dependency>
<groupId>net.runelite.rs</groupId>
<artifactId>api</artifactId>
<version>1.0.0-SNAPSHOT</version>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>net.runelite</groupId>
<artifactId>launcher</artifactId>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.aether</groupId>
<artifactId>aether-api</artifactId>
<version>${aether.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.aether</groupId>
<artifactId>aether-impl</artifactId>
<version>${aether.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.aether</groupId>
<artifactId>aether-connector-basic</artifactId>
<version>${aether.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.aether</groupId>
<artifactId>aether-transport-http</artifactId>
<version>${aether.version}</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-aether-provider</artifactId>
<version>${maven.version}</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>net.sf.jopt-simple</groupId>
<artifactId>jopt-simple</artifactId>
<version>5.0.1</version>
</dependency>
<dependency>
<groupId>net.runelite.rs</groupId>
<artifactId>api</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>

View File

@@ -0,0 +1,118 @@
package net.runelite.client;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
import org.eclipse.aether.DefaultRepositorySystemSession;
import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.RepositorySystemSession;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.collection.CollectRequest;
import org.eclipse.aether.connector.basic.BasicRepositoryConnectorFactory;
import org.eclipse.aether.graph.Dependency;
import org.eclipse.aether.graph.DependencyFilter;
import org.eclipse.aether.impl.DefaultServiceLocator;
import org.eclipse.aether.repository.LocalRepository;
import org.eclipse.aether.repository.RemoteRepository;
import org.eclipse.aether.repository.RepositoryPolicy;
import org.eclipse.aether.resolution.ArtifactResult;
import org.eclipse.aether.resolution.DependencyRequest;
import org.eclipse.aether.resolution.DependencyResolutionException;
import org.eclipse.aether.spi.connector.RepositoryConnectorFactory;
import org.eclipse.aether.spi.connector.transport.TransporterFactory;
import org.eclipse.aether.transport.http.HttpTransporterFactory;
import org.eclipse.aether.util.artifact.JavaScopes;
import org.eclipse.aether.util.filter.DependencyFilterUtils;
public class ArtifactResolver
{
private final File repositoryCache;
private final List<RemoteRepository> repositories = new ArrayList<>();
public ArtifactResolver(File repositoryCache)
{
this.repositoryCache = repositoryCache;
}
public List<ArtifactResult> resolveArtifacts(Artifact artifact) throws DependencyResolutionException
{
RepositorySystem system = newRepositorySystem();
RepositorySystemSession session = newRepositorySystemSession(system);
DependencyFilter classpathFlter = DependencyFilterUtils.classpathFilter(JavaScopes.COMPILE);
CollectRequest collectRequest = new CollectRequest();
collectRequest.setRoot(new Dependency(artifact, JavaScopes.COMPILE));
collectRequest.setRepositories(repositories);
DependencyRequest dependencyRequest = new DependencyRequest(collectRequest, classpathFlter);
List<ArtifactResult> results = system.resolveDependencies(session, dependencyRequest).getArtifactResults();
validate(results);
return results;
}
public DefaultRepositorySystemSession newRepositorySystemSession(RepositorySystem system)
{
DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession();
LocalRepository localRepo = new LocalRepository(repositoryCache.getAbsolutePath());
session.setLocalRepositoryManager(system.newLocalRepositoryManager(session, localRepo));
session.setUpdatePolicy(RepositoryPolicy.UPDATE_POLICY_ALWAYS); // this causes a refetch of maven-metadata.xml, but not any binaries
//session.setTransferListener(new ConsoleTransferListener());
//session.setRepositoryListener(new ConsoleRepositoryListener());
return session;
}
public RepositorySystem newRepositorySystem()
{
DefaultServiceLocator locator = MavenRepositorySystemUtils.newServiceLocator();
locator.addService(RepositoryConnectorFactory.class, BasicRepositoryConnectorFactory.class);
locator.addService(TransporterFactory.class, HttpTransporterFactory.class);
locator.setErrorHandler(new DefaultServiceLocator.ErrorHandler()
{
@Override
public void serviceCreationFailed(Class<?> type, Class<?> impl, Throwable exception)
{
exception.printStackTrace();
}
});
return locator.getService(RepositorySystem.class);
}
public void addRepositories()
{
repositories.add(this.newCentralRepository());
repositories.add(this.newRuneliteRepository());
}
private RemoteRepository newCentralRepository()
{
return new RemoteRepository.Builder("central", "default", "http://central.maven.org/maven2/").build();
}
public RemoteRepository newRuneliteRepository()
{
return new RemoteRepository.Builder("runelite", "default", "http://repo.runelite.net/").build();
}
private void validate(List<ArtifactResult> artifacts)
{
for (ArtifactResult ar : artifacts)
{
Artifact a = ar.getArtifact();
if (!a.getGroupId().startsWith("net.runelite"))
continue;
if (!ar.getRepository().equals(newRuneliteRepository()))
throw new RuntimeException();
}
}
}

View File

@@ -11,8 +11,6 @@ import java.net.URL;
import java.net.URLClassLoader;
import java.net.URLConnection;
import java.util.List;
import net.runelite.launcher.ArtifactResolver;
import net.runelite.launcher.Launcher;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.artifact.DefaultArtifact;
import org.eclipse.aether.resolution.ArtifactResult;
@@ -28,7 +26,10 @@ public class ClientLoader
config.fetch();
ArtifactResolver resolver = new ArtifactResolver(Launcher.REPO_DIR);
// the only thing resolved here is the injected client, which has no dependencies, so no need to switch developer mode
ArtifactResolver resolver = new ArtifactResolver(RuneLite.REPO_DIR);
resolver.addRepositories();
List<ArtifactResult> results = resolver.resolveArtifacts(getClientArtifact());
File client = results.get(0).getArtifact().getFile();

View File

@@ -1,14 +1,27 @@
package net.runelite.client;
import java.io.File;
import joptsimple.OptionParser;
import joptsimple.OptionSet;
import net.runelite.api.Client;
import net.runelite.client.ui.ClientUI;
public class RuneLite
{
public static final File RUNELITE_DIR = new File(System.getProperty("user.home"), ".runelite");
public static final File REPO_DIR = new File(RUNELITE_DIR, "repository");
public static OptionSet options;
private ClientUI gui;
private static Client client;
public static void main(String[] args) throws Exception
{
OptionParser parser = new OptionParser();
parser.accepts("developer-mode");
options = parser.parse(args);
new RuneLite().start();
}
@@ -17,4 +30,14 @@ public class RuneLite
gui = new ClientUI();
gui.setVisible(true);
}
public static Client getClient()
{
return client;
}
public static void setClient(Client client)
{
RuneLite.client = client;
}
}

View File

@@ -0,0 +1,6 @@
package net.runelite.client.plugins;
public class Plugin
{
}

View File

@@ -0,0 +1,6 @@
package net.runelite.client.plugins;
public class PluginManager
{
}

View File

@@ -0,0 +1,32 @@
package net.runelite.client.plugins.opponentinfo;
import java.awt.Graphics;
import net.runelite.api.Actor;
import net.runelite.api.Client;
import net.runelite.api.Player;
import net.runelite.client.RuneLite;
import net.runelite.client.plugins.Plugin;
public class OpponentInfo extends Plugin
{
private Actor getOpponent()
{
Client client = RuneLite.getClient();
Player player = client.getLocalPlayer();
if (player == null)
return null;
return player.getInteracting();
}
public void draw(Graphics graphics)
{
Actor opponent = getOpponent();
if (opponent == null)
return;
graphics.drawString(opponent.getName() + " " + opponent.getHealth() + "/" + opponent.getMaxHealth(), 42, 42);
}
}

View File

@@ -6,7 +6,9 @@ import java.awt.Dimension;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import javax.swing.JPanel;
import net.runelite.api.Client;
import net.runelite.client.ClientLoader;
import net.runelite.client.RuneLite;
final class ClientPanel extends JPanel implements ComponentListener
{
@@ -29,6 +31,8 @@ final class ClientPanel extends JPanel implements ComponentListener
rs.init();
rs.start();
this.add(rs);
RuneLite.setClient(new Client((net.runelite.rs.api.Client) rs));
}
@Override

View File

@@ -29,7 +29,8 @@ public final class ClientUI extends JFrame implements ComponentListener
this.addComponentListener(this);
}
private void init() throws Exception {
private void init() throws Exception
{
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
addWindowListener(new WindowAdapter()

View File

@@ -0,0 +1,27 @@
package net.runelite.inject.callbacks;
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import net.runelite.client.plugins.opponentinfo.OpponentInfo;
public class RSCanvasCallback
{
private final BufferedImage clientBuffer = new BufferedImage(756, 503, BufferedImage.TYPE_INT_RGB);
private final BufferedImage gameBuffer = new BufferedImage(756, 503, BufferedImage.TYPE_INT_RGB);
public Graphics getGraphics(Canvas canvas, Graphics superGraphics)
{
Graphics clientGraphics = clientBuffer.getGraphics();
clientGraphics.drawImage(gameBuffer, 0, 0, null);
//clientGraphics.dispose();
//clientGraphics = clientBuffer.getGraphics();
//clientGraphics.drawString("something, something 2", 42, 42);
new OpponentInfo().draw(clientGraphics);
superGraphics.drawImage(clientBuffer, 0, 0, null);
return gameBuffer.getGraphics();
}
}