mirror of https://github.com/kami-blue/client
Co-authored-by: Dominika <sokolov.dominika@gmail.com>
This commit is contained in:
parent
bbd2f6b58c
commit
022ea5c1d9
|
@ -4,6 +4,7 @@ import me.zeroeightsix.kami.event.events.AddCollisionBoxToListEvent
|
||||||
import me.zeroeightsix.kami.event.events.PacketEvent
|
import me.zeroeightsix.kami.event.events.PacketEvent
|
||||||
import me.zeroeightsix.kami.mixin.extension.y
|
import me.zeroeightsix.kami.mixin.extension.y
|
||||||
import me.zeroeightsix.kami.module.Module
|
import me.zeroeightsix.kami.module.Module
|
||||||
|
import me.zeroeightsix.kami.setting.Settings
|
||||||
import me.zeroeightsix.kami.util.BaritoneUtils
|
import me.zeroeightsix.kami.util.BaritoneUtils
|
||||||
import me.zeroeightsix.kami.util.EntityUtils
|
import me.zeroeightsix.kami.util.EntityUtils
|
||||||
import me.zeroeightsix.kami.util.threads.safeListener
|
import me.zeroeightsix.kami.util.threads.safeListener
|
||||||
|
@ -13,18 +14,22 @@ import net.minecraft.entity.item.EntityBoat
|
||||||
import net.minecraft.network.play.client.CPacketPlayer
|
import net.minecraft.network.play.client.CPacketPlayer
|
||||||
import net.minecraft.util.math.AxisAlignedBB
|
import net.minecraft.util.math.AxisAlignedBB
|
||||||
import net.minecraft.util.math.BlockPos
|
import net.minecraft.util.math.BlockPos
|
||||||
import net.minecraft.util.math.MathHelper
|
|
||||||
import net.minecraftforge.fml.common.gameevent.TickEvent
|
import net.minecraftforge.fml.common.gameevent.TickEvent
|
||||||
import org.kamiblue.commons.extension.ceilToInt
|
import org.kamiblue.commons.extension.ceilToInt
|
||||||
import org.kamiblue.commons.extension.floorToInt
|
import org.kamiblue.commons.extension.floorToInt
|
||||||
import org.kamiblue.event.listener.listener
|
import org.kamiblue.event.listener.listener
|
||||||
|
|
||||||
@Module.Info(
|
@Module.Info(
|
||||||
name = "Jesus",
|
name = "Jesus",
|
||||||
description = "Allows you to walk on water",
|
description = "Allows you to walk on water",
|
||||||
category = Module.Category.MOVEMENT
|
category = Module.Category.MOVEMENT
|
||||||
)
|
)
|
||||||
object Jesus : Module() {
|
object Jesus : Module() {
|
||||||
|
|
||||||
|
private val dolphin = register(Settings.b("Dolphin", false))
|
||||||
|
|
||||||
|
private val WATER_WALK_AA = AxisAlignedBB(0.0, 0.0, 0.0, 1.0, 0.99, 1.0)
|
||||||
|
|
||||||
override fun onToggle() {
|
override fun onToggle() {
|
||||||
BaritoneUtils.settings?.assumeWalkOnWater?.value = isEnabled
|
BaritoneUtils.settings?.assumeWalkOnWater?.value = isEnabled
|
||||||
}
|
}
|
||||||
|
@ -32,18 +37,29 @@ object Jesus : Module() {
|
||||||
init {
|
init {
|
||||||
safeListener<TickEvent.ClientTickEvent> {
|
safeListener<TickEvent.ClientTickEvent> {
|
||||||
if (isInWater(player) && !player.isSneaking) {
|
if (isInWater(player) && !player.isSneaking) {
|
||||||
player.motionY = 0.1
|
if (dolphin.value) {
|
||||||
if (player.ridingEntity != null && player.ridingEntity !is EntityBoat) {
|
player.motionY += 0.03999999910593033 // regular jump speed
|
||||||
player.ridingEntity!!.motionY = 0.3
|
} else {
|
||||||
|
player.motionY = 0.1
|
||||||
|
|
||||||
|
if (player.ridingEntity != null && player.ridingEntity !is EntityBoat) {
|
||||||
|
player.ridingEntity?.motionY = 0.3
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
listener<AddCollisionBoxToListEvent> {
|
listener<AddCollisionBoxToListEvent> {
|
||||||
if (it.block !is BlockLiquid || it.entity !is EntityBoat || mc.player == null || mc.player.isSneaking || mc.player.fallDistance > 3) return@listener
|
if (dolphin.value || mc.player == null || mc.player.isSneaking || mc.player.fallDistance > 3) return@listener
|
||||||
if ((isDrivenByPlayer(it.entity) || it.entity === mc.player)
|
|
||||||
&& !isInWater(mc.player) && (EntityUtils.isAboveWater(mc.player, false)
|
if (
|
||||||
|| EntityUtils.isAboveWater(mc.player.ridingEntity, false)) && isAboveBlock(mc.player, it.pos)) {
|
it.block is BlockLiquid
|
||||||
|
&& it.entity is EntityBoat
|
||||||
|
&& isAboveBlock(mc.player, it.pos)
|
||||||
|
&& (isDrivenByPlayer(it.entity) || it.entity === mc.player)
|
||||||
|
&& !isInWater(mc.player)
|
||||||
|
&& (EntityUtils.isAboveWater(mc.player, false) || EntityUtils.isAboveWater(mc.player.ridingEntity, false))
|
||||||
|
) {
|
||||||
val axisAlignedBB = WATER_WALK_AA.offset(it.pos)
|
val axisAlignedBB = WATER_WALK_AA.offset(it.pos)
|
||||||
if (it.entityBox.intersects(axisAlignedBB)) it.collidingBoxes.add(axisAlignedBB)
|
if (it.entityBox.intersects(axisAlignedBB)) it.collidingBoxes.add(axisAlignedBB)
|
||||||
it.cancel()
|
it.cancel()
|
||||||
|
@ -51,24 +67,29 @@ object Jesus : Module() {
|
||||||
}
|
}
|
||||||
|
|
||||||
listener<PacketEvent.Send> {
|
listener<PacketEvent.Send> {
|
||||||
|
if (dolphin.value) return@listener
|
||||||
|
|
||||||
if (it.packet is CPacketPlayer
|
if (it.packet is CPacketPlayer
|
||||||
&& EntityUtils.isAboveWater(mc.player, true)
|
&& EntityUtils.isAboveWater(mc.player, true)
|
||||||
&& !isInWater(mc.player)
|
&& !isInWater(mc.player)
|
||||||
&& !isAboveLand(mc.player)) {
|
&& !isAboveLand(mc.player)
|
||||||
val ticks = mc.player.ticksExisted % 2
|
&& mc.player.ticksExisted % 2 == 0
|
||||||
if (ticks == 0) it.packet.y += 0.02
|
) {
|
||||||
|
it.packet.y += 0.02
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private val WATER_WALK_AA = AxisAlignedBB(0.0, 0.0, 0.0, 1.0, 0.99, 1.0)
|
|
||||||
|
|
||||||
private fun isAboveLand(entity: Entity): Boolean {
|
private fun isAboveLand(entity: Entity): Boolean {
|
||||||
val y = entity.posY - 0.01
|
val y = entity.posY - 0.01
|
||||||
for (x in MathHelper.floor(entity.posX) until MathHelper.ceil(entity.posX)) for (z in MathHelper.floor(entity.posZ) until MathHelper.ceil(entity.posZ)) {
|
|
||||||
val pos = BlockPos(x, MathHelper.floor(y), z)
|
for (x in entity.posX.floorToInt() until entity.posX.ceilToInt()) {
|
||||||
if (mc.world.getBlockState(pos).isFullBlock) return true
|
for (z in entity.posZ.floorToInt() until entity.posZ.ceilToInt()) {
|
||||||
|
val pos = BlockPos(x, y.floorToInt(), z)
|
||||||
|
if (mc.world.getBlockState(pos).isFullBlock) return true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,8 +97,7 @@ object Jesus : Module() {
|
||||||
return entity.posY >= pos.y
|
return entity.posY >= pos.y
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun isInWater(entity: Entity?): Boolean {
|
private fun isInWater(entity: Entity): Boolean {
|
||||||
if (entity == null) return false
|
|
||||||
val y = (entity.posY + 0.01).floorToInt()
|
val y = (entity.posY + 0.01).floorToInt()
|
||||||
|
|
||||||
for (x in entity.posX.floorToInt() until entity.posX.ceilToInt()) {
|
for (x in entity.posX.floorToInt() until entity.posX.ceilToInt()) {
|
||||||
|
|
Loading…
Reference in New Issue