    001package net.minecraft.world.demo;
    002
    003import net.minecraft.entity.player.EntityPlayer;
    004import net.minecraft.item.ItemInWorldManager;
    005import net.minecraft.item.ItemStack;
    006import net.minecraft.network.packet.Packet70GameEvent;
    007import net.minecraft.world.World;
    008
    009public class DemoWorldManager extends ItemInWorldManager
    010{
    011    private boolean field_73105_c = false;
    012    private boolean demoTimeExpired = false;
    013    private int field_73104_e = 0;
    014    private int field_73102_f = 0;
    015
    016    public DemoWorldManager(World par1World)
    017    {
    018        super(par1World);
    019    }
    020
    021    public void updateBlockRemoving()
    022    {
    023        super.updateBlockRemoving();
    024        ++this.field_73102_f;
    025        long i = this.theWorld.getTotalWorldTime();
    026        long j = i / 24000L + 1L;
    027
    028        if (!this.field_73105_c && this.field_73102_f > 20)
    029        {
    030            this.field_73105_c = true;
    031            this.thisPlayerMP.playerNetServerHandler.sendPacketToPlayer(new Packet70GameEvent(5, 0));
    032        }
    033
    034        this.demoTimeExpired = i > 120500L;
    035
    036        if (this.demoTimeExpired)
    037        {
    038            ++this.field_73104_e;
    039        }
    040
    041        if (i % 24000L == 500L)
    042        {
    043            if (j <= 6L)
    044            {
    045                this.thisPlayerMP.sendChatToPlayer(this.thisPlayerMP.translateString("demo.day." + j, new Object[0]));
    046            }
    047        }
    048        else if (j == 1L)
    049        {
    050            if (i == 100L)
    051            {
    052                this.thisPlayerMP.playerNetServerHandler.sendPacketToPlayer(new Packet70GameEvent(5, 101));
    053            }
    054            else if (i == 175L)
    055            {
    056                this.thisPlayerMP.playerNetServerHandler.sendPacketToPlayer(new Packet70GameEvent(5, 102));
    057            }
    058            else if (i == 250L)
    059            {
    060                this.thisPlayerMP.playerNetServerHandler.sendPacketToPlayer(new Packet70GameEvent(5, 103));
    061            }
    062        }
    063        else if (j == 5L && i % 24000L == 22000L)
    064        {
    065            this.thisPlayerMP.sendChatToPlayer(this.thisPlayerMP.translateString("demo.day.warning", new Object[0]));
    066        }
    067    }
    068
    069    /**
    070     * Sends a message to the player reminding them that this is the demo version
    071     */
    072    private void sendDemoReminder()
    073    {
    074        if (this.field_73104_e > 100)
    075        {
    076            this.thisPlayerMP.sendChatToPlayer(this.thisPlayerMP.translateString("demo.reminder", new Object[0]));
    077            this.field_73104_e = 0;
    078        }
    079    }
    080
    081    /**
    082     * if not creative, it calls destroyBlockInWorldPartially untill the block is broken first. par4 is the specific
    083     * side. tryHarvestBlock can also be the result of this call
    084     */
    085    public void onBlockClicked(int par1, int par2, int par3, int par4)
    086    {
    087        if (this.demoTimeExpired)
    088        {
    089            this.sendDemoReminder();
    090        }
    091        else
    092        {
    093            super.onBlockClicked(par1, par2, par3, par4);
    094        }
    095    }
    096
    097    public void uncheckedTryHarvestBlock(int par1, int par2, int par3)
    098    {
    099        if (!this.demoTimeExpired)
    100        {
    101            super.uncheckedTryHarvestBlock(par1, par2, par3);
    102        }
    103    }
    104
    105    /**
    106     * Attempts to harvest a block at the given coordinate
    107     */
    108    public boolean tryHarvestBlock(int par1, int par2, int par3)
    109    {
    110        return this.demoTimeExpired ? false : super.tryHarvestBlock(par1, par2, par3);
    111    }
    112
    113    /**
    114     * Attempts to right-click use an item by the given EntityPlayer in the given World
    115     */
    116    public boolean tryUseItem(EntityPlayer par1EntityPlayer, World par2World, ItemStack par3ItemStack)
    117    {
    118        if (this.demoTimeExpired)
    119        {
    120            this.sendDemoReminder();
    121            return false;
    122        }
    123        else
    124        {
    125            return super.tryUseItem(par1EntityPlayer, par2World, par3ItemStack);
    126        }
    127    }
    128
    129    /**
    130     * Activate the clicked on block, otherwise use the held item. Args: player, world, itemStack, x, y, z, side,
    131     * xOffset, yOffset, zOffset
    132     */
    133    public boolean activateBlockOrUseItem(EntityPlayer par1EntityPlayer, World par2World, ItemStack par3ItemStack, int par4, int par5, int par6, int par7, float par8, float par9, float par10)
    134    {
    135        if (this.demoTimeExpired)
    136        {
    137            this.sendDemoReminder();
    138            return false;
    139        }
    140        else
    141        {
    142            return super.activateBlockOrUseItem(par1EntityPlayer, par2World, par3ItemStack, par4, par5, par6, par7, par8, par9, par10);
    143        }
    144    }
    145}