Skip to content

Commit 23f8d40

Browse files
authored
Merge pull request #46 from SpigotMC/master
[pull] master from SpigotMC:master
2 parents e78bafb + e9558ab commit 23f8d40

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

api/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,12 @@
8080
<!-- not part of the API proper -->
8181
<scope>provided</scope>
8282
</dependency>
83+
<dependency>
84+
<groupId>org.ow2.asm</groupId>
85+
<artifactId>asm-commons</artifactId>
86+
<version>9.8</version>
87+
<scope>compile</scope>
88+
</dependency>
8389
<dependency>
8490
<groupId>org.yaml</groupId>
8591
<artifactId>snakeyaml</artifactId>

api/src/main/java/net/md_5/bungee/api/plugin/PluginClassloader.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package net.md_5.bungee.api.plugin;
22

33
import com.google.common.base.Preconditions;
4+
import com.google.common.collect.ImmutableMap;
45
import com.google.common.io.ByteStreams;
56
import java.io.File;
67
import java.io.IOException;
@@ -9,13 +10,20 @@
910
import java.net.URLClassLoader;
1011
import java.security.CodeSigner;
1112
import java.security.CodeSource;
13+
import java.util.Map;
1214
import java.util.Set;
1315
import java.util.concurrent.CopyOnWriteArraySet;
1416
import java.util.jar.JarEntry;
1517
import java.util.jar.JarFile;
1618
import java.util.jar.Manifest;
19+
import java.util.logging.Level;
20+
import java.util.logging.Logger;
1721
import lombok.ToString;
1822
import net.md_5.bungee.api.ProxyServer;
23+
import org.objectweb.asm.ClassReader;
24+
import org.objectweb.asm.ClassWriter;
25+
import org.objectweb.asm.commons.ClassRemapper;
26+
import org.objectweb.asm.commons.SimpleRemapper;
1927

2028
@ToString(of = "desc")
2129
final class PluginClassloader extends URLClassLoader
@@ -121,6 +129,15 @@ protected Class<?> findClass(String name) throws ClassNotFoundException
121129
throw new ClassNotFoundException( name, ex );
122130
}
123131

132+
try
133+
{
134+
classBytes = remap( classBytes );
135+
} catch ( Exception ex )
136+
{
137+
Logger logger = ( plugin != null ) ? plugin.getLogger() : proxy.getLogger();
138+
logger.log( Level.SEVERE, "Error trying to remap class " + path, ex );
139+
}
140+
124141
int dot = name.lastIndexOf( '.' );
125142
if ( dot != -1 )
126143
{
@@ -155,6 +172,27 @@ protected Class<?> findClass(String name) throws ClassNotFoundException
155172
return super.findClass( name );
156173
}
157174

175+
private static final Map<String, String> MAPPINGS = ImmutableMap.of(
176+
"net/md_5/bungee/protocol/ChatChain", "net/md_5/bungee/protocol/data/ChatChain",
177+
"net/md_5/bungee/protocol/Location", "net/md_5/bungee/protocol/data/Location",
178+
"net/md_5/bungee/protocol/NumberFormat", "net/md_5/bungee/protocol/data/NumberFormat",
179+
"net/md_5/bungee/protocol/PlayerPublicKey", "net/md_5/bungee/protocol/data/PlayerPublicKey",
180+
"net/md_5/bungee/protocol/Property", "net/md_5/bungee/protocol/data/Property",
181+
"net/md_5/bungee/protocol/SeenMessages", "net/md_5/bungee/protocol/data/SeenMessages",
182+
"net/md_5/bungee/protocol/Either", "net/md_5/bungee/protocol/util/Either",
183+
"net/md_5/bungee/protocol/TagUtil", "net/md_5/bungee/protocol/util/TagUtil"
184+
);
185+
186+
private static byte[] remap(byte[] b)
187+
{
188+
ClassReader cr = new ClassReader( b );
189+
ClassWriter cw = new ClassWriter( cr, 0 );
190+
191+
cr.accept( new ClassRemapper( cw, new SimpleRemapper( MAPPINGS ) ), 0 );
192+
193+
return cw.toByteArray();
194+
}
195+
158196
@Override
159197
public void close() throws IOException
160198
{

0 commit comments

Comments
 (0)