[BLEEDING] First attempt to make slime blocks work.

This commit is contained in:
asofold 2014-12-10 00:45:08 +01:00
parent a51965c57d
commit 3eab23ae92
27 changed files with 2957 additions and 2787 deletions

View File

@ -324,6 +324,11 @@ public class MCAccessBukkit implements MCAccess, BlockPropertiesSetup{
}
}
@Override
public AlmostBoolean dealFallDamageFiresAnEvent() {
return AlmostBoolean.NO; // Assumption.
}
// @Override
// public void correctDirection(Player player) {
// // TODO: Consider using reflection (detect CraftPlayer, access EntityPlayer + check if possible (!), use flags for if valid or invalid.)

View File

@ -24,145 +24,150 @@ import fr.neatmonster.nocheatplus.utilities.BlockCache;
import fr.neatmonster.nocheatplus.utilities.ReflectionUtil;
public class MCAccessCB2512 implements MCAccess{
/**
* Constructor to let it fail.
*/
public MCAccessCB2512(){
getCommandMap();
ReflectionUtil.checkMembers("net.minecraft.server.v1_4_5.", new String[]{"Entity" , "dead"});
ReflectionUtil.checkMethodReturnTypesNoArgs(net.minecraft.server.v1_4_5.Block.class,
new String[]{"v", "w", "x", "y", "z", "A"}, double.class);
}
@Override
public String getMCVersion() {
return "1.4.5";
}
/**
* Constructor to let it fail.
*/
public MCAccessCB2512(){
getCommandMap();
ReflectionUtil.checkMembers("net.minecraft.server.v1_4_5.", new String[]{"Entity" , "dead"});
ReflectionUtil.checkMethodReturnTypesNoArgs(net.minecraft.server.v1_4_5.Block.class,
new String[]{"v", "w", "x", "y", "z", "A"}, double.class);
}
@Override
public String getServerVersionTag() {
return "CB2512";
}
@Override
public String getMCVersion() {
return "1.4.5";
}
@Override
public CommandMap getCommandMap() {
return ((CraftServer) Bukkit.getServer()).getCommandMap();
}
@Override
public String getServerVersionTag() {
return "CB2512";
}
@Override
public BlockCache getBlockCache(final World world) {
return new BlockCacheCB2512(world);
}
@Override
public CommandMap getCommandMap() {
return ((CraftServer) Bukkit.getServer()).getCommandMap();
}
@Override
public double getHeight(final Entity entity) {
final net.minecraft.server.v1_4_5.Entity mcEntity = ((CraftEntity) entity).getHandle();
final double entityHeight = Math.max(mcEntity.length, Math.max(mcEntity.height, mcEntity.boundingBox.e - mcEntity.boundingBox.b));
if (entity instanceof LivingEntity) {
return Math.max(((LivingEntity) entity).getEyeHeight(), entityHeight);
} else return entityHeight;
}
@Override
public BlockCache getBlockCache(final World world) {
return new BlockCacheCB2512(world);
}
@Override
public AlmostBoolean isBlockSolid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isSolid());
}
@Override
public double getHeight(final Entity entity) {
final net.minecraft.server.v1_4_5.Entity mcEntity = ((CraftEntity) entity).getHandle();
final double entityHeight = Math.max(mcEntity.length, Math.max(mcEntity.height, mcEntity.boundingBox.e - mcEntity.boundingBox.b));
if (entity instanceof LivingEntity) {
return Math.max(((LivingEntity) entity).getEyeHeight(), entityHeight);
} else return entityHeight;
}
@Override
public AlmostBoolean isBlockLiquid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isLiquid());
}
@Override
public AlmostBoolean isBlockSolid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isSolid());
}
@Override
public double getWidth(final Entity entity) {
return ((CraftEntity) entity).getHandle().width;
}
@Override
public AlmostBoolean isBlockLiquid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isLiquid());
}
@Override
public AlmostBoolean isIllegalBounds(final Player player) {
final EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
if (entityPlayer.dead) return AlmostBoolean.NO;
final AxisAlignedBB box = entityPlayer.boundingBox;
if (!entityPlayer.isSleeping()){
// This can not really test stance but height of bounding box.
final double dY = Math.abs(box.e - box.b);
if (dY > 1.8) return AlmostBoolean.YES; // dY > 1.65D ||
if (dY < 0.1D && entityPlayer.length >= 0.1) return AlmostBoolean.YES;
}
return AlmostBoolean.MAYBE;
}
@Override
public double getWidth(final Entity entity) {
return ((CraftEntity) entity).getHandle().width;
}
@Override
public double getJumpAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.JUMP)) return mcPlayer.getEffect(MobEffectList.JUMP).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public AlmostBoolean isIllegalBounds(final Player player) {
final EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
if (entityPlayer.dead) return AlmostBoolean.NO;
final AxisAlignedBB box = entityPlayer.boundingBox;
if (!entityPlayer.isSleeping()){
// This can not really test stance but height of bounding box.
final double dY = Math.abs(box.e - box.b);
if (dY > 1.8) return AlmostBoolean.YES; // dY > 1.65D ||
if (dY < 0.1D && entityPlayer.length >= 0.1) return AlmostBoolean.YES;
}
return AlmostBoolean.MAYBE;
}
@Override
public double getFasterMovementAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.FASTER_MOVEMENT)) return mcPlayer.getEffect(MobEffectList.FASTER_MOVEMENT).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public double getJumpAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
@Override
public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks;
}
if (mcPlayer.hasEffect(MobEffectList.JUMP)) return mcPlayer.getEffect(MobEffectList.JUMP).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public void setInvulnerableTicks(final Player player, final int ticks) {
((CraftPlayer) player).getHandle().invulnerableTicks = ticks;
}
@Override
public double getFasterMovementAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.FASTER_MOVEMENT)) return mcPlayer.getEffect(MobEffectList.FASTER_MOVEMENT).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public void dealFallDamage(final Player player, final double damage) {
((CraftPlayer) player).getHandle().damageEntity(DamageSource.FALL, (int) Math.round(damage));
}
@Override
public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks;
}
@Override
public boolean isComplexPart(final Entity entity) {
return ((CraftEntity) entity).getHandle() instanceof EntityComplexPart;
}
@Override
public void setInvulnerableTicks(final Player player, final int ticks) {
((CraftPlayer) player).getHandle().invulnerableTicks = ticks;
}
@Override
public boolean shouldBeZombie(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
return !mcPlayer.dead && mcPlayer.getHealth() <= 0 ;
}
@Override
public void dealFallDamage(final Player player, final double damage) {
((CraftPlayer) player).getHandle().damageEntity(DamageSource.FALL, (int) Math.round(damage));
}
@Override
public void setDead(final Player player, final int deathTicks) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
@Override
public boolean isComplexPart(final Entity entity) {
return ((CraftEntity) entity).getHandle() instanceof EntityComplexPart;
}
@Override
public boolean shouldBeZombie(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
return !mcPlayer.dead && mcPlayer.getHealth() <= 0 ;
}
@Override
public void setDead(final Player player, final int deathTicks) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
mcPlayer.deathTicks = deathTicks;
mcPlayer.dead = true;
}
@Override
public boolean hasGravity(final Material mat) {
switch(mat){
case SAND:
case GRAVEL:
return true;
default:
return false;
}
}
// @Override
// public void correctDirection(final Player player) {
// final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
// // Main direction.
// mcPlayer.yaw = LocUtil.correctYaw(mcPlayer.yaw);
// mcPlayer.pitch = LocUtil.correctPitch(mcPlayer.pitch);
// // Consider setting the lastYaw here too.
// }
}
@Override
public boolean hasGravity(final Material mat) {
switch(mat){
case SAND:
case GRAVEL:
return true;
default:
return false;
}
}
@Override
public AlmostBoolean dealFallDamageFiresAnEvent() {
return AlmostBoolean.MAYBE;
}
// @Override
// public void correctDirection(final Player player) {
// final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
// // Main direction.
// mcPlayer.yaw = LocUtil.correctYaw(mcPlayer.yaw);
// mcPlayer.pitch = LocUtil.correctPitch(mcPlayer.pitch);
// // Consider setting the lastYaw here too.
// }
}

View File

@ -24,145 +24,150 @@ import fr.neatmonster.nocheatplus.utilities.BlockCache;
import fr.neatmonster.nocheatplus.utilities.ReflectionUtil;
public class MCAccessCB2545 implements MCAccess{
/**
* Constructor to let it fail.
*/
public MCAccessCB2545(){
getCommandMap();
ReflectionUtil.checkMembers("net.minecraft.server.v1_4_6.", new String[]{"Entity" , "dead"});
ReflectionUtil.checkMethodReturnTypesNoArgs(net.minecraft.server.v1_4_6.Block.class,
new String[]{"v", "w", "x", "y", "z", "A"}, double.class);
}
@Override
public String getMCVersion() {
return "1.4.6";
}
/**
* Constructor to let it fail.
*/
public MCAccessCB2545(){
getCommandMap();
ReflectionUtil.checkMembers("net.minecraft.server.v1_4_6.", new String[]{"Entity" , "dead"});
ReflectionUtil.checkMethodReturnTypesNoArgs(net.minecraft.server.v1_4_6.Block.class,
new String[]{"v", "w", "x", "y", "z", "A"}, double.class);
}
@Override
public String getServerVersionTag() {
return "CB2545";
}
@Override
public String getMCVersion() {
return "1.4.6";
}
@Override
public CommandMap getCommandMap() {
return ((CraftServer) Bukkit.getServer()).getCommandMap();
}
@Override
public String getServerVersionTag() {
return "CB2545";
}
@Override
public BlockCache getBlockCache(final World world) {
return new BlockCacheCB2545(world);
}
@Override
public CommandMap getCommandMap() {
return ((CraftServer) Bukkit.getServer()).getCommandMap();
}
@Override
public double getHeight(final Entity entity) {
final net.minecraft.server.v1_4_6.Entity mcEntity = ((CraftEntity) entity).getHandle();
final double entityHeight = Math.max(mcEntity.length, Math.max(mcEntity.height, mcEntity.boundingBox.e - mcEntity.boundingBox.b));
if (entity instanceof LivingEntity) {
return Math.max(((LivingEntity) entity).getEyeHeight(), entityHeight);
} else return entityHeight;
}
@Override
public BlockCache getBlockCache(final World world) {
return new BlockCacheCB2545(world);
}
@Override
public AlmostBoolean isBlockSolid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isSolid());
}
@Override
public double getHeight(final Entity entity) {
final net.minecraft.server.v1_4_6.Entity mcEntity = ((CraftEntity) entity).getHandle();
final double entityHeight = Math.max(mcEntity.length, Math.max(mcEntity.height, mcEntity.boundingBox.e - mcEntity.boundingBox.b));
if (entity instanceof LivingEntity) {
return Math.max(((LivingEntity) entity).getEyeHeight(), entityHeight);
} else return entityHeight;
}
@Override
public AlmostBoolean isBlockLiquid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isLiquid());
}
@Override
public AlmostBoolean isBlockSolid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isSolid());
}
@Override
public double getWidth(final Entity entity) {
return ((CraftEntity) entity).getHandle().width;
}
@Override
public AlmostBoolean isBlockLiquid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isLiquid());
}
@Override
public AlmostBoolean isIllegalBounds(final Player player) {
final EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
if (entityPlayer.dead) return AlmostBoolean.NO;
final AxisAlignedBB box = entityPlayer.boundingBox;
if (!entityPlayer.isSleeping()){
// This can not really test stance but height of bounding box.
final double dY = Math.abs(box.e - box.b);
if (dY > 1.8) return AlmostBoolean.YES; // dY > 1.65D ||
if (dY < 0.1D && entityPlayer.length >= 0.1) return AlmostBoolean.YES;
}
return AlmostBoolean.MAYBE;
}
@Override
public double getWidth(final Entity entity) {
return ((CraftEntity) entity).getHandle().width;
}
@Override
public double getJumpAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.JUMP)) return mcPlayer.getEffect(MobEffectList.JUMP).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public AlmostBoolean isIllegalBounds(final Player player) {
final EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
if (entityPlayer.dead) return AlmostBoolean.NO;
final AxisAlignedBB box = entityPlayer.boundingBox;
if (!entityPlayer.isSleeping()){
// This can not really test stance but height of bounding box.
final double dY = Math.abs(box.e - box.b);
if (dY > 1.8) return AlmostBoolean.YES; // dY > 1.65D ||
if (dY < 0.1D && entityPlayer.length >= 0.1) return AlmostBoolean.YES;
}
return AlmostBoolean.MAYBE;
}
@Override
public double getFasterMovementAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.FASTER_MOVEMENT)) return mcPlayer.getEffect(MobEffectList.FASTER_MOVEMENT).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public double getJumpAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
@Override
public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks;
}
if (mcPlayer.hasEffect(MobEffectList.JUMP)) return mcPlayer.getEffect(MobEffectList.JUMP).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public void setInvulnerableTicks(final Player player, final int ticks) {
((CraftPlayer) player).getHandle().invulnerableTicks = ticks;
}
@Override
public double getFasterMovementAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.FASTER_MOVEMENT)) return mcPlayer.getEffect(MobEffectList.FASTER_MOVEMENT).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public void dealFallDamage(final Player player, final double damage) {
((CraftPlayer) player).getHandle().damageEntity(DamageSource.FALL, (int) Math.round(damage));
}
@Override
public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks;
}
@Override
public boolean isComplexPart(final Entity entity) {
return ((CraftEntity) entity).getHandle() instanceof EntityComplexPart;
}
@Override
public void setInvulnerableTicks(final Player player, final int ticks) {
((CraftPlayer) player).getHandle().invulnerableTicks = ticks;
}
@Override
public boolean shouldBeZombie(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
return !mcPlayer.dead && mcPlayer.getHealth() <= 0 ;
}
@Override
public void dealFallDamage(final Player player, final double damage) {
((CraftPlayer) player).getHandle().damageEntity(DamageSource.FALL, (int) Math.round(damage));
}
@Override
public void setDead(final Player player, final int deathTicks) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
@Override
public boolean isComplexPart(final Entity entity) {
return ((CraftEntity) entity).getHandle() instanceof EntityComplexPart;
}
@Override
public boolean shouldBeZombie(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
return !mcPlayer.dead && mcPlayer.getHealth() <= 0 ;
}
@Override
public void setDead(final Player player, final int deathTicks) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
mcPlayer.deathTicks = deathTicks;
mcPlayer.dead = true;
}
@Override
public boolean hasGravity(final Material mat) {
switch(mat){
case SAND:
case GRAVEL:
return true;
default:
return false;
}
}
// @Override
// public void correctDirection(final Player player) {
// final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
// // Main direction.
// mcPlayer.yaw = LocUtil.correctYaw(mcPlayer.yaw);
// mcPlayer.pitch = LocUtil.correctPitch(mcPlayer.pitch);
// // Consider setting the lastYaw here too.
// }
}
@Override
public boolean hasGravity(final Material mat) {
switch(mat){
case SAND:
case GRAVEL:
return true;
default:
return false;
}
}
@Override
public AlmostBoolean dealFallDamageFiresAnEvent() {
return AlmostBoolean.MAYBE;
}
// @Override
// public void correctDirection(final Player player) {
// final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
// // Main direction.
// mcPlayer.yaw = LocUtil.correctYaw(mcPlayer.yaw);
// mcPlayer.pitch = LocUtil.correctPitch(mcPlayer.pitch);
// // Consider setting the lastYaw here too.
// }
}

View File

@ -24,146 +24,151 @@ import fr.neatmonster.nocheatplus.utilities.BlockCache;
import fr.neatmonster.nocheatplus.utilities.ReflectionUtil;
public class MCAccessCB2602 implements MCAccess{
/**
* Constructor to let it fail.
*/
public MCAccessCB2602(){
getCommandMap();
ReflectionUtil.checkMembers("net.minecraft.server.v1_4_R1.", new String[]{"Entity" , "dead"});
ReflectionUtil.checkMethodReturnTypesNoArgs(net.minecraft.server.v1_4_R1.Block.class,
new String[]{"v", "w", "x", "y", "z", "A"}, double.class);
}
@Override
public String getMCVersion() {
// 1_4_R1
return "1.4.7";
}
/**
* Constructor to let it fail.
*/
public MCAccessCB2602(){
getCommandMap();
ReflectionUtil.checkMembers("net.minecraft.server.v1_4_R1.", new String[]{"Entity" , "dead"});
ReflectionUtil.checkMethodReturnTypesNoArgs(net.minecraft.server.v1_4_R1.Block.class,
new String[]{"v", "w", "x", "y", "z", "A"}, double.class);
}
@Override
public String getServerVersionTag() {
return "CB2602";
}
@Override
public String getMCVersion() {
// 1_4_R1
return "1.4.7";
}
@Override
public CommandMap getCommandMap() {
return ((CraftServer) Bukkit.getServer()).getCommandMap();
}
@Override
public String getServerVersionTag() {
return "CB2602";
}
@Override
public BlockCache getBlockCache(final World world) {
return new BlockCacheCB2602(world);
}
@Override
public CommandMap getCommandMap() {
return ((CraftServer) Bukkit.getServer()).getCommandMap();
}
@Override
public double getHeight(final Entity entity) {
final net.minecraft.server.v1_4_R1.Entity mcEntity = ((CraftEntity) entity).getHandle();
final double entityHeight = Math.max(mcEntity.length, Math.max(mcEntity.height, mcEntity.boundingBox.e - mcEntity.boundingBox.b));
if (entity instanceof LivingEntity) {
return Math.max(((LivingEntity) entity).getEyeHeight(), entityHeight);
} else return entityHeight;
}
@Override
public BlockCache getBlockCache(final World world) {
return new BlockCacheCB2602(world);
}
@Override
public AlmostBoolean isBlockSolid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isSolid());
}
@Override
public double getHeight(final Entity entity) {
final net.minecraft.server.v1_4_R1.Entity mcEntity = ((CraftEntity) entity).getHandle();
final double entityHeight = Math.max(mcEntity.length, Math.max(mcEntity.height, mcEntity.boundingBox.e - mcEntity.boundingBox.b));
if (entity instanceof LivingEntity) {
return Math.max(((LivingEntity) entity).getEyeHeight(), entityHeight);
} else return entityHeight;
}
@Override
public AlmostBoolean isBlockLiquid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isLiquid());
}
@Override
public AlmostBoolean isBlockSolid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isSolid());
}
@Override
public double getWidth(final Entity entity) {
return ((CraftEntity) entity).getHandle().width;
}
@Override
public AlmostBoolean isBlockLiquid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isLiquid());
}
@Override
public AlmostBoolean isIllegalBounds(final Player player) {
final EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
if (entityPlayer.dead) return AlmostBoolean.NO;
final AxisAlignedBB box = entityPlayer.boundingBox;
if (!entityPlayer.isSleeping()){
// This can not really test stance but height of bounding box.
final double dY = Math.abs(box.e - box.b);
if (dY > 1.8) return AlmostBoolean.YES; // dY > 1.65D ||
if (dY < 0.1D && entityPlayer.length >= 0.1) return AlmostBoolean.YES;
}
return AlmostBoolean.MAYBE;
}
@Override
public double getWidth(final Entity entity) {
return ((CraftEntity) entity).getHandle().width;
}
@Override
public double getJumpAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.JUMP)) return mcPlayer.getEffect(MobEffectList.JUMP).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public AlmostBoolean isIllegalBounds(final Player player) {
final EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
if (entityPlayer.dead) return AlmostBoolean.NO;
final AxisAlignedBB box = entityPlayer.boundingBox;
if (!entityPlayer.isSleeping()){
// This can not really test stance but height of bounding box.
final double dY = Math.abs(box.e - box.b);
if (dY > 1.8) return AlmostBoolean.YES; // dY > 1.65D ||
if (dY < 0.1D && entityPlayer.length >= 0.1) return AlmostBoolean.YES;
}
return AlmostBoolean.MAYBE;
}
@Override
public double getFasterMovementAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.FASTER_MOVEMENT)) return mcPlayer.getEffect(MobEffectList.FASTER_MOVEMENT).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public double getJumpAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
@Override
public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks;
}
if (mcPlayer.hasEffect(MobEffectList.JUMP)) return mcPlayer.getEffect(MobEffectList.JUMP).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public void setInvulnerableTicks(final Player player, final int ticks) {
((CraftPlayer) player).getHandle().invulnerableTicks = ticks;
}
@Override
public double getFasterMovementAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.FASTER_MOVEMENT)) return mcPlayer.getEffect(MobEffectList.FASTER_MOVEMENT).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public void dealFallDamage(final Player player, final double damage) {
((CraftPlayer) player).getHandle().damageEntity(DamageSource.FALL, (int) Math.round(damage));
}
@Override
public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks;
}
@Override
public boolean isComplexPart(final Entity entity) {
return ((CraftEntity) entity).getHandle() instanceof EntityComplexPart;
}
@Override
public void setInvulnerableTicks(final Player player, final int ticks) {
((CraftPlayer) player).getHandle().invulnerableTicks = ticks;
}
@Override
public boolean shouldBeZombie(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
return !mcPlayer.dead && mcPlayer.getHealth() <= 0 ;
}
@Override
public void dealFallDamage(final Player player, final double damage) {
((CraftPlayer) player).getHandle().damageEntity(DamageSource.FALL, (int) Math.round(damage));
}
@Override
public void setDead(final Player player, final int deathTicks) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
@Override
public boolean isComplexPart(final Entity entity) {
return ((CraftEntity) entity).getHandle() instanceof EntityComplexPart;
}
@Override
public boolean shouldBeZombie(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
return !mcPlayer.dead && mcPlayer.getHealth() <= 0 ;
}
@Override
public void setDead(final Player player, final int deathTicks) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
mcPlayer.deathTicks = deathTicks;
mcPlayer.dead = true;
}
@Override
public boolean hasGravity(final Material mat) {
switch(mat){
case SAND:
case GRAVEL:
return true;
default:
return false;
}
}
// @Override
// public void correctDirection(final Player player) {
// final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
// // Main direction.
// mcPlayer.yaw = LocUtil.correctYaw(mcPlayer.yaw);
// mcPlayer.pitch = LocUtil.correctPitch(mcPlayer.pitch);
// // Consider setting the lastYaw here too.
// }
}
@Override
public boolean hasGravity(final Material mat) {
switch(mat){
case SAND:
case GRAVEL:
return true;
default:
return false;
}
}
@Override
public AlmostBoolean dealFallDamageFiresAnEvent() {
return AlmostBoolean.MAYBE;
}
// @Override
// public void correctDirection(final Player player) {
// final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
// // Main direction.
// mcPlayer.yaw = LocUtil.correctYaw(mcPlayer.yaw);
// mcPlayer.pitch = LocUtil.correctPitch(mcPlayer.pitch);
// // Consider setting the lastYaw here too.
// }
}

View File

@ -24,147 +24,152 @@ import fr.neatmonster.nocheatplus.utilities.BlockCache;
import fr.neatmonster.nocheatplus.utilities.ReflectionUtil;
public class MCAccessCB2645 implements MCAccess{
/**
* Constructor to let it fail.
*/
public MCAccessCB2645(){
getCommandMap();
ReflectionUtil.checkMembers("net.minecraft.server.v1_5_R1.", new String[]{"Entity" , "dead"});
ReflectionUtil.checkMethodReturnTypesNoArgs(net.minecraft.server.v1_5_R1.Block.class,
new String[]{"u", "v", "w", "x", "y", "z"}, double.class);
}
@Override
public String getMCVersion() {
// 1_5_R1
return "1.5";
}
/**
* Constructor to let it fail.
*/
public MCAccessCB2645(){
getCommandMap();
ReflectionUtil.checkMembers("net.minecraft.server.v1_5_R1.", new String[]{"Entity" , "dead"});
ReflectionUtil.checkMethodReturnTypesNoArgs(net.minecraft.server.v1_5_R1.Block.class,
new String[]{"u", "v", "w", "x", "y", "z"}, double.class);
}
@Override
public String getServerVersionTag() {
return "CB2645";
}
@Override
public String getMCVersion() {
// 1_5_R1
return "1.5";
}
@Override
public CommandMap getCommandMap() {
return ((CraftServer) Bukkit.getServer()).getCommandMap();
}
@Override
public String getServerVersionTag() {
return "CB2645";
}
@Override
public BlockCache getBlockCache(final World world) {
return new BlockCacheCB2645(world);
}
@Override
public CommandMap getCommandMap() {
return ((CraftServer) Bukkit.getServer()).getCommandMap();
}
@Override
public double getHeight(final Entity entity) {
final net.minecraft.server.v1_5_R1.Entity mcEntity = ((CraftEntity) entity).getHandle();
final double entityHeight = Math.max(mcEntity.length, Math.max(mcEntity.height, mcEntity.boundingBox.e - mcEntity.boundingBox.b));
if (entity instanceof LivingEntity) {
return Math.max(((LivingEntity) entity).getEyeHeight(), entityHeight);
} else return entityHeight;
}
@Override
public BlockCache getBlockCache(final World world) {
return new BlockCacheCB2645(world);
}
@Override
public AlmostBoolean isBlockSolid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isSolid());
}
@Override
public double getHeight(final Entity entity) {
final net.minecraft.server.v1_5_R1.Entity mcEntity = ((CraftEntity) entity).getHandle();
final double entityHeight = Math.max(mcEntity.length, Math.max(mcEntity.height, mcEntity.boundingBox.e - mcEntity.boundingBox.b));
if (entity instanceof LivingEntity) {
return Math.max(((LivingEntity) entity).getEyeHeight(), entityHeight);
} else return entityHeight;
}
@Override
public AlmostBoolean isBlockLiquid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isLiquid());
}
@Override
public AlmostBoolean isBlockSolid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isSolid());
}
@Override
public double getWidth(final Entity entity) {
return ((CraftEntity) entity).getHandle().width;
}
@Override
public AlmostBoolean isBlockLiquid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isLiquid());
}
@Override
public AlmostBoolean isIllegalBounds(final Player player) {
final EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
if (entityPlayer.dead) return AlmostBoolean.NO;
// TODO: Does this need a method call for the "real" box? Might be no problem during moving events, though.
final AxisAlignedBB box = entityPlayer.boundingBox;
if (!entityPlayer.isSleeping()){
// This can not really test stance but height of bounding box.
final double dY = Math.abs(box.e - box.b);
if (dY > 1.8) return AlmostBoolean.YES; // dY > 1.65D ||
if (dY < 0.1D && entityPlayer.length >= 0.1) return AlmostBoolean.YES;
}
return AlmostBoolean.MAYBE;
}
@Override
public double getWidth(final Entity entity) {
return ((CraftEntity) entity).getHandle().width;
}
@Override
public double getJumpAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.JUMP)) return mcPlayer.getEffect(MobEffectList.JUMP).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public AlmostBoolean isIllegalBounds(final Player player) {
final EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
if (entityPlayer.dead) return AlmostBoolean.NO;
// TODO: Does this need a method call for the "real" box? Might be no problem during moving events, though.
final AxisAlignedBB box = entityPlayer.boundingBox;
if (!entityPlayer.isSleeping()){
// This can not really test stance but height of bounding box.
final double dY = Math.abs(box.e - box.b);
if (dY > 1.8) return AlmostBoolean.YES; // dY > 1.65D ||
if (dY < 0.1D && entityPlayer.length >= 0.1) return AlmostBoolean.YES;
}
return AlmostBoolean.MAYBE;
}
@Override
public double getFasterMovementAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.FASTER_MOVEMENT)) return mcPlayer.getEffect(MobEffectList.FASTER_MOVEMENT).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public double getJumpAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
@Override
public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks;
}
if (mcPlayer.hasEffect(MobEffectList.JUMP)) return mcPlayer.getEffect(MobEffectList.JUMP).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public void setInvulnerableTicks(final Player player, final int ticks) {
((CraftPlayer) player).getHandle().invulnerableTicks = ticks;
}
@Override
public double getFasterMovementAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.FASTER_MOVEMENT)) return mcPlayer.getEffect(MobEffectList.FASTER_MOVEMENT).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public void dealFallDamage(final Player player, final double damage) {
((CraftPlayer) player).getHandle().damageEntity(DamageSource.FALL, (int) Math.round(damage));
}
@Override
public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks;
}
@Override
public boolean isComplexPart(final Entity entity) {
return ((CraftEntity) entity).getHandle() instanceof EntityComplexPart;
}
@Override
public void setInvulnerableTicks(final Player player, final int ticks) {
((CraftPlayer) player).getHandle().invulnerableTicks = ticks;
}
@Override
public boolean shouldBeZombie(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
return !mcPlayer.dead && mcPlayer.getHealth() <= 0 ;
}
@Override
public void dealFallDamage(final Player player, final double damage) {
((CraftPlayer) player).getHandle().damageEntity(DamageSource.FALL, (int) Math.round(damage));
}
@Override
public void setDead(final Player player, final int deathTicks) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
@Override
public boolean isComplexPart(final Entity entity) {
return ((CraftEntity) entity).getHandle() instanceof EntityComplexPart;
}
@Override
public boolean shouldBeZombie(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
return !mcPlayer.dead && mcPlayer.getHealth() <= 0 ;
}
@Override
public void setDead(final Player player, final int deathTicks) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
mcPlayer.deathTicks = deathTicks;
mcPlayer.dead = true;
}
@Override
public boolean hasGravity(final Material mat) {
switch(mat){
case SAND:
case GRAVEL:
return true;
default:
return false;
}
}
// @Override
// public void correctDirection(final Player player) {
// final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
// // Main direction.
// mcPlayer.yaw = LocUtil.correctYaw(mcPlayer.yaw);
// mcPlayer.pitch = LocUtil.correctPitch(mcPlayer.pitch);
// // Consider setting the lastYaw here too.
// }
}
@Override
public boolean hasGravity(final Material mat) {
switch(mat){
case SAND:
case GRAVEL:
return true;
default:
return false;
}
}
@Override
public AlmostBoolean dealFallDamageFiresAnEvent() {
return AlmostBoolean.MAYBE;
}
// @Override
// public void correctDirection(final Player player) {
// final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
// // Main direction.
// mcPlayer.yaw = LocUtil.correctYaw(mcPlayer.yaw);
// mcPlayer.pitch = LocUtil.correctPitch(mcPlayer.pitch);
// // Consider setting the lastYaw here too.
// }
}

View File

@ -24,149 +24,154 @@ import fr.neatmonster.nocheatplus.utilities.BlockCache;
import fr.neatmonster.nocheatplus.utilities.ReflectionUtil;
public class MCAccessCB2691 implements MCAccess{
/**
* Constructor to let it fail.
*/
public MCAccessCB2691(){
getCommandMap();
ReflectionUtil.checkMembers("net.minecraft.server.v1_5_R2.", new String[]{"Entity" , "dead"});
ReflectionUtil.checkMethodReturnTypesNoArgs(net.minecraft.server.v1_5_R2.Block.class,
new String[]{"u", "v", "w", "x", "y", "z"}, double.class);
}
@Override
public String getMCVersion() {
// 1_5_R2
return "1.5.1";
}
/**
* Constructor to let it fail.
*/
public MCAccessCB2691(){
getCommandMap();
ReflectionUtil.checkMembers("net.minecraft.server.v1_5_R2.", new String[]{"Entity" , "dead"});
ReflectionUtil.checkMethodReturnTypesNoArgs(net.minecraft.server.v1_5_R2.Block.class,
new String[]{"u", "v", "w", "x", "y", "z"}, double.class);
}
@Override
public String getServerVersionTag() {
return "CB2691";
}
@Override
public String getMCVersion() {
// 1_5_R2
return "1.5.1";
}
@Override
public CommandMap getCommandMap() {
return ((CraftServer) Bukkit.getServer()).getCommandMap();
}
@Override
public String getServerVersionTag() {
return "CB2691";
}
@Override
public BlockCache getBlockCache(final World world) {
return new BlockCacheCB2691(world);
}
@Override
public CommandMap getCommandMap() {
return ((CraftServer) Bukkit.getServer()).getCommandMap();
}
@Override
public double getHeight(final Entity entity) {
final net.minecraft.server.v1_5_R2.Entity mcEntity = ((CraftEntity) entity).getHandle();
final double entityHeight = Math.max(mcEntity.length, Math.max(mcEntity.height, mcEntity.boundingBox.e - mcEntity.boundingBox.b));
if (entity instanceof LivingEntity) {
return Math.max(((LivingEntity) entity).getEyeHeight(), entityHeight);
} else {
return entityHeight;
}
}
@Override
public BlockCache getBlockCache(final World world) {
return new BlockCacheCB2691(world);
}
@Override
public AlmostBoolean isBlockSolid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isSolid());
}
@Override
public double getHeight(final Entity entity) {
final net.minecraft.server.v1_5_R2.Entity mcEntity = ((CraftEntity) entity).getHandle();
final double entityHeight = Math.max(mcEntity.length, Math.max(mcEntity.height, mcEntity.boundingBox.e - mcEntity.boundingBox.b));
if (entity instanceof LivingEntity) {
return Math.max(((LivingEntity) entity).getEyeHeight(), entityHeight);
} else {
return entityHeight;
}
}
@Override
public AlmostBoolean isBlockLiquid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isLiquid());
}
@Override
public AlmostBoolean isBlockSolid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isSolid());
}
@Override
public double getWidth(final Entity entity) {
return ((CraftEntity) entity).getHandle().width;
}
@Override
public AlmostBoolean isBlockLiquid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isLiquid());
}
@Override
public AlmostBoolean isIllegalBounds(final Player player) {
final EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
if (entityPlayer.dead) return AlmostBoolean.NO;
// TODO: Does this need a method call for the "real" box? Might be no problem during moving events, though.
final AxisAlignedBB box = entityPlayer.boundingBox;
if (!entityPlayer.isSleeping()){
// This can not really test stance but height of bounding box.
final double dY = Math.abs(box.e - box.b);
if (dY > 1.8) return AlmostBoolean.YES; // dY > 1.65D ||
if (dY < 0.1D && entityPlayer.length >= 0.1) return AlmostBoolean.YES;
}
return AlmostBoolean.MAYBE;
}
@Override
public double getWidth(final Entity entity) {
return ((CraftEntity) entity).getHandle().width;
}
@Override
public double getJumpAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.JUMP)) return mcPlayer.getEffect(MobEffectList.JUMP).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public AlmostBoolean isIllegalBounds(final Player player) {
final EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
if (entityPlayer.dead) return AlmostBoolean.NO;
// TODO: Does this need a method call for the "real" box? Might be no problem during moving events, though.
final AxisAlignedBB box = entityPlayer.boundingBox;
if (!entityPlayer.isSleeping()){
// This can not really test stance but height of bounding box.
final double dY = Math.abs(box.e - box.b);
if (dY > 1.8) return AlmostBoolean.YES; // dY > 1.65D ||
if (dY < 0.1D && entityPlayer.length >= 0.1) return AlmostBoolean.YES;
}
return AlmostBoolean.MAYBE;
}
@Override
public double getFasterMovementAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.FASTER_MOVEMENT)) return mcPlayer.getEffect(MobEffectList.FASTER_MOVEMENT).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public double getJumpAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
@Override
public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks;
}
if (mcPlayer.hasEffect(MobEffectList.JUMP)) return mcPlayer.getEffect(MobEffectList.JUMP).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public void setInvulnerableTicks(final Player player, final int ticks) {
((CraftPlayer) player).getHandle().invulnerableTicks = ticks;
}
@Override
public double getFasterMovementAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.FASTER_MOVEMENT)) return mcPlayer.getEffect(MobEffectList.FASTER_MOVEMENT).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public void dealFallDamage(final Player player, final double damage) {
((CraftPlayer) player).getHandle().damageEntity(DamageSource.FALL, (int) Math.round(damage));
}
@Override
public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks;
}
@Override
public boolean isComplexPart(final Entity entity) {
return ((CraftEntity) entity).getHandle() instanceof EntityComplexPart;
}
@Override
public void setInvulnerableTicks(final Player player, final int ticks) {
((CraftPlayer) player).getHandle().invulnerableTicks = ticks;
}
@Override
public boolean shouldBeZombie(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
return !mcPlayer.dead && mcPlayer.getHealth() <= 0 ;
}
@Override
public void dealFallDamage(final Player player, final double damage) {
((CraftPlayer) player).getHandle().damageEntity(DamageSource.FALL, (int) Math.round(damage));
}
@Override
public void setDead(final Player player, final int deathTicks) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
@Override
public boolean isComplexPart(final Entity entity) {
return ((CraftEntity) entity).getHandle() instanceof EntityComplexPart;
}
@Override
public boolean shouldBeZombie(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
return !mcPlayer.dead && mcPlayer.getHealth() <= 0 ;
}
@Override
public void setDead(final Player player, final int deathTicks) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
mcPlayer.deathTicks = deathTicks;
mcPlayer.dead = true;
}
@Override
public boolean hasGravity(final Material mat) {
switch(mat){
case SAND:
case GRAVEL:
return true;
default:
return false;
}
}
// @Override
// public void correctDirection(final Player player) {
// final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
// // Main direction.
// mcPlayer.yaw = LocUtil.correctYaw(mcPlayer.yaw);
// mcPlayer.pitch = LocUtil.correctPitch(mcPlayer.pitch);
// // Consider setting the lastYaw here too.
// }
}
@Override
public boolean hasGravity(final Material mat) {
switch(mat){
case SAND:
case GRAVEL:
return true;
default:
return false;
}
}
@Override
public AlmostBoolean dealFallDamageFiresAnEvent() {
return AlmostBoolean.MAYBE;
}
// @Override
// public void correctDirection(final Player player) {
// final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
// // Main direction.
// mcPlayer.yaw = LocUtil.correctYaw(mcPlayer.yaw);
// mcPlayer.pitch = LocUtil.correctPitch(mcPlayer.pitch);
// // Consider setting the lastYaw here too.
// }
}

View File

@ -24,148 +24,153 @@ import fr.neatmonster.nocheatplus.utilities.BlockCache;
import fr.neatmonster.nocheatplus.utilities.ReflectionUtil;
public class MCAccessCB2763 implements MCAccess{
/**
* Constructor to let it fail.
*/
public MCAccessCB2763(){
getCommandMap();
ReflectionUtil.checkMembers("net.minecraft.server.v1_5_R3.", new String[]{"Entity" , "dead"});
ReflectionUtil.checkMethodReturnTypesNoArgs(net.minecraft.server.v1_5_R3.Block.class,
new String[]{"u", "v", "w", "x", "y", "z"}, double.class);
}
@Override
public String getMCVersion() {
// 1_5_R3
return "1.5.2";
}
/**
* Constructor to let it fail.
*/
public MCAccessCB2763(){
getCommandMap();
ReflectionUtil.checkMembers("net.minecraft.server.v1_5_R3.", new String[]{"Entity" , "dead"});
ReflectionUtil.checkMethodReturnTypesNoArgs(net.minecraft.server.v1_5_R3.Block.class,
new String[]{"u", "v", "w", "x", "y", "z"}, double.class);
}
@Override
public String getServerVersionTag() {
return "CB2763";
}
@Override
public String getMCVersion() {
// 1_5_R3
return "1.5.2";
}
@Override
public CommandMap getCommandMap() {
return ((CraftServer) Bukkit.getServer()).getCommandMap();
}
@Override
public String getServerVersionTag() {
return "CB2763";
}
@Override
public BlockCache getBlockCache(final World world) {
return new BlockCacheCB2763(world);
}
@Override
public CommandMap getCommandMap() {
return ((CraftServer) Bukkit.getServer()).getCommandMap();
}
@Override
public double getHeight(final Entity entity) {
final net.minecraft.server.v1_5_R3.Entity mcEntity = ((CraftEntity) entity).getHandle();
final double entityHeight = Math.max(mcEntity.length, Math.max(mcEntity.height, mcEntity.boundingBox.e - mcEntity.boundingBox.b));
if (entity instanceof LivingEntity) {
return Math.max(((LivingEntity) entity).getEyeHeight(), entityHeight);
} else return entityHeight;
}
@Override
public BlockCache getBlockCache(final World world) {
return new BlockCacheCB2763(world);
}
@Override
public AlmostBoolean isBlockSolid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isSolid());
}
@Override
public double getHeight(final Entity entity) {
final net.minecraft.server.v1_5_R3.Entity mcEntity = ((CraftEntity) entity).getHandle();
final double entityHeight = Math.max(mcEntity.length, Math.max(mcEntity.height, mcEntity.boundingBox.e - mcEntity.boundingBox.b));
if (entity instanceof LivingEntity) {
return Math.max(((LivingEntity) entity).getEyeHeight(), entityHeight);
} else return entityHeight;
}
@Override
public AlmostBoolean isBlockLiquid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isLiquid());
}
@Override
public AlmostBoolean isBlockSolid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isSolid());
}
@Override
public double getWidth(final Entity entity) {
return ((CraftEntity) entity).getHandle().width;
}
@Override
public AlmostBoolean isBlockLiquid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isLiquid());
}
@Override
public AlmostBoolean isIllegalBounds(final Player player) {
final EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
if (entityPlayer.dead) return AlmostBoolean.NO;
// TODO: Does this need a method call for the "real" box? Might be no problem during moving events, though.
final AxisAlignedBB box = entityPlayer.boundingBox;
if (!entityPlayer.isSleeping()){
// This can not really test stance but height of bounding box.
final double dY = Math.abs(box.e - box.b);
if (dY > 1.8) return AlmostBoolean.YES; // dY > 1.65D ||
if (dY < 0.1D && entityPlayer.length >= 0.1) return AlmostBoolean.YES;
}
return AlmostBoolean.MAYBE;
}
@Override
public double getWidth(final Entity entity) {
return ((CraftEntity) entity).getHandle().width;
}
@Override
public double getJumpAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.JUMP)) return mcPlayer.getEffect(MobEffectList.JUMP).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public AlmostBoolean isIllegalBounds(final Player player) {
final EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
if (entityPlayer.dead) return AlmostBoolean.NO;
// TODO: Does this need a method call for the "real" box? Might be no problem during moving events, though.
final AxisAlignedBB box = entityPlayer.boundingBox;
if (!entityPlayer.isSleeping()){
// This can not really test stance but height of bounding box.
final double dY = Math.abs(box.e - box.b);
if (dY > 1.8) return AlmostBoolean.YES; // dY > 1.65D ||
if (dY < 0.1D && entityPlayer.length >= 0.1) return AlmostBoolean.YES;
}
return AlmostBoolean.MAYBE;
}
@Override
public double getFasterMovementAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.FASTER_MOVEMENT)) return mcPlayer.getEffect(MobEffectList.FASTER_MOVEMENT).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public double getJumpAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
@Override
public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks;
}
if (mcPlayer.hasEffect(MobEffectList.JUMP)) return mcPlayer.getEffect(MobEffectList.JUMP).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public void setInvulnerableTicks(final Player player, final int ticks) {
((CraftPlayer) player).getHandle().invulnerableTicks = ticks;
}
@Override
public double getFasterMovementAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.FASTER_MOVEMENT)) return mcPlayer.getEffect(MobEffectList.FASTER_MOVEMENT).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public void dealFallDamage(final Player player, final double damage) {
((CraftPlayer) player).getHandle().damageEntity(DamageSource.FALL, (int) Math.round(damage));
}
@Override
public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks;
}
@Override
public boolean isComplexPart(final Entity entity) {
return ((CraftEntity) entity).getHandle() instanceof EntityComplexPart;
}
@Override
public void setInvulnerableTicks(final Player player, final int ticks) {
((CraftPlayer) player).getHandle().invulnerableTicks = ticks;
}
@Override
public boolean shouldBeZombie(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
return !mcPlayer.dead && mcPlayer.getHealth() <= 0 ;
}
@Override
public void dealFallDamage(final Player player, final double damage) {
((CraftPlayer) player).getHandle().damageEntity(DamageSource.FALL, (int) Math.round(damage));
}
@Override
public void setDead(final Player player, final int deathTicks) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
@Override
public boolean isComplexPart(final Entity entity) {
return ((CraftEntity) entity).getHandle() instanceof EntityComplexPart;
}
@Override
public boolean shouldBeZombie(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
return !mcPlayer.dead && mcPlayer.getHealth() <= 0 ;
}
@Override
public void setDead(final Player player, final int deathTicks) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
mcPlayer.deathTicks = deathTicks;
mcPlayer.dead = true;
}
@Override
public boolean hasGravity(final Material mat) {
// TODO: TEST: return mat.hasGravity();
switch(mat){
case SAND:
case GRAVEL:
return true;
default:
return false;
}
}
// @Override
// public void correctDirection(final Player player) {
// final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
// // Main direction.
// mcPlayer.yaw = LocUtil.correctYaw(mcPlayer.yaw);
// mcPlayer.pitch = LocUtil.correctPitch(mcPlayer.pitch);
// // Consider setting the lastYaw here too.
// }
}
@Override
public boolean hasGravity(final Material mat) {
// TODO: TEST: return mat.hasGravity();
switch(mat){
case SAND:
case GRAVEL:
return true;
default:
return false;
}
}
@Override
public AlmostBoolean dealFallDamageFiresAnEvent() {
return AlmostBoolean.MAYBE;
}
// @Override
// public void correctDirection(final Player player) {
// final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
// // Main direction.
// mcPlayer.yaw = LocUtil.correctYaw(mcPlayer.yaw);
// mcPlayer.pitch = LocUtil.correctPitch(mcPlayer.pitch);
// // Consider setting the lastYaw here too.
// }
}

View File

@ -24,142 +24,147 @@ import fr.neatmonster.nocheatplus.utilities.BlockCache;
import fr.neatmonster.nocheatplus.utilities.ReflectionUtil;
public class MCAccessCB2794 implements MCAccess{
/**
* Constructor to let it fail.
*/
public MCAccessCB2794(){
getCommandMap();
ReflectionUtil.checkMembers("net.minecraft.server.v1_6_R1.", new String[]{"Entity" , "dead"});
ReflectionUtil.checkMethodReturnTypesNoArgs(net.minecraft.server.v1_6_R1.Block.class,
new String[]{"u", "v", "w", "x", "y", "z"}, double.class);
}
@Override
public String getMCVersion() {
// 1_6_R1
return "1.6.1";
}
/**
* Constructor to let it fail.
*/
public MCAccessCB2794(){
getCommandMap();
ReflectionUtil.checkMembers("net.minecraft.server.v1_6_R1.", new String[]{"Entity" , "dead"});
ReflectionUtil.checkMethodReturnTypesNoArgs(net.minecraft.server.v1_6_R1.Block.class,
new String[]{"u", "v", "w", "x", "y", "z"}, double.class);
}
@Override
public String getServerVersionTag() {
return "CB2794";
}
@Override
public String getMCVersion() {
// 1_6_R1
return "1.6.1";
}
@Override
public CommandMap getCommandMap() {
return ((CraftServer) Bukkit.getServer()).getCommandMap();
}
@Override
public String getServerVersionTag() {
return "CB2794";
}
@Override
public BlockCache getBlockCache(final World world) {
return new BlockCacheCB2794(world);
}
@Override
public CommandMap getCommandMap() {
return ((CraftServer) Bukkit.getServer()).getCommandMap();
}
@Override
public double getHeight(final Entity entity) {
final net.minecraft.server.v1_6_R1.Entity mcEntity = ((CraftEntity) entity).getHandle();
final double entityHeight = Math.max(mcEntity.length, Math.max(mcEntity.height, mcEntity.boundingBox.e - mcEntity.boundingBox.b));
if (entity instanceof LivingEntity) {
return Math.max(((LivingEntity) entity).getEyeHeight(), entityHeight);
} else return entityHeight;
}
@Override
public BlockCache getBlockCache(final World world) {
return new BlockCacheCB2794(world);
}
@Override
public AlmostBoolean isBlockSolid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isSolid());
}
@Override
public double getHeight(final Entity entity) {
final net.minecraft.server.v1_6_R1.Entity mcEntity = ((CraftEntity) entity).getHandle();
final double entityHeight = Math.max(mcEntity.length, Math.max(mcEntity.height, mcEntity.boundingBox.e - mcEntity.boundingBox.b));
if (entity instanceof LivingEntity) {
return Math.max(((LivingEntity) entity).getEyeHeight(), entityHeight);
} else return entityHeight;
}
@Override
public AlmostBoolean isBlockLiquid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isLiquid());
}
@Override
public AlmostBoolean isBlockSolid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isSolid());
}
@Override
public double getWidth(final Entity entity) {
return ((CraftEntity) entity).getHandle().width;
}
@Override
public AlmostBoolean isBlockLiquid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isLiquid());
}
@Override
public AlmostBoolean isIllegalBounds(final Player player) {
final EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
if (entityPlayer.dead) return AlmostBoolean.NO;
// TODO: Does this need a method call for the "real" box? Might be no problem during moving events, though.
final AxisAlignedBB box = entityPlayer.boundingBox;
if (!entityPlayer.isSleeping()){
// This can not really test stance but height of bounding box.
final double dY = Math.abs(box.e - box.b);
if (dY > 1.8) return AlmostBoolean.YES; // dY > 1.65D ||
if (dY < 0.1D && entityPlayer.length >= 0.1) return AlmostBoolean.YES;
}
return AlmostBoolean.MAYBE;
}
@Override
public double getWidth(final Entity entity) {
return ((CraftEntity) entity).getHandle().width;
}
@Override
public double getJumpAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.JUMP)) return mcPlayer.getEffect(MobEffectList.JUMP).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public AlmostBoolean isIllegalBounds(final Player player) {
final EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
if (entityPlayer.dead) return AlmostBoolean.NO;
// TODO: Does this need a method call for the "real" box? Might be no problem during moving events, though.
final AxisAlignedBB box = entityPlayer.boundingBox;
if (!entityPlayer.isSleeping()){
// This can not really test stance but height of bounding box.
final double dY = Math.abs(box.e - box.b);
if (dY > 1.8) return AlmostBoolean.YES; // dY > 1.65D ||
if (dY < 0.1D && entityPlayer.length >= 0.1) return AlmostBoolean.YES;
}
return AlmostBoolean.MAYBE;
}
@Override
public double getFasterMovementAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.FASTER_MOVEMENT)) return mcPlayer.getEffect(MobEffectList.FASTER_MOVEMENT).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public double getJumpAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
@Override
public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks;
}
if (mcPlayer.hasEffect(MobEffectList.JUMP)) return mcPlayer.getEffect(MobEffectList.JUMP).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public void setInvulnerableTicks(final Player player, final int ticks) {
((CraftPlayer) player).getHandle().invulnerableTicks = ticks;
}
@Override
public double getFasterMovementAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.FASTER_MOVEMENT)) return mcPlayer.getEffect(MobEffectList.FASTER_MOVEMENT).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public void dealFallDamage(final Player player, final double damage) {
((CraftPlayer) player).getHandle().damageEntity(DamageSource.FALL, (float) damage);
}
@Override
public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks;
}
@Override
public boolean isComplexPart(final Entity entity) {
return ((CraftEntity) entity).getHandle() instanceof EntityComplexPart;
}
@Override
public void setInvulnerableTicks(final Player player, final int ticks) {
((CraftPlayer) player).getHandle().invulnerableTicks = ticks;
}
@Override
public boolean shouldBeZombie(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
return !mcPlayer.dead && mcPlayer.getHealth() <= 0.0f ;
}
@Override
public void dealFallDamage(final Player player, final double damage) {
((CraftPlayer) player).getHandle().damageEntity(DamageSource.FALL, (float) damage);
}
@Override
public void setDead(final Player player, final int deathTicks) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
@Override
public boolean isComplexPart(final Entity entity) {
return ((CraftEntity) entity).getHandle() instanceof EntityComplexPart;
}
@Override
public boolean shouldBeZombie(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
return !mcPlayer.dead && mcPlayer.getHealth() <= 0.0f ;
}
@Override
public void setDead(final Player player, final int deathTicks) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
mcPlayer.deathTicks = deathTicks;
mcPlayer.dead = true;
}
@Override
public boolean hasGravity(final Material mat) {
// TODO: Test/check.
return mat.hasGravity();
}
// @Override
// public void correctDirection(final Player player) {
// final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
// // Main direction.
// mcPlayer.yaw = LocUtil.correctYaw(mcPlayer.yaw);
// mcPlayer.pitch = LocUtil.correctPitch(mcPlayer.pitch);
// // Consider setting the lastYaw here too.
// }
}
@Override
public boolean hasGravity(final Material mat) {
// TODO: Test/check.
return mat.hasGravity();
}
@Override
public AlmostBoolean dealFallDamageFiresAnEvent() {
return AlmostBoolean.MAYBE;
}
// @Override
// public void correctDirection(final Player player) {
// final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
// // Main direction.
// mcPlayer.yaw = LocUtil.correctYaw(mcPlayer.yaw);
// mcPlayer.pitch = LocUtil.correctPitch(mcPlayer.pitch);
// // Consider setting the lastYaw here too.
// }
}

View File

@ -24,143 +24,148 @@ import fr.neatmonster.nocheatplus.utilities.BlockCache;
import fr.neatmonster.nocheatplus.utilities.ReflectionUtil;
public class MCAccessCB2808 implements MCAccess{
/**
* Constructor to let it fail.
*/
public MCAccessCB2808(){
getCommandMap();
ReflectionUtil.checkMembers("net.minecraft.server.v1_6_R2.", new String[]{"Entity" , "dead"});
ReflectionUtil.checkMethodReturnTypesNoArgs(net.minecraft.server.v1_6_R2.Block.class,
new String[]{"u", "v", "w", "x", "y", "z"}, double.class);
// TODO: Nail it down further.
}
@Override
public String getMCVersion() {
// 1_6_R2
return "1.6.2";
}
/**
* Constructor to let it fail.
*/
public MCAccessCB2808(){
getCommandMap();
ReflectionUtil.checkMembers("net.minecraft.server.v1_6_R2.", new String[]{"Entity" , "dead"});
ReflectionUtil.checkMethodReturnTypesNoArgs(net.minecraft.server.v1_6_R2.Block.class,
new String[]{"u", "v", "w", "x", "y", "z"}, double.class);
// TODO: Nail it down further.
}
@Override
public String getServerVersionTag() {
return "CB2808";
}
@Override
public String getMCVersion() {
// 1_6_R2
return "1.6.2";
}
@Override
public CommandMap getCommandMap() {
return ((CraftServer) Bukkit.getServer()).getCommandMap();
}
@Override
public String getServerVersionTag() {
return "CB2808";
}
@Override
public BlockCache getBlockCache(final World world) {
return new BlockCacheCB2808(world);
}
@Override
public CommandMap getCommandMap() {
return ((CraftServer) Bukkit.getServer()).getCommandMap();
}
@Override
public double getHeight(final Entity entity) {
final net.minecraft.server.v1_6_R2.Entity mcEntity = ((CraftEntity) entity).getHandle();
final double entityHeight = Math.max(mcEntity.length, Math.max(mcEntity.height, mcEntity.boundingBox.e - mcEntity.boundingBox.b));
if (entity instanceof LivingEntity) {
return Math.max(((LivingEntity) entity).getEyeHeight(), entityHeight);
} else return entityHeight;
}
@Override
public BlockCache getBlockCache(final World world) {
return new BlockCacheCB2808(world);
}
@Override
public AlmostBoolean isBlockSolid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isSolid());
}
@Override
public double getHeight(final Entity entity) {
final net.minecraft.server.v1_6_R2.Entity mcEntity = ((CraftEntity) entity).getHandle();
final double entityHeight = Math.max(mcEntity.length, Math.max(mcEntity.height, mcEntity.boundingBox.e - mcEntity.boundingBox.b));
if (entity instanceof LivingEntity) {
return Math.max(((LivingEntity) entity).getEyeHeight(), entityHeight);
} else return entityHeight;
}
@Override
public AlmostBoolean isBlockLiquid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isLiquid());
}
@Override
public AlmostBoolean isBlockSolid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isSolid());
}
@Override
public double getWidth(final Entity entity) {
return ((CraftEntity) entity).getHandle().width;
}
@Override
public AlmostBoolean isBlockLiquid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isLiquid());
}
@Override
public AlmostBoolean isIllegalBounds(final Player player) {
final EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
if (entityPlayer.dead) return AlmostBoolean.NO;
// TODO: Does this need a method call for the "real" box? Might be no problem during moving events, though.
final AxisAlignedBB box = entityPlayer.boundingBox;
if (!entityPlayer.isSleeping()){
// This can not really test stance but height of bounding box.
final double dY = Math.abs(box.e - box.b);
if (dY > 1.8) return AlmostBoolean.YES; // dY > 1.65D ||
if (dY < 0.1D && entityPlayer.length >= 0.1) return AlmostBoolean.YES;
}
return AlmostBoolean.MAYBE;
}
@Override
public double getWidth(final Entity entity) {
return ((CraftEntity) entity).getHandle().width;
}
@Override
public double getJumpAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.JUMP)) return mcPlayer.getEffect(MobEffectList.JUMP).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public AlmostBoolean isIllegalBounds(final Player player) {
final EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
if (entityPlayer.dead) return AlmostBoolean.NO;
// TODO: Does this need a method call for the "real" box? Might be no problem during moving events, though.
final AxisAlignedBB box = entityPlayer.boundingBox;
if (!entityPlayer.isSleeping()){
// This can not really test stance but height of bounding box.
final double dY = Math.abs(box.e - box.b);
if (dY > 1.8) return AlmostBoolean.YES; // dY > 1.65D ||
if (dY < 0.1D && entityPlayer.length >= 0.1) return AlmostBoolean.YES;
}
return AlmostBoolean.MAYBE;
}
@Override
public double getFasterMovementAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.FASTER_MOVEMENT)) return mcPlayer.getEffect(MobEffectList.FASTER_MOVEMENT).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public double getJumpAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
@Override
public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks;
}
if (mcPlayer.hasEffect(MobEffectList.JUMP)) return mcPlayer.getEffect(MobEffectList.JUMP).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public void setInvulnerableTicks(final Player player, final int ticks) {
((CraftPlayer) player).getHandle().invulnerableTicks = ticks;
}
@Override
public double getFasterMovementAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.FASTER_MOVEMENT)) return mcPlayer.getEffect(MobEffectList.FASTER_MOVEMENT).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public void dealFallDamage(final Player player, final double damage) {
((CraftPlayer) player).getHandle().damageEntity(DamageSource.FALL, (float) damage);
}
@Override
public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks;
}
@Override
public boolean isComplexPart(final Entity entity) {
return ((CraftEntity) entity).getHandle() instanceof EntityComplexPart;
}
@Override
public void setInvulnerableTicks(final Player player, final int ticks) {
((CraftPlayer) player).getHandle().invulnerableTicks = ticks;
}
@Override
public boolean shouldBeZombie(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
return !mcPlayer.dead && mcPlayer.getHealth() <= 0.0f ;
}
@Override
public void dealFallDamage(final Player player, final double damage) {
((CraftPlayer) player).getHandle().damageEntity(DamageSource.FALL, (float) damage);
}
@Override
public void setDead(final Player player, final int deathTicks) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
@Override
public boolean isComplexPart(final Entity entity) {
return ((CraftEntity) entity).getHandle() instanceof EntityComplexPart;
}
@Override
public boolean shouldBeZombie(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
return !mcPlayer.dead && mcPlayer.getHealth() <= 0.0f ;
}
@Override
public void setDead(final Player player, final int deathTicks) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
mcPlayer.deathTicks = deathTicks;
mcPlayer.dead = true;
}
@Override
public boolean hasGravity(final Material mat) {
// TODO: Test/check.
return mat.hasGravity();
}
// @Override
// public void correctDirection(final Player player) {
// final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
// // Main direction.
// mcPlayer.yaw = LocUtil.correctYaw(mcPlayer.yaw);
// mcPlayer.pitch = LocUtil.correctPitch(mcPlayer.pitch);
// // Consider setting the lastYaw here too.
// }
}
@Override
public boolean hasGravity(final Material mat) {
// TODO: Test/check.
return mat.hasGravity();
}
@Override
public AlmostBoolean dealFallDamageFiresAnEvent() {
return AlmostBoolean.MAYBE;
}
// @Override
// public void correctDirection(final Player player) {
// final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
// // Main direction.
// mcPlayer.yaw = LocUtil.correctYaw(mcPlayer.yaw);
// mcPlayer.pitch = LocUtil.correctPitch(mcPlayer.pitch);
// // Consider setting the lastYaw here too.
// }
}

View File

@ -24,144 +24,149 @@ import fr.neatmonster.nocheatplus.utilities.BlockCache;
import fr.neatmonster.nocheatplus.utilities.ReflectionUtil;
public class MCAccessCB2882 implements MCAccess{
/**
* Constructor to let it fail.
*/
public MCAccessCB2882(){
getCommandMap();
ReflectionUtil.checkMembers("net.minecraft.server.v1_6_R3.", new String[]{"Entity" , "dead"});
// block bounds, original: minX, maxX, minY, maxY, minZ, maxZ
ReflectionUtil.checkMethodReturnTypesNoArgs(net.minecraft.server.v1_6_R3.Block.class,
new String[]{"u", "v", "w", "x", "y", "z"}, double.class);
// TODO: Nail it down further.
}
@Override
public String getMCVersion() {
// 1_6_R3
return "1.6.4";
}
/**
* Constructor to let it fail.
*/
public MCAccessCB2882(){
getCommandMap();
ReflectionUtil.checkMembers("net.minecraft.server.v1_6_R3.", new String[]{"Entity" , "dead"});
// block bounds, original: minX, maxX, minY, maxY, minZ, maxZ
ReflectionUtil.checkMethodReturnTypesNoArgs(net.minecraft.server.v1_6_R3.Block.class,
new String[]{"u", "v", "w", "x", "y", "z"}, double.class);
// TODO: Nail it down further.
}
@Override
public String getServerVersionTag() {
return "CB2882";
}
@Override
public String getMCVersion() {
// 1_6_R3
return "1.6.4";
}
@Override
public CommandMap getCommandMap() {
return ((CraftServer) Bukkit.getServer()).getCommandMap();
}
@Override
public String getServerVersionTag() {
return "CB2882";
}
@Override
public BlockCache getBlockCache(final World world) {
return new BlockCacheCB2882(world);
}
@Override
public CommandMap getCommandMap() {
return ((CraftServer) Bukkit.getServer()).getCommandMap();
}
@Override
public double getHeight(final Entity entity) {
final net.minecraft.server.v1_6_R3.Entity mcEntity = ((CraftEntity) entity).getHandle();
final double entityHeight = Math.max(mcEntity.length, Math.max(mcEntity.height, mcEntity.boundingBox.e - mcEntity.boundingBox.b));
if (entity instanceof LivingEntity) {
return Math.max(((LivingEntity) entity).getEyeHeight(), entityHeight);
} else return entityHeight;
}
@Override
public BlockCache getBlockCache(final World world) {
return new BlockCacheCB2882(world);
}
@Override
public AlmostBoolean isBlockSolid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isSolid());
}
@Override
public double getHeight(final Entity entity) {
final net.minecraft.server.v1_6_R3.Entity mcEntity = ((CraftEntity) entity).getHandle();
final double entityHeight = Math.max(mcEntity.length, Math.max(mcEntity.height, mcEntity.boundingBox.e - mcEntity.boundingBox.b));
if (entity instanceof LivingEntity) {
return Math.max(((LivingEntity) entity).getEyeHeight(), entityHeight);
} else return entityHeight;
}
@Override
public AlmostBoolean isBlockLiquid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isLiquid());
}
@Override
public AlmostBoolean isBlockSolid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isSolid());
}
@Override
public double getWidth(final Entity entity) {
return ((CraftEntity) entity).getHandle().width;
}
@Override
public AlmostBoolean isBlockLiquid(final int id) {
final Block block = Block.byId[id];
if (block == null || block.material == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.material.isLiquid());
}
@Override
public AlmostBoolean isIllegalBounds(final Player player) {
final EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
if (entityPlayer.dead) return AlmostBoolean.NO;
// TODO: Does this need a method call for the "real" box? Might be no problem during moving events, though.
final AxisAlignedBB box = entityPlayer.boundingBox;
if (!entityPlayer.isSleeping()){
// This can not really test stance but height of bounding box.
final double dY = Math.abs(box.e - box.b);
if (dY > 1.8) return AlmostBoolean.YES; // dY > 1.65D ||
if (dY < 0.1D && entityPlayer.length >= 0.1) return AlmostBoolean.YES;
}
return AlmostBoolean.MAYBE;
}
@Override
public double getWidth(final Entity entity) {
return ((CraftEntity) entity).getHandle().width;
}
@Override
public double getJumpAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.JUMP)) return mcPlayer.getEffect(MobEffectList.JUMP).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public AlmostBoolean isIllegalBounds(final Player player) {
final EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
if (entityPlayer.dead) return AlmostBoolean.NO;
// TODO: Does this need a method call for the "real" box? Might be no problem during moving events, though.
final AxisAlignedBB box = entityPlayer.boundingBox;
if (!entityPlayer.isSleeping()){
// This can not really test stance but height of bounding box.
final double dY = Math.abs(box.e - box.b);
if (dY > 1.8) return AlmostBoolean.YES; // dY > 1.65D ||
if (dY < 0.1D && entityPlayer.length >= 0.1) return AlmostBoolean.YES;
}
return AlmostBoolean.MAYBE;
}
@Override
public double getFasterMovementAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.FASTER_MOVEMENT)) return mcPlayer.getEffect(MobEffectList.FASTER_MOVEMENT).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public double getJumpAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
@Override
public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks;
}
if (mcPlayer.hasEffect(MobEffectList.JUMP)) return mcPlayer.getEffect(MobEffectList.JUMP).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public void setInvulnerableTicks(final Player player, final int ticks) {
((CraftPlayer) player).getHandle().invulnerableTicks = ticks;
}
@Override
public double getFasterMovementAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.FASTER_MOVEMENT)) return mcPlayer.getEffect(MobEffectList.FASTER_MOVEMENT).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public void dealFallDamage(final Player player, final double damage) {
((CraftPlayer) player).getHandle().damageEntity(DamageSource.FALL, (float) damage);
}
@Override
public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks;
}
@Override
public boolean isComplexPart(final Entity entity) {
return ((CraftEntity) entity).getHandle() instanceof EntityComplexPart;
}
@Override
public void setInvulnerableTicks(final Player player, final int ticks) {
((CraftPlayer) player).getHandle().invulnerableTicks = ticks;
}
@Override
public boolean shouldBeZombie(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
return !mcPlayer.dead && mcPlayer.getHealth() <= 0.0f ;
}
@Override
public void dealFallDamage(final Player player, final double damage) {
((CraftPlayer) player).getHandle().damageEntity(DamageSource.FALL, (float) damage);
}
@Override
public void setDead(final Player player, final int deathTicks) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
@Override
public boolean isComplexPart(final Entity entity) {
return ((CraftEntity) entity).getHandle() instanceof EntityComplexPart;
}
@Override
public boolean shouldBeZombie(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
return !mcPlayer.dead && mcPlayer.getHealth() <= 0.0f ;
}
@Override
public void setDead(final Player player, final int deathTicks) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
mcPlayer.deathTicks = deathTicks;
mcPlayer.dead = true;
}
@Override
public boolean hasGravity(final Material mat) {
// TODO: Test/check.
return mat.hasGravity();
}
// @Override
// public void correctDirection(final Player player) {
// final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
// // Main direction.
// mcPlayer.yaw = LocUtil.correctYaw(mcPlayer.yaw);
// mcPlayer.pitch = LocUtil.correctPitch(mcPlayer.pitch);
// // Consider setting the lastYaw here too.
// }
}
@Override
public boolean hasGravity(final Material mat) {
// TODO: Test/check.
return mat.hasGravity();
}
@Override
public AlmostBoolean dealFallDamageFiresAnEvent() {
return AlmostBoolean.MAYBE;
}
// @Override
// public void correctDirection(final Player player) {
// final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
// // Main direction.
// mcPlayer.yaw = LocUtil.correctYaw(mcPlayer.yaw);
// mcPlayer.pitch = LocUtil.correctPitch(mcPlayer.pitch);
// // Consider setting the lastYaw here too.
// }
}

View File

@ -24,144 +24,149 @@ import fr.neatmonster.nocheatplus.utilities.BlockCache;
import fr.neatmonster.nocheatplus.utilities.ReflectionUtil;
public class MCAccessCB2922 implements MCAccess{
/**
* Constructor to let it fail.
*/
public MCAccessCB2922(){
getCommandMap();
ReflectionUtil.checkMembers("net.minecraft.server.v1_7_R1.", new String[]{"Entity" , "dead"});
// block bounds, original: minX, maxX, minY, maxY, minZ, maxZ
ReflectionUtil.checkMethodReturnTypesNoArgs(net.minecraft.server.v1_7_R1.Block.class,
new String[]{"x", "y", "z", "A", "B", "C"}, double.class);
// TODO: Nail it down further.
}
@Override
public String getMCVersion() {
// 1_7_R1
return "1.7.2";
}
/**
* Constructor to let it fail.
*/
public MCAccessCB2922(){
getCommandMap();
ReflectionUtil.checkMembers("net.minecraft.server.v1_7_R1.", new String[]{"Entity" , "dead"});
// block bounds, original: minX, maxX, minY, maxY, minZ, maxZ
ReflectionUtil.checkMethodReturnTypesNoArgs(net.minecraft.server.v1_7_R1.Block.class,
new String[]{"x", "y", "z", "A", "B", "C"}, double.class);
// TODO: Nail it down further.
}
@Override
public String getServerVersionTag() {
return "CB2922";
}
@Override
public String getMCVersion() {
// 1_7_R1
return "1.7.2";
}
@Override
public CommandMap getCommandMap() {
return ((CraftServer) Bukkit.getServer()).getCommandMap();
}
@Override
public String getServerVersionTag() {
return "CB2922";
}
@Override
public BlockCache getBlockCache(final World world) {
return new BlockCacheCB2922(world);
}
@Override
public CommandMap getCommandMap() {
return ((CraftServer) Bukkit.getServer()).getCommandMap();
}
@Override
public double getHeight(final Entity entity) {
final net.minecraft.server.v1_7_R1.Entity mcEntity = ((CraftEntity) entity).getHandle();
final double entityHeight = Math.max(mcEntity.length, Math.max(mcEntity.height, mcEntity.boundingBox.e - mcEntity.boundingBox.b));
if (entity instanceof LivingEntity) {
return Math.max(((LivingEntity) entity).getEyeHeight(), entityHeight);
} else return entityHeight;
}
@Override
public BlockCache getBlockCache(final World world) {
return new BlockCacheCB2922(world);
}
@Override
public AlmostBoolean isBlockSolid(final int id) {
final Block block = Block.e(id);
if (block == null || block.getMaterial() == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.getMaterial().isSolid());
}
@Override
public double getHeight(final Entity entity) {
final net.minecraft.server.v1_7_R1.Entity mcEntity = ((CraftEntity) entity).getHandle();
final double entityHeight = Math.max(mcEntity.length, Math.max(mcEntity.height, mcEntity.boundingBox.e - mcEntity.boundingBox.b));
if (entity instanceof LivingEntity) {
return Math.max(((LivingEntity) entity).getEyeHeight(), entityHeight);
} else return entityHeight;
}
@Override
public AlmostBoolean isBlockLiquid(final int id) {
final Block block = Block.e(id);
if (block == null || block.getMaterial() == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.getMaterial().isLiquid());
}
@Override
public AlmostBoolean isBlockSolid(final int id) {
final Block block = Block.e(id);
if (block == null || block.getMaterial() == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.getMaterial().isSolid());
}
@Override
public double getWidth(final Entity entity) {
return ((CraftEntity) entity).getHandle().width;
}
@Override
public AlmostBoolean isBlockLiquid(final int id) {
final Block block = Block.e(id);
if (block == null || block.getMaterial() == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.getMaterial().isLiquid());
}
@Override
public AlmostBoolean isIllegalBounds(final Player player) {
final EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
if (entityPlayer.dead) return AlmostBoolean.NO;
// TODO: Does this need a method call for the "real" box? Might be no problem during moving events, though.
final AxisAlignedBB box = entityPlayer.boundingBox;
if (!entityPlayer.isSleeping()){
// This can not really test stance but height of bounding box.
final double dY = Math.abs(box.e - box.b);
if (dY > 1.8) return AlmostBoolean.YES; // dY > 1.65D ||
if (dY < 0.1D && entityPlayer.length >= 0.1) return AlmostBoolean.YES;
}
return AlmostBoolean.MAYBE;
}
@Override
public double getWidth(final Entity entity) {
return ((CraftEntity) entity).getHandle().width;
}
@Override
public double getJumpAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.JUMP)) return mcPlayer.getEffect(MobEffectList.JUMP).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public AlmostBoolean isIllegalBounds(final Player player) {
final EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
if (entityPlayer.dead) return AlmostBoolean.NO;
// TODO: Does this need a method call for the "real" box? Might be no problem during moving events, though.
final AxisAlignedBB box = entityPlayer.boundingBox;
if (!entityPlayer.isSleeping()){
// This can not really test stance but height of bounding box.
final double dY = Math.abs(box.e - box.b);
if (dY > 1.8) return AlmostBoolean.YES; // dY > 1.65D ||
if (dY < 0.1D && entityPlayer.length >= 0.1) return AlmostBoolean.YES;
}
return AlmostBoolean.MAYBE;
}
@Override
public double getFasterMovementAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.FASTER_MOVEMENT)) return mcPlayer.getEffect(MobEffectList.FASTER_MOVEMENT).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public double getJumpAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
@Override
public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks;
}
if (mcPlayer.hasEffect(MobEffectList.JUMP)) return mcPlayer.getEffect(MobEffectList.JUMP).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public void setInvulnerableTicks(final Player player, final int ticks) {
((CraftPlayer) player).getHandle().invulnerableTicks = ticks;
}
@Override
public double getFasterMovementAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.FASTER_MOVEMENT)) return mcPlayer.getEffect(MobEffectList.FASTER_MOVEMENT).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public void dealFallDamage(final Player player, final double damage) {
((CraftPlayer) player).getHandle().damageEntity(DamageSource.FALL, (float) damage);
}
@Override
public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks;
}
@Override
public boolean isComplexPart(final Entity entity) {
return ((CraftEntity) entity).getHandle() instanceof EntityComplexPart;
}
@Override
public void setInvulnerableTicks(final Player player, final int ticks) {
((CraftPlayer) player).getHandle().invulnerableTicks = ticks;
}
@Override
public boolean shouldBeZombie(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
return !mcPlayer.dead && mcPlayer.getHealth() <= 0.0f ;
}
@Override
public void dealFallDamage(final Player player, final double damage) {
((CraftPlayer) player).getHandle().damageEntity(DamageSource.FALL, (float) damage);
}
@Override
public void setDead(final Player player, final int deathTicks) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
@Override
public boolean isComplexPart(final Entity entity) {
return ((CraftEntity) entity).getHandle() instanceof EntityComplexPart;
}
@Override
public boolean shouldBeZombie(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
return !mcPlayer.dead && mcPlayer.getHealth() <= 0.0f ;
}
@Override
public void setDead(final Player player, final int deathTicks) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
mcPlayer.deathTicks = deathTicks;
mcPlayer.dead = true;
}
@Override
public boolean hasGravity(final Material mat) {
// TODO: Test/check.
return mat.hasGravity();
}
// @Override
// public void correctDirection(final Player player) {
// final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
// // Main direction.
// mcPlayer.yaw = LocUtil.correctYaw(mcPlayer.yaw);
// mcPlayer.pitch = LocUtil.correctPitch(mcPlayer.pitch);
// // Consider setting the lastYaw here too.
// }
}
@Override
public boolean hasGravity(final Material mat) {
// TODO: Test/check.
return mat.hasGravity();
}
@Override
public AlmostBoolean dealFallDamageFiresAnEvent() {
return AlmostBoolean.MAYBE;
}
// @Override
// public void correctDirection(final Player player) {
// final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
// // Main direction.
// mcPlayer.yaw = LocUtil.correctYaw(mcPlayer.yaw);
// mcPlayer.pitch = LocUtil.correctPitch(mcPlayer.pitch);
// // Consider setting the lastYaw here too.
// }
}

View File

@ -24,144 +24,149 @@ import fr.neatmonster.nocheatplus.utilities.BlockCache;
import fr.neatmonster.nocheatplus.utilities.ReflectionUtil;
public class MCAccessCB3026 implements MCAccess{
/**
* Constructor to let it fail.
*/
public MCAccessCB3026(){
getCommandMap();
ReflectionUtil.checkMembers("net.minecraft.server.v1_7_R2.", new String[]{"Entity" , "dead"});
// block bounds, original: minX, maxX, minY, maxY, minZ, maxZ
ReflectionUtil.checkMethodReturnTypesNoArgs(net.minecraft.server.v1_7_R2.Block.class,
new String[]{"x", "y", "z", "A", "B", "C"}, double.class);
// TODO: Nail it down further.
}
@Override
public String getMCVersion() {
// 1_7_R2
return "1.7.5";
}
/**
* Constructor to let it fail.
*/
public MCAccessCB3026(){
getCommandMap();
ReflectionUtil.checkMembers("net.minecraft.server.v1_7_R2.", new String[]{"Entity" , "dead"});
// block bounds, original: minX, maxX, minY, maxY, minZ, maxZ
ReflectionUtil.checkMethodReturnTypesNoArgs(net.minecraft.server.v1_7_R2.Block.class,
new String[]{"x", "y", "z", "A", "B", "C"}, double.class);
// TODO: Nail it down further.
}
@Override
public String getServerVersionTag() {
return "CB3026";
}
@Override
public String getMCVersion() {
// 1_7_R2
return "1.7.5";
}
@Override
public CommandMap getCommandMap() {
return ((CraftServer) Bukkit.getServer()).getCommandMap();
}
@Override
public String getServerVersionTag() {
return "CB3026";
}
@Override
public BlockCache getBlockCache(final World world) {
return new BlockCacheCB3026(world);
}
@Override
public CommandMap getCommandMap() {
return ((CraftServer) Bukkit.getServer()).getCommandMap();
}
@Override
public double getHeight(final Entity entity) {
final net.minecraft.server.v1_7_R2.Entity mcEntity = ((CraftEntity) entity).getHandle();
final double entityHeight = Math.max(mcEntity.length, Math.max(mcEntity.height, mcEntity.boundingBox.e - mcEntity.boundingBox.b));
if (entity instanceof LivingEntity) {
return Math.max(((LivingEntity) entity).getEyeHeight(), entityHeight);
} else return entityHeight;
}
@Override
public BlockCache getBlockCache(final World world) {
return new BlockCacheCB3026(world);
}
@Override
public AlmostBoolean isBlockSolid(final int id) {
final Block block = Block.e(id);
if (block == null || block.getMaterial() == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.getMaterial().isSolid());
}
@Override
public double getHeight(final Entity entity) {
final net.minecraft.server.v1_7_R2.Entity mcEntity = ((CraftEntity) entity).getHandle();
final double entityHeight = Math.max(mcEntity.length, Math.max(mcEntity.height, mcEntity.boundingBox.e - mcEntity.boundingBox.b));
if (entity instanceof LivingEntity) {
return Math.max(((LivingEntity) entity).getEyeHeight(), entityHeight);
} else return entityHeight;
}
@Override
public AlmostBoolean isBlockLiquid(final int id) {
final Block block = Block.e(id);
if (block == null || block.getMaterial() == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.getMaterial().isLiquid());
}
@Override
public AlmostBoolean isBlockSolid(final int id) {
final Block block = Block.e(id);
if (block == null || block.getMaterial() == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.getMaterial().isSolid());
}
@Override
public double getWidth(final Entity entity) {
return ((CraftEntity) entity).getHandle().width;
}
@Override
public AlmostBoolean isBlockLiquid(final int id) {
final Block block = Block.e(id);
if (block == null || block.getMaterial() == null) return AlmostBoolean.MAYBE;
else return AlmostBoolean.match(block.getMaterial().isLiquid());
}
@Override
public AlmostBoolean isIllegalBounds(final Player player) {
final EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
if (entityPlayer.dead) return AlmostBoolean.NO;
// TODO: Does this need a method call for the "real" box? Might be no problem during moving events, though.
final AxisAlignedBB box = entityPlayer.boundingBox;
if (!entityPlayer.isSleeping()){
// This can not really test stance but height of bounding box.
final double dY = Math.abs(box.e - box.b);
if (dY > 1.8) return AlmostBoolean.YES; // dY > 1.65D ||
if (dY < 0.1D && entityPlayer.length >= 0.1) return AlmostBoolean.YES;
}
return AlmostBoolean.MAYBE;
}
@Override
public double getWidth(final Entity entity) {
return ((CraftEntity) entity).getHandle().width;
}
@Override
public double getJumpAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.JUMP)) return mcPlayer.getEffect(MobEffectList.JUMP).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public AlmostBoolean isIllegalBounds(final Player player) {
final EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
if (entityPlayer.dead) return AlmostBoolean.NO;
// TODO: Does this need a method call for the "real" box? Might be no problem during moving events, though.
final AxisAlignedBB box = entityPlayer.boundingBox;
if (!entityPlayer.isSleeping()){
// This can not really test stance but height of bounding box.
final double dY = Math.abs(box.e - box.b);
if (dY > 1.8) return AlmostBoolean.YES; // dY > 1.65D ||
if (dY < 0.1D && entityPlayer.length >= 0.1) return AlmostBoolean.YES;
}
return AlmostBoolean.MAYBE;
}
@Override
public double getFasterMovementAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.FASTER_MOVEMENT)) return mcPlayer.getEffect(MobEffectList.FASTER_MOVEMENT).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public double getJumpAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
@Override
public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks;
}
if (mcPlayer.hasEffect(MobEffectList.JUMP)) return mcPlayer.getEffect(MobEffectList.JUMP).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public void setInvulnerableTicks(final Player player, final int ticks) {
((CraftPlayer) player).getHandle().invulnerableTicks = ticks;
}
@Override
public double getFasterMovementAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.FASTER_MOVEMENT)) return mcPlayer.getEffect(MobEffectList.FASTER_MOVEMENT).getAmplifier();
else return Double.NEGATIVE_INFINITY;
}
@Override
public void dealFallDamage(final Player player, final double damage) {
((CraftPlayer) player).getHandle().damageEntity(DamageSource.FALL, (float) damage);
}
@Override
public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks;
}
@Override
public boolean isComplexPart(final Entity entity) {
return ((CraftEntity) entity).getHandle() instanceof EntityComplexPart;
}
@Override
public void setInvulnerableTicks(final Player player, final int ticks) {
((CraftPlayer) player).getHandle().invulnerableTicks = ticks;
}
@Override
public boolean shouldBeZombie(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
return !mcPlayer.dead && mcPlayer.getHealth() <= 0.0f ;
}
@Override
public void dealFallDamage(final Player player, final double damage) {
((CraftPlayer) player).getHandle().damageEntity(DamageSource.FALL, (float) damage);
}
@Override
public void setDead(final Player player, final int deathTicks) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
@Override
public boolean isComplexPart(final Entity entity) {
return ((CraftEntity) entity).getHandle() instanceof EntityComplexPart;
}
@Override
public boolean shouldBeZombie(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
return !mcPlayer.dead && mcPlayer.getHealth() <= 0.0f ;
}
@Override
public void setDead(final Player player, final int deathTicks) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
mcPlayer.deathTicks = deathTicks;
mcPlayer.dead = true;
}
@Override
public boolean hasGravity(final Material mat) {
// TODO: Test/check.
return mat.hasGravity();
}
// @Override
// public void correctDirection(final Player player) {
// final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
// // Main direction.
// mcPlayer.yaw = LocUtil.correctYaw(mcPlayer.yaw);
// mcPlayer.pitch = LocUtil.correctPitch(mcPlayer.pitch);
// // Consider setting the lastYaw here too.
// }
}
@Override
public boolean hasGravity(final Material mat) {
// TODO: Test/check.
return mat.hasGravity();
}
@Override
public AlmostBoolean dealFallDamageFiresAnEvent() {
return AlmostBoolean.MAYBE;
}
// @Override
// public void correctDirection(final Player player) {
// final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
// // Main direction.
// mcPlayer.yaw = LocUtil.correctYaw(mcPlayer.yaw);
// mcPlayer.pitch = LocUtil.correctPitch(mcPlayer.pitch);
// // Consider setting the lastYaw here too.
// }
}

View File

@ -24,163 +24,168 @@ import fr.neatmonster.nocheatplus.utilities.BlockCache;
import fr.neatmonster.nocheatplus.utilities.ReflectionUtil;
public class MCAccessCB3043 implements MCAccess{
/**
* Constructor to let it fail.
*/
public MCAccessCB3043() {
getCommandMap();
ReflectionUtil.checkMembers("net.minecraft.server.v1_7_R3.", new String[] {"Entity" , "dead"});
// block bounds, original: minX, maxX, minY, maxY, minZ, maxZ
ReflectionUtil.checkMethodReturnTypesNoArgs(net.minecraft.server.v1_7_R3.Block.class,
new String[]{"x", "y", "z", "A", "B", "C"}, double.class);
// TODO: Nail it down further.
}
@Override
public String getMCVersion() {
// 1_7_R3
return "1.7.8|1.7.9";
}
/**
* Constructor to let it fail.
*/
public MCAccessCB3043() {
getCommandMap();
ReflectionUtil.checkMembers("net.minecraft.server.v1_7_R3.", new String[] {"Entity" , "dead"});
// block bounds, original: minX, maxX, minY, maxY, minZ, maxZ
ReflectionUtil.checkMethodReturnTypesNoArgs(net.minecraft.server.v1_7_R3.Block.class,
new String[]{"x", "y", "z", "A", "B", "C"}, double.class);
// TODO: Nail it down further.
}
@Override
public String getServerVersionTag() {
return "CB3043";
}
@Override
public String getMCVersion() {
// 1_7_R3
return "1.7.8|1.7.9";
}
@Override
public CommandMap getCommandMap() {
return ((CraftServer) Bukkit.getServer()).getCommandMap();
}
@Override
public String getServerVersionTag() {
return "CB3043";
}
@Override
public BlockCache getBlockCache(final World world) {
return new BlockCacheCB3043(world);
}
@Override
public CommandMap getCommandMap() {
return ((CraftServer) Bukkit.getServer()).getCommandMap();
}
@Override
public double getHeight(final Entity entity) {
final net.minecraft.server.v1_7_R3.Entity mcEntity = ((CraftEntity) entity).getHandle();
final double entityHeight = Math.max(mcEntity.length, Math.max(mcEntity.height, mcEntity.boundingBox.e - mcEntity.boundingBox.b));
if (entity instanceof LivingEntity) {
return Math.max(((LivingEntity) entity).getEyeHeight(), entityHeight);
} else return entityHeight;
}
@Override
public BlockCache getBlockCache(final World world) {
return new BlockCacheCB3043(world);
}
@Override
public AlmostBoolean isBlockSolid(final int id) {
final Block block = Block.e(id);
if (block == null || block.getMaterial() == null) {
return AlmostBoolean.MAYBE;
}
else {
return AlmostBoolean.match(block.getMaterial().isSolid());
}
}
@Override
public double getHeight(final Entity entity) {
final net.minecraft.server.v1_7_R3.Entity mcEntity = ((CraftEntity) entity).getHandle();
final double entityHeight = Math.max(mcEntity.length, Math.max(mcEntity.height, mcEntity.boundingBox.e - mcEntity.boundingBox.b));
if (entity instanceof LivingEntity) {
return Math.max(((LivingEntity) entity).getEyeHeight(), entityHeight);
} else return entityHeight;
}
@Override
public AlmostBoolean isBlockLiquid(final int id) {
final Block block = Block.e(id);
if (block == null || block.getMaterial() == null) {
return AlmostBoolean.MAYBE;
}
else {
return AlmostBoolean.match(block.getMaterial().isLiquid());
}
}
@Override
public AlmostBoolean isBlockSolid(final int id) {
final Block block = Block.e(id);
if (block == null || block.getMaterial() == null) {
return AlmostBoolean.MAYBE;
}
else {
return AlmostBoolean.match(block.getMaterial().isSolid());
}
}
@Override
public double getWidth(final Entity entity) {
return ((CraftEntity) entity).getHandle().width;
}
@Override
public AlmostBoolean isBlockLiquid(final int id) {
final Block block = Block.e(id);
if (block == null || block.getMaterial() == null) {
return AlmostBoolean.MAYBE;
}
else {
return AlmostBoolean.match(block.getMaterial().isLiquid());
}
}
@Override
public AlmostBoolean isIllegalBounds(final Player player) {
final EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
if (entityPlayer.dead) return AlmostBoolean.NO;
// TODO: Does this need a method call for the "real" box? Might be no problem during moving events, though.
final AxisAlignedBB box = entityPlayer.boundingBox;
if (!entityPlayer.isSleeping()) {
// This can not really test stance but height of bounding box.
final double dY = Math.abs(box.e - box.b);
if (dY > 1.8) {
return AlmostBoolean.YES; // dY > 1.65D ||
}
if (dY < 0.1D && entityPlayer.length >= 0.1) {
return AlmostBoolean.YES;
}
}
return AlmostBoolean.MAYBE;
}
@Override
public double getWidth(final Entity entity) {
return ((CraftEntity) entity).getHandle().width;
}
@Override
public double getJumpAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.JUMP)) {
return mcPlayer.getEffect(MobEffectList.JUMP).getAmplifier();
}
else {
return Double.NEGATIVE_INFINITY;
}
}
@Override
public AlmostBoolean isIllegalBounds(final Player player) {
final EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
if (entityPlayer.dead) return AlmostBoolean.NO;
// TODO: Does this need a method call for the "real" box? Might be no problem during moving events, though.
final AxisAlignedBB box = entityPlayer.boundingBox;
if (!entityPlayer.isSleeping()) {
// This can not really test stance but height of bounding box.
final double dY = Math.abs(box.e - box.b);
if (dY > 1.8) {
return AlmostBoolean.YES; // dY > 1.65D ||
}
if (dY < 0.1D && entityPlayer.length >= 0.1) {
return AlmostBoolean.YES;
}
}
return AlmostBoolean.MAYBE;
}
@Override
public double getFasterMovementAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.FASTER_MOVEMENT)) {
return mcPlayer.getEffect(MobEffectList.FASTER_MOVEMENT).getAmplifier();
}
else {
return Double.NEGATIVE_INFINITY;
}
}
@Override
public double getJumpAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.JUMP)) {
return mcPlayer.getEffect(MobEffectList.JUMP).getAmplifier();
}
else {
return Double.NEGATIVE_INFINITY;
}
}
@Override
public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks;
}
@Override
public double getFasterMovementAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.FASTER_MOVEMENT)) {
return mcPlayer.getEffect(MobEffectList.FASTER_MOVEMENT).getAmplifier();
}
else {
return Double.NEGATIVE_INFINITY;
}
}
@Override
public void setInvulnerableTicks(final Player player, final int ticks) {
((CraftPlayer) player).getHandle().invulnerableTicks = ticks;
}
@Override
public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks;
}
@Override
public void dealFallDamage(final Player player, final double damage) {
((CraftPlayer) player).getHandle().damageEntity(DamageSource.FALL, (float) damage);
}
@Override
public void setInvulnerableTicks(final Player player, final int ticks) {
((CraftPlayer) player).getHandle().invulnerableTicks = ticks;
}
@Override
public boolean isComplexPart(final Entity entity) {
return ((CraftEntity) entity).getHandle() instanceof EntityComplexPart;
}
@Override
public void dealFallDamage(final Player player, final double damage) {
((CraftPlayer) player).getHandle().damageEntity(DamageSource.FALL, (float) damage);
}
@Override
public boolean shouldBeZombie(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
return !mcPlayer.dead && mcPlayer.getHealth() <= 0.0f ;
}
@Override
public boolean isComplexPart(final Entity entity) {
return ((CraftEntity) entity).getHandle() instanceof EntityComplexPart;
}
@Override
public void setDead(final Player player, final int deathTicks) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
@Override
public boolean shouldBeZombie(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
return !mcPlayer.dead && mcPlayer.getHealth() <= 0.0f ;
}
@Override
public void setDead(final Player player, final int deathTicks) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
mcPlayer.deathTicks = deathTicks;
mcPlayer.dead = true;
}
@Override
public boolean hasGravity(final Material mat) {
// TODO: Test/check.
return mat.hasGravity();
}
// @Override
// public void correctDirection(final Player player) {
// final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
// // Main direction.
// mcPlayer.yaw = LocUtil.correctYaw(mcPlayer.yaw);
// mcPlayer.pitch = LocUtil.correctPitch(mcPlayer.pitch);
// // Consider setting the lastYaw here too.
// }
}
@Override
public boolean hasGravity(final Material mat) {
// TODO: Test/check.
return mat.hasGravity();
}
@Override
public AlmostBoolean dealFallDamageFiresAnEvent() {
return AlmostBoolean.MAYBE;
}
// @Override
// public void correctDirection(final Player player) {
// final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
// // Main direction.
// mcPlayer.yaw = LocUtil.correctYaw(mcPlayer.yaw);
// mcPlayer.pitch = LocUtil.correctPitch(mcPlayer.pitch);
// // Consider setting the lastYaw here too.
// }
}

View File

@ -24,165 +24,170 @@ import fr.neatmonster.nocheatplus.utilities.BlockCache;
import fr.neatmonster.nocheatplus.utilities.ReflectionUtil;
public class MCAccessCB3100 implements MCAccess{
/**
* Constructor to let it fail.
*/
public MCAccessCB3100() {
getCommandMap();
ReflectionUtil.checkMembers("net.minecraft.server.v1_7_R4.", new String[] {"Entity" , "dead"});
// block bounds, original: minX, maxX, minY, maxY, minZ, maxZ
ReflectionUtil.checkMethodReturnTypesNoArgs(net.minecraft.server.v1_7_R4.Block.class,
new String[]{"x", "y", "z", "A", "B", "C"}, double.class);
// TODO: Nail it down further.
}
@Override
public String getMCVersion() {
// 1_7_R4
return "1.7.10";
}
/**
* Constructor to let it fail.
*/
public MCAccessCB3100() {
getCommandMap();
ReflectionUtil.checkMembers("net.minecraft.server.v1_7_R4.", new String[] {"Entity" , "dead"});
// block bounds, original: minX, maxX, minY, maxY, minZ, maxZ
ReflectionUtil.checkMethodReturnTypesNoArgs(net.minecraft.server.v1_7_R4.Block.class,
new String[]{"x", "y", "z", "A", "B", "C"}, double.class);
// TODO: Nail it down further.
}
@Override
public String getServerVersionTag() {
return "CB3100";
}
@Override
public String getMCVersion() {
// 1_7_R4
return "1.7.10";
}
@Override
public CommandMap getCommandMap() {
return ((CraftServer) Bukkit.getServer()).getCommandMap();
}
@Override
public String getServerVersionTag() {
return "CB3100";
}
@Override
public BlockCache getBlockCache(final World world) {
return new BlockCacheCB3100(world);
}
@Override
public CommandMap getCommandMap() {
return ((CraftServer) Bukkit.getServer()).getCommandMap();
}
@Override
public double getHeight(final Entity entity) {
final net.minecraft.server.v1_7_R4.Entity mcEntity = ((CraftEntity) entity).getHandle();
final double entityHeight = Math.max(mcEntity.length, Math.max(mcEntity.height, mcEntity.boundingBox.e - mcEntity.boundingBox.b));
if (entity instanceof LivingEntity) {
return Math.max(((LivingEntity) entity).getEyeHeight(), entityHeight);
} else return entityHeight;
}
@Override
public BlockCache getBlockCache(final World world) {
return new BlockCacheCB3100(world);
}
@Override
public AlmostBoolean isBlockSolid(final int id) {
final Block block = Block.getById(id);
if (block == null || block.getMaterial() == null) {
return AlmostBoolean.MAYBE;
}
else {
return AlmostBoolean.match(block.getMaterial().isSolid());
}
}
@Override
public double getHeight(final Entity entity) {
final net.minecraft.server.v1_7_R4.Entity mcEntity = ((CraftEntity) entity).getHandle();
final double entityHeight = Math.max(mcEntity.length, Math.max(mcEntity.height, mcEntity.boundingBox.e - mcEntity.boundingBox.b));
if (entity instanceof LivingEntity) {
return Math.max(((LivingEntity) entity).getEyeHeight(), entityHeight);
} else return entityHeight;
}
@Override
public AlmostBoolean isBlockLiquid(final int id) {
final Block block = Block.getById(id);
if (block == null || block.getMaterial() == null) {
return AlmostBoolean.MAYBE;
}
else {
return AlmostBoolean.match(block.getMaterial().isLiquid());
}
}
@Override
public AlmostBoolean isBlockSolid(final int id) {
final Block block = Block.getById(id);
if (block == null || block.getMaterial() == null) {
return AlmostBoolean.MAYBE;
}
else {
return AlmostBoolean.match(block.getMaterial().isSolid());
}
}
@Override
public double getWidth(final Entity entity) {
return ((CraftEntity) entity).getHandle().width;
}
@Override
public AlmostBoolean isBlockLiquid(final int id) {
final Block block = Block.getById(id);
if (block == null || block.getMaterial() == null) {
return AlmostBoolean.MAYBE;
}
else {
return AlmostBoolean.match(block.getMaterial().isLiquid());
}
}
@Override
public AlmostBoolean isIllegalBounds(final Player player) {
final EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
if (entityPlayer.dead) {
return AlmostBoolean.NO;
}
// TODO: Does this need a method call for the "real" box? Might be no problem during moving events, though.
final AxisAlignedBB box = entityPlayer.boundingBox;
if (!entityPlayer.isSleeping()) {
// This can not really test stance but height of bounding box.
final double dY = Math.abs(box.e - box.b);
if (dY > 1.8) {
return AlmostBoolean.YES; // dY > 1.65D ||
}
if (dY < 0.1D && entityPlayer.length >= 0.1) {
return AlmostBoolean.YES;
}
}
return AlmostBoolean.MAYBE;
}
@Override
public double getWidth(final Entity entity) {
return ((CraftEntity) entity).getHandle().width;
}
@Override
public double getJumpAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.JUMP)) {
return mcPlayer.getEffect(MobEffectList.JUMP).getAmplifier();
}
else {
return Double.NEGATIVE_INFINITY;
}
}
@Override
public AlmostBoolean isIllegalBounds(final Player player) {
final EntityPlayer entityPlayer = ((CraftPlayer) player).getHandle();
if (entityPlayer.dead) {
return AlmostBoolean.NO;
}
// TODO: Does this need a method call for the "real" box? Might be no problem during moving events, though.
final AxisAlignedBB box = entityPlayer.boundingBox;
if (!entityPlayer.isSleeping()) {
// This can not really test stance but height of bounding box.
final double dY = Math.abs(box.e - box.b);
if (dY > 1.8) {
return AlmostBoolean.YES; // dY > 1.65D ||
}
if (dY < 0.1D && entityPlayer.length >= 0.1) {
return AlmostBoolean.YES;
}
}
return AlmostBoolean.MAYBE;
}
@Override
public double getFasterMovementAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.FASTER_MOVEMENT)) {
return mcPlayer.getEffect(MobEffectList.FASTER_MOVEMENT).getAmplifier();
}
else {
return Double.NEGATIVE_INFINITY;
}
}
@Override
public double getJumpAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.JUMP)) {
return mcPlayer.getEffect(MobEffectList.JUMP).getAmplifier();
}
else {
return Double.NEGATIVE_INFINITY;
}
}
@Override
public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks;
}
@Override
public double getFasterMovementAmplifier(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
if (mcPlayer.hasEffect(MobEffectList.FASTER_MOVEMENT)) {
return mcPlayer.getEffect(MobEffectList.FASTER_MOVEMENT).getAmplifier();
}
else {
return Double.NEGATIVE_INFINITY;
}
}
@Override
public void setInvulnerableTicks(final Player player, final int ticks) {
((CraftPlayer) player).getHandle().invulnerableTicks = ticks;
}
@Override
public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks;
}
@Override
public void dealFallDamage(final Player player, final double damage) {
((CraftPlayer) player).getHandle().damageEntity(DamageSource.FALL, (float) damage);
}
@Override
public void setInvulnerableTicks(final Player player, final int ticks) {
((CraftPlayer) player).getHandle().invulnerableTicks = ticks;
}
@Override
public boolean isComplexPart(final Entity entity) {
return ((CraftEntity) entity).getHandle() instanceof EntityComplexPart;
}
@Override
public void dealFallDamage(final Player player, final double damage) {
((CraftPlayer) player).getHandle().damageEntity(DamageSource.FALL, (float) damage);
}
@Override
public boolean shouldBeZombie(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
return !mcPlayer.dead && mcPlayer.getHealth() <= 0.0f ;
}
@Override
public boolean isComplexPart(final Entity entity) {
return ((CraftEntity) entity).getHandle() instanceof EntityComplexPart;
}
@Override
public void setDead(final Player player, final int deathTicks) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
@Override
public boolean shouldBeZombie(final Player player) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
return !mcPlayer.dead && mcPlayer.getHealth() <= 0.0f ;
}
@Override
public void setDead(final Player player, final int deathTicks) {
final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
mcPlayer.deathTicks = deathTicks;
mcPlayer.dead = true;
}
@Override
public boolean hasGravity(final Material mat) {
// TODO: Test/check.
return mat.hasGravity();
}
// @Override
// public void correctDirection(final Player player) {
// final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
// // Main direction.
// mcPlayer.yaw = LocUtil.correctYaw(mcPlayer.yaw);
// mcPlayer.pitch = LocUtil.correctPitch(mcPlayer.pitch);
// // Consider setting the lastYaw here too.
// }
}
@Override
public boolean hasGravity(final Material mat) {
// TODO: Test/check.
return mat.hasGravity();
}
@Override
public AlmostBoolean dealFallDamageFiresAnEvent() {
return AlmostBoolean.MAYBE;
}
// @Override
// public void correctDirection(final Player player) {
// final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();
// // Main direction.
// mcPlayer.yaw = LocUtil.correctYaw(mcPlayer.yaw);
// mcPlayer.pitch = LocUtil.correctPitch(mcPlayer.pitch);
// // Consider setting the lastYaw here too.
// }
}

View File

@ -176,6 +176,11 @@ public class MCAccessCBDev implements MCAccess{
return mat.hasGravity();
}
@Override
public AlmostBoolean dealFallDamageFiresAnEvent() {
return AlmostBoolean.YES;
}
// @Override
// public void correctDirection(final Player player) {
// final EntityPlayer mcPlayer = ((CraftPlayer) player).getHandle();

View File

@ -9,6 +9,7 @@ import org.bukkit.command.CommandMap;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import fr.neatmonster.nocheatplus.compat.AlmostBoolean;
import fr.neatmonster.nocheatplus.compat.bukkit.MCAccessBukkit;
import fr.neatmonster.nocheatplus.utilities.BlockCache;
@ -53,4 +54,9 @@ public class MCAccessGlowstone extends MCAccessBukkit{
((GlowPlayer) player).damage(damage, DamageCause.FALL);
}
@Override
public AlmostBoolean dealFallDamageFiresAnEvent() {
return AlmostBoolean.YES; // Assumption (it's native access).
}
}

View File

@ -13,7 +13,7 @@ import fr.neatmonster.nocheatplus.checks.CheckType;
import fr.neatmonster.nocheatplus.checks.ViolationData;
import fr.neatmonster.nocheatplus.checks.moving.MovingConfig;
import fr.neatmonster.nocheatplus.checks.moving.MovingData;
import fr.neatmonster.nocheatplus.checks.moving.MovingListener;
import fr.neatmonster.nocheatplus.checks.moving.MovingUtil;
import fr.neatmonster.nocheatplus.permissions.Permissions;
import fr.neatmonster.nocheatplus.utilities.BlockProperties;
import fr.neatmonster.nocheatplus.utilities.StringUtil;
@ -46,7 +46,7 @@ public class Critical extends Check {
if (mcFallDistance > 0.0 && data.debug && player.hasPermission(Permissions.ADMINISTRATION_DEBUG)) {
final MovingData mData = MovingData.getData(player);
if (MovingListener.shouldCheckSurvivalFly(player, mData, mCc) && CheckType.MOVING_NOFALL.isEnabled(player)) {
if (MovingUtil.shouldCheckSurvivalFly(player, mData, mCc) && CheckType.MOVING_NOFALL.isEnabled(player)) {
// TODO: Set max y in MovingListener, to be independent of sf/nofall!
player.sendMessage("Critical: fd=" + mcFallDistance + "(" + mData.noFallFallDistance +") y=" + loc.getY() + ((mData.hasSetBack() && mData.getSetBackY() < mData.noFallMaxY) ? (" jumped=" + StringUtil.fdec3.format(mData.noFallMaxY - mData.getSetBackY())): ""));
}
@ -61,7 +61,7 @@ public class Critical extends Check {
// TODO: Skip near the highest jump height (needs check if head collided with something solid, which also detects low jump).
if (dataM.sfLowJump || mcFallDistance < cc.criticalFallDistance && !BlockProperties.isResetCond(player, loc, mCc.yOnGround)) {
final MovingConfig ccM = MovingConfig.getConfig(player);
if (MovingListener.shouldCheckSurvivalFly(player, dataM, ccM)) {
if (MovingUtil.shouldCheckSurvivalFly(player, dataM, ccM)) {
data.criticalVL += 1.0;
// Execute whatever actions are associated with this check and
// the violation level and find out if we should cancel the event.

View File

@ -35,7 +35,7 @@ import fr.neatmonster.nocheatplus.checks.moving.LocationTrace.TraceEntry;
import fr.neatmonster.nocheatplus.checks.moving.MediumLiftOff;
import fr.neatmonster.nocheatplus.checks.moving.MovingConfig;
import fr.neatmonster.nocheatplus.checks.moving.MovingData;
import fr.neatmonster.nocheatplus.checks.moving.MovingListener;
import fr.neatmonster.nocheatplus.checks.moving.MovingUtil;
import fr.neatmonster.nocheatplus.compat.BridgeHealth;
import fr.neatmonster.nocheatplus.components.JoinLeaveListener;
import fr.neatmonster.nocheatplus.logging.Streams;
@ -297,7 +297,7 @@ public class FightListener extends CheckListener implements JoinLeaveListener{
if (hDist >= 0.23) {
// TODO: Might need to check hDist relative to speed / modifiers.
final MovingConfig mc = MovingConfig.getConfig(player);
if (now <= mData.timeSprinting + mc.sprintingGrace && MovingListener.shouldCheckSurvivalFly(player, mData, mc)){
if (now <= mData.timeSprinting + mc.sprintingGrace && MovingUtil.shouldCheckSurvivalFly(player, mData, mc)){
// Judge as "lost sprint" problem.
// TODO: What would mData.lostSprintCount > 0 mean here?
mData.lostSprintCount = 7;
@ -566,7 +566,7 @@ public class FightListener extends CheckListener implements JoinLeaveListener{
if (damagedData.debug || mdata.debug) {
NCPAPIProvider.getNoCheatPlusAPI().getLogManager().debug(Streams.TRACE_FILE, damagedPlayer.getName() + " received knockback level: " + level);
}
MovingListener.addVelocity(damagedPlayer, mdata, mcc, dir.getX(), vy, dir.getZ());
mdata.addVelocity(damagedPlayer, mcc, dir.getX(), vy, dir.getZ());
}
/**

View File

@ -7,12 +7,15 @@ import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import fr.neatmonster.nocheatplus.NCPAPIProvider;
import fr.neatmonster.nocheatplus.checks.access.ACheckData;
import fr.neatmonster.nocheatplus.checks.access.CheckDataFactory;
import fr.neatmonster.nocheatplus.checks.access.ICheckData;
import fr.neatmonster.nocheatplus.logging.Streams;
import fr.neatmonster.nocheatplus.utilities.ActionAccumulator;
import fr.neatmonster.nocheatplus.utilities.ActionFrequency;
import fr.neatmonster.nocheatplus.utilities.PlayerLocation;
import fr.neatmonster.nocheatplus.utilities.TickTask;
/**
* Player specific data for the moving checks.
@ -119,7 +122,7 @@ public class MovingData extends ACheckData {
public double verticalFreedom;
public double verticalVelocity;
public int verticalVelocityUsed = 0;
/** Horizontal velocity modeled as an axis (always positive) */
private final AxisVelocity horVel = new AxisVelocity();
@ -522,21 +525,13 @@ public class MovingData extends ACheckData {
public void addHorizontalVelocity(final Velocity vel) {
horVel.add(vel);
}
/**
* Add vertical velocity (distance). <br>
* @param vel
*/
public void addVerticalVelocity(final Velocity vel) {
horVel.add(vel);
}
/**
* Remove all vertical and horizontal velocity.
*/
public void removeAllVelocity() {
horVel.clear();
// verVel.clear();
// verVel.clear();
}
/**
@ -546,7 +541,7 @@ public class MovingData extends ACheckData {
*/
public void removeInvalidVelocity(final int tick) {
horVel.removeInvalid(tick);
// verVel.removeInvalid(tick);
// verVel.removeInvalid(tick);
}
/**
@ -555,7 +550,7 @@ public class MovingData extends ACheckData {
public void clearActiveHorVel() {
horVel.clearActive();
}
/**
* Clear only active horizontal velocity.
*/
@ -570,14 +565,14 @@ public class MovingData extends ACheckData {
public boolean hasQueuedHorVel() {
return horVel.hasQueued();
}
// public boolean hasActiveVerVel() {
// return verVel.hasActive();
// }
// public boolean hasQueuedVerVel() {
// return verVel.hasQueued();
// }
// public boolean hasActiveVerVel() {
// return verVel.hasActive();
// }
// public boolean hasQueuedVerVel() {
// return verVel.hasQueued();
// }
/**
* Called for moving events, increase age of velocity, decrease amounts, check which entries are invalid. Both horizontal and vertical.
@ -585,9 +580,9 @@ public class MovingData extends ACheckData {
public void velocityTick() {
// Horizontal velocity (intermediate concept).
horVel.tick();
// Vertical velocity (new concept).
// verVel.tick();
// verVel.tick();
if (verticalVelocity <= 0.09D) {
verticalVelocityUsed ++;
verticalVelocityCounter--;
@ -779,4 +774,50 @@ public class MovingData extends ACheckData {
trace = null;
}
/**
* Add velocity to internal book-keeping.
* @param player
* @param data
* @param cc
* @param vx
* @param vy
* @param vz
*/
public void addVelocity(final Player player, final MovingConfig cc, final double vx, final double vy, final double vz) {
final int tick = TickTask.getTick();
removeInvalidVelocity(tick - cc.velocityActivationTicks);
if (debug) {
NCPAPIProvider.getNoCheatPlusAPI().getLogManager().debug(Streams.TRACE_FILE, player.getName() + " new velocity: " + vx + ", " + vy + ", " + vz);
}
boolean used = false;
if (vy > 0D) {
used = true;
if (verticalFreedom <= 0.001 && verticalVelocityCounter >= 0) {
verticalVelocity = 0;
}
verticalVelocity += vy;
verticalFreedom += verticalVelocity;
verticalVelocityCounter = Math.min(100, Math.max(verticalVelocityCounter, cc.velocityGraceTicks ) + 1 + (int) Math.round(vy * 10.0)); // 50;
verticalVelocityUsed = 0;
}
if (vx != 0.0 && vz != 0.0) {
final double newVal = Math.sqrt(vx * vx + vz * vz);
used = true;
final Velocity vel = new Velocity(tick, newVal, cc.velocityActivationCounter, Math.max(20, 1 + (int) Math.round(newVal * 10.0)));
addHorizontalVelocity(vel);
}
// Set dirty flag here.
if (used) {
sfDirty = true; // TODO: Only needed for vertical velocity? Get rid anyway :p.
sfNoLowJump = true;
}
// TODO: clear accounting here ?
}
}

View File

@ -83,65 +83,6 @@ import fr.neatmonster.nocheatplus.utilities.build.BuildParameters;
*/
public class MovingListener extends CheckListener implements TickListener, IRemoveData, IHaveCheckType, INotifyReload, INeedConfig, JoinLeaveListener{
/**
* Check if the player is to be checked by the survivalfly check.
* @param player
* @param data
* @param cc
* @return
*/
public static final boolean shouldCheckSurvivalFly(final Player player, final MovingData data, final MovingConfig cc) {
return cc.survivalFlyCheck && !NCPExemptionManager.isExempted(player, CheckType.MOVING_SURVIVALFLY) && !player.hasPermission(Permissions.MOVING_SURVIVALFLY) &&
(cc.ignoreCreative || player.getGameMode() != GameMode.CREATIVE) && !player.isFlying() && (cc.ignoreAllowFlight || !player.getAllowFlight());
}
/**
* Handle an illegal move by a player, attempt to restore a valid location.
* @param event
* @param player
* @param data
*/
public static void handleIllegalMove(final PlayerMoveEvent event, final Player player, final MovingData data)
{
// This might get extended to a check-like thing.
boolean restored = false;
final PlayerLocation pLoc = new PlayerLocation(NCPAPIProvider.getNoCheatPlusAPI().getMCAccess(), null);
// (Mind that we don't set the block cache here).
final Location loc = player.getLocation();
if (!restored && data.hasSetBack()) {
final Location setBack = data.getSetBack(loc);
pLoc.set(setBack, player);
if (!pLoc.isIllegal()) {
event.setFrom(setBack);
event.setTo(setBack);
restored = true;
}
else {
data.resetSetBack();
}
}
if (!restored) {
pLoc.set(loc, player);
if (!pLoc.isIllegal()) {
event.setFrom(loc);
event.setTo(loc);
restored = true;
}
}
pLoc.cleanup();
if (!restored) {
// TODO: reset the bounding box of the player ?
if (MovingConfig.getConfig(player).tempKickIllegal) {
NCPAPIProvider.getNoCheatPlusAPI().denyLogin(player.getName(), 24L * 60L * 60L * 1000L);
StaticLog.logSevere("[NCP] could not restore location for " + player.getName() + ", kicking them and deny login for 24 hours");
} else {
StaticLog.logSevere("[NCP] could not restore location for " + player.getName() + ", kicking them.");
}
CheckUtils.kickIllegalMove(player);
}
}
/** The instance of NoCheatPlus. */
private final Plugin plugin = Bukkit.getPluginManager().getPlugin("NoCheatPlus"); // TODO
@ -238,7 +179,7 @@ public class MovingListener extends CheckListener implements TickListener, IRemo
if (Math.abs(loc.getX() - 0.5 - block.getX()) <= 1D
&& Math.abs(loc.getZ() - 0.5 - block.getZ()) <= 1D
&& loc.getY() - blockY > 0D && loc.getY() - blockY < 2D
&& (canJumpOffTop(mat) || BlockProperties.isLiquid(mat))) {
&& (MovingUtil.canJumpOffTop(mat) || BlockProperties.isLiquid(mat))) {
// The creative fly and/or survival fly check is enabled, the
// block was placed below the player and is
// solid, so do what we have to do.
@ -248,16 +189,6 @@ public class MovingListener extends CheckListener implements TickListener, IRemo
useLoc.setWorld(null);
}
/**
* Used for a workaround that resets the set-back for the case of jumping on just placed blocks.
* @param id
* @return
*/
private static boolean canJumpOffTop(final Material blockType) {
// TODO: Test if this can be removed!
return BlockProperties.isGround(blockType) || BlockProperties.isSolid(blockType);
}
/**
* We listen to this event to prevent player from flying by sending bed leaving packets.
*
@ -288,7 +219,7 @@ public class MovingListener extends CheckListener implements TickListener, IRemo
final MovingData data = MovingData.getData(player);
final MovingConfig cc = MovingConfig.getConfig(player);
Location target = null;
final boolean sfCheck = shouldCheckSurvivalFly(player, data, cc);
final boolean sfCheck = MovingUtil.shouldCheckSurvivalFly(player, data, cc);
if (sfCheck) {
target = data.getSetBack(loc);
}
@ -452,7 +383,7 @@ public class MovingListener extends CheckListener implements TickListener, IRemo
}
// Check for illegal move and bounding box etc.
if (moveInfo.from.isIllegal() || moveInfo.to.isIllegal()) {
handleIllegalMove(event, player, data);
MovingUtil.handleIllegalMove(event, player, data);
moveInfo.cleanup();
parkedInfo.add(moveInfo);
return;
@ -548,7 +479,7 @@ public class MovingListener extends CheckListener implements TickListener, IRemo
// Check which fly check to use.
final boolean checkCf;
final boolean checkSf;
if (shouldCheckSurvivalFly(player, data, cc)) {
if (MovingUtil.shouldCheckSurvivalFly(player, data, cc)) {
checkCf = false;
checkSf = true;
data.adjustWalkSpeed(player.getWalkSpeed(), tick, cc.speedGrace);
@ -563,6 +494,17 @@ public class MovingListener extends CheckListener implements TickListener, IRemo
else{
checkCf = checkSf = false;
}
boolean checkNf = true;
if (checkSf || checkCf) {
// Check jumping on things like slime blocks.
if (to.getY() < from.getY() && player.getFallDistance() > 1f && (BlockProperties.getBlockFlags(pTo.getTypeIdBelow()) & BlockProperties.F_BOUNCE25) != 0L) {
// Apply changes to NoFall and other.
processTrampoline(player, pFrom, pTo, data, cc);
// Skip NoFall.
checkNf = false;
}
}
// Flying checks.
if (checkSf) {
@ -587,7 +529,10 @@ public class MovingListener extends CheckListener implements TickListener, IRemo
// Only check if passable has not already set back.
newTo = survivalFly.check(player, pFrom, pTo, data, cc, time);
}
final boolean checkNf = cc.noFallCheck && !NCPExemptionManager.isExempted(player, CheckType.MOVING_NOFALL) && !player.hasPermission(Permissions.MOVING_NOFALL);
// Only check NoFall, if not already vetoed.
if (checkNf) {
checkNf = cc.noFallCheck && !NCPExemptionManager.isExempted(player, CheckType.MOVING_NOFALL) && !player.hasPermission(Permissions.MOVING_NOFALL);
}
if (newTo == null) {
// Hover.
// TODO: Could reset for from-on-ground as well, for not too big moves.
@ -669,6 +614,32 @@ public class MovingListener extends CheckListener implements TickListener, IRemo
parkedInfo.add(moveInfo);
}
private void processTrampoline(final Player player, final PlayerLocation from, final PlayerLocation to, final MovingData data, final MovingConfig cc) {
// TODO: Where to put...
// TODO: Other side conditions (fluids, web)
// TODO: Fake fall distance exploit (to bounce off slime blocks :p).
// TODO: Confine further (depends on which checks are enabled, if possible to check, e.g. noFallMaxY).
// Check for slime block below explicitly.
// The center of the player must be above the block.
if (cc.debug) {
NCPAPIProvider.getNoCheatPlusAPI().getLogManager().debug(Streams.TRACE_FILE, player.getName() + " Trampoline effect...");
}
// TODO: Consider making this just a checking method (use result for applying effects).
// CHEATING: Add velocity.
// TODO: 1. Confine for direct use (no latency here). 2. Hard set velocity? 3.. Switch to friction based.
if (!survivalFly.isReallySneaking(player)) {
data.addVelocity(player, cc, 0.0, (double) player.getFallDistance() / 30.0, 0.0);
}
// CHEATING: Remove fall distance:
// TODO: Test under which conditions the player would still take fall damage.
// TODO: Depends on NoFall being enabled as well.
player.setFallDistance(0f);
data.noFallFallDistance = 0f;
data.noFallMaxY = 0.0;
data.noFallSkipAirCheck = true;
// (Skipping the NoFall check is necessary, because THIS move can be big.)
}
/**
*
* @param player
@ -1022,53 +993,7 @@ public class MovingListener extends CheckListener implements TickListener, IRemo
// Process velocity.
final Vector velocity = event.getVelocity();
final MovingConfig cc = MovingConfig.getConfig(player);
addVelocity(player, data, cc, velocity.getX(), velocity.getY(), velocity.getZ());
}
/**
* Add velocity to internal book-keeping.
* @param player
* @param data
* @param cc
* @param vx
* @param vy
* @param vz
*/
public static void addVelocity(final Player player, final MovingData data, final MovingConfig cc, final double vx, final double vy, final double vz) {
final int tick = TickTask.getTick();
data.removeInvalidVelocity(tick - cc.velocityActivationTicks);
if (data.debug) {
NCPAPIProvider.getNoCheatPlusAPI().getLogManager().debug(Streams.TRACE_FILE, player.getName() + " new velocity: " + vx + ", " + vy + ", " + vz);
}
boolean used = false;
if (vy > 0D) {
used = true;
if (data.verticalFreedom <= 0.001 && data.verticalVelocityCounter >= 0) {
data.verticalVelocity = 0;
}
data.verticalVelocity += vy;
data.verticalFreedom += data.verticalVelocity;
data.verticalVelocityCounter = Math.min(100, Math.max(data.verticalVelocityCounter, cc.velocityGraceTicks ) + 1 + (int) Math.round(vy * 10.0)); // 50;
data.verticalVelocityUsed = 0;
}
if (vx != 0.0 && vz != 0.0) {
final double newVal = Math.sqrt(vx * vx + vz * vz);
used = true;
final Velocity vel = new Velocity(tick, newVal, cc.velocityActivationCounter, Math.max(20, 1 + (int) Math.round(newVal * 10.0)));
data.addHorizontalVelocity(vel);
}
// Set dirty flag here.
if (used) {
data.sfDirty = true; // TODO: Only needed for vertical velocity? Get rid anyway :p.
data.sfNoLowJump = true;
}
// TODO: clear accounting here ?
data.addVelocity(player, cc, velocity.getX(), velocity.getY(), velocity.getZ());
}
/**
@ -1178,7 +1103,7 @@ public class MovingListener extends CheckListener implements TickListener, IRemo
return;
}
final MovingConfig cc = MovingConfig.getConfig(player);
if (event.isCancelled() || !shouldCheckSurvivalFly(player, data, cc) || !noFall.isEnabled(player)) {
if (event.isCancelled() || !MovingUtil.shouldCheckSurvivalFly(player, data, cc) || !noFall.isEnabled(player)) {
data.clearNoFallData();
return;
}
@ -1659,7 +1584,7 @@ public class MovingListener extends CheckListener implements TickListener, IRemo
else{
if (data.sfHoverTicks > cc.sfHoverTicks) {
// Re-Check if survivalfly can apply at all.
if (shouldCheckSurvivalFly(player, data, cc)) {
if (MovingUtil.shouldCheckSurvivalFly(player, data, cc)) {
handleHoverViolation(player, loc, cc, data);
// Assume the player might still be hovering.
res = false;

View File

@ -0,0 +1,92 @@
package fr.neatmonster.nocheatplus.checks.moving;
import org.bukkit.GameMode;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerMoveEvent;
import fr.neatmonster.nocheatplus.NCPAPIProvider;
import fr.neatmonster.nocheatplus.checks.CheckType;
import fr.neatmonster.nocheatplus.hooks.NCPExemptionManager;
import fr.neatmonster.nocheatplus.logging.StaticLog;
import fr.neatmonster.nocheatplus.permissions.Permissions;
import fr.neatmonster.nocheatplus.utilities.BlockProperties;
import fr.neatmonster.nocheatplus.utilities.CheckUtils;
import fr.neatmonster.nocheatplus.utilities.PlayerLocation;
/**
* Static utility methods.
* @author dev1mc
*
*/
public class MovingUtil {
/**
* Check if the player is to be checked by the survivalfly check.
* @param player
* @param data
* @param cc
* @return
*/
public static final boolean shouldCheckSurvivalFly(final Player player, final MovingData data, final MovingConfig cc) {
return cc.survivalFlyCheck && !NCPExemptionManager.isExempted(player, CheckType.MOVING_SURVIVALFLY) && !player.hasPermission(Permissions.MOVING_SURVIVALFLY) &&
(cc.ignoreCreative || player.getGameMode() != GameMode.CREATIVE) && !player.isFlying() && (cc.ignoreAllowFlight || !player.getAllowFlight());
}
/**
* Handle an illegal move by a player, attempt to restore a valid location.
* @param event
* @param player
* @param data
*/
public static void handleIllegalMove(final PlayerMoveEvent event, final Player player, final MovingData data)
{
// This might get extended to a check-like thing.
boolean restored = false;
final PlayerLocation pLoc = new PlayerLocation(NCPAPIProvider.getNoCheatPlusAPI().getMCAccess(), null);
// (Mind that we don't set the block cache here).
final Location loc = player.getLocation();
if (!restored && data.hasSetBack()) {
final Location setBack = data.getSetBack(loc);
pLoc.set(setBack, player);
if (!pLoc.isIllegal()) {
event.setFrom(setBack);
event.setTo(setBack);
restored = true;
}
else {
data.resetSetBack();
}
}
if (!restored) {
pLoc.set(loc, player);
if (!pLoc.isIllegal()) {
event.setFrom(loc);
event.setTo(loc);
restored = true;
}
}
pLoc.cleanup();
if (!restored) {
// TODO: reset the bounding box of the player ?
if (MovingConfig.getConfig(player).tempKickIllegal) {
NCPAPIProvider.getNoCheatPlusAPI().denyLogin(player.getName(), 24L * 60L * 60L * 1000L);
StaticLog.logSevere("[NCP] could not restore location for " + player.getName() + ", kicking them and deny login for 24 hours");
} else {
StaticLog.logSevere("[NCP] could not restore location for " + player.getName() + ", kicking them.");
}
CheckUtils.kickIllegalMove(player);
}
}
/**
* Used for a workaround that resets the set-back for the case of jumping on just placed blocks.
* @param id
* @return
*/
public static boolean canJumpOffTop(final Material blockType) {
return BlockProperties.isGround(blockType) || BlockProperties.isSolid(blockType);
}
}

View File

@ -76,14 +76,20 @@ public class NoFall extends Check {
private void dealFallDamage(final Player player, final double damage) {
// TODO: Byte code compatibility ?
final EntityDamageEvent event = BridgeHealth.getEntityDamageEvent(player, DamageCause.FALL, damage);
Bukkit.getPluginManager().callEvent(event);
if (!event.isCancelled()){
// TODO: account for no damage ticks etc.
player.setLastDamageCause(event);
mcAccess.dealFallDamage(player, BridgeHealth.getDamage(event));
if (mcAccess.dealFallDamageFiresAnEvent().decide()) {
// TODO: Better decideOptimistically?
mcAccess.dealFallDamage(player, damage);
}
else {
final EntityDamageEvent event = BridgeHealth.getEntityDamageEvent(player, DamageCause.FALL, damage);
Bukkit.getPluginManager().callEvent(event);
if (!event.isCancelled()){
// TODO: account for no damage ticks etc.
player.setLastDamageCause(event);
mcAccess.dealFallDamage(player, BridgeHealth.getDamage(event));
}
}
// TODO: let this be done by the damage event (!).
// data.clearNoFallData(); // -> currently done in the damage eventhandling method.
player.setFallDistance(0);

View File

@ -589,6 +589,15 @@ public class SurvivalFly extends Check {
return hAllowedDistance;
}
/**
* Access method from outside.
* @param player
* @return
*/
public boolean isReallySneaking(final Player player) {
return reallySneaking.contains(player.getName());
}
/**
* Check if touching the ground was lost (client did not send, or server did not put it through).
* @param player
@ -1140,6 +1149,7 @@ public class SurvivalFly extends Check {
double yMargin = cc.yOnGround;
// TODO: Might set margin higher depending on distance to 0 of block and last y distance etc.
// TODO: check with iY + 0.25 removed.
// TODO: Slime blocks ?
if (BlockProperties.isOnGround(from.getBlockCache(), Math.min(data.fromX, from.getX()) - r, iY - yMargin, Math.min(data.fromZ, from.getZ()) - r, Math.max(data.fromX, from.getX()) + r, iY + 0.25, Math.max(data.fromZ, from.getZ()) + r, 0L)) {
return applyLostGround(player, from, true, data, "interpolate");
}

View File

@ -20,120 +20,126 @@ import fr.neatmonster.nocheatplus.utilities.BlockCache;
*
*/
public interface MCAccess {
/**
* 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.
* @return
*/
public String getMCVersion();
/**
* Server version tag, like CB 2511.
* @return
*/
public String getServerVersionTag();
/**
* Get the servers command map.
* @return May return null if not supported.
*/
public CommandMap getCommandMap();
/**
* Get a BlockCache implementation.
* @param world May be null to store an instance of BlockCache for future use.
* @return
*/
public BlockCache getBlockCache(World world);
/**
* Get height of an entity (attack relevant, the maximal "thing" found).
*/
public double getHeight(Entity entity);
/**
* Return some width.
* @param entity
* @return
*/
public double getWidth(Entity entity);
/**
* NMS Block static.
* @param id
* @return MAYBE if undecided, YES or NO if decided.
*/
public AlmostBoolean isBlockSolid(int id);
/**
* NMS Block static..
* @param id
* @return MAYBE if undecided, YES or NO if decided.
*/
public AlmostBoolean isBlockLiquid(int id);
/**
* Does only check y bounds, returns false if dead. this is half a check as auxiliary means for PlayerLocation.isIllegal.
* @param player
* @return MAYBE if undecided, YES or NO if decided.
*/
public AlmostBoolean isIllegalBounds(Player player);
/**
*
* @param player
* @return Double.NEGATIVE_INFINITY if not present.
*/
public double getJumpAmplifier(Player player);
/**
*
* @return Double.NEGATIVE_INFINITY if not present.
*/
public double getFasterMovementAmplifier(Player player);
/**
* 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.
* @return
*/
public String getMCVersion();
public int getInvulnerableTicks(Player player);
/**
* Server version tag, like CB 2511.
* @return
*/
public String getServerVersionTag();
public void setInvulnerableTicks(Player player, int ticks);
/**
* Get the servers command map.
* @return May return null if not supported.
*/
public CommandMap getCommandMap();
public void dealFallDamage(Player player, double damage);
/**
* Get a BlockCache implementation.
* @param world May be null to store an instance of BlockCache for future use.
* @return
*/
public BlockCache getBlockCache(World world);
/**
* This may well be removed, if possible to check with Bukkit.
* @param damaged
* @return
*/
public boolean isComplexPart(Entity damaged);
/**
* Get height of an entity (attack relevant, the maximal "thing" found).
*/
public double getHeight(Entity entity);
/**
* Return some width.
* @param entity
* @return
*/
public double getWidth(Entity entity);
/**
* NMS Block static.
* @param id
* @return MAYBE if undecided, YES or NO if decided.
*/
public AlmostBoolean isBlockSolid(int id);
/**
* NMS Block static..
* @param id
* @return MAYBE if undecided, YES or NO if decided.
*/
public AlmostBoolean isBlockLiquid(int id);
/**
* Does only check y bounds, returns false if dead. this is half a check as auxiliary means for PlayerLocation.isIllegal.
* @param player
* @return MAYBE if undecided, YES or NO if decided.
*/
public AlmostBoolean isIllegalBounds(Player player);
/**
*
* @param player
* @return Double.NEGATIVE_INFINITY if not present.
*/
public double getJumpAmplifier(Player player);
/**
*
* @return Double.NEGATIVE_INFINITY if not present.
*/
public double getFasterMovementAmplifier(Player player);
public int getInvulnerableTicks(Player player);
public void setInvulnerableTicks(Player player, int ticks);
public void dealFallDamage(Player player, double damage);
/**
* If dealFallDamage(Player, double) will fire a damage event.
* @return
*/
public AlmostBoolean dealFallDamageFiresAnEvent();
/**
* This may well be removed, if possible to check with Bukkit.
* @param damaged
* @return
*/
public boolean isComplexPart(Entity damaged);
/**
* Tests if player is not set to dead but has no health.
* @param player
* @return
*/
public boolean shouldBeZombie(Player player);
/**
* Ensure the player is really taken out: Set flag + death ticks.
*
* TODO: Check if still necessary + make knowledge-base entries for what to check.
*
* @param player
* @param deathTicks
*/
public void setDead(Player player, int deathTicks);
/**
* Usually sand and gravel. Not for fastest access.
* @param type
* @return
*/
public boolean hasGravity(Material type);
// /**
// * Correct the direction (yaw + pitch). If this can't be done lightly it should just do nothing. Check pitch and yaw before calling, use auxiliary methods from LocUtil.
// * @param player
// */
// public void correctDirection(Player player);
/**
* Tests if player is not set to dead but has no health.
* @param player
* @return
*/
public boolean shouldBeZombie(Player player);
/**
* Ensure the player is really taken out: Set flag + death ticks.
*
* TODO: Check if still necessary + make knowledge-base entries for what to check.
*
* @param player
* @param deathTicks
*/
public void setDead(Player player, int deathTicks);
/**
* Usually sand and gravel. Not for fastest access.
* @param type
* @return
*/
public boolean hasGravity(Material type);
// /**
// * Correct the direction (yaw + pitch). If this can't be done lightly it should just do nothing. Check pitch and yaw before calling, use auxiliary methods from LocUtil.
// * @param player
// */
// public void correctDirection(Player player);
}

View File

@ -7,6 +7,7 @@ import fr.neatmonster.nocheatplus.compat.blocks.init.BlockInit;
import fr.neatmonster.nocheatplus.config.WorldConfigProvider;
import fr.neatmonster.nocheatplus.logging.StaticLog;
import fr.neatmonster.nocheatplus.utilities.BlockFlags;
import fr.neatmonster.nocheatplus.utilities.BlockProperties;
public class BlocksMC1_8 implements BlockPropertiesSetup {
@ -22,6 +23,8 @@ public class BlocksMC1_8 implements BlockPropertiesSetup {
public void setupBlockProperties(WorldConfigProvider<?> worldConfigProvider) {
// 165(SLIME_BLOCK
BlockInit.setAs(165, Material.TNT); // Full block, instant break.
// Add the bouncing flag.
BlockProperties.setBlockFlags(165, BlockProperties.getBlockFlags(165) | BlockProperties.F_BOUNCE25);
// 166(BARRIER
BlockInit.setAs(166, Material.BEDROCK); // Full block, unbreakable.

View File

@ -367,13 +367,19 @@ public class BlockProperties {
/** Meta-flag to indicate that the (max.-) edges should mean a collision, can be passed to collidesBlock. */
public static final long F_COLLIDE_EDGES = 0x100000;
/** Thick fence (default wooden fence). */
public static final long F_THICK_FENCE = 0x200000;
/** Fence gate style with 0x04 being fully passable. */
public static final long F_PASSABLE_X4 = 0x200000;
// TODO: Separate no fall damage flag ? [-> on ground could return "dominating" flags, or extra flags]
/** Like slime block: bounce back 25% of fall height without taking fall damage [TODO: Check/adjust]. */
public static final long F_BOUNCE25 = 0x400000;
// TODO: When flags are out, switch to per-block classes :p.
/**
* Map flag to names.
*/
@ -601,7 +607,7 @@ public class BlockProperties {
}) {
blockFlags[mat.getId()] |= F_HEIGHT150 | F_VARIABLE | F_THICK_FENCE;
}
// Fence gate(s).
for (final Material mat : new Material[]{
Material.FENCE_GATE,
@ -1334,7 +1340,7 @@ public class BlockProperties {
pLoc.cleanup();
return res;
}
/**
* Simple checking method, heavy. No isIllegal check.
* @param player