gravestone.tileentity.TileEntityGSMemorial.java Source code

Java tutorial

Introduction

Here is the source code for gravestone.tileentity.TileEntityGSMemorial.java

Source

package gravestone.tileentity;

import com.google.common.collect.Iterables;
import com.mojang.authlib.GameProfile;
import com.mojang.authlib.properties.Property;
import gravestone.block.enums.EnumHangedMobs;
import gravestone.block.enums.EnumMemorials;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTUtil;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.StringUtils;
import net.minecraft.world.World;

import java.util.Random;
import java.util.UUID;

/**
 * GraveStone mod
 *
 * @author NightKosh
 * @license Lesser GNU Public License v3 (http://www.gnu.org/licenses/lgpl.html)
 */
public class TileEntityGSMemorial extends TileEntityGSGrave {

    private GameProfile playerProfile = null;
    private EnumHangedMobs hangedMob = EnumHangedMobs.NONE;
    private int hangedVillagerProfession = 0;

    public TileEntityGSMemorial() {
        super();
    }

    public TileEntityGSMemorial(World world) {
        this();
        this.worldObj = world;
    }

    /**
     * Called when a client event is received with the event number and
     * argument, see World.sendClientEvent
     */
    @Override
    public boolean receiveClientEvent(int par1, int par2) {
        return true;
    }

    /**
     * Reads a tile entity from NBT.
     */
    @Override
    public void readFromNBT(NBTTagCompound nbtTag) {
        super.readFromNBT(nbtTag);
        // death text
        deathText.readText(nbtTag);

        hangedMob = EnumHangedMobs.getById(nbtTag.getByte("HangedMob"));
        hangedVillagerProfession = nbtTag.getInteger("HangedVillagerProfession");

        if (nbtTag.hasKey("Owner", 10)) {
            this.playerProfile = NBTUtil.readGameProfileFromNBT(nbtTag.getCompoundTag("Owner"));
        } else if (nbtTag.hasKey("ExtraType", 8)) {
            String s = nbtTag.getString("ExtraType");

            if (!StringUtils.isNullOrEmpty(s)) {
                this.playerProfile = new GameProfile((UUID) null, s);
                this.updatePlayerProfile();
            }
        }
    }

    /**
     * Writes a tile entity to NBT.
     */
    @Override
    public void writeToNBT(NBTTagCompound nbtTag) {
        super.writeToNBT(nbtTag);
        // death text
        deathText.saveText(nbtTag);

        nbtTag.setByte("HangedMob", (byte) hangedMob.ordinal());
        nbtTag.setInteger("HangedVillagerProfession", hangedVillagerProfession);

        if (this.playerProfile != null) {
            NBTTagCompound nbtTagCompound = new NBTTagCompound();
            NBTUtil.writeGameProfile(nbtTagCompound, this.playerProfile);
            nbtTag.setTag("Owner", nbtTagCompound);
        }
    }

    public void setMemorialContent(Random random) {
        deathText.setRandomDeathTextAndName(random, graveType, true, true);
    }

    public void setRandomMob(Random random) {
        hangedMob = EnumHangedMobs.values()[random.nextInt(EnumHangedMobs.values().length)];
    }

    @Override
    public GSGraveStoneDeathText getDeathTextComponent() {
        return deathText;
    }

    public EnumMemorials getMemorialType() {
        return EnumMemorials.getById(graveType);
    }

    public int getHangedVillagerProfession() {
        return hangedVillagerProfession;
    }

    public void setHangedVillagerProfession(int hangedVillagerProfession) {
        this.hangedVillagerProfession = hangedVillagerProfession;
    }

    public EnumHangedMobs getHangedMob() {
        return hangedMob;
    }

    public void setHangedMob(EnumHangedMobs hangedMob) {
        this.hangedMob = hangedMob;
    }

    public GameProfile getPlayerProfile() {
        return this.playerProfile;
    }

    public void setPlayerProfile(GameProfile playerProfile) {
        this.playerProfile = playerProfile;
        this.updatePlayerProfile();
    }

    private void updatePlayerProfile() {
        this.playerProfile = updateGameprofile(this.playerProfile);
        this.markDirty();
    }

    public static GameProfile updateGameprofile(GameProfile input) {
        if (input != null && !StringUtils.isNullOrEmpty(input.getName())) {
            if (input.isComplete() && input.getProperties().containsKey("textures")) {
                return input;
            } else if (MinecraftServer.getServer() == null) {
                return input;
            } else {
                GameProfile gameprofile1 = MinecraftServer.getServer().getPlayerProfileCache()
                        .getGameProfileForUsername(input.getName());

                if (gameprofile1 == null) {
                    return input;
                } else {
                    Property property = (Property) Iterables.getFirst(gameprofile1.getProperties().get("textures"),
                            (Object) null);

                    if (property == null) {
                        gameprofile1 = MinecraftServer.getServer().getMinecraftSessionService()
                                .fillProfileProperties(gameprofile1, true);
                    }

                    return gameprofile1;
                }
            }
        } else {
            return input;
        }
    }
}