package joshie.progression.network; import io.netty.buffer.ByteBuf; import joshie.progression.api.criteria.ICriteria; import joshie.progression.handlers.APICache; import joshie.progression.network.core.PenguinPacket; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.achievement.GuiAchievement; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.stats.Achievement; import net.minecraftforge.fml.common.network.ByteBufUtils; import net.minecraftforge.fml.relauncher.ReflectionHelper; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import java.util.UUID; @Packet(isSided = true, side = Side.CLIENT) public class PacketCompleted extends PenguinPacket { private ICriteria criteria; public PacketCompleted() {} public PacketCompleted(ICriteria criteria) { this.criteria = criteria; } @Override public void toBytes(ByteBuf buf) { ByteBufUtils.writeUTF8String(buf, criteria.getUniqueID().toString()); } @Override public void fromBytes(ByteBuf buf) { criteria = APICache.getClientCache().getCriteria(UUID.fromString(ByteBufUtils.readUTF8String(buf))); } @Override public void handlePacket(EntityPlayer player) { if (criteria != null) { GuiAchievement gui = Minecraft.getMinecraft().guiAchievement; gui.displayUnformattedAchievement(new DummyAchievement(criteria)); ReflectionHelper.setPrivateValue(GuiAchievement.class, gui, Minecraft.getSystemTime(), "notificationTime", "field_146263_l"); ReflectionHelper.setPrivateValue(GuiAchievement.class, gui, false, "permanentNotification", "field_146262_n"); } } public static class DummyAchievement extends Achievement { private final ICriteria criteria; public DummyAchievement(ICriteria criteria) { super("criteria", "criteria", 0, 0, criteria.getIcon(), null); this.criteria = criteria; } @Override @SideOnly(Side.CLIENT) public String getDescription() { return criteria.getLocalisedName(); } @Override public boolean getSpecial() { return true; } } }