mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
266 lines
10 KiB
Java
266 lines
10 KiB
Java
package com.hbm.blocks;
|
||
|
||
import static net.minecraftforge.common.util.ForgeDirection.DOWN;
|
||
|
||
import java.util.Iterator;
|
||
import java.util.Random;
|
||
|
||
import com.hbm.lib.RefStrings;
|
||
|
||
import cpw.mods.fml.relauncher.Side;
|
||
import cpw.mods.fml.relauncher.SideOnly;
|
||
import net.minecraft.block.Block;
|
||
import net.minecraft.block.BlockChest;
|
||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||
import net.minecraft.entity.Entity;
|
||
import net.minecraft.entity.EntityLivingBase;
|
||
import net.minecraft.entity.item.EntityItem;
|
||
import net.minecraft.entity.passive.EntityOcelot;
|
||
import net.minecraft.inventory.IInventory;
|
||
import net.minecraft.inventory.InventoryLargeChest;
|
||
import net.minecraft.item.ItemStack;
|
||
import net.minecraft.nbt.NBTTagCompound;
|
||
import net.minecraft.tileentity.TileEntity;
|
||
import net.minecraft.util.AxisAlignedBB;
|
||
import net.minecraft.util.MathHelper;
|
||
import net.minecraft.world.World;
|
||
|
||
public class TestContainer extends BlockChest {
|
||
|
||
protected TestContainer(int p_i45397_1_) {
|
||
super(p_i45397_1_);
|
||
}
|
||
|
||
private final Random field_149955_b = new Random();
|
||
|
||
//Aktiviert durch: Platzieren. Bewirkt: Rotation des Blockes in Blickrichtung
|
||
@Override
|
||
public void onBlockPlacedBy(World p_149689_1_, int p_149689_2_, int p_149689_3_, int p_149689_4_, EntityLivingBase p_149689_5_, ItemStack p_149689_6_)
|
||
{
|
||
Block block = p_149689_1_.getBlock(p_149689_2_, p_149689_3_, p_149689_4_ - 1);
|
||
Block block1 = p_149689_1_.getBlock(p_149689_2_, p_149689_3_, p_149689_4_ + 1);
|
||
Block block2 = p_149689_1_.getBlock(p_149689_2_ - 1, p_149689_3_, p_149689_4_);
|
||
Block block3 = p_149689_1_.getBlock(p_149689_2_ + 1, p_149689_3_, p_149689_4_);
|
||
byte b0 = 0;
|
||
int l = MathHelper.floor_double(p_149689_5_.rotationYaw * 4.0F / 360.0F + 0.5D) & 3;
|
||
|
||
if (l == 0)
|
||
{
|
||
b0 = 2;
|
||
}
|
||
|
||
if (l == 1)
|
||
{
|
||
b0 = 5;
|
||
}
|
||
|
||
if (l == 2)
|
||
{
|
||
b0 = 3;
|
||
}
|
||
|
||
if (l == 3)
|
||
{
|
||
b0 = 4;
|
||
}
|
||
|
||
if (block != this && block1 != this && block2 != this && block3 != this)
|
||
{
|
||
p_149689_1_.setBlockMetadataWithNotify(p_149689_2_, p_149689_3_, p_149689_4_, b0, 3);
|
||
}
|
||
else
|
||
{
|
||
if ((block == this || block1 == this) && (b0 == 4 || b0 == 5))
|
||
{
|
||
if (block == this)
|
||
{
|
||
p_149689_1_.setBlockMetadataWithNotify(p_149689_2_, p_149689_3_, p_149689_4_ - 1, b0, 3);
|
||
}
|
||
else
|
||
{
|
||
p_149689_1_.setBlockMetadataWithNotify(p_149689_2_, p_149689_3_, p_149689_4_ + 1, b0, 3);
|
||
}
|
||
|
||
p_149689_1_.setBlockMetadataWithNotify(p_149689_2_, p_149689_3_, p_149689_4_, b0, 3);
|
||
}
|
||
|
||
if ((block2 == this || block3 == this) && (b0 == 2 || b0 == 3))
|
||
{
|
||
if (block2 == this)
|
||
{
|
||
p_149689_1_.setBlockMetadataWithNotify(p_149689_2_ - 1, p_149689_3_, p_149689_4_, b0, 3);
|
||
}
|
||
else
|
||
{
|
||
p_149689_1_.setBlockMetadataWithNotify(p_149689_2_ + 1, p_149689_3_, p_149689_4_, b0, 3);
|
||
}
|
||
|
||
p_149689_1_.setBlockMetadataWithNotify(p_149689_2_, p_149689_3_, p_149689_4_, b0, 3);
|
||
}
|
||
}
|
||
|
||
if (p_149689_6_.hasDisplayName())
|
||
{
|
||
((TileEntityTestContainer)p_149689_1_.getTileEntity(p_149689_2_, p_149689_3_, p_149689_4_)).func_145976_a(p_149689_6_.getDisplayName());
|
||
}
|
||
}
|
||
|
||
//Aktiviert durch: Blockupdate. Bewirkt: Verbinden zweier Kisten
|
||
@Override
|
||
public void onNeighborBlockChange(World p_149695_1_, int p_149695_2_, int p_149695_3_, int p_149695_4_, Block p_149695_5_)
|
||
{
|
||
super.onNeighborBlockChange(p_149695_1_, p_149695_2_, p_149695_3_, p_149695_4_, p_149695_5_);
|
||
TileEntityTestContainer tileentitychest = (TileEntityTestContainer)p_149695_1_.getTileEntity(p_149695_2_, p_149695_3_, p_149695_4_);
|
||
|
||
if (tileentitychest != null)
|
||
{
|
||
tileentitychest.updateContainingBlockInfo();
|
||
}
|
||
}
|
||
|
||
//Aktiviert durch: Zerst<73>rung. Bewirkt: Droppt alle in ihm befindlichen Items
|
||
@Override
|
||
public void breakBlock(World p_149749_1_, int p_149749_2_, int p_149749_3_, int p_149749_4_, Block p_149749_5_, int p_149749_6_)
|
||
{
|
||
TileEntityTestContainer tileentitychest = (TileEntityTestContainer)p_149749_1_.getTileEntity(p_149749_2_, p_149749_3_, p_149749_4_);
|
||
|
||
if (tileentitychest != null)
|
||
{
|
||
for (int i1 = 0; i1 < tileentitychest.getSizeInventory(); ++i1)
|
||
{
|
||
ItemStack itemstack = tileentitychest.getStackInSlot(i1);
|
||
|
||
if (itemstack != null)
|
||
{
|
||
float f = this.field_149955_b.nextFloat() * 0.8F + 0.1F;
|
||
float f1 = this.field_149955_b.nextFloat() * 0.8F + 0.1F;
|
||
EntityItem entityitem;
|
||
|
||
for (float f2 = this.field_149955_b.nextFloat() * 0.8F + 0.1F; itemstack.stackSize > 0; p_149749_1_.spawnEntityInWorld(entityitem))
|
||
{
|
||
int j1 = this.field_149955_b.nextInt(21) + 10;
|
||
|
||
if (j1 > itemstack.stackSize)
|
||
{
|
||
j1 = itemstack.stackSize;
|
||
}
|
||
|
||
itemstack.stackSize -= j1;
|
||
entityitem = new EntityItem(p_149749_1_, p_149749_2_ + f, p_149749_3_ + f1, p_149749_4_ + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage()));
|
||
float f3 = 0.05F;
|
||
entityitem.motionX = (float)this.field_149955_b.nextGaussian() * f3;
|
||
entityitem.motionY = (float)this.field_149955_b.nextGaussian() * f3 + 0.2F;
|
||
entityitem.motionZ = (float)this.field_149955_b.nextGaussian() * f3;
|
||
|
||
if (itemstack.hasTagCompound())
|
||
{
|
||
entityitem.getEntityItem().setTagCompound((NBTTagCompound)itemstack.getTagCompound().copy());
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
p_149749_1_.func_147453_f(p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_);
|
||
}
|
||
|
||
super.breakBlock(p_149749_1_, p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_, p_149749_6_);
|
||
}
|
||
|
||
//Allgemeine Inventarfunktion
|
||
@Override
|
||
public IInventory func_149951_m(World p_149951_1_, int p_149951_2_, int p_149951_3_, int p_149951_4_)
|
||
{
|
||
Object object = p_149951_1_.getTileEntity(p_149951_2_, p_149951_3_, p_149951_4_);
|
||
|
||
if (object == null)
|
||
{
|
||
return null;
|
||
}
|
||
else if (p_149951_1_.isSideSolid(p_149951_2_, p_149951_3_ + 1, p_149951_4_, DOWN))
|
||
{
|
||
return null;
|
||
}
|
||
else if (func_149953_o(p_149951_1_, p_149951_2_, p_149951_3_, p_149951_4_))
|
||
{
|
||
return null;
|
||
}
|
||
else if (p_149951_1_.getBlock(p_149951_2_ - 1, p_149951_3_, p_149951_4_) == this && (p_149951_1_.isSideSolid(p_149951_2_ - 1, p_149951_3_ + 1, p_149951_4_, DOWN) || func_149953_o(p_149951_1_, p_149951_2_ - 1, p_149951_3_, p_149951_4_)))
|
||
{
|
||
return null;
|
||
}
|
||
else if (p_149951_1_.getBlock(p_149951_2_ + 1, p_149951_3_, p_149951_4_) == this && (p_149951_1_.isSideSolid(p_149951_2_ + 1, p_149951_3_ + 1, p_149951_4_, DOWN) || func_149953_o(p_149951_1_, p_149951_2_ + 1, p_149951_3_, p_149951_4_)))
|
||
{
|
||
return null;
|
||
}
|
||
else if (p_149951_1_.getBlock(p_149951_2_, p_149951_3_, p_149951_4_ - 1) == this && (p_149951_1_.isSideSolid(p_149951_2_, p_149951_3_ + 1, p_149951_4_ - 1, DOWN) || func_149953_o(p_149951_1_, p_149951_2_, p_149951_3_, p_149951_4_ - 1)))
|
||
{
|
||
return null;
|
||
}
|
||
else if (p_149951_1_.getBlock(p_149951_2_, p_149951_3_, p_149951_4_ + 1) == this && (p_149951_1_.isSideSolid(p_149951_2_, p_149951_3_ + 1, p_149951_4_ + 1, DOWN) || func_149953_o(p_149951_1_, p_149951_2_, p_149951_3_, p_149951_4_ + 1)))
|
||
{
|
||
return null;
|
||
}
|
||
else
|
||
{
|
||
if (p_149951_1_.getBlock(p_149951_2_ - 1, p_149951_3_, p_149951_4_) == this)
|
||
{
|
||
object = new InventoryLargeChest("container.testContainer", (TileEntityTestContainer)p_149951_1_.getTileEntity(p_149951_2_ - 1, p_149951_3_, p_149951_4_), (IInventory)object);
|
||
}
|
||
|
||
if (p_149951_1_.getBlock(p_149951_2_ + 1, p_149951_3_, p_149951_4_) == this)
|
||
{
|
||
object = new InventoryLargeChest("container.testContainer", (IInventory)object, (TileEntityTestContainer)p_149951_1_.getTileEntity(p_149951_2_ + 1, p_149951_3_, p_149951_4_));
|
||
}
|
||
|
||
if (p_149951_1_.getBlock(p_149951_2_, p_149951_3_, p_149951_4_ - 1) == this)
|
||
{
|
||
object = new InventoryLargeChest("container.testContainer", (TileEntityTestContainer)p_149951_1_.getTileEntity(p_149951_2_, p_149951_3_, p_149951_4_ - 1), (IInventory)object);
|
||
}
|
||
|
||
if (p_149951_1_.getBlock(p_149951_2_, p_149951_3_, p_149951_4_ + 1) == this)
|
||
{
|
||
object = new InventoryLargeChest("container.testContainer", (IInventory)object, (TileEntityTestContainer)p_149951_1_.getTileEntity(p_149951_2_, p_149951_3_, p_149951_4_ + 1));
|
||
}
|
||
|
||
return (IInventory)object;
|
||
}
|
||
}
|
||
|
||
//Bewirkt, dass sich Katzen draufsetzen
|
||
private static boolean func_149953_o(World p_149953_0_, int p_149953_1_, int p_149953_2_, int p_149953_3_)
|
||
{
|
||
Iterator iterator = p_149953_0_.getEntitiesWithinAABB(EntityOcelot.class, AxisAlignedBB.getBoundingBox(p_149953_1_, p_149953_2_ + 1, p_149953_3_, p_149953_1_ + 1, p_149953_2_ + 2, p_149953_3_ + 1)).iterator();
|
||
EntityOcelot entityocelot;
|
||
|
||
do
|
||
{
|
||
if (!iterator.hasNext())
|
||
{
|
||
return false;
|
||
}
|
||
|
||
Entity entity = (Entity)iterator.next();
|
||
entityocelot = (EntityOcelot)entity;
|
||
}
|
||
while (!entityocelot.isSitting());
|
||
|
||
return true;
|
||
}
|
||
|
||
//Erzeugt ein neues Tileentity
|
||
@Override
|
||
public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_)
|
||
{
|
||
TileEntityTestContainer tileentitychest = new TileEntityTestContainer();
|
||
return tileentitychest;
|
||
}
|
||
|
||
//Registriert das Inventaricon
|
||
@Override
|
||
@SideOnly(Side.CLIENT)
|
||
public void registerBlockIcons(IIconRegister p_149651_1_)
|
||
{
|
||
this.blockIcon = p_149651_1_.registerIcon(RefStrings.MODID + ":test_container");
|
||
}
|
||
}
|