converted scaffold to kotlin

This commit is contained in:
Bella 2020-04-26 11:21:26 -04:00
parent 4cb439ec0b
commit ef9e3a7f4a
No known key found for this signature in database
GPG Key ID: DBD4A6030080C8B3
2 changed files with 149 additions and 175 deletions

View File

@ -1,175 +0,0 @@
package me.zeroeightsix.kami.module.modules.player;
import me.zero.alpine.listener.EventHandler;
import me.zero.alpine.listener.Listener;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
import me.zeroeightsix.kami.util.EntityUtil;
import me.zeroeightsix.kami.util.Wrapper;
import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.BlockFalling;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.network.play.client.CPacketEntityAction;
import net.minecraft.network.play.client.CPacketEntityAction.Action;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
import net.minecraftforge.client.event.InputUpdateEvent;
import static me.zeroeightsix.kami.KamiMod.MODULE_MANAGER;
import static me.zeroeightsix.kami.util.BlockInteractionHelper.*;
/**
* Created by 086 on 20/01/19
* Updated by Polymer on 16/01/20
* Updated by dominikaaaa on 02/03/20
* Updated by Nucleus on 25/04/20
* @see me.zeroeightsix.kami.mixin.client.MixinEntity
*/
@Module.Info(
name = "Scaffold",
category = Module.Category.PLAYER,
description = "Places blocks under you"
)
public class Scaffold extends Module {
private Setting<Boolean> placeBlocks = register(Settings.b("Place Blocks", true));
private Setting<Boolean> tower = register(Settings.b("Tower", false));
private Setting<Mode> modeSetting = register(Settings.e("Mode", Mode.NORMAL));
private Setting<Boolean> randomDelay = register(Settings.booleanBuilder("Random Delay").withValue(false).withVisibility(v -> modeSetting.getValue().equals(Mode.LEGIT)).build());
private Setting<Integer> delayRange = register(Settings.integerBuilder("Delay Range").withMinimum(0).withValue(6).withMaximum(10).withVisibility(v -> modeSetting.getValue().equals(Mode.LEGIT) && randomDelay.getValue()).build());
private Setting<Integer> ticks = register(Settings.integerBuilder("Ticks").withMinimum(0).withMaximum(60).withValue(2).withVisibility(v -> modeSetting.getValue().equals(Mode.NORMAL)).build());
private boolean shouldSlow = false;
private double towerStart = 0.0;
private static Scaffold INSTANCE;
public Scaffold() {
INSTANCE = this;
}
public static boolean shouldScaffold() {
return INSTANCE.isEnabled();
}
private enum Mode {
NORMAL, LEGIT
}
@EventHandler
private Listener<InputUpdateEvent> eventListener = new Listener<>(event -> {
if (modeSetting.getValue().equals(Mode.LEGIT) && shouldSlow) {
if (randomDelay.getValue()) {
event.getMovementInput().moveStrafe *= 0.2f + getRandomInRange();
event.getMovementInput().moveForward *= 0.2f + getRandomInRange();
}
else {
event.getMovementInput().moveStrafe *= 0.2f;
event.getMovementInput().moveForward *= 0.2f;
}
}
});
@Override
public void onUpdate() {
if (mc.player == null || MODULE_MANAGER.isModuleEnabled(Freecam.class)) return;
shouldSlow = false;
boolean towering = mc.gameSettings.keyBindJump.isKeyDown() && tower.getValue();
Vec3d vec3d = EntityUtil.getInterpolatedPos(mc.player, ticks.getValue());
if (modeSetting.getValue().equals(Mode.LEGIT)) vec3d = EntityUtil.getInterpolatedPos(mc.player, 0);
BlockPos blockPos = new BlockPos(vec3d).down();
BlockPos belowBlockPos = blockPos.down();
BlockPos legitPos = new BlockPos(EntityUtil.getInterpolatedPos(mc.player, 2));
/* when legitBridge is enabled */
/* check if block behind player is air or other replaceable block and if it is, make the player crouch */
if (modeSetting.getValue().equals(Mode.LEGIT) && Wrapper.getWorld().getBlockState(legitPos.down()).getMaterial().isReplaceable() && mc.player.onGround && !towering) {
shouldSlow = true;
mc.player.movementInput.sneak = true;
mc.player.connection.sendPacket(new CPacketEntityAction(mc.player, Action.START_SNEAKING));
}
if (towering) {
if (!(mc.player.posY > blockPos.y + 1.0f)) {
return;
}
}
/* check if block is already placed */
if (!Wrapper.getWorld().getBlockState(blockPos).getMaterial().isReplaceable()) {
return;
}
int oldSlot = mc.player.inventory.currentItem;
setSlotToBlocks(belowBlockPos);
/* check if we don't have a block adjacent to the blockPos */
if (!checkForNeighbours(blockPos)) return;
/* place the block */
if (placeBlocks.getValue()) placeBlockScaffold(blockPos);
/* Reset the slot */
mc.player.inventory.currentItem = oldSlot;
if (towering) {
final double motion = 0.42d; // jump motion
if (mc.player.onGround) {
towerStart = mc.player.posY;
mc.player.motionY = motion;
}
if (mc.player.posY > towerStart + motion) {
mc.player.setPosition(mc.player.posX, (int)mc.player.posY, mc.player.posZ);
mc.player.motionY = motion;
towerStart = mc.player.posY;
}
} else {
towerStart = 0.0;
}
if (shouldSlow) {
mc.player.connection.sendPacket(new CPacketEntityAction(mc.player, Action.STOP_SNEAKING));
shouldSlow = false;
}
}
private float getRandomInRange() {
return 0.11f + (float) Math.random() * ((delayRange.getValue() / 10.0f) - 0.11f);
}
private void setSlotToBlocks(BlockPos belowBlockPos) {
/* search blocks in hotbar */
int newSlot = -1;
for (int i = 0; i < 9; i++) {
/* filter out non-block items */
ItemStack stack = Wrapper.getPlayer().inventory.getStackInSlot(i);
if (stack == ItemStack.EMPTY || !(stack.getItem() instanceof ItemBlock)) continue;
Block block = ((ItemBlock) stack.getItem()).getBlock();
if (blackList.contains(block) || block instanceof BlockContainer) continue;
/* filter out non-solid blocks */
if (!Block.getBlockFromItem(stack.getItem()).getDefaultState().isFullBlock()) continue;
/* don't use falling blocks if it'd fall */
if (((ItemBlock) stack.getItem()).getBlock() instanceof BlockFalling) {
if (Wrapper.getWorld().getBlockState(belowBlockPos).getMaterial().isReplaceable()) continue;
}
newSlot = i;
break;
}
/* check if any blocks were found, and if they were then set the slot */
if (newSlot != -1) {
Wrapper.getPlayer().inventory.currentItem = newSlot;
}
}
}

View File

@ -0,0 +1,149 @@
package me.zeroeightsix.kami.module.modules.player
import me.zero.alpine.listener.EventHandler
import me.zero.alpine.listener.EventHook
import me.zero.alpine.listener.Listener
import me.zeroeightsix.kami.KamiMod
import me.zeroeightsix.kami.module.Module
import me.zeroeightsix.kami.setting.Settings
import me.zeroeightsix.kami.util.BlockInteractionHelper
import me.zeroeightsix.kami.util.EntityUtil
import me.zeroeightsix.kami.util.Wrapper
import net.minecraft.block.Block
import net.minecraft.block.BlockContainer
import net.minecraft.block.BlockFalling
import net.minecraft.item.ItemBlock
import net.minecraft.item.ItemStack
import net.minecraft.network.play.client.CPacketEntityAction
import net.minecraft.util.math.BlockPos
import net.minecraftforge.client.event.InputUpdateEvent
/**
* Created by 086 on 20/01/19
* Updated by Polymer on 16/01/20
* Updated by dominikaaaa on 02/03/20
* Updated by Nucleus on 25/04/20
* @see me.zeroeightsix.kami.mixin.client.MixinEntity
*/
@Module.Info(name = "Scaffold", category = Module.Category.PLAYER, description = "Places blocks under you")
class Scaffold : Module() {
private val placeBlocks = register(Settings.b("Place Blocks", true))
private val tower = register(Settings.b("Tower", true))
private val modeSetting = register(Settings.e<Mode>("Mode", Mode.NORMAL))
private val randomDelay = register(Settings.booleanBuilder("Random Delay").withValue(false).withVisibility { v: Boolean? -> modeSetting.value == Mode.LEGIT }.build())
private val delayRange = register(Settings.integerBuilder("Delay Range").withMinimum(0).withValue(6).withMaximum(10).withVisibility { v: Int? -> modeSetting.value == Mode.LEGIT && randomDelay.value }.build())
private val ticks = register(Settings.integerBuilder("Ticks").withMinimum(0).withMaximum(60).withValue(2).withVisibility { v: Int? -> modeSetting.value == Mode.NORMAL }.build())
private var shouldSlow = false
private var towerStart = 0.0
private enum class Mode {
NORMAL, LEGIT
}
@EventHandler
private val eventListener = Listener(EventHook { event: InputUpdateEvent ->
if (modeSetting.value == Mode.LEGIT && shouldSlow) {
if (randomDelay.value) {
event.movementInput.moveStrafe *= 0.2f + randomInRange
event.movementInput.moveForward *= 0.2f + randomInRange
} else {
event.movementInput.moveStrafe *= 0.2f
event.movementInput.moveForward *= 0.2f
}
}
})
override fun onUpdate() {
if (mc.player == null || KamiMod.MODULE_MANAGER.isModuleEnabled(Freecam::class.java)) return
shouldSlow = false
val towering = mc.gameSettings.keyBindJump.isKeyDown && tower.value
var vec3d = EntityUtil.getInterpolatedPos(mc.player, ticks.value.toFloat())
if (modeSetting.value == Mode.LEGIT) vec3d = EntityUtil.getInterpolatedPos(mc.player, 0f)
val blockPos = BlockPos(vec3d).down()
val belowBlockPos = blockPos.down()
val legitPos = BlockPos(EntityUtil.getInterpolatedPos(mc.player, 2f))
/* when legitBridge is enabled */
/* check if block behind player is air or other replaceable block and if it is, make the player crouch */if (modeSetting.value == Mode.LEGIT && Wrapper.getWorld().getBlockState(legitPos.down()).material.isReplaceable && mc.player.onGround && !towering) {
shouldSlow = true
mc.player.movementInput.sneak = true
mc.player.connection.sendPacket(CPacketEntityAction(mc.player, CPacketEntityAction.Action.START_SNEAKING))
}
if (towering) {
if (mc.player.posY <= blockPos.y + 1.0f) {
return
}
}
/* check if block is already placed */if (!Wrapper.getWorld().getBlockState(blockPos).material.isReplaceable) {
return
}
val oldSlot = mc.player.inventory.currentItem
setSlotToBlocks(belowBlockPos)
/* check if we don't have a block adjacent to the blockPos */if (!BlockInteractionHelper.checkForNeighbours(blockPos)) return
/* place the block */if (placeBlocks.value) BlockInteractionHelper.placeBlockScaffold(blockPos)
/* Reset the slot */mc.player.inventory.currentItem = oldSlot
if (towering) {
val motion = 0.42 // jump motion
if (mc.player.onGround) {
towerStart = mc.player.posY
mc.player.motionY = motion
}
if (mc.player.posY > towerStart + motion) {
mc.player.setPosition(mc.player.posX, mc.player.posY.toInt() * 1.0, mc.player.posZ)
mc.player.motionY = motion
towerStart = mc.player.posY
}
} else {
towerStart = 0.0
}
if (shouldSlow) {
mc.player.connection.sendPacket(CPacketEntityAction(mc.player, CPacketEntityAction.Action.STOP_SNEAKING))
shouldSlow = false
}
}
private val randomInRange: Float
get() = 0.11f + Math.random().toFloat() * (delayRange.value / 10.0f - 0.11f)
private fun setSlotToBlocks(belowBlockPos: BlockPos) {
/* search blocks in hotbar */
var newSlot = -1
for (i in 0..8) {
/* filter out non-block items */
val stack = Wrapper.getPlayer().inventory.getStackInSlot(i)
if (stack == ItemStack.EMPTY || stack.getItem() !is ItemBlock) continue
val block = (stack.getItem() as ItemBlock).block
if (BlockInteractionHelper.blackList.contains(block) || block is BlockContainer) continue
/* filter out non-solid blocks */
if (!Block.getBlockFromItem(stack.getItem()).defaultState.isFullBlock) continue
/* don't use falling blocks if it'd fall */
if ((stack.getItem() as ItemBlock).block is BlockFalling) {
if (Wrapper.getWorld().getBlockState(belowBlockPos).material.isReplaceable) continue
}
newSlot = i
break
}
/* check if any blocks were found, and if they were then set the slot */if (newSlot != -1) {
Wrapper.getPlayer().inventory.currentItem = newSlot
}
}
companion object {
private lateinit var INSTANCE: Scaffold
@JvmStatic
fun shouldScaffold(): Boolean {
return INSTANCE.isEnabled
}
}
init {
INSTANCE = this
}
}