28 juil. 2015, 10:52

Je me souviens avoir eu une erreut sur la méthode getDirection, mais je ne sais pas comment la corriger

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"));
}

   /**
    * Get the Item that this Block should drop when harvested.
    *  
    * @param fortune the level of the Fortune enchantment on the player's tool
    */

   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;
}

   /**
    * Returns a new instance of a block's tile entity class. Called on placing the block.
    */
   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);
   }

   /**
    * The type of render function that is called for this block
    */

   /**
    * Possibly modify the given BlockState before rendering it on an Entity (Minecarts, Endermen, …)
    */
   @SideOnly(Side.CLIENT)
   public IBlockState getStateForEntityRender(IBlockState state)
   {
       return this.getDefaultState().withProperty(FACING, EnumFacing.SOUTH);
   }

   /**
    * Convert the given metadata into a BlockState for this Block
    */
   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);
   }

   /**
    * Convert the BlockState into the correct metadata value
    */
   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;
   }

}

EDIT : C’est moi ou y’a pas du tout la méthode ? Oo