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