Think its fixed now

This commit is contained in:
libraryaddict 2013-12-22 17:35:57 +13:00
parent 0f280da385
commit a3ddce6c5f
5 changed files with 45 additions and 17 deletions

View File

@ -219,6 +219,7 @@ public class LibsDisguises extends JavaPlugin {
((Zombie) bukkitEntity).setBaby(true); ((Zombie) bukkitEntity).setBaby(true);
disguiseValues.setBabyBox(ReflectionManager.getBoundingBox(bukkitEntity)); disguiseValues.setBabyBox(ReflectionManager.getBoundingBox(bukkitEntity));
} }
disguiseValues.setEntitySize(ReflectionManager.getSize(bukkitEntity));
} catch (Exception ex) { } catch (Exception ex) {
System.out.print("[LibsDisguises] Uh oh! Trouble while making values for the disguise " + disguiseType.name() System.out.print("[LibsDisguises] Uh oh! Trouble while making values for the disguise " + disguiseType.name()
+ "!"); + "!");

View File

@ -153,9 +153,9 @@ public class DisguiseUtilities {
} }
} }
if (isDisguiseInUse(disguise)) { if (isDisguiseInUse(disguise)) {
ReflectionManager.setBoundingBox(entity, entityBox, disguiseBox); ReflectionManager.setBoundingBox(entity, entityBox, disguiseBox, disguiseValues.getEntitySize());
} else { } else {
ReflectionManager.setBoundingBox(entity, disguiseBox, entityBox); ReflectionManager.setBoundingBox(entity, disguiseBox, entityBox, entityValues.getEntitySize());
} }
} }
} }

View File

@ -45,6 +45,7 @@ public class DisguiseValues {
private FakeBoundingBox adultBox; private FakeBoundingBox adultBox;
private FakeBoundingBox babyBox; private FakeBoundingBox babyBox;
private float[] entitySize;
private int enumEntitySize; private int enumEntitySize;
private HashMap<Integer, Object> metaValues = new HashMap<Integer, Object>(); private HashMap<Integer, Object> metaValues = new HashMap<Integer, Object>();
private Class nmsEntityClass; private Class nmsEntityClass;
@ -63,6 +64,10 @@ public class DisguiseValues {
return babyBox; return babyBox;
} }
public float[] getEntitySize() {
return entitySize;
}
public int getEntitySize(double paramDouble) { public int getEntitySize(double paramDouble) {
double d = paramDouble - (((int) Math.floor(paramDouble)) + 0.5D); double d = paramDouble - (((int) Math.floor(paramDouble)) + 0.5D);
@ -123,6 +128,10 @@ public class DisguiseValues {
babyBox = newBox; babyBox = newBox;
} }
public void setEntitySize(float[] size) {
this.entitySize = size;
}
public void setMetaValue(int no, Object value) { public void setMetaValue(int no, Object value) {
metaValues.put(no, value); metaValues.put(no, value);
} }

View File

@ -12,15 +12,15 @@ public class FakeBoundingBox {
} }
public double getX() { public double getX() {
return xMod / 2; return xMod;
} }
public double getY() { public double getY() {
return yMod / 2; return yMod;
} }
public double getZ() { public double getZ() {
return zMod / 2; return zMod;
} }
} }

View File

@ -9,7 +9,6 @@ import org.bukkit.Bukkit;
import org.bukkit.Sound; import org.bukkit.Sound;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
public class ReflectionManager { public class ReflectionManager {
@ -215,6 +214,18 @@ public class ReflectionManager {
return null; return null;
} }
public static float[] getSize(Entity entity) {
try {
float length = getNmsClass("Entity").getField("length").getFloat(getNmsEntity(entity));
float width = getNmsClass("Entity").getField("width").getFloat(getNmsEntity(entity));
float height = getNmsClass("Entity").getField("height").getFloat(getNmsEntity(entity));
return new float[] { length, width, height };
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
public static Float getSoundModifier(Object entity) { public static Float getSoundModifier(Object entity) {
try { try {
soundMethod.setAccessible(true); soundMethod.setAccessible(true);
@ -237,7 +248,7 @@ public class ReflectionManager {
return after17; return after17;
} }
public static void setBoundingBox(Entity entity, FakeBoundingBox oldBox, FakeBoundingBox newBox) { public static void setBoundingBox(Entity entity, FakeBoundingBox oldBox, FakeBoundingBox newBox, float[] entitySize) {
try { try {
Object boundingBox = getNmsClass("Entity").getField("boundingBox").get(getNmsEntity(entity)); Object boundingBox = getNmsClass("Entity").getField("boundingBox").get(getNmsEntity(entity));
int stage = 0; int stage = 0;
@ -247,16 +258,16 @@ public class ReflectionManager {
stage++; stage++;
switch (stage) { switch (stage) {
case 1: case 1:
x = field.getDouble(boundingBox) + oldBox.getX(); x = field.getDouble(boundingBox); //+ oldBox.getX();
field.setDouble(boundingBox, x - newBox.getX()); // field.setDouble(boundingBox, x - newBox.getX());
break; break;
case 2: case 2:
y = field.getDouble(boundingBox) + oldBox.getY(); y = field.getDouble(boundingBox);// + oldBox.getY();
field.setDouble(boundingBox, y - newBox.getY()); // field.setDouble(boundingBox, y - newBox.getY());
break; break;
case 3: case 3:
z = field.getDouble(boundingBox) + oldBox.getZ(); z = field.getDouble(boundingBox); //+ oldBox.getZ();
field.setDouble(boundingBox, z - newBox.getZ()); // field.setDouble(boundingBox, z - newBox.getZ());
break; break;
case 4: case 4:
field.setDouble(boundingBox, x + newBox.getX()); field.setDouble(boundingBox, x + newBox.getX());
@ -272,10 +283,17 @@ public class ReflectionManager {
} }
} }
} }
if (entity.getType() != EntityType.PLAYER) { setSize(entity, entitySize);
// entity.teleport(entity.getLocation().clone() } catch (Exception ex) {
// .subtract(oldBox.getX() - newBox.getX(), oldBox.getY() - newBox.getY(), oldBox.getZ() - newBox.getZ())); ex.printStackTrace();
} }
}
public static void setSize(Entity entity, float[] size) {
try {
getNmsClass("Entity").getField("length").setFloat(getNmsEntity(entity), size[0]);
getNmsClass("Entity").getField("width").setFloat(getNmsEntity(entity), size[1]);
getNmsClass("Entity").getField("height").setFloat(getNmsEntity(entity), size[2]);
} catch (Exception ex) { } catch (Exception ex) {
ex.printStackTrace(); ex.printStackTrace();
} }