New Modules and update to 1.19.3 (#186)

This commit is contained in:
SodaXwX
2022-12-23 21:45:57 +08:00
committed by GitHub
parent 64933773a7
commit 3c14b3bc8f
33 changed files with 663 additions and 454 deletions

View File

@@ -34,9 +34,12 @@
- AntiBot (Removed from Meteor in [166fc](https://github.com/MeteorDevelopment/meteor-client/commit/166fccc73e53de6cfdbe41ea58dc593a2f5011f6)) - AntiBot (Removed from Meteor in [166fc](https://github.com/MeteorDevelopment/meteor-client/commit/166fccc73e53de6cfdbe41ea58dc593a2f5011f6))
- AntiSpawnpoint - AntiSpawnpoint
- AntiVanish - AntiVanish
- ArrowDmg (Ported from [Wurst](https://github.com/Wurst-Imperium/Wurst7/tree))
- AutoBedTrap (Ported from [BleachHack-CupEdition](https://github.com/CUPZYY/BleachHack-CupEdition/blob/master/CupEdition-1.17/src/main/java/bleach/hack/module/mods/AutoBedtrap.java)) - AutoBedTrap (Ported from [BleachHack-CupEdition](https://github.com/CUPZYY/BleachHack-CupEdition/blob/master/CupEdition-1.17/src/main/java/bleach/hack/module/mods/AutoBedtrap.java))
- AutoCraft (More generalized version of [AutoBedCraft](https://github.com/Anticope/orion/blob/main/src/main/java/me/ghosttypes/orion/modules/main/AutoBedCraft.java) from orion) - AutoCraft (More generalized version of [AutoBedCraft](https://github.com/Anticope/orion/blob/main/src/main/java/me/ghosttypes/orion/modules/main/AutoBedCraft.java) from orion)
- AutoExtinguish - AutoExtinguish
- AutoGrind
- AutoLogin
- AutoPot (Taken from an [unmerged PR](https://github.com/MeteorDevelopment/meteor-client/pull/274)) - AutoPot (Taken from an [unmerged PR](https://github.com/MeteorDevelopment/meteor-client/pull/274))
- AutoSoup (Ported from [Wurst](https://github.com/Wurst-Imperium/Wurst7/tree)) - AutoSoup (Ported from [Wurst](https://github.com/Wurst-Imperium/Wurst7/tree))
- AutoTNT - AutoTNT

View File

@@ -1,5 +1,5 @@
plugins { plugins {
id 'fabric-loom' version '0.12-SNAPSHOT' id 'fabric-loom' version '1.0-SNAPSHOT'
} }
sourceCompatibility = targetCompatibility = JavaVersion.VERSION_17 sourceCompatibility = targetCompatibility = JavaVersion.VERSION_17
@@ -32,13 +32,13 @@ dependencies {
modImplementation("meteordevelopment:meteor-client:${project.meteor_version}-SNAPSHOT") modImplementation("meteordevelopment:meteor-client:${project.meteor_version}-SNAPSHOT")
// seed .locate and ore sim // seed .locate and ore sim
extraLibs('com.seedfinding:mc_math:0eb505174da8a92550f8ec6efe254e0fa936cc0d') { transitive = false } implementation('com.seedfinding:mc_math:0eb505174da8a92550f8ec6efe254e0fa936cc0d') { transitive = false }
extraLibs('com.seedfinding:mc_seed:5518e3ba3ee567fb0b51c15958967f70a6a19e02') { transitive = false } implementation('com.seedfinding:mc_seed:5518e3ba3ee567fb0b51c15958967f70a6a19e02') { transitive = false }
extraLibs('com.seedfinding:mc_core:d685a37f0a466d4bf800e7f285daf9ef73c81678') { transitive = false } implementation('com.seedfinding:mc_core:d685a37f0a466d4bf800e7f285daf9ef73c81678') { transitive = false }
extraLibs('com.seedfinding:mc_noise:a6ab8e6c688491829f8d2adf845392da22ef8e9c') { transitive = false } implementation('com.seedfinding:mc_noise:a6ab8e6c688491829f8d2adf845392da22ef8e9c') { transitive = false }
extraLibs('com.seedfinding:mc_biome:b2271807a047bb43ac60c8c20ad47e315f19b9a6') { transitive = false } implementation('com.seedfinding:mc_biome:b2271807a047bb43ac60c8c20ad47e315f19b9a6') { transitive = false }
extraLibs('com.seedfinding:mc_terrain:9e937ddb838e28e79423c287fa18b1ce66f061d7') { transitive = false } implementation('com.seedfinding:mc_terrain:9e937ddb838e28e79423c287fa18b1ce66f061d7') { transitive = false }
extraLibs('com.seedfinding:mc_feature:c29fd1fcd746e14c1bcdb127da3113ba273db1fd') { transitive = false } implementation('com.seedfinding:mc_feature:c29fd1fcd746e14c1bcdb127da3113ba273db1fd') { transitive = false }
// seedcracker api // seedcracker api
implementation (include('com.github.19MisterX98.SeedcrackerX:seedcrackerx-api:2.10.1')) {transitive = false} implementation (include('com.github.19MisterX98.SeedcrackerX:seedcrackerx-api:2.10.1')) {transitive = false}

View File

@@ -2,13 +2,13 @@
org.gradle.jvmargs=-Xmx2G org.gradle.jvmargs=-Xmx2G
# Fabric Properties # Fabric Properties
minecraft_version=1.19.2 minecraft_version=1.19.3
yarn_version=1.19.2+build.1 yarn_version=1.19.3+build.2
loader_version=0.14.9 loader_version=0.14.11
# Mod Properties # Mod Properties
mod_version = 0.2 mod_version = 0.2
maven_group = anticope.rejects maven_group = anticope.rejects
archives_base_name = meteor-rejects-addon archives_base_name = meteor-rejects-addon
meteor_version=0.5.1 meteor_version=0.5.2

View File

@@ -35,9 +35,12 @@ public class MeteorRejectsAddon extends MeteorAddon {
modules.add(new AntiBot()); modules.add(new AntiBot());
modules.add(new AntiSpawnpoint()); modules.add(new AntiSpawnpoint());
modules.add(new AntiVanish()); modules.add(new AntiVanish());
modules.add(new ArrowDmg());
modules.add(new AutoBedTrap()); modules.add(new AutoBedTrap());
modules.add(new AutoCraft()); modules.add(new AutoCraft());
modules.add(new AutoExtinguish()); modules.add(new AutoExtinguish());
modules.add(new AutoGrind());
modules.add(new AutoLogin());
modules.add(new AutoPot()); modules.add(new AutoPot());
modules.add(new AutoSoup()); modules.add(new AutoSoup());
modules.add(new AutoTNT()); modules.add(new AutoTNT());
@@ -84,7 +87,7 @@ public class MeteorRejectsAddon extends MeteorAddon {
commands.add(new GiveCommand()); commands.add(new GiveCommand());
commands.add(new HeadsCommand()); commands.add(new HeadsCommand());
commands.add(new KickCommand()); commands.add(new KickCommand());
// commands.add(new LocateCommand()); I wish it was that simple -_- commands.add(new LocateCommand());
commands.add(new PanicCommand()); commands.add(new PanicCommand());
commands.add(new ReconnectCommand()); commands.add(new ReconnectCommand());
commands.add(new ServerCommand()); commands.add(new ServerCommand());

View File

@@ -10,8 +10,8 @@ import net.minecraft.nbt.*;
import anticope.rejects.utils.GiveUtils; import anticope.rejects.utils.GiveUtils;
import meteordevelopment.meteorclient.systems.commands.Command; import meteordevelopment.meteorclient.systems.commands.Command;
import net.minecraft.registry.Registries;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.util.registry.Registry;
import static com.mojang.brigadier.Command.SINGLE_SUCCESS; import static com.mojang.brigadier.Command.SINGLE_SUCCESS;
@@ -34,7 +34,7 @@ public class GiveCommand extends Command {
ct.putInt("Time",1); ct.putInt("Time",1);
ct.putString("id", "minecraft:falling_block"); ct.putString("id", "minecraft:falling_block");
ct.put("BlockState", new NbtCompound()); ct.put("BlockState", new NbtCompound());
ct.getCompound("BlockState").putString("Name", Registry.ITEM.getId(inHand.getItem()).toString()); ct.getCompound("BlockState").putString("Name", Registries.ITEM.getId(inHand.getItem()).toString());
if (inHand.hasNbt() && inHand.getNbt().contains("BlockEntityTag")) { if (inHand.hasNbt() && inHand.getNbt().contains("BlockEntityTag")) {
ct.put("TileEntityData", inHand.getNbt().getCompound("BlockEntityTag")); ct.put("TileEntityData", inHand.getNbt().getCompound("BlockEntityTag"));
} }
@@ -44,7 +44,7 @@ public class GiveCommand extends Command {
} else { } else {
ct.putString("id", "minecraft:item"); ct.putString("id", "minecraft:item");
NbtCompound it = new NbtCompound(); NbtCompound it = new NbtCompound();
it.putString("id", Registry.ITEM.getId(inHand.getItem()).toString()); it.putString("id", Registries.ITEM.getId(inHand.getItem()).toString());
it.putInt("Count",inHand.getCount()); it.putInt("Count",inHand.getCount());
if (inHand.hasNbt()) { if (inHand.hasNbt()) {
it.put("tag", inHand.getNbt()); it.put("tag", inHand.getNbt());

View File

@@ -1,26 +1,13 @@
package anticope.rejects.commands; package anticope.rejects.commands;
import anticope.rejects.arguments.EnumArgumentType; import anticope.rejects.arguments.EnumArgumentType;
import baritone.api.BaritoneAPI; import anticope.rejects.utils.WorldGenUtils;
import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import com.mojang.brigadier.exceptions.DynamicCommandExceptionType; import com.mojang.brigadier.exceptions.DynamicCommandExceptionType;
import meteordevelopment.meteorclient.MeteorClient;
import meteordevelopment.meteorclient.events.packets.PacketEvent;
import meteordevelopment.meteorclient.systems.commands.Command; import meteordevelopment.meteorclient.systems.commands.Command;
import meteordevelopment.meteorclient.utils.Utils; import meteordevelopment.meteorclient.utils.Utils;
import meteordevelopment.meteorclient.utils.player.ChatUtils; import meteordevelopment.meteorclient.utils.player.ChatUtils;
import meteordevelopment.meteorclient.utils.player.FindItemResult;
import meteordevelopment.meteorclient.utils.player.InvUtils;
import anticope.rejects.utils.WorldGenUtils;
import meteordevelopment.orbit.EventHandler;
import net.minecraft.command.CommandSource; import net.minecraft.command.CommandSource;
import net.minecraft.entity.EntityType;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.nbt.NbtCompound;
import net.minecraft.network.packet.s2c.play.EntitySpawnS2CPacket;
import net.minecraft.network.packet.s2c.play.PlaySoundS2CPacket;
import net.minecraft.sound.SoundEvents;
import net.minecraft.text.MutableText; import net.minecraft.text.MutableText;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
@@ -40,43 +27,13 @@ public class LocateCommand extends Command {
return Text.literal("Not found."); return Text.literal("Not found.");
}); });
private Vec3d firstStart;
private Vec3d firstEnd;
private Vec3d secondStart;
private Vec3d secondEnd;
public LocateCommand() { public LocateCommand() {
super("locate", "Locates structures", "loc"); super("locate", "Locates structures.", "loc");
} }
@Override @Override
public void build(LiteralArgumentBuilder<CommandSource> builder) { public void build(LiteralArgumentBuilder<CommandSource> builder) {
builder.then(literal("lodestone").executes(ctx -> { builder.then(literal("feature").then(argument("feature", EnumArgumentType.enumArgument(WorldGenUtils.Feature.stronghold)).executes(ctx -> {
ItemStack stack = mc.player.getInventory().getMainHandStack();
if (stack.getItem() != Items.COMPASS) {
error("You need to hold a lodestone compass");
return SINGLE_SUCCESS;
}
NbtCompound tag = stack.getNbt();
if (tag == null) {
error("Couldn't get the NBT data. Are you holding a (highlight)lodestone(default) compass?");
return SINGLE_SUCCESS;
}
NbtCompound nbt1 = tag.getCompound("LodestonePos");
if (nbt1 == null) {
error("Couldn't get the NBT data. Are you holding a (highlight)lodestone(default) compass?");
return SINGLE_SUCCESS;
}
Vec3d coords = new Vec3d(nbt1.getDouble("X"),nbt1.getDouble("Y"),nbt1.getDouble("Z"));
MutableText text = Text.literal("Lodestone located at ");
text.append(ChatUtils.formatCoords(coords));
text.append(".");
info(text);
return SINGLE_SUCCESS;
}));
builder.then(argument("feature", EnumArgumentType.enumArgument(WorldGenUtils.Feature.stronghold)).executes(ctx -> {
WorldGenUtils.Feature feature = EnumArgumentType.getEnum(ctx, "feature", WorldGenUtils.Feature.stronghold); WorldGenUtils.Feature feature = EnumArgumentType.getEnum(ctx, "feature", WorldGenUtils.Feature.stronghold);
BlockPos pos = WorldGenUtils.locateFeature(feature, mc.player.getBlockPos()); BlockPos pos = WorldGenUtils.locateFeature(feature, mc.player.getBlockPos());
if (pos != null) { if (pos != null) {
@@ -90,105 +47,7 @@ public class LocateCommand extends Command {
info(text); info(text);
return SINGLE_SUCCESS; return SINGLE_SUCCESS;
} }
if (feature == WorldGenUtils.Feature.stronghold) {
FindItemResult eye = InvUtils.findInHotbar(Items.ENDER_EYE);
if (eye.found()) {
BaritoneAPI.getProvider().getPrimaryBaritone().getCommandManager().execute("follow entity minecraft:eye_of_ender");
firstStart = null;
firstEnd = null;
secondStart = null;
secondEnd = null;
MeteorClient.EVENT_BUS.subscribe(this);
info("Please throw the first Eye of Ender");
}
}
throw NOT_FOUND.create(feature); throw NOT_FOUND.create(feature);
})); })));
builder.then(literal("cancel").executes(s -> {
cancel();
return SINGLE_SUCCESS;
}));
}
private void cancel() {
warning("Locate canceled");
MeteorClient.EVENT_BUS.unsubscribe(this);
}
@EventHandler
private void onReadPacket(PacketEvent.Receive event) {
if (event.packet instanceof EntitySpawnS2CPacket) {
EntitySpawnS2CPacket packet = (EntitySpawnS2CPacket) event.packet;
if (packet.getEntityTypeId() == EntityType.EYE_OF_ENDER) {
firstPosition(packet.getX(),packet.getY(),packet.getZ());
}
}
if (event.packet instanceof PlaySoundS2CPacket) {
PlaySoundS2CPacket packet = (PlaySoundS2CPacket) event.packet;
if (packet.getSound() == SoundEvents.ENTITY_ENDER_EYE_DEATH) {
lastPosition(packet.getX(), packet.getY(), packet.getZ());
}
}
}
private void firstPosition(double x, double y, double z) {
Vec3d pos = new Vec3d(x, y, z);
if (this.firstStart == null) {
this.firstStart = pos;
}
else {
this.secondStart = pos;
}
}
private void lastPosition(double x, double y, double z) {
info("%s Eye of Ender's trajectory saved.", (this.firstEnd == null) ? "First" : "Second");
Vec3d pos = new Vec3d(x, y, z);
if (this.firstEnd == null) {
this.firstEnd = pos;
info("Please throw the second Eye Of Ender from a different location.");
}
else {
this.secondEnd = pos;
findStronghold();
}
}
private void findStronghold() {
if (this.firstStart == null || this.firstEnd == null || this.secondStart == null || this.secondEnd == null) {
error("Missing position data");
cancel();
return;
}
final double[] start = new double[]{this.secondStart.x, this.secondStart.z, this.secondEnd.x, this.secondEnd.z};
final double[] end = new double[]{this.firstStart.x, this.firstStart.z, this.firstEnd.x, this.firstEnd.z};
final double[] intersection = calcIntersection(start, end);
if (Double.isNaN(intersection[0]) || Double.isNaN(intersection[1]) || Double.isInfinite(intersection[0]) || Double.isInfinite(intersection[1])) {
error("Lines are parallel");
cancel();
return;
}
BaritoneAPI.getProvider().getPrimaryBaritone().getCommandManager().execute("stop");
MeteorClient.EVENT_BUS.unsubscribe(this);
Vec3d coords = new Vec3d(intersection[0],0,intersection[1]);
MutableText text = Text.literal("Stronghold roughly located at ");
text.append(ChatUtils.formatCoords(coords));
text.append(".");
info(text);
}
private double[] calcIntersection(double[] line, double[] line2) {
final double a1 = line[3] - line[1];
final double b1 = line[0] - line[2];
final double c1 = a1 * line[0] + b1 * line[1];
final double a2 = line2[3] - line2[1];
final double b2 = line2[0] - line2[2];
final double c2 = a2 * line2[0] + b2 * line2[1];
final double delta = a1 * b2 - a2 * b1;
return new double[]{(b2 * c1 - b1 * c2) / delta, (a1 * c2 - a2 * c1) / delta};
} }
} }

View File

@@ -0,0 +1,14 @@
package anticope.rejects.events;
import net.minecraft.item.ItemStack;
public class StopUsingItemEvent {
private static final StopUsingItemEvent INSTANCE = new StopUsingItemEvent();
public ItemStack itemStack;
public static StopUsingItemEvent get(ItemStack itemStack) {
INSTANCE.itemStack = itemStack;
return INSTANCE;
}
}

View File

@@ -3,7 +3,6 @@ package anticope.rejects.gui.hud;
import java.util.Iterator; import java.util.Iterator;
import anticope.rejects.MeteorRejectsAddon; import anticope.rejects.MeteorRejectsAddon;
import meteordevelopment.meteorclient.systems.hud.Hud;
import meteordevelopment.meteorclient.systems.hud.HudElementInfo; import meteordevelopment.meteorclient.systems.hud.HudElementInfo;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityType; import net.minecraft.entity.EntityType;
@@ -23,7 +22,6 @@ import meteordevelopment.meteorclient.systems.modules.Modules;
import meteordevelopment.meteorclient.systems.modules.render.ESP; import meteordevelopment.meteorclient.systems.modules.render.ESP;
import meteordevelopment.meteorclient.systems.waypoints.Waypoint; import meteordevelopment.meteorclient.systems.waypoints.Waypoint;
import meteordevelopment.meteorclient.systems.waypoints.Waypoints; import meteordevelopment.meteorclient.systems.waypoints.Waypoints;
import meteordevelopment.meteorclient.utils.misc.Vec3;
import meteordevelopment.meteorclient.utils.render.color.SettingColor; import meteordevelopment.meteorclient.utils.render.color.SettingColor;
import static meteordevelopment.meteorclient.MeteorClient.mc; import static meteordevelopment.meteorclient.MeteorClient.mc;
@@ -118,8 +116,7 @@ public class RadarHud extends HudElement {
while (waypoints.hasNext()) { while (waypoints.hasNext()) {
Waypoint waypoint = waypoints.next(); Waypoint waypoint = waypoints.next();
BlockPos blockPos = waypoint.getPos(); BlockPos blockPos = waypoint.getPos();
Vec3 c = new Vec3(blockPos.getX() + 0.5, blockPos.getY(), blockPos.getZ() + 0.5); Vec3d coords = new Vec3d(blockPos.getX() + 0.5, blockPos.getY(), blockPos.getZ() + 0.5);
Vec3d coords = new Vec3d(c.x, c.y, c.z);
double xPos = ((coords.getX() - mc.player.getX()) * scale.get() * zoom.get() + width/2); double xPos = ((coords.getX() - mc.player.getX()) * scale.get() * zoom.get() + width/2);
double yPos = ((coords.getZ() - mc.player.getZ()) * scale.get() * zoom.get() + height/2); double yPos = ((coords.getZ() - mc.player.getZ()) * scale.get() * zoom.get() + height/2);
if (xPos < 0 || yPos < 0 || xPos > width - scale.get() || yPos > height - scale.get()) continue; if (xPos < 0 || yPos < 0 || xPos > width - scale.get() || yPos > height - scale.get()) continue;

View File

@@ -10,10 +10,8 @@ import meteordevelopment.meteorclient.systems.modules.Modules;
import meteordevelopment.meteorclient.utils.misc.MeteorStarscript; import meteordevelopment.meteorclient.utils.misc.MeteorStarscript;
import meteordevelopment.meteorclient.utils.render.PeekScreen; import meteordevelopment.meteorclient.utils.render.PeekScreen;
import meteordevelopment.orbit.EventHandler; import meteordevelopment.orbit.EventHandler;
import meteordevelopment.starscript.Script;
import meteordevelopment.starscript.compiler.Compiler; import meteordevelopment.starscript.compiler.Compiler;
import meteordevelopment.starscript.compiler.Parser; import meteordevelopment.starscript.compiler.Parser;
import meteordevelopment.starscript.compiler.Parser.Result;
import meteordevelopment.starscript.utils.Error; import meteordevelopment.starscript.utils.Error;
import meteordevelopment.starscript.utils.StarscriptError; import meteordevelopment.starscript.utils.StarscriptError;
@@ -42,6 +40,7 @@ import org.lwjgl.glfw.GLFW;
import java.awt.*; import java.awt.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map;
import java.util.function.Consumer; import java.util.function.Consumer;
/* /*
@@ -55,8 +54,8 @@ public class InteractionScreen extends Screen {
private String focusedString = null; private String focusedString = null;
private int crosshairX, crosshairY, focusedDot = -1; private int crosshairX, crosshairY, focusedDot = -1;
private float yaw, pitch; private float yaw, pitch;
private final HashMap<String, Consumer<Entity>> functions; private final Map<String, Consumer<Entity>> functions;
private final HashMap<String, String> msgs; private final Map<String, String> msgs;
private final StaticListener shiftListener = new StaticListener(); private final StaticListener shiftListener = new StaticListener();
@@ -146,7 +145,7 @@ public class InteractionScreen extends Screen {
closeScreen(); closeScreen();
}); });
} }
msgs = Modules.get().get(InteractionMenu.class).messages; msgs = Modules.get().get(InteractionMenu.class).messages.get();
msgs.keySet().forEach((key) -> { msgs.keySet().forEach((key) -> {
functions.put(key, (Entity e) -> { functions.put(key, (Entity e) -> {
closeScreen(); closeScreen();
@@ -242,7 +241,7 @@ public class InteractionScreen extends Screen {
public void render(MatrixStack matrix, int mouseX, int mouseY, float delta) { public void render(MatrixStack matrix, int mouseX, int mouseY, float delta) {
// Fake crosshair stuff // Fake crosshair stuff
RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F);
RenderSystem.setShader(GameRenderer::getPositionTexShader); RenderSystem.setShader(GameRenderer::getPositionTexProgram);
RenderSystem.setShaderTexture(0, GUI_ICONS_TEXTURE); RenderSystem.setShaderTexture(0, GUI_ICONS_TEXTURE);
RenderSystem.enableBlend(); RenderSystem.enableBlend();
RenderSystem.blendFuncSeparate(GlStateManager.SrcFactor.ONE_MINUS_DST_COLOR, RenderSystem.blendFuncSeparate(GlStateManager.SrcFactor.ONE_MINUS_DST_COLOR,

View File

@@ -0,0 +1,18 @@
package anticope.rejects.mixin;
import anticope.rejects.events.StopUsingItemEvent;
import meteordevelopment.meteorclient.MeteorClient;
import net.minecraft.client.network.ClientPlayerInteractionManager;
import net.minecraft.entity.player.PlayerEntity;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(ClientPlayerInteractionManager.class)
public class ClientPlayerInteractionManagerMixin {
@Inject(at = @At("HEAD"), method = "stopUsingItem")
public void onStopUsingItem(PlayerEntity player, CallbackInfo ci) {
MeteorClient.EVENT_BUS.post(StopUsingItemEvent.get(player.getInventory().getMainHandStack()));
}
}

View File

@@ -3,26 +3,26 @@ package anticope.rejects.mixin;
import anticope.rejects.modules.Rendering; import anticope.rejects.modules.Rendering;
import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.Modules;
import net.minecraft.client.gl.PostEffectProcessor;
import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.*; import org.spongepowered.asm.mixin.injection.*;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gl.ShaderEffect;
import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.GameRenderer;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(GameRenderer.class) @Mixin(GameRenderer.class)
public class GameRendererMixin { public class GameRendererMixin {
@Shadow @Final private MinecraftClient client; @Shadow @Final MinecraftClient client;
@Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;drawEntityOutlinesFramebuffer()V", ordinal = 0)) @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;drawEntityOutlinesFramebuffer()V", ordinal = 0))
private void renderShader(float tickDelta, long startTime, boolean tick, CallbackInfo ci) { private void renderShader(float tickDelta, long startTime, boolean tick, CallbackInfo ci) {
Rendering renderingModule = Modules.get().get(Rendering.class); Rendering renderingModule = Modules.get().get(Rendering.class);
if (renderingModule == null) return; if (renderingModule == null) return;
ShaderEffect shader = renderingModule.getShaderEffect(); PostEffectProcessor shader = renderingModule.getShaderEffect();
if (shader != null) { if (shader != null) {
shader.setupDimensions(client.getWindow().getFramebufferWidth(), client.getWindow().getFramebufferHeight()); shader.setupDimensions(client.getWindow().getFramebufferWidth(), client.getWindow().getFramebufferHeight());

View File

@@ -6,9 +6,9 @@ import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment; import net.fabricmc.api.Environment;
import net.minecraft.client.render.entity.LivingEntityRenderer; import net.minecraft.client.render.entity.LivingEntityRenderer;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.util.math.Vec3f;
import net.minecraft.entity.LivingEntity; import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.math.RotationAxis;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
@@ -24,7 +24,7 @@ public class LivingEntityRendererMixin {
if (renderingModule == null) return; if (renderingModule == null) return;
if ((!(entity instanceof PlayerEntity)) && renderingModule.dinnerboneEnabled()) { if ((!(entity instanceof PlayerEntity)) && renderingModule.dinnerboneEnabled()) {
matrices.translate(0.0D, entity.getHeight() + 0.1F, 0.0D); matrices.translate(0.0D, entity.getHeight() + 0.1F, 0.0D);
matrices.multiply(Vec3f.POSITIVE_Z.getDegreesQuaternion(180.0F)); matrices.multiply(RotationAxis.POSITIVE_Z.rotationDegrees(180.0F));
} }
} }

View File

@@ -19,8 +19,9 @@ public abstract class MultiplayerScreenMixin extends Screen {
@Inject(method = "init", at = @At("TAIL")) @Inject(method = "init", at = @At("TAIL"))
private void onInit(CallbackInfo info) { private void onInit(CallbackInfo info) {
addDrawableChild(new ButtonWidget(this.width - 75 - 3 - 75 - 2 - 75 - 2, 3, 75, 20, Text.literal("Servers"), button -> { addDrawableChild(new ButtonWidget.Builder(Text.literal("Servers"), button -> client.setScreen(new ServerManagerScreen(GuiThemes.get(), (MultiplayerScreen) (Object) this)))
client.setScreen(new ServerManagerScreen(GuiThemes.get(), (MultiplayerScreen) (Object) this)); .size(75, 20)
})); .position(this.width - 75 - 3 - 75 - 2 - 75 - 2, 3)
.build());
} }
} }

View File

@@ -1,49 +0,0 @@
package anticope.rejects.mixin.meteor;
import anticope.rejects.commands.LocateCommand;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import meteordevelopment.meteorclient.systems.commands.Command;
import meteordevelopment.meteorclient.systems.commands.Commands;
import com.mojang.brigadier.CommandDispatcher;
import net.minecraft.command.CommandSource;
import java.util.List;
import java.util.Map;
@Mixin(Commands.class)
public class CommandsMixin {
@Shadow(remap = false)
@Final
private List<Command> commands;
@Shadow(remap = false)
@Final
private Map<Class<? extends Command>, Command> commandInstances;
@Shadow(remap = false)
@Final
private CommandDispatcher<CommandSource> DISPATCHER;
@Inject(method = "add", at=@At("HEAD"), remap = false, cancellable = true)
private void onAdd(Command cmd, CallbackInfo ci) {
if (cmd instanceof meteordevelopment.meteorclient.systems.commands.commands.LocateCommand) {
Command command = new LocateCommand();
commands.removeIf(command1 -> command1.getName().equals(command.getName()));
commandInstances.values().removeIf(command1 -> command1.getName().equals(command.getName()));
command.registerTo(DISPATCHER);
commands.add(command);
commandInstances.put(command.getClass(), command);
ci.cancel();
}
}
}

View File

@@ -0,0 +1,22 @@
package anticope.rejects.mixin.meteor;
import anticope.rejects.settings.RejectsSettings;
import meteordevelopment.meteorclient.gui.DefaultSettingsWidgetFactory;
import meteordevelopment.meteorclient.gui.GuiTheme;
import meteordevelopment.meteorclient.gui.utils.SettingsWidgetFactory;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(DefaultSettingsWidgetFactory.class)
public abstract class DefaultSettingsWidgetFactoryMixin extends SettingsWidgetFactory {
public DefaultSettingsWidgetFactoryMixin(GuiTheme theme) {
super(theme);
}
@Inject(method = "<init>", at = @At("TAIL"), remap = false)
private void onInit(GuiTheme theme, CallbackInfo ci) {
new RejectsSettings(factories, this.theme).addSettings();
}
}

View File

@@ -14,9 +14,9 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(Module.class) @Mixin(Module.class)
public class ModuleMixin { public class ModuleMixin {
@Mutable @Shadow public String name; @Mutable @Shadow(remap = false) public String name;
@Mutable @Shadow public String title; @Mutable @Shadow(remap = false) public String title;
@Inject(method = "<init>", at = @At("TAIL"), remap = false) @Inject(method = "<init>", at = @At("TAIL"), remap = false)
private void onInit(Category category, String name, String description, CallbackInfo info) { private void onInit(Category category, String name, String description, CallbackInfo info) {

View File

@@ -37,14 +37,13 @@ public class AntiVanish extends Module {
@EventHandler @EventHandler
public void onPacket(PacketEvent.Receive event) { public void onPacket(PacketEvent.Receive event) {
if (event.packet instanceof PlayerListS2CPacket) { if (event.packet instanceof PlayerListS2CPacket packet) {
PlayerListS2CPacket packet = (PlayerListS2CPacket) event.packet; if (packet.getActions().contains(PlayerListS2CPacket.Action.UPDATE_LATENCY)) {
if (packet.getAction() == PlayerListS2CPacket.Action.UPDATE_LATENCY) {
try { try {
for (PlayerListS2CPacket.Entry entry : packet.getEntries()) { for (PlayerListS2CPacket.Entry entry : packet.getEntries()) {
if (mc.getNetworkHandler().getPlayerListEntry(entry.getProfile().getId()) != null) if (mc.getNetworkHandler().getPlayerListEntry(entry.profileId()) != null)
continue; continue;
toLookup.add(entry.getProfile().getId()); toLookup.add(entry.profileId());
} }
} catch (Exception ignore) {} } catch (Exception ignore) {}
} }

View File

@@ -0,0 +1,66 @@
package anticope.rejects.modules;
import anticope.rejects.MeteorRejectsAddon;
import anticope.rejects.events.StopUsingItemEvent;
import meteordevelopment.meteorclient.settings.BoolSetting;
import meteordevelopment.meteorclient.settings.IntSetting;
import meteordevelopment.meteorclient.settings.Setting;
import meteordevelopment.meteorclient.settings.SettingGroup;
import meteordevelopment.meteorclient.systems.modules.Module;
import meteordevelopment.orbit.EventHandler;
import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.item.Item;
import net.minecraft.item.Items;
import net.minecraft.network.packet.c2s.play.ClientCommandC2SPacket;
import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket;
public class ArrowDmg extends Module {
private final SettingGroup sgGeneral = settings.getDefaultGroup();
public final Setting<Integer> packets = sgGeneral.add(new IntSetting.Builder()
.name("packets")
.description("Amount of packets to send. More packets = higher damage.")
.defaultValue(200)
.min(2)
.sliderMax(2000)
.build()
);
public final Setting<Boolean> tridents = sgGeneral.add(new BoolSetting.Builder()
.name("tridents")
.description("When enabled, tridents fly much further. Doesn't seem to affect damage or Riptide. WARNING: You can easily lose your trident by enabling this option!")
.defaultValue(false)
.build()
);
public ArrowDmg() {
super(MeteorRejectsAddon.CATEGORY, "arrow-damage", "Massively increases arrow damage, but also consumes a lot of hunger and reduces accuracy. Does not work with crossbows and seems to be patched on Paper servers.");
}
@EventHandler
private void onStopUsingItem(StopUsingItemEvent event) {
if (!isValidItem(event.itemStack.getItem()))
return;
ClientPlayerEntity p = mc.player;
p.networkHandler.sendPacket(
new ClientCommandC2SPacket(p, ClientCommandC2SPacket.Mode.START_SPRINTING));
double x = p.getX();
double y = p.getY();
double z = p.getZ();
for (int i = 0; i < packets.get() / 2; i++) {
p.networkHandler.sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(x,
y - 1e-10, z, true));
p.networkHandler.sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(x,
y + 1e-10, z, false));
}
}
private boolean isValidItem(Item item) {
return tridents.get() && item == Items.TRIDENT || item == Items.BOW;
}
}

View File

@@ -17,11 +17,11 @@ import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.Items; import net.minecraft.item.Items;
import net.minecraft.network.packet.c2s.play.PlayerActionC2SPacket; import net.minecraft.network.packet.c2s.play.PlayerActionC2SPacket;
import net.minecraft.registry.Registries;
import net.minecraft.util.Hand; import net.minecraft.util.Hand;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction; import net.minecraft.util.math.Direction;
import net.minecraft.util.registry.Registry;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
@@ -83,7 +83,7 @@ public class AutoExtinguish extends Module {
private BlockPos blockPos = null; private BlockPos blockPos = null;
private boolean doesWaterBucketWork = true; private boolean doesWaterBucketWork = true;
private static final StatusEffect FIRE_RESISTANCE = Registry.STATUS_EFFECT.get(new Identifier("fire_resistance")); private static final StatusEffect FIRE_RESISTANCE = Registries.STATUS_EFFECT.get(new Identifier("fire_resistance"));
public AutoExtinguish() { public AutoExtinguish() {
super(MeteorRejectsAddon.CATEGORY, "auto-extinguish", "Automatically extinguishes fire around you"); super(MeteorRejectsAddon.CATEGORY, "auto-extinguish", "Automatically extinguishes fire around you");

View File

@@ -0,0 +1,94 @@
/*
* This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client).
* Copyright (c) Meteor Development.
*/
package anticope.rejects.modules;
import anticope.rejects.MeteorRejectsAddon;
import meteordevelopment.meteorclient.events.game.OpenScreenEvent;
import meteordevelopment.meteorclient.settings.*;
import meteordevelopment.meteorclient.systems.modules.Module;
import meteordevelopment.meteorclient.utils.network.MeteorExecutor;
import meteordevelopment.meteorclient.utils.player.InvUtils;
import meteordevelopment.orbit.EventHandler;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.screen.GrindstoneScreenHandler;
import java.util.List;
import java.util.Map;
public class AutoGrind extends Module {
private final SettingGroup sgGeneral = settings.getDefaultGroup();
private final Setting<Integer> delay = sgGeneral.add(new IntSetting.Builder()
.name("delay")
.description("The tick delay between grinding items.")
.defaultValue(50)
.sliderMax(500)
.min(0)
.build()
);
private final Setting<List<Item>> itemBlacklist = sgGeneral.add(new ItemListSetting.Builder()
.name("item-blacklist")
.description("Items that should be ignored.")
.defaultValue()
.filter(Item::isDamageable)
.build()
);
private final Setting<List<Enchantment>> enchantmentBlacklist = sgGeneral.add(new EnchantmentListSetting.Builder()
.name("enchantment-blacklist")
.description("Enchantments that should be ignored.")
.defaultValue()
.build()
);
public AutoGrind() {
super(MeteorRejectsAddon.CATEGORY, "auto-grind", "Automatically disenchants items.");
}
@EventHandler
private void onOpenScreen(OpenScreenEvent event) {
if (!(mc.player.currentScreenHandler instanceof GrindstoneScreenHandler))
return;
MeteorExecutor.execute(() -> {
for (int i = 0; i <= mc.player.getInventory().size(); i++) {
if (canGrind(mc.player.getInventory().getStack(i))) {
try {
Thread.sleep(delay.get());
} catch (InterruptedException e) {
e.printStackTrace();
}
if (mc.currentScreen == null) break;
InvUtils.quickMove().slot(i);
InvUtils.move().fromId(2).to(i);
}
}
});
}
private boolean canGrind(ItemStack stack) {
if (itemBlacklist.get().contains(stack.getItem())) return false;
Map<Enchantment, Integer> enchantments = EnchantmentHelper.get(stack);
int availEnchs = 0;
for (Enchantment enchantment : enchantments.keySet()) {
availEnchs++;
if (enchantment.isCursed())
availEnchs--;
if (enchantmentBlacklist.get().contains(enchantment))
return false;
}
return enchantments.size() > 0 && availEnchs > 0;
}
}

View File

@@ -0,0 +1,110 @@
/*
* This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client).
* Copyright (c) Meteor Development.
*/
package anticope.rejects.modules;
import anticope.rejects.MeteorRejectsAddon;
import anticope.rejects.settings.StringMapSetting;
import anticope.rejects.utils.RejectsUtils;
import meteordevelopment.meteorclient.MeteorClient;
import meteordevelopment.meteorclient.events.game.GameJoinedEvent;
import meteordevelopment.meteorclient.events.packets.PacketEvent;
import meteordevelopment.meteorclient.gui.GuiTheme;
import meteordevelopment.meteorclient.gui.widgets.WWidget;
import meteordevelopment.meteorclient.gui.widgets.containers.WHorizontalList;
import meteordevelopment.meteorclient.gui.widgets.pressable.WButton;
import meteordevelopment.meteorclient.settings.BoolSetting;
import meteordevelopment.meteorclient.settings.IntSetting;
import meteordevelopment.meteorclient.settings.Setting;
import meteordevelopment.meteorclient.settings.SettingGroup;
import meteordevelopment.meteorclient.systems.modules.Module;
import meteordevelopment.meteorclient.utils.Utils;
import meteordevelopment.meteorclient.utils.player.ChatUtils;
import meteordevelopment.orbit.EventHandler;
import net.minecraft.network.packet.c2s.play.CommandExecutionC2SPacket;
import net.minecraft.text.ClickEvent;
import net.minecraft.text.MutableText;
import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
import java.util.*;
public class AutoLogin extends Module {
private final SettingGroup sgGeneral = settings.getDefaultGroup();
private final Setting<Integer> delay = sgGeneral.add(new IntSetting.Builder()
.name("delay")
.description("Delay in ms before executing the command.")
.defaultValue(1000)
.min(0)
.sliderMax(10000)
.build()
);
private final Setting<Boolean> smart = sgGeneral.add(new BoolSetting.Builder()
.name("smart")
.description("Auto add the entries.")
.defaultValue(false)
.build()
);
private final Setting<Map<String, String>> commands = sgGeneral.add(new StringMapSetting.Builder()
.name("commands")
.description("Server and commands. (* for universal)")
.defaultValue(new LinkedHashMap<>() {{
put("localhost", "/login 123456");
}})
.build()
);
private final Timer timer = new Timer();
public AutoLogin() {
super(MeteorRejectsAddon.CATEGORY, "auto-login", "Runs command when joining specified server.");
MeteorClient.EVENT_BUS.subscribe(new Listener());
}
@Override
public WWidget getWidget(GuiTheme theme) {
WHorizontalList l = theme.horizontalList();
WButton btn = l.add(theme.button("Random generate password")).widget();
btn.action = () -> {
String password = RejectsUtils.getRandomPassword(16);
MutableText text = Text.literal(Formatting.BOLD + "Click here to register securely.");
text.setStyle(text.getStyle().withClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, String.format("/register %s %s", password, password))));
info(text);
};
return l;
}
private class Listener {
@EventHandler
private void onGameJoined(GameJoinedEvent event) {
String command = commands.get().getOrDefault("*", commands.get().get(Utils.getWorldName()));
if (command != null) {
timer.schedule(new TimerTask() {
@Override
public void run() {
if (mc.player != null) ChatUtils.sendPlayerMsg(command);
}
}, delay.get());
}
}
}
@EventHandler
private void onPacketSent(PacketEvent.Send event) {
if (!smart.get()) return;
if (event.packet instanceof CommandExecutionC2SPacket packet) {
String command = packet.command();
List<String> hint = Arrays.asList("reg", "register", "l", "login", "log");
String[] cmds = command.split(" ");
if (cmds.length >= 2 && hint.contains(cmds[0])) {
commands.get().put(Utils.getWorldName(), "/login " + cmds[1]);
}
}
}
}

View File

@@ -1,43 +1,27 @@
package anticope.rejects.modules; package anticope.rejects.modules;
import java.util.HashMap;
import anticope.rejects.MeteorRejectsAddon; import anticope.rejects.MeteorRejectsAddon;
import meteordevelopment.meteorclient.gui.utils.StarscriptTextBoxRenderer; import anticope.rejects.settings.StringMapSetting;
import meteordevelopment.meteorclient.utils.player.ChatUtils;
import net.minecraft.nbt.NbtCompound;
import net.minecraft.nbt.NbtString;
import net.minecraft.network.packet.c2s.play.ChatMessageC2SPacket;
import meteordevelopment.meteorclient.events.game.ReceiveMessageEvent; import meteordevelopment.meteorclient.events.game.ReceiveMessageEvent;
import meteordevelopment.meteorclient.gui.GuiTheme; import meteordevelopment.meteorclient.gui.utils.StarscriptTextBoxRenderer;
import meteordevelopment.meteorclient.gui.widgets.WWidget;
import meteordevelopment.meteorclient.gui.widgets.containers.WTable;
import meteordevelopment.meteorclient.gui.widgets.input.WTextBox;
import meteordevelopment.meteorclient.gui.widgets.pressable.WMinus;
import meteordevelopment.meteorclient.gui.widgets.pressable.WPlus;
import meteordevelopment.meteorclient.settings.BoolSetting; import meteordevelopment.meteorclient.settings.BoolSetting;
import meteordevelopment.meteorclient.settings.Setting; import meteordevelopment.meteorclient.settings.Setting;
import meteordevelopment.meteorclient.settings.SettingGroup; import meteordevelopment.meteorclient.settings.SettingGroup;
import meteordevelopment.meteorclient.settings.StringSetting; import meteordevelopment.meteorclient.settings.StringSetting;
import meteordevelopment.meteorclient.systems.modules.Module; import meteordevelopment.meteorclient.systems.modules.Module;
import meteordevelopment.meteorclient.utils.misc.MeteorStarscript; import meteordevelopment.meteorclient.utils.misc.MeteorStarscript;
import meteordevelopment.meteorclient.utils.player.ChatUtils;
import meteordevelopment.orbit.EventHandler; import meteordevelopment.orbit.EventHandler;
import meteordevelopment.starscript.Script; import meteordevelopment.starscript.Script;
import meteordevelopment.starscript.compiler.Compiler; import meteordevelopment.starscript.compiler.Compiler;
import meteordevelopment.starscript.compiler.Parser; import meteordevelopment.starscript.compiler.Parser;
import meteordevelopment.starscript.utils.StarscriptError; import meteordevelopment.starscript.utils.StarscriptError;
import net.minecraft.text.Text;
import java.util.LinkedHashMap;
import java.util.Map;
public class ChatBot extends Module { public class ChatBot extends Module {
public final HashMap<String, String> commands = new HashMap<>() {{
put("ping", "Pong!");
put("tps", "Current TPS: {server.tps}");
put("time", "It's currently {server.time}");
put("pos", "I am @ {player.pos}");
}};
private final SettingGroup sgGeneral = settings.getDefaultGroup(); private final SettingGroup sgGeneral = settings.getDefaultGroup();
private final Setting<String> prefix = sgGeneral.add(new StringSetting.Builder() private final Setting<String> prefix = sgGeneral.add(new StringSetting.Builder()
@@ -54,23 +38,33 @@ public class ChatBot extends Module {
.build() .build()
); );
private final Setting<Map<String, String>> commands = sgGeneral.add(new StringMapSetting.Builder()
.name("commands")
.description("Commands.")
.renderer(StarscriptTextBoxRenderer.class)
.defaultValue(new LinkedHashMap<>() {{
put("ping", "Pong!");
put("tps", "Current TPS: {server.tps}");
put("time", "It's currently {server.time}");
put("pos", "I am @ {player.pos}");
}})
.build()
);
public ChatBot() { public ChatBot() {
super(MeteorRejectsAddon.CATEGORY, "chat-bot", "Bot which automatically responds to chat messages."); super(MeteorRejectsAddon.CATEGORY, "chat-bot", "Bot which automatically responds to chat messages.");
} }
private String currMsgK = "", currMsgV = "";
@EventHandler @EventHandler
private void onMessageRecieve(ReceiveMessageEvent event) { private void onMessageRecieve(ReceiveMessageEvent event) {
String msg = event.getMessage().getString(); String msg = event.getMessage().getString();
if (help.get() && msg.endsWith(prefix.get()+"help")) { if (help.get() && msg.endsWith(prefix.get() + "help")) {
mc.player.sendMessage(Text.of("Avaliable commands: " + String.join(", ", commands.keySet())), false); ChatUtils.sendPlayerMsg("Available commands: " + String.join(", ", commands.get().keySet()));
// mc.getNetworkHandler().sendPacket(new ChatMessageC2SPacket("Avaliable commands: " + String.join(", ", commands.keySet())), );
return; return;
} }
for (String cmd : commands.keySet()) { for (String cmd : commands.get().keySet()) {
if (msg.endsWith(prefix.get()+cmd)) { if (msg.endsWith(prefix.get() + cmd)) {
Script script = compile(commands.get(cmd)); Script script = compile(commands.get().get(cmd));
if (script == null) ChatUtils.sendPlayerMsg("An error occurred"); if (script == null) ChatUtils.sendPlayerMsg("An error occurred");
try { try {
var section = MeteorStarscript.ss.run(script); var section = MeteorStarscript.ss.run(script);
@@ -84,71 +78,6 @@ public class ChatBot extends Module {
} }
} }
@Override
public WWidget getWidget(GuiTheme theme) {
WTable table = theme.table();
fillTable(theme, table);
return table;
}
private void fillTable(GuiTheme theme, WTable table) {
table.clear();
commands.keySet().forEach((key) -> {
table.add(theme.label(key)).expandCellX();
table.add(theme.label(commands.get(key))).expandCellX();
WMinus delete = table.add(theme.minus()).widget();
delete.action = () -> {
commands.remove(key);
fillTable(theme,table);
};
table.row();
});
WTextBox textBoxK = table.add(theme.textBox(currMsgK)).minWidth(100).expandX().widget();
textBoxK.action = () -> {
currMsgK = textBoxK.get();
};
WTextBox textBoxV = table.add(theme.textBox(currMsgV, (text1, c) -> true, StarscriptTextBoxRenderer.class)).minWidth(100).expandX().widget();
textBoxV.action = () -> {
currMsgV = textBoxV.get();
};
WPlus add = table.add(theme.plus()).widget();
add.action = () -> {
if (currMsgK != "" && currMsgV != "") {
commands.put(currMsgK, currMsgV);
currMsgK = ""; currMsgV = "";
fillTable(theme,table);
}
};
table.row();
}
@Override
public NbtCompound toTag() {
NbtCompound tag = super.toTag();
NbtCompound messTag = new NbtCompound();
commands.keySet().forEach((key) -> {
messTag.put(key, NbtString.of(commands.get(key)));
});
tag.put("commands", messTag);
return tag;
}
@Override
public Module fromTag(NbtCompound tag) {
commands.clear();
if (tag.contains("commands")) {
NbtCompound msgs = tag.getCompound("commands");
msgs.getKeys().forEach((key) -> {
commands.put(key, msgs.getString(key));
});
}
return super.fromTag(tag);
}
private static Script compile(String script) { private static Script compile(String script) {
if (script == null) return null; if (script == null) return null;
Parser.Result result = Parser.parse(script); Parser.Result result = Parser.parse(script);

View File

@@ -2,14 +2,9 @@ package anticope.rejects.modules;
import anticope.rejects.MeteorRejectsAddon; import anticope.rejects.MeteorRejectsAddon;
import anticope.rejects.gui.screens.InteractionScreen; import anticope.rejects.gui.screens.InteractionScreen;
import anticope.rejects.settings.StringMapSetting;
import it.unimi.dsi.fastutil.objects.Object2BooleanMap; import it.unimi.dsi.fastutil.objects.Object2BooleanMap;
import meteordevelopment.meteorclient.gui.GuiTheme;
import meteordevelopment.meteorclient.gui.utils.StarscriptTextBoxRenderer; import meteordevelopment.meteorclient.gui.utils.StarscriptTextBoxRenderer;
import meteordevelopment.meteorclient.gui.widgets.WWidget;
import meteordevelopment.meteorclient.gui.widgets.containers.WTable;
import meteordevelopment.meteorclient.gui.widgets.input.WTextBox;
import meteordevelopment.meteorclient.gui.widgets.pressable.WMinus;
import meteordevelopment.meteorclient.gui.widgets.pressable.WPlus;
import meteordevelopment.meteorclient.settings.*; import meteordevelopment.meteorclient.settings.*;
import meteordevelopment.meteorclient.systems.modules.Module; import meteordevelopment.meteorclient.systems.modules.Module;
import meteordevelopment.meteorclient.utils.Utils; import meteordevelopment.meteorclient.utils.Utils;
@@ -22,10 +17,8 @@ import net.minecraft.client.render.debug.DebugRenderer;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityType; import net.minecraft.entity.EntityType;
import net.minecraft.entity.LivingEntity; import net.minecraft.entity.LivingEntity;
import net.minecraft.nbt.NbtCompound;
import net.minecraft.nbt.NbtString;
import java.util.HashMap; import java.util.Map;
import java.util.Optional; import java.util.Optional;
public class InteractionMenu extends Module { public class InteractionMenu extends Module {
@@ -85,8 +78,12 @@ public class InteractionMenu extends Module {
.build() .build()
); );
public final HashMap<String, String> messages = new HashMap<>(); public final Setting<Map<String, String>> messages = sgGeneral.add(new StringMapSetting.Builder()
private String currMsgK = "", currMsgV = ""; .name("messages")
.description("Messages.")
.renderer(StarscriptTextBoxRenderer.class)
.build()
);
public InteractionMenu() { public InteractionMenu() {
super(MeteorRejectsAddon.CATEGORY, "interaction-menu", "An interaction screen when looking at an entity."); super(MeteorRejectsAddon.CATEGORY, "interaction-menu", "An interaction screen when looking at an entity.");
@@ -111,64 +108,6 @@ public class InteractionMenu extends Module {
} }
} }
@Override
public WWidget getWidget(GuiTheme theme) {
WTable table = theme.table();
fillTable(theme, table);
return table;
}
private void fillTable(GuiTheme theme, WTable table) {
table.clear();
messages.keySet().forEach((key) -> {
table.add(theme.label(key)).expandCellX();
table.add(theme.label(messages.get(key))).expandCellX();
WMinus delete = table.add(theme.minus()).widget();
delete.action = () -> {
messages.remove(key);
fillTable(theme, table);
};
table.row();
});
WTextBox textBoxK = table.add(theme.textBox(currMsgK)).minWidth(100).expandX().widget();
textBoxK.action = () -> currMsgK = textBoxK.get();
WTextBox textBoxV = table.add(theme.textBox(currMsgV, (text1, c) -> true, StarscriptTextBoxRenderer.class)).minWidth(100).expandX().widget();
textBoxV.action = () -> currMsgV = textBoxV.get();
WPlus add = table.add(theme.plus()).widget();
add.action = () -> {
if (!currMsgK.equals("") && !currMsgV.equals("")) {
messages.put(currMsgK, currMsgV);
currMsgK = "";
currMsgV = "";
fillTable(theme, table);
}
};
table.row();
}
@Override
public NbtCompound toTag() {
NbtCompound tag = super.toTag();
NbtCompound messTag = new NbtCompound();
messages.keySet().forEach((key) -> messTag.put(key, NbtString.of(messages.get(key))));
tag.put("messages", messTag);
return tag;
}
@Override
public Module fromTag(NbtCompound tag) {
messages.clear();
if (tag.contains("messages")) {
NbtCompound msgs = tag.getCompound("messages");
msgs.getKeys().forEach((key) -> messages.put(key, msgs.getString(key)));
}
return super.fromTag(tag);
}
private static Value wrap(Entity entity) { private static Value wrap(Entity entity) {
if (entity == null) { if (entity == null) {
return Value.map(new ValueMap() return Value.map(new ValueMap()

View File

@@ -11,9 +11,9 @@ import meteordevelopment.meteorclient.utils.player.InvUtils;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.Items; import net.minecraft.item.Items;
import net.minecraft.network.packet.c2s.play.CreativeInventoryActionC2SPacket; import net.minecraft.network.packet.c2s.play.CreativeInventoryActionC2SPacket;
import net.minecraft.registry.Registries;
import net.minecraft.registry.entry.RegistryEntry;
import net.minecraft.util.math.random.Random; import net.minecraft.util.math.random.Random;
import net.minecraft.util.registry.Registry;
import net.minecraft.util.registry.RegistryEntry;
public class ItemGenerator extends Module { public class ItemGenerator extends Module {
private final SettingGroup sgGeneral = settings.getDefaultGroup(); private final SettingGroup sgGeneral = settings.getDefaultGroup();
@@ -56,7 +56,7 @@ public class ItemGenerator extends Module {
int stacks = speed.get(); int stacks = speed.get();
int size = stackSize.get(); int size = stackSize.get();
for(int i = 9; i < 9 + stacks; i++) { for(int i = 9; i < 9 + stacks; i++) {
mc.player.networkHandler.sendPacket(new CreativeInventoryActionC2SPacket(i, new ItemStack(Registry.ITEM.getRandom(random).map(RegistryEntry::value).orElse(Items.DIRT), size))); mc.player.networkHandler.sendPacket(new CreativeInventoryActionC2SPacket(i, new ItemStack(Registries.ITEM.getRandom(random).map(RegistryEntry::value).orElse(Items.DIRT), size)));
} }
for(int i = 9; i < 9 + stacks; i++) { for(int i = 9; i < 9 + stacks; i++) {

View File

@@ -18,6 +18,7 @@ import meteordevelopment.meteorclient.settings.SettingGroup;
import meteordevelopment.meteorclient.systems.modules.Module; import meteordevelopment.meteorclient.systems.modules.Module;
import meteordevelopment.orbit.EventHandler; import meteordevelopment.orbit.EventHandler;
import net.minecraft.client.world.ClientWorld; import net.minecraft.client.world.ClientWorld;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.ChunkPos; import net.minecraft.util.math.ChunkPos;
@@ -25,11 +26,8 @@ import net.minecraft.util.math.Direction;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3d;
import net.minecraft.util.math.random.ChunkRandom; import net.minecraft.util.math.random.ChunkRandom;
import net.minecraft.util.registry.Registry;
import net.minecraft.world.Heightmap; import net.minecraft.world.Heightmap;
import net.minecraft.world.chunk.Chunk;
import net.minecraft.world.chunk.ChunkStatus; import net.minecraft.world.chunk.ChunkStatus;
//import net.minecraft.world.chunk.world.random.ChunkRandom;
import com.seedfinding.mccore.version.MCVersion; import com.seedfinding.mccore.version.MCVersion;
import java.util.ArrayList; import java.util.ArrayList;
@@ -37,7 +35,6 @@ import java.util.BitSet;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Random;
public class OreSim extends Module { public class OreSim extends Module {
@@ -282,7 +279,7 @@ public class OreSim extends Module {
long populationSeed = random.setPopulationSeed(worldSeed.seed, chunkX, chunkZ); long populationSeed = random.setPopulationSeed(worldSeed.seed, chunkX, chunkZ);
var optional = world.getBiomeAccess().getBiomeForNoiseGen(new BlockPos(chunkX, 0, chunkZ)).getKeyOrValue(); var optional = world.getBiomeAccess().getBiomeForNoiseGen(new BlockPos(chunkX, 0, chunkZ)).getKeyOrValue();
Identifier id = (optional.right().isPresent()) ? world.getRegistryManager().get(Registry.BIOME_KEY).getId(optional.right().get()) : optional.left().get().getValue(); Identifier id = (optional.right().isPresent()) ? world.getRegistryManager().get(RegistryKeys.BIOME).getId(optional.right().get()) : optional.left().get().getValue();
if (id == null) { if (id == null) {
error("Something went wrong, you may have some mods that mess with world generation"); error("Something went wrong, you may have some mods that mess with world generation");
toggle(); toggle();

View File

@@ -3,7 +3,7 @@ package anticope.rejects.modules;
import java.io.IOException; import java.io.IOException;
import anticope.rejects.MeteorRejectsAddon; import anticope.rejects.MeteorRejectsAddon;
import net.minecraft.client.gl.ShaderEffect; import net.minecraft.client.gl.PostEffectProcessor;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import meteordevelopment.meteorclient.settings.EnumSetting; import meteordevelopment.meteorclient.settings.EnumSetting;
@@ -86,7 +86,7 @@ public class Rendering extends Module {
.build() .build()
); );
private ShaderEffect shader = null; private PostEffectProcessor shader = null;
public Rendering() { public Rendering() {
super(MeteorRejectsAddon.CATEGORY, "rendering", "Various Render Tweaks"); super(MeteorRejectsAddon.CATEGORY, "rendering", "Various Render Tweaks");
@@ -109,7 +109,7 @@ public class Rendering extends Module {
else name = s.toString().toLowerCase(); else name = s.toString().toLowerCase();
Identifier shaderID = new Identifier(String.format("shaders/post/%s.json", name)); Identifier shaderID = new Identifier(String.format("shaders/post/%s.json", name));
try { try {
ShaderEffect shader = new ShaderEffect(mc.getTextureManager(), mc.getResourceManager(), mc.getFramebuffer(), shaderID); PostEffectProcessor shader = new PostEffectProcessor(mc.getTextureManager(), mc.getResourceManager(), mc.getFramebuffer(), shaderID);
this.shader = shader; this.shader = shader;
} catch (IOException e) { } catch (IOException e) {
this.shader = null; this.shader = null;
@@ -120,7 +120,7 @@ public class Rendering extends Module {
return this.isActive() && structureVoid.get(); return this.isActive() && structureVoid.get();
} }
public ShaderEffect getShaderEffect() { public PostEffectProcessor getShaderEffect() {
if (!this.isActive()) return null; if (!this.isActive()) return null;
return shader; return shader;
} }

View File

@@ -26,7 +26,11 @@ import net.minecraft.client.render.entity.model.PlayerEntityModel;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.util.math.*; import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.RotationAxis;
import net.minecraft.util.math.Vec3d;
import org.joml.Matrix4f;
import org.joml.Quaternionf;
public class SkeletonESP extends Module { public class SkeletonESP extends Module {
private final SettingGroup sgGeneral = settings.getDefaultGroup(); private final SettingGroup sgGeneral = settings.getDefaultGroup();
@@ -57,7 +61,7 @@ public class SkeletonESP extends Module {
MatrixStack matrixStack = event.matrices; MatrixStack matrixStack = event.matrices;
float g = event.tickDelta; float g = event.tickDelta;
RenderSystem.setShader(GameRenderer::getPositionColorShader); RenderSystem.setShader(GameRenderer::getPositionColorProgram);
RenderSystem.disableTexture(); RenderSystem.disableTexture();
RenderSystem.enableBlend(); RenderSystem.enableBlend();
RenderSystem.defaultBlendFunc(); RenderSystem.defaultBlendFunc();
@@ -67,7 +71,8 @@ public class SkeletonESP extends Module {
mc.world.getEntities().forEach(entity -> { mc.world.getEntities().forEach(entity -> {
if (!(entity instanceof PlayerEntity)) return; if (!(entity instanceof PlayerEntity)) return;
if (mc.options.getPerspective() == Perspective.FIRST_PERSON && !freecam.isActive() && mc.player == entity) return; if (mc.options.getPerspective() == Perspective.FIRST_PERSON && !freecam.isActive() && mc.player == entity)
return;
int rotationHoldTicks = Config.get().rotationHoldTicks.get(); int rotationHoldTicks = Config.get().rotationHoldTicks.get();
Color skeletonColor = PlayerUtils.getPlayerColor((PlayerEntity) entity, skeletonColorSetting.get()); Color skeletonColor = PlayerUtils.getPlayerColor((PlayerEntity) entity, skeletonColorSetting.get());
@@ -75,8 +80,8 @@ public class SkeletonESP extends Module {
PlayerEntity playerEntity = (PlayerEntity) entity; PlayerEntity playerEntity = (PlayerEntity) entity;
Vec3d footPos = getEntityRenderPosition(playerEntity, g); Vec3d footPos = getEntityRenderPosition(playerEntity, g);
PlayerEntityRenderer livingEntityRenderer = (PlayerEntityRenderer)(LivingEntityRenderer<?, ?>) mc.getEntityRenderDispatcher().getRenderer(playerEntity); PlayerEntityRenderer livingEntityRenderer = (PlayerEntityRenderer) (LivingEntityRenderer<?, ?>) mc.getEntityRenderDispatcher().getRenderer(playerEntity);
PlayerEntityModel<PlayerEntity> playerEntityModel = (PlayerEntityModel)livingEntityRenderer.getModel(); PlayerEntityModel<PlayerEntity> playerEntityModel = (PlayerEntityModel) livingEntityRenderer.getModel();
float h = MathHelper.lerpAngleDegrees(g, playerEntity.prevBodyYaw, playerEntity.bodyYaw); float h = MathHelper.lerpAngleDegrees(g, playerEntity.prevBodyYaw, playerEntity.bodyYaw);
if (mc.player == entity && Rotations.rotationTimer < rotationHoldTicks) h = Rotations.serverYaw; if (mc.player == entity && Rotations.rotationTimer < rotationHoldTicks) h = Rotations.serverYaw;
@@ -106,8 +111,9 @@ public class SkeletonESP extends Module {
matrixStack.translate(footPos.x, footPos.y, footPos.z); matrixStack.translate(footPos.x, footPos.y, footPos.z);
if (swimming) matrixStack.translate(0, 0.35f, 0); if (swimming) matrixStack.translate(0, 0.35f, 0);
matrixStack.multiply(new Quaternion(new Vec3f(0, -1, 0), h + 180, true)); matrixStack.multiply(new Quaternionf().setAngleAxis((h + 180) * Math.PI / 180F, 0, -1, 0));
if (swimming || flying) matrixStack.multiply(new Quaternion(new Vec3f(-1, 0, 0), 90 + m, true)); if (swimming || flying)
matrixStack.multiply(new Quaternionf().setAngleAxis((90 + m) * Math.PI / 180F, -1, 0, 0));
if (swimming) matrixStack.translate(0, -0.95f, 0); if (swimming) matrixStack.translate(0, -0.95f, 0);
BufferBuilder bufferBuilder = Tessellator.getInstance().getBuffer(); BufferBuilder bufferBuilder = Tessellator.getInstance().getBuffer();
@@ -169,13 +175,14 @@ public class SkeletonESP extends Module {
matrixStack.pop(); matrixStack.pop();
bufferBuilder.clear(); bufferBuilder.clear();
BufferRenderer.drawWithShader(bufferBuilder.end()); BufferRenderer.drawWithGlobalProgram(bufferBuilder.end());
if (swimming) matrixStack.translate(0, 0.95f, 0); if (swimming) matrixStack.translate(0, 0.95f, 0);
if (swimming || flying) matrixStack.multiply(new Quaternion(new Vec3f(1, 0, 0), 90 + m, true)); if (swimming || flying)
matrixStack.multiply(new Quaternionf().setAngleAxis((90 + m) * Math.PI / 180F, 1, 0, 0));
if (swimming) matrixStack.translate(0, -0.35f, 0); if (swimming) matrixStack.translate(0, -0.35f, 0);
matrixStack.multiply(new Quaternion(new Vec3f(0, 1, 0), h + 180, true)); matrixStack.multiply(new Quaternionf().setAngleAxis((h + 180) * Math.PI / 180F, 0, 1, 0));
matrixStack.translate(-footPos.x, -footPos.y, -footPos.z); matrixStack.translate(-footPos.x, -footPos.y, -footPos.z);
}); });
@@ -184,20 +191,20 @@ public class SkeletonESP extends Module {
RenderSystem.disableBlend(); RenderSystem.disableBlend();
RenderSystem.enableDepthTest(); RenderSystem.enableDepthTest();
RenderSystem.depthMask(true); RenderSystem.depthMask(true);
RenderSystem.setShader(GameRenderer::getPositionColorShader); RenderSystem.setShader(GameRenderer::getPositionColorProgram);
} }
private void rotate(MatrixStack matrix, ModelPart modelPart) { private void rotate(MatrixStack matrix, ModelPart modelPart) {
if (modelPart.roll != 0.0F) { if (modelPart.roll != 0.0F) {
matrix.multiply(Vec3f.POSITIVE_Z.getRadialQuaternion(modelPart.roll)); matrix.multiply(RotationAxis.POSITIVE_Z.rotation(modelPart.roll));
} }
if (modelPart.yaw != 0.0F) { if (modelPart.yaw != 0.0F) {
matrix.multiply(Vec3f.NEGATIVE_Y.getRadialQuaternion(modelPart.yaw)); matrix.multiply(RotationAxis.NEGATIVE_Y.rotation(modelPart.yaw));
} }
if (modelPart.pitch != 0.0F) { if (modelPart.pitch != 0.0F) {
matrix.multiply(Vec3f.NEGATIVE_X.getRadialQuaternion(modelPart.pitch)); matrix.multiply(RotationAxis.NEGATIVE_X.rotation(modelPart.pitch));
} }
} }
@@ -222,8 +229,7 @@ public class SkeletonESP extends Module {
if (percent < 0.5) { if (percent < 0.5) {
r = 255; r = 255;
g = (int) (255 * percent / 0.5); g = (int) (255 * percent / 0.5);
} } else {
else {
g = 255; g = 255;
r = 255 - (int) (255 * (percent - 0.5) / 0.5); r = 255 - (int) (255 * (percent - 0.5) / 0.5);
} }

View File

@@ -48,10 +48,8 @@ public class SoundLocator extends Module {
private void printSound(SoundInstance sound) { private void printSound(SoundInstance sound) {
WeightedSoundSet soundSet = mc.getSoundManager().get(sound.getId()); WeightedSoundSet soundSet = mc.getSoundManager().get(sound.getId());
MutableText text; MutableText text;
if (soundSet == null) { if (soundSet == null || soundSet.getSubtitle() == null) {
text = Text.literal(sound.getId().toString()); text = Text.literal(sound.getId().toString());
} else if (soundSet.getSubtitle() == null) {
text = Text.literal(soundSet.getId().toString());
} else { } else {
text = soundSet.getSubtitle().copy(); text = soundSet.getSubtitle().copy();
} }

View File

@@ -0,0 +1,27 @@
package anticope.rejects.settings;
import meteordevelopment.meteorclient.gui.GuiTheme;
import meteordevelopment.meteorclient.gui.utils.SettingsWidgetFactory;
import meteordevelopment.meteorclient.gui.widgets.containers.WTable;
import java.util.Map;
public class RejectsSettings {
private final Map<Class<?>, SettingsWidgetFactory.Factory> factories;
private final GuiTheme theme;
public RejectsSettings(Map<Class<?>, SettingsWidgetFactory.Factory> factories, GuiTheme theme) {
this.factories = factories;
this.theme = theme;
}
public void addSettings() {
factories.put(StringMapSetting.class, (table, setting) -> stringMapW(table, (StringMapSetting) setting));
}
private void stringMapW(WTable table, StringMapSetting setting) {
WTable wtable = table.add(theme.table()).expandX().widget();
StringMapSetting.fillTable(theme, wtable, setting);
}
}

View File

@@ -0,0 +1,162 @@
/*
* This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client).
* Copyright (c) Meteor Development.
*/
package anticope.rejects.settings;
import meteordevelopment.meteorclient.gui.GuiTheme;
import meteordevelopment.meteorclient.gui.renderer.GuiRenderer;
import meteordevelopment.meteorclient.gui.widgets.containers.WTable;
import meteordevelopment.meteorclient.gui.widgets.input.WTextBox;
import meteordevelopment.meteorclient.gui.widgets.pressable.WButton;
import meteordevelopment.meteorclient.gui.widgets.pressable.WMinus;
import meteordevelopment.meteorclient.gui.widgets.pressable.WPlus;
import meteordevelopment.meteorclient.settings.IVisible;
import meteordevelopment.meteorclient.settings.Setting;
import net.minecraft.nbt.NbtCompound;
import net.minecraft.nbt.NbtString;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer;
public class StringMapSetting extends Setting<Map<String, String>> {
public final Class<? extends WTextBox.Renderer> renderer;
public StringMapSetting(String name, String description, Map<String, String> defaultValue, Consumer<Map<String, String>> onChanged, Consumer<Setting<Map<String, String>>> onModuleActivated, IVisible visible, Class<? extends WTextBox.Renderer> renderer) {
super(name, description, defaultValue, onChanged, onModuleActivated, visible);
this.renderer = renderer;
}
@Override
protected Map<String, String> parseImpl(String str) {
String[] values = str.split(",");
Map<String, String> map = new LinkedHashMap<>(values.length / 2);
try {
String left = null;
for (int i = 0; i < values.length; i++) {
if (i % 2 == 0) {
left = values[i];
} else {
map.put(left, values[i]);
}
}
} catch (Exception ignored) {
}
return map;
}
@Override
protected boolean isValueValid(Map<String, String> value) {
return true;
}
@Override
protected void resetImpl() {
value = new LinkedHashMap<>(defaultValue);
}
@Override
protected NbtCompound save(NbtCompound tag) {
NbtCompound valueTag = new NbtCompound();
for (String key : get().keySet()) {
valueTag.put(key, NbtString.of(get().get(key)));
}
tag.put("map", valueTag);
return tag;
}
@Override
protected Map<String, String> load(NbtCompound tag) {
get().clear();
NbtCompound valueTag = tag.getCompound("map");
for (String key : valueTag.getKeys()) {
get().put(key, valueTag.getString(key));
}
return get();
}
public static void fillTable(GuiTheme theme, WTable table, StringMapSetting setting) {
table.clear();
Map<String, String> map = setting.get();
for (String key : map.keySet()) {
AtomicReference<String> key2 = new AtomicReference<>(key);
WTextBox textBoxK = table.add(theme.textBox(key2.get())).minWidth(150).expandX().widget();
textBoxK.actionOnUnfocused = () -> {
String text = textBoxK.get();
if (map.containsKey(text)) {
textBoxK.set(key2.get());
return;
}
String value = map.remove(key2.get());
key2.set(text);
map.put(text, value);
};
WTextBox textBoxV = table.add(theme.textBox(map.get(key2.get()), (text1, c) -> true, setting.renderer)).minWidth(150).expandX().widget();
textBoxV.actionOnUnfocused = () -> map.replace(key2.get(), textBoxV.get());
WMinus delete = table.add(theme.minus()).widget();
delete.action = () -> {
map.remove(key2.get());
fillTable(theme, table, setting);
};
table.row();
}
if (!map.isEmpty()) {
table.add(theme.horizontalSeparator()).expandX();
table.row();
}
WButton reset = table.add(theme.button(GuiRenderer.RESET)).widget();
reset.action = () -> {
setting.reset();
fillTable(theme, table, setting);
};
WPlus add = table.add(theme.plus()).widget();
add.action = () -> {
map.put("", "");
fillTable(theme, table, setting);
};
table.row();
}
public static class Builder extends SettingBuilder<Builder, Map<String, String>, StringMapSetting> {
private Class<? extends WTextBox.Renderer> renderer;
public Builder() {
super(new LinkedHashMap<>(0));
}
public Builder defaultValue(Map<String, String> map) {
this.defaultValue = map;
return this;
}
public Builder renderer(Class<? extends WTextBox.Renderer> renderer) {
this.renderer = renderer;
return this;
}
@Override
public StringMapSetting build() {
return new StringMapSetting(name, description, defaultValue, onChanged, onModuleActivated, visible, renderer);
}
}
}

View File

@@ -5,6 +5,9 @@ import meteordevelopment.meteorclient.MeteorClient;
import meteordevelopment.meteorclient.systems.modules.Module; import meteordevelopment.meteorclient.systems.modules.Module;
import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.Modules;
import meteordevelopment.meteorclient.utils.PostInit; import meteordevelopment.meteorclient.utils.PostInit;
import java.util.Random;
public class RejectsUtils { public class RejectsUtils {
@PostInit @PostInit
@@ -26,4 +29,15 @@ public class RejectsUtils {
} }
return dupe == 0 ? name : getModuleName(name + "*".repeat(dupe)); return dupe == 0 ? name : getModuleName(name + "*".repeat(dupe));
} }
public static String getRandomPassword(int num) {
String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_";
Random random = new Random();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < num; i++) {
int number = random.nextInt(63);
sb.append(str.charAt(number));
}
return sb.toString();
}
} }

View File

@@ -3,13 +3,13 @@
"package": "anticope.rejects.mixin.meteor", "package": "anticope.rejects.mixin.meteor",
"compatibilityLevel": "JAVA_16", "compatibilityLevel": "JAVA_16",
"client": [ "client": [
"CommandsMixin",
"ConfigTabMixin", "ConfigTabMixin",
"GuiRendererAccessor", "GuiRendererAccessor",
"HttpMixin", "HttpMixin",
"ModuleMixin", "ModuleMixin",
"ModulesMixin", "ModulesMixin",
"FontUtilsMixin", "FontUtilsMixin",
"DefaultSettingsWidgetFactoryMixin",
"modules.FlightMixin", "modules.FlightMixin",
"modules.NoRenderAccessor" "modules.NoRenderAccessor"
] ]

View File

@@ -5,6 +5,7 @@
"client": [ "client": [
"ChestBlockEntityRendererMixin", "ChestBlockEntityRendererMixin",
"ClientPlayNetworkHandlerMixin", "ClientPlayNetworkHandlerMixin",
"ClientPlayerInteractionManagerMixin",
"CommandSuggestorMixin", "CommandSuggestorMixin",
"CustomPayloadS2CPacketMixin", "CustomPayloadS2CPacketMixin",
"Deadmau5FeatureRendererMixin", "Deadmau5FeatureRendererMixin",