diff options
| author | Arslaan Pathan <[email protected]> | 2025-10-04 22:04:05 +1300 |
|---|---|---|
| committer | Arslaan Pathan <[email protected]> | 2025-10-04 22:04:05 +1300 |
| commit | 0f4b346318d390751a7ce95c372689fe851a1d9c (patch) | |
| tree | 6bcaf62a5ff4e220d9e7de39ecdcc4a8c8c83209 /src/main/java/net/justlearning/arslaan3102/arslaansmagichax | |
| parent | b28f0b7bb0cd10fc3318cd24709c22430aa16270 (diff) | |
| download | arslaansmagichax-0f4b346318d390751a7ce95c372689fe851a1d9c.tar.xz arslaansmagichax-0f4b346318d390751a7ce95c372689fe851a1d9c.zip | |
more modules and bug fixes
Diffstat (limited to 'src/main/java/net/justlearning/arslaan3102/arslaansmagichax')
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 +} |
