Posted February 1, 20169 yr good nigths i been working in a custom door from 3x3 size and alredy have it but it has some issues an as the morphy's law dictates the day of the demostration it fails in this case it works, one of the troubles is than normally zombies can pass the door after a little effort, but this time only one little zombies goes througth the closes door this door i made feels innecesary complex there is a control block in the center that open an closes the door two size door blocks draw left and rigth door and i made an invisible block to block the pass filling the empty space around the control center block but still mob get througth the door soo really is not working, and entityRayTrace methods sees througth the door soo mi mobs atack like there where not i door at all, soo this is not a fully solid block soo all this week work is wortless i wanna make it simple i wanna make this door only one center block and this block must has a CollisionBoundingBox as big as an 3x3x3 area entityRayTrace must be unabble to see througth this block, and mobs must not be able to pase througth when the door is close i read i can extend the block CollisionBoundingBox but the guide is for 1.6 and some methods are not anymore in 1.8 ore has diferent names as i try it seems not posible to extends bounding far than 1M block so there must be trick http://www.minecraftforge.net/forum/index.php?topic=9982.0 #### someone could tell me how to make a big collision bounding for this door block in 1.8 sorry for the long explanation english is not native lnguague
February 1, 20169 yr You are going about it the wrong way. A Block in Minecraft can only be (or SHOULD only be) 1x1x1 maximum size, so if you want a larger structure, you need more blocks - that's why vanilla doors are actually TWO blocks, not one. In your case, you need to coordinate the placing and removal of 9 blocks. http://i.imgur.com/NdrFdld.png[/img]
February 1, 20169 yr Author yap i think it could be posible coze in the block json you can make models up to 3x3x3, actualy this door is the centerBlock + leftDoorBlock +RigthDoorBlock + 6X aireSolido00 blocks fillng the space the trouble is some how mobs get througth the close door, i think coulbe solveit playing whith the bounding boxes from the blocks ### is some how some way to repeel or avoid the mobs to get trhougth the close door ?? but simple not entityes nor whitchcrafts all of the door blocks use this same setBlockBoundsBasedOnState(IBlockAccess worldIn, BlockPos pos) values the only pasable is the center Block package mercenarymod.blocks.multitextura; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Random; import org.apache.logging.log4j.core.config.Property; import com.google.common.collect.Lists; import mercenarymod.Mercenary; import mercenarymod.blocks.MercenaryModBlocks; import mercenarymod.entidades.demeUn; import mercenarymod.items.MercenaryModItems; import mercenarymod.tileentity.ModTileEntity; import mercenarymod.tileentity.simpleTileEntity; import net.minecraft.block.Block; import net.minecraft.block.BlockButton; import net.minecraft.block.BlockRedstoneWire; import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.material.MapColor; import net.minecraft.block.material.Material; import net.minecraft.block.properties.IProperty; import net.minecraft.block.properties.PropertyBool; import net.minecraft.block.properties.PropertyDirection; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.BlockState; import net.minecraft.block.state.IBlockState; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.projectile.EntityArrow; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityFurnace; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.BlockPos; import net.minecraft.util.ChatComponentTranslation; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumWorldBlockLayer; 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 mercenarymod.utilidades.chat; import mercenarymod.utilidades.util; import net.minecraft.entity.EntityLivingBase; public class aireSolido00 extends Block { public static final PropertyDirection FACING = PropertyDirection.create("facing"); public aireSolido00() { super(Material.wood); String name = "aireSolido00"; setUnlocalizedName(Mercenary.MODID + "_" + name); GameRegistry.registerBlock(this, name); setCreativeTab(Mercenary.herramientas); this.setHardness(15.0F); this.setResistance(2.0F); } /** * Called when a neighboring block changes. */ public void onNeighborBlockChange(World worldIn, BlockPos pos, IBlockState state, Block neighborBlock) { if (!worldIn.isRemote) { } } //###########################################################3 public Item getItemDropped(IBlockState state, Random rand, int fortune) { return null; //Item.getItemFromBlock(MercenaryModBlocks.C4_blocke); } //###########################################################3 public boolean isOpaqueCube() { return false; } public boolean isFullCube() { return false; } @SideOnly(Side.CLIENT) public EnumWorldBlockLayer getBlockLayer() { return EnumWorldBlockLayer.CUTOUT; } @Override public boolean isPassable(IBlockAccess worldIn, BlockPos pos) { return false; } //###########################################################3 /* public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumFacing side, float hitX, float hitY, float hitZ) { return false; } */ // #########################################################################3 public void onBlockPlacedBy(World worldIn, BlockPos pos, IBlockState state, EntityLivingBase placer, ItemStack stack) { worldIn.setBlockState(pos, state.withProperty(FACING, getFacingFromEntity(worldIn, pos, placer)), 2); } //###########################################################3 public IBlockState onBlockPlaced(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) { return this.getDefaultState().withProperty(FACING, getFacingFromEntity(worldIn, pos, placer) ); } //###########################################################3 public void setBlockBoundsBasedOnState(IBlockAccess worldIn, BlockPos pos) { IBlockState iblockstate = worldIn.getBlockState(pos); float f = 0.25F; EnumFacing enumfacing = (EnumFacing)iblockstate.getValue(FACING); if (enumfacing != null) { switch (aireSolido00.SwitchEnumFacing.FACING_LOOKUP[enumfacing.ordinal()]) { case 1: this.setBlockBounds(0.0F, 0.75F, 0.0F, 1.0F, 1.0F, 1.0F); break; case 2: this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.25F, 1.0F); break; case 3: this.setBlockBounds(0.0F, 0.0F, 0.75F, 1.0F, 1.0F, 1.0F); break; case 4: this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.25F); break; case 5: this.setBlockBounds(0.75F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); break; case 6: this.setBlockBounds(0.0F, 0.0F, 0.0F, 0.25F, 1.0F, 1.0F); } } else { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); } //this.setBlockBounds(0.2F, 0.0F, 0.2F, 0.8F, 0.6F, 0.8F); } //###########################################################3 public void setBlockBoundsForItemRender() { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); } //###########################################################3 public static EnumFacing getFacingFromEntity(World worldIn, BlockPos clickedBlock, EntityLivingBase entityIn) { if (MathHelper.abs((float)entityIn.posX - (float)clickedBlock.getX()) < 2.0F && MathHelper.abs((float)entityIn.posZ - (float)clickedBlock.getZ()) < 2.0F) { double d0 = entityIn.posY + (double)entityIn.getEyeHeight(); if (d0 - (double)clickedBlock.getY() > 2.0D) { return EnumFacing.UP; } if ((double)clickedBlock.getY() - d0 > 0.0D) { return EnumFacing.DOWN; } } return entityIn.getHorizontalFacing().getOpposite(); } //###########################################################3 public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumFacing side, float hitX, float hitY, float hitZ) { return false; } //###########################################################3 protected BlockState createBlockState() { return new BlockState(this, new IProperty[] {FACING}); } //###########################################################3 //###########################################################3 public int getMetaFromState(IBlockState state) { EnumFacing enumfacing = (EnumFacing) state.getValue(FACING); int facing = enumfacing.getIndex(); return facing; } //#################################################################################################3 /** * Convert the given metadata into a BlockState for this Block */ public IBlockState getStateFromMeta(int meta) { switch (meta) { case 1: return this.getDefaultState().withProperty(FACING, EnumFacing.UP); //up case 2: return this.getDefaultState().withProperty(FACING, EnumFacing.DOWN);//down default: return this.getDefaultState().withProperty(FACING, EnumFacing.NORTH ); //norte case 4: return this.getDefaultState().withProperty(FACING, EnumFacing.SOUTH );//sur case 5: return this.getDefaultState().withProperty(FACING, EnumFacing.WEST );//oeste case 6: return this.getDefaultState().withProperty(FACING, EnumFacing.EAST );//este } } //#################################################################################################3 static final class SwitchEnumFacing { static final int[] FACING_LOOKUP = new int[EnumFacing.values().length]; private static final String __OBFID = "CL_00002037"; static { try { FACING_LOOKUP[EnumFacing.DOWN.ordinal()] = 1; } catch (NoSuchFieldError var6) { ; } try { FACING_LOOKUP[EnumFacing.UP.ordinal()] = 2; } catch (NoSuchFieldError var5) { ; } try { FACING_LOOKUP[EnumFacing.NORTH.ordinal()] = 3; } catch (NoSuchFieldError var4) { ; } try { FACING_LOOKUP[EnumFacing.SOUTH.ordinal()] = 4; } catch (NoSuchFieldError var3) { ; } try { FACING_LOOKUP[EnumFacing.WEST.ordinal()] = 5; } catch (NoSuchFieldError var2) { ; } try { FACING_LOOKUP[EnumFacing.EAST.ordinal()] = 6; } catch (NoSuchFieldError var1) { ; } } } //###########################################################3 }//fin de la clase
February 1, 20169 yr You're already trying to do a hacky solution by making 'impassable air' - why insist on doing it both the hard and wrong way, when it is much easier to simply make real blocks at the positions you want to be real blocks? Sorry, but making a single Block bigger than 1x1x1, in the context of Minecraft, is a terrible idea. The entire Minecraft code is built around the idea that Blocks take up at most a 1x1x1 cube and that within that cube will only be 1 block - messing with that is just asking for trouble. You can make multi-block structures such as a 3x3 door, however, by placing and breaking all the blocks together, as I already mentioned. Vanilla doors and beds already do this - you just need to extend the concept to encompass a slightly larger scale. http://i.imgur.com/NdrFdld.png[/img]
February 1, 20169 yr Author if ound something contradictory ut still could make it work in the BlockFenceGate they are declaring bounding from 1.5 high but this king of bounding is not visible so not know if it is working or not public AxisAlignedBB getCollisionBoundingBox(World worldIn, BlockPos pos, IBlockState state) { if (((Boolean)state.getValue(OPEN)).booleanValue()) { return null; } else { EnumFacing.Axis axis = ((EnumFacing)state.getValue(FACING)).getAxis(); return axis == EnumFacing.Axis.Z ? new AxisAlignedBB((double)pos.getX(), (double)pos.getY(), (double)((float)pos.getZ() + 0.375F), (double)(pos.getX() + 1), (double)((float)pos.getY() + 1.5F), (double)((float)pos.getZ() + 0.625F)) : new AxisAlignedBB((double)((float)pos.getX() + 0.375F), (double)pos.getY(), (double)pos.getZ(), (double)((float)pos.getX() + 0.625F), (double)((float)pos.getY() + 1.5F), (double)(pos.getZ() + 1)); } } but could be just an error from the coder let behind
February 1, 20169 yr You CAN make bounding boxes bigger than 1x1x1, but, in general, you should not. Fences make the collision bounding box taller than 1 block so that players and mobs cannot jump over them, but the fence, as a block, still restricts itself basically to the 1x1x1 cube, which is why you can place blocks on top of the fence and the top block is still only 1 meter rather than 1.5 meters from the ground. http://i.imgur.com/NdrFdld.png[/img]
February 1, 20169 yr but could be just an error from the coder let behind Heh. Imagine that. I'm back from being gone for... I think its been about a year. I'm pretty sure nobody remembers me, but hello anybody who does!
February 1, 20169 yr #getCollisionBoundingBox is the box used to detect collisions with entities. This is the part Fences set to 1.5F. #setBlockBoundsBasedOnState sets the block's 'hit box', i.e. the portion of the block that can be clicked, which is the part you see when hovering over the block with your mouse. For fences, this is still maxed out at 1.0F on the y-axis. http://i.imgur.com/NdrFdld.png[/img]
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.