summaryrefslogtreecommitdiff
path: root/src/main/java/net
diff options
context:
space:
mode:
authorArslaan Pathan <[email protected]>2025-10-04 22:04:05 +1300
committerArslaan Pathan <[email protected]>2025-10-04 22:04:05 +1300
commit0f4b346318d390751a7ce95c372689fe851a1d9c (patch)
tree6bcaf62a5ff4e220d9e7de39ecdcc4a8c8c83209 /src/main/java/net
parentb28f0b7bb0cd10fc3318cd24709c22430aa16270 (diff)
downloadarslaansmagichax-0f4b346318d390751a7ce95c372689fe851a1d9c.tar.xz
arslaansmagichax-0f4b346318d390751a7ce95c372689fe851a1d9c.zip
more modules and bug fixes
Diffstat (limited to 'src/main/java/net')
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/ArslaansMagicHaxClient.java28
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/commands/CrashCommand.java30
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/commands/HackGive.java46
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/commands/HackSetblock.java78
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/commands/HackXP.java35
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/mixin/ExampleMixin.java15
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/mixin/MinecraftClientMixin.java15
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/mixin/PlayerEntityMixin.java18
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/ModuleManager.java36
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/GhostScaffold.java22
-rw-r--r--src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/NoAttackCooldown.java11
11 files changed, 310 insertions, 24 deletions
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/ArslaansMagicHaxClient.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/ArslaansMagicHaxClient.java
index f5c2743..4cf4d16 100644
--- a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/ArslaansMagicHaxClient.java
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/ArslaansMagicHaxClient.java
@@ -3,23 +3,33 @@ package net.justlearning.arslaan3102.arslaansmagichax;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
-import net.justlearning.arslaan3102.arslaansmagichax.commands.HackTP;
-import net.justlearning.arslaan3102.arslaansmagichax.commands.ModuleToggleCommand;
-import net.justlearning.arslaan3102.arslaansmagichax.modules.Module;
+import net.justlearning.arslaan3102.arslaansmagichax.commands.*;
import net.justlearning.arslaan3102.arslaansmagichax.modules.ModuleManager;
-import net.justlearning.arslaan3102.arslaansmagichax.modules.impl.Flight;
-import net.justlearning.arslaan3102.arslaansmagichax.modules.impl.NoFall;
-import net.justlearning.arslaan3102.arslaansmagichax.modules.impl.Waterwalk;
+import net.justlearning.arslaan3102.arslaansmagichax.modules.impl.*;
public class ArslaansMagicHaxClient implements ClientModInitializer {
+ public static Flight flight = new Flight();
+ public static NoFall noFall = new NoFall();
+ public static Waterwalk waterwalk = new Waterwalk();
+ public static NoAttackCooldown noAttackCooldown = new NoAttackCooldown();
+ public static GhostScaffold ghostScaffold = new GhostScaffold();
+
@Override
public void onInitializeClient() {
ClientCommandRegistrationCallback.EVENT.register(HackTP::register);
ClientCommandRegistrationCallback.EVENT.register(ModuleToggleCommand::register);
+ ClientCommandRegistrationCallback.EVENT.register(HackXP::register);
+ ClientCommandRegistrationCallback.EVENT.register(HackSetblock::register);
+ ClientCommandRegistrationCallback.EVENT.register(HackGive::register);
+ ClientCommandRegistrationCallback.EVENT.register(CrashCommand::register); // crashes the game for the funni
+
+ ModuleManager.INSTANCE.register(flight);
+ ModuleManager.INSTANCE.register(noFall);
+ ModuleManager.INSTANCE.register(waterwalk);
+ ModuleManager.INSTANCE.register(noAttackCooldown);
+ ModuleManager.INSTANCE.register(ghostScaffold);
- ModuleManager.INSTANCE.register(new Flight());
- ModuleManager.INSTANCE.register(new NoFall());
- ModuleManager.INSTANCE.register(new Waterwalk());
+ ModuleManager.INSTANCE.registerHUD();
ClientTickEvents.END_CLIENT_TICK.register(mc -> {
ModuleManager.tick();
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/commands/CrashCommand.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/commands/CrashCommand.java
new file mode 100644
index 0000000..17178f8
--- /dev/null
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/commands/CrashCommand.java
@@ -0,0 +1,30 @@
+package net.justlearning.arslaan3102.arslaansmagichax.commands;
+
+import com.mojang.brigadier.CommandDispatcher;
+import com.mojang.brigadier.arguments.IntegerArgumentType;
+import com.mojang.brigadier.arguments.StringArgumentType;
+import com.mojang.brigadier.context.CommandContext;
+import com.mojang.brigadier.exceptions.CommandSyntaxException;
+import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager;
+import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.command.CommandRegistryAccess;
+
+public class CrashCommand {
+ public static void register(CommandDispatcher<FabricClientCommandSource> dispatcher, CommandRegistryAccess access) {
+ dispatcher.register(ClientCommandManager.literal("surprise")
+ .executes(CrashCommand::run)
+ );
+ }
+
+ private static int run(CommandContext<FabricClientCommandSource> fabricClientCommandSourceCommandContext) throws CommandSyntaxException {
+ // almost guaranteed to cook the entire game
+ MinecraftClient.getInstance().player = null;
+ MinecraftClient.getInstance().cameraEntity = null;
+ MinecraftClient.getInstance().currentScreen = null;
+ MinecraftClient.getInstance().crosshairTarget = null;
+ MinecraftClient.getInstance().targetedEntity = null;
+
+ return 1;
+ }
+}
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/commands/HackGive.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/commands/HackGive.java
new file mode 100644
index 0000000..f19289d
--- /dev/null
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/commands/HackGive.java
@@ -0,0 +1,46 @@
+package net.justlearning.arslaan3102.arslaansmagichax.commands;
+
+import com.mojang.brigadier.CommandDispatcher;
+import com.mojang.brigadier.arguments.IntegerArgumentType;
+import com.mojang.brigadier.arguments.StringArgumentType;
+import com.mojang.brigadier.context.CommandContext;
+import com.mojang.brigadier.exceptions.CommandSyntaxException;
+import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager;
+import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource;
+import net.minecraft.block.Block;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.command.CommandRegistryAccess;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.registry.Registries;
+import net.minecraft.text.Text;
+import net.minecraft.util.Identifier;
+
+public class HackGive {
+ public static void register(CommandDispatcher<FabricClientCommandSource> dispatcher, CommandRegistryAccess access) {
+ dispatcher.register(ClientCommandManager.literal("hackgive")
+ .then(ClientCommandManager.argument("item", StringArgumentType.string())
+ .then(ClientCommandManager.argument("amount", IntegerArgumentType.integer(1))
+ .executes(HackGive::run)
+ )
+ )
+ );
+ }
+
+ private static int run(CommandContext<FabricClientCommandSource> context) throws CommandSyntaxException {
+ MinecraftClient client = MinecraftClient.getInstance();
+ if (client.world == null || client.player == null) return 0;
+
+ String itemId = StringArgumentType.getString(context, "item");
+ int amount = IntegerArgumentType.getInteger(context, "amount");
+ Item item = Registries.ITEM.get(Identifier.of(itemId));
+ if (item == null) {
+ context.getSource().sendError(Text.literal("Unknown item: " + itemId));
+ return 0;
+ }
+
+ ItemStack stack = new ItemStack(item, amount);
+ client.player.getInventory().insertStack(stack);
+ return 1;
+ }
+}
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/commands/HackSetblock.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/commands/HackSetblock.java
new file mode 100644
index 0000000..2dde32b
--- /dev/null
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/commands/HackSetblock.java
@@ -0,0 +1,78 @@
+package net.justlearning.arslaan3102.arslaansmagichax.commands;
+
+import com.mojang.brigadier.CommandDispatcher;
+import com.mojang.brigadier.arguments.IntegerArgumentType;
+import com.mojang.brigadier.arguments.StringArgumentType;
+import com.mojang.brigadier.context.CommandContext;
+import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager;
+import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource;
+import net.minecraft.block.Block;
+import net.minecraft.block.BlockState;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.command.CommandRegistryAccess;
+import net.minecraft.registry.Registries;
+import net.minecraft.text.Text;
+import net.minecraft.util.Identifier;
+import net.minecraft.util.math.BlockPos;
+
+public class HackSetblock {
+ public static void register(CommandDispatcher<FabricClientCommandSource> dispatcher, CommandRegistryAccess access) {
+ dispatcher.register(ClientCommandManager.literal("hacksetblock")
+ .then(ClientCommandManager.argument("block", StringArgumentType.string())
+ // Case: just block -> place at player's feet
+ .executes(HackSetblock::runAtFeet)
+
+ // Case: block + xyz -> place at given position
+ .then(ClientCommandManager.argument("x", IntegerArgumentType.integer())
+ .then(ClientCommandManager.argument("y", IntegerArgumentType.integer())
+ .then(ClientCommandManager.argument("z", IntegerArgumentType.integer())
+ .executes(HackSetblock::runAtPos)
+ )
+ )
+ )
+ )
+ );
+ }
+
+ private static int runAtFeet(CommandContext<FabricClientCommandSource> context) {
+ MinecraftClient client = MinecraftClient.getInstance();
+ if (client.world == null || client.player == null) return 0;
+
+ String blockId = StringArgumentType.getString(context, "block");
+ Block block = Registries.BLOCK.get(Identifier.of(blockId));
+ if (block == null) {
+ context.getSource().sendError(Text.literal("Unknown block: " + blockId));
+ return 0;
+ }
+
+ BlockPos pos = client.player.getBlockPos().down();
+ BlockState blockState = block.getDefaultState();
+
+ client.world.setBlockState(pos, blockState);
+
+ return 1;
+ }
+
+ private static int runAtPos(CommandContext<FabricClientCommandSource> context) {
+ MinecraftClient client = MinecraftClient.getInstance();
+ if (client.world == null) return 0;
+
+ String blockId = StringArgumentType.getString(context, "block");
+ int x = IntegerArgumentType.getInteger(context, "x");
+ int y = IntegerArgumentType.getInteger(context, "y");
+ int z = IntegerArgumentType.getInteger(context, "z");
+
+ Block block = Registries.BLOCK.get(Identifier.of(blockId));
+ if (block == null) {
+ context.getSource().sendError(Text.literal("Unknown block: " + blockId));
+ return 0;
+ }
+
+ BlockPos pos = new BlockPos(x, y, z);
+ BlockState blockState = block.getDefaultState();
+
+ client.world.setBlockState(pos, blockState);
+
+ return 1;
+ }
+}
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/commands/HackXP.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/commands/HackXP.java
new file mode 100644
index 0000000..304ab3c
--- /dev/null
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/commands/HackXP.java
@@ -0,0 +1,35 @@
+package net.justlearning.arslaan3102.arslaansmagichax.commands;
+
+import com.mojang.brigadier.CommandDispatcher;
+import com.mojang.brigadier.arguments.IntegerArgumentType;
+import com.mojang.brigadier.arguments.StringArgumentType;
+import com.mojang.brigadier.context.CommandContext;
+import com.mojang.brigadier.exceptions.CommandSyntaxException;
+import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager;
+import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.command.CommandRegistryAccess;
+import net.minecraft.inventory.StackWithSlot;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.Items;
+import net.minecraft.network.packet.s2c.play.ExperienceBarUpdateS2CPacket;
+import net.minecraft.storage.WriteView;
+
+public class HackXP {
+ public static void register(CommandDispatcher<FabricClientCommandSource> dispatcher, CommandRegistryAccess access) {
+ dispatcher.register(ClientCommandManager.literal("hackxp")
+ .then(ClientCommandManager.argument("xp", IntegerArgumentType.integer())
+ .executes(HackXP::run)
+ )
+ );
+ }
+
+ private static int run(CommandContext<FabricClientCommandSource> context) throws CommandSyntaxException {
+ int xp = IntegerArgumentType.getInteger(context,"xp");
+
+ if (MinecraftClient.getInstance().player == null) return -1;
+ MinecraftClient.getInstance().player.experienceLevel += xp;
+
+ return 1;
+ }
+}
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/mixin/ExampleMixin.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/mixin/ExampleMixin.java
deleted file mode 100644
index ef68e7f..0000000
--- a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/mixin/ExampleMixin.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package net.justlearning.arslaan3102.arslaansmagichax.mixin;
-
-import net.minecraft.server.MinecraftServer;
-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;
-
-@Mixin(MinecraftServer.class)
-public class ExampleMixin {
- @Inject(at = @At("HEAD"), method = "loadWorld")
- private void init(CallbackInfo info) {
- // This code is injected into the start of MinecraftServer.loadWorld()V
- }
-} \ No newline at end of file
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/mixin/MinecraftClientMixin.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/mixin/MinecraftClientMixin.java
new file mode 100644
index 0000000..792aa2c
--- /dev/null
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/mixin/MinecraftClientMixin.java
@@ -0,0 +1,15 @@
+package net.justlearning.arslaan3102.arslaansmagichax.mixin;
+
+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.CallbackInfoReturnable;
+
+@Mixin(MinecraftClient.class)
+public class MinecraftClientMixin {
+ @Inject(method = "getWindowTitle", at = @At("HEAD"), cancellable = true)
+ private void onGetWindowTitle(CallbackInfoReturnable<String> cir) {
+ cir.setReturnValue("Arslaan's Magic Hax | Minecraft 1.21.8");
+ }
+}
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/mixin/PlayerEntityMixin.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/mixin/PlayerEntityMixin.java
new file mode 100644
index 0000000..0894d30
--- /dev/null
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/mixin/PlayerEntityMixin.java
@@ -0,0 +1,18 @@
+package net.justlearning.arslaan3102.arslaansmagichax.mixin;
+
+import net.justlearning.arslaan3102.arslaansmagichax.ArslaansMagicHaxClient;
+import net.justlearning.arslaan3102.arslaansmagichax.modules.impl.NoAttackCooldown;
+import net.minecraft.client.network.ClientPlayerEntity;
+import net.minecraft.entity.player.PlayerEntity;
+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.CallbackInfoReturnable;
+
+@Mixin(PlayerEntity.class)
+public abstract class PlayerEntityMixin {
+ @Inject(method = "getAttackCooldownProgress", at = @At("HEAD"), cancellable = true)
+ private void onGetAttackCooldownProgress(CallbackInfoReturnable<Float> cir) {
+ if (ArslaansMagicHaxClient.noAttackCooldown.isEnabled()) cir.setReturnValue(1.0F);
+ }
+} \ No newline at end of file
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/ModuleManager.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/ModuleManager.java
index 2cea608..5a69e0b 100644
--- a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/ModuleManager.java
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/ModuleManager.java
@@ -1,10 +1,20 @@
package net.justlearning.arslaan3102.arslaansmagichax.modules;
+import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback;
+import net.minecraft.client.MinecraftClient;
+import net.minecraft.client.font.TextRenderer;
+import net.minecraft.client.gui.DrawContext;
+import net.minecraft.client.render.RenderTickCounter;
+import net.minecraft.text.Text;
+import net.minecraft.util.math.MathHelper;
+
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class ModuleManager {
+ private boolean hudRegistered = false;
+
private static List<Module> modules = new ArrayList<>();
public static ModuleManager INSTANCE = new ModuleManager();
public void register(Module module) {
@@ -24,4 +34,30 @@ public class ModuleManager {
module.tick();
}
}
+
+ public void registerHUD() {
+ if (!hudRegistered) {
+ HudRenderCallback.EVENT.register(this::onRenderHud);
+ hudRegistered = true;
+ }
+ }
+
+ private void onRenderHud(DrawContext drawContext, RenderTickCounter renderTickCounter) {
+ TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer;
+ float alpha = 1.0F;
+ int i = MathHelper.ceil(alpha * 255.0F) << 24; // I don't know what this dark magic is but it works
+ int x = 5;
+ int y = 5;
+
+ int titleColor = 16568909 | i; // weird magic
+
+ drawContext.drawTextWithBackground(textRenderer, Text.literal("Arslaan's Magic Hax"), x, y, 50, titleColor);
+ y += textRenderer.fontHeight + 2;
+
+ for (Module module : ModuleManager.getEnabledModules()) {
+ int color = 16777215 | i; // more magic I don't understand
+ drawContext.drawTextWithShadow(textRenderer, Text.literal(module.getName()), x, y, color);
+ y += textRenderer.fontHeight + 2;
+ }
+ }
}
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/GhostScaffold.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/GhostScaffold.java
new file mode 100644
index 0000000..156243e
--- /dev/null
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/GhostScaffold.java
@@ -0,0 +1,22 @@
+package net.justlearning.arslaan3102.arslaansmagichax.modules.impl;
+
+import net.justlearning.arslaan3102.arslaansmagichax.modules.Module;
+import net.minecraft.block.BlockState;
+import net.minecraft.block.Blocks;
+import net.minecraft.util.math.BlockPos;
+
+public class GhostScaffold extends Module {
+ public GhostScaffold() {
+ super("GhostScaffold", "Allows you to scaffold but with ghost blocks");
+ }
+
+ @Override
+ public void tick() {
+ if (!this.isEnabled() || mc.player == null || mc.world == null) return;
+
+ BlockPos pos = mc.player.getBlockPos().down();
+ BlockState blockState = Blocks.STONE.getDefaultState();
+
+ mc.world.setBlockState(pos, blockState);
+ }
+}
diff --git a/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/NoAttackCooldown.java b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/NoAttackCooldown.java
new file mode 100644
index 0000000..6e36667
--- /dev/null
+++ b/src/main/java/net/justlearning/arslaan3102/arslaansmagichax/modules/impl/NoAttackCooldown.java
@@ -0,0 +1,11 @@
+package net.justlearning.arslaan3102.arslaansmagichax.modules.impl;
+
+import net.justlearning.arslaan3102.arslaansmagichax.modules.Module;
+
+public class NoAttackCooldown extends Module {
+ public NoAttackCooldown() {
+ super("NoAttackCooldown", "Removes attack cooldown");
+ }
+
+ // removing cooldown handled in PlayerEntityMixin
+}