From 0491fa7805f2a088e6979f16b1d826eac60c44e3 Mon Sep 17 00:00:00 2001 From: asofold Date: Sun, 2 Apr 2017 17:04:30 +0200 Subject: [PATCH] Use getWidth and getHeight for Bukkit entities, once available. * Simplify MC version string. --- NCPCompatBukkit/pom.xml | 2 +- .../compat/bukkit/MCAccessBukkitBase.java | 27 +++++++++++++++---- .../compat/cbreflect/MCAccessCBReflect.java | 8 +++++- .../compat/cbdev/MCAccessCBDev.java | 5 ++-- .../nocheatplus/compat/MCAccess.java | 6 ++++- 5 files changed, 38 insertions(+), 10 deletions(-) diff --git a/NCPCompatBukkit/pom.xml b/NCPCompatBukkit/pom.xml index fcd69736..4408938a 100644 --- a/NCPCompatBukkit/pom.xml +++ b/NCPCompatBukkit/pom.xml @@ -17,7 +17,7 @@ org.bukkit bukkit - 1.9.4-R0.1-SNAPSHOT + 1.11.2-R0.1-SNAPSHOT provided diff --git a/NCPCompatBukkit/src/main/java/fr/neatmonster/nocheatplus/compat/bukkit/MCAccessBukkitBase.java b/NCPCompatBukkit/src/main/java/fr/neatmonster/nocheatplus/compat/bukkit/MCAccessBukkitBase.java index 457301f3..ed9cc70b 100644 --- a/NCPCompatBukkit/src/main/java/fr/neatmonster/nocheatplus/compat/bukkit/MCAccessBukkitBase.java +++ b/NCPCompatBukkit/src/main/java/fr/neatmonster/nocheatplus/compat/bukkit/MCAccessBukkitBase.java @@ -38,6 +38,7 @@ import fr.neatmonster.nocheatplus.utilities.map.BlockCache; public class MCAccessBukkitBase implements MCAccess { // private AlmostBoolean entityPlayerAvailable = AlmostBoolean.MAYBE; + protected final boolean bukkitHasGetHeightAndGetWidth; /** * Constructor to let it fail. @@ -48,13 +49,16 @@ public class MCAccessBukkitBase implements MCAccess { Material.AIR.isOccluding(); Material.AIR.isTransparent(); // TODO: Deactivate checks that might not work. => MCAccess should have availability method, NCP deactivates check on base of that. + // TODO: Move getHeight and the like to EntityAccessXY. + bukkitHasGetHeightAndGetWidth = ReflectionUtil.getMethodNoArgs(Entity.class, "getHeight", double.class) != null + && ReflectionUtil.getMethodNoArgs(Entity.class, "getWidth", double.class) != null; } @Override public String getMCVersion() { // Bukkit API. // TODO: maybe output something else. - return "1.4.6|1.4.7|1.5.x|1.6.x|1.7.x|1.8.x|1.9.x|?"; // 1.8.x is bold! + return "1.4.6-1.11.2|?"; // uh oh } @Override @@ -84,8 +88,13 @@ public class MCAccessBukkitBase implements MCAccess { @Override public double getHeight(final Entity entity) { - // TODO: Copy defaults like with widths. - final double entityHeight = 1.0; + double entityHeight; + if (bukkitHasGetHeightAndGetWidth) { + entityHeight = entity.getHeight(); + } + else { + entityHeight = 1.0; + } if (entity instanceof LivingEntity) { return Math.max(((LivingEntity) entity).getEyeHeight(), entityHeight); } else { @@ -105,8 +114,7 @@ public class MCAccessBukkitBase implements MCAccess { } } - @Override - public double getWidth(final Entity entity) { + private final double legacyGetWidth(final Entity entity) { // TODO: Make readable from file for defaults + register individual getters where appropriate. // TODO: For height too. [Automatize most by spawning + checking?] // Values taken from 1.7.10. @@ -207,7 +215,16 @@ public class MCAccessBukkitBase implements MCAccess { } catch (Throwable t) {} // Default entity width. return 0.6f; + } + @Override + public double getWidth(final Entity entity) { + if (bukkitHasGetHeightAndGetWidth) { + return entity.getWidth(); + } + else { + return legacyGetWidth(entity); + } } @Override diff --git a/NCPCompatBukkit/src/main/java/fr/neatmonster/nocheatplus/compat/cbreflect/MCAccessCBReflect.java b/NCPCompatBukkit/src/main/java/fr/neatmonster/nocheatplus/compat/cbreflect/MCAccessCBReflect.java index 60af66a3..b7b9042f 100644 --- a/NCPCompatBukkit/src/main/java/fr/neatmonster/nocheatplus/compat/cbreflect/MCAccessCBReflect.java +++ b/NCPCompatBukkit/src/main/java/fr/neatmonster/nocheatplus/compat/cbreflect/MCAccessCBReflect.java @@ -70,7 +70,7 @@ public class MCAccessCBReflect extends MCAccessBukkitBase { @Override public String getMCVersion() { // Potentially all :p. - return "1.4.5-1.11|?"; + return "1.4.5-1.11.2|?"; } @Override @@ -173,6 +173,9 @@ public class MCAccessCBReflect extends MCAccessBukkitBase { @Override public double getHeight(Entity entity) { + if (bukkitHasGetHeightAndGetWidth) { + return super.getHeight(entity); + } try { return helper.getHeight(entity); } @@ -183,6 +186,9 @@ public class MCAccessCBReflect extends MCAccessBukkitBase { @Override public double getWidth(Entity entity) { + if (bukkitHasGetHeightAndGetWidth) { + return super.getWidth(entity); + } try { return helper.getWidth(entity); } diff --git a/NCPCompatCBDev/src/main/java/fr/neatmonster/nocheatplus/compat/cbdev/MCAccessCBDev.java b/NCPCompatCBDev/src/main/java/fr/neatmonster/nocheatplus/compat/cbdev/MCAccessCBDev.java index 652512fd..38d18057 100644 --- a/NCPCompatCBDev/src/main/java/fr/neatmonster/nocheatplus/compat/cbdev/MCAccessCBDev.java +++ b/NCPCompatCBDev/src/main/java/fr/neatmonster/nocheatplus/compat/cbdev/MCAccessCBDev.java @@ -128,8 +128,9 @@ public class MCAccessCBDev implements MCAccess { @Override public double getHeight(final Entity entity) { + // (entity.getHeight() returns the length field, but we access nms anyway.) final net.minecraft.server.v1_11_R1.Entity mcEntity = ((CraftEntity) entity).getHandle(); - AxisAlignedBB boundingBox = mcEntity.getBoundingBox(); + final AxisAlignedBB boundingBox = mcEntity.getBoundingBox(); final double entityHeight = Math.max(mcEntity.length, Math.max(mcEntity.getHeadHeight(), boundingBox.e - boundingBox.b)); if (entity instanceof LivingEntity) { return Math.max(((LivingEntity) entity).getEyeHeight(), entityHeight); @@ -171,7 +172,7 @@ public class MCAccessCBDev implements MCAccess { @Override public double getWidth(final Entity entity) { - return ((CraftEntity) entity).getHandle().width; + return entity.getWidth(); } @Override diff --git a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/compat/MCAccess.java b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/compat/MCAccess.java index 222bf823..e89f7e49 100644 --- a/NCPCore/src/main/java/fr/neatmonster/nocheatplus/compat/MCAccess.java +++ b/NCPCore/src/main/java/fr/neatmonster/nocheatplus/compat/MCAccess.java @@ -42,7 +42,11 @@ import fr.neatmonster.nocheatplus.utilities.map.BlockCache; public interface MCAccess extends IGetBlockCache, IEntityAccessDimensions { /** - * Simple version identifiers, if several must be separated by '|' like "1.4.2|1.4.4|1.4.5", to indicate multiple sub-versions supported use "1.5.x", use "?" to indicate general future support. + * Simple/rough version information, separate several individual versions by + * '|' ranges with '-', potential future support with '?', e.g. + * "1.x.1|1.x.2|2.3.4-3.4.5|?". For large ranges, don't expect all versions + * between to be supported. + * * @return */ public String getMCVersion();