mirror of
https://github.com/PaperMC/Paper.git
synced 2025-03-22 15:05:35 +01:00
Reformat Commodore.java
By: md_5 <git@md-5.net>
This commit is contained in:
parent
19e69bb8fc
commit
8f59d4abd3
1 changed files with 149 additions and 218 deletions
|
@ -27,14 +27,7 @@ import org.objectweb.asm.MethodVisitor;
|
|||
import org.objectweb.asm.Opcodes;
|
||||
import org.objectweb.asm.Type;
|
||||
|
||||
/**
|
||||
* This file is imported from Commodore.
|
||||
*
|
||||
* @author md_5
|
||||
*/
|
||||
// CHECKSTYLE:OFF
|
||||
public class Commodore
|
||||
{
|
||||
public class Commodore {
|
||||
|
||||
private static final Set<String> EVIL = new HashSet<>(Arrays.asList(
|
||||
"org/bukkit/World (III)I getBlockTypeIdAt",
|
||||
|
@ -49,8 +42,7 @@ public class Commodore
|
|||
"org/bukkit/inventory/ItemStack (I)V setTypeId"
|
||||
));
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
public static void main(String[] args) {
|
||||
OptionParser parser = new OptionParser();
|
||||
OptionSpec<File> inputFlag = parser.acceptsAll(Arrays.asList("i", "input")).withRequiredArg().ofType(File.class).required();
|
||||
OptionSpec<File> outputFlag = parser.acceptsAll(Arrays.asList("o", "output")).withRequiredArg().ofType(File.class).required();
|
||||
|
@ -60,53 +52,40 @@ public class Commodore
|
|||
File input = options.valueOf(inputFlag);
|
||||
File output = options.valueOf(outputFlag);
|
||||
|
||||
if ( input.isDirectory() )
|
||||
{
|
||||
if ( !output.isDirectory() )
|
||||
{
|
||||
if (input.isDirectory()) {
|
||||
if (!output.isDirectory()) {
|
||||
System.err.println("If input directory specified, output directory required too");
|
||||
return;
|
||||
}
|
||||
|
||||
for ( File in : input.listFiles() )
|
||||
{
|
||||
if ( in.getName().endsWith( ".jar" ) )
|
||||
{
|
||||
for (File in : input.listFiles()) {
|
||||
if (in.getName().endsWith(".jar")) {
|
||||
convert(in, new File(output, in.getName()));
|
||||
}
|
||||
}
|
||||
} else
|
||||
{
|
||||
} else {
|
||||
convert(input, output);
|
||||
}
|
||||
}
|
||||
|
||||
private static void convert(File in, File out)
|
||||
{
|
||||
private static void convert(File in, File out) {
|
||||
System.out.println("Attempting to convert " + in + " to " + out);
|
||||
|
||||
try
|
||||
{
|
||||
try ( JarFile inJar = new JarFile( in, false ) )
|
||||
{
|
||||
try {
|
||||
try (JarFile inJar = new JarFile(in, false)) {
|
||||
JarEntry entry = inJar.getJarEntry(".commodore");
|
||||
if ( entry != null )
|
||||
{
|
||||
if (entry != null) {
|
||||
return;
|
||||
}
|
||||
|
||||
try ( JarOutputStream outJar = new JarOutputStream( new FileOutputStream( out ) ) )
|
||||
{
|
||||
for ( Enumeration<JarEntry> entries = inJar.entries(); entries.hasMoreElements(); )
|
||||
{
|
||||
try (JarOutputStream outJar = new JarOutputStream(new FileOutputStream(out))) {
|
||||
for (Enumeration<JarEntry> entries = inJar.entries(); entries.hasMoreElements();) {
|
||||
entry = entries.nextElement();
|
||||
|
||||
try ( InputStream is = inJar.getInputStream( entry ) )
|
||||
{
|
||||
try (InputStream is = inJar.getInputStream(entry)) {
|
||||
byte[] b = ByteStreams.toByteArray(is);
|
||||
|
||||
if ( entry.getName().endsWith( ".class" ) )
|
||||
{
|
||||
if (entry.getName().endsWith(".class")) {
|
||||
b = convert(b, false);
|
||||
entry = new JarEntry(entry.getName());
|
||||
}
|
||||
|
@ -119,33 +98,25 @@ public class Commodore
|
|||
outJar.putNextEntry(new ZipEntry(".commodore"));
|
||||
}
|
||||
}
|
||||
} catch ( Exception ex )
|
||||
{
|
||||
} catch (Exception ex) {
|
||||
System.err.println("Fatal error trying to convert " + in);
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static byte[] convert(byte[] b, final boolean modern)
|
||||
{
|
||||
public static byte[] convert(byte[] b, final boolean modern) {
|
||||
ClassReader cr = new ClassReader(b);
|
||||
ClassWriter cw = new ClassWriter(cr, 0);
|
||||
|
||||
cr.accept( new ClassVisitor( Opcodes.ASM9, cw )
|
||||
{
|
||||
cr.accept(new ClassVisitor(Opcodes.ASM9, cw) {
|
||||
@Override
|
||||
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions)
|
||||
{
|
||||
return new MethodVisitor( api, super.visitMethod( access, name, desc, signature, exceptions ) )
|
||||
{
|
||||
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
|
||||
return new MethodVisitor(api, super.visitMethod(access, name, desc, signature, exceptions)) {
|
||||
|
||||
@Override
|
||||
public void visitFieldInsn(int opcode, String owner, String name, String desc)
|
||||
{
|
||||
if ( owner.equals( "org/bukkit/block/Biome" ) )
|
||||
{
|
||||
switch ( name )
|
||||
{
|
||||
public void visitFieldInsn(int opcode, String owner, String name, String desc) {
|
||||
if (owner.equals("org/bukkit/block/Biome")) {
|
||||
switch (name) {
|
||||
case "NETHER":
|
||||
super.visitFieldInsn(opcode, owner, "NETHER_WASTES", desc);
|
||||
return;
|
||||
|
@ -185,20 +156,16 @@ public class Commodore
|
|||
}
|
||||
}
|
||||
|
||||
if ( owner.equals( "org/bukkit/entity/EntityType" ) )
|
||||
{
|
||||
switch ( name )
|
||||
{
|
||||
if (owner.equals("org/bukkit/entity/EntityType")) {
|
||||
switch (name) {
|
||||
case "PIG_ZOMBIE":
|
||||
super.visitFieldInsn(opcode, owner, "ZOMBIFIED_PIGLIN", desc);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if ( owner.equals( "org/bukkit/loot/LootTables" ) )
|
||||
{
|
||||
switch ( name )
|
||||
{
|
||||
if (owner.equals("org/bukkit/loot/LootTables")) {
|
||||
switch (name) {
|
||||
case "ZOMBIE_PIGMAN":
|
||||
super.visitFieldInsn(opcode, owner, "ZOMBIFIED_PIGLIN", desc);
|
||||
return;
|
||||
|
@ -206,18 +173,14 @@ public class Commodore
|
|||
}
|
||||
|
||||
// SPIGOT-7335
|
||||
if ( owner.equals( "org/bukkit/entity/TextDisplay$TextAligment" ) )
|
||||
{
|
||||
if (owner.equals("org/bukkit/entity/TextDisplay$TextAligment")) {
|
||||
super.visitFieldInsn(opcode, "org/bukkit/entity/TextDisplay$TextAlignment", name, desc);
|
||||
return;
|
||||
}
|
||||
|
||||
if ( modern )
|
||||
{
|
||||
if ( owner.equals( "org/bukkit/Material" ) )
|
||||
{
|
||||
switch ( name )
|
||||
{
|
||||
if (modern) {
|
||||
if (owner.equals("org/bukkit/Material")) {
|
||||
switch (name) {
|
||||
case "CACTUS_GREEN":
|
||||
name = "GREEN_DYE";
|
||||
break;
|
||||
|
@ -249,13 +212,10 @@ public class Commodore
|
|||
return;
|
||||
}
|
||||
|
||||
if ( owner.equals( "org/bukkit/Material" ) )
|
||||
{
|
||||
try
|
||||
{
|
||||
if (owner.equals("org/bukkit/Material")) {
|
||||
try {
|
||||
Material.valueOf("LEGACY_" + name);
|
||||
} catch ( IllegalArgumentException ex )
|
||||
{
|
||||
} catch (IllegalArgumentException ex) {
|
||||
throw new AuthorNagException("No legacy enum constant for " + name + ". Did you forget to define a modern (1.13+) api-version in your plugin.yml?");
|
||||
}
|
||||
|
||||
|
@ -263,10 +223,8 @@ public class Commodore
|
|||
return;
|
||||
}
|
||||
|
||||
if ( owner.equals( "org/bukkit/Art" ) )
|
||||
{
|
||||
switch ( name )
|
||||
{
|
||||
if (owner.equals("org/bukkit/Art")) {
|
||||
switch (name) {
|
||||
case "BURNINGSKULL":
|
||||
super.visitFieldInsn(opcode, owner, "BURNING_SKULL", desc);
|
||||
return;
|
||||
|
@ -276,20 +234,16 @@ public class Commodore
|
|||
}
|
||||
}
|
||||
|
||||
if ( owner.equals( "org/bukkit/DyeColor" ) )
|
||||
{
|
||||
switch ( name )
|
||||
{
|
||||
if (owner.equals("org/bukkit/DyeColor")) {
|
||||
switch (name) {
|
||||
case "SILVER":
|
||||
super.visitFieldInsn(opcode, owner, "LIGHT_GRAY", desc);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if ( owner.equals( "org/bukkit/Particle" ) )
|
||||
{
|
||||
switch ( name )
|
||||
{
|
||||
if (owner.equals("org/bukkit/Particle")) {
|
||||
switch (name) {
|
||||
case "BLOCK_CRACK":
|
||||
case "BLOCK_DUST":
|
||||
case "FALLING_DUST":
|
||||
|
@ -302,51 +256,41 @@ public class Commodore
|
|||
}
|
||||
|
||||
@Override
|
||||
public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf)
|
||||
{
|
||||
public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) {
|
||||
// SPIGOT-4496
|
||||
if ( owner.equals( "org/bukkit/map/MapView" ) && name.equals( "getId" ) && desc.equals( "()S" ) )
|
||||
{
|
||||
if (owner.equals("org/bukkit/map/MapView") && name.equals("getId") && desc.equals("()S")) {
|
||||
// Should be same size on stack so just call other method
|
||||
super.visitMethodInsn(opcode, owner, name, "()I", itf);
|
||||
return;
|
||||
}
|
||||
// SPIGOT-4608
|
||||
if ( (owner.equals( "org/bukkit/Bukkit" ) || owner.equals( "org/bukkit/Server" ) ) && name.equals( "getMap" ) && desc.equals( "(S)Lorg/bukkit/map/MapView;" ) )
|
||||
{
|
||||
if ((owner.equals("org/bukkit/Bukkit") || owner.equals("org/bukkit/Server")) && name.equals("getMap") && desc.equals("(S)Lorg/bukkit/map/MapView;")) {
|
||||
// Should be same size on stack so just call other method
|
||||
super.visitMethodInsn(opcode, owner, name, "(I)Lorg/bukkit/map/MapView;", itf);
|
||||
return;
|
||||
}
|
||||
// SPIGOT-7335
|
||||
if ( owner.equals( "org/bukkit/entity/TextDisplay$TextAligment" ) )
|
||||
{
|
||||
if (owner.equals("org/bukkit/entity/TextDisplay$TextAligment")) {
|
||||
super.visitMethodInsn(opcode, "org/bukkit/entity/TextDisplay$TextAlignment", name, desc, itf);
|
||||
return;
|
||||
}
|
||||
if ( desc.equals( "(Lorg/bukkit/entity/TextDisplay$TextAligment;)V" ) )
|
||||
{
|
||||
if (desc.equals("(Lorg/bukkit/entity/TextDisplay$TextAligment;)V")) {
|
||||
super.visitMethodInsn(opcode, owner, name, "(Lorg/bukkit/entity/TextDisplay$TextAlignment;)V", itf);
|
||||
return;
|
||||
}
|
||||
if ( desc.equals( "()Lorg/bukkit/entity/TextDisplay$TextAligment;" ) )
|
||||
{
|
||||
if (desc.equals("()Lorg/bukkit/entity/TextDisplay$TextAligment;")) {
|
||||
super.visitMethodInsn(opcode, owner, name, "()Lorg/bukkit/entity/TextDisplay$TextAlignment;", itf);
|
||||
return;
|
||||
}
|
||||
|
||||
if ( owner.startsWith( "org/bukkit" ) && desc.contains( "org/bukkit/util/Consumer" ) )
|
||||
{
|
||||
if (owner.startsWith("org/bukkit") && desc.contains("org/bukkit/util/Consumer")) {
|
||||
super.visitMethodInsn(opcode, owner, name, desc.replace("org/bukkit/util/Consumer", "java/util/function/Consumer"), itf);
|
||||
return;
|
||||
}
|
||||
|
||||
if ( modern )
|
||||
{
|
||||
if ( owner.equals( "org/bukkit/Material" ) )
|
||||
{
|
||||
switch ( name )
|
||||
{
|
||||
if (modern) {
|
||||
if (owner.equals("org/bukkit/Material")) {
|
||||
switch (name) {
|
||||
case "values":
|
||||
super.visitMethodInsn(opcode, "org/bukkit/craftbukkit/util/CraftLegacy", "modern_" + name, desc, itf);
|
||||
return;
|
||||
|
@ -360,8 +304,7 @@ public class Commodore
|
|||
return;
|
||||
}
|
||||
|
||||
if ( owner.equals( "org/bukkit/ChunkSnapshot" ) && name.equals( "getBlockData" ) && desc.equals( "(III)I" ) )
|
||||
{
|
||||
if (owner.equals("org/bukkit/ChunkSnapshot") && name.equals("getBlockData") && desc.equals("(III)I")) {
|
||||
super.visitMethodInsn(opcode, owner, "getData", desc, itf);
|
||||
return;
|
||||
}
|
||||
|
@ -371,8 +314,7 @@ public class Commodore
|
|||
if (EVIL.contains(owner + " " + desc + " " + name)
|
||||
|| (owner.startsWith("org/bukkit/block/") && (desc + " " + name).equals("()I getTypeId"))
|
||||
|| (owner.startsWith("org/bukkit/block/") && (desc + " " + name).equals("(I)Z setTypeId"))
|
||||
|| ( owner.startsWith( "org/bukkit/block/" ) && ( desc + " " + name ).equals( "()Lorg/bukkit/Material; getType" ) ) )
|
||||
{
|
||||
|| (owner.startsWith("org/bukkit/block/") && (desc + " " + name).equals("()Lorg/bukkit/Material; getType"))) {
|
||||
Type[] args = Type.getArgumentTypes(desc);
|
||||
Type[] newArgs = new Type[args.length + 1];
|
||||
newArgs[0] = Type.getObjectType(owner);
|
||||
|
@ -382,25 +324,20 @@ public class Commodore
|
|||
return;
|
||||
}
|
||||
|
||||
if ( owner.equals( "org/bukkit/DyeColor" ) )
|
||||
{
|
||||
if ( name.equals( "valueOf" ) && desc.equals( "(Ljava/lang/String;)Lorg/bukkit/DyeColor;" ) )
|
||||
{
|
||||
if (owner.equals("org/bukkit/DyeColor")) {
|
||||
if (name.equals("valueOf") && desc.equals("(Ljava/lang/String;)Lorg/bukkit/DyeColor;")) {
|
||||
super.visitMethodInsn(opcode, owner, "legacyValueOf", desc, itf);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if ( owner.equals( "org/bukkit/Material" ) )
|
||||
{
|
||||
if ( name.equals( "getMaterial" ) && desc.equals( "(I)Lorg/bukkit/Material;" ) )
|
||||
{
|
||||
if (owner.equals("org/bukkit/Material")) {
|
||||
if (name.equals("getMaterial") && desc.equals("(I)Lorg/bukkit/Material;")) {
|
||||
super.visitMethodInsn(opcode, "org/bukkit/craftbukkit/legacy/CraftEvil", name, desc, itf);
|
||||
return;
|
||||
}
|
||||
|
||||
switch ( name )
|
||||
{
|
||||
switch (name) {
|
||||
case "values":
|
||||
case "valueOf":
|
||||
case "getMaterial":
|
||||
|
@ -417,8 +354,7 @@ public class Commodore
|
|||
}
|
||||
}
|
||||
|
||||
if ( retType.getSort() == Type.OBJECT && retType.getInternalName().equals( "org/bukkit/Material" ) && owner.startsWith( "org/bukkit" ) )
|
||||
{
|
||||
if (retType.getSort() == Type.OBJECT && retType.getInternalName().equals("org/bukkit/Material") && owner.startsWith("org/bukkit")) {
|
||||
super.visitMethodInsn(opcode, owner, name, desc, itf);
|
||||
super.visitMethodInsn(Opcodes.INVOKESTATIC, "org/bukkit/craftbukkit/legacy/CraftLegacy", "toLegacy", "(Lorg/bukkit/Material;)Lorg/bukkit/Material;", false);
|
||||
return;
|
||||
|
@ -428,10 +364,8 @@ public class Commodore
|
|||
}
|
||||
|
||||
@Override
|
||||
public void visitLdcInsn(Object value)
|
||||
{
|
||||
if ( value instanceof String && ( (String) value ).equals( "com.mysql.jdbc.Driver" ) )
|
||||
{
|
||||
public void visitLdcInsn(Object value) {
|
||||
if (value instanceof String && ((String) value).equals("com.mysql.jdbc.Driver")) {
|
||||
super.visitLdcInsn("com.mysql.cj.jdbc.Driver");
|
||||
return;
|
||||
}
|
||||
|
@ -440,11 +374,9 @@ public class Commodore
|
|||
}
|
||||
|
||||
@Override
|
||||
public void visitInvokeDynamicInsn( String name, String descriptor, Handle bootstrapMethodHandle, Object... bootstrapMethodArguments )
|
||||
{
|
||||
public void visitInvokeDynamicInsn(String name, String descriptor, Handle bootstrapMethodHandle, Object... bootstrapMethodArguments) {
|
||||
if (bootstrapMethodHandle.getOwner().equals("java/lang/invoke/LambdaMetafactory")
|
||||
&& bootstrapMethodHandle.getName().equals( "metafactory" ) && bootstrapMethodArguments.length == 3 )
|
||||
{
|
||||
&& bootstrapMethodHandle.getName().equals("metafactory") && bootstrapMethodArguments.length == 3) {
|
||||
Type samMethodType = (Type) bootstrapMethodArguments[0];
|
||||
Handle implMethod = (Handle) bootstrapMethodArguments[1];
|
||||
Type instantiatedMethodType = (Type) bootstrapMethodArguments[2];
|
||||
|
@ -452,8 +384,7 @@ public class Commodore
|
|||
List<Object> newTypes = new ArrayList<>();
|
||||
newTypes.add(samMethodType);
|
||||
|
||||
if ( implMethod.getOwner().startsWith( "org/bukkit" ) && implMethod.getDesc().contains( "org/bukkit/util/Consumer" ) )
|
||||
{
|
||||
if (implMethod.getOwner().startsWith("org/bukkit") && implMethod.getDesc().contains("org/bukkit/util/Consumer")) {
|
||||
implMethod = new Handle(implMethod.getTag(), implMethod.getOwner(), implMethod.getName(),
|
||||
implMethod.getDesc().replace("org/bukkit/util/Consumer", "java/util/function/Consumer"), implMethod.isInterface());
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue