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
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ yarn_mappings=1.21.4+build.8
loader_version=0.16.14

# Mod Properties
mod_version=0.7.2
mod_version=0.7.3
maven_group=com.genyo
archives_base_name=genyo-addon

Expand Down
1 change: 1 addition & 0 deletions src/main/java/com/genyo/addon/GenyoAddon.java
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ private void initModules(Modules modules) {
modules.add(new GenyoSurround());
modules.add(new GenyoWelcome());
modules.add(new GenyoSkinBlink());
modules.add(new GenyoGoodbye());
}

private void initHUD(Hud hud) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import meteordevelopment.meteorclient.settings.Setting;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
Expand All @@ -28,6 +29,7 @@ protected void genyo(CallbackInfo info) {
factories.put(ListGroupSetting.class, (table, setting) -> listGroupW(table, (ListGroupSetting) setting));
}

@Unique
private void listGroupW(WTable table, ListGroupSetting setting) {
WTable wtable = table.add(theme.table()).expandX().widget();
ListGroupSetting.fillTable(theme, wtable, setting);
Expand Down
136 changes: 136 additions & 0 deletions src/main/java/com/genyo/addon/modules/GenyoGoodbye.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
package com.genyo.addon.modules;

import com.genyo.addon.GenyoAddon;
import com.genyo.addon.settings.playerlist.ListGroupSetting;
import com.genyo.addon.settings.playerlist.PLGroup;
import meteordevelopment.meteorclient.events.game.GameJoinedEvent;
import meteordevelopment.meteorclient.events.game.GameLeftEvent;
import meteordevelopment.meteorclient.events.packets.PacketEvent;
import meteordevelopment.meteorclient.events.world.TickEvent;
import meteordevelopment.meteorclient.settings.IntSetting;
import meteordevelopment.meteorclient.settings.Setting;
import meteordevelopment.meteorclient.settings.SettingGroup;
import meteordevelopment.meteorclient.utils.player.ChatUtils;
import meteordevelopment.orbit.EventHandler;
import meteordevelopment.orbit.EventPriority;
import net.minecraft.client.network.PlayerListEntry;
import net.minecraft.network.packet.s2c.play.PlayerRemoveS2CPacket;

import java.util.*;
import java.util.concurrent.atomic.AtomicReference;

public class GenyoGoodbye extends GenyoModule {

private final List<Message> messageQueue = new LinkedList<>();
private int timer;

private Set<UUID> onlinePlayers = new HashSet<>();
private ArrayList<PLGroup> groupsList = new ArrayList<>();
private ArrayList<String> namesList = new ArrayList<>();

public GenyoGoodbye() {
super(GenyoAddon.GENYO, "genyo-goodbye", "i hate kiwi. i hate kiwi. i hate kiwi. i hate kiwi. i hate kiwi. ");
}

private final SettingGroup sgGeneral = settings.getDefaultGroup();

private final Setting<List<PLGroup>> groups = sgGeneral.add(new ListGroupSetting.Builder()
.name("Groups")
.description("sdasdjgewqjhgfjhgewjhfg ew gfjhewgfhjgwehjf gjhwe few")
.onChanged(this::refreshList)
.build()
);

private final Setting<Integer> tickDelay = sgGeneral.add(new IntSetting.Builder()
.name("Delay")
.description("tick delay between the messages.")
.defaultValue(0)
.min(0)
.sliderRange(0, 100)
.build()
);

@EventHandler(priority = EventPriority.HIGHEST)
private void onTick(TickEvent.Pre event) {
if (mc.player == null && mc.world == null) return;
timer++;

if (timer >= tickDelay.get() && !messageQueue.isEmpty()) {
Message msg = messageQueue.get(0);
ChatUtils.sendPlayerMsg(msg.message);
timer = 0;

if (msg.kill) messageQueue.clear();
else messageQueue.removeFirst();
}
}

@Override
public void onActivate() {
onlinePlayers.clear();
}

@EventHandler
private void onReceivePacket(PacketEvent.Receive event) {
if (event.packet instanceof PlayerRemoveS2CPacket pac) {
PlayerListEntry entry = mc.getNetworkHandler().getPlayerListEntry(pac.profileIds().getFirst());
if (entry == null) return;

String name = entry.getProfile().getName();
if (!namesList.contains(name)) return;

handleMessage(name);
}
}

@EventHandler
private void onGameJoined(GameJoinedEvent event) {
if (mc.player == null && mc.world == null) return;
onlinePlayers.clear();
mc.getNetworkHandler().getPlayerList().iterator().forEachRemaining(p -> {
if (p.getProfile() != null) onlinePlayers.add(p.getProfile().getId());
});
}

@EventHandler
private void onGameLeft(GameLeftEvent event) {
onlinePlayers.clear();
}

public void refreshList(List<PLGroup> newGroups) {
groupsList.clear();
groupsList.addAll(newGroups);

namesList.clear();
newGroups.forEach(group -> {
if (group.getPlayers().isEmpty()) return;

group.getPlayers().forEach(player -> {
namesList.add(player.getName());
});
});
}

private void handleMessage(String name) {
if (mc.world == null) return;

AtomicReference<String> atomicMSG = new AtomicReference<>("");
groupsList.forEach(group -> {
if (group.containsPlayer(name)) {
if (group.isEnabled()) atomicMSG.set(group.getMessage());
}
});

if (atomicMSG.get() == "") return;

String toSend = atomicMSG.get();
toSend = toSend.contains("<NAME>") ? toSend.replace("<NAME>", name) : toSend;

Message msg = new Message(toSend, false);
messageQueue.add(msg);
}

private record Message(String message, boolean kill) {
}

}
116 changes: 7 additions & 109 deletions src/main/java/com/genyo/addon/modules/GenyoWelcome.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,29 +4,18 @@
import com.genyo.addon.settings.playerlist.ListGroupSetting;
import com.genyo.addon.settings.playerlist.PLGroup;
import com.mojang.authlib.GameProfile;
import com.mojang.util.UndashedUuid;
import meteordevelopment.meteorclient.events.game.GameJoinedEvent;
import meteordevelopment.meteorclient.events.game.GameLeftEvent;
import meteordevelopment.meteorclient.events.packets.PacketEvent;
import meteordevelopment.meteorclient.events.world.TickEvent;
import meteordevelopment.meteorclient.settings.IntSetting;
import meteordevelopment.meteorclient.settings.Setting;
import meteordevelopment.meteorclient.settings.SettingGroup;
import meteordevelopment.meteorclient.utils.misc.ISerializable;
import meteordevelopment.meteorclient.utils.network.Http;
import meteordevelopment.meteorclient.utils.player.ChatUtils;
import meteordevelopment.meteorclient.utils.render.PlayerHeadTexture;
import meteordevelopment.meteorclient.utils.render.PlayerHeadUtils;
import meteordevelopment.orbit.EventHandler;
import meteordevelopment.orbit.EventPriority;
import net.minecraft.client.MinecraftClient;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.nbt.NbtCompound;
import net.minecraft.network.packet.s2c.play.PlayerListS2CPacket;
import net.minecraft.network.packet.s2c.play.PlayerRemoveS2CPacket;
import org.jetbrains.annotations.NotNull;

import javax.annotation.Nullable;
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;

Expand All @@ -42,7 +31,7 @@ public class GenyoWelcome extends GenyoModule {
private final SettingGroup sgGeneral = settings.getDefaultGroup();

private final Setting<List<PLGroup>> groups = sgGeneral.add(new ListGroupSetting.Builder()
.name("Groups:")
.name("Groups")
.description("sdasdjgewqjhgfjhgewjhfg ew gfjhewgfhjgwehjf gjhwe few")
.onChanged(this::refreshList)
.build()
Expand Down Expand Up @@ -106,17 +95,13 @@ private void onReceivePacket(PacketEvent.Receive event) {
if (!namesList.contains(name)) return;
UUID playerUuid = profile.getId();

GenyoAddon.LOG.info(pac.getActions().toString());

if (!pac.getActions().contains(PlayerListS2CPacket.Action.ADD_PLAYER)
&& playerUuid != null && !onlinePlayers.contains(playerUuid)) return;

handleMessage(name);
onlinePlayers.add(playerUuid);
});
}/* else if (event.packet instanceof PlayerRemoveS2CPacket pac) {
GenyoAddon.LOG.info(pac.toString());
}*/
}
}

private void handleMessage(String name) {
Expand All @@ -125,17 +110,20 @@ private void handleMessage(String name) {
AtomicReference<String> atomicMSG = new AtomicReference<>("");
groupsList.forEach(group -> {
if (group.containsPlayer(name)) {
atomicMSG.set(group.getMessage());
if (group.isEnabled()) atomicMSG.set(group.getMessage());
}
});

if (atomicMSG.get() == "") return;

String toSend = atomicMSG.get();
toSend = toSend.contains("<NAME>") ? toSend.replace("<NAME>", name) : toSend;

Message msg = new Message(toSend, false);
messageQueue.add(msg);
}

private void refreshList(List<PLGroup> newGroups) {
public void refreshList(List<PLGroup> newGroups) {
groupsList.clear();
groupsList.addAll(newGroups);

Expand All @@ -149,96 +137,6 @@ private void refreshList(List<PLGroup> newGroups) {
});
}

public static ListPlayer createListPlayer(String name) {
return new ListPlayer(name);
}

public static class ListPlayer implements ISerializable<ListPlayer>, Comparable<ListPlayer> {
private static final MinecraftClient mc = MinecraftClient.getInstance();

public volatile String name;
private volatile @Nullable UUID id;
private volatile @Nullable PlayerHeadTexture headTexture;
private volatile boolean updating;

public ListPlayer(String name, @Nullable UUID id) {
this.name = name;
this.id = id;
this.headTexture = null;
}

public ListPlayer(PlayerEntity player) {
this(player.getName().getString(), player.getUuid());
}

public ListPlayer(String name) {
this(name, null);
}

public UUID getId() {
return id;
}

public String getName() {
return name;
}

public PlayerHeadTexture getHead() {
return headTexture != null ? headTexture : PlayerHeadUtils.STEVE_HEAD;
}

public void updateInfo() {
updating = true;
APIResponse res = Http.get("https://api.mojang.com/users/profiles/minecraft/" + name).sendJson(APIResponse.class);
if (res == null || res.name == null || res.id == null) return;
name = res.name;
id = UndashedUuid.fromStringLenient(res.id);
mc.execute(() -> headTexture = PlayerHeadUtils.fetchHead(id));
updating = false;
}

public boolean headTextureNeedsUpdate() {
return !this.updating && headTexture == null;
}

@Override
public NbtCompound toTag() {
NbtCompound tag = new NbtCompound();

tag.putString("name", name);
if (id != null) tag.putString("id", UndashedUuid.toString(id));

return tag;
}

@Override
public ListPlayer fromTag(NbtCompound tag) {
return this;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ListPlayer player = (ListPlayer) o;
return Objects.equals(name, player.name);
}

@Override
public int hashCode() {
return Objects.hash(name);
}

@Override
public int compareTo(@NotNull GenyoWelcome.ListPlayer player) {
return name.compareTo(player.name);
}

private static class APIResponse {
String name, id;
}
}

private record Message(String message, boolean kill) {
}

Expand Down
12 changes: 6 additions & 6 deletions src/main/java/com/genyo/addon/screens/ListGroupScreen.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.genyo.addon.screens;

import com.genyo.addon.modules.GenyoWelcome;
import com.genyo.addon.settings.playerlist.ListGroupSetting;
import com.genyo.addon.settings.playerlist.ListPlayer;
import com.genyo.addon.settings.playerlist.PLGroup;
import meteordevelopment.meteorclient.gui.GuiTheme;
import meteordevelopment.meteorclient.gui.WindowScreen;
Expand Down Expand Up @@ -69,7 +69,7 @@ public void initWidgets() {

//PLGroup currentGroup = setting.get().get(index);

GenyoWelcome.ListPlayer player = GenyoWelcome.createListPlayer(name);
ListPlayer player = new ListPlayer(name);
if (currentGroup.containsPlayer(player)) { // it already exists
nameW.set("");
return;
Expand Down Expand Up @@ -104,13 +104,13 @@ private void initTable(WTable table) {
return;
}
if (player.headTextureNeedsUpdate()) {
player.updateInfo();
player.updateInfo(false);
reload();
}
})
);

for (GenyoWelcome.ListPlayer player : currentGroup.getPlayers()) {
for (ListPlayer player : currentGroup.getPlayers()) {
if (player == null) {
currentGroup.removePlayer(player);
confirmChanges();
Expand All @@ -137,11 +137,11 @@ private void confirmChanges() {
setting.onChanged();
}

protected WWidget getValueWidget(GenyoWelcome.ListPlayer value) {
protected WWidget getValueWidget(ListPlayer value) {
return theme.label(getValueName(value));
}

protected String getValueName(GenyoWelcome.ListPlayer value) {
protected String getValueName(ListPlayer value) {
return value.getName();
}

Expand Down
Loading
Loading