Added Teleportation Angle Viewer
All checks were successful
build / build (push) Successful in 1m8s

(Also removed FPS counter)
This commit is contained in:
2025-03-30 16:16:51 +02:00
parent 77ae4cc1f0
commit cae8c34759
7 changed files with 105 additions and 65 deletions

View File

@ -1,39 +1,12 @@
package wtf.hak.survivalfabric;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.option.KeyBinding;
import net.minecraft.client.util.InputUtil;
import net.minecraft.text.Text;
import org.lwjgl.glfw.GLFW;
import java.awt.*;
import wtf.hak.survivalfabric.teleportation.AngleViewHandler;
public class SurvivalFabricClient implements ClientModInitializer {
public static boolean SHOULD_SHOW_FPS = false;
KeyBinding keyBinding = KeyBindingHelper.registerKeyBinding(new KeyBinding(
"key.survivalfabric.fps", // The translation key of the keybinding's name
InputUtil.Type.KEYSYM, // The type of the keybinding, KEYSYM for keyboard, MOUSE for mouse.
GLFW.GLFW_KEY_PERIOD, // The keycode of the key
"category.survivalfabric.utils" // The translation key of the keybinding's category.
));
@Override
public void onInitializeClient() {
ClientTickEvents.END_CLIENT_TICK.register(client -> {
while (keyBinding.wasPressed()) {
MinecraftClient mc = MinecraftClient.getInstance();
SHOULD_SHOW_FPS = !SHOULD_SHOW_FPS;
if(SHOULD_SHOW_FPS) {
mc.player.sendMessage(Text.literal("FPS Counter is now on").withColor(Color.GREEN.getRGB()), true);
} else
mc.player.sendMessage(Text.literal("FPS Counter is now off").withColor(Color.RED.getRGB()), true);
}
});
AngleViewHandler.registerKeybindings();
}
}

View File

@ -1,28 +0,0 @@
package wtf.hak.survivalfabric.mixin.client;
import net.minecraft.client.MinecraftClient;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.hud.InGameHud;
import net.minecraft.client.render.RenderTickCounter;
import wtf.hak.survivalfabric.SurvivalFabricClient;
import java.awt.*;
@Mixin(InGameHud.class)
public class InGameHudMixin {
private final int TEXT_COLOR = Color.GRAY.getRGB();
@Inject(method = "render", at = @At("RETURN"))
private void renderFPS(DrawContext context, RenderTickCounter tickCounter, CallbackInfo ci) {
if(SurvivalFabricClient.SHOULD_SHOW_FPS) {
MinecraftClient client = MinecraftClient.getInstance();
context.drawTextWithShadow(client.textRenderer, client.getCurrentFps() + " FPS", 5, 5, TEXT_COLOR);
}
}
}

View File

@ -0,0 +1,76 @@
package wtf.hak.survivalfabric.teleportation;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.client.option.KeyBinding;
import net.minecraft.client.util.InputUtil;
import org.lwjgl.glfw.GLFW;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class AngleViewHandler {
private static final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
public static void registerKeybindings() {
for(Angle angle : Angle.values()) {
KeyBinding keyBinding = KeyBindingHelper.registerKeyBinding(new KeyBinding(
"key.survivalfabric." + angle.name().toLowerCase(),
InputUtil.Type.KEYSYM,
GLFW.GLFW_DONT_CARE,
"category.survivalfabric.tpangles"
));
ClientTickEvents.END_CLIENT_TICK.register(mc -> {
while (keyBinding.wasPressed()) {
ClientPlayerEntity player = mc.player;
if(player == null) return;
float oldYaw = player.getYaw();
float oldPitch = player.getPitch();
player.setYaw(angle.yaw);
player.setPitch(angle.pitch);
scheduler.schedule(() -> {
if(player == null) return;
player.setPitch(-90);
scheduler.schedule(() -> {
if(player == null) return;
player.setYaw(oldYaw);
player.setPitch(oldPitch);
}, 1500, TimeUnit.MILLISECONDS);
}, 1500, TimeUnit.MILLISECONDS);
}
});
}
}
public enum Angle {
ANGLE0(-65.19f, -54.23f),
ANGLE1(-24.86f, -54.23f),
ANGLE2(-65.02f, -41.68f),
ANGLE3(-25.03f, -41.71f),
ANGLE4(24.81f, -54.23f),
ANGLE5(65.14f, -54.23f),
ANGLE6(24.98f, -41.68f),
ANGLE7(64.97f, -41.71f),
ANGLE8(114.81f, -54.23f),
ANGLE9(155.14f, -54.23f),
ANGLE10(114.98f, -41.68f),
ANGLE11(154.97f, -41.71f),
ANGLE12(204.81f, -54.23f),
ANGLE13(245.14f, -54.23f),
ANGLE14(204.98f, -41.68f),
ANGLE15(244.97f, -41.71f);
public final float yaw;
public final float pitch;
Angle(float yaw, float pitch) {
this.yaw = yaw;
this.pitch = pitch;
}
}
}

View File

@ -3,7 +3,6 @@
"package": "wtf.hak.survivalfabric.mixin.client",
"compatibilityLevel": "JAVA_21",
"client": [
"InGameHudMixin"
],
"injectors": {
"defaultRequire": 1

View File

@ -1,4 +1,19 @@
{
"category.survivalfabric.utils": "ChirpClient",
"key.survivalfabric.fps": "Toggle FPS"
"category.survivalfabric.tpangles": "Teleportation Angles",
"key.survivalfabric.angle0": "-65.19 / -54.23",
"key.survivalfabric.angle1": "-24.86 / -54.23",
"key.survivalfabric.angle2": "-65.02 / -41.68",
"key.survivalfabric.angle3": "-25.03 / -41.71",
"key.survivalfabric.angle4": "24.81 / -54.23",
"key.survivalfabric.angle5": "65.14 / -54.23",
"key.survivalfabric.angle6": "24.98 / -41.68",
"key.survivalfabric.angle7": "64.97 / -41.71",
"key.survivalfabric.angle8": "114.81 / -54.23",
"key.survivalfabric.angle9": "155.14 / -54.23",
"key.survivalfabric.angle10": "114.98 / -41.68",
"key.survivalfabric.angle11": "154.97 / -41.71",
"key.survivalfabric.angle12": "204.81 / -54.23",
"key.survivalfabric.angle13": "245.14 / -54.23",
"key.survivalfabric.angle14": "204.98 / -41.68",
"key.survivalfabric.angle15": "244.97 / -41.71"
}