minecraft_server-b1.7.3/src/net/minecraft/block/BlockBed.java

199 lines
5.8 KiB
Java

package net.minecraft.block;
import java.util.Iterator;
import java.util.Random;
import net.minecraft.block.material.Material;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.math.ChunkCoordinates;
import net.minecraft.util.ModelBed;
import net.minecraft.world.EnumBedResult;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
public class BlockBed extends Block {
public static final int[][] field_22023_a = new int[][]{{0, 1}, {-1, 0}, {0, -1}, {1, 0}};
public BlockBed(int var1) {
super(var1, 134, Material.cloth);
this.setBounds();
}
public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) {
if(var1.singleplayerWorld) {
return true;
} else {
int var6 = var1.getBlockMetadata(var2, var3, var4);
if(!func_22020_d(var6)) {
int var7 = func_22019_c(var6);
var2 += field_22023_a[var7][0];
var4 += field_22023_a[var7][1];
if(var1.getBlockId(var2, var3, var4) != this.blockID) {
return true;
}
var6 = var1.getBlockMetadata(var2, var3, var4);
}
if(!var1.worldProvider.func_28108_d()) {
double var16 = (double)var2 + 0.5D;
double var17 = (double)var3 + 0.5D;
double var11 = (double)var4 + 0.5D;
var1.setBlockWithNotify(var2, var3, var4, 0);
int var13 = func_22019_c(var6);
var2 += field_22023_a[var13][0];
var4 += field_22023_a[var13][1];
if(var1.getBlockId(var2, var3, var4) == this.blockID) {
var1.setBlockWithNotify(var2, var3, var4, 0);
var16 = (var16 + (double)var2 + 0.5D) / 2.0D;
var17 = (var17 + (double)var3 + 0.5D) / 2.0D;
var11 = (var11 + (double)var4 + 0.5D) / 2.0D;
}
var1.newExplosion((Entity)null, (double)((float)var2 + 0.5F), (double)((float)var3 + 0.5F), (double)((float)var4 + 0.5F), 5.0F, true);
return true;
} else {
if(func_22018_f(var6)) {
EntityPlayer var14 = null;
Iterator var8 = var1.playerEntities.iterator();
while(var8.hasNext()) {
EntityPlayer var9 = (EntityPlayer)var8.next();
if(var9.func_22057_E()) {
ChunkCoordinates var10 = var9.playerLocation;
if(var10.posX == var2 && var10.posY == var3 && var10.posZ == var4) {
var14 = var9;
}
}
}
if(var14 != null) {
var5.func_22061_a("tile.bed.occupied");
return true;
}
func_22022_a(var1, var2, var3, var4, false);
}
EnumBedResult var15 = var5.goToSleep(var2, var3, var4);
if(var15 == EnumBedResult.OK) {
func_22022_a(var1, var2, var3, var4, true);
return true;
} else {
if(var15 == EnumBedResult.NOT_POSSIBLE_NOW) {
var5.func_22061_a("tile.bed.noSleep");
}
return true;
}
}
}
}
public int getBlockTextureFromSideAndMetadata(int var1, int var2) {
if(var1 == 0) {
return Block.planks.blockIndexInTexture;
} else {
int var3 = func_22019_c(var2);
int var4 = ModelBed.field_22155_c[var3][var1];
return func_22020_d(var2) ? (var4 == 2 ? this.blockIndexInTexture + 2 + 16 : (var4 != 5 && var4 != 4 ? this.blockIndexInTexture + 1 : this.blockIndexInTexture + 1 + 16)) : (var4 == 3 ? this.blockIndexInTexture - 1 + 16 : (var4 != 5 && var4 != 4 ? this.blockIndexInTexture : this.blockIndexInTexture + 16));
}
}
public boolean isACube() {
return false;
}
public boolean isOpaqueCube() {
return false;
}
public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) {
this.setBounds();
}
public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) {
int var6 = var1.getBlockMetadata(var2, var3, var4);
int var7 = func_22019_c(var6);
if(func_22020_d(var6)) {
if(var1.getBlockId(var2 - field_22023_a[var7][0], var3, var4 - field_22023_a[var7][1]) != this.blockID) {
var1.setBlockWithNotify(var2, var3, var4, 0);
}
} else if(var1.getBlockId(var2 + field_22023_a[var7][0], var3, var4 + field_22023_a[var7][1]) != this.blockID) {
var1.setBlockWithNotify(var2, var3, var4, 0);
if(!var1.singleplayerWorld) {
this.dropBlockAsItem(var1, var2, var3, var4, var6);
}
}
}
public int idDropped(int var1, Random var2) {
return func_22020_d(var1) ? 0 : Item.bed.shiftedIndex;
}
private void setBounds() {
this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 9.0F / 16.0F, 1.0F);
}
public static int func_22019_c(int var0) {
return var0 & 3;
}
public static boolean func_22020_d(int var0) {
return (var0 & 8) != 0;
}
public static boolean func_22018_f(int var0) {
return (var0 & 4) != 0;
}
public static void func_22022_a(World var0, int var1, int var2, int var3, boolean var4) {
int var5 = var0.getBlockMetadata(var1, var2, var3);
if(var4) {
var5 |= 4;
} else {
var5 &= -5;
}
var0.setBlockMetadataWithNotify(var1, var2, var3, var5);
}
public static ChunkCoordinates func_22021_g(World var0, int var1, int var2, int var3, int var4) {
int var5 = var0.getBlockMetadata(var1, var2, var3);
int var6 = func_22019_c(var5);
for(int var7 = 0; var7 <= 1; ++var7) {
int var8 = var1 - field_22023_a[var6][0] * var7 - 1;
int var9 = var3 - field_22023_a[var6][1] * var7 - 1;
int var10 = var8 + 2;
int var11 = var9 + 2;
for(int var12 = var8; var12 <= var10; ++var12) {
for(int var13 = var9; var13 <= var11; ++var13) {
if(var0.isBlockNormalCube(var12, var2 - 1, var13) && var0.isAirBlock(var12, var2, var13) && var0.isAirBlock(var12, var2 + 1, var13)) {
if(var4 <= 0) {
return new ChunkCoordinates(var12, var2, var13);
}
--var4;
}
}
}
}
return null;
}
public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6) {
if(!func_22020_d(var5)) {
super.dropBlockAsItemWithChance(var1, var2, var3, var4, var5, var6);
}
}
public int getMobilityFlag() {
return 1;
}
}