raven-bs-v2/src/main/java/keystrokesmod/module/impl/movement/NoSlow.java

295 lines
11 KiB
Java

package keystrokesmod.module.impl.movement;
import keystrokesmod.Raven;
import keystrokesmod.event.*;
import keystrokesmod.mixin.impl.accessor.IAccessorItemFood;
import keystrokesmod.module.Module;
import keystrokesmod.module.ModuleManager;
import keystrokesmod.module.setting.impl.ButtonSetting;
import keystrokesmod.module.setting.impl.DescriptionSetting;
import keystrokesmod.module.setting.impl.SliderSetting;
import keystrokesmod.utility.*;
import net.minecraft.block.Block;
import net.minecraft.block.BlockSlab;
import net.minecraft.block.BlockStairs;
import net.minecraft.client.settings.KeyBinding;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.init.Items;
import net.minecraft.item.*;
import net.minecraft.network.play.client.C02PacketUseEntity;
import net.minecraft.network.play.client.C07PacketPlayerDigging;
import net.minecraft.network.play.client.C08PacketPlayerBlockPlacement;
import net.minecraft.network.play.client.C09PacketHeldItemChange;
import net.minecraft.util.BlockPos;
import net.minecraftforge.client.event.MouseEvent;
import net.minecraftforge.fml.common.eventhandler.EventPriority;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import org.lwjgl.input.Mouse;
public class NoSlow extends Module {
public SliderSetting mode;
public static SliderSetting slowed;
public static ButtonSetting disableBow;
public static ButtonSetting disablePotions;
public static ButtonSetting swordOnly;
public static ButtonSetting vanillaSword;
public static ButtonSetting groundSpeedOption;
private String[] modes = new String[]{"Vanilla", "Pre", "Post", "Alpha", "Float"};
private boolean postPlace;
public static boolean canFloat;
private boolean reSendConsume;
public static boolean noSlowing, offset;
private int ticksOffStairs = 30;
private boolean setCancelled;
public NoSlow() {
super("NoSlow", category.movement, 0);
this.registerSetting(new DescriptionSetting("Default is 80% motion reduction."));
this.registerSetting(mode = new SliderSetting("Mode", 0, modes));
this.registerSetting(slowed = new SliderSetting("Slow %", 80.0D, 0.0D, 80.0D, 1.0D));
this.registerSetting(disableBow = new ButtonSetting("Disable bow", false));
this.registerSetting(disablePotions = new ButtonSetting("Disable potions", false));
this.registerSetting(swordOnly = new ButtonSetting("Sword only", false));
this.registerSetting(vanillaSword = new ButtonSetting("Vanilla sword", false));
this.registerSetting(groundSpeedOption = new ButtonSetting("Ground Speed", false));
}
@Override
public void onDisable() {
resetFloat();
}
public void onUpdate() {
if (ModuleManager.bedAura.stopAutoblock) {
return;
}
postPlace = false;
if (vanillaSword.isToggled() && Utils.holdingSword()) {
return;
}
boolean apply = getSlowed() != 0.2f;
if (!apply || !mc.thePlayer.isUsingItem()) {
return;
}
switch ((int) mode.getInput()) {
case 1:
if (mc.thePlayer.ticksExisted % 3 == 0 && !Raven.packetsHandler.C07.get()) {
mc.thePlayer.sendQueue.addToSendQueue(new C08PacketPlayerBlockPlacement(mc.thePlayer.getHeldItem()));
}
break;
case 2:
postPlace = true;
break;
case 3:
if (mc.thePlayer.ticksExisted % 3 == 0 && !Raven.packetsHandler.C07.get()) {
mc.thePlayer.sendQueue.addToSendQueue(new C08PacketPlayerBlockPlacement(new BlockPos(-1, -1, -1), 1, null, 0, 0, 0));
}
break;
case 4:
//
break;
}
}
@SubscribeEvent
public void onPostMotion(PostMotionEvent e) {
if (postPlace && mode.getInput() == 2) {
if (mc.thePlayer.ticksExisted % 3 == 0 && !Raven.packetsHandler.C07.get()) {
mc.thePlayer.sendQueue.addToSendQueue(new C08PacketPlayerBlockPlacement(mc.thePlayer.getHeldItem()));
}
postPlace = false;
}
}
@SubscribeEvent
public void onPostPlayerInput(PostPlayerInputEvent e) {
if (canFloat && noSlowing && offset && mc.thePlayer.onGround) {
if (groundSpeedOption.isToggled() && !Utils.jumpDown() && !ModuleManager.bhop.isEnabled() && Utils.keysDown() && !Utils.bowBackwards()) {
Utils.setSpeed(getSpeedModifier());
//Utils.print("ground speed");
}
}
handleFloatSetup();
}
@SubscribeEvent(priority = EventPriority.HIGHEST)
public void onMouse(MouseEvent e) {
handleFloatSetup();
if (setCancelled && e.button == 1) {
setCancelled = false;
e.setCanceled(true);
}
}
private void handleFloatSetup() {
if (mode.getInput() != 4 || canFloat || reSendConsume || getSlowed() == 0.2f) {
return;
}
if (!Mouse.isButtonDown(1) || (mc.thePlayer.getHeldItem() == null || !holdingConsumable(mc.thePlayer.getHeldItem()))) {
return;
}
if (!mc.thePlayer.onGround) {
canFloat = true;
}
else {
KeyBinding.setKeyBindState(mc.gameSettings.keyBindUseItem.getKeyCode(), false);
setCancelled = true;
if (!Utils.jumpDown()) {
mc.thePlayer.jump();
}
reSendConsume = true;
canFloat = false;
}
}
@SubscribeEvent
public void onSendPacket(SendPacketEvent e) {
if (!Utils.nullCheck()) {
return;
}
if (e.getPacket() instanceof C08PacketPlayerBlockPlacement) {
if (mode.getInput() != 4 || canFloat || reSendConsume || !mc.thePlayer.onGround || getSlowed() == 0.2f) {
return;
}
if (!Mouse.isButtonDown(1) || (mc.thePlayer.getHeldItem() == null || !holdingConsumable(mc.thePlayer.getHeldItem()))) {
return;
}
e.setCanceled(true);
}
}
@SubscribeEvent
public void onPreMotion(PreMotionEvent e) {
/*Block blockBelow = BlockUtils.getBlock(new BlockPos(mc.thePlayer.posX, mc.thePlayer.posY - 1, mc.thePlayer.posZ));
Block block = BlockUtils.getBlock(new BlockPos(mc.thePlayer.posX, mc.thePlayer.posY, mc.thePlayer.posZ));
if (block instanceof BlockStairs || block instanceof BlockSlab && ModuleUtils.lastTickOnGround && ModuleUtils.lastTickPos1) {
ticksOffStairs = 0;
}
else {
ticksOffStairs++;
}*/
if (ModuleManager.bedAura.stopAutoblock || mode.getInput() != 4) {
resetFloat();
return;
}
postPlace = false;
if (!Mouse.isButtonDown(1) || (mc.thePlayer.getHeldItem() == null || !holdingConsumable(mc.thePlayer.getHeldItem()))) {
resetFloat();
return;
}
if (mc.thePlayer.getHeldItem() != null && holdingConsumable(mc.thePlayer.getHeldItem()) && !Mouse.isButtonDown(1)) {
KeyBinding.setKeyBindState(mc.gameSettings.keyBindUseItem.getKeyCode(), false);
}
if (reSendConsume) {
if (ModuleUtils.inAirTicks > 0) {
KeyBinding.setKeyBindState(mc.gameSettings.keyBindUseItem.getKeyCode(), true);
reSendConsume = false;
canFloat = true;
}
}
noSlowing = true;
if (ticksOffStairs < 30) {
offset = false;
return;
}
e.setPosY(e.getPosY() + ModuleUtils.offsetValue);
offset = true;
if (groundSpeedOption.isToggled()) {
if (!ModuleManager.killAura.isTargeting && !Utils.noSlowingBackWithBow() && !Utils.jumpDown() && mc.thePlayer.moveForward <= -0.5 && mc.thePlayer.moveStrafing == 0 && offset && Utils.isMoving() && mc.thePlayer.onGround) {
float yaw = mc.thePlayer.rotationYaw;
e.setYaw(yaw - 55);
}
}
}
@SubscribeEvent(priority = EventPriority.LOWEST) // called last in order to apply fix
public void onMoveInput(PrePlayerInputEvent e) {
if (mode.getInput() == 4 && getSlowed() != 0.2f && !canFloat) {
mc.thePlayer.movementInput.jump = false;
}
}
public static float getSlowed() {
if (mc.thePlayer.getHeldItem() == null || ModuleManager.noSlow == null || !ModuleManager.noSlow.isEnabled()) {
return 0.2f;
}
else {
if (swordOnly.isToggled() && !(mc.thePlayer.getHeldItem().getItem() instanceof ItemSword)) {
return 0.2f;
}
if (mc.thePlayer.getHeldItem().getItem() instanceof ItemBow && disableBow.isToggled()) {
return 0.2f;
}
else if (mc.thePlayer.getHeldItem().getItem() instanceof ItemPotion && !ItemPotion.isSplash(mc.thePlayer.getHeldItem().getItemDamage()) && disablePotions.isToggled()) {
return 0.2f;
}
}
float val = (100.0F - (float) slowed.getInput()) / 100.0F;
return val;
}
public static boolean groundSpeed() {
return groundSpeedOption.isToggled() && noSlowing && canFloat && offset && Utils.isMoving() && !Utils.jumpDown();
}
@Override
public String getInfo() {
return modes[(int) mode.getInput()];
}
private void resetFloat() {
reSendConsume = canFloat = noSlowing = offset = false;
}
public static boolean hasArrows(ItemStack stack) {
final boolean flag = mc.thePlayer.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, stack) > 0;
return flag || mc.thePlayer.inventory.hasItem(Items.arrow);
}
private double getSpeedModifier() {
double speedModifier = 0.2;
final int speedAmplifier = Utils.getSpeedAmplifier();
switch (speedAmplifier) {
case 0:
speedModifier = 0.2;
break;
case 1:
speedModifier = 0.23;
break;
case 2:
speedModifier = 0.28;
break;
case 3:
speedModifier = 0.32;
break;
case 4:
speedModifier = 0.37;
break;
}
return speedModifier - 0.005;
}
private boolean holdingConsumable(ItemStack itemStack) {
Item heldItem = itemStack.getItem();
if (heldItem instanceof ItemFood || heldItem instanceof ItemBow && hasArrows(itemStack) || (heldItem instanceof ItemPotion && !ItemPotion.isSplash(mc.thePlayer.getHeldItem().getItemDamage())) || (heldItem instanceof ItemSword && !vanillaSword.isToggled())) {
return true;
}
return false;
}
public static boolean holdingEdible(ItemStack stack) {
if (stack.getItem() instanceof ItemFood && mc.thePlayer.getFoodStats().getFoodLevel() == 20) {
ItemFood food = (ItemFood) stack.getItem();
return ((IAccessorItemFood) food).getAlwaysEdible();
}
return true;
}
}