| package eryah.usefulthings.blocks; |
| |
| import java.util.Iterator; |
| import java.util.Random; |
| |
| import javax.swing.Icon; |
| |
| import net.minecraft.block.Block; |
| import net.minecraft.block.BlockContainer; |
| import net.minecraft.block.material.Material; |
| import net.minecraft.block.properties.IProperty; |
| import net.minecraft.block.properties.PropertyDirection; |
| import net.minecraft.block.state.BlockState; |
| import net.minecraft.block.state.IBlockState; |
| import net.minecraft.client.Minecraft; |
| import net.minecraft.client.resources.model.ModelResourceLocation; |
| import net.minecraft.entity.EntityLivingBase; |
| import net.minecraft.entity.player.EntityPlayer; |
| import net.minecraft.inventory.Container; |
| import net.minecraft.inventory.InventoryHelper; |
| import net.minecraft.item.Item; |
| import net.minecraft.item.ItemStack; |
| import net.minecraft.tileentity.TileEntity; |
| import net.minecraft.tileentity.TileEntityChest; |
| import net.minecraft.util.BlockPos; |
| import net.minecraft.util.EnumFacing; |
| import net.minecraft.util.EnumParticleTypes; |
| import net.minecraft.util.MathHelper; |
| import net.minecraft.world.IBlockAccess; |
| import net.minecraft.world.World; |
| import net.minecraftforge.fml.common.registry.GameRegistry; |
| import net.minecraftforge.fml.relauncher.Side; |
| import net.minecraftforge.fml.relauncher.SideOnly; |
| import eryah.usefulthings.Reference; |
| import eryah.usefulthings.UsefulthingsMod; |
| import eryah.usefulthings.tileentity.TileEntityPlateCrafter; |
| |
| public class PlateCrafter extends BlockContainer |
| { |
| public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); |
| private static boolean isBurning; |
| private static boolean keepInventory; |
| private static final String __OBFID = "CL_00000248"; |
| public static Block platecrafter; |
| |
| protected PlateCrafter(Material mat, boolean isBurning) |
| { |
| super(Material.rock); |
| this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH)); |
| this.isBurning = isBurning; |
| } |
| |
| public static void init() |
| { |
| platecrafter = new PlateCrafter(Material.rock, isBurning).setUnlocalizedName("platecrafter").setCreativeTab(UsefulthingsMod.UTTab); |
| } |
| |
| public static void register() |
| { |
| GameRegistry.registerBlock(platecrafter, platecrafter.getUnlocalizedName().substring(5)); |
| } |
| |
| public static void registerRenders() |
| { |
| registerRender(platecrafter); |
| } |
| |
| public static void registerRender(Block block) |
| { |
| Item item = Item.getItemFromBlock(block); |
| Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(item, 0, new ModelResourceLocation(Reference.MOD_ID + ":" + item.getUnlocalizedName().substring(5), "inventory")); |
| } |
| |
| |
| |
| |
| |
| |
| |
| public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) |
| { |
| this.setDefaultFacing(worldIn, pos, state); |
| Iterator iterator = EnumFacing.Plane.HORIZONTAL.iterator(); |
| |
| while (iterator.hasNext()) |
| { |
| EnumFacing enumfacing = (EnumFacing)iterator.next(); |
| BlockPos blockpos1 = pos.offset(enumfacing); |
| IBlockState iblockstate1 = worldIn.getBlockState(blockpos1); |
| } |
| } |
| |
| private void setDefaultFacing(World worldIn, BlockPos pos, IBlockState state) |
| { |
| if (!worldIn.isRemote) |
| { |
| Block block = worldIn.getBlockState(pos.north()).getBlock(); |
| Block block1 = worldIn.getBlockState(pos.south()).getBlock(); |
| Block block2 = worldIn.getBlockState(pos.west()).getBlock(); |
| Block block3 = worldIn.getBlockState(pos.east()).getBlock(); |
| EnumFacing enumfacing = (EnumFacing)state.getValue(FACING); |
| |
| if (enumfacing == EnumFacing.NORTH && block.isFullBlock() && !block1.isFullBlock()) |
| { |
| enumfacing = EnumFacing.SOUTH; |
| } |
| else if (enumfacing == EnumFacing.SOUTH && block1.isFullBlock() && !block.isFullBlock()) |
| { |
| enumfacing = EnumFacing.NORTH; |
| } |
| else if (enumfacing == EnumFacing.WEST && block2.isFullBlock() && !block3.isFullBlock()) |
| { |
| enumfacing = EnumFacing.EAST; |
| } |
| else if (enumfacing == EnumFacing.EAST && block3.isFullBlock() && !block2.isFullBlock()) |
| { |
| enumfacing = EnumFacing.WEST; |
| } |
| |
| worldIn.setBlockState(pos, state.withProperty(FACING, enumfacing), 2); |
| } |
| } |
| |
| @SideOnly(Side.CLIENT) |
| public void randomDisplayTick(World worldIn, BlockPos pos, IBlockState state, Random rand) |
| { |
| if (this.isBurning) |
| { |
| EnumFacing enumfacing = (EnumFacing)state.getValue(FACING); |
| double d0 = (double)pos.getX() + 0.5D; |
| double d1 = (double)pos.getY() + rand.nextDouble() * 6.0D / 16.0D; |
| double d2 = (double)pos.getZ() + 0.5D; |
| double d3 = 0.52D; |
| double d4 = rand.nextDouble() * 0.6D - 0.3D; |
| |
| switch (PlateCrafter.SwitchEnumFacing.FACING_LOOKUP[enumfacing.ordinal()]) |
| { |
| case 1: |
| worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, d0 - d3, d1, d2 + d4, 0.0D, 0.0D, 0.0D, new int[0]); |
| worldIn.spawnParticle(EnumParticleTypes.FLAME, d0 - d3, d1, d2 + d4, 0.0D, 0.0D, 0.0D, new int[0]); |
| break; |
| case 2: |
| worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, d0 + d3, d1, d2 + d4, 0.0D, 0.0D, 0.0D, new int[0]); |
| worldIn.spawnParticle(EnumParticleTypes.FLAME, d0 + d3, d1, d2 + d4, 0.0D, 0.0D, 0.0D, new int[0]); |
| break; |
| case 3: |
| worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, d0 + d4, d1, d2 - d3, 0.0D, 0.0D, 0.0D, new int[0]); |
| worldIn.spawnParticle(EnumParticleTypes.FLAME, d0 + d4, d1, d2 - d3, 0.0D, 0.0D, 0.0D, new int[0]); |
| break; |
| case 4: |
| worldIn.spawnParticle(EnumParticleTypes.SMOKE_NORMAL, d0 + d4, d1, d2 + d3, 0.0D, 0.0D, 0.0D, new int[0]); |
| worldIn.spawnParticle(EnumParticleTypes.FLAME, d0 + d4, d1, d2 + d3, 0.0D, 0.0D, 0.0D, new int[0]); |
| } |
| } |
| } |
| |
| @Override |
| public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumFacing side, float hitX, float hitY, float hitZ) |
| { |
| playerIn.openGui(UsefulthingsMod.instance, 1, worldIn, pos.getX(), pos.getY(), pos.getZ()); |
| return true; |
| } |
| |
| |
| |
| |
| public TileEntity createNewTileEntity(World worldIn, int meta) |
| { |
| return new TileEntityPlateCrafter(); |
| } |
| |
| public IBlockState onBlockPlaced(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) |
| { |
| return this.getDefaultState().withProperty(FACING, placer.getHorizontalFacing().getOpposite()); |
| } |
| |
| public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) |
| { |
| EnumFacing enumfacing = EnumFacing.getHorizontal(MathHelper.floor_double((double)(placer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3).getOpposite(); |
| state = state.withProperty(FACING, enumfacing); |
| BlockPos blockpos1 = pos.north(); |
| BlockPos blockpos2 = pos.south(); |
| BlockPos blockpos3 = pos.west(); |
| BlockPos blockpos4 = pos.east(); |
| boolean flag = this == worldIn.getBlockState(blockpos1).getBlock(); |
| boolean flag1 = this == worldIn.getBlockState(blockpos2).getBlock(); |
| boolean flag2 = this == worldIn.getBlockState(blockpos3).getBlock(); |
| boolean flag3 = this == worldIn.getBlockState(blockpos4).getBlock(); |
| |
| if (!flag && !flag1 && !flag2 && !flag3) |
| { |
| worldIn.setBlockState(pos, state, 3); |
| } |
| else if (enumfacing.getAxis() == EnumFacing.Axis.X && (flag || flag1)) |
| { |
| if (flag) |
| { |
| worldIn.setBlockState(blockpos1, state, 3); |
| } |
| else |
| { |
| worldIn.setBlockState(blockpos2, state, 3); |
| } |
| |
| worldIn.setBlockState(pos, state, 3); |
| } |
| else if (enumfacing.getAxis() == EnumFacing.Axis.Z && (flag2 || flag3)) |
| { |
| if (flag2) |
| { |
| worldIn.setBlockState(blockpos3, state, 3); |
| } |
| else |
| { |
| worldIn.setBlockState(blockpos4, state, 3); |
| } |
| |
| worldIn.setBlockState(pos, state, 3); |
| } |
| } |
| |
| public void breakBlock(World worldIn, BlockPos pos, IBlockState state) |
| { |
| if (!keepInventory) |
| { |
| TileEntity tileentity = worldIn.getTileEntity(pos); |
| |
| if (tileentity instanceof TileEntityPlateCrafter) |
| { |
| InventoryHelper.dropInventoryItems(worldIn, pos, (TileEntityPlateCrafter)tileentity); |
| worldIn.updateComparatorOutputLevel(pos, this); |
| } |
| } |
| |
| super.breakBlock(worldIn, pos, state); |
| } |
| |
| public boolean hasComparatorInputOverride() |
| { |
| return true; |
| } |
| |
| public int getComparatorInputOverride(World worldIn, BlockPos pos) |
| { |
| return Container.calcRedstone(worldIn.getTileEntity(pos)); |
| } |
| |
| @SideOnly(Side.CLIENT) |
| public Item getItem(World worldIn, BlockPos pos) |
| { |
| return Item.getItemFromBlock(PlateCrafter.platecrafter); |
| } |
| |
| |
| |
| |
| |
| |
| |
| |
| @SideOnly(Side.CLIENT) |
| public IBlockState getStateForEntityRender(IBlockState state) |
| { |
| return this.getDefaultState().withProperty(FACING, EnumFacing.SOUTH); |
| } |
| |
| |
| |
| |
| public IBlockState getStateFromMeta(int meta) |
| { |
| EnumFacing enumfacing = EnumFacing.getFront(meta); |
| |
| if (enumfacing.getAxis() == EnumFacing.Axis.Y) |
| { |
| enumfacing = EnumFacing.NORTH; |
| } |
| |
| return this.getDefaultState().withProperty(FACING, enumfacing); |
| } |
| |
| |
| |
| |
| public int getMetaFromState(IBlockState state) |
| { |
| return ((EnumFacing)state.getValue(FACING)).getIndex(); |
| } |
| |
| protected BlockState createBlockState() |
| { |
| return new BlockState(this, new IProperty[] {FACING}); |
| } |
| |
| @SideOnly(Side.CLIENT) |
| |
| static final class SwitchEnumFacing |
| { |
| static final int[] FACING_LOOKUP = new int[EnumFacing.values().length]; |
| private static final String __OBFID = "CL_00002111"; |
| |
| static |
| { |
| try |
| { |
| FACING_LOOKUP[EnumFacing.WEST.ordinal()] = 1; |
| } |
| catch (NoSuchFieldError var4) |
| { |
| ; |
| } |
| |
| try |
| { |
| FACING_LOOKUP[EnumFacing.EAST.ordinal()] = 2; |
| } |
| catch (NoSuchFieldError var3) |
| { |
| ; |
| } |
| |
| try |
| { |
| FACING_LOOKUP[EnumFacing.NORTH.ordinal()] = 3; |
| } |
| catch (NoSuchFieldError var2) |
| { |
| ; |
| } |
| |
| try |
| { |
| FACING_LOOKUP[EnumFacing.SOUTH.ordinal()] = 4; |
| } |
| catch (NoSuchFieldError var1) |
| { |
| ; |
| } |
| } |
| } |
| |
| public boolean isOpaqueCube() |
| { |
| return false; |
| } |
| |
| public boolean renderAsNormalBlock() |
| { |
| return false; |
| } |
| |
| public int getRenderType() |
| { |
| return -1; |
| } |
| |
| public IBlockState correctFacing(World worldIn, BlockPos pos, IBlockState state) |
| { |
| EnumFacing enumfacing = null; |
| Iterator iterator = EnumFacing.Plane.HORIZONTAL.iterator(); |
| |
| while (iterator.hasNext()) |
| { |
| EnumFacing enumfacing1 = (EnumFacing)iterator.next(); |
| IBlockState iblockstate1 = worldIn.getBlockState(pos.offset(enumfacing1)); |
| |
| if (iblockstate1.getBlock() == this) |
| { |
| return state; |
| } |
| |
| if (iblockstate1.getBlock().isFullBlock()) |
| { |
| if (enumfacing != null) |
| { |
| enumfacing = null; |
| break; |
| } |
| |
| enumfacing = enumfacing1; |
| } |
| } |
| |
| if (enumfacing != null) |
| { |
| return state.withProperty(FACING, enumfacing.getOpposite()); |
| } |
| else |
| { |
| EnumFacing enumfacing2 = (EnumFacing)state.getValue(FACING); |
| |
| if (worldIn.getBlockState(pos.offset(enumfacing2)).getBlock().isFullBlock()) |
| { |
| enumfacing2 = enumfacing2.getOpposite(); |
| } |
| |
| if (worldIn.getBlockState(pos.offset(enumfacing2)).getBlock().isFullBlock()) |
| { |
| enumfacing2 = enumfacing2.rotateY(); |
| } |
| |
| if (worldIn.getBlockState(pos.offset(enumfacing2)).getBlock().isFullBlock()) |
| { |
| enumfacing2 = enumfacing2.getOpposite(); |
| } |
| |
| return state.withProperty(FACING, enumfacing2); |
| } |
| } |
| |
| public boolean canPlaceBlockAt(World worldIn, BlockPos pos) |
| { |
| int i = 0; |
| BlockPos blockpos1 = pos.west(); |
| BlockPos blockpos2 = pos.east(); |
| BlockPos blockpos3 = pos.north(); |
| BlockPos blockpos4 = pos.south(); |
| |
| if (worldIn.getBlockState(blockpos1).getBlock() == this) |
| { |
| |
| ++i; |
| } |
| |
| if (worldIn.getBlockState(blockpos2).getBlock() == this) |
| { |
| |
| ++i; |
| } |
| |
| if (worldIn.getBlockState(blockpos3).getBlock() == this) |
| { |
| |
| ++i; |
| } |
| |
| if (worldIn.getBlockState(blockpos4).getBlock() == this) |
| { |
| |
| ++i; |
| } |
| |
| return i <= 1; |
| } |
| |
| } |