Merge remote-tracking branch 'origin/master'

This commit is contained in:
Ridan Vandenbergh 2018-08-07 03:41:02 +02:00
commit 2ff0da1651
1 changed files with 107 additions and 70 deletions

View File

@ -11,7 +11,6 @@ import me.zeroeightsix.kami.util.EntityUtil;
import me.zeroeightsix.kami.util.Friends;
import me.zeroeightsix.kami.util.GeometryMasks;
import me.zeroeightsix.kami.util.KamiTessellator;
import net.minecraft.block.Block;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
@ -20,6 +19,7 @@ import net.minecraft.entity.item.EntityEnderCrystal;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.network.Packet;
import net.minecraft.network.play.client.*;
import net.minecraft.potion.Potion;
import net.minecraft.util.*;
@ -48,7 +48,8 @@ public class CrystalAura extends Module {
private BlockPos render;
private Entity renderEnt;
private boolean fix = false;
private long systemTime = -1;
private static boolean togglePitch = false;
@Override
public void onUpdate() {
@ -58,10 +59,16 @@ public class CrystalAura extends Module {
.min(Comparator.comparing(c -> mc.player.getDistance(c)))
.orElse(null);
if (crystal != null && mc.player.getDistance(crystal) <= range) {
lookAtPacket(crystal.posX, crystal.posY, crystal.posZ, mc.player);
mc.player.connection.sendPacket(new CPacketUseEntity(crystal));
mc.player.connection.sendPacket(new CPacketAnimation(EnumHand.MAIN_HAND));
//Added delay to stop ncp from flagging "hitting too fast"
if (((System.nanoTime() / 1000000) - systemTime) >= 250) {
lookAtPacket(crystal.posX, crystal.posY, crystal.posZ, mc.player);
mc.playerController.attackEntity(mc.player, crystal);
mc.player.swingArm(EnumHand.MAIN_HAND);
systemTime = System.nanoTime() / 1000000;
}
return;
} else {
resetRotation();
}
int crystalSlot = mc.player.getHeldItemMainhand().getItem() == Items.END_CRYSTAL ? mc.player.inventory.currentItem : -1;
@ -78,22 +85,25 @@ public class CrystalAura extends Module {
List<BlockPos> blocks = findCrystalBlocks();
List<Entity> entities = new ArrayList<>();
if (players) entities.addAll(mc.world.playerEntities.stream().filter(entityPlayer -> !Friends.isFriend(entityPlayer.getName())).collect(Collectors.toList()));
if (players)
entities.addAll(mc.world.playerEntities.stream().filter(entityPlayer -> !Friends.isFriend(entityPlayer.getName())).collect(Collectors.toList()));
entities.addAll(mc.world.loadedEntityList.stream().filter(entity -> EntityUtil.isLiving(entity) && (EntityUtil.isPassive(entity) ? animals : mobs)).collect(Collectors.toList()));
BlockPos q = null;
double damage = .5;
for (Entity entity : entities) {
if (entity == mc.player || ((EntityLivingBase)entity).getHealth() <= 0) continue;
if (entity == mc.player || ((EntityLivingBase) entity).getHealth() <= 0) continue;
for (BlockPos blockPos : blocks) {
double b = entity.getDistanceSq(blockPos);
if (b >= 169) continue; // If this block if further than 13 (3.6^2, less calc) blocks, ignore it. It'll take no or very little damage
double d = calculateDamage(blockPos.x+.5,blockPos.y+1,blockPos.z+.5, entity);
if (b >= 169)
continue; // If this block if further than 13 (3.6^2, less calc) blocks, ignore it. It'll take no or very little damage
double d = calculateDamage(blockPos.x + .5, blockPos.y + 1, blockPos.z + .5, entity);
if (d > damage) {
double self = calculateDamage(blockPos.x+.5,blockPos.y+1,blockPos.z+.5, mc.player);
double self = calculateDamage(blockPos.x + .5, blockPos.y + 1, blockPos.z + .5, mc.player);
// If this deals more damage to ourselves than it does to our target, continue. This is only ignored if the crystal is sure to kill our target but not us.
// Also continue if our crystal is going to hurt us.. alot
if ((self > d && !(d < ((EntityLivingBase) entity).getHealth())) || self-.5 > mc.player.getHealth()) continue;
if ((self > d && !(d < ((EntityLivingBase) entity).getHealth())) || self - .5 > mc.player.getHealth())
continue;
damage = d;
q = blockPos;
renderEnt = entity;
@ -103,11 +113,7 @@ public class CrystalAura extends Module {
if (damage == .5) {
render = null;
renderEnt = null;
active = false;
if (fix) {
mc.player.connection.sendPacket(new CPacketPlayer.PositionRotation(mc.player.posX, mc.player.posY, mc.player.posZ, mc.player.rotationYaw, mc.player.rotationPitch, mc.player.onGround));
fix = false;
}
resetRotation();
return;
}
render = q;
@ -115,17 +121,29 @@ public class CrystalAura extends Module {
if (place) {
if (!offhand && mc.player.inventory.currentItem != crystalSlot) {
mc.player.inventory.currentItem = crystalSlot;
mc.player.connection.sendPacket(new CPacketHeldItemChange(crystalSlot));
resetRotation();
return;
}
lookAtPacket(q.x+.5,q.y-.5,q.z+.5, mc.player);
active = true;
fix = true;
RayTraceResult result = mc.world.rayTraceBlocks(new Vec3d(mc.player.posX, mc.player.posY+mc.player.getEyeHeight(), mc.player.posZ), new Vec3d(q.x+.5,q.y-.5d,q.z+.5));
lookAtPacket(q.x + .5, q.y - .5, q.z + .5, mc.player);
RayTraceResult result = mc.world.rayTraceBlocks(new Vec3d(mc.player.posX, mc.player.posY + mc.player.getEyeHeight(), mc.player.posZ), new Vec3d(q.x + .5, q.y - .5d, q.z + .5));
EnumFacing f;
if (result == null || result.sideHit == null) f = EnumFacing.UP;
else f = result.sideHit;
mc.player.connection.sendPacket(new CPacketPlayerTryUseItemOnBlock(q, f, offhand ? EnumHand.OFF_HAND : EnumHand.MAIN_HAND, 0, 0, 0));
//Small delay
if (((System.nanoTime() / 1000000) - systemTime) >= 10) {
mc.playerController.processRightClickBlock(mc.player, mc.world, q, f, new Vec3d(0, 0, 0), EnumHand.MAIN_HAND);
systemTime = System.nanoTime() / 1000000;
}
}
//this sends a constant packet flow for default packets
if (isSpoofingAngles) {
if (togglePitch) {
mc.player.rotationPitch += 0.0004;
togglePitch = false;
} else {
mc.player.rotationPitch -= 0.0004;
togglePitch = true;
}
}
}
@ -137,40 +155,35 @@ public class CrystalAura extends Module {
KamiTessellator.release();
if (renderEnt != null) {
Vec3d p = EntityUtil.getInterpolatedRenderPos(renderEnt, mc.getRenderPartialTicks());
Tracers.drawLineFromPosToPos(render.x-mc.getRenderManager().renderPosX+.5d,render.y-mc.getRenderManager().renderPosY+1,render.z-mc.getRenderManager().renderPosZ+.5d,p.x,p.y,p.z,renderEnt.getEyeHeight(),1,1,1,1);
Tracers.drawLineFromPosToPos(render.x - mc.getRenderManager().renderPosX + .5d, render.y - mc.getRenderManager().renderPosY + 1, render.z - mc.getRenderManager().renderPosZ + .5d, p.x, p.y, p.z, renderEnt.getEyeHeight(), 1, 1, 1, 1);
}
}
}
private void lookAtPacket(double px, double py, double pz, EntityPlayer me)
{
private void lookAtPacket(double px, double py, double pz, EntityPlayer me) {
double[] v = calculateLookAt(px, py, pz, me);
float pY = yaw;
float pP = pitch;
if ((float)v[0] != pY || (float)v[1] != pP || !active) {
yaw = (float)v[0];
pitch = (float)v[1];
mc.player.connection.sendPacket(new CPacketPlayer.Rotation((float)v[0], (float)v[1], mc.player.onGround));
}
setYawAndPitch((float) v[0], (float) v[1]);
}
private boolean canPlaceCrystal(BlockPos blockPos) {
Block m = mc.world.getBlockState(blockPos).getBlock();
if (m != Blocks.BEDROCK && m != Blocks.OBSIDIAN) return false;
BlockPos boost = blockPos.add(0,1,0);
m = mc.world.getBlockState(boost).getBlock();
if (m != Blocks.AIR) return false;
if (!mc.world.getEntitiesWithinAABB(Entity.class, new AxisAlignedBB(boost)).isEmpty()) return false;
BlockPos boost = blockPos.add(0, 1, 0);
BlockPos boost2 = blockPos.add(0, 2, 0);
if ((mc.world.getBlockState(blockPos).getBlock() != Blocks.BEDROCK
&& mc.world.getBlockState(blockPos).getBlock() != Blocks.OBSIDIAN)
|| mc.world.getBlockState(boost).getBlock() != Blocks.AIR
|| mc.world.getBlockState(boost2).getBlock() != Blocks.AIR
|| !mc.world.getEntitiesWithinAABB(Entity.class, new AxisAlignedBB(boost)).isEmpty())
return false;
return true;
}
public static BlockPos getPlayerPos(){
return new BlockPos(Math.floor(mc.player.posX),Math.floor(mc.player.posY),Math.floor(mc.player.posZ));
public static BlockPos getPlayerPos() {
return new BlockPos(Math.floor(mc.player.posX), Math.floor(mc.player.posY), Math.floor(mc.player.posZ));
}
private List<BlockPos> findCrystalBlocks() {
NonNullList<BlockPos> positions = NonNullList.create();
positions.addAll(getSphere(getPlayerPos(), (float)range, (int) range, false, true, 0).stream().filter(this::canPlaceCrystal).collect(Collectors.toList()));
positions.addAll(getSphere(getPlayerPos(), (float) range, (int) range, false, true, 0).stream().filter(this::canPlaceCrystal).collect(Collectors.toList()));
return positions;
}
@ -179,9 +192,9 @@ public class CrystalAura extends Module {
int cx = loc.getX();
int cy = loc.getY();
int cz = loc.getZ();
for (int x = cx - (int)r; x <= cx + r; x++) {
for (int z = cz - (int)r; z <= cz + r; z++) {
for (int y = (sphere ? cy - (int)r : cy); y < (sphere ? cy + r : cy + h); y++) {
for (int x = cx - (int) r; x <= cx + r; x++) {
for (int z = cz - (int) r; z <= cz + r; z++) {
for (int y = (sphere ? cy - (int) r : cy); y < (sphere ? cy + r : cy + h); y++) {
double dist = (cx - x) * (cx - x) + (cz - z) * (cz - z) + (sphere ? (cy - y) * (cy - y) : 0);
if (dist < r * r && !(hollow && dist < (r - 1) * (r - 1))) {
BlockPos l = new BlockPos(x, y + plus_y, z);
@ -193,65 +206,89 @@ public class CrystalAura extends Module {
return circleblocks;
}
public static float calculateDamage(double posX, double posY, double posZ, Entity entity){
public static float calculateDamage(double posX, double posY, double posZ, Entity entity) {
float doubleExplosionSize = 6.0F * 2.0F;
double distancedsize = entity.getDistance(posX, posY, posZ) / (double)doubleExplosionSize;
double distancedsize = entity.getDistance(posX, posY, posZ) / (double) doubleExplosionSize;
Vec3d vec3d = new Vec3d(posX, posY, posZ);
double blockDensity = (double)entity.world.getBlockDensity(vec3d, entity.getEntityBoundingBox());
double blockDensity = (double) entity.world.getBlockDensity(vec3d, entity.getEntityBoundingBox());
double v = (1.0D - distancedsize) * blockDensity;
float damage = (float)((int)((v * v + v) / 2.0D * 7.0D * (double)doubleExplosionSize + 1.0D));
float damage = (float) ((int) ((v * v + v) / 2.0D * 7.0D * (double) doubleExplosionSize + 1.0D));
double finald = 1;
/*if (entity instanceof EntityLivingBase)
finald = getBlastReduction((EntityLivingBase) entity,getDamageMultiplied(damage));*/
if (entity instanceof EntityLivingBase){
finald = getBlastReduction((EntityLivingBase) entity,getDamageMultiplied(damage), new Explosion(mc.world, null, posX, posY, posZ, 6F, false, true));
if (entity instanceof EntityLivingBase) {
finald = getBlastReduction((EntityLivingBase) entity, getDamageMultiplied(damage), new Explosion(mc.world, null, posX, posY, posZ, 6F, false, true));
}
return (float)finald;
return (float) finald;
}
public static float getBlastReduction(EntityLivingBase entity, float damage, Explosion explosion){
if (entity instanceof EntityPlayer){
public static float getBlastReduction(EntityLivingBase entity, float damage, Explosion explosion) {
if (entity instanceof EntityPlayer) {
EntityPlayer ep = (EntityPlayer) entity;
DamageSource ds = DamageSource.causeExplosionDamage(explosion);
damage = CombatRules.getDamageAfterAbsorb(damage, (float)ep.getTotalArmorValue(), (float)ep.getEntityAttribute(SharedMonsterAttributes.ARMOR_TOUGHNESS).getAttributeValue());
damage = CombatRules.getDamageAfterAbsorb(damage, (float) ep.getTotalArmorValue(), (float) ep.getEntityAttribute(SharedMonsterAttributes.ARMOR_TOUGHNESS).getAttributeValue());
int k = EnchantmentHelper.getEnchantmentModifierDamage(ep.getArmorInventoryList(), ds);
float f = MathHelper.clamp(k, 0.0F, 20.0F);
damage = damage * (1.0F - f / 25.0F);
if (entity.isPotionActive(Potion.getPotionById(11))){
damage = damage - (damage/4);
if (entity.isPotionActive(Potion.getPotionById(11))) {
damage = damage - (damage / 4);
}
damage = Math.max(damage - ep.getAbsorptionAmount(), 0.0F);
return damage;
}
damage = CombatRules.getDamageAfterAbsorb(damage, (float)entity.getTotalArmorValue(), (float)entity.getEntityAttribute(SharedMonsterAttributes.ARMOR_TOUGHNESS).getAttributeValue());
damage = CombatRules.getDamageAfterAbsorb(damage, (float) entity.getTotalArmorValue(), (float) entity.getEntityAttribute(SharedMonsterAttributes.ARMOR_TOUGHNESS).getAttributeValue());
return damage;
}
public static float getDamageMultiplied(float damage){
private static float getDamageMultiplied(float damage) {
int diff = mc.world.getDifficulty().getDifficultyId();
return damage*(diff==0 ? 0 : (diff == 2 ? 1 : (diff == 1 ? 0.5f : 1.5f)));
return damage * (diff == 0 ? 0 : (diff == 2 ? 1 : (diff == 1 ? 0.5f : 1.5f)));
}
public static float calculateDamage(EntityEnderCrystal crystal, Entity entity){
public static float calculateDamage(EntityEnderCrystal crystal, Entity entity) {
return calculateDamage(crystal.posX, crystal.posY, crystal.posZ, entity);
}
private float yaw;
private float pitch;
private boolean active = false;
//Better Rotation Spoofing System:
private static boolean isSpoofingAngles;
private static double yaw;
private static double pitch;
//this modifies packets being sent so no extra ones are made. NCP used to flag with "too many packets"
private static void setYawAndPitch(float yaw1, float pitch1) {
yaw = yaw1;
pitch = pitch1;
isSpoofingAngles = true;
}
private static void resetRotation() {
if (isSpoofingAngles) {
yaw = mc.player.rotationYaw;
pitch = mc.player.rotationPitch;
isSpoofingAngles = false;
}
}
@EventHandler
private Listener<PacketEvent.Send> packetListener = new Listener<>(event -> {
if (!active) return;
if (event.getPacket() instanceof CPacketPlayer.PositionRotation) {
((CPacketPlayer.PositionRotation) event.getPacket()).yaw = yaw;
((CPacketPlayer.PositionRotation) event.getPacket()).pitch = pitch;
}else if (event.getPacket() instanceof CPacketPlayer.Rotation) {
((CPacketPlayer.Rotation) event.getPacket()).yaw = yaw;
((CPacketPlayer.Rotation) event.getPacket()).pitch = pitch;
Packet packet = event.getPacket();
if (packet instanceof CPacketPlayer) {
if (isSpoofingAngles) {
((CPacketPlayer) packet).yaw = (float) yaw;
((CPacketPlayer) packet).pitch = (float) pitch;
}
}
});
@Override
public void onDisable() {
render = null;
renderEnt = null;
resetRotation();
}
}