Files
CustomNPC-Plus/src/main/java/noppes/npcs/client/gui/GuiNpcMobSpawnerAdd.java
T

200 lines
5.6 KiB
Java
Raw Normal View History

2018-09-13 12:03:28 -04:00
package noppes.npcs.client.gui;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiYesNo;
import net.minecraft.client.gui.GuiYesNoCallback;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityList;
import net.minecraft.nbt.NBTTagCompound;
2023-04-08 18:03:05 -04:00
import net.minecraft.nbt.NBTTagList;
import net.minecraft.nbt.NBTTagString;
2018-09-13 12:03:28 -04:00
import noppes.npcs.client.Client;
import noppes.npcs.client.controllers.ClientCloneController;
2022-01-18 00:20:50 -05:00
import noppes.npcs.client.gui.util.*;
2018-09-13 12:03:28 -04:00
import noppes.npcs.constants.EnumPacketServer;
import noppes.npcs.controllers.data.Tag;
import noppes.npcs.entity.EntityNPCInterface;
2018-09-13 12:03:28 -04:00
2024-02-15 17:54:28 -05:00
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.UUID;
2023-04-08 18:03:05 -04:00
public class GuiNpcMobSpawnerAdd extends GuiNPCInterface implements GuiYesNoCallback, IGuiData, ISubGuiListener {
2024-02-15 17:54:28 -05:00
2018-09-13 12:03:28 -04:00
private Entity toClone;
private NBTTagCompound compound;
private static boolean serverSide = false;
private static int tab = 1;
public boolean isNPC = false;
// Selected Tags to Add
public static HashSet<String> addTags;
public static ArrayList<String> allTags = new ArrayList<>();
public static HashMap<String, UUID> tagMap = new HashMap<>();
2018-09-13 12:03:28 -04:00
public GuiNpcMobSpawnerAdd(NBTTagCompound compound){
this.toClone = EntityList.createEntityFromNBT(compound, Minecraft.getMinecraft().theWorld);
this.compound = compound;
if(toClone instanceof EntityNPCInterface){
isNPC = true;
}
2023-04-08 18:03:05 -04:00
2018-09-13 12:03:28 -04:00
setBackground("menubg.png");
xSize = 256;
ySize = 216;
2023-04-08 18:03:05 -04:00
closeOnEsc = true;
if(addTags == null){
addTags = new HashSet<>();
}
if(isNPC){
Client.sendData(EnumPacketServer.CloneAllTagsShort);
}
2018-09-13 12:03:28 -04:00
}
2023-04-08 18:03:05 -04:00
2018-09-13 12:03:28 -04:00
@Override
public void initGui(){
super.initGui();
String name = toClone.getCommandSenderName();
addLabel(new GuiNpcLabel(0, "Save as", guiLeft + 4, guiTop + 6));
addTextField(new GuiNpcTextField(0, this, fontRendererObj, guiLeft + 4, guiTop + 18, 200, 20, name));
2024-02-15 17:54:28 -05:00
2018-09-13 12:03:28 -04:00
addLabel(new GuiNpcLabel(1, "Tab", guiLeft + 10, guiTop + 50));
2022-01-18 00:20:50 -05:00
addButton(new GuiButtonBiDirectional(2, guiLeft + 40, guiTop + 45, 60, 20, new String[]{"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15"}, tab - 1));
2018-09-13 12:03:28 -04:00
addButton(new GuiNpcButton(3, guiLeft + 4, guiTop + 95, new String[]{"Client side", "Server side"}, serverSide?1:0));
2023-04-08 18:03:05 -04:00
addLabel(new GuiNpcLabel(1, "Tab", guiLeft + 10, guiTop + 50));
2018-09-13 12:03:28 -04:00
addButton(new GuiNpcButton(0, guiLeft + 4, guiTop + 70, 80, 20, "gui.save"));
addButton(new GuiNpcButton(1, guiLeft + 86, guiTop + 70, 80, 20, "gui.cancel"));
2023-04-08 18:03:05 -04:00
if(isNPC){
2023-04-08 18:03:05 -04:00
addButton(new GuiNpcButton(4, guiLeft + 4, guiTop + 120, 99, 20, "cloner.wandTags"));
addButton(new GuiNpcButton(5, guiLeft + 106, guiTop + 120, 99, 20, "cloner.npcTags"));
if(addTags.size() > 0){
addLabel(new GuiNpcLabel(6, "cloner.wandtagsapplied", guiLeft + 10, guiTop + 160));
}
2023-04-08 18:03:05 -04:00
}
}
2018-09-13 12:03:28 -04:00
public void buttonEvent(GuiButton guibutton) {
int id = guibutton.id;
if(id == 0){
String name = getTextField(0).getText();
if(name.isEmpty())
return;
int tab = ((GuiNpcButton)guibutton).getValue() + 1;
if(!serverSide){
if(ClientCloneController.Instance.getCloneData(null, name, tab) != null)
displayGuiScreen(new GuiYesNo(this, "Warning", "You are about to overwrite a clone", 1));
else
confirmClicked(true, 0);
}
else
Client.sendData(EnumPacketServer.ClonePreSave, name, tab);
}
if(id == 1){
close();
}
if(id == 2){
tab = ((GuiNpcButton)guibutton).getValue() + 1;
}
if(id == 3){
serverSide = ((GuiNpcButton)guibutton).getValue() == 1;
}
2023-05-04 16:13:44 -04:00
if (id == 4) {
if(isNPC){
this.setSubGui(new SubGuiClonerQuickTags(this));
}
2023-05-04 16:13:44 -04:00
}
if (id == 5) {
if(isNPC){
2023-05-06 15:26:30 -04:00
this.setSubGui(new SubGuiClonerNPCTags((EntityNPCInterface) toClone));
2023-05-04 16:13:44 -04:00
}
}
2018-09-13 12:03:28 -04:00
}
2023-04-08 18:03:05 -04:00
2018-09-13 12:03:28 -04:00
@Override
public void confirmClicked(boolean confirm, int id){
if(confirm){
String name = getTextField(0).getText();
NBTTagCompound extraTags = new NBTTagCompound();
if(isNPC && addTags.size() > 0){
extraTags = setTempTags();
}
if(!serverSide){
ClientCloneController.Instance.addClone(compound, name, tab, extraTags);
}
else{
Client.sendData(EnumPacketServer.CloneSave, name, tab, extraTags);
}
2018-09-13 12:03:28 -04:00
close();
}
else
displayGuiScreen(this);
}
2023-04-08 18:03:05 -04:00
2018-09-13 12:03:28 -04:00
@Override
public void save() {
2024-02-15 17:54:28 -05:00
2018-09-13 12:03:28 -04:00
}
2023-04-08 18:03:05 -04:00
2018-09-13 12:03:28 -04:00
@Override
public void setGuiData(NBTTagCompound compound) {
if(compound.hasKey("NameExists")){
if(compound.getBoolean("NameExists"))
displayGuiScreen(new GuiYesNo(this, "Warning", "You are about to overwrite a clone", 1));
else
confirmClicked(true, 0);
}
else if (compound.hasKey("ShortTags")) {
NBTTagList validTags = compound.getTagList("ShortTags", 10);
tagMap.clear();
allTags.clear();
if(validTags != null){
for(int j = 0; j < validTags.tagCount(); j++)
{
NBTTagCompound tagStructure = validTags.getCompoundTagAt(j);
Tag tag = new Tag();
tag.readShortNBT(tagStructure);
tagMap.put(tag.name, tag.uuid);
}
allTags.addAll(tagMap.keySet());
allTags.sort(String.CASE_INSENSITIVE_ORDER);
}
initGui();
}
}
2023-04-08 18:03:05 -04:00
@Override
public void subGuiClosed(SubGuiInterface subgui) {
2023-06-01 12:29:16 -04:00
if(subgui instanceof SubGuiClonerNPCTags){
close();
return;
}
2023-04-08 18:03:05 -04:00
initGui();
}
public NBTTagCompound setTempTags(){
NBTTagCompound nbtTagCompound = new NBTTagCompound();
NBTTagList nbtTagList = new NBTTagList();
for (String name : addTags) {
if(tagMap.containsKey(name)){
nbtTagList.appendTag(new NBTTagString(tagMap.get(name).toString()));
}
else {
addTags.remove(name);
}
}
nbtTagCompound.setTag("TempTagUUIDs", nbtTagList);
return nbtTagCompound;
}
2018-09-13 12:03:28 -04:00
}