Fix #237 and #238, Moved module modifications to meteor mixins (#240)

This commit is contained in:
Soda5601
2023-03-25 18:26:57 +08:00
committed by GitHub
parent 29509947c6
commit f749e5c7d9
17 changed files with 117 additions and 196 deletions

View File

@@ -4,7 +4,6 @@ import anticope.rejects.commands.*;
import anticope.rejects.gui.hud.*;
import anticope.rejects.gui.themes.rounded.MeteorRoundedGuiTheme;
import anticope.rejects.modules.*;
import anticope.rejects.modules.modifier.NoRenderModifier;
import meteordevelopment.meteorclient.addons.GithubRepo;
import meteordevelopment.meteorclient.addons.MeteorAddon;
import meteordevelopment.meteorclient.gui.GuiThemes;
@@ -81,9 +80,6 @@ public class MeteorRejectsAddon extends MeteorAddon {
modules.add(new SoundLocator());
modules.add(new TreeAura());
// Module modifications
NoRenderModifier.init();
// Commands
Commands commands = Commands.get();
commands.add(new CenterCommand());

View File

@@ -1,21 +0,0 @@
package anticope.rejects.events;
import meteordevelopment.meteorclient.utils.misc.Pool;
public class ChunkPosDataEvent {
private static final Pool<ChunkPosDataEvent> INSTANCE = new Pool<>(ChunkPosDataEvent::new);
public int chunkX;
public int chunkZ;
public static ChunkPosDataEvent get(int x, int z) {
ChunkPosDataEvent event = INSTANCE.get();
event.chunkX = x;
event.chunkZ = z;
return event;
}
public static void returnChunkDataEvent(ChunkPosDataEvent event) {
INSTANCE.free(event);
}
}

View File

@@ -1,16 +0,0 @@
package anticope.rejects.events;
import meteordevelopment.meteorclient.events.packets.PacketEvent;
import net.minecraft.network.packet.s2c.play.CustomPayloadS2CPacket;
public class CustomPayloadEvent extends PacketEvent {
public CustomPayloadS2CPacket packet;
private static final CustomPayloadEvent INSTANCE = new CustomPayloadEvent();
public static CustomPayloadEvent get(CustomPayloadS2CPacket packet) {
INSTANCE.setCancelled(false);
INSTANCE.packet = packet;
return INSTANCE;
}
}

View File

@@ -19,7 +19,7 @@ public class StatsScreen extends WindowScreen {
public final Entity entity;
private boolean effectListExpanded = true;
private boolean attribListExpanded = true;
private boolean dimensionExpanded = false;
private boolean dimensionExpanded = true;
public StatsScreen(Entity e) {
super(GuiThemes.get(),e.getName().getString());
this.entity = e;
@@ -40,15 +40,12 @@ public class StatsScreen extends WindowScreen {
add(theme.label(String.format("Type: %s", lang.get(entity.getType().getTranslationKey()))));
add(theme.label(String.format("Age: %d", entity.age)));
add(theme.label(String.format("UUID: %s", entity.getUuidAsString())));
if (entity instanceof LivingEntity) {
LivingEntity liv = (LivingEntity) entity;
if (entity instanceof LivingEntity liv) {
add(theme.label(String.format("Health: %.2f/%.2f", liv.getHealth(), liv.getMaxHealth())));
add(theme.label(String.format("Armor: %d/20", liv.getArmor())));
WSection effectList = add(theme.section("Status Effects", effectListExpanded)).expandX().widget();
effectList.action = () -> {
effectListExpanded = effectList.isExpanded();
};
effectList.action = () -> effectListExpanded = effectList.isExpanded();
liv.getActiveStatusEffects().forEach((effect, instance) -> {
String status = lang.get(effect.getTranslationKey());
if (instance.getAmplifier() != 0) {
@@ -63,20 +60,14 @@ public class StatsScreen extends WindowScreen {
}
WSection attribList = add(theme.section("Attributes", attribListExpanded)).expandX().widget();
attribList.action = () -> {
attribListExpanded = attribList.isExpanded();
};
liv.getAttributes().getTracked().forEach((attrib) -> {
attribList.add(theme.label(String.format("%s: %.2f",
lang.get(attrib.getAttribute().getTranslationKey()),
attrib.getValue()
))).expandX();
});
attribList.action = () -> attribListExpanded = attribList.isExpanded();
liv.getAttributes().getTracked().forEach((attrib) -> attribList.add(theme.label(String.format("%s: %.2f",
lang.get(attrib.getAttribute().getTranslationKey()),
attrib.getValue()
))).expandX());
}
WSection dimension = add(theme.section("Dimensions", dimensionExpanded)).expandX().widget();
dimension.action = () -> {
dimensionExpanded = dimension.isExpanded();
};
dimension.action = () -> dimensionExpanded = dimension.isExpanded();
dimension.add(theme.label(String.format("Position: %.2f, %.2f, %.2f", entity.getX(), entity.getY(), entity.getZ()))).expandX();
dimension.add(theme.label(String.format("Yaw: %.2f, Pitch: %.2f", entity.getYaw(), entity.getPitch()))).expandX();
Box box = entity.getBoundingBox();

View File

@@ -1,13 +1,11 @@
package anticope.rejects.mixin;
import anticope.rejects.events.ChunkPosDataEvent;
import anticope.rejects.events.PlayerRespawnEvent;
import anticope.rejects.modules.SilentDisconnect;
import meteordevelopment.meteorclient.MeteorClient;
import meteordevelopment.meteorclient.systems.modules.Modules;
import meteordevelopment.meteorclient.utils.player.ChatUtils;
import net.minecraft.client.network.ClientPlayNetworkHandler;
import net.minecraft.network.packet.s2c.play.ChunkDataS2CPacket;
import net.minecraft.network.packet.s2c.play.PlayerRespawnS2CPacket;
import net.minecraft.text.Text;
import org.spongepowered.asm.mixin.Mixin;
@@ -20,12 +18,6 @@ import static meteordevelopment.meteorclient.MeteorClient.mc;
@Mixin(ClientPlayNetworkHandler.class)
public class ClientPlayNetworkHandlerMixin {
//the normal onChunkDataEvent should just provide coords aswell
@Inject(method = "onChunkData", at = @At("TAIL"))
public void onChunkData(ChunkDataS2CPacket packet, CallbackInfo ci) {
MeteorClient.EVENT_BUS.post(ChunkPosDataEvent.get(packet.getX(), packet.getZ()));
}
//called on dimension change too
@Inject(method = "onPlayerRespawn", at = @At("TAIL"))
public void onPlayerRespawn(PlayerRespawnS2CPacket packet, CallbackInfo ci) {

View File

@@ -1,6 +1,8 @@
package anticope.rejects.mixin;
import anticope.rejects.modules.modifier.NoRenderModifier;
import anticope.rejects.mixininterface.INoRender;
import meteordevelopment.meteorclient.systems.modules.Modules;
import meteordevelopment.meteorclient.systems.modules.render.NoRender;
import net.minecraft.client.gui.screen.ChatInputSuggestor;
import net.minecraft.client.util.math.MatrixStack;
import org.spongepowered.asm.mixin.Mixin;
@@ -12,6 +14,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
public class CommandSuggestorMixin {
@Inject(method = "render", at = @At(value = "HEAD"), cancellable = true)
public void onRenderCommandSuggestion(MatrixStack matrices, int mouseX, int mouseY, CallbackInfo info) {
if (NoRenderModifier.noCommandSuggestions()) info.cancel();
if (((INoRender) Modules.get().get(NoRender.class)).noCommandSuggestions()) info.cancel();
}
}

View File

@@ -1,28 +0,0 @@
package anticope.rejects.mixin;
import anticope.rejects.events.CustomPayloadEvent;
import meteordevelopment.meteorclient.MeteorClient;
import net.minecraft.network.listener.ClientPlayPacketListener;
import net.minecraft.network.packet.s2c.play.CustomPayloadS2CPacket;
import net.minecraft.util.Identifier;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(CustomPayloadS2CPacket.class)
public class CustomPayloadS2CPacketMixin {
@Shadow
private Identifier channel;
@Inject(method = "apply(Lnet/minecraft/network/listener/ClientPlayPacketListener;)V",
at = @At(value = "HEAD"), cancellable = true)
private void onApply(ClientPlayPacketListener clientPlayPacketListener, CallbackInfo info) {
CustomPayloadS2CPacket packet = (CustomPayloadS2CPacket) (Object) this;
CustomPayloadEvent event = MeteorClient.EVENT_BUS.post(CustomPayloadEvent.get(packet));
if (event.isCancelled()) {
info.cancel();
}
}
}

View File

@@ -16,7 +16,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(StructureVoidBlock.class)
public abstract class StructureVoidBlockMixin extends Block {
public StructureVoidBlockMixin(Settings settings) {
super(settings);
}
@@ -31,5 +30,4 @@ public abstract class StructureVoidBlockMixin extends Block {
Rendering renderingModule = Modules.get().get(Rendering.class);
return !(renderingModule != null && renderingModule.renderStructureVoid());
}
}

View File

@@ -1,19 +1,19 @@
package anticope.rejects.mixin;
import anticope.rejects.modules.modifier.NoRenderModifier;
import anticope.rejects.mixininterface.INoRender;
import meteordevelopment.meteorclient.systems.modules.Modules;
import meteordevelopment.meteorclient.systems.modules.render.NoRender;
import net.minecraft.client.toast.Toast;
import net.minecraft.client.toast.ToastManager;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import net.minecraft.client.toast.Toast;
import net.minecraft.client.toast.ToastManager;
@Mixin(ToastManager.class)
public class ToastManagerMixin {
@Inject(method="add", at = @At("HEAD"), cancellable = true)
@Inject(method = "add", at = @At("HEAD"), cancellable = true)
public void preventAdd(Toast toast, CallbackInfo ci) {
if (NoRenderModifier.disableToasts()) ci.cancel();
if (((INoRender) Modules.get().get(NoRender.class)).disableToasts()) ci.cancel();
}
}

View File

@@ -1,12 +0,0 @@
package anticope.rejects.mixin.meteor.modules;
import meteordevelopment.meteorclient.settings.SettingGroup;
import meteordevelopment.meteorclient.systems.modules.render.NoRender;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(NoRender.class)
public interface NoRenderAccessor {
@Accessor(value = "sgOverlay", remap = false)
SettingGroup getSgOverlay();
}

View File

@@ -0,0 +1,53 @@
package anticope.rejects.mixin.meteor.modules;
import anticope.rejects.mixininterface.INoRender;
import meteordevelopment.meteorclient.settings.BoolSetting;
import meteordevelopment.meteorclient.settings.Setting;
import meteordevelopment.meteorclient.settings.SettingGroup;
import meteordevelopment.meteorclient.systems.modules.Category;
import meteordevelopment.meteorclient.systems.modules.Module;
import meteordevelopment.meteorclient.systems.modules.render.NoRender;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(value = NoRender.class,remap = false)
public class NoRenderMixin extends Module implements INoRender {
@Shadow @Final private SettingGroup sgOverlay;
private Setting<Boolean> noCommandSuggestions;
private Setting<Boolean> disableToasts;
public NoRenderMixin(Category category, String name, String description) {
super(category, name, description);
}
@Inject(method = "<init>", at = @At("TAIL"))
private void onInit(CallbackInfo ci) {
noCommandSuggestions = sgOverlay.add(new BoolSetting.Builder()
.name("command-suggestions")
.description("Disables command suggestions in chat.")
.defaultValue(false)
.build()
);
disableToasts = sgOverlay.add(new BoolSetting.Builder()
.name("disable-toasts")
.description("Disable toasts (e.g. advancements)")
.defaultValue(false)
.build()
);
}
@Override
public boolean noCommandSuggestions() {
return isActive() && noCommandSuggestions.get();
}
@Override
public boolean disableToasts() {
return isActive() && disableToasts.get();
}
}

View File

@@ -0,0 +1,7 @@
package anticope.rejects.mixininterface;
public interface INoRender {
boolean noCommandSuggestions();
boolean disableToasts();
}

View File

@@ -1,11 +1,11 @@
package anticope.rejects.modules;
import anticope.rejects.MeteorRejectsAddon;
import anticope.rejects.events.CustomPayloadEvent;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken;
import meteordevelopment.meteorclient.events.packets.PacketEvent;
import meteordevelopment.meteorclient.settings.BoolSetting;
import meteordevelopment.meteorclient.settings.Setting;
import meteordevelopment.meteorclient.settings.SettingGroup;
@@ -13,6 +13,7 @@ import meteordevelopment.meteorclient.systems.modules.Module;
import meteordevelopment.meteorclient.utils.player.ChatUtils;
import meteordevelopment.orbit.EventHandler;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.network.packet.s2c.play.CustomPayloadS2CPacket;
import net.minecraft.text.HoverEvent;
import net.minecraft.text.MutableText;
import net.minecraft.text.Text;
@@ -24,7 +25,8 @@ import java.util.Map;
public class CustomPackets extends Module {
private static final Gson GSON_NON_PRETTY = new GsonBuilder().enableComplexMapKeySerialization().disableHtmlEscaping().create();
private static final Type BADLION_MODS_TYPE = new TypeToken<Map<String, BadlionMod>>() {}.getType();
private static final Type BADLION_MODS_TYPE = new TypeToken<Map<String, BadlionMod>>() {
}.getType();
private final SettingGroup sgGeneral = settings.getDefaultGroup();
private final SettingGroup sgBadlion = settings.createGroup("Bad Lion");
@@ -49,30 +51,32 @@ public class CustomPackets extends Module {
}
@EventHandler
private void onCustomPayloadPacket(CustomPayloadEvent event) {
switch (event.packet.getChannel().toString()) {
case "badlion:mods" -> onBadlionModsPacket(event);
default -> onUnknownPacket(event);
private void onCustomPayloadPacket(PacketEvent.Receive event) {
if (event.packet instanceof CustomPayloadS2CPacket packet) {
switch (packet.getChannel().toString()) {
case "badlion:mods" -> event.setCancelled(onBadlionModsPacket(packet));
default -> onUnknownPacket(packet);
}
}
}
private void onUnknownPacket(CustomPayloadEvent event) {
private void onUnknownPacket(CustomPayloadS2CPacket packet) {
if (!unknownPackets.get()) return;
MutableText text = Text.literal(event.packet.getChannel().toString());
MutableText text = Text.literal(packet.getChannel().toString());
text.setStyle(text.getStyle()
.withHoverEvent(new HoverEvent(
HoverEvent.Action.SHOW_TEXT,
Text.literal(readString(event.packet.getData()))
)));
.withHoverEvent(new HoverEvent(
HoverEvent.Action.SHOW_TEXT,
Text.literal(readString(packet.getData()))
)));
info(text);
}
private void onBadlionModsPacket(CustomPayloadEvent event) {
if (!mods.get()) return;
String json = readString(event.packet.getData());
private boolean onBadlionModsPacket(CustomPayloadS2CPacket packet) {
if (!mods.get()) return false;
String json = readString(packet.getData());
Map<String, BadlionMod> mods = GSON_NON_PRETTY.fromJson(json, BADLION_MODS_TYPE);
ChatUtils.sendMsg("Badlion", format("Mods", formatMods(mods)));
event.cancel();
return true;
}
private MutableText format(String type, MutableText message) {

View File

@@ -1,7 +1,6 @@
package anticope.rejects.modules;
import anticope.rejects.MeteorRejectsAddon;
import anticope.rejects.events.ChunkPosDataEvent;
import anticope.rejects.events.PlayerRespawnEvent;
import anticope.rejects.events.SeedChangedEvent;
import anticope.rejects.utils.Ore;
@@ -10,6 +9,7 @@ import anticope.rejects.utils.seeds.Seeds;
import baritone.api.BaritoneAPI;
import com.seedfinding.mccore.version.MCVersion;
import meteordevelopment.meteorclient.events.render.Render3DEvent;
import meteordevelopment.meteorclient.events.world.ChunkDataEvent;
import meteordevelopment.meteorclient.events.world.TickEvent;
import meteordevelopment.meteorclient.settings.*;
import meteordevelopment.meteorclient.systems.modules.Module;
@@ -106,7 +106,7 @@ public class OreSim extends Module {
continue;
}
for (Vec3d pos : chunkRenderers.get(chunkKey).get(ore)) {
event.renderer.boxLines(pos.x,pos.y,pos.z,pos.x+1,pos.y+1,pos.z+1, ore.color,0);
event.renderer.boxLines(pos.x, pos.y, pos.z, pos.x + 1, pos.y + 1, pos.z + 1, ore.color, 0);
}
}
}
@@ -151,11 +151,11 @@ public class OreSim extends Module {
oreGoals.clear();
var chunkPos = mc.player.getChunkPos();
int rangeVal = 4;
for(int range = 0; range <= rangeVal; ++range) {
for(int x = -range + chunkPos.x; x <= range + chunkPos.x; ++x) {
for (int range = 0; range <= rangeVal; ++range) {
for (int x = -range + chunkPos.x; x <= range + chunkPos.x; ++x) {
oreGoals.addAll(addToBaritone(x, chunkPos.z + range - rangeVal));
}
for(int x = -range + 1 + chunkPos.x; x < range + chunkPos.x; ++x) {
for (int x = -range + 1 + chunkPos.x; x < range + chunkPos.x; ++x) {
oreGoals.addAll(this.addToBaritone(x, chunkPos.z - range + rangeVal + 1));
}
}
@@ -164,20 +164,16 @@ public class OreSim extends Module {
private ArrayList<BlockPos> addToBaritone(int chunkX, int chunkZ) {
ArrayList<BlockPos> baritoneGoals = new ArrayList<>();
long chunkKey = (long)chunkX + ((long)chunkZ << 32);
long chunkKey = (long) chunkX + ((long) chunkZ << 32);
if (!this.chunkRenderers.containsKey(chunkKey)) {
return baritoneGoals;
} else {
this.oreConfig.stream().filter((config) -> {
return (Boolean)config.enabled.get();
}).forEach((ore) -> {
chunkRenderers
.get(chunkKey)
.getOrDefault(ore, new HashSet<>())
.stream()
.map(BlockPos::ofFloored)
.forEach(baritoneGoals::add);
});
this.oreConfig.stream().filter((config) -> config.enabled.get()).forEach((ore) -> chunkRenderers
.get(chunkKey)
.getOrDefault(ore, new HashSet<>())
.stream()
.map(BlockPos::ofFloored)
.forEach(baritoneGoals::add));
return baritoneGoals;
}
}
@@ -235,8 +231,8 @@ public class OreSim extends Module {
}
@EventHandler
public void onChunkData(ChunkPosDataEvent event) {
doMathOnChunk(event.chunkX, event.chunkZ);
public void onChunkData(ChunkDataEvent event) {
doMathOnChunk(event.chunk.getPos().x, event.chunk.getPos().z);
}
private void doMathOnChunk(int chunkX, int chunkZ) {
@@ -317,7 +313,8 @@ public class OreSim extends Module {
y += ore.minY;
switch (ore.generator) {
case DEFAULT -> ores.addAll(generateNormal(world, random, new BlockPos(x, y, z), ore.size, ore.discardOnAir));
case DEFAULT ->
ores.addAll(generateNormal(world, random, new BlockPos(x, y, z), ore.size, ore.discardOnAir));
case EMERALD -> {
if (airCheck.get() == AirCheck.OFF || world.getBlockState(new BlockPos(x, y, z)).isOpaque()) {
ores.add(new Vec3d(x, y, z));

View File

@@ -1,41 +0,0 @@
package anticope.rejects.modules.modifier;
import anticope.rejects.mixin.meteor.modules.NoRenderAccessor;
import meteordevelopment.meteorclient.settings.BoolSetting;
import meteordevelopment.meteorclient.settings.Setting;
import meteordevelopment.meteorclient.settings.SettingGroup;
import meteordevelopment.meteorclient.systems.modules.Modules;
import meteordevelopment.meteorclient.systems.modules.render.NoRender;
public class NoRenderModifier {
static SettingGroup sgOverlay;
public static Setting<Boolean> noCommandSuggestions;
public static Setting<Boolean> disableToasts;
public static boolean noCommandSuggestions() {
if (noCommandSuggestions == null || Modules.get() == null || Modules.get().get(NoRender.class) == null) return false;
return Modules.get().get(NoRender.class).isActive() && noCommandSuggestions.get();
}
public static boolean disableToasts() {
if (disableToasts == null || Modules.get() == null || Modules.get().get(NoRender.class) == null) return false;
return Modules.get().get(NoRender.class).isActive() && disableToasts.get();
}
public static void init() {
sgOverlay = ((NoRenderAccessor) Modules.get().get(NoRender.class)).getSgOverlay();
noCommandSuggestions = sgOverlay.add(new BoolSetting.Builder()
.name("command-suggestions")
.description("Disables command suggestions in chat.")
.defaultValue(false)
.build()
);
disableToasts = sgOverlay.add(new BoolSetting.Builder()
.name("disable-toasts")
.description("Disable toasts (e.g. advancements)")
.defaultValue(false)
.build()
);
}
}

View File

@@ -19,6 +19,6 @@
"modules.FlightMixin",
"modules.InventoryTweaksMixin",
"modules.KillAuraMixin",
"modules.NoRenderAccessor"
"modules.NoRenderMixin"
]
}

View File

@@ -6,7 +6,6 @@
"ClientPlayerInteractionManagerMixin",
"ClientPlayNetworkHandlerMixin",
"CommandSuggestorMixin",
"CustomPayloadS2CPacketMixin",
"Deadmau5FeatureRendererMixin",
"EntityAccessor",
"GameRendererMixin",