package im.expensive.functions.impl.movement;
import com.google.common.eventbus.Subscribe;
import im.expensive.events.WorldEvent;
import im.expensive.functions.api.Category;
import im.expensive.functions.api.Function;
import im.expensive.functions.api.FunctionRegister;
import net.minecraft.client.Minecraft;
import net.minecraft.tileentity.ShulkerBoxTileEntity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.ChunkPos;
import net.minecraft.world.chunk.Chunk;
@FunctionRegister(
name = "HighJump",
type = Category.Movement
)
public class HighJump extends Function {
private final Minecraft mc = Minecraft.getInstance();
@Subscribe
public void onWorldEvent(WorldEvent event) {
if (mc.world == null || mc.player == null) return;
ChunkPos playerChunkPos = new ChunkPos(mc.player.getPosition());
for (int x = -1; x <= 1; x++) {
for (int z = -1; z <= 1; z++) {
Chunk chunk = mc.world.getChunk(playerChunkPos.x + x, playerChunkPos.z + z);
for (TileEntity tile : chunk.getTileEntityMap().values()) {
if (tile instanceof ShulkerBoxTileEntity) {
BlockPos tilePos = tile.getPos();
double distance = Math.sqrt(Math.pow(mc.player.getPosX() - (tilePos.getX() + 0.5), 2) +
Math.pow(mc.player.getPosZ() - (tilePos.getZ() + 0.5), 2));
double yDiff = Math.abs(mc.player.getPosY() - (tilePos.getY() + 0.5));
if (distance <= 1 && yDiff <= (mc.player.motion.y > 1 ? 30 : 2) && mc.player.fallDistance == 0) {
ShulkerBoxTileEntity shulker = (ShulkerBoxTileEntity) tile;
if (shulker.getProgress(1.0f) > 0.0f && shulker.getProgress(1.0f) != 1.0) {
mc.player.setMotion(mc.player.getMotion().x, 1.0, mc.player.getMotion().z);
}
}
}
}
}
}
}
}