Skip to content

Rewrite PacketUtils #4748

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 3 commits into
base: master
Choose a base branch
from
Draft
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 @@ -11,30 +11,27 @@
import meteordevelopment.meteorclient.settings.Setting;
import meteordevelopment.meteorclient.utils.network.PacketUtils;
import net.minecraft.network.packet.Packet;
import net.minecraft.network.packet.PacketType;

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

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

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

if (filter == null) return true;
return filter.test(value);
protected boolean includeValue(PacketType<? extends Packet<?>> value) {
return ((PacketListSetting) setting).filter(value);
}

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

@Override
protected String getValueName(Class<? extends Packet<?>> value) {
protected String getValueName(PacketType<? extends Packet<?>> value) {
return PacketUtils.getName(value);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,76 +5,69 @@

package meteordevelopment.meteorclient.settings;

import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet;
import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet;
import meteordevelopment.meteorclient.utils.network.PacketUtils;
import net.minecraft.nbt.NbtCompound;
import net.minecraft.nbt.NbtElement;
import net.minecraft.nbt.NbtList;
import net.minecraft.nbt.NbtString;
import net.minecraft.network.NetworkSide;
import net.minecraft.network.packet.Packet;
import net.minecraft.network.packet.PacketType;

import java.util.ArrayList;
import java.util.List;
import java.util.Arrays;
import java.util.Map;
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 Packet<?>>>> {
private final Predicate<PacketType<? extends 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 Packet<?>>> defaultValue, Consumer<Set<PacketType<? extends Packet<?>>>> onChanged, Consumer<Setting<Set<PacketType<? extends Packet<?>>>>> onModuleActivated, Predicate<PacketType<? extends Packet<?>>> filter, IVisible visible) {
super(name, description, defaultValue, onChanged, onModuleActivated, visible);

this.filter = filter;
}

public boolean filter(PacketType<? extends Packet<?>> packetType) {
return filter == null || filter.test(packetType);
}

@Override
public void resetImpl() {
value = new ObjectOpenHashSet<>(defaultValue);
value = new ReferenceOpenHashSet<>(defaultValue);
}

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

try {
for (String value : values) {
Class<? extends Packet<?>> packet = PacketUtils.getPacket(value.trim());
if (packet != null && (filter == null || filter.test(packet))) packets.add(packet);
PacketType<? extends Packet<?>> packet = PacketUtils.getPacket(value.trim());
if (packet != null && filter(packet)) packets.add(packet);
}
} catch (Exception ignored) {}

return packets;
}

@Override
protected boolean isValueValid(Set<Class<? extends Packet<?>>> value) {
protected boolean isValueValid(Set<PacketType<? extends 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;
public Iterable<String> getSuggestions() {
return PacketUtils.getPacketEntries().stream().filter(entry -> this.filter(entry.getKey())).map(Map.Entry::getValue).toList();
}

@Override
public NbtCompound save(NbtCompound tag) {
NbtList valueTag = new NbtList();
for (Class<? extends Packet<?>> packet : get()) {
for (PacketType<? extends Packet<?>> packet : get()) {
valueTag.add(NbtString.of(PacketUtils.getName(packet)));
}
tag.put("value", valueTag);
Expand All @@ -83,32 +76,45 @@ public NbtCompound save(NbtCompound tag) {
}

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

NbtElement valueTag = tag.get("value");
if (valueTag instanceof NbtList) {
for (NbtElement t : (NbtList) valueTag) {
Class<? extends Packet<?>> packet = PacketUtils.getPacket(t.asString());
PacketType<? extends Packet<?>> packet = PacketUtils.getPacket(t.asString());
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 Packet<?>>>, PacketListSetting> {
private Predicate<PacketType<? extends Packet<?>>> filter;

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

@SafeVarargs
public final Builder defaultValue(PacketType<? extends Packet<?>>... defaults) {
return defaultValue(new ReferenceOpenHashSet<>(Arrays.asList(defaults)));
}

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

public Builder clientboundOnly() {
return filter(type -> type.side() == NetworkSide.CLIENTBOUND);
}

public Builder serverboundOnly() {
return filter(type -> type.side() == NetworkSide.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 @@ -108,7 +108,7 @@ public Iterable<Identifier> getIdentifierSuggestions() {
return null;
}

public List<String> getSuggestions() {
public Iterable<String> getSuggestions() {
return NO_SUGGESTIONS;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,27 +11,27 @@
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.packet.Packet;
import net.minecraft.network.packet.PacketType;

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 Packet<?>>>> s2cPackets = sgGeneral.add(new PacketListSetting.Builder()
.name("S2C-packets")
.description("Server-to-client packets to cancel.")
.filter(aClass -> PacketUtils.getS2CPackets().contains(aClass))
.clientboundOnly()
.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 cancel.")
.filter(aClass -> PacketUtils.getC2SPackets().contains(aClass))
.serverboundOnly()
.build()
);

Expand All @@ -42,11 +42,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.getPacketId())) 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.getPacketId())) event.cancel();
}
}
Loading
Loading