Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,33 +12,34 @@
import meteordevelopment.meteorclient.settings.Setting;
import meteordevelopment.meteorclient.utils.network.PacketUtils;
import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.PacketType;
import org.jetbrains.annotations.NotNull;

import java.util.Set;
import java.util.function.Predicate;

public class PacketBoolSettingScreen extends CollectionListSettingScreen<Class<? extends Packet<?>>> {
public PacketBoolSettingScreen(GuiTheme theme, Setting<Set<Class<? extends Packet<?>>>> setting) {
super(theme, "Select Packets", setting, setting.get(), PacketUtils.PACKETS);
public class PacketBoolSettingScreen extends CollectionListSettingScreen<PacketType<? extends @NotNull Packet<?>>> {
public PacketBoolSettingScreen(GuiTheme theme, Setting<Set<PacketType<? extends @NotNull Packet<?>>>> setting) {
super(theme, "Select Packets", setting, setting.get(), PacketUtils.getPackets());
}

@Override
protected boolean includeValue(Class<? extends Packet<?>> value) {
Predicate<Class<? extends Packet<?>>> filter = ((PacketListSetting) setting).filter;
protected boolean includeValue(PacketType<? extends @NotNull Packet<?>> value) {
Predicate<PacketType<? extends @NotNull Packet<?>>> filter = ((PacketListSetting) setting).filter;

if (filter == null) return true;
return filter.test(value);
}

@Override
protected WWidget getValueWidget(Class<? extends Packet<?>> value) {
return theme.label(PacketUtils.getName(value));
protected WWidget getValueWidget(PacketType<? extends @NotNull Packet<?>> value) {
return theme.label(value.toString());
}

@Override
protected String[] getValueNames(Class<? extends Packet<?>> value) {
protected String[] getValueNames(PacketType<? extends @NotNull Packet<?>> value) {
return new String[]{
PacketUtils.getName(value),
value.getSimpleName()
value.toString()
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,18 +12,19 @@
import net.minecraft.nbt.StringTag;
import net.minecraft.nbt.Tag;
import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.PacketFlow;
import net.minecraft.network.protocol.PacketType;
import org.jetbrains.annotations.NotNull;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.function.Consumer;
import java.util.function.Predicate;

public class PacketListSetting extends Setting<Set<Class<? extends Packet<?>>>> {
public final Predicate<Class<? extends Packet<?>>> filter;
private static List<String> suggestions;
public class PacketListSetting extends Setting<Set<PacketType<? extends @NotNull Packet<?>>>> {
public final Predicate<PacketType<? extends @NotNull Packet<?>>> filter;

public PacketListSetting(String name, String description, Set<Class<? extends Packet<?>>> defaultValue, Consumer<Set<Class<? extends Packet<?>>>> onChanged, Consumer<Setting<Set<Class<? extends Packet<?>>>>> onModuleActivated, Predicate<Class<? extends Packet<?>>> filter, IVisible visible) {
public PacketListSetting(String name, String description, Set<PacketType<? extends @NotNull Packet<?>>> defaultValue, Consumer<Set<PacketType<? extends @NotNull Packet<?>>>> onChanged, Consumer<Setting<Set<PacketType<? extends @NotNull Packet<?>>>>> onModuleActivated, Predicate<PacketType<? extends @NotNull Packet<?>>> filter, IVisible visible) {
super(name, description, defaultValue, onChanged, onModuleActivated, visible);

this.filter = filter;
Expand All @@ -35,13 +36,13 @@ public void resetImpl() {
}

@Override
protected Set<Class<? extends Packet<?>>> parseImpl(String str) {
protected Set<PacketType<? extends @NotNull Packet<?>>> parseImpl(String str) {
String[] values = str.split(",");
Set<Class<? extends Packet<?>>> packets = new ObjectOpenHashSet<>(values.length);
Set<PacketType<? extends @NotNull Packet<?>>> packets = new ObjectOpenHashSet<>(values.length);

try {
for (String value : values) {
Class<? extends Packet<?>> packet = PacketUtils.getPacket(value.trim());
PacketType<? extends @NotNull Packet<?>> packet = PacketUtils.getPacket(value.trim());
if (packet != null && (filter == null || filter.test(packet))) packets.add(packet);
}
} catch (Exception _) {
Expand All @@ -51,65 +52,63 @@ protected Set<Class<? extends Packet<?>>> parseImpl(String str) {
}

@Override
protected boolean isValueValid(Set<Class<? extends Packet<?>>> value) {
protected boolean isValueValid(Set<PacketType<? extends @NotNull Packet<?>>> value) {
return true;
}

@Override
public List<String> getSuggestions() {
if (suggestions == null) {
suggestions = new ArrayList<>(PacketUtils.getC2SPackets().size() + PacketUtils.getS2CPackets().size());

for (Class<? extends Packet<?>> packet : PacketUtils.getC2SPackets()) {
suggestions.add(PacketUtils.getName(packet));
}

for (Class<? extends Packet<?>> packet : PacketUtils.getS2CPackets()) {
suggestions.add(PacketUtils.getName(packet));
}
}

return suggestions;
return filter == null
? PacketUtils.getPackets().stream().map(PacketType::toString).toList()
: PacketUtils.getPackets().stream().filter(filter).map(PacketType::toString).toList();
}

@Override
public CompoundTag save(CompoundTag tag) {
ListTag valueTag = new ListTag();
for (Class<? extends Packet<?>> packet : get()) {
valueTag.add(StringTag.valueOf(PacketUtils.getName(packet)));
for (PacketType<? extends @NotNull Packet<?>> packet : get()) {
valueTag.add(StringTag.valueOf(packet.toString()));
}
tag.put("value", valueTag);

return tag;
}

@Override
public Set<Class<? extends Packet<?>>> load(CompoundTag tag) {
public Set<PacketType<? extends @NotNull Packet<?>>> load(CompoundTag tag) {
get().clear();

Tag valueTag = tag.get("value");
if (valueTag instanceof ListTag listTag) {
for (Tag t : listTag) {
Class<? extends Packet<?>> packet = PacketUtils.getPacket(t.asString().orElse(""));
PacketType<? extends @NotNull Packet<?>> packet = PacketUtils.getPacket(t.asString().orElse(""));
if (packet != null && (filter == null || filter.test(packet))) get().add(packet);
}
}

return get();
}

public static class Builder extends SettingBuilder<Builder, Set<Class<? extends Packet<?>>>, PacketListSetting> {
private Predicate<Class<? extends Packet<?>>> filter;
public static class Builder extends SettingBuilder<Builder, Set<PacketType<? extends @NotNull Packet<?>>>, PacketListSetting> {
private Predicate<PacketType<? extends @NotNull Packet<?>>> filter;

public Builder() {
super(new ObjectOpenHashSet<>(0));
}

public Builder filter(Predicate<Class<? extends Packet<?>>> filter) {
public Builder filter(Predicate<PacketType<? extends @NotNull Packet<?>>> filter) {
this.filter = filter;
return this;
}

public Builder clientbound() {
return filter(type -> type.flow() == PacketFlow.CLIENTBOUND);
}

public Builder serverbound() {
return filter(type -> type.flow() == PacketFlow.SERVERBOUND);
}

@Override
public PacketListSetting build() {
return new PacketListSetting(name, description, defaultValue, onChanged, onModuleActivated, filter, visible);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,27 +11,28 @@
import meteordevelopment.meteorclient.settings.SettingGroup;
import meteordevelopment.meteorclient.systems.modules.Categories;
import meteordevelopment.meteorclient.systems.modules.Module;
import meteordevelopment.meteorclient.utils.network.PacketUtils;
import meteordevelopment.orbit.EventHandler;
import meteordevelopment.orbit.EventPriority;
import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.PacketType;
import org.jetbrains.annotations.NotNull;

import java.util.Set;

public class PacketCanceller extends Module {
private final SettingGroup sgGeneral = settings.getDefaultGroup();

private final Setting<Set<Class<? extends Packet<?>>>> s2cPackets = sgGeneral.add(new PacketListSetting.Builder()
private final Setting<Set<PacketType<? extends @NotNull Packet<?>>>> s2cPackets = sgGeneral.add(new PacketListSetting.Builder()
.name("S2C-packets")
.description("Server-to-client packets to cancel.")
.filter(aClass -> PacketUtils.getS2CPackets().contains(aClass))
.clientbound()
.build()
);

private final Setting<Set<Class<? extends Packet<?>>>> c2sPackets = sgGeneral.add(new PacketListSetting.Builder()
private final Setting<Set<PacketType<? extends @NotNull Packet<?>>>> c2sPackets = sgGeneral.add(new PacketListSetting.Builder()
.name("C2S-packets")
.description("Client-to-server packets to cancel.")
.filter(aClass -> PacketUtils.getC2SPackets().contains(aClass))
.serverbound()
.build()
);

Expand All @@ -42,11 +43,11 @@ public PacketCanceller() {

@EventHandler(priority = EventPriority.HIGHEST + 1)
private void onReceivePacket(PacketEvent.Receive event) {
if (s2cPackets.get().contains(event.packet.getClass())) event.cancel();
if (s2cPackets.get().contains(event.packet.type())) event.cancel();
}

@EventHandler(priority = EventPriority.HIGHEST + 1)
private void onSendPacket(PacketEvent.Send event) {
if (c2sPackets.get().contains(event.packet.getClass())) event.cancel();
if (c2sPackets.get().contains(event.packet.type())) event.cancel();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,16 @@

package meteordevelopment.meteorclient.systems.modules.misc;

import it.unimi.dsi.fastutil.objects.Reference2IntOpenHashMap;
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
import meteordevelopment.meteorclient.MeteorClient;
import meteordevelopment.meteorclient.events.packets.PacketEvent;
import meteordevelopment.meteorclient.settings.*;
import meteordevelopment.meteorclient.systems.modules.Categories;
import meteordevelopment.meteorclient.systems.modules.Module;
import meteordevelopment.meteorclient.utils.network.PacketUtils;
import meteordevelopment.orbit.EventHandler;
import meteordevelopment.orbit.EventPriority;
import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.PacketType;
import org.jspecify.annotations.NullMarked;
import org.jspecify.annotations.Nullable;

Expand All @@ -36,17 +36,17 @@ public class PacketLogger extends Module {
private final SettingGroup sgGeneral = settings.getDefaultGroup();
private final SettingGroup sgOutput = settings.createGroup("Output");

private final Setting<Set<Class<? extends Packet<?>>>> s2cPackets = sgGeneral.add(new PacketListSetting.Builder()
private final Setting<Set<PacketType<? extends Packet<?>>>> s2cPackets = sgGeneral.add(new PacketListSetting.Builder()
.name("S2C-packets")
.description("Server-to-client packets to log.")
.filter(aClass -> PacketUtils.getS2CPackets().contains(aClass))
.clientbound()
.build()
);

private final Setting<Set<Class<? extends Packet<?>>>> c2sPackets = sgGeneral.add(new PacketListSetting.Builder()
private final Setting<Set<PacketType<? extends Packet<?>>>> c2sPackets = sgGeneral.add(new PacketListSetting.Builder()
.name("C2S-packets")
.description("Client-to-server packets to log.")
.filter(aClass -> PacketUtils.getC2SPackets().contains(aClass))
.serverbound()
.build()
);

Expand Down Expand Up @@ -128,7 +128,7 @@ public class PacketLogger extends Module {
private static final int LINE_SEPARATOR_BYTES = System.lineSeparator().getBytes(StandardCharsets.UTF_8).length;
private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("HH:mm:ss.SSS");
private static final DateTimeFormatter FILE_NAME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd_HH-mm-ss");
private final Reference2IntOpenHashMap<Class<? extends Packet<?>>> packetCounts = new Reference2IntOpenHashMap<>();
private final Object2IntOpenHashMap<PacketType<? extends Packet<?>>> packetCounts = new Object2IntOpenHashMap<>();
private @Nullable BufferedWriter fileWriter;
private long lastFlushMs;
private long currentFileSizeBytes;
Expand Down Expand Up @@ -173,17 +173,14 @@ public void onDeactivate() {
private void logPacket(String direction, Packet<?> packet) {
if (!logToChat.get() && !logToFile.get()) return;

@SuppressWarnings("unchecked")
Class<? extends Packet<?>> packetClass = (Class<? extends Packet<?>>) packet.getClass();

// Update count
packetCounts.addTo(packetClass, 1);
packetCounts.addTo(packet.type(), 1);

// Build log message
StringBuilder msg = new StringBuilder(128);
if (showTimestamp.get()) msg.append("[").append(LocalDateTime.now().format(TIME_FORMATTER)).append("] ");
msg.append(direction).append(" ").append(PacketUtils.getName(packetClass));
if (showCount.get()) msg.append(" (#").append(packetCounts.getInt(packetClass)).append(")");
msg.append(direction).append(" ").append(packet.type());
if (showCount.get()) msg.append(" (#").append(packetCounts.getInt(packet.type())).append(")");
if (showPacketData.get()) msg.append("\n Data: ").append(packet);

// Log to chat and/or file
Expand All @@ -199,9 +196,9 @@ private void logSummary() {
lines.add("--- SUMMARY ---");
lines.add("Final packet counts (total " + totalPackets + "):");

packetCounts.reference2IntEntrySet().stream()
packetCounts.object2IntEntrySet().stream()
.sorted((a, b) -> Integer.compare(b.getIntValue(), a.getIntValue()))
.forEach(e -> lines.add(" %s: %d".formatted(PacketUtils.getName(e.getKey()), e.getIntValue())));
.forEach(e -> lines.add(" %s: %d".formatted(e.getKey().toString(), e.getIntValue())));

for (String line : lines) {
if (logToChat.get()) info(line);
Expand Down Expand Up @@ -290,11 +287,11 @@ private record LogFileEntry(Path path, long size, long lastModified) {

@EventHandler(priority = EventPriority.HIGHEST + 1)
private void onReceivePacket(PacketEvent.Receive event) {
if (s2cPackets.get().contains(event.packet.getClass())) logPacket("<- S2C", event.packet);
if (s2cPackets.get().contains(event.packet.type())) logPacket("<- S2C", event.packet);
}

@EventHandler(priority = EventPriority.HIGHEST + 1)
private void onSendPacket(PacketEvent.Send event) {
if (c2sPackets.get().contains(event.packet.getClass())) logPacket("-> C2S", event.packet);
if (c2sPackets.get().contains(event.packet.type())) logPacket("-> C2S", event.packet);
}
}
Loading
Loading