package net.minecraft.tileentity;
import com.google.gson.JsonParseException;
import net.minecraft.command.CommandException;
import net.minecraft.command.CommandResultStats;
import net.minecraft.command.ICommandSender;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.event.ClickEvent;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.Packet;
import net.minecraft.network.play.server.S33PacketUpdateSign;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.BlockPos;
import net.minecraft.util.ChatComponentProcessor;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.ChatStyle;
import net.minecraft.util.IChatComponent;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
public class TileEntitySign extends TileEntity
{
public final IChatComponent[] signText = new IChatComponent[] {new ChatComponentText(""), new ChatComponentText(""), new ChatComponentText(""), new ChatComponentText("")};
/**
* The index of the line currently being edited. Only used on client side, but defined on both. Note this is only
* really used when the > < are going to be visible.
*/
public int lineBeingEdited = -1;
private boolean isEditable = true;
private EntityPlayer field_145917_k;
private final CommandResultStats field_174883_i = new CommandResultStats();
private static final String __OBFID = "CL_00000363";
public void writeToNBT(NBTTagCompound compound)
{
super.writeToNBT(compound);
for (int var2 = 0; var2 < 4; ++var2)
{
String var3 = IChatComponent.Serializer.componentToJson(this.signText[var2]);
compound.setString("Text" + (var2 + 1), var3);
}
this.field_174883_i.func_179670_b(compound);
}
public void readFromNBT(NBTTagCompound compound)
{
this.isEditable = false;
super.readFromNBT(compound);
ICommandSender var2 = new ICommandSender()
{
private static final String __OBFID = "CL_00002039";
public String getName()
{
return "Sign";
}
public IChatComponent getDisplayName()
{
return new ChatComponentText(this.getName());
}
public void addChatMessage(IChatComponent message) {}
public boolean canCommandSenderUseCommand(int permissionLevel, String command)
{
return true;
}
public BlockPos getPosition()
{
return TileEntitySign.this.pos;
}
public Vec3 getPositionVector()
{
return new Vec3((double)TileEntitySign.this.pos.getX() + 0.5D, (double)TileEntitySign.this.pos.getY() + 0.5D, (double)TileEntitySign.this.pos.getZ() + 0.5D);
}
public World getEntityWorld()
{
return TileEntitySign.this.worldObj;
}
public Entity getCommandSenderEntity()
{
return null;
}
public boolean sendCommandFeedback()
{
return false;
}
public void func_174794_a(CommandResultStats.Type p_174794_1_, int p_174794_2_) {}
};
for (int var3 = 0; var3 < 4; ++var3)
{
String var4 = compound.getString("Text" + (var3 + 1));
try
{
IChatComponent var5 = IChatComponent.Serializer.jsonToComponent(var4);
try
{
this.signText[var3] = ChatComponentProcessor.func_179985_a(var2, var5, (Entity)null);
}
catch (CommandException var7)
{
this.signText[var3] = var5;
}
}
catch (JsonParseException var8)
{
this.signText[var3] = new ChatComponentText(var4);
}
}
this.field_174883_i.func_179668_a(compound);
}
/**
* Overriden in a sign to provide the text.
*/
public Packet getDescriptionPacket()
{
IChatComponent[] var1 = new IChatComponent[4];
System.arraycopy(this.signText, 0, var1, 0, 4);
return new S33PacketUpdateSign(this.worldObj, this.pos, var1);
}
public boolean getIsEditable()
{
return this.isEditable;
}
public void func_145912_a(EntityPlayer p_145912_1_)
{
this.field_145917_k = p_145912_1_;
}
public EntityPlayer func_145911_b()
{
return this.field_145917_k;
}
public boolean func_174882_b(final EntityPlayer p_174882_1_)
{
ICommandSender var2 = new ICommandSender()
{
private static final String __OBFID = "CL_00002038";
public String getName()
{
return p_174882_1_.getName();
}
public IChatComponent getDisplayName()
{
return p_174882_1_.getDisplayName();
}
public void addChatMessage(IChatComponent message) {}
public boolean canCommandSenderUseCommand(int permissionLevel, String command)
{
return true;
}
public BlockPos getPosition()
{
return TileEntitySign.this.pos;
}
public Vec3 getPositionVector()
{
return new Vec3((double)TileEntitySign.this.pos.getX() + 0.5D, (double)TileEntitySign.this.pos.getY() + 0.5D, (double)TileEntitySign.this.pos.getZ() + 0.5D);
}
public World getEntityWorld()
{
return p_174882_1_.getEntityWorld();
}
public Entity getCommandSenderEntity()
{
return p_174882_1_;
}
public boolean sendCommandFeedback()
{
return false;
}
public void func_174794_a(CommandResultStats.Type p_174794_1_, int p_174794_2_)
{
TileEntitySign.this.field_174883_i.func_179672_a(this, p_174794_1_, p_174794_2_);
}
};
for (int var3 = 0; var3 < this.signText.length; ++var3)
{
ChatStyle var4 = this.signText[var3] == null ? null : this.signText[var3].getChatStyle();
if (var4 != null && var4.getChatClickEvent() != null)
{
ClickEvent var5 = var4.getChatClickEvent();
if (var5.getAction() == ClickEvent.Action.RUN_COMMAND)
{
MinecraftServer.getServer().getCommandManager().executeCommand(var2, var5.getValue());
}
}
}
return true;
}
public CommandResultStats func_174880_d()
{
return this.field_174883_i;
}
}