Rewrite the nms part, fix nope error completely
This commit is contained in:
@@ -1,20 +0,0 @@
|
||||
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("ChairsReloaded is not compatible with your server version");
|
||||
}
|
||||
|
||||
}
|
47
src/com/cnaude/chairs/vehiclearrow/NMSAccess.java
Normal file
47
src/com/cnaude/chairs/vehiclearrow/NMSAccess.java
Normal file
@@ -0,0 +1,47 @@
|
||||
package com.cnaude.chairs.vehiclearrow;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Arrow;
|
||||
|
||||
public class NMSAccess {
|
||||
|
||||
private Class<?> nmsArrowClass;
|
||||
|
||||
public void setupVehicleArrow() throws Exception {
|
||||
String pkgname = getClass().getPackage().getName();
|
||||
String packageName = Bukkit.getServer().getClass().getPackage().getName();
|
||||
String nmspackageversion = packageName.substring(packageName.lastIndexOf('.') + 1);
|
||||
switch (nmspackageversion) {
|
||||
case "v1_7_R1": {
|
||||
nmsArrowClass = Class.forName(pkgname+"."+"nms172"+".NMSChairsArrow");
|
||||
return;
|
||||
}
|
||||
case "v1_6_R3": {
|
||||
nmsArrowClass = Class.forName(pkgname+"."+"nms164"+".NMSChairsArrow");
|
||||
return;
|
||||
}
|
||||
}
|
||||
throw new Exception("ChairsReloaded is not compatible with your server version");
|
||||
}
|
||||
|
||||
public Arrow spawnArrow(Location location) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException {
|
||||
World world = location.getWorld();
|
||||
Method getHandle = world.getClass().getDeclaredMethod("getHandle");
|
||||
getHandle.setAccessible(true);
|
||||
Object nmsworld = getHandle.invoke(world);
|
||||
Constructor<?> ct = nmsArrowClass.getConstructor(nmsworld.getClass().getSuperclass());
|
||||
ct.setAccessible(true);
|
||||
NMSChairsArrowInterface vehiclearrow = (NMSChairsArrowInterface) ct.newInstance(nmsworld);
|
||||
vehiclearrow.setArrowLocation(location);
|
||||
vehiclearrow.addToWorld();
|
||||
vehiclearrow.setBukkitEntity(Bukkit.getServer());
|
||||
return vehiclearrow.getBukkitArrow();
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,17 @@
|
||||
package com.cnaude.chairs.vehiclearrow;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.entity.Arrow;
|
||||
|
||||
public interface NMSChairsArrowInterface {
|
||||
|
||||
public void setBukkitEntity(Server server);
|
||||
|
||||
public Arrow getBukkitArrow();
|
||||
|
||||
public void setArrowLocation(Location location);
|
||||
|
||||
public void addToWorld();
|
||||
|
||||
}
|
@@ -1,22 +0,0 @@
|
||||
package com.cnaude.chairs.vehiclearrow.nms164;
|
||||
|
||||
import net.minecraft.server.v1_6_R3.EntityArrow;
|
||||
|
||||
import org.bukkit.craftbukkit.v1_6_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_6_R3.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 (isEmpty()) {
|
||||
super.remove();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,30 @@
|
||||
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.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.entity.Vehicle;
|
||||
|
||||
import com.cnaude.chairs.core.api.ChairsAPI;
|
||||
|
||||
public class CraftChairsArrow extends CraftArrow implements Vehicle {
|
||||
|
||||
public CraftChairsArrow(CraftServer server, EntityArrow entity) {
|
||||
super(server, entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove() {
|
||||
Entity passenger = getPassenger();
|
||||
if (passenger != null && passenger instanceof Player) {
|
||||
if (ChairsAPI.isSitting((Player) passenger)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
super.remove();
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,42 @@
|
||||
package com.cnaude.chairs.vehiclearrow.nms172;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.craftbukkit.v1_7_R1.CraftServer;
|
||||
import org.bukkit.entity.Arrow;
|
||||
|
||||
import com.cnaude.chairs.vehiclearrow.NMSChairsArrowInterface;
|
||||
|
||||
import net.minecraft.server.v1_7_R1.EntityArrow;
|
||||
import net.minecraft.server.v1_7_R1.World;
|
||||
|
||||
public class NMSChairsArrow extends EntityArrow implements NMSChairsArrowInterface {
|
||||
|
||||
public NMSChairsArrow(World world) {
|
||||
super(world);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void h() {
|
||||
}
|
||||
|
||||
public void setBukkitEntity(Server server) {
|
||||
bukkitEntity = new CraftChairsArrow((CraftServer) server, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Arrow getBukkitArrow() {
|
||||
return (Arrow) bukkitEntity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setArrowLocation(Location location) {
|
||||
setPositionRotation(location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addToWorld() {
|
||||
world.addEntity(this);
|
||||
}
|
||||
|
||||
}
|
@@ -1,22 +0,0 @@
|
||||
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 (isEmpty()) {
|
||||
super.remove();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user