Files
CustomNPC-Plus/src/main/java/noppes/npcs/DataDisplay.java
T

269 lines
8.2 KiB
Java
Raw Normal View History

2018-09-13 12:03:28 -04:00
package noppes.npcs;
import java.util.*;
2018-09-13 12:03:28 -04:00
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.nbt.NBTTagString;
2018-09-13 12:03:28 -04:00
import net.minecraft.nbt.NBTUtil;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.StringUtils;
2023-01-07 00:21:08 -05:00
import noppes.npcs.config.ConfigMain;
import noppes.npcs.controllers.data.SkinOverlay;
2018-09-13 12:03:28 -04:00
import noppes.npcs.entity.EntityNPCInterface;
import noppes.npcs.entity.data.DataSkinOverlays;
2023-01-11 19:12:53 -06:00
import noppes.npcs.roles.JobPuppet;
2018-09-13 12:03:28 -04:00
import noppes.npcs.util.ValueUtil;
import com.google.common.collect.Iterables;
import com.mojang.authlib.GameProfile;
import com.mojang.authlib.properties.Property;
public class DataDisplay {
EntityNPCInterface npc;
public String name;
public String title = "";
private int markovGeneratorId = 8; //roman,japanese,slavic,welsh,sami,oldnorse,ancientgreek,aztec,classic,spanish (0 - 9 inclusively)
private int markovGender = 0; //0:random, 1:male, 2:female
2021-05-04 03:52:44 -04:00
public byte skinType = 0; //0:normal, 1:player, 2:url, 3:url64
2021-05-06 01:27:24 -04:00
2018-09-13 12:03:28 -04:00
public String url = "";
2021-05-06 01:27:24 -04:00
2018-09-13 12:03:28 -04:00
public GameProfile playerProfile;
2021-05-09 02:58:18 -04:00
public String texture = "customnpcs:textures/entity/humanmale/Steve.png";
2018-09-13 12:03:28 -04:00
public String cloakTexture = "";
public DataSkinOverlays skinOverlayData;
public long overlayRenderTicks = 0;
2023-01-11 19:12:53 -06:00
public JobPuppet modelData;
public String glowTexture = "";
2021-05-04 03:52:44 -04:00
public int visible = 0; //0:visible 1:Invisible 2:semi-invisible
2018-09-13 12:03:28 -04:00
public int modelSize = 5;
public int showName = 0;
2021-04-29 20:42:52 -04:00
public int modelType = 0;
2018-09-13 12:03:28 -04:00
public boolean disableLivingAnimation = false;
public byte showBossBar = 0;
2021-04-29 14:37:33 -04:00
public ArrayList<UUID> invisibleToList = new ArrayList<>();
2022-01-14 19:07:41 -06:00
//0 - Yes, 1 - No, 2 - Only NPCs, 3 - Only Players, 4 - NPCs and Players
public int collidesWith = 1;
2018-09-13 12:03:28 -04:00
public DataDisplay(EntityNPCInterface npc){
this.npc = npc;
markovGeneratorId = new Random().nextInt(CustomNpcs.MARKOV_GENERATOR.length-1);
skinOverlayData = new DataSkinOverlays(npc);
name = getRandomName();
2023-01-11 19:12:53 -06:00
modelData = new JobPuppet(npc);
2018-09-13 12:03:28 -04:00
}
public String getRandomName() {
return CustomNpcs.MARKOV_GENERATOR[markovGeneratorId].fetch(markovGender);
}
2018-09-13 12:03:28 -04:00
public NBTTagCompound writeToNBT(NBTTagCompound nbttagcompound) {
nbttagcompound.setString("Name", name);
nbttagcompound.setInteger("MarkovGeneratorId", markovGeneratorId);
nbttagcompound.setInteger("MarkovGender", markovGender);
2018-09-13 12:03:28 -04:00
nbttagcompound.setString("Title", title);
nbttagcompound.setString("SkinUrl", url);
nbttagcompound.setString("Texture", texture);
nbttagcompound.setString("CloakTexture", cloakTexture);
nbttagcompound.setByte("UsingSkinUrl", skinType);
nbttagcompound.setString("GlowTexture", glowTexture);
nbttagcompound = skinOverlayData.writeToNBT(nbttagcompound);
2023-01-11 19:12:53 -06:00
nbttagcompound = modelData.writeToNBT(nbttagcompound);
if (this.playerProfile != null)
2018-09-13 12:03:28 -04:00
{
NBTTagCompound nbttagcompound1 = new NBTTagCompound();
NBTUtil.func_152460_a(nbttagcompound1, this.playerProfile);
nbttagcompound.setTag("SkinUsername", nbttagcompound1);
}
nbttagcompound.setInteger("Size", modelSize);
2021-04-29 20:42:52 -04:00
nbttagcompound.setInteger("modelType", modelType);
2018-09-13 12:03:28 -04:00
nbttagcompound.setInteger("ShowName", showName);
nbttagcompound.setInteger("NpcVisible", visible);
nbttagcompound.setBoolean("NoLivingAnimation", disableLivingAnimation);
nbttagcompound.setByte("BossBar", showBossBar);
2022-01-14 19:07:41 -06:00
nbttagcompound.setInteger("CollidesWith",collidesWith);
NBTTagList list = new NBTTagList();
for(UUID uuid : invisibleToList){
list.appendTag(new NBTTagString(uuid.toString()));
}
nbttagcompound.setTag("InvisibleToList", list);
2018-09-13 12:03:28 -04:00
return nbttagcompound;
}
public void readToNBT(NBTTagCompound nbttagcompound) {
setName(nbttagcompound.getString("Name"));
setMarkovGeneratorId(nbttagcompound.getInteger("MarkovGeneratorId"));
setMarkovGender(nbttagcompound.getInteger("MarkovGender"));
2018-09-13 12:03:28 -04:00
title = nbttagcompound.getString("Title");
url = nbttagcompound.getString("SkinUrl");
2021-05-06 01:27:24 -04:00
int prevSkinType = skinType;
2018-09-13 12:03:28 -04:00
skinType = nbttagcompound.getByte("UsingSkinUrl");
this.playerProfile = null;
if(skinType == 1){
if (nbttagcompound.hasKey("SkinUsername", 10)){
this.playerProfile = NBTUtil.func_152459_a(nbttagcompound.getCompoundTag("SkinUsername"));
}
else if (nbttagcompound.hasKey("SkinUsername", 8) && !StringUtils.isNullOrEmpty(nbttagcompound.getString("SkinUsername"))){
this.playerProfile = new GameProfile(null, nbttagcompound.getString("SkinUsername"));
}
this.loadProfile();
}
String prevTexture = texture;
texture = nbttagcompound.getString("Texture");
cloakTexture = nbttagcompound.getString("CloakTexture");
glowTexture = nbttagcompound.getString("GlowTexture");
if (!nbttagcompound.hasKey("SkinOverlayData") && !glowTexture.isEmpty()) {
NBTTagCompound compound = new NBTTagCompound();
compound.setInteger("SkinOverlayID", 0); //unique glow texture ID
2022-08-25 03:46:49 -04:00
(new SkinOverlay(glowTexture)).writeToNBT(compound);
if (!nbttagcompound.hasKey("SkinOverlayData")) {
NBTTagList tagList = new NBTTagList();
tagList.appendTag(compound);
nbttagcompound.setTag("SkinOverlayData", tagList);
} else if (!glowTexture.isEmpty()) {
nbttagcompound.getTagList("SkinOverlayData", 10).appendTag(compound);
glowTexture = "";
}
}
skinOverlayData.readFromNBT(nbttagcompound);
2023-01-11 19:12:53 -06:00
modelData.readFromNBT(nbttagcompound);
modelSize = ValueUtil.CorrectInt(nbttagcompound.getInteger("Size"), 1, Integer.MAX_VALUE);
2023-01-07 00:21:08 -05:00
if(modelSize > ConfigMain.NpcSizeLimit)
modelSize = ConfigMain.NpcSizeLimit;
2022-01-25 14:54:15 -06:00
2021-04-29 20:42:52 -04:00
modelType = nbttagcompound.getInteger("modelType");
2021-05-08 01:56:39 -04:00
2018-09-13 12:03:28 -04:00
showName = nbttagcompound.getInteger("ShowName");
visible = nbttagcompound.getInteger("NpcVisible");
disableLivingAnimation = nbttagcompound.getBoolean("NoLivingAnimation");
showBossBar = nbttagcompound.getByte("BossBar");
NBTTagList tagList = (NBTTagList)nbttagcompound.getTag("InvisibleToList");
if(tagList != null) {
invisibleToList.clear();
for (int i = 0; i < tagList.tagCount(); i++) {
String nbtTagString = tagList.getStringTagAt(i);
invisibleToList.add(UUID.fromString(nbtTagString));
}
}
else {
invisibleToList = new ArrayList<>();
}
2022-01-14 19:07:41 -06:00
if(nbttagcompound.hasKey("CollidesWith"))
collidesWith = nbttagcompound.getInteger("CollidesWith");
else
collidesWith = 1;
2018-09-13 12:03:28 -04:00
if(prevSkinType != skinType || !texture.equals(prevTexture))
npc.textureLocation = null;
npc.textureCloakLocation = null;
npc.updateHitbox();
}
public void loadProfile(){
if (this.playerProfile != null && !StringUtils.isNullOrEmpty(this.playerProfile.getName()) && MinecraftServer.getServer() != null){
if (!this.playerProfile.isComplete() || !this.playerProfile.getProperties().containsKey("textures")){
GameProfile gameprofile = MinecraftServer.getServer().func_152358_ax().func_152655_a(this.playerProfile.getName());
if (gameprofile != null){
Property property = (Property)Iterables.getFirst(gameprofile.getProperties().get("textures"), (Object)null);
if (property == null){
gameprofile = MinecraftServer.getServer().func_147130_as().fillProfileProperties(gameprofile, false);
}
this.playerProfile = gameprofile;
}
}
}
}
public boolean showName() {
if(npc.isKilled())
return false;
return showName == 0 || (showName == 2 && npc.isAttacking());
}
2021-04-27 11:56:36 -04:00
public String getSkinTexture(){
return texture;
}
public void setSkinTexture(String texture){
if(this.texture.equals(texture))
return;
this.texture = texture;
npc.textureLocation = null;
skinType = 0;
npc.updateClient = true;
}
public String getName(){
return name;
}
public void setName(String name){
if(this.name.equals(name))
return;
this.name = name;
npc.updateClient = true;
}
public int getMarkovGender(){
return markovGender;
}
public void setMarkovGender(int gender) {
if(markovGender == gender)
return;
this.markovGender = ValueUtil.CorrectInt(gender, 0, 2);
}
public int getMarkovGeneratorId(){
return markovGeneratorId;
}
public void setMarkovGeneratorId(int id) {
if(markovGeneratorId == id)
return;
this.markovGeneratorId = ValueUtil.CorrectInt(id, 0, CustomNpcs.MARKOV_GENERATOR.length-1);
}
2018-09-13 12:03:28 -04:00
}