126 lines
4.3 KiB
Java
126 lines
4.3 KiB
Java
package cloudburst.rejects.modules;
|
|
|
|
import cloudburst.rejects.MeteorRejectsAddon;
|
|
import cloudburst.rejects.gui.screens.InteractionScreen;
|
|
import it.unimi.dsi.fastutil.objects.Object2BooleanMap;
|
|
import meteordevelopment.meteorclient.gui.GuiTheme;
|
|
import meteordevelopment.meteorclient.gui.widgets.WWidget;
|
|
import meteordevelopment.meteorclient.gui.widgets.containers.WTable;
|
|
import meteordevelopment.meteorclient.gui.widgets.input.WTextBox;
|
|
import meteordevelopment.meteorclient.gui.widgets.pressable.WMinus;
|
|
import meteordevelopment.meteorclient.gui.widgets.pressable.WPlus;
|
|
import meteordevelopment.meteorclient.settings.*;
|
|
import meteordevelopment.meteorclient.systems.modules.Module;
|
|
import meteordevelopment.meteorclient.utils.Utils;
|
|
import meteordevelopment.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.NbtCompound;
|
|
import net.minecraft.nbt.NbtString;
|
|
|
|
import java.util.HashMap;
|
|
import java.util.Optional;
|
|
|
|
public class InteractionMenu extends Module {
|
|
|
|
private final SettingGroup sgGeneral = settings.getDefaultGroup();
|
|
|
|
private final Setting<Object2BooleanMap<EntityType<?>>> entities = sgGeneral.add(new EntityTypeListSetting.Builder()
|
|
.name("entities")
|
|
.description("Entities")
|
|
.defaultValue(Utils.asObject2BooleanOpenHashMap(
|
|
EntityType.PLAYER))
|
|
.build()
|
|
);
|
|
public final Setting<Keybind> keybind = sgGeneral.add(new KeybindSetting.Builder()
|
|
.name("keybind")
|
|
.description("The keybind to open.")
|
|
.action(this::onKey)
|
|
.build()
|
|
);
|
|
|
|
public final HashMap<String,String> 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<Entity> 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 NbtCompound toTag() {
|
|
NbtCompound tag = super.toTag();
|
|
|
|
NbtCompound messTag = new NbtCompound();
|
|
messages.keySet().forEach((key) -> {
|
|
messTag.put(key, NbtString.of(messages.get(key)));
|
|
});
|
|
|
|
tag.put("messages", messTag);
|
|
return tag;
|
|
}
|
|
|
|
@Override
|
|
public Module fromTag(NbtCompound tag) {
|
|
|
|
if (tag.contains("messages")) {
|
|
NbtCompound msgs = tag.getCompound("messages");
|
|
msgs.getKeys().forEach((key) -> {
|
|
messages.put(key, msgs.getString(key));
|
|
});
|
|
}
|
|
|
|
return super.fromTag(tag);
|
|
}
|
|
}
|