From 2ed479a73cc0450ab1b98b625d341a1e4601e2f9 Mon Sep 17 00:00:00 2001 From: wuritz Date: Tue, 22 Jul 2025 12:00:11 +0200 Subject: [PATCH] genyo goodbye --- gradle.properties | 2 +- src/main/java/com/genyo/addon/GenyoAddon.java | 1 + .../DefaultSettingsWidgetFactoryMixin.java | 2 + .../com/genyo/addon/modules/GenyoGoodbye.java | 136 ++++++++++++++++++ .../com/genyo/addon/modules/GenyoWelcome.java | 116 +-------------- .../genyo/addon/screens/ListGroupScreen.java | 12 +- .../settings/playerlist/ListGroupSetting.java | 33 ++--- .../addon/settings/playerlist/ListPlayer.java | 101 +++++++++++++ .../addon/settings/playerlist/PLGroup.java | 37 +++-- .../com/genyo/addon/utils/GenyoChatUtils.java | 28 ++++ .../java/com/genyo/addon/utils/MathUtil.java | 2 +- 11 files changed, 320 insertions(+), 150 deletions(-) create mode 100644 src/main/java/com/genyo/addon/modules/GenyoGoodbye.java create mode 100644 src/main/java/com/genyo/addon/settings/playerlist/ListPlayer.java create mode 100644 src/main/java/com/genyo/addon/utils/GenyoChatUtils.java diff --git a/gradle.properties b/gradle.properties index 5519133..8fbe06d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -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 diff --git a/src/main/java/com/genyo/addon/GenyoAddon.java b/src/main/java/com/genyo/addon/GenyoAddon.java index 64e7754..ffc8433 100644 --- a/src/main/java/com/genyo/addon/GenyoAddon.java +++ b/src/main/java/com/genyo/addon/GenyoAddon.java @@ -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) { diff --git a/src/main/java/com/genyo/addon/mixin/DefaultSettingsWidgetFactoryMixin.java b/src/main/java/com/genyo/addon/mixin/DefaultSettingsWidgetFactoryMixin.java index 24f3b16..1bf5507 100644 --- a/src/main/java/com/genyo/addon/mixin/DefaultSettingsWidgetFactoryMixin.java +++ b/src/main/java/com/genyo/addon/mixin/DefaultSettingsWidgetFactoryMixin.java @@ -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; @@ -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); diff --git a/src/main/java/com/genyo/addon/modules/GenyoGoodbye.java b/src/main/java/com/genyo/addon/modules/GenyoGoodbye.java new file mode 100644 index 0000000..2bbe556 --- /dev/null +++ b/src/main/java/com/genyo/addon/modules/GenyoGoodbye.java @@ -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 messageQueue = new LinkedList<>(); + private int timer; + + private Set onlinePlayers = new HashSet<>(); + private ArrayList groupsList = new ArrayList<>(); + private ArrayList 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> groups = sgGeneral.add(new ListGroupSetting.Builder() + .name("Groups") + .description("sdasdjgewqjhgfjhgewjhfg ew gfjhewgfhjgwehjf gjhwe few") + .onChanged(this::refreshList) + .build() + ); + + private final Setting 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 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 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("") ? toSend.replace("", name) : toSend; + + Message msg = new Message(toSend, false); + messageQueue.add(msg); + } + + private record Message(String message, boolean kill) { + } + +} diff --git a/src/main/java/com/genyo/addon/modules/GenyoWelcome.java b/src/main/java/com/genyo/addon/modules/GenyoWelcome.java index f4b8ced..7fcc1e3 100644 --- a/src/main/java/com/genyo/addon/modules/GenyoWelcome.java +++ b/src/main/java/com/genyo/addon/modules/GenyoWelcome.java @@ -4,7 +4,6 @@ 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; @@ -12,21 +11,11 @@ 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; @@ -42,7 +31,7 @@ public class GenyoWelcome extends GenyoModule { private final SettingGroup sgGeneral = settings.getDefaultGroup(); private final Setting> groups = sgGeneral.add(new ListGroupSetting.Builder() - .name("Groups:") + .name("Groups") .description("sdasdjgewqjhgfjhgewjhfg ew gfjhewgfhjgwehjf gjhwe few") .onChanged(this::refreshList) .build() @@ -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) { @@ -125,9 +110,12 @@ private void handleMessage(String name) { AtomicReference 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("") ? toSend.replace("", name) : toSend; @@ -135,7 +123,7 @@ private void handleMessage(String name) { messageQueue.add(msg); } - private void refreshList(List newGroups) { + public void refreshList(List newGroups) { groupsList.clear(); groupsList.addAll(newGroups); @@ -149,96 +137,6 @@ private void refreshList(List newGroups) { }); } - public static ListPlayer createListPlayer(String name) { - return new ListPlayer(name); - } - - public static class ListPlayer implements ISerializable, Comparable { - 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) { } diff --git a/src/main/java/com/genyo/addon/screens/ListGroupScreen.java b/src/main/java/com/genyo/addon/screens/ListGroupScreen.java index 36f70c5..f32bfb6 100644 --- a/src/main/java/com/genyo/addon/screens/ListGroupScreen.java +++ b/src/main/java/com/genyo/addon/screens/ListGroupScreen.java @@ -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; @@ -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; @@ -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(); @@ -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(); } diff --git a/src/main/java/com/genyo/addon/settings/playerlist/ListGroupSetting.java b/src/main/java/com/genyo/addon/settings/playerlist/ListGroupSetting.java index 6c2fa01..fd2ffe4 100644 --- a/src/main/java/com/genyo/addon/settings/playerlist/ListGroupSetting.java +++ b/src/main/java/com/genyo/addon/settings/playerlist/ListGroupSetting.java @@ -1,12 +1,13 @@ package com.genyo.addon.settings.playerlist; import com.genyo.addon.GenyoAddon; -import com.genyo.addon.modules.GenyoWelcome; import com.genyo.addon.screens.ListGroupScreen; +import com.genyo.addon.utils.GenyoChatUtils; import meteordevelopment.meteorclient.gui.GuiTheme; import meteordevelopment.meteorclient.gui.renderer.GuiRenderer; import meteordevelopment.meteorclient.gui.widgets.containers.WTable; import meteordevelopment.meteorclient.gui.widgets.pressable.WButton; +import meteordevelopment.meteorclient.gui.widgets.pressable.WCheckbox; import meteordevelopment.meteorclient.gui.widgets.pressable.WMinus; import meteordevelopment.meteorclient.settings.IVisible; import meteordevelopment.meteorclient.settings.Setting; @@ -32,9 +33,14 @@ public static void fillTable(GuiTheme theme, WTable table, ListGroupSetting sett for (int i = 0; i < setting.get().size(); i++) { int currentIndex = i; - table.add(theme.label(groups.get(i).getGroupName())).widget(); - WButton button = table.add(theme.button("Edit Group")).expandX().widget(); - //WCheckbox toggle = table.add(theme.checkbox(true)).widget(); + PLGroup currentGroup = groups.get(currentIndex); + WCheckbox toggle = table.add(theme.checkbox(currentGroup.isEnabled())).widget(); + toggle.action = () -> { + currentGroup.setEnabled(toggle.checked); + GenyoChatUtils.sendInfo("Set group '" + currentGroup.getGroupName() + "' to " + (toggle.checked ? "enabled" : "disabled.")); + }; + table.add(theme.label(groups.get(i).getGroupName())); + WButton button = table.add(theme.button("Edit")).expandX().widget(); button.action = () -> { mc.setScreen(new ListGroupScreen(theme, setting, currentIndex, mc.currentScreen)); }; @@ -59,7 +65,7 @@ public static void fillTable(GuiTheme theme, WTable table, ListGroupSetting sett add.action = () -> { int currentNew = groups.size() + 1; String newName = "Group " + currentNew; - groups.add(new PLGroup(newName, "asd", new ArrayList())); + groups.add(new PLGroup(newName, "asd ", new ArrayList())); setting.set(groups); fillTable(theme, table, setting); @@ -76,7 +82,6 @@ public static void fillTable(GuiTheme theme, WTable table, ListGroupSetting sett @Override protected List parseImpl(String s) { String[] values = s.split(","); - GenyoAddon.LOG.info(Arrays.toString(values)); return List.of(); } @@ -93,9 +98,6 @@ protected NbtCompound save(NbtCompound tag) { tag.put("indexes", indexes); tag.put("message", null); tag.put("players", null); - - GenyoAddon.LOG.info("saved with empty"); - GenyoAddon.LOG.info(tag.toString()); return tag; } else { for (int i = 0; i < get().size(); i++) { @@ -122,24 +124,18 @@ protected NbtCompound save(NbtCompound tag) { tag.put("group_names", groupNames); tag.put("messages", messages); tag.put("players", players); - - GenyoAddon.LOG.info("saveee"); - GenyoAddon.LOG.info(tag.toString()); return tag; } @Override protected List load(NbtCompound tag) { get().clear(); - GenyoAddon.LOG.info(tag.toString()); NbtList nbtIndexes = (NbtList) tag.get("indexes"); - if (nbtIndexes.isEmpty()) { + if (nbtIndexes != null && nbtIndexes.isEmpty()) { GenyoAddon.LOG.info("nem jo"); return get(); } - GenyoAddon.LOG.info("loadddddd"); - ArrayList indexes = new ArrayList<>(); for (NbtElement tagIndex : (NbtList) tag.get("indexes")) { NbtInt index = (NbtInt) tagIndex; @@ -152,19 +148,18 @@ protected List load(NbtCompound tag) { String msg = messages.get(i).asString(); String groupName = groupNames.get(i).asString(); - List players = new ArrayList<>(); + List players = new ArrayList<>(); NbtList playersList = (NbtList) tag.get("players"); for (NbtElement val : playersList) { NbtList currentPlayers = (NbtList) playersList.get(i); currentPlayers.forEach(player -> { - GenyoWelcome.ListPlayer listPlayer = GenyoWelcome.createListPlayer(player.asString()); + ListPlayer listPlayer = new ListPlayer(player.asString()); players.add(listPlayer); }); } PLGroup newGroup = new PLGroup(groupName, msg, players); - GenyoAddon.LOG.info(newGroup.toString()); get().add(newGroup); } diff --git a/src/main/java/com/genyo/addon/settings/playerlist/ListPlayer.java b/src/main/java/com/genyo/addon/settings/playerlist/ListPlayer.java new file mode 100644 index 0000000..25766a1 --- /dev/null +++ b/src/main/java/com/genyo/addon/settings/playerlist/ListPlayer.java @@ -0,0 +1,101 @@ +package com.genyo.addon.settings.playerlist; + +import com.mojang.util.UndashedUuid; +import meteordevelopment.meteorclient.utils.misc.ISerializable; +import meteordevelopment.meteorclient.utils.network.Http; +import meteordevelopment.meteorclient.utils.render.PlayerHeadTexture; +import meteordevelopment.meteorclient.utils.render.PlayerHeadUtils; +import net.minecraft.client.MinecraftClient; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.nbt.NbtCompound; +import org.jetbrains.annotations.NotNull; + +import javax.annotation.Nullable; +import java.util.Objects; +import java.util.UUID; + +public class ListPlayer implements ISerializable, Comparable { + 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(boolean updateName) { + updating = true; + ListPlayer.APIResponse res = Http.get("https://api.mojang.com/users/profiles/minecraft/" + name).sendJson(ListPlayer.APIResponse.class); + if (res == null || res.name == null || res.id == null) return; + if (updateName) 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 ListPlayer player) { + return name.compareTo(player.name); + } + + private static class APIResponse { + String name, id; + } +} diff --git a/src/main/java/com/genyo/addon/settings/playerlist/PLGroup.java b/src/main/java/com/genyo/addon/settings/playerlist/PLGroup.java index b27ae63..5abbfa3 100644 --- a/src/main/java/com/genyo/addon/settings/playerlist/PLGroup.java +++ b/src/main/java/com/genyo/addon/settings/playerlist/PLGroup.java @@ -7,27 +7,24 @@ public class PLGroup { private volatile String message; - private volatile List players; + private volatile List players; private volatile String name; + private volatile boolean enabled; - public PLGroup(String name, String message, List players) { + public PLGroup(String name, String message, List players) { this.name = name; this.message = message; this.players = players; + this.enabled = true; } - public boolean containsPlayer(GenyoWelcome.ListPlayer player) { - for (GenyoWelcome.ListPlayer listPlayer : players) { - if (listPlayer.getName().equals(player.getName())) { - return true; - } - } - + public boolean containsPlayer(ListPlayer player) { + if (containsPlayer(player.getName())) return true; return false; } public boolean containsPlayer(String name) { - for (GenyoWelcome.ListPlayer listPlayer : players) { + for (ListPlayer listPlayer : players) { if (listPlayer.getName().equals(name)) { return true; } @@ -48,7 +45,7 @@ public void setMessage(String message) { this.message = message; } - public List getPlayers() { + public List getPlayers() { return players; } @@ -56,16 +53,28 @@ public void setGroupName(String newName) { this.name = newName; } - public void setPlayers(List players) { + public void setPlayers(List players) { this.players = players; } - public void addPlayer(GenyoWelcome.ListPlayer player) { + public void addPlayer(ListPlayer player) { players.add(player); } - public void removePlayer(GenyoWelcome.ListPlayer player) { + public void removePlayer(ListPlayer player) { players.remove(player); } + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + + public void toggle() { + enabled = !enabled; + } + } diff --git a/src/main/java/com/genyo/addon/utils/GenyoChatUtils.java b/src/main/java/com/genyo/addon/utils/GenyoChatUtils.java new file mode 100644 index 0000000..33f8d77 --- /dev/null +++ b/src/main/java/com/genyo/addon/utils/GenyoChatUtils.java @@ -0,0 +1,28 @@ +package com.genyo.addon.utils; + +import meteordevelopment.meteorclient.mixininterface.IChatHud; +import meteordevelopment.meteorclient.utils.player.ChatUtils; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +import java.util.Objects; + +import static meteordevelopment.meteorclient.MeteorClient.mc; + +public class GenyoChatUtils { + + private static final String prefix = Formatting.GOLD + "" + Formatting.BOLD + "[Genyo]"; + + public static void sendInfo(String text) { + if (mc.world == null) return; + + ChatUtils.forceNextPrefixClass(GenyoChatUtils.class); + String msg = prefix + " " + Formatting.GRAY + text; + sendMessage(Text.of(msg), Objects.hash("genyo-info")); + } + + public static void sendMessage(Text text, int id) { + ((IChatHud) mc.inGameHud.getChatHud()).meteor$add(text, id); + } + +} diff --git a/src/main/java/com/genyo/addon/utils/MathUtil.java b/src/main/java/com/genyo/addon/utils/MathUtil.java index 9e7d136..7361eca 100644 --- a/src/main/java/com/genyo/addon/utils/MathUtil.java +++ b/src/main/java/com/genyo/addon/utils/MathUtil.java @@ -20,7 +20,7 @@ public static float rad(float angle) { public static int pickRandom(List list) { if (list.size() == 1) return 0; - int num = r.nextInt(0, list.size()); + int num = r.nextInt(1, list.size()); return num-1; }