From b8aa20d35bfd668f11be69d984eb6e2f0b3c2785 Mon Sep 17 00:00:00 2001 From: bdew Date: Wed, 15 Jul 2020 09:15:12 +0300 Subject: [PATCH] add ability to reference local pack in overrides --- .../wurmonline/clientmods/serverpacks/ServerPacksMod.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/modules/mods/serverpacks/src/main/java/org/gotti/wurmonline/clientmods/serverpacks/ServerPacksMod.java b/modules/mods/serverpacks/src/main/java/org/gotti/wurmonline/clientmods/serverpacks/ServerPacksMod.java index 18e8c19..80dbb65 100644 --- a/modules/mods/serverpacks/src/main/java/org/gotti/wurmonline/clientmods/serverpacks/ServerPacksMod.java +++ b/modules/mods/serverpacks/src/main/java/org/gotti/wurmonline/clientmods/serverpacks/ServerPacksMod.java @@ -9,6 +9,7 @@ import java.io.UnsupportedEncodingException; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; +import java.lang.reflect.Modifier; import java.net.MalformedURLException; import java.net.URL; import java.net.URLDecoder; @@ -90,6 +91,8 @@ public void preInit() { ); ctResources.addMethod(findPackMethod); + ctPackResourceUrl.getDeclaredField("rawFilePath").setModifiers(Modifier.PUBLIC); + ctPack.getMethod("init", "(Lcom/wurmonline/client/resources/Resources;)V") .instrument(new ExprEditor() { @Override @@ -101,12 +104,12 @@ public void edit(MethodCall m) throws CannotCompileException { }); ctPack.getMethod("getResource", "(Ljava/lang/String;)Lcom/wurmonline/client/resources/ResourceUrl;") - .insertAfter("if ($_ != null && $_.getFilePath().startsWith(\"~\")) {" + + .insertAfter("if ($_ != null && ($_ instanceof com.wurmonline.client.resources.PackResourceUrl) && $_.getFilePath().startsWith(\"~\")) {" + " int sep = $_.getFilePath().indexOf('/');" + " com.wurmonline.client.resources.Pack pack = com.wurmonline.client.WurmClientBase.getResourceManager()" + " .findPack($_.getFilePath().substring(1,sep));" + " if (pack!=null)" + - " $_ = new com.wurmonline.client.resources.PackResourceUrl(pack, $_.getFilePath().substring(sep+1));" + + " $_ = new com.wurmonline.client.resources.PackResourceUrl(pack, ((com.wurmonline.client.resources.PackResourceUrl)$_).rawFilePath.substring(sep+1).replace(\"~[local]/\",\"~\"+this.name+\"/\"));" + " };"); ctPackResourceUrl.getMethod("derive", "(Ljava/lang/String;)Lcom/wurmonline/client/resources/PackResourceUrl;")