package cloudburst.rejects.modules; import cloudburst.rejects.MeteorRejectsAddon; import cloudburst.rejects.screens.InteractionScreen; import it.unimi.dsi.fastutil.objects.Object2BooleanMap; import minegame159.meteorclient.gui.GuiTheme; import minegame159.meteorclient.gui.widgets.WWidget; import minegame159.meteorclient.gui.widgets.containers.WTable; import minegame159.meteorclient.gui.widgets.input.WTextBox; import minegame159.meteorclient.gui.widgets.pressable.WMinus; import minegame159.meteorclient.gui.widgets.pressable.WPlus; import minegame159.meteorclient.settings.*; import minegame159.meteorclient.systems.modules.Module; import minegame159.meteorclient.utils.Utils; import minegame159.meteorclient.utils.misc.Keybind; import net.minecraft.client.render.debug.DebugRenderer; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.StringTag; import java.util.HashMap; import java.util.Optional; public class InteractionMenu extends Module { private final SettingGroup sgGeneral = settings.getDefaultGroup(); private final Setting>> entities = sgGeneral.add(new EntityTypeListSetting.Builder() .name("entities") .description("Entities") .defaultValue(Utils.asObject2BooleanOpenHashMap( EntityType.PLAYER)) .build() ); public final Setting keybind = sgGeneral.add(new KeybindSetting.Builder() .name("keybind") .description("The keybind to open.") .action(this::onKey) .build() ); public final HashMap messages = new HashMap<>(); private String currMsgK = "", currMsgV = ""; public InteractionMenu() { super(MeteorRejectsAddon.CATEGORY,"interaction-menu","An interaction screen when looking at an entity."); } public void onKey() { if (mc.currentScreen != null) return; Optional lookingAt = DebugRenderer.getTargetedEntity(mc.player, 20); if (lookingAt.isPresent()) { Entity e = lookingAt.get(); if (entities.get().getBoolean(e.getType())) { //isOpen = true; mc.openScreen(new InteractionScreen(e)); } } } @Override public WWidget getWidget(GuiTheme theme) { WTable table = theme.table(); fillTable(theme, table); return table; } private void fillTable(GuiTheme theme, WTable table) { table.clear(); messages.keySet().forEach((key) -> { table.add(theme.label(key)).expandCellX(); table.add(theme.label(messages.get(key))).expandCellX(); WMinus delete = table.add(theme.minus()).widget(); delete.action = () -> { messages.remove(key); fillTable(theme,table); }; table.row(); }); WTextBox textBoxK = table.add(theme.textBox(currMsgK)).minWidth(100).expandX().widget(); textBoxK.action = () -> { currMsgK = textBoxK.get(); }; WTextBox textBoxV = table.add(theme.textBox(currMsgV)).minWidth(100).expandX().widget(); textBoxV.action = () -> { currMsgV = textBoxV.get(); }; WPlus add = table.add(theme.plus()).widget(); add.action = () -> { if (currMsgK != "" && currMsgV != "") { messages.put(currMsgK, currMsgV); currMsgK = ""; currMsgV = ""; fillTable(theme,table); } }; table.row(); } @Override public CompoundTag toTag() { CompoundTag tag = super.toTag(); CompoundTag messTag = new CompoundTag(); messages.keySet().forEach((key) -> { messTag.put(key, StringTag.of(messages.get(key))); }); tag.put("messages", messTag); return tag; } @Override public Module fromTag(CompoundTag tag) { if (tag.contains("messages")) { CompoundTag msgs = tag.getCompound("messages"); msgs.getKeys().forEach((key) -> { messages.put(key, msgs.getString(key)); }); } return super.fromTag(tag); } }