From 3f569372fd142219f5caf658ea81835561eb9300 Mon Sep 17 00:00:00 2001 From: Glow Date: Mon, 6 Aug 2018 14:27:33 -0400 Subject: [PATCH 1/3] Update CrystalAura.java --- .../module/modules/combat/CrystalAura.java | 192 +++++++++++------- 1 file changed, 117 insertions(+), 75 deletions(-) diff --git a/src/main/java/me/zeroeightsix/kami/module/modules/combat/CrystalAura.java b/src/main/java/me/zeroeightsix/kami/module/modules/combat/CrystalAura.java index 79c01e22b..700958630 100644 --- a/src/main/java/me/zeroeightsix/kami/module/modules/combat/CrystalAura.java +++ b/src/main/java/me/zeroeightsix/kami/module/modules/combat/CrystalAura.java @@ -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.*; @@ -40,15 +40,21 @@ import static me.zeroeightsix.kami.util.EntityUtil.calculateLookAt; @Module.Info(name = "CrystalAura", category = Module.Category.COMBAT) public class CrystalAura extends Module { - @Setting(name = "Range") private double range = 4; - @Setting(name = "Place") private boolean place = false; - @Setting(name = "Players") private boolean players = true; - @Setting(name = "Mobs") private boolean mobs = false; - @Setting(name = "Animals") private boolean animals = false; + @Setting(name = "Range") + private double range = 4; + @Setting(name = "Place") + private boolean place = false; + @Setting(name = "Players") + private boolean players = true; + @Setting(name = "Mobs") + private boolean mobs = false; + @Setting(name = "Animals") + private boolean animals = false; 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 +64,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 +90,25 @@ public class CrystalAura extends Module { List blocks = findCrystalBlocks(); List 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 +118,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 +126,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 +160,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 findCrystalBlocks() { NonNullList 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 +197,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 +211,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 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(); + } } From 9c96f5feefac44a3c7a1cb6a7ff7fad89c282a29 Mon Sep 17 00:00:00 2001 From: Glow Date: Mon, 6 Aug 2018 14:30:06 -0400 Subject: [PATCH 2/3] Various Crystal Aura Improvements Improvements to crystal aura to stop multiple NCP flags from occuring. NCP used to flag for hitting too fast and sending too many packets. Both now fixed. The client also used to desync the stacks of crystals that the client had and the server had. Now fixed. Generally improved. From c1dc5454f99ebac06c89e7ae5d40d9a671d6b8ef Mon Sep 17 00:00:00 2001 From: Glow Date: Mon, 6 Aug 2018 14:33:19 -0400 Subject: [PATCH 3/3] Update CrystalAura.java --- .../kami/module/modules/combat/CrystalAura.java | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/main/java/me/zeroeightsix/kami/module/modules/combat/CrystalAura.java b/src/main/java/me/zeroeightsix/kami/module/modules/combat/CrystalAura.java index 700958630..e07b08435 100644 --- a/src/main/java/me/zeroeightsix/kami/module/modules/combat/CrystalAura.java +++ b/src/main/java/me/zeroeightsix/kami/module/modules/combat/CrystalAura.java @@ -40,16 +40,11 @@ import static me.zeroeightsix.kami.util.EntityUtil.calculateLookAt; @Module.Info(name = "CrystalAura", category = Module.Category.COMBAT) public class CrystalAura extends Module { - @Setting(name = "Range") - private double range = 4; - @Setting(name = "Place") - private boolean place = false; - @Setting(name = "Players") - private boolean players = true; - @Setting(name = "Mobs") - private boolean mobs = false; - @Setting(name = "Animals") - private boolean animals = false; + @Setting(name = "Range") private double range = 4; + @Setting(name = "Place") private boolean place = false; + @Setting(name = "Players") private boolean players = true; + @Setting(name = "Mobs") private boolean mobs = false; + @Setting(name = "Animals") private boolean animals = false; private BlockPos render; private Entity renderEnt;