package net.minecraft.advancements; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonObject; import com.google.gson.JsonSyntaxException; import java.io.IOException; import javax.annotation.Nullable; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.network.PacketBuffer; import net.minecraft.util.JsonUtils; import net.minecraft.util.ResourceLocation; import net.minecraft.util.text.ITextComponent; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; public class DisplayInfo { private final ITextComponent title; private final ITextComponent description; private final ItemStack icon; private final ResourceLocation background; private final FrameType frame; private final boolean showToast; private final boolean announceToChat; private final boolean hidden; private float x; private float y; public DisplayInfo(ItemStack icon, ITextComponent title, ITextComponent description, @Nullable ResourceLocation background, FrameType frame, boolean showToast, boolean announceToChat, boolean hidden) { this.title = title; this.description = description; this.icon = icon; this.background = background; this.frame = frame; this.showToast = showToast; this.announceToChat = announceToChat; this.hidden = hidden; } public void setPosition(float x, float y) { this.x = x; this.y = y; } public ITextComponent getTitle() { return this.title; } public ITextComponent getDescription() { return this.description; } @SideOnly(Side.CLIENT) public ItemStack getIcon() { return this.icon; } @Nullable @SideOnly(Side.CLIENT) public ResourceLocation getBackground() { return this.background; } public FrameType getFrame() { return this.frame; } @SideOnly(Side.CLIENT) public float getX() { return this.x; } @SideOnly(Side.CLIENT) public float getY() { return this.y; } @SideOnly(Side.CLIENT) public boolean shouldShowToast() { return this.showToast; } public boolean shouldAnnounceToChat() { return this.announceToChat; } public boolean isHidden() { return this.hidden; } public static DisplayInfo deserialize(JsonObject object, JsonDeserializationContext context) { ITextComponent itextcomponent = (ITextComponent)JsonUtils.deserializeClass(object, "title", context, ITextComponent.class); ITextComponent itextcomponent1 = (ITextComponent)JsonUtils.deserializeClass(object, "description", context, ITextComponent.class); if (itextcomponent != null && itextcomponent1 != null) { ItemStack itemstack = deserializeIcon(JsonUtils.getJsonObject(object, "icon")); ResourceLocation resourcelocation = object.has("background") ? new ResourceLocation(JsonUtils.getString(object, "background")) : null; FrameType frametype = object.has("frame") ? FrameType.byName(JsonUtils.getString(object, "frame")) : FrameType.TASK; boolean flag = JsonUtils.getBoolean(object, "show_toast", true); boolean flag1 = JsonUtils.getBoolean(object, "announce_to_chat", true); boolean flag2 = JsonUtils.getBoolean(object, "hidden", false); return new DisplayInfo(itemstack, itextcomponent, itextcomponent1, resourcelocation, frametype, flag, flag1, flag2); } else { throw new JsonSyntaxException("Both title and description must be set"); } } private static ItemStack deserializeIcon(JsonObject object) { if (!object.has("item")) { throw new JsonSyntaxException("Unsupported icon type, currently only items are supported (add 'item' key)"); } else { Item item = JsonUtils.getItem(object, "item"); int i = JsonUtils.getInt(object, "data", 0); ItemStack ret = new ItemStack(item, 1, i); ret.setTagCompound(net.minecraftforge.common.util.JsonUtils.readNBT(object, "nbt")); return ret; } } public void write(PacketBuffer buf) { buf.writeTextComponent(this.title); buf.writeTextComponent(this.description); buf.writeItemStack(this.icon); buf.writeEnumValue(this.frame); int i = 0; if (this.background != null) { i |= 1; } if (this.showToast) { i |= 2; } if (this.hidden) { i |= 4; } buf.writeInt(i); if (this.background != null) { buf.writeResourceLocation(this.background); } buf.writeFloat(this.x); buf.writeFloat(this.y); } public static DisplayInfo read(PacketBuffer buf) throws IOException { ITextComponent itextcomponent = buf.readTextComponent(); ITextComponent itextcomponent1 = buf.readTextComponent(); ItemStack itemstack = buf.readItemStack(); FrameType frametype = (FrameType)buf.readEnumValue(FrameType.class); int i = buf.readInt(); ResourceLocation resourcelocation = (i & 1) != 0 ? buf.readResourceLocation() : null; boolean flag = (i & 2) != 0; boolean flag1 = (i & 4) != 0; DisplayInfo displayinfo = new DisplayInfo(itemstack, itextcomponent, itextcomponent1, resourcelocation, frametype, flag, false, flag1); displayinfo.setPosition(buf.readFloat(), buf.readFloat()); return displayinfo; } }