Skip to content

Commit

Permalink
Teleportation layer navigation (#58)
Browse files Browse the repository at this point in the history
  • Loading branch information
GeorgeRNG committed Nov 14, 2023
1 parent 33a415e commit 500884b
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 1 deletion.
24 changes: 24 additions & 0 deletions src/main/java/dev/dfonline/codeclient/config/Config.java
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ public class Config {
public boolean ScopeSwitcher = true;
public float UpAngle = 50;
public float DownAngle = 50;
public boolean TeleportUp = false;
public boolean TeleportDown = false;

private void save() {
try {
Expand Down Expand Up @@ -85,6 +87,8 @@ private void save() {
object.addProperty("ScopeSwitcher",ScopeSwitcher);
object.addProperty("UpAngle",UpAngle);
object.addProperty("DownAngle",DownAngle);
object.addProperty("TeleportUp",TeleportUp);
object.addProperty("TeleportDown",TeleportDown);
FileManager.writeConfig(object.toString());
} catch (Exception e) {
CodeClient.LOGGER.info("Couldn't save config: " + e);
Expand Down Expand Up @@ -222,6 +226,26 @@ public YetAnotherConfigLib getLibConfig() {
)
.controller(opt -> FloatSliderControllerBuilder.create(opt).range(0F,180F).step(1F))
.build())
.option(Option.createBuilder(boolean.class)
.name(Text.literal("Teleport Up"))
.description(OptionDescription.of(Text.literal("If when facing up")))
.binding(
false,
() -> TeleportUp,
opt -> TeleportUp = opt
)
.controller(TickBoxControllerBuilder::create)
.build())
.option(Option.createBuilder(boolean.class)
.name(Text.literal("Teleport Down"))
.description(OptionDescription.of(Text.literal("Teleport Down when using")))
.binding(
false,
() -> TeleportDown,
opt -> TeleportDown = opt
)
.controller(TickBoxControllerBuilder::create)
.build())
// .option(Option.createBuilder(boolean.class)
// .name(Text.literal("Air Control"))
// .description(OptionDescription.createBuilder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
import net.minecraft.block.entity.SignBlockEntity;
import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.client.sound.PositionedSoundInstance;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.entity.EntityDimensions;
Expand Down Expand Up @@ -220,6 +221,14 @@ public static BlockHitResult onBlockInteract(BlockHitResult hitResult) {
return hitResult;
}

public static boolean shouldTeleportUp() {
if(CodeClient.location instanceof Dev dev) {
ClientPlayerEntity pl = CodeClient.MC.player;
return dev.isInDev(pl.getPos()) && pl.isOnGround() && Config.getConfig().TeleportUp && pl.getPitch() <= Config.getConfig().UpAngle - 90;
}
return false;
}

public static boolean onItemInteract(PlayerEntity player, Hand hand) {
if(player.isSneaking() || !Config.getConfig().ScopeSwitcher) return false;

Expand Down
2 changes: 1 addition & 1 deletion src/main/java/dev/dfonline/codeclient/dev/NoClip.java
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public static Vec3d handleClientPosition(Vec3d movement) {
if(x == plot.getX() - 22 && velocity.getX() < 0) player.setVelocityClient(0, velocity.y, velocity.z);

player.setOnGround(false);
boolean wantsToFall = player.isSneaking() && (player.getPitch() >= 90 - Config.getConfig().DownAngle);
boolean wantsToFall = !Config.getConfig().TeleportDown && player.isSneaking() && (player.getPitch() >= 90 - Config.getConfig().DownAngle);
if((y < nearestFloor && !wantsToFall && !player.getAbilities().flying) || y == 50) {
player.setVelocityClient(velocity.x, 0, velocity.z);
y = nearestFloor;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,24 @@

import dev.dfonline.codeclient.CodeClient;
import dev.dfonline.codeclient.action.impl.MoveToSpawn;
import dev.dfonline.codeclient.config.Config;
import dev.dfonline.codeclient.dev.InteractionManager;
import dev.dfonline.codeclient.dev.NoClip;
import dev.dfonline.codeclient.location.Dev;
import net.minecraft.client.network.ClientPlayNetworkHandler;
import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.entity.player.PlayerAbilities;
import net.minecraft.network.packet.c2s.play.ClientCommandC2SPacket;
import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket;
import net.minecraft.util.math.Vec3d;
import org.java_websocket.enums.Opcode;
import org.objectweb.asm.Opcodes;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

Expand All @@ -23,6 +29,7 @@
public abstract class MClientPlayerEntity {
@Shadow @Final public ClientPlayNetworkHandler networkHandler;

@Shadow private boolean inSneakingPose;
private boolean lastSneaking = false;

@Inject(method = "tick", at = @At("HEAD"))
Expand All @@ -35,6 +42,12 @@ private void sendMovementPackets(CallbackInfo ci) {
if(CodeClient.location instanceof Dev) {
if (CodeClient.currentAction instanceof MoveToSpawn mts) if (mts.moveModifier()) ci.cancel();
ClientPlayerEntity player = MC.player;
if(Config.getConfig().TeleportDown && player.isOnGround() && !lastSneaking && player.isSneaking() && (player.getPitch() >= 90 - Config.getConfig().DownAngle)) {
Vec3d move = CodeClient.MC.player.getPos().add(0, -5, 0);
if(move.y < 50) move = new Vec3d(move.x,50,move.z);
if ((!NoClip.isIgnoringWalls()) && NoClip.isInsideWall(move)) move = move.add(0, 2, 0);
CodeClient.MC.player.setPosition(move);
}
if (NoClip.isIgnoringWalls()) {
ci.cancel();
Vec3d pos = NoClip.handleSeverPosition();
Expand Down Expand Up @@ -85,4 +98,10 @@ private void slowDown(CallbackInfoReturnable<Boolean> cir) {
private void autoJump(CallbackInfoReturnable<Boolean> cir) {
if(NoClip.isIgnoringWalls()) cir.setReturnValue(false);
}

@Redirect(method = "tickMovement", at = @At(value = "FIELD", target = "Lnet/minecraft/entity/player/PlayerAbilities;allowFlying:Z", opcode = Opcodes.GETFIELD))
private boolean canFly(PlayerAbilities instance) {
if(InteractionManager.shouldTeleportUp()) return false;
return instance.allowFlying;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,15 @@

import dev.dfonline.codeclient.CodeClient;
import dev.dfonline.codeclient.config.Config;
import dev.dfonline.codeclient.dev.InteractionManager;
import dev.dfonline.codeclient.dev.NoClip;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.math.Vec3d;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

@Mixin(PlayerEntity.class)
Expand All @@ -17,4 +21,14 @@ private void getAirSpeed(CallbackInfoReturnable<Float> cir) {
cir.setReturnValue(0.026F * (CodeClient.MC.player.getMovementSpeed() * Config.getConfig().AirSpeed));
}
}

@Inject(method = "jump",at = @At("HEAD"), cancellable = true)
private void jump(CallbackInfo ci) {
if(InteractionManager.shouldTeleportUp()) {
Vec3d move = CodeClient.MC.player.getPos().add(0, 5, 0);
if ((!NoClip.isIgnoringWalls()) && NoClip.isInsideWall(move)) move = move.add(0, 2, 0);
CodeClient.MC.player.setPosition(move);
ci.cancel();
}
}
}

0 comments on commit 500884b

Please sign in to comment.