001    package net.minecraft.world.demo;
002    
003    import net.minecraft.entity.player.EntityPlayer;
004    import net.minecraft.item.ItemInWorldManager;
005    import net.minecraft.item.ItemStack;
006    import net.minecraft.network.packet.Packet70GameEvent;
007    import net.minecraft.world.World;
008    
009    public 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 var1 = this.theWorld.getTotalWorldTime();
026            long var3 = var1 / 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 = var1 > 120500L;
035    
036            if (this.demoTimeExpired)
037            {
038                ++this.field_73104_e;
039            }
040    
041            if (var1 % 24000L == 500L)
042            {
043                if (var3 <= 6L)
044                {
045                    this.thisPlayerMP.sendChatToPlayer(this.thisPlayerMP.translateString("demo.day." + var3, new Object[0]));
046                }
047            }
048            else if (var3 == 1L)
049            {
050                if (var1 == 100L)
051                {
052                    this.thisPlayerMP.playerNetServerHandler.sendPacketToPlayer(new Packet70GameEvent(5, 101));
053                }
054                else if (var1 == 175L)
055                {
056                    this.thisPlayerMP.playerNetServerHandler.sendPacketToPlayer(new Packet70GameEvent(5, 102));
057                }
058                else if (var1 == 250L)
059                {
060                    this.thisPlayerMP.playerNetServerHandler.sendPacketToPlayer(new Packet70GameEvent(5, 103));
061                }
062            }
063            else if (var3 == 5L && var1 % 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    }