NO longer generate the class dynamicly, just 2 different classes for 2 supported versions will be enough

This commit is contained in:
Shevchik
2014-01-12 02:29:53 +04:00
parent 6205d80ae1
commit 445077a81e
12 changed files with 60 additions and 55 deletions

View File

@@ -1,49 +0,0 @@
package com.cnaude.chairs.vehiclearrow;
import java.io.IOException;
import org.bukkit.Bukkit;
import org.bukkit.entity.Vehicle;
import javassist.CannotCompileException;
import javassist.ClassClassPath;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtNewConstructor;
import javassist.CtNewMethod;
import javassist.NotFoundException;
public class GenVehicleArrowClass {
public Class<?> genAndLoadClass(String arrowclass, Class<?> entityarrow, Class<?> craftserver) throws IOException, ClassNotFoundException, NotFoundException, CannotCompileException
{
ClassPool pool = ClassPool.getDefault();
pool.insertClassPath
(
new ClassClassPath(Bukkit.class)
);
CtClass vehiclearrow = pool.makeClass("com.cnaude.chairs.VehicleArrow");
vehiclearrow.setSuperclass(pool.getCtClass(arrowclass));
vehiclearrow.setInterfaces
(
new CtClass[]
{
pool.get(Vehicle.class.getName())
}
);
String counstructorsource = "public VehicleArrow("+craftserver.getName()+" server, "+entityarrow.getName()+" entity)\n{\nsuper(server, entity);\n}";
vehiclearrow.addConstructor
(
CtNewConstructor.make(counstructorsource, vehiclearrow)
);
String removemethodsource = "public void remove()\n{\nif (this.getPassenger() == null)\n{\nsuper.remove();\n}\n}";
vehiclearrow.addMethod
(
CtNewMethod.make(removemethodsource, vehiclearrow)
);
return vehiclearrow.toClass();
}
}

View File

@@ -0,0 +1,25 @@
package com.cnaude.chairs.vehiclearrow;
import org.bukkit.Bukkit;
public class GetVehicleArrowClass {
private String pkgname = this.getClass().getPackage().getName();
private String vehiclearrowclassname = "VehicleArrow";
public Class<?> getVehicleArrowClass(String arrowclass, Class<?> entityarrow, Class<?> craftserver) throws Exception
{
String packageName = Bukkit.getServer().getClass().getPackage().getName();
String nmspackageversion = packageName.substring(packageName.lastIndexOf('.') + 1);
if (nmspackageversion.equals("v1_7_R1"))
{
return Class.forName(pkgname+"."+"nms172"+"."+vehiclearrowclassname);
} else if (nmspackageversion.equals("v1_6_R3"))
{
return Class.forName(pkgname+"."+"nms164"+"."+vehiclearrowclassname);
}
throw new Exception("ChiarsReloaded is not compatible with your server version");
}
}

View File

@@ -0,0 +1,5 @@
package com.cnaude.chairs.vehiclearrow.nms164;
public class VehicleArrow {
}

View File

@@ -0,0 +1,25 @@
package com.cnaude.chairs.vehiclearrow.nms172;
import net.minecraft.server.v1_7_R1.EntityArrow;
import org.bukkit.craftbukkit.v1_7_R1.CraftServer;
import org.bukkit.craftbukkit.v1_7_R1.entity.CraftArrow;
import org.bukkit.entity.Vehicle;
public class VehicleArrow extends CraftArrow implements Vehicle {
public VehicleArrow(CraftServer server, EntityArrow entity)
{
super(server, entity);
}
@Override
public void remove()
{
if (this.getPassenger() == null)
{
super.remove();
}
}
}