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 }