More complete go on speed attributes.

* Undo the sprint boost modifier until we add it (minimize code change).
* Implement methods for MCAccess implementations down to 1_6_R1.
This commit is contained in:
asofold 2015-05-30 02:21:23 +02:00
parent 2450636f3c
commit cb62547fc0
23 changed files with 266 additions and 48 deletions

View File

@ -243,6 +243,11 @@ public class MCAccessBukkit implements MCAccess, BlockPropertiesSetup{
return 1.0; return 1.0;
} }
@Override
public double getSprintAttributeMultiplier(Player player) {
return player.isSprinting() ? 1.3 : 1.0;
}
@Override @Override
public int getInvulnerableTicks(final Player player) { public int getInvulnerableTicks(final Player player) {
// TODO: Ahhh... // TODO: Ahhh...

View File

@ -117,6 +117,11 @@ public class MCAccessCB2512 implements MCAccess{
return 1.0; return 1.0;
} }
@Override
public double getSprintAttributeMultiplier(Player player) {
return player.isSprinting() ? 1.3 : 1.0;
}
@Override @Override
public int getInvulnerableTicks(final Player player) { public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks; return ((CraftPlayer) player).getHandle().invulnerableTicks;

View File

@ -117,6 +117,11 @@ public class MCAccessCB2545 implements MCAccess{
return 1.0; return 1.0;
} }
@Override
public double getSprintAttributeMultiplier(Player player) {
return player.isSprinting() ? 1.3 : 1.0;
}
@Override @Override
public int getInvulnerableTicks(final Player player) { public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks; return ((CraftPlayer) player).getHandle().invulnerableTicks;

View File

@ -118,6 +118,11 @@ public class MCAccessCB2602 implements MCAccess{
return 1.0; return 1.0;
} }
@Override
public double getSprintAttributeMultiplier(Player player) {
return player.isSprinting() ? 1.3 : 1.0;
}
@Override @Override
public int getInvulnerableTicks(final Player player) { public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks; return ((CraftPlayer) player).getHandle().invulnerableTicks;

View File

@ -119,6 +119,11 @@ public class MCAccessCB2645 implements MCAccess{
return 1.0; return 1.0;
} }
@Override
public double getSprintAttributeMultiplier(Player player) {
return player.isSprinting() ? 1.3 : 1.0;
}
@Override @Override
public int getInvulnerableTicks(final Player player) { public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks; return ((CraftPlayer) player).getHandle().invulnerableTicks;

View File

@ -121,6 +121,11 @@ public class MCAccessCB2691 implements MCAccess{
return 1.0; return 1.0;
} }
@Override
public double getSprintAttributeMultiplier(Player player) {
return player.isSprinting() ? 1.3 : 1.0;
}
@Override @Override
public int getInvulnerableTicks(final Player player) { public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks; return ((CraftPlayer) player).getHandle().invulnerableTicks;

View File

@ -119,6 +119,11 @@ public class MCAccessCB2763 implements MCAccess{
return 1.0; return 1.0;
} }
@Override
public double getSprintAttributeMultiplier(Player player) {
return player.isSprinting() ? 1.3 : 1.0;
}
@Override @Override
public int getInvulnerableTicks(final Player player) { public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks; return ((CraftPlayer) player).getHandle().invulnerableTicks;

View File

@ -6,6 +6,9 @@ import net.minecraft.server.v1_6_R1.DamageSource;
import net.minecraft.server.v1_6_R1.EntityComplexPart; import net.minecraft.server.v1_6_R1.EntityComplexPart;
import net.minecraft.server.v1_6_R1.EntityPlayer; import net.minecraft.server.v1_6_R1.EntityPlayer;
import net.minecraft.server.v1_6_R1.MobEffectList; import net.minecraft.server.v1_6_R1.MobEffectList;
import net.minecraft.server.v1_6_R1.AttributeInstance;
import net.minecraft.server.v1_6_R1.AttributeModifier;
import net.minecraft.server.v1_6_R1.GenericAttributes;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
@ -14,12 +17,14 @@ import org.bukkit.command.CommandMap;
import org.bukkit.craftbukkit.v1_6_R1.CraftServer; import org.bukkit.craftbukkit.v1_6_R1.CraftServer;
import org.bukkit.craftbukkit.v1_6_R1.entity.CraftEntity; import org.bukkit.craftbukkit.v1_6_R1.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_6_R1.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_6_R1.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_6_R1.entity.CraftLivingEntity;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import fr.neatmonster.nocheatplus.compat.AlmostBoolean; import fr.neatmonster.nocheatplus.compat.AlmostBoolean;
import fr.neatmonster.nocheatplus.compat.MCAccess; import fr.neatmonster.nocheatplus.compat.MCAccess;
import fr.neatmonster.nocheatplus.utilities.AttribUtil;
import fr.neatmonster.nocheatplus.utilities.BlockCache; import fr.neatmonster.nocheatplus.utilities.BlockCache;
import fr.neatmonster.nocheatplus.utilities.ReflectionUtil; import fr.neatmonster.nocheatplus.utilities.ReflectionUtil;
@ -116,8 +121,18 @@ public class MCAccessCB2794 implements MCAccess{
@Override @Override
public double getSpeedAttributeMultiplier(Player player) { public double getSpeedAttributeMultiplier(Player player) {
// TODO: Implement. final AttributeInstance attr = ((CraftLivingEntity) player).getHandle().a(GenericAttributes.d);
return attr.e() / attr.b();
}
@Override
public double getSprintAttributeMultiplier(Player player) {
final AttributeModifier mod = ((CraftLivingEntity) player).getHandle().a(GenericAttributes.d).a(AttribUtil.ID_SPRINT_BOOST);
if (mod == null) {
return 1.0; return 1.0;
} else {
return AttribUtil.getMultiplier(mod.c(), mod.d());
}
} }
@Override @Override

View File

@ -6,6 +6,9 @@ import net.minecraft.server.v1_6_R2.DamageSource;
import net.minecraft.server.v1_6_R2.EntityComplexPart; import net.minecraft.server.v1_6_R2.EntityComplexPart;
import net.minecraft.server.v1_6_R2.EntityPlayer; import net.minecraft.server.v1_6_R2.EntityPlayer;
import net.minecraft.server.v1_6_R2.MobEffectList; import net.minecraft.server.v1_6_R2.MobEffectList;
import net.minecraft.server.v1_6_R2.AttributeInstance;
import net.minecraft.server.v1_6_R2.AttributeModifier;
import net.minecraft.server.v1_6_R2.GenericAttributes;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
@ -14,12 +17,14 @@ import org.bukkit.command.CommandMap;
import org.bukkit.craftbukkit.v1_6_R2.CraftServer; import org.bukkit.craftbukkit.v1_6_R2.CraftServer;
import org.bukkit.craftbukkit.v1_6_R2.entity.CraftEntity; import org.bukkit.craftbukkit.v1_6_R2.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_6_R2.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_6_R2.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_6_R2.entity.CraftLivingEntity;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import fr.neatmonster.nocheatplus.compat.AlmostBoolean; import fr.neatmonster.nocheatplus.compat.AlmostBoolean;
import fr.neatmonster.nocheatplus.compat.MCAccess; import fr.neatmonster.nocheatplus.compat.MCAccess;
import fr.neatmonster.nocheatplus.utilities.AttribUtil;
import fr.neatmonster.nocheatplus.utilities.BlockCache; import fr.neatmonster.nocheatplus.utilities.BlockCache;
import fr.neatmonster.nocheatplus.utilities.ReflectionUtil; import fr.neatmonster.nocheatplus.utilities.ReflectionUtil;
@ -117,8 +122,18 @@ public class MCAccessCB2808 implements MCAccess{
@Override @Override
public double getSpeedAttributeMultiplier(Player player) { public double getSpeedAttributeMultiplier(Player player) {
// TODO: Implement. final AttributeInstance attr = ((CraftLivingEntity) player).getHandle().getAttributeInstance(GenericAttributes.d);
return attr.getValue() / attr.b();
}
@Override
public double getSprintAttributeMultiplier(Player player) {
final AttributeModifier mod = ((CraftLivingEntity) player).getHandle().getAttributeInstance(GenericAttributes.d).a(AttribUtil.ID_SPRINT_BOOST);
if (mod == null) {
return 1.0; return 1.0;
} else {
return AttribUtil.getMultiplier(mod.c(), mod.d());
}
} }
@Override @Override

View File

@ -6,6 +6,9 @@ import net.minecraft.server.v1_6_R3.DamageSource;
import net.minecraft.server.v1_6_R3.EntityComplexPart; import net.minecraft.server.v1_6_R3.EntityComplexPart;
import net.minecraft.server.v1_6_R3.EntityPlayer; import net.minecraft.server.v1_6_R3.EntityPlayer;
import net.minecraft.server.v1_6_R3.MobEffectList; import net.minecraft.server.v1_6_R3.MobEffectList;
import net.minecraft.server.v1_6_R3.AttributeInstance;
import net.minecraft.server.v1_6_R3.AttributeModifier;
import net.minecraft.server.v1_6_R3.GenericAttributes;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
@ -14,12 +17,14 @@ import org.bukkit.command.CommandMap;
import org.bukkit.craftbukkit.v1_6_R3.CraftServer; import org.bukkit.craftbukkit.v1_6_R3.CraftServer;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftEntity; import org.bukkit.craftbukkit.v1_6_R3.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_6_R3.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_6_R3.entity.CraftLivingEntity;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import fr.neatmonster.nocheatplus.compat.AlmostBoolean; import fr.neatmonster.nocheatplus.compat.AlmostBoolean;
import fr.neatmonster.nocheatplus.compat.MCAccess; import fr.neatmonster.nocheatplus.compat.MCAccess;
import fr.neatmonster.nocheatplus.utilities.AttribUtil;
import fr.neatmonster.nocheatplus.utilities.BlockCache; import fr.neatmonster.nocheatplus.utilities.BlockCache;
import fr.neatmonster.nocheatplus.utilities.ReflectionUtil; import fr.neatmonster.nocheatplus.utilities.ReflectionUtil;
@ -118,8 +123,18 @@ public class MCAccessCB2882 implements MCAccess{
@Override @Override
public double getSpeedAttributeMultiplier(Player player) { public double getSpeedAttributeMultiplier(Player player) {
// TODO: Implement. final AttributeInstance attr = ((CraftLivingEntity) player).getHandle().getAttributeInstance(GenericAttributes.d);
return attr.getValue() / attr.b();
}
@Override
public double getSprintAttributeMultiplier(Player player) {
final AttributeModifier mod = ((CraftLivingEntity) player).getHandle().getAttributeInstance(GenericAttributes.d).a(AttribUtil.ID_SPRINT_BOOST);
if (mod == null) {
return 1.0; return 1.0;
} else {
return AttribUtil.getMultiplier(mod.c(), mod.d());
}
} }
@Override @Override

View File

@ -6,6 +6,9 @@ import net.minecraft.server.v1_7_R1.DamageSource;
import net.minecraft.server.v1_7_R1.EntityComplexPart; import net.minecraft.server.v1_7_R1.EntityComplexPart;
import net.minecraft.server.v1_7_R1.EntityPlayer; import net.minecraft.server.v1_7_R1.EntityPlayer;
import net.minecraft.server.v1_7_R1.MobEffectList; import net.minecraft.server.v1_7_R1.MobEffectList;
import net.minecraft.server.v1_7_R1.AttributeInstance;
import net.minecraft.server.v1_7_R1.AttributeModifier;
import net.minecraft.server.v1_7_R1.GenericAttributes;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
@ -14,12 +17,14 @@ import org.bukkit.command.CommandMap;
import org.bukkit.craftbukkit.v1_7_R1.CraftServer; import org.bukkit.craftbukkit.v1_7_R1.CraftServer;
import org.bukkit.craftbukkit.v1_7_R1.entity.CraftEntity; import org.bukkit.craftbukkit.v1_7_R1.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_7_R1.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_7_R1.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_7_R1.entity.CraftLivingEntity;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import fr.neatmonster.nocheatplus.compat.AlmostBoolean; import fr.neatmonster.nocheatplus.compat.AlmostBoolean;
import fr.neatmonster.nocheatplus.compat.MCAccess; import fr.neatmonster.nocheatplus.compat.MCAccess;
import fr.neatmonster.nocheatplus.utilities.AttribUtil;
import fr.neatmonster.nocheatplus.utilities.BlockCache; import fr.neatmonster.nocheatplus.utilities.BlockCache;
import fr.neatmonster.nocheatplus.utilities.ReflectionUtil; import fr.neatmonster.nocheatplus.utilities.ReflectionUtil;
@ -118,8 +123,18 @@ public class MCAccessCB2922 implements MCAccess{
@Override @Override
public double getSpeedAttributeMultiplier(Player player) { public double getSpeedAttributeMultiplier(Player player) {
// TODO: Implement. final AttributeInstance attr = ((CraftLivingEntity) player).getHandle().getAttributeInstance(GenericAttributes.d);
return attr.getValue() / attr.b();
}
@Override
public double getSprintAttributeMultiplier(Player player) {
final AttributeModifier mod = ((CraftLivingEntity) player).getHandle().getAttributeInstance(GenericAttributes.d).a(AttribUtil.ID_SPRINT_BOOST);
if (mod == null) {
return 1.0; return 1.0;
} else {
return AttribUtil.getMultiplier(mod.c(), mod.d());
}
} }
@Override @Override

View File

@ -6,6 +6,8 @@ import net.minecraft.server.v1_7_R2.DamageSource;
import net.minecraft.server.v1_7_R2.EntityComplexPart; import net.minecraft.server.v1_7_R2.EntityComplexPart;
import net.minecraft.server.v1_7_R2.EntityPlayer; import net.minecraft.server.v1_7_R2.EntityPlayer;
import net.minecraft.server.v1_7_R2.MobEffectList; import net.minecraft.server.v1_7_R2.MobEffectList;
import net.minecraft.server.v1_7_R2.AttributeModifier;
import net.minecraft.server.v1_7_R2.GenericAttributes;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
@ -14,12 +16,14 @@ import org.bukkit.command.CommandMap;
import org.bukkit.craftbukkit.v1_7_R2.CraftServer; import org.bukkit.craftbukkit.v1_7_R2.CraftServer;
import org.bukkit.craftbukkit.v1_7_R2.entity.CraftEntity; import org.bukkit.craftbukkit.v1_7_R2.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_7_R2.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_7_R2.entity.CraftPlayer;
import org.bukkit.craftbukkit.v1_7_R2.entity.CraftLivingEntity;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import fr.neatmonster.nocheatplus.compat.AlmostBoolean; import fr.neatmonster.nocheatplus.compat.AlmostBoolean;
import fr.neatmonster.nocheatplus.compat.MCAccess; import fr.neatmonster.nocheatplus.compat.MCAccess;
import fr.neatmonster.nocheatplus.utilities.AttribUtil;
import fr.neatmonster.nocheatplus.utilities.BlockCache; import fr.neatmonster.nocheatplus.utilities.BlockCache;
import fr.neatmonster.nocheatplus.utilities.ReflectionUtil; import fr.neatmonster.nocheatplus.utilities.ReflectionUtil;
@ -122,6 +126,16 @@ public class MCAccessCB3026 implements MCAccess{
return 1.0; return 1.0;
} }
@Override
public double getSprintAttributeMultiplier(Player player) {
final AttributeModifier mod = ((CraftLivingEntity) player).getHandle().getAttributeInstance(GenericAttributes.d).a(AttribUtil.ID_SPRINT_BOOST);
if (mod == null) {
return 1.0;
} else {
return AttribUtil.getMultiplier(mod.c(), mod.d());
}
}
@Override @Override
public int getInvulnerableTicks(final Player player) { public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks; return ((CraftPlayer) player).getHandle().invulnerableTicks;

View File

@ -1,10 +1,13 @@
package fr.neatmonster.nocheatplus.compat.cb3043; package fr.neatmonster.nocheatplus.compat.cb3043;
import net.minecraft.server.v1_7_R3.AttributeInstance;
import net.minecraft.server.v1_7_R3.AttributeModifier;
import net.minecraft.server.v1_7_R3.AxisAlignedBB; import net.minecraft.server.v1_7_R3.AxisAlignedBB;
import net.minecraft.server.v1_7_R3.Block; import net.minecraft.server.v1_7_R3.Block;
import net.minecraft.server.v1_7_R3.DamageSource; import net.minecraft.server.v1_7_R3.DamageSource;
import net.minecraft.server.v1_7_R3.EntityComplexPart; import net.minecraft.server.v1_7_R3.EntityComplexPart;
import net.minecraft.server.v1_7_R3.EntityPlayer; import net.minecraft.server.v1_7_R3.EntityPlayer;
import net.minecraft.server.v1_7_R3.GenericAttributes;
import net.minecraft.server.v1_7_R3.MobEffectList; import net.minecraft.server.v1_7_R3.MobEffectList;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@ -13,6 +16,7 @@ import org.bukkit.World;
import org.bukkit.command.CommandMap; import org.bukkit.command.CommandMap;
import org.bukkit.craftbukkit.v1_7_R3.CraftServer; import org.bukkit.craftbukkit.v1_7_R3.CraftServer;
import org.bukkit.craftbukkit.v1_7_R3.entity.CraftEntity; import org.bukkit.craftbukkit.v1_7_R3.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_7_R3.entity.CraftLivingEntity;
import org.bukkit.craftbukkit.v1_7_R3.entity.CraftPlayer; import org.bukkit.craftbukkit.v1_7_R3.entity.CraftPlayer;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
@ -20,6 +24,7 @@ import org.bukkit.entity.Player;
import fr.neatmonster.nocheatplus.compat.AlmostBoolean; import fr.neatmonster.nocheatplus.compat.AlmostBoolean;
import fr.neatmonster.nocheatplus.compat.MCAccess; import fr.neatmonster.nocheatplus.compat.MCAccess;
import fr.neatmonster.nocheatplus.utilities.AttribUtil;
import fr.neatmonster.nocheatplus.utilities.BlockCache; import fr.neatmonster.nocheatplus.utilities.BlockCache;
import fr.neatmonster.nocheatplus.utilities.ReflectionUtil; import fr.neatmonster.nocheatplus.utilities.ReflectionUtil;
@ -137,8 +142,18 @@ public class MCAccessCB3043 implements MCAccess{
@Override @Override
public double getSpeedAttributeMultiplier(Player player) { public double getSpeedAttributeMultiplier(Player player) {
// TODO: Implement. final AttributeInstance attr = ((CraftLivingEntity) player).getHandle().getAttributeInstance(GenericAttributes.d);
return attr.getValue() / attr.b();
}
@Override
public double getSprintAttributeMultiplier(Player player) {
final AttributeModifier mod = ((CraftLivingEntity) player).getHandle().getAttributeInstance(GenericAttributes.d).a(AttribUtil.ID_SPRINT_BOOST);
if (mod == null) {
return 1.0; return 1.0;
} else {
return AttribUtil.getMultiplier(mod.c(), mod.d());
}
} }
@Override @Override

View File

@ -8,6 +8,7 @@ import net.minecraft.server.v1_7_R4.EntityComplexPart;
import net.minecraft.server.v1_7_R4.EntityPlayer; import net.minecraft.server.v1_7_R4.EntityPlayer;
import net.minecraft.server.v1_7_R4.GenericAttributes; import net.minecraft.server.v1_7_R4.GenericAttributes;
import net.minecraft.server.v1_7_R4.MobEffectList; import net.minecraft.server.v1_7_R4.MobEffectList;
import net.minecraft.server.v1_7_R4.AttributeModifier;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
@ -23,6 +24,7 @@ import org.bukkit.entity.Player;
import fr.neatmonster.nocheatplus.compat.AlmostBoolean; import fr.neatmonster.nocheatplus.compat.AlmostBoolean;
import fr.neatmonster.nocheatplus.compat.MCAccess; import fr.neatmonster.nocheatplus.compat.MCAccess;
import fr.neatmonster.nocheatplus.utilities.AttribUtil;
import fr.neatmonster.nocheatplus.utilities.BlockCache; import fr.neatmonster.nocheatplus.utilities.BlockCache;
import fr.neatmonster.nocheatplus.utilities.ReflectionUtil; import fr.neatmonster.nocheatplus.utilities.ReflectionUtil;
@ -146,6 +148,16 @@ public class MCAccessCB3100 implements MCAccess{
return attr.getValue() / attr.b(); return attr.getValue() / attr.b();
} }
@Override
public double getSprintAttributeMultiplier(Player player) {
final AttributeModifier mod = ((CraftLivingEntity) player).getHandle().getAttributeInstance(GenericAttributes.d).a(AttribUtil.ID_SPRINT_BOOST);
if (mod == null) {
return 1.0;
} else {
return AttribUtil.getMultiplier(mod.c(), mod.d());
}
}
@Override @Override
public int getInvulnerableTicks(final Player player) { public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks; return ((CraftPlayer) player).getHandle().invulnerableTicks;

View File

@ -1,6 +1,7 @@
package fr.neatmonster.nocheatplus.compat.cbdev; package fr.neatmonster.nocheatplus.compat.cbdev;
import net.minecraft.server.v1_8_R3.AttributeInstance; import net.minecraft.server.v1_8_R3.AttributeInstance;
import net.minecraft.server.v1_8_R3.AttributeModifier;
import net.minecraft.server.v1_8_R3.AxisAlignedBB; import net.minecraft.server.v1_8_R3.AxisAlignedBB;
import net.minecraft.server.v1_8_R3.Block; import net.minecraft.server.v1_8_R3.Block;
import net.minecraft.server.v1_8_R3.DamageSource; import net.minecraft.server.v1_8_R3.DamageSource;
@ -23,6 +24,7 @@ import org.bukkit.entity.Player;
import fr.neatmonster.nocheatplus.compat.AlmostBoolean; import fr.neatmonster.nocheatplus.compat.AlmostBoolean;
import fr.neatmonster.nocheatplus.compat.MCAccess; import fr.neatmonster.nocheatplus.compat.MCAccess;
import fr.neatmonster.nocheatplus.utilities.AttribUtil;
import fr.neatmonster.nocheatplus.utilities.BlockCache; import fr.neatmonster.nocheatplus.utilities.BlockCache;
import fr.neatmonster.nocheatplus.utilities.ReflectionUtil; import fr.neatmonster.nocheatplus.utilities.ReflectionUtil;
@ -147,6 +149,16 @@ public class MCAccessCBDev implements MCAccess{
return attr.getValue() / attr.b(); return attr.getValue() / attr.b();
} }
@Override
public double getSprintAttributeMultiplier(Player player) {
final AttributeModifier mod = ((CraftLivingEntity) player).getHandle().getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).a(AttribUtil.ID_SPRINT_BOOST);
if (mod == null) {
return 1.0;
} else {
return AttribUtil.getMultiplier(mod.c(), mod.d());
}
}
@Override @Override
public int getInvulnerableTicks(final Player player) { public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks; return ((CraftPlayer) player).getHandle().invulnerableTicks;

View File

@ -8,6 +8,7 @@ import net.minecraft.server.v1_8_R1.EntityComplexPart;
import net.minecraft.server.v1_8_R1.EntityPlayer; import net.minecraft.server.v1_8_R1.EntityPlayer;
import net.minecraft.server.v1_8_R1.GenericAttributes; import net.minecraft.server.v1_8_R1.GenericAttributes;
import net.minecraft.server.v1_8_R1.MobEffectList; import net.minecraft.server.v1_8_R1.MobEffectList;
import net.minecraft.server.v1_8_R1.AttributeModifier;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
@ -23,6 +24,7 @@ import org.bukkit.entity.Player;
import fr.neatmonster.nocheatplus.compat.AlmostBoolean; import fr.neatmonster.nocheatplus.compat.AlmostBoolean;
import fr.neatmonster.nocheatplus.compat.MCAccess; import fr.neatmonster.nocheatplus.compat.MCAccess;
import fr.neatmonster.nocheatplus.utilities.AttribUtil;
import fr.neatmonster.nocheatplus.utilities.BlockCache; import fr.neatmonster.nocheatplus.utilities.BlockCache;
import fr.neatmonster.nocheatplus.utilities.ReflectionUtil; import fr.neatmonster.nocheatplus.utilities.ReflectionUtil;
@ -147,6 +149,16 @@ public class MCAccessSpigotCB1_8_R1 implements MCAccess{
return attr.getValue() / attr.b(); return attr.getValue() / attr.b();
} }
@Override
public double getSprintAttributeMultiplier(Player player) {
final AttributeModifier mod = ((CraftLivingEntity) player).getHandle().getAttributeInstance(GenericAttributes.d).a(AttribUtil.ID_SPRINT_BOOST);
if (mod == null) {
return 1.0;
} else {
return AttribUtil.getMultiplier(mod.c(), mod.d());
}
}
@Override @Override
public int getInvulnerableTicks(final Player player) { public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks; return ((CraftPlayer) player).getHandle().invulnerableTicks;

View File

@ -1,6 +1,7 @@
package fr.neatmonster.nocheatplus.compat.spigotcb1_8_R2; package fr.neatmonster.nocheatplus.compat.spigotcb1_8_R2;
import net.minecraft.server.v1_8_R2.AttributeInstance; import net.minecraft.server.v1_8_R2.AttributeInstance;
import net.minecraft.server.v1_8_R2.AttributeModifier;
import net.minecraft.server.v1_8_R2.AxisAlignedBB; import net.minecraft.server.v1_8_R2.AxisAlignedBB;
import net.minecraft.server.v1_8_R2.Block; import net.minecraft.server.v1_8_R2.Block;
import net.minecraft.server.v1_8_R2.DamageSource; import net.minecraft.server.v1_8_R2.DamageSource;
@ -23,6 +24,7 @@ import org.bukkit.entity.Player;
import fr.neatmonster.nocheatplus.compat.AlmostBoolean; import fr.neatmonster.nocheatplus.compat.AlmostBoolean;
import fr.neatmonster.nocheatplus.compat.MCAccess; import fr.neatmonster.nocheatplus.compat.MCAccess;
import fr.neatmonster.nocheatplus.utilities.AttribUtil;
import fr.neatmonster.nocheatplus.utilities.BlockCache; import fr.neatmonster.nocheatplus.utilities.BlockCache;
import fr.neatmonster.nocheatplus.utilities.ReflectionUtil; import fr.neatmonster.nocheatplus.utilities.ReflectionUtil;
@ -147,6 +149,16 @@ public class MCAccessSpigotCB1_8_R2 implements MCAccess{
return attr.getValue() / attr.b(); return attr.getValue() / attr.b();
} }
@Override
public double getSprintAttributeMultiplier(Player player) {
final AttributeModifier mod = ((CraftLivingEntity) player).getHandle().getAttributeInstance(GenericAttributes.d).a(AttribUtil.ID_SPRINT_BOOST);
if (mod == null) {
return 1.0;
} else {
return AttribUtil.getMultiplier(mod.c(), mod.d());
}
}
@Override @Override
public int getInvulnerableTicks(final Player player) { public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks; return ((CraftPlayer) player).getHandle().invulnerableTicks;

View File

@ -1,6 +1,7 @@
package fr.neatmonster.nocheatplus.compat.spigotcb1_8_R3; package fr.neatmonster.nocheatplus.compat.spigotcb1_8_R3;
import net.minecraft.server.v1_8_R3.AttributeInstance; import net.minecraft.server.v1_8_R3.AttributeInstance;
import net.minecraft.server.v1_8_R3.AttributeModifier;
import net.minecraft.server.v1_8_R3.AxisAlignedBB; import net.minecraft.server.v1_8_R3.AxisAlignedBB;
import net.minecraft.server.v1_8_R3.Block; import net.minecraft.server.v1_8_R3.Block;
import net.minecraft.server.v1_8_R3.DamageSource; import net.minecraft.server.v1_8_R3.DamageSource;
@ -23,6 +24,7 @@ import org.bukkit.entity.Player;
import fr.neatmonster.nocheatplus.compat.AlmostBoolean; import fr.neatmonster.nocheatplus.compat.AlmostBoolean;
import fr.neatmonster.nocheatplus.compat.MCAccess; import fr.neatmonster.nocheatplus.compat.MCAccess;
import fr.neatmonster.nocheatplus.utilities.AttribUtil;
import fr.neatmonster.nocheatplus.utilities.BlockCache; import fr.neatmonster.nocheatplus.utilities.BlockCache;
import fr.neatmonster.nocheatplus.utilities.ReflectionUtil; import fr.neatmonster.nocheatplus.utilities.ReflectionUtil;
@ -147,6 +149,16 @@ public class MCAccessSpigotCB1_8_R3 implements MCAccess{
return attr.getValue() / attr.b(); return attr.getValue() / attr.b();
} }
@Override
public double getSprintAttributeMultiplier(Player player) {
final AttributeModifier mod = ((CraftLivingEntity) player).getHandle().getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).a(AttribUtil.ID_SPRINT_BOOST);
if (mod == null) {
return 1.0;
} else {
return AttribUtil.getMultiplier(mod.c(), mod.d());
}
}
@Override @Override
public int getInvulnerableTicks(final Player player) { public int getInvulnerableTicks(final Player player) {
return ((CraftPlayer) player).getHandle().invulnerableTicks; return ((CraftPlayer) player).getHandle().invulnerableTicks;

View File

@ -109,6 +109,7 @@ public class MovingData extends ACheckData {
public double jumpAmplifier; public double jumpAmplifier;
/** Last time the player was actually sprinting. */ /** Last time the player was actually sprinting. */
public long timeSprinting = 0; public long timeSprinting = 0;
public double multSprinting = 1.3; // Multiplier at the last time sprinting.
/** Tick at which walk/fly speeds got changed last time. */ /** Tick at which walk/fly speeds got changed last time. */
public int speedTick = 0; public int speedTick = 0;

View File

@ -436,12 +436,15 @@ public class MovingListener extends CheckListener implements TickListener, IRemo
// Hard to confine assumesprint further (some logics change with hdist or sprinting). // Hard to confine assumesprint further (some logics change with hdist or sprinting).
if (player.getFoodLevel() > 5) { if (player.getFoodLevel() > 5) {
data.timeSprinting = time; data.timeSprinting = time;
data.multSprinting = mcAccess.getSprintAttributeMultiplier(player);
} }
else if (time < data.timeSprinting) { else if (time < data.timeSprinting) {
// TODO: Ensure that its not reset within latency/cooldown. // TODO: Ensure that its not reset within latency/cooldown.
data.timeSprinting = 0; data.timeSprinting = 0;
} }
// else: keep sprinting time. else {
// keep sprinting time.
}
} }
else{ else{
// Reset if not actually sprinting. // Reset if not actually sprinting.

View File

@ -38,7 +38,7 @@ public class SurvivalFly extends Check {
public static final double walkSpeed = 0.221D; public static final double walkSpeed = 0.221D;
public static final double modSneak = 0.13D / walkSpeed; public static final double modSneak = 0.13D / walkSpeed;
public static final double modSprint = 0.29D / walkSpeed; // TODO: without bunny 0.29 / practical is 0.35 // public static final double modSprint = 0.29D / walkSpeed; // TODO: without bunny 0.29 / practical is 0.35
public static final double modBlock = 0.16D / walkSpeed; public static final double modBlock = 0.16D / walkSpeed;
public static final double modSwim = 0.115D / walkSpeed; public static final double modSwim = 0.115D / walkSpeed;
@ -60,7 +60,7 @@ public class SurvivalFly extends Check {
public static final double hBufMax = 1.0; public static final double hBufMax = 1.0;
// Vertical speeds/modifiers. // Vertical speeds/modifiers.
public static final double climbSpeed = walkSpeed * modSprint; // TODO.. public static final double climbSpeed = walkSpeed * 1.3; // TODO: Check if the factor is needed!
// Other. // Other.
/** Bunny-hop delay. */ /** Bunny-hop delay. */
@ -139,11 +139,6 @@ public class SurvivalFly extends Check {
final boolean resetTo = toOnGround || to.isResetCond(); final boolean resetTo = toOnGround || to.isResetCond();
final boolean resetFrom; final boolean resetFrom;
// Use the player-specific walk speed.
// TODO: Might get from listener.
// TODO: Use in lostground?
final double walkSpeed = SurvivalFly.walkSpeed * ((double) data.walkSpeed / 0.2) * mcAccess.getSpeedAttributeMultiplier(player);
// Determine if the player is actually sprinting. // Determine if the player is actually sprinting.
final boolean sprinting; final boolean sprinting;
if (data.lostSprintCount > 0) { if (data.lostSprintCount > 0) {
@ -156,13 +151,13 @@ public class SurvivalFly extends Check {
tags.add("invalidate_lostsprint"); tags.add("invalidate_lostsprint");
sprinting = false; sprinting = false;
} }
else{ else {
tags.add("lostsprint"); tags.add("lostsprint");
sprinting = true; sprinting = true;
if (data.lostSprintCount < 3 && to.isOnGround() || to.isResetCond()) { if (data.lostSprintCount < 3 && to.isOnGround() || to.isResetCond()) {
data.lostSprintCount = 0; data.lostSprintCount = 0;
} }
else{ else {
data.lostSprintCount --; data.lostSprintCount --;
} }
} }
@ -174,10 +169,15 @@ public class SurvivalFly extends Check {
} }
sprinting = true; sprinting = true;
} }
else{ else {
sprinting = false; sprinting = false;
} }
// Use the player-specific walk speed.
// TODO: Might get from listener.
// TODO: Use in lostground?
final double walkSpeed = SurvivalFly.walkSpeed * ((double) data.walkSpeed / 0.2) * mcAccess.getSpeedAttributeMultiplier(player) * (sprinting ? 1.0 / data.multSprinting : 1.0);
setNextFriction(from, to, data, cc); setNextFriction(from, to, data, cc);
///////////////////////////////// /////////////////////////////////
@ -193,7 +193,7 @@ public class SurvivalFly extends Check {
else if (isSamePos) { else if (isSamePos) {
resetFrom = false; resetFrom = false;
} }
else{ else {
// TODO: More refined conditions possible ? // TODO: More refined conditions possible ?
// TODO: Consider if (!resetTo) ? // TODO: Consider if (!resetTo) ?
// Check lost-ground workarounds. // Check lost-ground workarounds.
@ -241,7 +241,7 @@ public class SurvivalFly extends Check {
hDistanceAboveLimit = res[1]; hDistanceAboveLimit = res[1];
hFreedom = res[2]; hFreedom = res[2];
} }
else{ else {
data.clearActiveHorVel(); data.clearActiveHorVel();
hFreedom = 0.0; hFreedom = 0.0;
if (resetFrom && data.bunnyhopDelay <= 6) { if (resetFrom && data.bunnyhopDelay <= 6) {
@ -326,7 +326,7 @@ public class SurvivalFly extends Check {
vAllowedDistance = res[0]; vAllowedDistance = res[0];
vDistanceAboveLimit = res[1]; vDistanceAboveLimit = res[1];
} }
else{ else {
// Check y-distance for normal jumping, like in air. // Check y-distance for normal jumping, like in air.
// TODO: Can it be easily transformed to a more accurate max. absolute height? // TODO: Can it be easily transformed to a more accurate max. absolute height?
vAllowedDistance = 1.35D + data.getVerticalFreedom(); vAllowedDistance = 1.35D + data.getVerticalFreedom();
@ -408,7 +408,7 @@ public class SurvivalFly extends Check {
final Location vLoc = handleViolation(now, result, player, from, to, data, cc); final Location vLoc = handleViolation(now, result, player, from, to, data, cc);
if (vLoc != null) return vLoc; if (vLoc != null) return vLoc;
} }
else{ else {
// Slowly reduce the level with each event, if violations have not recently happened. // Slowly reduce the level with each event, if violations have not recently happened.
if (now - data.sfVLTime > cc.survivalFlyVLFreeze) { if (now - data.sfVLTime > cc.survivalFlyVLFreeze) {
data.survivalFlyVL *= 0.95D; data.survivalFlyVL *= 0.95D;
@ -436,7 +436,7 @@ public class SurvivalFly extends Check {
// Consent with ground. // Consent with ground.
data.mediumLiftOff = MediumLiftOff.GROUND; data.mediumLiftOff = MediumLiftOff.GROUND;
} }
else{ else {
data.mediumLiftOff = MediumLiftOff.LIMIT_JUMP; data.mediumLiftOff = MediumLiftOff.LIMIT_JUMP;
} }
} }
@ -454,7 +454,7 @@ public class SurvivalFly extends Check {
else if (to.isNextToGround(0.15, 0.4)) { else if (to.isNextToGround(0.15, 0.4)) {
data.mediumLiftOff = MediumLiftOff.GROUND; data.mediumLiftOff = MediumLiftOff.GROUND;
} }
else{ else {
data.mediumLiftOff = MediumLiftOff.LIMIT_JUMP; data.mediumLiftOff = MediumLiftOff.LIMIT_JUMP;
} }
} }
@ -465,7 +465,7 @@ public class SurvivalFly extends Check {
// TODO: Where exactly to put noFallAssumeGround ? // TODO: Where exactly to put noFallAssumeGround ?
data.mediumLiftOff = MediumLiftOff.GROUND; data.mediumLiftOff = MediumLiftOff.GROUND;
} }
else{ else {
// Keep medium. // Keep medium.
// TODO: Is above stairs ? // TODO: Is above stairs ?
} }
@ -510,7 +510,7 @@ public class SurvivalFly extends Check {
data.sfLowJump = false; data.sfLowJump = false;
// not resetting nolowjump (?)... // not resetting nolowjump (?)...
} }
else{ else {
data.sfJumpPhase++; data.sfJumpPhase++;
} }
@ -604,7 +604,7 @@ public class SurvivalFly extends Check {
// The hard way. // The hard way.
hAllowedDistance *= modDepthStrider[level]; hAllowedDistance *= modDepthStrider[level];
if (sprinting) { if (sprinting) {
hAllowedDistance *= modSprint; hAllowedDistance *= data.multSprinting;
} }
} }
// (Friction is used as is.) // (Friction is used as is.)
@ -621,7 +621,7 @@ public class SurvivalFly extends Check {
hAllowedDistance = walkSpeed * cc.survivalFlyWalkingSpeed / 100D; hAllowedDistance = walkSpeed * cc.survivalFlyWalkingSpeed / 100D;
} }
else { else {
hAllowedDistance = walkSpeed * modSprint * cc.survivalFlySprintingSpeed / 100D; hAllowedDistance = walkSpeed * data.multSprinting * cc.survivalFlySprintingSpeed / 100D;
} }
friction = 0.0; // Ensure friction can't be used to speed. TODO: Set. friction = 0.0; // Ensure friction can't be used to speed. TODO: Set.
} }
@ -766,7 +766,7 @@ public class SurvivalFly extends Check {
} }
} }
} }
else{ else {
// TODO: Just to exclude source of error, might be redundant. // TODO: Just to exclude source of error, might be redundant.
data.vDistAcc.clear(); data.vDistAcc.clear();
} }
@ -796,7 +796,7 @@ public class SurvivalFly extends Check {
// i1 = 0; // i1 = 0;
// i2 = 1; // i2 = 1;
// } // }
// else{ // else {
i1 = 1; i1 = 1;
i2 = 2; i2 = 2;
// } // }
@ -822,7 +822,7 @@ public class SurvivalFly extends Check {
// Note: aDiff should be < 0.0625 here. // Note: aDiff should be < 0.0625 here.
return Math.max(Math.abs(-0.0625 - diff), 0.001); return Math.max(Math.abs(-0.0625 - diff), 0.001);
} }
else{ else {
return 0.0625 + diff; return 0.0625 + diff;
} }
} }
@ -858,7 +858,7 @@ public class SurvivalFly extends Check {
} }
} }
} }
else{ else {
// Decrease // Decrease
tags.add("ychdec"); tags.add("ychdec");
// Detect low jumping. // Detect low jumping.
@ -1163,13 +1163,13 @@ public class SurvivalFly extends Check {
tags.add("web_step"); tags.add("web_step");
} }
} }
else{ else {
// TODO: Could prevent not moving down if not on ground (or on ladder or in liquid?). // TODO: Could prevent not moving down if not on ground (or on ladder or in liquid?).
vAllowedDistance = from.isOnGround() ? 0.1D : 0; vAllowedDistance = from.isOnGround() ? 0.1D : 0;
} }
vDistanceAboveLimit = yDistance - vAllowedDistance; vDistanceAboveLimit = yDistance - vAllowedDistance;
} }
else{ else {
// Descending in web. // Descending in web.
// TODO: Implement something (at least for being in web with the feet or block above)? // TODO: Implement something (at least for being in web with the feet or block above)?
} }
@ -1352,7 +1352,7 @@ public class SurvivalFly extends Check {
if (setBackSafe) { if (setBackSafe) {
data.setSetBack(from); data.setSetBack(from);
} }
else{ else {
// Keep Set-back. // Keep Set-back.
} }
@ -1395,7 +1395,7 @@ public class SurvivalFly extends Check {
// Set-back + view direction of to (more smooth). // Set-back + view direction of to (more smooth).
return data.getSetBack(to); return data.getSetBack(to);
} }
else{ else {
data.clearAccounting(); data.clearAccounting();
data.sfJumpPhase = 0; data.sfJumpPhase = 0;
// Cancelled by other plugin, or no cancel set by configuration. // Cancelled by other plugin, or no cancel set by configuration.
@ -1429,12 +1429,12 @@ public class SurvivalFly extends Check {
data.prepareSetBack(newTo); data.prepareSetBack(newTo);
player.teleport(newTo, TeleportCause.PLUGIN); player.teleport(newTo, TeleportCause.PLUGIN);
} }
else{ else {
// Solve by extra actions ? Special case (probably never happens)? // Solve by extra actions ? Special case (probably never happens)?
player.kickPlayer("Hovering?"); player.kickPlayer("Hovering?");
} }
} }
else{ else {
// Ignore. // Ignore.
} }
} }

View File

@ -99,6 +99,13 @@ public interface MCAccess {
*/ */
public double getSpeedAttributeMultiplier(Player player); public double getSpeedAttributeMultiplier(Player player);
/**
* Modifier for sprinting.
* @param player
* @return
*/
public double getSprintAttributeMultiplier(Player player);
public int getInvulnerableTicks(Player player); public int getInvulnerableTicks(Player player);
public void setInvulnerableTicks(Player player, int ticks); public void setInvulnerableTicks(Player player, int ticks);

View File

@ -0,0 +1,23 @@
package fr.neatmonster.nocheatplus.utilities;
import java.util.UUID;
public class AttribUtil {
public static final UUID ID_SPRINT_BOOST = IdUtil.UUIDFromString("662A6B8D-DA3E-4C1C-8813-96EA6097278D");
/**
* Get a multiplier for an AttributeModifier.
* @param operator Exclusively allows operator 2. Otherwise will throw an IllegalArgumentException.
* @param value
* @throws IllegalArgumentException if the modifier is not 2.
* @return
*/
public static double getMultiplier(int operator, double value) {
switch(operator) {
case 2:
return 1.0 + value;
default:
throw new IllegalArgumentException("Unsupported operator: " + operator);
}
}
}