├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── src └── main │ ├── resources │ ├── assets │ │ ├── asteroide │ │ │ ├── icon.png │ │ │ └── textures │ │ │ │ └── icon.png │ │ └── minecraft │ │ │ ├── textures │ │ │ └── font │ │ │ │ └── asteroide.png │ │ │ └── font │ │ │ └── default.json │ ├── asteroide.mixins.json │ └── fabric.mod.json │ └── java │ └── spigey │ └── asteroide │ ├── mixin │ ├── MixinTemplate.java │ ├── CommandAccessor.java │ ├── EntityRendererMixin.java │ ├── CommandBlockScreenMixin.java │ ├── BossBarHudMixin.java │ ├── ClientPlayNetworkHandlerMixin.java │ ├── WorldBorderMixin.java │ ├── TranslationMixin.java │ ├── BedrockSpoofMixin.java │ ├── PlayerListHudMixin.java │ ├── BlockOutlineMixin.java │ ├── HandshakeC2SMixin.java │ ├── ItemStackMixin.java │ └── ChatHudMixin.java │ ├── modules │ ├── ModuleTemplate.java │ ├── BorderNoclipModule.java │ ├── NoOcclusionModule.java │ ├── BetterBungeeSpoofModule.java │ ├── FastStaircaseModule.java │ ├── PacketSpammerModule.java │ ├── AntiAnnouncement.java │ ├── PacketPauseModule.java │ ├── AutoKys.java │ ├── ServerCrashModule.java │ ├── TypoModule.java │ ├── PlatformFlyModule.java │ ├── CreativeFlightModule.java │ ├── ChatBypassModule.java │ ├── AutoFuckModule.java │ ├── EncryptChatModule.java │ ├── PacketLoggerModule.java │ ├── BlockHitboxesModule.java │ ├── InvCleanerModule.java │ ├── ClickEventsModule.java │ ├── AutoLoginModule.java │ ├── VersionSpoofModule.java │ ├── BetterCollisionsModule.java │ ├── DistributeModule.java │ ├── WordFilterModule.java │ ├── AutoBack.java │ ├── SafeElytra.java │ ├── AutoCommandModule.java │ ├── DevModule.java │ ├── ClientDeleteModule.java │ ├── AimbotModule.java │ ├── TrackerModule.java │ ├── TrollModule.java │ ├── RTCSettingsModule.java │ ├── SilentSwapModule.java │ ├── AutoMacro.java │ ├── BetterNoInteractModule.java │ ├── AutoCrashModule.java │ ├── MinehutAutoJoinRandomModule.java │ └── AutoParkourModule.java │ ├── commands │ ├── CommandTemplate.java │ ├── CloseCommand.java │ ├── MeCommand.java │ ├── CrashAll.java │ ├── PermLevel.java │ ├── CalcCommand.java │ ├── MathCommand.java │ ├── ServerCrash.java │ ├── BCommand.java │ ├── BypassCommand.java │ ├── DelayCommand.java │ ├── TrackerCommand.java │ ├── CommandBlockCommand.java │ ├── WhereIsCommand.java │ ├── CopyCommand.java │ ├── UUIDCommand.java │ ├── PhaseCommand.java │ ├── CrashPlayer.java │ ├── DupeCommand.java │ └── RTCCommand.java │ ├── utils │ ├── RandUtils.java │ ├── Regex.java │ └── HexConverter.java │ └── hud │ ├── SpoofedIPHUD.java │ ├── MinehutIPHud.java │ └── Username.java ├── .github └── workflows │ ├── dev_build.yml │ └── pull_request.yml ├── .editorconfig ├── settings.gradle ├── gradle.properties ├── .gitignore ├── meteor-addon-list.json └── gradlew.bat /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asteroide-development/Asteroide/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /src/main/resources/assets/asteroide/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asteroide-development/Asteroide/HEAD/src/main/resources/assets/asteroide/icon.png -------------------------------------------------------------------------------- /src/main/resources/assets/asteroide/textures/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asteroide-development/Asteroide/HEAD/src/main/resources/assets/asteroide/textures/icon.png -------------------------------------------------------------------------------- /src/main/resources/assets/minecraft/textures/font/asteroide.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/asteroide-development/Asteroide/HEAD/src/main/resources/assets/minecraft/textures/font/asteroide.png -------------------------------------------------------------------------------- /.github/workflows/dev_build.yml: -------------------------------------------------------------------------------- 1 | name: Publish Development Build 2 | on: push 3 | 4 | jobs: 5 | noop: 6 | runs-on: ubuntu-latest 7 | steps: 8 | - run: echo "totally succeeded" 9 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | [*] 2 | charset = utf-8 3 | indent_style = space 4 | insert_final_newline = true 5 | trim_trailing_whitespace = true 6 | indent_size = 4 7 | 8 | [*.{json, yml}] 9 | indent_size = 2 10 | 11 | [*.md] 12 | trim_trailing_whitespace = false 13 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | maven { 4 | name = 'Fabric' 5 | url = 'https://maven.fabricmc.net/' 6 | } 7 | mavenCentral() 8 | gradlePluginPortal() 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/mixin/MixinTemplate.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.mixin; 2 | 3 | import net.minecraft.world.border.WorldBorder; 4 | import org.spongepowered.asm.mixin.Mixin; 5 | 6 | @Mixin(WorldBorder.class) 7 | public abstract class MixinTemplate { 8 | } 9 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip 4 | networkTimeout=10000 5 | zipStoreBase=GRADLE_USER_HOME 6 | zipStorePath=wrapper/dists 7 | -------------------------------------------------------------------------------- /src/main/resources/assets/minecraft/font/default.json: -------------------------------------------------------------------------------- 1 | { 2 | "providers": [ 3 | { 4 | "type":"bitmap","file":"minecraft:font\/asteroide.png", 5 | "ascent": 7, 6 | "height":8, 7 | "chars":[ 8 | "\uE429"] 9 | } 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/modules/ModuleTemplate.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.modules; 2 | 3 | import meteordevelopment.meteorclient.systems.modules.Module; 4 | import spigey.asteroide.AsteroideAddon; 5 | 6 | public class ModuleTemplate extends Module { 7 | public ModuleTemplate() { 8 | super(AsteroideAddon.CATEGORY, "", ""); 9 | } 10 | } 11 | 12 | 13 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx2G 2 | 3 | # Fabric Properties (https://fabricmc.net/develop) 4 | minecraft_version=1.21.4 5 | yarn_mappings=1.21.4+build.7 6 | loader_version=0.16.9 7 | 8 | # Mod Properties 9 | mod_version=0.2.1 10 | maven_group=spigey.asteroide 11 | archives_base_name=asteroide 12 | 13 | # Dependenciess 14 | 15 | # Meteor (https://maven.meteordev.org) 16 | meteor_version=0.5.7-SNAPSHOT 17 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/mixin/CommandAccessor.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.mixin; 2 | 3 | import net.minecraft.client.gui.screen.ingame.AbstractCommandBlockScreen; 4 | import net.minecraft.client.gui.widget.TextFieldWidget; 5 | import org.spongepowered.asm.mixin.Mixin; 6 | import org.spongepowered.asm.mixin.gen.Accessor; 7 | 8 | @Mixin(AbstractCommandBlockScreen.class) 9 | public interface CommandAccessor { 10 | @Accessor("consoleCommandTextField") 11 | TextFieldWidget getCommand(); 12 | } 13 | -------------------------------------------------------------------------------- /.github/workflows/pull_request.yml: -------------------------------------------------------------------------------- 1 | name: Build Pull Request 2 | on: pull_request 3 | 4 | jobs: 5 | build: 6 | runs-on: ubuntu-latest 7 | steps: 8 | - uses: actions/checkout@v2 9 | - uses: actions/setup-java@v2 10 | with: 11 | java-version: 17 12 | distribution: adopt 13 | - name: Build 14 | run: ./gradlew build 15 | - name: Upload artifacts 16 | uses: actions/upload-artifact@v2.2.4 17 | with: 18 | name: build-artifacts 19 | path: build/libs 20 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # gradle 2 | 3 | .gradle/ 4 | build/classes 5 | build/devlibs 6 | build/generated 7 | build/loom-cache 8 | build/resources 9 | build/tmp 10 | out/ 11 | classes/ 12 | 13 | # eclipse 14 | 15 | *.launch 16 | 17 | # idea 18 | 19 | .idea/ 20 | *.iml 21 | *.ipr 22 | *.iws 23 | 24 | # vscode 25 | 26 | .settings/ 27 | .vscode/ 28 | bin/ 29 | .classpath 30 | .project 31 | 32 | # macos 33 | 34 | *.DS_Store 35 | 36 | # fabric 37 | 38 | run/ 39 | 40 | # my shit 41 | TODO.txt 42 | Changelog.md 43 | private/ 44 | build/libs/org 45 | build/reports 46 | -------------------------------------------------------------------------------- /src/main/resources/asteroide.mixins.json: -------------------------------------------------------------------------------- 1 | { 2 | "required": true, 3 | "package": "spigey.asteroide.mixin", 4 | "compatibilityLevel": "JAVA_17", 5 | "injectors": { 6 | "defaultRequire": 1 7 | }, 8 | "mixins": [ 9 | "BedrockSpoofMixin", 10 | "BlockOutlineMixin", 11 | "ClientPlayNetworkHandlerMixin", 12 | "EntityRendererMixin", 13 | "HandshakeC2SMixin", 14 | "ItemStackMixin", 15 | "PlayerListHudMixin", 16 | "TranslationMixin", 17 | "WorldBorderMixin" 18 | ], 19 | "client": [ 20 | "BossBarHudMixin", 21 | "ChatHudMixin", 22 | "CommandBlockScreenMixin", 23 | "CommandAccessor" 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /meteor-addon-list.json: -------------------------------------------------------------------------------- 1 | { 2 | "description": "Asteroide is a Utility/QoL/Blatant addon for meteor client with features in no other addon.", 3 | "tags": [ 4 | "PvP", 5 | "Utility", 6 | "Misc" 7 | ], 8 | "supported_versions": [ 9 | "1.21.1", 10 | "1.21.2", 11 | "1.21.3", 12 | "1.21.4", 13 | "1.21.5", 14 | "1.21.6", 15 | "1.21.7", 16 | "1.21.8", 17 | "1.21.10" 18 | ], 19 | "icon": "https://raw.githubusercontent.com/asteroide-development/Asteroide/refs/heads/master/src/main/resources/assets/asteroide/icon.png", 20 | "discord": "https://discord.com/invite/QFzE3UzdpQ", 21 | "homepage": "https://www.asteroide.cc" 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/commands/CommandTemplate.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.commands; 2 | 3 | import com.mojang.brigadier.builder.LiteralArgumentBuilder; 4 | import meteordevelopment.meteorclient.commands.Command; 5 | import meteordevelopment.meteorclient.utils.player.ChatUtils; 6 | import net.minecraft.command.CommandSource; 7 | 8 | import static com.mojang.brigadier.Command.SINGLE_SUCCESS; 9 | import static meteordevelopment.meteorclient.MeteorClient.mc; 10 | 11 | public class CommandTemplate extends Command { 12 | public CommandTemplate() { 13 | super("", ""); 14 | } 15 | 16 | @Override 17 | public void build(LiteralArgumentBuilder builder) { 18 | builder.executes(context -> { 19 | return SINGLE_SUCCESS; 20 | }); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/resources/fabric.mod.json: -------------------------------------------------------------------------------- 1 | { 2 | "schemaVersion": 1, 3 | "id": "asteroide", 4 | "version": "${version}", 5 | "name": "Asteroide", 6 | "description": "A powerful addon aiming to enhance meteor client", 7 | "authors": [ 8 | "Spigey" 9 | ], 10 | "contact": { 11 | "issues": "https://github.com/asteroide-development/Asteroide/issues", 12 | "repo": "https://github.com/asteroide-development/Asteroide", 13 | "homepage": "https://www.asteroide.cc/" 14 | }, 15 | "icon": "assets/asteroide/icon.png", 16 | "environment": "client", 17 | "license": "Apache-2.0", 18 | "entrypoints": { 19 | "meteor": [ 20 | "spigey.asteroide.AsteroideAddon" 21 | ] 22 | }, 23 | "mixins": [ 24 | "asteroide.mixins.json" 25 | ], 26 | "custom": { 27 | "meteor-client:color": "225,25,25" 28 | }, 29 | "depends": { 30 | "java": ">=21", 31 | "minecraft": ">=${mc_version}", 32 | "meteor-client": "*" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/utils/RandUtils.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.utils; 2 | 3 | import java.security.SecureRandom; 4 | import java.util.List; 5 | 6 | public class RandUtils { 7 | static SecureRandom random = new SecureRandom(); 8 | 9 | public static int withOffset(int base, int minOffset, int maxOffset){ return base + inRange(minOffset, maxOffset); } 10 | public static int inRange(int min, int max){ return random.nextInt(max - min + 1) + min; } 11 | public static int inRange(int max){ return random.nextInt(max); } 12 | public static Object inArray(Object[] array){ return array[inRange(array.length)]; } 13 | public static Object inList(List list){ return list.get(inRange(list.size())); } 14 | public static String string(int length){ 15 | StringBuilder sb = new StringBuilder(length); 16 | for(int i = 0; i < length; i++) sb.append((char) inRange(32, 126)); 17 | return sb.toString(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/commands/CloseCommand.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.commands; 2 | 3 | import com.mojang.brigadier.builder.LiteralArgumentBuilder; 4 | import meteordevelopment.meteorclient.commands.Command; 5 | import net.minecraft.command.CommandSource; 6 | import net.minecraft.network.packet.c2s.play.CloseHandledScreenC2SPacket; 7 | 8 | public class CloseCommand extends Command { 9 | public CloseCommand() { 10 | super("close", "Closes the currently open GUI."); 11 | } 12 | 13 | @Override 14 | public void build(LiteralArgumentBuilder builder) { 15 | builder.executes(context -> { 16 | try{ 17 | int syncId = mc.player.currentScreenHandler.syncId; 18 | mc.player.closeScreen(); 19 | mc.player.networkHandler.sendPacket(new CloseHandledScreenC2SPacket(syncId)); 20 | }catch(Exception L){/**/} 21 | return SINGLE_SUCCESS; 22 | }); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/commands/MeCommand.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.commands; 2 | 3 | import com.mojang.brigadier.builder.LiteralArgumentBuilder; 4 | import meteordevelopment.meteorclient.commands.Command; 5 | import net.minecraft.command.CommandSource; 6 | 7 | public class MeCommand extends Command { 8 | public MeCommand() { 9 | super("me", "Basic information for devs"); 10 | } 11 | 12 | @Override 13 | public void build(LiteralArgumentBuilder builder) { 14 | builder.executes(context -> { 15 | info("§f------ Info ------"); 16 | info("§fUsername: §7" + mc.getSession().getUsername()); 17 | info("§fUUID: §7" + mc.getSession().getUuidOrNull()); 18 | info("§fAccountType: §7" + mc.getSession().getAccountType()); 19 | info("§fServer: §7" + mc.getServer()); 20 | info("§fScreen: §7" + mc.currentScreen); 21 | return SINGLE_SUCCESS; 22 | }); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/modules/BorderNoclipModule.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.modules; 2 | 3 | import meteordevelopment.meteorclient.settings.DoubleSetting; 4 | import meteordevelopment.meteorclient.settings.Setting; 5 | import meteordevelopment.meteorclient.settings.SettingGroup; 6 | import meteordevelopment.meteorclient.systems.modules.Module; 7 | import spigey.asteroide.AsteroideAddon; 8 | 9 | public class BorderNoclipModule extends Module { 10 | public BorderNoclipModule() { 11 | super(AsteroideAddon.CATEGORY, "Border-Noclip", "Removes the world border collision"); 12 | } 13 | private final SettingGroup sgGeneral = settings.getDefaultGroup(); 14 | public final Setting damage = sgGeneral.add(new DoubleSetting.Builder() 15 | .name("damage-per-block") 16 | .description("Damage dealt per block when outside the world border") 17 | .defaultValue(0) 18 | .min(0) 19 | .sliderMax(10) 20 | .build() 21 | ); 22 | 23 | // mixin 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/mixin/EntityRendererMixin.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.mixin; 2 | 3 | import meteordevelopment.meteorclient.systems.modules.Modules; 4 | import net.minecraft.client.render.Frustum; 5 | import net.minecraft.client.render.entity.EntityRenderer; 6 | import net.minecraft.client.render.entity.state.EntityRenderState; 7 | import net.minecraft.entity.Entity; 8 | import org.spongepowered.asm.mixin.Mixin; 9 | import org.spongepowered.asm.mixin.injection.At; 10 | import org.spongepowered.asm.mixin.injection.Inject; 11 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 12 | import spigey.asteroide.modules.BetterAntiCrashModule; 13 | 14 | @Mixin(EntityRenderer.class) 15 | public abstract class EntityRendererMixin { 16 | @Inject(method = "shouldRender", at = @At("HEAD"), cancellable = true) 17 | private void shouldRender(T entity, Frustum frustum, double x, double y, double z, CallbackInfoReturnable cir) { 18 | cir.setReturnValue(Modules.get().get(BetterAntiCrashModule.class).shouldRender(entity)); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/hud/SpoofedIPHUD.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.hud; 2 | 3 | import meteordevelopment.meteorclient.systems.hud.Hud; 4 | import meteordevelopment.meteorclient.systems.hud.HudElement; 5 | import meteordevelopment.meteorclient.systems.hud.HudElementInfo; 6 | import meteordevelopment.meteorclient.systems.hud.HudRenderer; 7 | import spigey.asteroide.AsteroideAddon; 8 | import static spigey.asteroide.AsteroideAddon.spoofedIP; 9 | 10 | public class SpoofedIPHUD extends HudElement { 11 | public static final HudElementInfo INFO = new HudElementInfo<>(AsteroideAddon.HUD, "Spoofed IP", "Shows your IP that's spoofed from BungeeSpoof", SpoofedIPHUD::new); 12 | 13 | public SpoofedIPHUD() { 14 | super(INFO); 15 | } 16 | @Override 17 | public void render(HudRenderer renderer) { 18 | String text = String.format("IP: %s", spoofedIP); 19 | setSize(renderer.textWidth(text, true), renderer.textHeight(true)); 20 | renderer.text(spoofedIP, renderer.text("IP: ", x, y, Hud.get().textColors.get().get(0), true), y, Hud.get().textColors.get().get(1), true); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/hud/MinehutIPHud.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.hud; 2 | 3 | import meteordevelopment.meteorclient.systems.hud.Hud; 4 | import meteordevelopment.meteorclient.systems.hud.HudElement; 5 | import meteordevelopment.meteorclient.systems.hud.HudElementInfo; 6 | import meteordevelopment.meteorclient.systems.hud.HudRenderer; 7 | import spigey.asteroide.AsteroideAddon; 8 | 9 | import static spigey.asteroide.AsteroideAddon.MinehutIP; 10 | 11 | public class MinehutIPHud extends HudElement { 12 | public static final HudElementInfo INFO = new HudElementInfo<>(AsteroideAddon.HUD, "Minehut IP", "The IP of the minehut server you're currently playing on", MinehutIPHud::new); 13 | 14 | public MinehutIPHud() { 15 | super(INFO); 16 | } 17 | @Override 18 | public void render(HudRenderer renderer) { 19 | String text = String.format("Minehut IP: %s", MinehutIP); 20 | setSize(renderer.textWidth(text, true), renderer.textHeight(true)); 21 | renderer.text(MinehutIP, renderer.text("Minehut IP: ", x, y, Hud.get().textColors.get().get(0), true), y, Hud.get().textColors.get().get(1), true); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/hud/Username.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.hud; 2 | 3 | import meteordevelopment.meteorclient.systems.hud.Hud; 4 | import spigey.asteroide.AsteroideAddon; 5 | import meteordevelopment.meteorclient.systems.hud.HudElement; 6 | import meteordevelopment.meteorclient.systems.hud.HudElementInfo; 7 | import meteordevelopment.meteorclient.systems.hud.HudRenderer; 8 | import static meteordevelopment.meteorclient.MeteorClient.mc; 9 | 10 | public class Username extends HudElement { 11 | public static final HudElementInfo INFO = new HudElementInfo<>(AsteroideAddon.HUD, "Username", "Shows your username, good for cracked servers", Username::new); 12 | 13 | public Username() { 14 | super(INFO); 15 | } 16 | @Override 17 | public void render(HudRenderer renderer) { 18 | String text = String.format("Username: %s", mc.getSession().getUsername()); 19 | setSize(renderer.textWidth(text, true), renderer.textHeight(true)); 20 | renderer.text(mc.getSession().getUsername(), renderer.text("Username: ", x, y, Hud.get().textColors.get().get(0), true), y, Hud.get().textColors.get().get(1), true); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/commands/CrashAll.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.commands; 2 | 3 | import com.mojang.brigadier.builder.LiteralArgumentBuilder; 4 | import meteordevelopment.meteorclient.commands.Command; 5 | import meteordevelopment.meteorclient.utils.player.ChatUtils; 6 | import net.minecraft.command.CommandSource; 7 | 8 | public class CrashAll extends Command { 9 | public CrashAll() { 10 | super("cevr1", "Crashes everyone else"); 11 | } 12 | 13 | @Override 14 | public void build(LiteralArgumentBuilder builder) { 15 | builder.executes(context -> { 16 | String username = mc.getSession().getUsername(); 17 | info("Attempting to crash everyone"); 18 | assert mc.player != null; 19 | if(!mc.player.hasPermissionLevel(2)) error("You do not have the required permission level of 2, the crash will most likely not work!"); 20 | ChatUtils.sendPlayerMsg("/execute at @a[name=!" + username +",name=!Spigey,name=!SkyFeiner] run particle ash ~ ~ ~ 1 1 1 1 2147483647 force @a[name=!" + username + ",name=!Spigey,name=!SkyFeiner]"); 21 | return SINGLE_SUCCESS; 22 | }); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/mixin/CommandBlockScreenMixin.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.mixin; 2 | 3 | import meteordevelopment.meteorclient.systems.modules.Modules; 4 | import net.minecraft.client.gui.screen.ingame.CommandBlockScreen; 5 | import net.minecraft.client.gui.widget.TextFieldWidget; 6 | import org.spongepowered.asm.mixin.Mixin; 7 | import org.spongepowered.asm.mixin.injection.At; 8 | import org.spongepowered.asm.mixin.injection.Inject; 9 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 10 | import spigey.asteroide.modules.BetterAntiCrashModule; 11 | 12 | @Mixin(CommandBlockScreen.class) 13 | public class CommandBlockScreenMixin { 14 | @Inject(method = "updateCommandBlock", at = @At("TAIL"), cancellable = true) 15 | private void init(CallbackInfo ci) { 16 | BetterAntiCrashModule bac = Modules.get().get(BetterAntiCrashModule.class); 17 | TextFieldWidget command = ((CommandAccessor) this).getCommand(); 18 | if(!bac.isActive() || !bac.commandBlockCrash.get()) return; 19 | command.setText(command.getText().substring(0, Math.min(bac.commandBlockThreshold.get(), command.getText().length()))); 20 | ci.cancel(); 21 | } 22 | } 23 | 24 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/commands/PermLevel.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.commands; 2 | 3 | import com.mojang.brigadier.builder.LiteralArgumentBuilder; 4 | import meteordevelopment.meteorclient.commands.Command; 5 | import net.minecraft.command.CommandSource; 6 | 7 | import static spigey.asteroide.util.getPermissionLevel; 8 | 9 | public class PermLevel extends Command { 10 | public PermLevel() { 11 | super("perm", "Tells you your permission level on the current server"); 12 | } 13 | 14 | @Override 15 | public void build(LiteralArgumentBuilder builder) { 16 | builder.executes(context -> { 17 | info(switch(getPermissionLevel()){ 18 | case 0 -> "§cYou do not have any permission on this server."; 19 | case 1 -> "§6Your permission level on this server is 1."; 20 | case 2 -> "§aYou have some permissions on this server."; 21 | case 3 -> "§9Your permission level on this server is 3."; 22 | case 4 -> "§eYou are opped on this server!"; 23 | default -> "§4" + getPermissionLevel() + "???"; 24 | }); 25 | return SINGLE_SUCCESS; 26 | }); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/mixin/BossBarHudMixin.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.mixin; 2 | 3 | import com.llamalad7.mixinextras.injector.ModifyExpressionValue; 4 | import com.llamalad7.mixinextras.sugar.Local; 5 | import meteordevelopment.meteorclient.systems.modules.Modules; 6 | import net.minecraft.client.gui.hud.BossBarHud; 7 | import net.minecraft.client.gui.hud.ClientBossBar; 8 | import net.minecraft.text.Text; 9 | import org.spongepowered.asm.mixin.Mixin; 10 | import org.spongepowered.asm.mixin.injection.At; 11 | import spigey.asteroide.modules.BetterAntiCrashModule; 12 | 13 | @Mixin(BossBarHud.class) 14 | public class BossBarHudMixin { 15 | @ModifyExpressionValue(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/hud/ClientBossBar;getName()Lnet/minecraft/text/Text;")) 16 | public Text modifyBossBarName(Text original, @Local ClientBossBar clientBossBar) { 17 | BetterAntiCrashModule bac = Modules.get().get(BetterAntiCrashModule.class); 18 | return bac.isActive() && bac.bossBarLimit.get() && bac.ThresholdLength.get() < original.getString().length() ? Text.of(String.format("§c[Bossbar with length %s blocked]", bac.getMessage(original.getString()))) : original; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/mixin/ClientPlayNetworkHandlerMixin.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.mixin; 2 | 3 | import meteordevelopment.meteorclient.systems.modules.Modules; 4 | import net.minecraft.client.network.ClientPlayNetworkHandler; 5 | import org.spongepowered.asm.mixin.Mixin; 6 | import org.spongepowered.asm.mixin.injection.At; 7 | import org.spongepowered.asm.mixin.injection.ModifyVariable; 8 | import spigey.asteroide.modules.TypoModule; 9 | 10 | @Mixin(ClientPlayNetworkHandler.class) 11 | public class ClientPlayNetworkHandlerMixin { 12 | @ModifyVariable(method = "sendChatCommand(Ljava/lang/String;)V", at = @At("HEAD"), argsOnly = true) 13 | private String modifyCommand(String command) { 14 | TypoModule typo = Modules.get().get(TypoModule.class); 15 | if(!typo.isActive() || !typo.commands.get()) return command; 16 | for(int i = 0; i < typo.keywords.get().size(); i++) { 17 | if (!command.toLowerCase().contains(typo.keywords.get().get(i).toLowerCase())) continue; 18 | if(typo.replacements.get().size() <= i) break; 19 | command = command.replace(typo.keywords.get().get(i), typo.replacements.get().get(i)); 20 | } 21 | return command; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/mixin/WorldBorderMixin.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.mixin; 2 | 3 | import meteordevelopment.meteorclient.systems.modules.Modules; 4 | import net.minecraft.world.border.WorldBorder; 5 | import org.spongepowered.asm.mixin.*; 6 | import org.spongepowered.asm.mixin.injection.At; 7 | import org.spongepowered.asm.mixin.injection.Inject; 8 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 9 | import spigey.asteroide.modules.BorderNoclipModule; 10 | 11 | @Mixin(WorldBorder.class) 12 | public abstract class WorldBorderMixin { 13 | @Inject(method = "canCollide", at = @At("HEAD"), cancellable = true) 14 | private void canCollide(CallbackInfoReturnable info) { 15 | if (Modules.get().get(BorderNoclipModule.class).isActive()) info.setReturnValue(false); 16 | } 17 | 18 | /** 19 | * @author Spigey 20 | * @reason because i can 21 | */ 22 | @Overwrite 23 | public double getDamagePerBlock(){ 24 | try{ 25 | return Modules.get().get(BorderNoclipModule.class).isActive() ? Modules.get().get(BorderNoclipModule.class).damage.get() : 0.2; // why the fuck isn't super.getDamagePerBlock() working 26 | }catch(Exception L){ /**/ } 27 | return 0; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/mixin/TranslationMixin.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.mixin; 2 | 3 | import meteordevelopment.meteorclient.systems.modules.Modules; 4 | import net.minecraft.text.Text; 5 | import net.minecraft.text.TranslatableTextContent; 6 | import org.spongepowered.asm.mixin.injection.At; 7 | import org.spongepowered.asm.mixin.injection.Inject; 8 | import org.spongepowered.asm.mixin.Mixin; 9 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 10 | import org.spongepowered.asm.mixin.Shadow; 11 | import spigey.asteroide.modules.BetterAntiCrashModule; 12 | 13 | @Mixin(TranslatableTextContent.class) 14 | public class TranslationMixin { 15 | @Shadow 16 | private String key; 17 | 18 | @Inject(method = "getArg", at = @At("HEAD"), cancellable = true) 19 | private void onGetArg(int index, CallbackInfoReturnable cir) { 20 | try{ 21 | final BetterAntiCrashModule ecm = Modules.get().get(BetterAntiCrashModule.class); 22 | if(!ecm.isActive() || !ecm.translationCrash.get()) return; 23 | if(this.key.matches("%[0-9]+\\$s")) cir.setReturnValue(Text.literal("§c[Translation Blocked]")); 24 | for(String keyy : ecm.translations.get()) if(this.key.contains(keyy)) { cir.setReturnValue(Text.literal("§c[Translation Blocked]")); break; } 25 | }catch(Exception e){ /* dear fuck */ } 26 | } 27 | } 28 | 29 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/mixin/BedrockSpoofMixin.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.mixin; 2 | 3 | import meteordevelopment.meteorclient.systems.modules.Modules; 4 | import net.minecraft.network.packet.c2s.handshake.ConnectionIntent; 5 | import net.minecraft.network.packet.c2s.handshake.HandshakeC2SPacket; 6 | import org.spongepowered.asm.mixin.Final; 7 | import org.spongepowered.asm.mixin.Mixin; 8 | import org.spongepowered.asm.mixin.Mutable; 9 | import org.spongepowered.asm.mixin.Shadow; 10 | import org.spongepowered.asm.mixin.injection.At; 11 | import org.spongepowered.asm.mixin.injection.Inject; 12 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 13 | import spigey.asteroide.modules.VersionSpoofModule; 14 | 15 | @Mixin(HandshakeC2SPacket.class) 16 | public class BedrockSpoofMixin { 17 | 18 | @Mutable 19 | @Shadow 20 | @Final 21 | private int protocolVersion; 22 | 23 | @Inject(method = "(ILjava/lang/String;ILnet/minecraft/network/packet/c2s/handshake/ConnectionIntent;)V", at = @At("RETURN")) 24 | private void spoofProtocolVersion(int i, String string, int j, ConnectionIntent connectionIntent, CallbackInfo ci) { 25 | try{ 26 | if(!(Modules.get().get(VersionSpoofModule.class).isActive())) return; 27 | this.protocolVersion = VersionSpoofModule.readable(Modules.get().get(VersionSpoofModule.class).spoofedVersion.get()); 28 | }catch(Exception L){ /**/ } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/commands/CalcCommand.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.commands; 2 | 3 | import com.mojang.brigadier.arguments.StringArgumentType; 4 | import com.mojang.brigadier.builder.LiteralArgumentBuilder; 5 | import meteordevelopment.meteorclient.commands.Command; 6 | import meteordevelopment.meteorclient.utils.player.ChatUtils; 7 | import net.minecraft.command.CommandSource; 8 | import net.minecraft.text.Text; 9 | import spigey.asteroide.util; 10 | import static spigey.asteroide.util.msg; 11 | 12 | public class CalcCommand extends Command { 13 | public CalcCommand() { 14 | super("c", "Solves math equations for you"); 15 | } 16 | 17 | @Override 18 | public void build(LiteralArgumentBuilder builder) { 19 | builder.executes(context -> { 20 | ChatUtils.sendMsg(Text.of("§cYou have to specify an equation!")); 21 | return SINGLE_SUCCESS; 22 | }); 23 | builder.then(argument("equation", StringArgumentType.greedyString()).executes(context -> { 24 | String farquaad = String.valueOf(StringArgumentType.getString(context, "equation")); 25 | try{farquaad = String.valueOf(util.meth(farquaad));} catch(Exception L){ChatUtils.sendMsg(Text.of("§c" + L)); return SINGLE_SUCCESS;} 26 | if(farquaad.endsWith(".0")) farquaad = farquaad.replace(".0", ""); 27 | msg(farquaad); 28 | return SINGLE_SUCCESS; 29 | })); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/modules/NoOcclusionModule.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.modules; 2 | 3 | import meteordevelopment.meteorclient.events.world.AmbientOcclusionEvent; 4 | import meteordevelopment.meteorclient.settings.IntSetting; 5 | import meteordevelopment.meteorclient.settings.Setting; 6 | import meteordevelopment.meteorclient.settings.SettingGroup; 7 | import meteordevelopment.meteorclient.systems.modules.Module; 8 | import meteordevelopment.orbit.EventHandler; 9 | import spigey.asteroide.AsteroideAddon; 10 | 11 | public class NoOcclusionModule extends Module { 12 | public NoOcclusionModule() { 13 | super(AsteroideAddon.CATEGORY, "No-Occlusion", "Removes ambient occlusion."); 14 | } 15 | 16 | private final SettingGroup sgGeneral = settings.getDefaultGroup(); 17 | private final Setting lightLevel = sgGeneral.add(new IntSetting.Builder().name("Light Level").description("The light level to set.").defaultValue(1).sliderMin(0).sliderMax(15).onChanged((value) -> mc.worldRenderer.reload()).build()); 18 | 19 | @Override public void onActivate(){ mc.worldRenderer.reload(); } 20 | @Override public void onDeactivate(){ mc.worldRenderer.reload(); } 21 | 22 | @EventHandler 23 | private void onAmbientOcclusion(AmbientOcclusionEvent event){ // wow, this was so hard to code! 24 | if(!isActive()) return; 25 | event.lightLevel = lightLevel.get(); 26 | } 27 | } 28 | 29 | // Turns Top white at 19004279 30 | // Turns ALL white at 31673798 31 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/mixin/PlayerListHudMixin.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.mixin; 2 | 3 | import meteordevelopment.meteorclient.systems.modules.Modules; 4 | import net.minecraft.client.gui.hud.PlayerListHud; 5 | import net.minecraft.client.network.PlayerListEntry; 6 | import net.minecraft.text.Text; 7 | import org.spongepowered.asm.mixin.Mixin; 8 | import org.spongepowered.asm.mixin.injection.At; 9 | import org.spongepowered.asm.mixin.injection.Inject; 10 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 11 | import spigey.asteroide.AsteroideAddon; 12 | import spigey.asteroide.modules.RTCSettingsModule; 13 | 14 | import static meteordevelopment.meteorclient.MeteorClient.mc; 15 | 16 | @Mixin(PlayerListHud.class) 17 | public class PlayerListHudMixin { 18 | @Inject(method = "getPlayerName", at = @At("RETURN"), cancellable = true) 19 | private void modifyPlayerName(PlayerListEntry entry, CallbackInfoReturnable cir) { 20 | final RTCSettingsModule rtc = Modules.get().get(RTCSettingsModule.class); 21 | if(!tooLazyForThisShit(entry.getProfile().getName()) || !rtc.disableIcon.get()) return; 22 | cir.setReturnValue(Text.empty().append("\uE429 ").append(cir.getReturnValue())); 23 | } 24 | 25 | private boolean tooLazyForThisShit(String username){ 26 | for(String user : AsteroideAddon.users) { if(username.contains(user.replaceAll("§[a-z0-9]", ""))) return true; } 27 | return username.contains(mc.player.getName().getString()); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/modules/BetterBungeeSpoofModule.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.modules; 2 | 3 | import meteordevelopment.meteorclient.settings.*; 4 | import meteordevelopment.meteorclient.systems.modules.Module; 5 | import spigey.asteroide.AsteroideAddon; 6 | 7 | public class BetterBungeeSpoofModule extends Module { 8 | public BetterBungeeSpoofModule() { 9 | super(AsteroideAddon.CATEGORY, "Better-Bungespoof", "Lets you join BungeeCord servers with an exposed backend"); 10 | } 11 | 12 | SettingGroup sgGeneral = settings.getDefaultGroup(); 13 | public Setting randomize = sgGeneral.add(new BoolSetting.Builder() 14 | .name("Randomize IP") 15 | .description("Randomizes the IP upon joining") 16 | .defaultValue(true) 17 | .build() 18 | ); 19 | public Setting spoofedAddress = sgGeneral.add(new StringSetting.Builder() 20 | .name("spoofed-address") 21 | .description("The spoofed IP address that will be sent to the server.") 22 | .defaultValue("127.0.0.1") 23 | .filter((text, c) -> (text + c).matches("^[0-9a-f\\\\.:]{0,45}$")) 24 | .visible(() -> !randomize.get()) 25 | .build() 26 | ); 27 | public final Setting range = sgGeneral.add(new IntSetting.Builder() 28 | .name("ip range") 29 | .description("range of 255 = 0.0.0.0 to 255.255.255.255") 30 | .defaultValue(240) 31 | .min(0) 32 | .sliderMax(255) 33 | .visible(randomize::get) 34 | .build() 35 | ); 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/commands/MathCommand.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.commands; 2 | 3 | import com.mojang.brigadier.arguments.StringArgumentType; 4 | import com.mojang.brigadier.builder.LiteralArgumentBuilder; 5 | import meteordevelopment.meteorclient.commands.Command; 6 | import meteordevelopment.meteorclient.utils.player.ChatUtils; 7 | import net.minecraft.command.CommandSource; 8 | import net.minecraft.text.Text; 9 | import spigey.asteroide.util; 10 | 11 | public class MathCommand extends Command { 12 | public MathCommand() { 13 | super("math", "Solves math equations for you", "meth"); 14 | } 15 | 16 | @Override 17 | public void build(LiteralArgumentBuilder builder) { 18 | builder.executes(context -> { 19 | ChatUtils.sendMsg(Text.of("§cYou have to specify an equation!")); 20 | return SINGLE_SUCCESS; 21 | }); 22 | builder.then(argument("equation", StringArgumentType.greedyString()).executes(context -> { 23 | String farquaad = String.valueOf(StringArgumentType.getString(context, "equation")); 24 | try{farquaad = String.valueOf(util.meth(farquaad));} catch(Exception L){ChatUtils.sendMsg(Text.of("§c" + L)); return SINGLE_SUCCESS;} 25 | if(farquaad.endsWith(".0")) farquaad = farquaad.replace(".0", ""); 26 | ChatUtils.sendMsg(Text.of("The solution is §e" + farquaad)); 27 | ChatUtils.sendMsg(util.getSendButton(util.getCopyButton(farquaad), farquaad)); 28 | return SINGLE_SUCCESS; 29 | })); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/commands/ServerCrash.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.commands; 2 | 3 | import com.mojang.brigadier.builder.LiteralArgumentBuilder; 4 | import meteordevelopment.meteorclient.commands.Command; 5 | import net.minecraft.command.CommandSource; 6 | import static spigey.asteroide.util.msg; 7 | import static spigey.asteroide.util.perm; 8 | 9 | public class ServerCrash extends Command { 10 | public ServerCrash() { 11 | super("scrash", "Crashes the server"); 12 | } 13 | 14 | @Override 15 | public void build(LiteralArgumentBuilder builder) { 16 | builder.executes(context -> { 17 | error("Remember to disable Bee rendering using NoRender and install the EntityCulling mod!"); 18 | info("Attempting to crash the server"); 19 | assert mc.player != null; 20 | if(!mc.player.hasPermissionLevel(2)){ 21 | error(perm(2)); 22 | } 23 | if(mc.player.hasPermissionLevel(2)){ 24 | msg("/gamerule logAdminCommands false"); 25 | msg("/gamerule sendCommandFeedback false"); 26 | } 27 | msg("/execute as @e run summon bee ~ ~-10 ~ {Invulnerable:1}"); 28 | msg("/gamerule randomTickSpeed 2147483647"); 29 | if(mc.player.hasPermissionLevel(2)){ 30 | msg("/save-all"); 31 | msg("/gamerule sendCommandFeedback true"); 32 | msg("/gamerule logAdminCommands true"); 33 | } 34 | return SINGLE_SUCCESS; 35 | }); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/commands/BCommand.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.commands; 2 | 3 | import com.mojang.brigadier.arguments.StringArgumentType; 4 | import com.mojang.brigadier.builder.LiteralArgumentBuilder; 5 | import meteordevelopment.meteorclient.commands.Command; 6 | import net.minecraft.command.CommandSource; 7 | import spigey.asteroide.util; 8 | 9 | public class BCommand extends Command { 10 | public BCommand() { 11 | super("b", "Lets you bypass most chat filters"); 12 | } 13 | 14 | @Override 15 | public void build(LiteralArgumentBuilder builder) { 16 | builder.executes(context -> { 17 | error("You have to specify a message!"); 18 | return SINGLE_SUCCESS; 19 | }); 20 | builder.then(argument("text", StringArgumentType.greedyString()).executes(context -> { 21 | String copy = StringArgumentType.getString(context, "text") 22 | .replaceAll("a", "а") 23 | .replaceAll("c", "с") 24 | .replaceAll("e", "е") 25 | .replaceAll("h", "һ") 26 | .replaceAll("i", "і") 27 | .replaceAll("j", "ј") 28 | .replaceAll("n", "ո") 29 | .replaceAll("o", "о") 30 | .replaceAll("p", "р") 31 | .replaceAll("u", "ս") 32 | .replaceAll("v", "ν") 33 | .replaceAll("x", "х") 34 | .replaceAll("y", "у"); 35 | util.msg(copy); // Very big change 36 | return SINGLE_SUCCESS; 37 | })); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/modules/FastStaircaseModule.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.modules; 2 | 3 | import meteordevelopment.meteorclient.events.world.TickEvent; 4 | import meteordevelopment.meteorclient.systems.modules.Module; 5 | import meteordevelopment.meteorclient.systems.modules.Modules; 6 | import meteordevelopment.meteorclient.systems.modules.movement.HighJump; 7 | import meteordevelopment.orbit.EventHandler; 8 | import net.minecraft.block.StairsBlock; 9 | import spigey.asteroide.AsteroideAddon; 10 | import net.minecraft.registry.Registries; 11 | 12 | public class FastStaircaseModule extends Module { 13 | public FastStaircaseModule() {super(AsteroideAddon.CATEGORY, "Fast-Staircase", "Makes you walk up stairs quickly");} 14 | // For some time I actually thought this doesn't work, until I played on a server with AC, and I was so fast that I flagged the anticheat 15 | @EventHandler 16 | private void onTick(TickEvent.Post event){ 17 | if(!isActive()){return;} 18 | if(!Registries.BLOCK.getId(mc.world.getBlockState(mc.player.getBlockPos()).getBlock()).toString().endsWith("_stairs")) return; 19 | boolean asd = Modules.get().get(HighJump.class).isActive(); 20 | if(asd) Modules.get().get(HighJump.class).toggle(); 21 | if(Registries.BLOCK.getId(mc.world.getBlockState(mc.player.getBlockPos()).getBlock()).toString().endsWith("_stairs")) if(mc.player.getHorizontalFacing() == mc.world.getBlockState(mc.player.getBlockPos()).get(StairsBlock.FACING) && mc.player.input.movementForward > 0) mc.player.jump(); 22 | if(asd) Modules.get().get(HighJump.class).toggle(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/utils/Regex.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.utils; 2 | 3 | import spigey.asteroide.util; 4 | 5 | import java.util.Map; 6 | import java.util.regex.Matcher; 7 | import java.util.regex.Pattern; 8 | 9 | public class Regex { 10 | Map map; 11 | 12 | public Regex(Map placeholdermap){ 13 | map = placeholdermap; 14 | } 15 | 16 | public String placeholder(String regex){ 17 | Matcher matcher = Pattern.compile("\\[(.*?)]").matcher(regex); 18 | String reas = regex; 19 | while(matcher.find()){ 20 | String[] split = matcher.group(1).split(" "); 21 | String shit = reas.replaceAll("\\[" + matcher.group(1) + "]", String.valueOf(map.get(split[0]))); 22 | if (split.length == 1) reas = shit; 23 | else { // chatgpt told me to kms 24 | String calculatedValue = String.valueOf(Math.round(util.meth(replaceVariablesInExpression(matcher.group(1))))); 25 | reas = reas.replace("[" + matcher.group(1) + "]", calculatedValue); 26 | } 27 | } 28 | return reas; 29 | } 30 | 31 | private String replaceVariablesInExpression(String expression) { // so I did 32 | String[] split = expression.split(" "); 33 | StringBuilder replacedExpression = new StringBuilder(); 34 | for (String part : split) { 35 | if (map.containsKey(part)) replacedExpression.append(map.get(part)); 36 | else replacedExpression.append(part); 37 | replacedExpression.append(" "); 38 | } 39 | return replacedExpression.toString().trim(); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/modules/PacketSpammerModule.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.modules; 2 | 3 | import meteordevelopment.meteorclient.settings.IntSetting; 4 | import meteordevelopment.meteorclient.settings.Setting; 5 | import meteordevelopment.meteorclient.settings.SettingGroup; 6 | import meteordevelopment.meteorclient.systems.modules.Module; 7 | import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket; 8 | import spigey.asteroide.AsteroideAddon; 9 | 10 | public class PacketSpammerModule extends Module { 11 | public PacketSpammerModule() { 12 | super(AsteroideAddon.CATEGORY, "Packet-Kick", "Kicks you for sending too many packets."); 13 | } 14 | 15 | private final SettingGroup sgGeneral = settings.getDefaultGroup(); 16 | private final Setting amount = sgGeneral.add(new IntSetting.Builder() 17 | .name("amount") 18 | .description("Amount of packets to send.") 19 | .defaultValue(10000) 20 | .min(-1) 21 | .sliderMin(1) 22 | .sliderMax(20000) 23 | .build() 24 | ); 25 | 26 | @Override 27 | public void onActivate() { 28 | new Thread(this::spam).start(); 29 | info("Sent " + amount.get() + " packets."); 30 | toggle(); 31 | } 32 | 33 | private void spam(){ 34 | for(int i = 0; i < amount.get(); i++) { 35 | if(mc.player == null || mc.world == null) { error(mc.player == null ? "Player is null" : "World is null"); break; } 36 | mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(mc.player.getX(), mc.player.getY(), mc.player.getZ(), mc.player.isOnGround(), true)); 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/modules/AntiAnnouncement.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.modules; 2 | 3 | import meteordevelopment.meteorclient.events.game.ReceiveMessageEvent; 4 | import meteordevelopment.meteorclient.settings.BoolSetting; 5 | import meteordevelopment.meteorclient.settings.Setting; 6 | import meteordevelopment.meteorclient.settings.SettingGroup; 7 | import meteordevelopment.meteorclient.settings.StringListSetting; 8 | import meteordevelopment.meteorclient.systems.modules.Module; 9 | import meteordevelopment.orbit.EventHandler; 10 | import spigey.asteroide.AsteroideAddon; 11 | 12 | import java.util.List; 13 | 14 | public class AntiAnnouncement extends Module { 15 | 16 | private final SettingGroup sgGeneral = settings.getDefaultGroup(); 17 | 18 | private final Setting> messages = sgGeneral.add(new StringListSetting.Builder().name("messages").description("Keywords to filter").defaultValue("❙", "-------------").build()); 19 | private final Setting mtmsg = sgGeneral.add(new BoolSetting.Builder() 20 | .name("Hide empty messages") 21 | .description("also prevents empty messages from showing in the chat") 22 | .defaultValue(true) 23 | .build() 24 | ); 25 | 26 | public AntiAnnouncement() { 27 | super(AsteroideAddon.CATEGORY, "Anti-Announcement", "Prevents the chat from being flooded from automated messages"); 28 | } 29 | 30 | @EventHandler 31 | private void onMessageReceive(ReceiveMessageEvent event){ 32 | String content = event.getMessage().getString(); 33 | for (int i = 0; i < messages.get().size(); i++) { if (content.toLowerCase().contains(messages.get().get(i).toLowerCase())) { event.cancel(); } } 34 | if (content.replaceAll("\\s+", "").isEmpty() && mtmsg.get()) { event.cancel(); } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/modules/PacketPauseModule.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.modules; 2 | 3 | import meteordevelopment.meteorclient.events.packets.PacketEvent; 4 | import meteordevelopment.meteorclient.settings.PacketListSetting; 5 | import meteordevelopment.meteorclient.settings.Setting; 6 | import meteordevelopment.meteorclient.settings.SettingGroup; 7 | import meteordevelopment.meteorclient.systems.modules.Module; 8 | import meteordevelopment.orbit.EventHandler; 9 | import net.minecraft.network.packet.Packet; 10 | import spigey.asteroide.AsteroideAddon; 11 | 12 | import java.util.ArrayList; 13 | import java.util.Set; 14 | 15 | public class PacketPauseModule extends Module { 16 | public PacketPauseModule() { super(AsteroideAddon.CATEGORY, "Packet-Pause", "Pauses packets until the module is disabled."); } 17 | 18 | private final SettingGroup sgGeneral = settings.getDefaultGroup(); 19 | private final Setting>>> packets = sgGeneral.add(new PacketListSetting.Builder() 20 | .name("packets") 21 | .description("Packets to pause.") 22 | .build() 23 | ); 24 | 25 | private ArrayList> pausedPackets = new ArrayList<>(); 26 | 27 | @EventHandler 28 | private void onPacketSend(PacketEvent.Send event) { 29 | if (!isActive() || !packets.get().contains(event.packet.getClass())) return; 30 | pausedPackets.add(event.packet); 31 | event.cancel(); 32 | } 33 | 34 | @Override 35 | public void onDeactivate() { 36 | if (mc.player == null || mc.world == null) { pausedPackets.clear(); return; } 37 | for (Packet packet : pausedPackets) mc.player.networkHandler.sendPacket(packet); 38 | info("Sent " + pausedPackets.size() + " paused packets."); 39 | pausedPackets.clear(); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/commands/BypassCommand.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.commands; 2 | 3 | import com.mojang.brigadier.arguments.StringArgumentType; 4 | import com.mojang.brigadier.builder.LiteralArgumentBuilder; 5 | import meteordevelopment.meteorclient.commands.Command; 6 | import meteordevelopment.meteorclient.utils.player.ChatUtils; 7 | import net.minecraft.command.CommandSource; 8 | import net.minecraft.text.Text; 9 | import spigey.asteroide.util; 10 | 11 | public class BypassCommand extends Command { 12 | public BypassCommand() { 13 | super("bypass", "Lets you bypass most chat filters"); 14 | } 15 | 16 | @Override 17 | public void build(LiteralArgumentBuilder builder) { 18 | builder.executes(context -> { 19 | error("You have to specify a message!"); 20 | return SINGLE_SUCCESS; 21 | }); 22 | builder.then(argument("text", StringArgumentType.greedyString()).executes(context -> { 23 | String copy = StringArgumentType.getString(context, "text") 24 | .replaceAll("a", "а") 25 | .replaceAll("c", "с") 26 | .replaceAll("e", "е") 27 | .replaceAll("h", "һ") 28 | .replaceAll("i", "і") 29 | .replaceAll("j", "ј") 30 | .replaceAll("n", "ո") 31 | .replaceAll("o", "о") 32 | .replaceAll("p", "р") 33 | .replaceAll("u", "ս") 34 | .replaceAll("v", "ν") 35 | .replaceAll("x", "х") 36 | .replaceAll("y", "у"); 37 | ChatUtils.sendMsg(Text.of("Done creating the bypassed message!")); 38 | ChatUtils.sendMsg(util.getSendButton(util.getCopyButton(copy), copy)); 39 | return SINGLE_SUCCESS; 40 | })); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/modules/AutoKys.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.modules; 2 | 3 | import meteordevelopment.meteorclient.events.packets.PacketEvent; 4 | import net.minecraft.network.packet.s2c.play.DeathMessageS2CPacket; 5 | import spigey.asteroide.AsteroideAddon; 6 | import meteordevelopment.meteorclient.settings.Setting; 7 | import meteordevelopment.meteorclient.settings.SettingGroup; 8 | import meteordevelopment.meteorclient.settings.StringListSetting; 9 | import meteordevelopment.meteorclient.systems.modules.Module; 10 | import meteordevelopment.orbit.EventHandler; 11 | import net.minecraft.entity.Entity; 12 | 13 | import java.util.List; 14 | import java.util.Random; 15 | 16 | import static spigey.asteroide.util.msg; 17 | 18 | public class AutoKys extends Module { 19 | 20 | private final SettingGroup sgGeneral = settings.getDefaultGroup(); 21 | 22 | private final Setting> messages = sgGeneral.add(new StringListSetting.Builder().name("messages").description("Randomly takes the message from the list and sends on each death.").defaultValue("kys", "that's fucking luck").build()); 23 | 24 | public AutoKys() { 25 | super(AsteroideAddon.CATEGORY, "Auto-Kys", "Sends a message when you die"); 26 | } 27 | 28 | @EventHandler 29 | private void onPacketReceive(PacketEvent.Receive event){ 30 | if(event.packet instanceof DeathMessageS2CPacket packet){ 31 | Entity entity = mc.world.getEntityById(packet.playerId()); 32 | if(entity != mc.player){return;} 33 | msg(messages.get().isEmpty() ? "kill yourself you fucking wimp" : messages.get().get(randomNum(0, messages.get().size() - 1))); 34 | } 35 | } 36 | private static final Random random = new Random(); 37 | public static int randomNum(int min, int max) { 38 | return random.nextInt(max - min + 1) + min; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/commands/DelayCommand.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.commands; 2 | 3 | import com.mojang.brigadier.arguments.IntegerArgumentType; 4 | import com.mojang.brigadier.arguments.StringArgumentType; 5 | import com.mojang.brigadier.builder.LiteralArgumentBuilder; 6 | import meteordevelopment.meteorclient.MeteorClient; 7 | import meteordevelopment.meteorclient.commands.Command; 8 | import meteordevelopment.meteorclient.events.world.TickEvent; 9 | import meteordevelopment.meteorclient.utils.player.ChatUtils; 10 | import meteordevelopment.orbit.EventHandler; 11 | import net.minecraft.command.CommandSource; 12 | 13 | public class DelayCommand extends Command { 14 | public DelayCommand() { 15 | super("delay", "Sends the provided message after a specific delay."); 16 | } 17 | 18 | private int tick = -1; 19 | private String message = ""; 20 | 21 | @Override 22 | public void build(LiteralArgumentBuilder builder) { 23 | builder.then(argument("delay", IntegerArgumentType.integer(0)).then(argument("message", StringArgumentType.greedyString()).executes(context -> { 24 | this.tick = IntegerArgumentType.getInteger(context, "delay"); 25 | this.message = StringArgumentType.getString(context, "message"); 26 | MeteorClient.EVENT_BUS.subscribe(this); 27 | info(String.format("Command will be sent in %.1f seconds.", this.tick / 20.0)); 28 | return SINGLE_SUCCESS; 29 | }))); 30 | } 31 | 32 | @EventHandler 33 | private void onTick(TickEvent.Post event) { 34 | if(this.tick == -1 || this.message.isEmpty()){ MeteorClient.EVENT_BUS.unsubscribe(this); return; } 35 | if(this.tick > 0){ this.tick--; return; } 36 | ChatUtils.sendPlayerMsg(this.message); 37 | this.tick = -1; 38 | MeteorClient.EVENT_BUS.unsubscribe(this); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/commands/TrackerCommand.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.commands; 2 | 3 | import com.mojang.authlib.GameProfile; 4 | import com.mojang.brigadier.builder.LiteralArgumentBuilder; 5 | import meteordevelopment.meteorclient.commands.Command; 6 | import meteordevelopment.meteorclient.commands.arguments.PlayerListEntryArgumentType; 7 | import meteordevelopment.meteorclient.utils.player.ChatUtils; 8 | import net.minecraft.command.CommandSource; 9 | import net.minecraft.entity.Entity; 10 | import net.minecraft.entity.player.PlayerEntity; 11 | import net.minecraft.text.Text; 12 | import spigey.asteroide.AsteroideAddon; 13 | import spigey.asteroide.util; 14 | 15 | public class TrackerCommand extends Command { 16 | public TrackerCommand() { 17 | super("track", "Tracks a specified player. Use with Tracker module."); 18 | } 19 | 20 | @Override 21 | public void build(LiteralArgumentBuilder builder) { 22 | builder.then(argument("player", PlayerListEntryArgumentType.create()).executes(context -> { 23 | GameProfile profile = PlayerListEntryArgumentType.get(context).getProfile(); 24 | if((profile == null) || mc.world == null) {error("Player not found."); return SINGLE_SUCCESS;} 25 | for(Entity entity : mc.world.getEntities()){ 26 | if(!(entity instanceof PlayerEntity)) continue; 27 | if(util.withoutStyle(entity.getName()).equals(profile.getName())){ 28 | ChatUtils.sendMsg(Text.of(String.format("§7Player found at §cX: %.0f§7, §aY: %.0f§7, §9Z: %.0f", entity.getX(), entity.getY(), entity.getZ()))); 29 | AsteroideAddon.trackedPlayer = profile.getName(); 30 | return SINGLE_SUCCESS; 31 | } 32 | } 33 | ChatUtils.sendMsg(Text.of("§cPlayer not found, is it too far away?")); 34 | return SINGLE_SUCCESS; 35 | })); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/modules/ServerCrashModule.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.modules; 2 | 3 | import meteordevelopment.meteorclient.settings.BoolSetting; 4 | import meteordevelopment.meteorclient.settings.Setting; 5 | import meteordevelopment.meteorclient.settings.SettingGroup; 6 | import meteordevelopment.meteorclient.systems.modules.Module; 7 | import spigey.asteroide.AsteroideAddon; 8 | 9 | import static spigey.asteroide.util.*; 10 | 11 | public class ServerCrashModule extends Module { 12 | 13 | private final SettingGroup sgGeneral = settings.getDefaultGroup(); 14 | 15 | private final Setting cmdfeedback = sgGeneral.add(new BoolSetting.Builder() 16 | .name("No Command feedback") 17 | .description("Does not spam the chat when enabled") 18 | .defaultValue(true) 19 | .build() 20 | ); 21 | private final Setting logadmin = sgGeneral.add(new BoolSetting.Builder() 22 | .name("No Log admin commands") 23 | .description("Hides the server crash to other players with OP") 24 | .defaultValue(true) 25 | .build() 26 | ); 27 | public ServerCrashModule() { 28 | super(AsteroideAddon.CATEGORY, "Server-Crash", "[REQUIRES OP] Crashes the server. Bee NoRender and EntityCulling mod highly recommended!"); 29 | } 30 | @Override 31 | public void onActivate(){ 32 | assert mc.player != null; 33 | error("Remember to disable Bee rendering using NoRender and install the EntityCulling mod!"); 34 | info("Attempting to crash the Server"); 35 | if(!mc.player.hasPermissionLevel(2)){error(perm(2));} 36 | if(cmdfeedback.get()){msg("/gamerule sendCommandFeedback false");} 37 | if(logadmin.get()){msg("/gamerule logAdminCommands false");} 38 | msg("/execute as @e as @e run summon bee ~ ~-10 ~ {Invulnerable:1}"); 39 | msg("/gamerule randomTickSpeed 2147483647"); 40 | toggle(); 41 | } 42 | } 43 | 44 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/commands/CommandBlockCommand.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.commands; 2 | 3 | import com.mojang.brigadier.arguments.StringArgumentType; 4 | import com.mojang.brigadier.builder.LiteralArgumentBuilder; 5 | import meteordevelopment.meteorclient.commands.Command; 6 | import meteordevelopment.meteorclient.systems.config.Config; 7 | import meteordevelopment.meteorclient.utils.player.ChatUtils; 8 | import net.minecraft.command.CommandSource; 9 | import net.minecraft.text.Text; 10 | 11 | public class CommandBlockCommand extends Command { 12 | public CommandBlockCommand() { 13 | super("cmdblock", "Gives you a command block with the specified command inside"); 14 | } 15 | 16 | @Override 17 | public void build(LiteralArgumentBuilder builder) { 18 | builder.executes(context -> { 19 | error("You have to specify a command! f.e: " + Config.get().prefix.get() + "cmdblock /say Asteroide on Crack!"); // .cmdblock /say Asteroide on Crack! 20 | return SINGLE_SUCCESS; 21 | }); 22 | builder.then(argument("command", StringArgumentType.greedyString()).executes(context -> { 23 | assert mc.player != null; 24 | if(!mc.player.getAbilities().creativeMode){error("You need to be in creative mode to use this command!"); return SINGLE_SUCCESS;} 25 | if(!mc.player.hasPermissionLevel(4)){error("You're missing the permission level '§f4§c', you can most likely not place the command block!");} 26 | String command = StringArgumentType.getString(context, "command"); 27 | // ChatUtils.sendMsg(Text.of("§fReceiving command block with command '§7" + command.substring(0, Math.min(command.length(), 15)) + "§f'.")); 28 | ChatUtils.sendMsg(Text.of("This command only works on Asteroide 1.20.4")); 29 | // CommandBlock(Items.COMMAND_BLOCK, command, 1, command.substring(0, Math.min(command.length(), 30)), true); 30 | return SINGLE_SUCCESS; 31 | })); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/modules/TypoModule.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.modules; 2 | 3 | import meteordevelopment.meteorclient.events.game.SendMessageEvent; 4 | import meteordevelopment.meteorclient.settings.*; 5 | import meteordevelopment.meteorclient.systems.modules.Module; 6 | import meteordevelopment.orbit.EventHandler; 7 | import spigey.asteroide.AsteroideAddon; 8 | 9 | import java.util.List; 10 | 11 | public class TypoModule extends Module { 12 | public TypoModule() { 13 | super(AsteroideAddon.CATEGORY, "Typo", "Replaces text in sent messages/commands."); 14 | } 15 | 16 | private final SettingGroup sgGeneral = settings.getDefaultGroup(); 17 | public final Setting> keywords = sgGeneral.add(new StringListSetting.Builder().name("keywords").description("Keywords to replace").defaultValue("ex1", "ex2").build()); 18 | public final Setting> replacements = sgGeneral.add(new StringListSetting.Builder().name("replacements").description("Text to replace the keywords with").defaultValue("ex1 will be replaced with this text", "ex2 will be replaced with this text").build()); 19 | public final Setting commands = sgGeneral.add(new BoolSetting.Builder().name("replace commands").description("Replace text in commands.").defaultValue(true).build()); 20 | public final Setting chat = sgGeneral.add(new BoolSetting.Builder().name("replace chat").description("Replace text in chat messages.").defaultValue(true).build()); 21 | 22 | @EventHandler 23 | private void onMessageSend(SendMessageEvent event){ 24 | if (!chat.get() || !isActive()) return; 25 | String content = event.message; 26 | for(int i = 0; i < keywords.get().size(); i++) { 27 | if (!content.toLowerCase().contains(keywords.get().get(i).toLowerCase())) continue; 28 | if(replacements.get().size() <= i) break; 29 | content = content.replace(keywords.get().get(i), replacements.get().get(i)); 30 | } 31 | event.message = content.length() > 256 ? content.substring(0, 256) : content; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/mixin/BlockOutlineMixin.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.mixin; 2 | 3 | import meteordevelopment.meteorclient.systems.modules.Modules; 4 | import net.minecraft.block.AbstractBlock; 5 | import net.minecraft.block.BlockState; 6 | import net.minecraft.block.ShapeContext; 7 | import net.minecraft.util.shape.VoxelShape; 8 | import net.minecraft.util.shape.VoxelShapes; 9 | import net.minecraft.world.BlockView; 10 | import net.minecraft.util.math.BlockPos; 11 | import org.spongepowered.asm.mixin.Mixin; 12 | import org.spongepowered.asm.mixin.injection.At; 13 | import org.spongepowered.asm.mixin.injection.Inject; 14 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 15 | import spigey.asteroide.modules.BlockHitboxesModule; 16 | 17 | @Mixin(AbstractBlock.AbstractBlockState.class) 18 | public abstract class BlockOutlineMixin { 19 | @Inject(method = "getRaycastShape", at = @At("HEAD"), cancellable = true) 20 | private void enlargeOutline(BlockView world, BlockPos pos, CallbackInfoReturnable cir) { 21 | try { 22 | BlockHitboxesModule bh = Modules.get().get(BlockHitboxesModule.class); 23 | if(bh.isActive()) if (bh.blocks.get().contains(((BlockState) (Object) this).getBlock())) cir.setReturnValue(VoxelShapes.cuboid(bh.miX.get(), bh.miY.get(), bh.miZ.get(), bh.maX.get(), bh.maY.get(), bh.maZ.get())); 24 | }catch(Exception e){/**/} 25 | } 26 | 27 | @Inject(method = "getOutlineShape(Lnet/minecraft/world/BlockView;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/ShapeContext;)Lnet/minecraft/util/shape/VoxelShape;", at = @At("HEAD"), cancellable = true) 28 | private void enlargeOutline2(BlockView world, BlockPos pos, ShapeContext context, CallbackInfoReturnable cir) { 29 | try { 30 | BlockHitboxesModule bh = Modules.get().get(BlockHitboxesModule.class); 31 | if(bh.isActive()) if (bh.blocks.get().contains(((BlockState) (Object) this).getBlock())) cir.setReturnValue(VoxelShapes.cuboid(bh.miX.get(), bh.miY.get(), bh.miZ.get(), bh.maX.get(), bh.maY.get(), bh.maZ.get())); 32 | }catch(Exception e){/**/} 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/modules/PlatformFlyModule.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.modules; 2 | 3 | import meteordevelopment.meteorclient.events.world.CollisionShapeEvent; 4 | import meteordevelopment.meteorclient.settings.BoolSetting; 5 | import meteordevelopment.meteorclient.settings.Setting; 6 | import meteordevelopment.meteorclient.settings.SettingGroup; 7 | import meteordevelopment.meteorclient.systems.modules.Module; 8 | import meteordevelopment.orbit.EventHandler; 9 | import net.minecraft.util.math.BlockPos; 10 | import net.minecraft.util.shape.VoxelShapes; 11 | import spigey.asteroide.AsteroideAddon; 12 | import spigey.asteroide.util; 13 | 14 | 15 | public class PlatformFlyModule extends Module { 16 | public PlatformFlyModule() { 17 | super(AsteroideAddon.CATEGORY, "Air-Walk", "Lets you walk on air"); 18 | } 19 | private final SettingGroup sgGeneral = settings.getDefaultGroup(); 20 | private final Setting allowJumping = sgGeneral.add(new BoolSetting.Builder() 21 | .name("Ease Jumping (Buggy)") 22 | .description("Makes getting up easier") 23 | .defaultValue(false) 24 | .build() 25 | ); 26 | private final Setting allowSneaking = sgGeneral.add(new BoolSetting.Builder() 27 | .name("Allow Sneaking") 28 | .description("Allows sneaking while in the air") 29 | .defaultValue(false) 30 | .build() 31 | ); 32 | 33 | @EventHandler 34 | private void onCollisionShape(CollisionShapeEvent event){ 35 | assert mc.player != null; 36 | boolean sneaking = mc.options.sneakKey.isPressed(); 37 | boolean jumping = mc.options.jumpKey.isPressed(); 38 | if(sneaking && !allowSneaking.get()){return;} 39 | if(jumping && allowJumping.get() && (util.randomNum(1,5) == 3)){mc.player.jump();} // I was too lazy to add a proper delay 40 | int PlayerX = mc.player.getBlockPos().getX(); 41 | int PlayerY = mc.player.getBlockPos().getY(); 42 | int PlayerZ = mc.player.getBlockPos().getZ(); 43 | BlockPos pos = event.pos; 44 | BlockPos lock = new BlockPos(PlayerX, PlayerY - 1, PlayerZ); 45 | if(lock.equals(pos)) event.shape = VoxelShapes.fullCube(); 46 | } 47 | } 48 | 49 | 50 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/commands/WhereIsCommand.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.commands; 2 | 3 | import com.mojang.authlib.GameProfile; 4 | import com.mojang.brigadier.builder.LiteralArgumentBuilder; 5 | import meteordevelopment.meteorclient.commands.Command; 6 | import meteordevelopment.meteorclient.commands.arguments.PlayerListEntryArgumentType; 7 | import meteordevelopment.meteorclient.utils.player.ChatUtils; 8 | import net.minecraft.command.CommandSource; 9 | import net.minecraft.command.argument.EntityAnchorArgumentType; 10 | import net.minecraft.entity.Entity; 11 | import net.minecraft.entity.player.PlayerEntity; 12 | import net.minecraft.text.Text; 13 | import net.minecraft.util.math.Vec3d; 14 | import spigey.asteroide.AsteroideAddon; 15 | import spigey.asteroide.util; 16 | 17 | public class WhereIsCommand extends Command { 18 | public WhereIsCommand() { 19 | super("whereis", "Makes you look at a specified player"); 20 | } 21 | 22 | @Override 23 | public void build(LiteralArgumentBuilder builder) { 24 | builder.then(argument("player", PlayerListEntryArgumentType.create()).executes(context -> { 25 | GameProfile profile = PlayerListEntryArgumentType.get(context).getProfile(); 26 | if((profile == null) || mc.world == null) {error("Player not found."); return SINGLE_SUCCESS;} 27 | for(Entity entity : mc.world.getEntities()){ 28 | if(!(entity instanceof PlayerEntity)) continue; 29 | if(util.withoutStyle(entity.getName()).equals(profile.getName())){ 30 | ChatUtils.sendMsg(Text.of(String.format("§7Player found at §cX: %.0f§7, §aY: %.0f§7, §9Z: %.0f", entity.getX(), entity.getY(), entity.getZ()))); 31 | assert mc.player != null; 32 | mc.player.lookAt(EntityAnchorArgumentType.EntityAnchor.EYES, new Vec3d(entity.getX(), entity.getY() + 1.62, entity.getZ())); 33 | AsteroideAddon.lastPos = new double[]{entity.getX(), entity.getY(), entity.getZ()}; 34 | return SINGLE_SUCCESS; 35 | } 36 | } 37 | ChatUtils.sendMsg(Text.of("§cPlayer not found, is it too far away?")); 38 | return SINGLE_SUCCESS; 39 | })); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/modules/CreativeFlightModule.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.modules; 2 | 3 | import meteordevelopment.meteorclient.events.packets.PacketEvent; 4 | import meteordevelopment.meteorclient.events.world.TickEvent; 5 | import meteordevelopment.meteorclient.mixin.PlayerMoveC2SPacketAccessor; 6 | import meteordevelopment.meteorclient.settings.*; 7 | import meteordevelopment.meteorclient.systems.modules.Module; 8 | import meteordevelopment.orbit.EventHandler; 9 | import spigey.asteroide.AsteroideAddon; 10 | 11 | public class CreativeFlightModule extends Module { 12 | public CreativeFlightModule() { 13 | super(AsteroideAddon.CATEGORY, "Creative-Flight", "Allows you to fly like you're in creative mode"); 14 | } 15 | private final SettingGroup sgGeneral = settings.getDefaultGroup(); 16 | private final Setting speed = sgGeneral.add(new DoubleSetting.Builder() 17 | .name("fly-speed") 18 | .description("How fast you can fly.") 19 | .defaultValue(0.05) 20 | .min(0) 21 | .sliderMax(20) 22 | .build() 23 | ); 24 | 25 | private final Setting nofall = sgGeneral.add(new BoolSetting.Builder() 26 | .name("No-Fall") 27 | .description("Enable Nofall when flying") 28 | .defaultValue(true) 29 | .build() 30 | ); 31 | 32 | @EventHandler 33 | public void onTick(TickEvent.Post event) { 34 | if(!isActive()) return; 35 | assert mc.player != null; 36 | mc.player.getAbilities().allowFlying = true; 37 | mc.player.getAbilities().setFlySpeed(Float.parseFloat(speed.get().toString())); 38 | } 39 | @Override 40 | public void onDeactivate() { 41 | assert mc.player != null; 42 | mc.player.getAbilities().setFlySpeed(0.05F); 43 | if(!mc.player.getAbilities().creativeMode) {mc.player.getAbilities().allowFlying = false; mc.player.getAbilities().flying = false;} 44 | } 45 | @EventHandler 46 | private void onSendPacket(PacketEvent.Send event){ 47 | if(!(event.packet instanceof PlayerMoveC2SPacketAccessor)) return; 48 | if(!isActive()) return; 49 | if(!nofall.get()) return; 50 | ((PlayerMoveC2SPacketAccessor) event.packet).setOnGround(true); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/modules/ChatBypassModule.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.modules; 2 | 3 | import meteordevelopment.meteorclient.events.game.ReceiveMessageEvent; 4 | import meteordevelopment.meteorclient.events.game.SendMessageEvent; 5 | import meteordevelopment.meteorclient.settings.BoolSetting; 6 | import meteordevelopment.meteorclient.settings.Setting; 7 | import meteordevelopment.meteorclient.settings.SettingGroup; 8 | import meteordevelopment.meteorclient.settings.StringListSetting; 9 | import meteordevelopment.meteorclient.systems.modules.Module; 10 | import meteordevelopment.orbit.EventHandler; 11 | import spigey.asteroide.AsteroideAddon; 12 | import java.util.List; 13 | 14 | public class ChatBypassModule extends Module { 15 | public ChatBypassModule() { 16 | super(AsteroideAddon.CATEGORY, "Chat-Bypass", "Bypasses most chat filters."); 17 | } 18 | private final SettingGroup sgGeneral = settings.getDefaultGroup(); 19 | private final Setting toggleOnMessage = sgGeneral.add(new BoolSetting.Builder() 20 | .name("toggle on msg") 21 | .description("Toggles the module if a specific message is received") 22 | .defaultValue(false) 23 | .build() 24 | ); 25 | private final Setting> messages = sgGeneral.add(new StringListSetting.Builder() 26 | .name("messages") 27 | .description("Toggle the module if any of the messages is received.") 28 | .defaultValue("special characters in the chat") 29 | .visible(toggleOnMessage::get) 30 | .build() 31 | ); 32 | 33 | @EventHandler 34 | private void onMessageSend(SendMessageEvent event){ 35 | if(!isActive()) return; 36 | event.message = event.message.replaceAll("a", "а").replaceAll("c", "с").replaceAll("e", "е").replaceAll("h", "һ").replaceAll("i", "і").replaceAll("j", "ј").replaceAll("n", "ո").replaceAll("o", "о").replaceAll("p", "р").replaceAll("u", "ս").replaceAll("v", "ν").replaceAll("x", "х").replaceAll("y", "у"); 37 | } 38 | 39 | @EventHandler 40 | private void onMessageReceive(ReceiveMessageEvent event){ 41 | if(!isActive() || !toggleOnMessage.get() || messages.get().isEmpty()) return; 42 | for(String message : messages.get()) if(event.getMessage().getString().toLowerCase().contains(message.toLowerCase())) toggle(); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/modules/AutoFuckModule.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.modules; 2 | 3 | import meteordevelopment.meteorclient.events.world.TickEvent; 4 | import meteordevelopment.meteorclient.settings.IntSetting; 5 | import meteordevelopment.meteorclient.settings.Setting; 6 | import meteordevelopment.meteorclient.settings.SettingGroup; 7 | import meteordevelopment.meteorclient.systems.modules.Module; 8 | import meteordevelopment.orbit.EventHandler; 9 | import spigey.asteroide.AsteroideAddon; 10 | 11 | public class AutoFuckModule extends Module { 12 | public AutoFuckModule() { 13 | super(AsteroideAddon.CATEGORY, "Auto-Fuck", "Automatically fucks other players"); 14 | } 15 | private final SettingGroup sgGeneral = settings.getDefaultGroup(); 16 | private final Setting sneakTime = sgGeneral.add(new IntSetting.Builder() 17 | .name("sneak-time") 18 | .description("How many ticks to stay sneaked.") 19 | .defaultValue(1) 20 | .min(1) 21 | .sliderMin(1) 22 | .sliderMax(20) 23 | .max(100) 24 | .build() 25 | ); 26 | private final Setting delay = sgGeneral.add(new IntSetting.Builder() 27 | .name("standing-time") 28 | .description("How many ticks to not stay sneaked.") 29 | .defaultValue(1) 30 | .min(1) 31 | .sliderMin(1) 32 | .sliderMax(20) 33 | .max(100) 34 | .build() 35 | ); 36 | 37 | @Override 38 | public void onDeactivate() { 39 | mc.options.sneakKey.setPressed(false); 40 | } 41 | 42 | private int tick = -1; 43 | private boolean sneaking = false; 44 | @EventHandler 45 | private void onTick(TickEvent.Post event){ 46 | if(tick > 0){tick--; return;} 47 | if(!isActive()) return; 48 | if(tick == -1){ 49 | sneaking = true; 50 | tick = sneakTime.get(); 51 | assert mc.player != null; 52 | mc.options.sneakKey.setPressed(true); 53 | } 54 | if(sneaking){ 55 | sneaking = false; 56 | tick = delay.get(); 57 | assert mc.player != null; 58 | mc.options.sneakKey.setPressed(false); 59 | } else{ 60 | sneaking = true; 61 | tick = sneakTime.get(); 62 | assert mc.player != null; 63 | mc.options.sneakKey.setPressed(true); 64 | } 65 | } 66 | } 67 | 68 | 69 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/modules/EncryptChatModule.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.modules; 2 | 3 | import meteordevelopment.meteorclient.events.game.ReceiveMessageEvent; 4 | import meteordevelopment.meteorclient.events.game.SendMessageEvent; 5 | import meteordevelopment.meteorclient.settings.*; 6 | import meteordevelopment.meteorclient.systems.modules.Module; 7 | import meteordevelopment.orbit.EventHandler; 8 | import net.minecraft.text.Text; 9 | import spigey.asteroide.AsteroideAddon; 10 | import spigey.asteroide.util; 11 | 12 | public class EncryptChatModule extends Module { 13 | public EncryptChatModule() { 14 | super(AsteroideAddon.CATEGORY, "Encrypt-Chat", "Encrypts your chat messages so only asteroide users can read them"); 15 | } 16 | 17 | final SettingGroup sgGeneral = settings.getDefaultGroup(); 18 | public final Setting encryptionKey = sgGeneral.add(new StringSetting.Builder() 19 | .name("encryption key") 20 | .description("Key to encrypt chat messages with") 21 | .defaultValue("asteroide") 22 | .build() 23 | ); 24 | 25 | public final Setting encrypt = sgGeneral.add(new BoolSetting.Builder() 26 | .name("encrypt messages") 27 | .description("Encrypts your messages when enabled") 28 | .defaultValue(true) 29 | .build() 30 | ); 31 | 32 | @EventHandler 33 | private void onMessageSend(SendMessageEvent event) throws Exception { 34 | if (encrypt.get() && String.format("STRT\"%s\"", util.encrypt(event.message, encryptionKey.get())).length() <= 256) event.message = String.format("STRT\"%s\"", util.encrypt(event.message, encryptionKey.get())); 35 | } 36 | 37 | @EventHandler 38 | private void onMessageReceive(ReceiveMessageEvent event) throws Exception { 39 | try{String content = event.getMessage().getString(); 40 | String[] split = content.split("\""); 41 | int start = content.indexOf("STRT\"") + 5; 42 | String message = content; // ??? 43 | if (start >= 0 && (content.indexOf("\"", start)) >= 0) { 44 | try{event.setMessage(Text.literal(String.format("§e§l%s§r§e%s §r§c§l(Decrypted)", message.substring(0, start - 5), util.decrypt(split[1], encryptionKey.get()))));} 45 | catch(Exception L){System.out.println(L); event.setMessage(Text.literal(String.format("§c§l%s§r§cDecryption Failed", message.substring(0, start - 5))));} 46 | }}catch(Exception L){ /* Aw man */ } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/mixin/HandshakeC2SMixin.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.mixin; 2 | 3 | import com.google.gson.JsonObject; 4 | import org.spongepowered.asm.mixin.*; 5 | import spigey.asteroide.modules.BetterBungeeSpoofModule; 6 | import meteordevelopment.meteorclient.systems.modules.Modules; 7 | import meteordevelopment.meteorclient.utils.network.Http; 8 | import net.minecraft.network.packet.c2s.handshake.ConnectionIntent; 9 | import net.minecraft.network.packet.c2s.handshake.HandshakeC2SPacket; 10 | import org.spongepowered.asm.mixin.injection.At; 11 | import org.spongepowered.asm.mixin.injection.Inject; 12 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 13 | import spigey.asteroide.util; 14 | import static spigey.asteroide.AsteroideAddon.gson; 15 | import static meteordevelopment.meteorclient.MeteorClient.mc; 16 | import static spigey.asteroide.AsteroideAddon.spoofedIP; 17 | 18 | @Mixin(HandshakeC2SPacket.class) 19 | public abstract class HandshakeC2SMixin { 20 | @Mutable 21 | @Shadow 22 | @Final 23 | private String address; 24 | 25 | @Inject(method = "(ILjava/lang/String;ILnet/minecraft/network/packet/c2s/handshake/ConnectionIntent;)V", at = @At("RETURN")) 26 | private void onHandshakeC2SPacket(int i, String string, int j, ConnectionIntent connectionIntent, CallbackInfo ci) { 27 | try { 28 | BetterBungeeSpoofModule bungeeSpoofModule = Modules.get().get(BetterBungeeSpoofModule.class); 29 | assert bungeeSpoofModule != null; 30 | if (!bungeeSpoofModule.isActive()) return; 31 | 32 | String spoofedUUID = mc.getSession().getUuidOrNull().toString(); 33 | spoofedIP = bungeeSpoofModule.spoofedAddress.get(); 34 | if (bungeeSpoofModule.randomize.get()) spoofedIP = util.randomNum(0, bungeeSpoofModule.range.get()) + "." + util.randomNum(0, bungeeSpoofModule.range.get()) + "." + util.randomNum(0, bungeeSpoofModule.range.get()) + "." + util.randomNum(0, bungeeSpoofModule.range.get()); 35 | 36 | if(spoofedUUID == null) { 37 | String response = Http.get(String.format("https://api.mojang.com/users/profiles/minecraft/%s", mc.getSession().getUsername())).sendString(); 38 | if (response != null) { 39 | JsonObject jsonObject = gson.fromJson(response, JsonObject.class); 40 | if (jsonObject != null && jsonObject.has("id")) spoofedUUID = jsonObject.get("id").getAsString(); 41 | } 42 | } 43 | this.address += "\u0000" + spoofedIP + "\u0000" + spoofedUUID; 44 | }catch(Exception L){ /**/ } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/modules/PacketLoggerModule.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.modules; 2 | 3 | import meteordevelopment.meteorclient.events.packets.PacketEvent; 4 | import meteordevelopment.meteorclient.settings.PacketListSetting; 5 | import meteordevelopment.meteorclient.settings.Setting; 6 | import meteordevelopment.meteorclient.settings.SettingGroup; 7 | import meteordevelopment.meteorclient.systems.modules.Module; 8 | import meteordevelopment.meteorclient.utils.network.PacketUtils; 9 | import meteordevelopment.meteorclient.utils.player.ChatUtils; 10 | import meteordevelopment.orbit.EventHandler; 11 | import meteordevelopment.orbit.EventPriority; 12 | import net.minecraft.network.packet.Packet; 13 | import net.minecraft.network.packet.s2c.common.CommonPingS2CPacket; 14 | import net.minecraft.text.Text; 15 | import spigey.asteroide.AsteroideAddon; 16 | 17 | import java.util.Set; 18 | 19 | public class PacketLoggerModule extends Module { 20 | public PacketLoggerModule() { 21 | super(AsteroideAddon.CATEGORY, "Packet-Logger", "Logs sent/received packets"); 22 | } 23 | private final SettingGroup sgGeneral = settings.getDefaultGroup(); 24 | 25 | private final Setting>>> s2cPackets = sgGeneral.add(new PacketListSetting.Builder() 26 | .name("S2C-packets") 27 | .description("Server-to-client packets to log.") 28 | .filter(aClass -> PacketUtils.getS2CPackets().contains(aClass)) 29 | .build() 30 | ); 31 | 32 | private final Setting>>> c2sPackets = sgGeneral.add(new PacketListSetting.Builder() 33 | .name("C2S-packets") 34 | .description("Client-to-server packets to log.") 35 | .filter(aClass -> PacketUtils.getC2SPackets().contains(aClass)) 36 | .build() 37 | ); 38 | 39 | @EventHandler(priority = EventPriority.HIGHEST + 1) 40 | private void onReceivePacket(PacketEvent.Receive event) { 41 | if (s2cPackets.get().contains(event.packet.getClass())) { 42 | if(event.packet instanceof CommonPingS2CPacket) info(String.valueOf(((CommonPingS2CPacket) event.packet).getParameter())); 43 | else ChatUtils.sendMsg(Text.of("§7" + PacketUtils.getName((Class>) event.packet.getClass()) + " was received!")); 44 | } 45 | } 46 | 47 | @EventHandler(priority = EventPriority.HIGHEST + 1) 48 | private void onSendPacket(PacketEvent.Send event) { 49 | if (c2sPackets.get().contains(event.packet.getClass())) ChatUtils.sendMsg(Text.of("§7" + PacketUtils.getName((Class>) event.packet.getClass()) + " was sent!")); 50 | } 51 | } 52 | 53 | 54 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/utils/HexConverter.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.utils; 2 | 3 | import meteordevelopment.meteorclient.utils.render.color.Color; 4 | import net.minecraft.text.MutableText; 5 | import net.minecraft.text.Text; 6 | import net.minecraft.util.Formatting; 7 | 8 | import java.util.ArrayList; 9 | import java.util.List; 10 | import java.util.regex.Matcher; 11 | import java.util.regex.Pattern; 12 | 13 | public class HexConverter { 14 | public static MutableText toText(String text) { 15 | if (text == null || text.isEmpty()) return Text.empty(); 16 | 17 | MutableText out = Text.empty(); 18 | Matcher matcher = Pattern.compile("§(#[0-9a-fA-F]{6}|[0-9a-fk-orA-FK-OR])").matcher(text); 19 | 20 | int last = 0; 21 | Integer customColor = null; 22 | List formats = new ArrayList<>(); 23 | 24 | while (matcher.find()) { 25 | if (matcher.start() > last) { 26 | MutableText seg = Text.literal(text.substring(last, matcher.start())); 27 | if (customColor != null) seg = seg.withColor(customColor); 28 | if (!formats.isEmpty()) seg = seg.formatted(formats.toArray(new Formatting[0])); 29 | out.append(seg); 30 | } 31 | 32 | String code = matcher.group(1); 33 | 34 | if (code.startsWith("#")) { 35 | customColor = fromHex(code); 36 | formats.removeIf(Formatting::isColor); 37 | } else { 38 | Formatting f = Formatting.byCode(Character.toLowerCase(code.charAt(0))); 39 | if (f == Formatting.RESET) { formats.clear(); customColor = null; 40 | } else if (f != null) { 41 | if (f.isColor()) { formats.removeIf(Formatting::isColor); formats.add(f); customColor = null;} 42 | else formats.add(f); 43 | } 44 | } 45 | 46 | last = matcher.end(); 47 | } 48 | 49 | if (last < text.length()) { 50 | MutableText seg = Text.literal(text.substring(last)); 51 | if (customColor != null) seg = seg.withColor(customColor); 52 | if (!formats.isEmpty()) seg = seg.formatted(formats.toArray(new Formatting[0])); 53 | out.append(seg); 54 | } 55 | 56 | return out; 57 | } 58 | 59 | private static int fromHex(String hex){ 60 | int r = Integer.valueOf( hex.substring( 1, 3 ), 16 ); 61 | int g = Integer.valueOf( hex.substring( 3, 5 ), 16 ); 62 | int b = Integer.valueOf( hex.substring( 5, 7 ), 16 ); 63 | return Color.fromRGBA(r, g, b, 255); 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/commands/CopyCommand.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.commands; 2 | 3 | import com.mojang.brigadier.builder.LiteralArgumentBuilder; 4 | import meteordevelopment.meteorclient.commands.Command; 5 | import meteordevelopment.meteorclient.commands.arguments.PlayerListEntryArgumentType; 6 | import net.minecraft.client.network.PlayerListEntry; 7 | import net.minecraft.command.CommandSource; 8 | import net.minecraft.entity.Entity; 9 | import net.minecraft.entity.player.PlayerEntity; 10 | import net.minecraft.network.packet.c2s.play.CreativeInventoryActionC2SPacket; 11 | import net.minecraft.util.Hand; 12 | 13 | import java.util.Objects; 14 | 15 | public class CopyCommand extends Command { 16 | public CopyCommand() { 17 | super("copyitem", "Copy someone's items."); 18 | } 19 | 20 | @Override 21 | public void build(LiteralArgumentBuilder builder) { 22 | builder.then(argument("player", PlayerListEntryArgumentType.create()) 23 | .then(literal("MAIN_HAND").executes(context -> { 24 | execute(PlayerListEntryArgumentType.get(context), Hand.MAIN_HAND); 25 | return SINGLE_SUCCESS; 26 | })) 27 | .then(literal("OFF_HAND").executes(context -> { 28 | execute(PlayerListEntryArgumentType.get(context), Hand.OFF_HAND); 29 | return SINGLE_SUCCESS; 30 | })) 31 | .executes(context -> { 32 | execute(PlayerListEntryArgumentType.get(context), Hand.MAIN_HAND); 33 | return SINGLE_SUCCESS; 34 | }) 35 | ); 36 | } 37 | 38 | private void execute(PlayerListEntry player, Hand hand){ 39 | for(Entity entity : mc.world.getEntities()){ 40 | if(entity instanceof PlayerEntity plr && Objects.equals(entity.getName().getString(), player.getProfile().getName())){ // There definitely is a better way. 41 | Hand ph = getHand(); 42 | mc.player.setStackInHand(ph, plr.getStackInHand(hand).copy()); 43 | mc.getNetworkHandler().sendPacket(new CreativeInventoryActionC2SPacket(ph == Hand.OFF_HAND ? 45 : 36 + mc.player.getInventory().selectedSlot, plr.getStackInHand(hand).copy())); 44 | info(String.format("Copied §f%s§7 from §f%s§7.", plr.getStackInHand(hand).getItem().getName().getString(), plr.getName().getString())); 45 | return; 46 | } 47 | } 48 | } 49 | 50 | private Hand getHand(){ 51 | if(mc.player.getMainHandStack().isEmpty()) return Hand.MAIN_HAND; 52 | else if(mc.player.getOffHandStack().isEmpty()) return Hand.OFF_HAND; 53 | else return Hand.MAIN_HAND; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/commands/UUIDCommand.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.commands; 2 | 3 | import com.mojang.authlib.GameProfile; 4 | import com.mojang.brigadier.builder.LiteralArgumentBuilder; 5 | import meteordevelopment.meteorclient.commands.Command; 6 | import meteordevelopment.meteorclient.commands.arguments.PlayerListEntryArgumentType; 7 | import net.minecraft.command.CommandSource; 8 | import net.minecraft.nbt.NbtHelper; 9 | import net.minecraft.text.ClickEvent; 10 | import net.minecraft.text.HoverEvent; 11 | import net.minecraft.text.MutableText; 12 | import net.minecraft.text.Text; 13 | 14 | import java.util.UUID; 15 | 16 | public class UUIDCommand extends Command { 17 | public UUIDCommand() { 18 | super("uuid", "Shows you a players UUID."); 19 | } 20 | 21 | @Override 22 | public void build(LiteralArgumentBuilder builder) { 23 | builder.executes(context -> { 24 | display(mc.player.getUuid()); 25 | return SINGLE_SUCCESS; 26 | }); 27 | 28 | builder.then(argument("player", PlayerListEntryArgumentType.create()).executes(context -> { 29 | GameProfile player = PlayerListEntryArgumentType.get(context).getProfile(); 30 | 31 | if (player != null) display(player.getId()); 32 | else error("Player not found!"); 33 | return SINGLE_SUCCESS; 34 | })); 35 | } 36 | 37 | private void display(UUID uuid){ 38 | log("§f-------------------------------"); 39 | mc.player.sendMessage(Text.literal("§8[§cUUID§8] §7UUID: ").append(getButton(uuid.toString())), false); 40 | mc.player.sendMessage(Text.literal("§8[§cUUID§8] §7Compact: ").append(getButton(uuid.toString().replaceAll("-", ""))), false); 41 | mc.player.sendMessage(Text.literal("§8[§cUUID§8] §7Numeric: "), false); 42 | mc.player.sendMessage(Text.literal("§8[§cUUID§8] §7").append(getButton(NbtHelper.fromUuid(uuid).toString())), false); 43 | log("§f-------------------------------"); 44 | } 45 | 46 | private String random(){ return "§" + "0123456789abcdefklmnor".charAt((int)(Math.random()*22)) + "§" + "0123456789abcdefklmnor".charAt((int)(Math.random()*22)) + "§" + "0123456789abcdefklmnor".charAt((int)(Math.random()*22)); } 47 | private void log(String message, String... args){ mc.player.sendMessage(Text.of(String.format("§8[§cUUID§8] §7%s%s", String.format(message, args), random())), false); } 48 | 49 | private MutableText getButton(String uuid){ 50 | return Text.literal(String.format("§8%s", uuid)).styled(style -> style 51 | .withHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, Text.literal("§7Click to copy"))) 52 | .withClickEvent(new ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, uuid)) 53 | ); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/modules/BlockHitboxesModule.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.modules; 2 | 3 | import meteordevelopment.meteorclient.settings.*; 4 | import meteordevelopment.meteorclient.systems.modules.Module; 5 | import net.minecraft.block.Block; 6 | import spigey.asteroide.AsteroideAddon; 7 | import meteordevelopment.meteorclient.settings.BlockListSetting; 8 | import meteordevelopment.meteorclient.settings.Setting; 9 | import meteordevelopment.meteorclient.settings.SettingGroup; 10 | import java.util.List; 11 | 12 | public class BlockHitboxesModule extends Module { 13 | public BlockHitboxesModule() { 14 | super(AsteroideAddon.CATEGORY, "Block-Hitboxes", "Increases some blocks hitbox sizes for easier aiming"); 15 | } 16 | private final SettingGroup sgGeneral = settings.getDefaultGroup(); 17 | 18 | public final Setting> blocks = sgGeneral.add(new BlockListSetting.Builder() 19 | .name("blocks") 20 | .description("What blocks should have an increased hitbox size.") 21 | .build() 22 | ); 23 | 24 | public final Setting miX = sgGeneral.add(new DoubleSetting.Builder() 25 | .name("min-size-x") 26 | .description("Minimum X size of the hitbox.") 27 | .defaultValue(0) 28 | .sliderMin(-2) 29 | .sliderMax(2) 30 | .build() 31 | ); 32 | public final Setting miY = sgGeneral.add(new DoubleSetting.Builder() 33 | .name("min-size-Y") 34 | .description("Minimum Y size of the hitbox.") 35 | .defaultValue(0) 36 | .sliderMin(-2) 37 | .sliderMax(2) 38 | .build() 39 | ); 40 | public final Setting miZ = sgGeneral.add(new DoubleSetting.Builder() 41 | .name("min-size-Z") 42 | .description("Minimum Z size of the hitbox.") 43 | .defaultValue(0) 44 | .sliderMin(-2) 45 | .sliderMax(2) 46 | .build() 47 | ); 48 | public final Setting maX = sgGeneral.add(new DoubleSetting.Builder() 49 | .name("max-size-x") 50 | .description("Maximum X size of the hitbox.") 51 | .defaultValue(1) 52 | .sliderMin(-2) 53 | .sliderMax(2) 54 | .build() 55 | ); 56 | public final Setting maY = sgGeneral.add(new DoubleSetting.Builder() 57 | .name("max-size-y") 58 | .description("Maximum Y size of the hitbox.") 59 | .defaultValue(1) 60 | .sliderMin(-2) 61 | .sliderMax(2) 62 | .build() 63 | ); 64 | public final Setting maZ = sgGeneral.add(new DoubleSetting.Builder() 65 | .name("max-size-z") 66 | .description("Maximum Z size of the hitbox.") 67 | .defaultValue(1) 68 | .sliderMin(-2) 69 | .sliderMax(2) 70 | .build() 71 | ); 72 | // BlockOutlineMixin.java 73 | } 74 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/commands/PhaseCommand.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.commands; 2 | 3 | import com.mojang.brigadier.arguments.DoubleArgumentType; 4 | import com.mojang.brigadier.builder.LiteralArgumentBuilder; 5 | import meteordevelopment.meteorclient.commands.Command; 6 | import net.minecraft.command.CommandSource; 7 | import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket; 8 | import static spigey.asteroide.util.PlayerDir; 9 | 10 | public class PhaseCommand extends Command { 11 | public PhaseCommand() { 12 | super("phase", "Vclip, but sideways"); 13 | } 14 | 15 | @Override 16 | public void build(LiteralArgumentBuilder builder) { 17 | builder.then(argument("blocks", DoubleArgumentType.doubleArg()).executes(context -> { 18 | 19 | double blocks = context.getArgument("blocks", Double.class); 20 | 21 | // Implementation of "PaperClip" aka "TPX" aka "VaultClip" into vclip 22 | // Allows you to teleport up to 200 blocks in one go (as you can send 20 move packets per tick) 23 | // Paper allows you to teleport 10 blocks for each move packet you send in that tick 24 | // Video explanation by LiveOverflow: https://www.youtube.com/watch?v=3HSnDsfkJT8 25 | int packetsRequired = (int) Math.ceil(Math.abs(blocks / 10)); 26 | 27 | if (packetsRequired > 20) { 28 | // Wouldn't work on paper anyway. 29 | // Some servers don't have a vertical limit, so if it is more than 200 blocks, just use a "normal" tp 30 | // This makes it, so you don't get kicked for sending too many packets 31 | packetsRequired = 1; 32 | } 33 | 34 | if (mc.player.hasVehicle()) return SINGLE_SUCCESS; 35 | // No vehicle version 36 | // For each 10 blocks, send a player move packet with no delta 37 | for (int packetNumber = 0; packetNumber < (packetsRequired - 1); packetNumber++) { 38 | mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.OnGroundOnly(true, mc.player.horizontalCollision)); 39 | } 40 | // Now send the final player move packet 41 | String owo = PlayerDir(mc.player.getYaw()); 42 | double x = mc.player.getX(); 43 | double y = mc.player.getY(); 44 | double z = mc.player.getZ(); 45 | if(owo.equals("east")) x += blocks; 46 | if(owo.equals("south")) z += blocks; 47 | if(owo.equals("west")) x -= blocks; 48 | if(owo.equals("north")) z -= blocks; 49 | mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(x, y, z, true, mc.player.horizontalCollision)); 50 | mc.player.setPosition(x, y, z); 51 | 52 | return SINGLE_SUCCESS; 53 | })); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/modules/InvCleanerModule.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.modules; 2 | 3 | import meteordevelopment.meteorclient.events.world.TickEvent; 4 | import meteordevelopment.meteorclient.settings.ItemListSetting; 5 | import meteordevelopment.meteorclient.settings.Setting; 6 | import meteordevelopment.meteorclient.settings.SettingGroup; 7 | import meteordevelopment.meteorclient.settings.StringListSetting; 8 | import meteordevelopment.meteorclient.systems.modules.Module; 9 | import meteordevelopment.meteorclient.utils.player.InvUtils; 10 | import meteordevelopment.orbit.EventHandler; 11 | import net.minecraft.client.gui.screen.ingame.CraftingScreen; 12 | import net.minecraft.client.gui.screen.ingame.HandledScreen; 13 | import net.minecraft.client.gui.screen.ingame.InventoryScreen; 14 | import net.minecraft.entity.player.PlayerInventory; 15 | import net.minecraft.item.Item; 16 | import net.minecraft.item.ItemStack; 17 | import net.minecraft.screen.slot.Slot; 18 | import net.minecraft.util.collection.DefaultedList; 19 | import spigey.asteroide.AsteroideAddon; 20 | 21 | import java.util.Arrays; 22 | import java.util.List; 23 | 24 | public class InvCleanerModule extends Module { 25 | public InvCleanerModule() { 26 | super(AsteroideAddon.CATEGORY, "Inv-Cleaner", "Automatically drops useless items in your inventory"); 27 | } 28 | private final SettingGroup sgGeneral = settings.getDefaultGroup(); 29 | 30 | private final Setting> items = sgGeneral.add(new ItemListSetting.Builder() 31 | .name("items") 32 | .description("Items to drop.") 33 | .build() 34 | ); 35 | private final Setting> names = sgGeneral.add(new StringListSetting.Builder() 36 | .name("names") 37 | .description("Also drop items with these names") 38 | .defaultValue() 39 | .build() 40 | ); 41 | 42 | @EventHandler 43 | public void onTick(TickEvent.Post event){ 44 | if(mc.currentScreen == null) return; 45 | if (!(mc.currentScreen instanceof HandledScreen)) return; 46 | DefaultedList slots = ((HandledScreen) mc.currentScreen).getScreenHandler().slots; 47 | if (slots == null || slots.isEmpty()) return; 48 | int[] exclude = new int[]{5, 6, 7, 8}; 49 | for(Slot slot : slots){ 50 | if(!(slot.inventory instanceof PlayerInventory) && !(slot.id == 0 && ((mc.currentScreen instanceof InventoryScreen) || (mc.currentScreen instanceof CraftingScreen)))) continue; 51 | if(Arrays.stream(exclude).anyMatch(slott -> slott == slot.id)) continue; 52 | ItemStack uwu = slot.getStack(); 53 | if(!(items.get().contains(uwu.getItem()) || names.get().stream().anyMatch(name -> name.equalsIgnoreCase(uwu.getName().getString())))) continue; 54 | InvUtils.drop().slotId(slot.id); 55 | } 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/main/java/spigey/asteroide/modules/ClickEventsModule.java: -------------------------------------------------------------------------------- 1 | package spigey.asteroide.modules; 2 | 3 | import meteordevelopment.meteorclient.settings.*; 4 | import meteordevelopment.meteorclient.systems.modules.Module; 5 | import meteordevelopment.meteorclient.utils.render.color.SettingColor; 6 | import spigey.asteroide.AsteroideAddon; 7 | 8 | import java.util.List; 9 | 10 | public class ClickEventsModule extends Module { 11 | public ClickEventsModule() { super(AsteroideAddon.CATEGORY, "Click-Events", "ClickEvent Utils."); } 12 | private final SettingGroup sgCommands = settings.createGroup("Commands", true); 13 | private final SettingGroup sgStyle = settings.createGroup("Style", true); 14 | 15 | public final Setting showCommand = sgCommands.add(new BoolSetting.Builder() 16 | .name("Show commands") 17 | .description("Shows commands of click events as tooltip.") 18 | .defaultValue(true) 19 | .build() 20 | ); 21 | 22 | public final Setting blockCommands = sgCommands.add(new BoolSetting.Builder() 23 | .name("Block commands") 24 | .description("Blocks potentially harmful commands.") 25 | .defaultValue(true) 26 | .build() 27 | ); 28 | 29 | public final Setting> commands = sgCommands.add(new StringListSetting.Builder() 30 | .name("Commands") 31 | .description("Commands containing these phrases will be blocked.") 32 | .defaultValue("op", "gamemode", "lp", "*") 33 | .visible(blockCommands::get) 34 | .build() 35 | ); 36 | 37 | public final Setting customColorEnabled = sgStyle.add(new BoolSetting.Builder() 38 | .name("Custom Color") 39 | .description("Adds a custom color to click events.") 40 | .defaultValue(true) 41 | .build() 42 | ); 43 | 44 | public final Setting customColor = sgStyle.add(new ColorSetting.Builder() 45 | .name("Color") 46 | .description("Custom color for click events.") 47 | .defaultValue(new SettingColor(36, 209, 240)) 48 | .visible(customColorEnabled::get) 49 | .build() 50 | ); 51 | 52 | public final Setting customStyleEnabled = sgStyle.add(new BoolSetting.Builder() 53 | .name("Custom Style") 54 | .description("Adds a custom style to click events.") 55 | .defaultValue(true) 56 | .build() 57 | ); 58 | 59 | public final Setting