diff options
author | Jake Potrebic <[email protected]> | 2024-06-13 08:45:43 -0700 |
---|---|---|
committer | Jake Potrebic <[email protected]> | 2024-06-13 08:45:43 -0700 |
commit | 7fbb8278e70c1904e09f2144f0e3897468a4906f (patch) | |
tree | 29b32894108673952ea75c6ea4e476e015756e5d /patches/server/0021-Hook-into-CB-plugin-rewrites.patch | |
parent | 79e2cb620ef03539390d97940824b38b707918f5 (diff) | |
download | Paper-7fbb8278e70c1904e09f2144f0e3897468a4906f.tar.gz Paper-7fbb8278e70c1904e09f2144f0e3897468a4906f.zip |
Finish API patches
Diffstat (limited to 'patches/server/0021-Hook-into-CB-plugin-rewrites.patch')
-rw-r--r-- | patches/server/0021-Hook-into-CB-plugin-rewrites.patch | 185 |
1 files changed, 0 insertions, 185 deletions
diff --git a/patches/server/0021-Hook-into-CB-plugin-rewrites.patch b/patches/server/0021-Hook-into-CB-plugin-rewrites.patch deleted file mode 100644 index aaf1564e9f..0000000000 --- a/patches/server/0021-Hook-into-CB-plugin-rewrites.patch +++ /dev/null @@ -1,185 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Zach Brown <[email protected]> -Date: Wed, 3 Oct 2018 20:09:18 -0400 -Subject: [PATCH] Hook into CB plugin rewrites - -Allows us to do fun stuff like rewrite the OBC util fastutil location to -our own relocation. Also lets us rewrite NMS calls for when we're -debugging in an IDE pre-relocate. - -diff --git a/src/main/java/org/bukkit/craftbukkit/util/Commodore.java b/src/main/java/org/bukkit/craftbukkit/util/Commodore.java -index beccd928d151164db8c29f5b7addefbe9a195311..dedcdac1c6b2ba056761d5bd02212c1fb76348c4 100644 ---- a/src/main/java/org/bukkit/craftbukkit/util/Commodore.java -+++ b/src/main/java/org/bukkit/craftbukkit/util/Commodore.java -@@ -8,6 +8,7 @@ import java.util.ArrayList; - import java.util.Arrays; - import java.util.Collections; - import java.util.Enumeration; -+import java.util.HashMap; - import java.util.HashSet; - import java.util.List; - import java.util.Map; -@@ -17,6 +18,7 @@ import java.util.jar.JarEntry; - import java.util.jar.JarFile; - import java.util.jar.JarOutputStream; - import java.util.zip.ZipEntry; -+import javax.annotation.Nonnull; - import joptsimple.OptionParser; - import joptsimple.OptionSet; - import joptsimple.OptionSpec; -@@ -77,6 +79,40 @@ public class Commodore { - private static final Map<String, RerouteMethodData> FIELD_RENAME_METHOD_REROUTE = Commodore.createReroutes(FieldRename.class); - private static final Map<String, RerouteMethodData> MATERIAL_METHOD_REROUTE = Commodore.createReroutes(MaterialRerouting.class); - -+ // Paper start - Plugin rewrites -+ private static final Map<String, String> SEARCH_AND_REMOVE = initReplacementsMap(); -+ private static Map<String, String> initReplacementsMap() { -+ Map<String, String> getAndRemove = new HashMap<>(); -+ // Be wary of maven shade's relocations -+ -+ final java.util.jar.Manifest manifest = io.papermc.paper.util.JarManifests.manifest(Commodore.class); -+ if (Boolean.getBoolean( "debug.rewriteForIde") && manifest != null) -+ { -+ // unversion incoming calls for pre-relocate debug work -+ final String NMS_REVISION_PACKAGE = "v" + manifest.getMainAttributes().getValue("CraftBukkit-Package-Version") + "/"; -+ -+ getAndRemove.put("org/bukkit/".concat("craftbukkit/" + NMS_REVISION_PACKAGE), NMS_REVISION_PACKAGE); -+ } -+ -+ return getAndRemove; -+ } -+ -+ @Nonnull -+ private static String getOriginalOrRewrite(@Nonnull String original) -+ { -+ String rewrite = null; -+ for ( Map.Entry<String, String> entry : SEARCH_AND_REMOVE.entrySet() ) -+ { -+ if ( original.contains( entry.getKey() ) ) -+ { -+ rewrite = original.replace( entry.getValue(), "" ); -+ } -+ } -+ -+ return rewrite != null ? rewrite : original; -+ } -+ // Paper end - Plugin rewrites -+ - public static void main(String[] args) { - OptionParser parser = new OptionParser(); - OptionSpec<File> inputFlag = parser.acceptsAll(Arrays.asList("i", "input")).withRequiredArg().ofType(File.class).required(); -@@ -203,9 +239,49 @@ public class Commodore { - @Override - public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { - return new MethodVisitor(this.api, super.visitMethod(access, name, desc, signature, exceptions)) { -+ // Paper start - Plugin rewrites -+ @Override -+ public void visitTypeInsn(int opcode, String type) { -+ type = getOriginalOrRewrite(type); -+ -+ super.visitTypeInsn(opcode, type); -+ } -+ -+ @Override -+ public void visitFrame(int type, int nLocal, Object[] local, int nStack, Object[] stack) { -+ for (int i = 0; i < local.length; i++) -+ { -+ if (!(local[i] instanceof String)) { continue; } -+ -+ local[i] = getOriginalOrRewrite((String) local[i]); -+ } -+ -+ for (int i = 0; i < stack.length; i++) -+ { -+ if (!(stack[i] instanceof String)) { continue; } -+ -+ stack[i] = getOriginalOrRewrite((String) stack[i]); -+ } -+ -+ super.visitFrame(type, nLocal, local, nStack, stack); -+ } -+ -+ @Override -+ public void visitLocalVariable(String name, String descriptor, String signature, Label start, Label end, int index) { -+ descriptor = getOriginalOrRewrite(descriptor); -+ -+ super.visitLocalVariable(name, descriptor, signature, start, end, index); -+ } -+ // Paper end - Plugin rewrites - - @Override - public void visitFieldInsn(int opcode, String owner, String name, String desc) { -+ // Paper start - Rewrite plugins -+ owner = getOriginalOrRewrite(owner); -+ if (desc != null) { -+ desc = getOriginalOrRewrite(desc); -+ } -+ // Paper end - name = FieldRename.rename(pluginVersion, owner, name); - - if (modern) { -@@ -301,6 +377,13 @@ public class Commodore { - return; - } - -+ // Paper start - Rewrite plugins -+ owner = getOriginalOrRewrite(owner) ; -+ if (desc != null) { -+ desc = getOriginalOrRewrite(desc); -+ } -+ // Paper end - Rewrite plugins -+ - if (modern) { - if (owner.equals("org/bukkit/Material") || (instantiatedMethodType != null && instantiatedMethodType.getDescriptor().startsWith("(Lorg/bukkit/Material;)"))) { - switch (name) { -@@ -397,6 +480,13 @@ public class Commodore { - - @Override - public void visitLdcInsn(Object value) { -+ // Paper start -+ if (value instanceof Type type) { -+ if (type.getSort() == Type.OBJECT || type.getSort() == Type.ARRAY) { -+ value = Type.getType(getOriginalOrRewrite(type.getDescriptor())); -+ } -+ } -+ // Paper end - if (value instanceof String && ((String) value).equals("com.mysql.jdbc.Driver")) { - super.visitLdcInsn("com.mysql.cj.jdbc.Driver"); - return; -@@ -407,6 +497,14 @@ public class Commodore { - - @Override - public void visitInvokeDynamicInsn(String name, String descriptor, Handle bootstrapMethodHandle, Object... bootstrapMethodArguments) { -+ // Paper start - Rewrite plugins -+ name = getOriginalOrRewrite(name); -+ if (descriptor != null) { -+ descriptor = getOriginalOrRewrite(descriptor); -+ } -+ final String fName = name; -+ final String fDescriptor = descriptor; -+ // Paper end - Rewrite plugins - if (bootstrapMethodHandle.getOwner().equals("java/lang/invoke/LambdaMetafactory") - && bootstrapMethodHandle.getName().equals("metafactory") && bootstrapMethodArguments.length == 3) { - Type samMethodType = (Type) bootstrapMethodArguments[0]; -@@ -423,7 +521,7 @@ public class Commodore { - methodArgs.add(new Handle(newOpcode, newOwner, newName, newDescription, newItf)); - methodArgs.add(newInstantiated); - -- super.visitInvokeDynamicInsn(name, descriptor, bootstrapMethodHandle, methodArgs.toArray(Object[]::new)); -+ super.visitInvokeDynamicInsn(fName, fDescriptor, bootstrapMethodHandle, methodArgs.toArray(Object[]::new)); // Paper - use final local vars - }, implMethod.getTag(), implMethod.getOwner(), implMethod.getName(), implMethod.getDesc(), implMethod.isInterface(), samMethodType, instantiatedMethodType); - return; - } -@@ -474,6 +572,12 @@ public class Commodore { - - @Override - public FieldVisitor visitField(int access, String name, String descriptor, String signature, Object value) { -+ // Paper start - Rewrite plugins -+ descriptor = getOriginalOrRewrite(descriptor); -+ if ( signature != null ) { -+ signature = getOriginalOrRewrite(signature); -+ } -+ // Paper end - return new FieldVisitor(this.api, super.visitField(access, name, descriptor, signature, value)) { - @Override - public AnnotationVisitor visitAnnotation(String descriptor, boolean visible) { |