001package net.minecraft.block; 002 003import java.util.Iterator; 004import net.minecraft.block.material.Material; 005import net.minecraft.entity.item.EntityItem; 006import net.minecraft.util.MathHelper; 007import net.minecraft.world.World; 008 009public class BlockPressurePlateWeighted extends BlockBasePressurePlate 010{ 011 /** The maximum number of items the plate weights. */ 012 private final int maxItemsWeighted; 013 014 protected BlockPressurePlateWeighted(int par1, String par2Str, Material par3Material, int par4) 015 { 016 super(par1, par2Str, par3Material); 017 this.maxItemsWeighted = par4; 018 } 019 020 /** 021 * Returns the current state of the pressure plate. Returns a value between 0 and 15 based on the number of items on 022 * it. 023 */ 024 protected int getPlateState(World par1World, int par2, int par3, int par4) 025 { 026 int l = 0; 027 Iterator iterator = par1World.getEntitiesWithinAABB(EntityItem.class, this.getSensitiveAABB(par2, par3, par4)).iterator(); 028 029 while (iterator.hasNext()) 030 { 031 EntityItem entityitem = (EntityItem)iterator.next(); 032 l += entityitem.getEntityItem().stackSize; 033 034 if (l >= this.maxItemsWeighted) 035 { 036 break; 037 } 038 } 039 040 if (l <= 0) 041 { 042 return 0; 043 } 044 else 045 { 046 float f = (float)Math.min(this.maxItemsWeighted, l) / (float)this.maxItemsWeighted; 047 return MathHelper.ceiling_float_int(f * 15.0F); 048 } 049 } 050 051 /** 052 * Argument is metadata. Returns power level (0-15) 053 */ 054 protected int getPowerSupply(int par1) 055 { 056 return par1; 057 } 058 059 /** 060 * Argument is weight (0-15). Return the metadata to be set because of it. 061 */ 062 protected int getMetaFromWeight(int par1) 063 { 064 return par1; 065 } 066 067 /** 068 * How many world ticks before ticking 069 */ 070 public int tickRate(World par1World) 071 { 072 return 10; 073 } 074}