jjattack Posted August 5, 2016 Share Posted August 5, 2016 Not sure if what I want to happen is possible or not, so here's an attempt at explaining. In the top picture, the new Wall and fence gates class accept each other, and the fence gate shows "in_wall" as true, as it should be. And in the second, the normal spruce gate fence is accepted by the wall class, but my wall isn't accepted by the vanilla fence gate. The Wall Class: public class CoeBlockWall extends Block implements ItemModelProvider{ protected String thisname; public static Material blockMaterial; public static final PropertyBool UP = PropertyBool.create("up"); public static final PropertyBool NORTH = PropertyBool.create("north"); public static final PropertyBool EAST = PropertyBool.create("east"); public static final PropertyBool SOUTH = PropertyBool.create("south"); public static final PropertyBool WEST = PropertyBool.create("west"); protected static final AxisAlignedBB[] AABB_BY_INDEX = new AxisAlignedBB[] {new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.3125D, 0.0D, 0.0D, 0.6875D, 0.875D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.3125D, 1.0D, 0.875D, 0.6875D), new AxisAlignedBB(0.0D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D), new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D)}; protected static final AxisAlignedBB[] CLIP_AABB_BY_INDEX = new AxisAlignedBB[] {AABB_BY_INDEX[0].setMaxY(1.5D), AABB_BY_INDEX[1].setMaxY(1.5D), AABB_BY_INDEX[2].setMaxY(1.5D), AABB_BY_INDEX[3].setMaxY(1.5D), AABB_BY_INDEX[4].setMaxY(1.5D), AABB_BY_INDEX[5].setMaxY(1.5D), AABB_BY_INDEX[6].setMaxY(1.5D), AABB_BY_INDEX[7].setMaxY(1.5D), AABB_BY_INDEX[8].setMaxY(1.5D), AABB_BY_INDEX[9].setMaxY(1.5D), AABB_BY_INDEX[10].setMaxY(1.5D), AABB_BY_INDEX[11].setMaxY(1.5D), AABB_BY_INDEX[12].setMaxY(1.5D), AABB_BY_INDEX[13].setMaxY(1.5D), AABB_BY_INDEX[14].setMaxY(1.5D), AABB_BY_INDEX[15].setMaxY(1.5D)}; public CoeBlockWall(Material blockMaterialIn, MapColor blockMapColorIn,String name) { super(blockMaterialIn, blockMapColorIn); this.blockMaterial = blockMaterialIn; this.thisname = name; this.setUnlocalizedName(name); this.setRegistryName(name); } @Override public void registerItemModel(Item item) { CoeMod.proxy.registerItemRenderer(item, 0, thisname); } @Override public CoeBlockWall setCreativeTab(CreativeTabs tab) { super.setCreativeTab(tab); return this; } @Override public CoeBlockWall setLightLevel(float value) { this.lightValue = (int)(15.0F * value); return this; } public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) { state = this.getActualState(state, source, pos); return AABB_BY_INDEX[getAABBIndex(state)]; } @Nullable public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, World worldIn, BlockPos pos) { blockState = this.getActualState(blockState, worldIn, pos); return CLIP_AABB_BY_INDEX[getAABBIndex(blockState)]; } private static int getAABBIndex(IBlockState state) { int i = 0; if (((Boolean)state.getValue(NORTH)).booleanValue()) { i |= 1 << EnumFacing.NORTH.getHorizontalIndex(); } if (((Boolean)state.getValue(EAST)).booleanValue()) { i |= 1 << EnumFacing.EAST.getHorizontalIndex(); } if (((Boolean)state.getValue(SOUTH)).booleanValue()) { i |= 1 << EnumFacing.SOUTH.getHorizontalIndex(); } if (((Boolean)state.getValue(WEST)).booleanValue()) { i |= 1 << EnumFacing.WEST.getHorizontalIndex(); } return i; } public boolean isFullCube(IBlockState state) { return false; } public boolean isPassable(IBlockAccess worldIn, BlockPos pos) { return false; } /** * Used to determine ambient occlusion and culling when rebuilding chunks for render */ public boolean isOpaqueCube(IBlockState state) { return false; } private boolean canConnectTo(IBlockAccess worldIn, BlockPos pos) { IBlockState iblockstate = worldIn.getBlockState(pos); Block block = iblockstate.getBlock(); return block == Blocks.BARRIER ? false : ((!(block instanceof CoeBlockWall)) && !(block instanceof BlockFenceGate) && !(block instanceof CoeBasicFence) && !(block instanceof BlockWall) && !(block instanceof CoeBasicFenceGate) ? (CoeBlockWall.blockMaterial.isOpaque() && iblockstate.isFullCube() ? CoeBlockWall.blockMaterial != Material.GOURD : false) : true); } @SideOnly(Side.CLIENT) public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) { return side == EnumFacing.DOWN ? super.shouldSideBeRendered(blockState, blockAccess, pos, side) : true; } public int getMetaFromState(IBlockState state) { return 0; } public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) { boolean flag = this.canConnectTo(worldIn, pos.north()); boolean flag1 = this.canConnectTo(worldIn, pos.east()); boolean flag2 = this.canConnectTo(worldIn, pos.south()); boolean flag3 = this.canConnectTo(worldIn, pos.west()); boolean flag4 = flag && !flag1 && flag2 && !flag3 || !flag && flag1 && !flag2 && flag3; return state.withProperty(UP, Boolean.valueOf(!flag4 || !worldIn.isAirBlock(pos.up()))).withProperty(NORTH, Boolean.valueOf(flag)).withProperty(EAST, Boolean.valueOf(flag1)).withProperty(SOUTH, Boolean.valueOf(flag2)).withProperty(WEST, Boolean.valueOf(flag3)); } protected BlockStateContainer createBlockState() { return new BlockStateContainer(this, new IProperty[] {UP, NORTH, EAST, WEST, SOUTH}); } } So, i need to be able to reproduce the behaviour of private boolean canConnectTo(IBlockAccess worldIn, BlockPos pos) { IBlockState iblockstate = worldIn.getBlockState(pos); Block block = iblockstate.getBlock(); return block == Blocks.BARRIER ? false : ((!(block instanceof CoeBlockWall)) && !(block instanceof BlockFenceGate) && !(block instanceof CoeBasicFence) && !(block instanceof BlockWall) && !(block instanceof CoeBasicFenceGate) ? (CoeBlockWall.blockMaterial.isOpaque() && iblockstate.isFullCube() ? CoeBlockWall.blockMaterial != Material.GOURD : false) : true); } for the Vanilla fences, walls and fence gates as it is in the modded versions. I'm going to guess you can't change vanilla block behavior in this way? If not, would it be possible to add code into the wall class that would detect if the neighbor was a vanilla gate/wall and give it access that way? Quote Link to comment Share on other sites More sharing options...
Animefan8888 Posted August 5, 2016 Share Posted August 5, 2016 Extend the Vanilla Block Fence stuff, that should make it connect. Quote VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect. Forge and vanilla BlockState generator. Link to comment Share on other sites More sharing options...
Animefan8888 Posted August 5, 2016 Share Posted August 5, 2016 Extend the Vanilla Block Fence stuff, that should make it connect. Not really. You would have to extend BlockFenceGate , which is pretty stupid for a wall block to do. @jjattack: The proper way to do this would be to submit a PullRequest to forge adding a method Block#canWallConnectTo which BlockWall then uses. And while you are at it, you could do the same for BlockFence . Doesn't BlockFence check to see if the surrounding Block(s) are an instance of BlockFence or BlockFenceGate. And when I said "Block Fence Stuff" I meant if it is a Fence then BlockFence and if it was a gate then BlockFenceGate. Quote VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect. Forge and vanilla BlockState generator. Link to comment Share on other sites More sharing options...
jjattack Posted August 5, 2016 Author Share Posted August 5, 2016 The basic fence class i use is: public class CoeBasicFence extends BlockFence implements ItemModelProvider { protected String thisname; public static Material blockMaterial; public CoeBasicFence(Material blockMaterialIn, MapColor blockMapColorIn, String name) { super(blockMaterialIn, blockMapColorIn); this.setDefaultState(this.blockState.getBaseState().withProperty(NORTH, Boolean.valueOf(false)).withProperty(EAST, Boolean.valueOf(false)).withProperty(SOUTH, Boolean.valueOf(false)).withProperty(WEST, Boolean.valueOf(false))); this.blockMaterial = blockMaterialIn; this.thisname = name; this.setUnlocalizedName(name); this.setRegistryName(name); } @Override public void registerItemModel(Item item) { CoeMod.proxy.registerItemRenderer(item, 0, thisname); } @Override public CoeBasicFence setCreativeTab(CreativeTabs tab) { super.setCreativeTab(tab); return this; } @Override public CoeBasicFence setLightLevel(float value) { this.lightValue = (int)(15.0F * value); return this; } @Override public boolean canConnectTo(IBlockAccess worldIn, BlockPos pos) { IBlockState iblockstate = worldIn.getBlockState(pos); Block block = iblockstate.getBlock(); return block == Blocks.BARRIER ? false : ((!(block instanceof CoeBasicFence)) && !(block instanceof CoeBasicFenceGate) && !(block instanceof CoeBlockWall) && !(block instanceof BlockFence) && !(block instanceof BlockFenceGate) ? (CoeBasicFence.blockMaterial.isOpaque() && iblockstate.isFullCube() ? CoeBasicFence.blockMaterial != Material.GOURD : false) : true); } } which works fine for the mods new fences. The problem lies with the existing ones in minecraft connecting to the new ones. I will do some research into the pull request and get back if i cant find the answer. Quote Link to comment Share on other sites More sharing options...
Animefan8888 Posted August 5, 2016 Share Posted August 5, 2016 Yes, for fences I guess the instanceof check suffices, because vanilla's BlockFence is pretty abstract. But BlockWall is hardcoded to have the variant property, so an extension is not appropriate here. Alright until forge does add a hook there, people will have to choose whether there "fence" block connects to walls or fences. Choose by extending there classes, and extend BlockFenceGate for gates. Quote VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect. Forge and vanilla BlockState generator. Link to comment Share on other sites More sharing options...
jjattack Posted August 5, 2016 Author Share Posted August 5, 2016 The fence gates walls and fences all connect to each other with the method i use there, which is a little odd with walls and fences connecting but i'm sticking with it for now. Lol, i found out what the pull request was. So there is no way to do it then? Quote Link to comment Share on other sites More sharing options...
Animefan8888 Posted August 5, 2016 Share Posted August 5, 2016 The fence gates walls and fences all connect to each other with the method i use there, which is a little odd with walls and fences connecting but i'm sticking with it for now. Doesn't this mean it works? Quote VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect. Forge and vanilla BlockState generator. Link to comment Share on other sites More sharing options...
jjattack Posted August 5, 2016 Author Share Posted August 5, 2016 No, it works fine with my new blocks, but they aren't compatible with the vanilla blocks in minecraft. The code that makes them connect private boolean canConnectTo(IBlockAccess worldIn, BlockPos pos) { IBlockState iblockstate = worldIn.getBlockState(pos); Block block = iblockstate.getBlock(); return block == Blocks.BARRIER ? false : ((!(block instanceof CoeBlockWall)) && !(block instanceof BlockFenceGate) && !(block instanceof CoeBasicFence) && !(block instanceof BlockWall) && !(block instanceof CoeBasicFenceGate) ? (CoeBlockWall.blockMaterial.isOpaque() && iblockstate.isFullCube() ? CoeBlockWall.blockMaterial != Material.GOURD : false) : true); } is only in the extended fence wall and gate classes. The original fences/walls/gates classes therefore don't connect. I'm grasping at straws, and i really don't know the lingo as you are about to see but could there be a way to detect the blocks neighbor and send it a false message? I.e. If neighbor is VanillaFence - pass argument that it is also a Vanilla Fence? ... or something like that lol. Quote Link to comment Share on other sites More sharing options...
Animefan8888 Posted August 5, 2016 Share Posted August 5, 2016 I assume that the reason it doesn't connect is because FenceGates connecting is hardcoded aswell with the variant system. *Edit does your Fence Gate extend BlockFenceGate? Quote VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect. Forge and vanilla BlockState generator. Link to comment Share on other sites More sharing options...
jjattack Posted August 5, 2016 Author Share Posted August 5, 2016 No it's here public class CoeBasicFenceGate extends BlockHorizontal implements ItemModelProvider{ protected String thisname; public static final PropertyBool OPEN = PropertyBool.create("open"); public static final PropertyBool POWERED = PropertyBool.create("powered"); public static final PropertyBool IN_WALL = PropertyBool.create("in_wall"); protected static final AxisAlignedBB AABB_COLLIDE_ZAXIS = new AxisAlignedBB(0.0D, 0.0D, 0.375D, 1.0D, 1.0D, 0.625D); protected static final AxisAlignedBB AABB_COLLIDE_XAXIS = new AxisAlignedBB(0.375D, 0.0D, 0.0D, 0.625D, 1.0D, 1.0D); protected static final AxisAlignedBB AABB_COLLIDE_ZAXIS_INWALL = new AxisAlignedBB(0.0D, 0.0D, 0.375D, 1.0D, 0.8125D, 0.625D); protected static final AxisAlignedBB AABB_COLLIDE_XAXIS_INWALL = new AxisAlignedBB(0.375D, 0.0D, 0.0D, 0.625D, 0.8125D, 1.0D); protected static final AxisAlignedBB AABB_CLOSED_SELECTED_ZAXIS = new AxisAlignedBB(0.0D, 0.0D, 0.375D, 1.0D, 1.5D, 0.625D); protected static final AxisAlignedBB AABB_CLOSED_SELECTED_XAXIS = new AxisAlignedBB(0.375D, 0.0D, 0.0D, 0.625D, 1.5D, 1.0D); public CoeBasicFenceGate(Material blockMaterialIn, MapColor blockMapColorIn, String name) { super(blockMaterialIn, blockMapColorIn); this.setDefaultState(this.blockState.getBaseState().withProperty(OPEN, Boolean.valueOf(false)).withProperty(POWERED, Boolean.valueOf(false)).withProperty(IN_WALL, Boolean.valueOf(false))); this.thisname = name; this.setUnlocalizedName(name); this.setRegistryName(name); } @Override public void registerItemModel(Item item) { CoeMod.proxy.registerItemRenderer(item, 0, thisname); } @Override public CoeBasicFenceGate setCreativeTab(CreativeTabs tab) { super.setCreativeTab(tab); return this; } @Override public CoeBasicFenceGate setLightLevel(float value) { this.lightValue = (int)(15.0F * value); return this; } @Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos) { state = this.getActualState(state, source, pos); return ((Boolean) state.getValue(IN_WALL)).booleanValue() ? (((EnumFacing) state.getValue(FACING)).getAxis() == EnumFacing.Axis.X ? AABB_COLLIDE_XAXIS_INWALL : AABB_COLLIDE_ZAXIS_INWALL) : (((EnumFacing) state.getValue(FACING)).getAxis() == EnumFacing.Axis.X ? AABB_COLLIDE_XAXIS : AABB_COLLIDE_ZAXIS); } /** * Get the actual Block state of this Block at the given position. This applies properties not visible in the * metadata, such as fence connections. */ @Override public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) { EnumFacing.Axis enumfacing$axis = ((EnumFacing) state.getValue(FACING)).getAxis(); if (enumfacing$axis == EnumFacing.Axis.Z && (worldIn.getBlockState(pos.west()).getBlock() == Blocks.COBBLESTONE_WALL || worldIn.getBlockState(pos.east()).getBlock() == Blocks.COBBLESTONE_WALL || worldIn.getBlockState(pos.west()).getBlock() == CoeBlocks.coe_wall_stone || worldIn.getBlockState(pos.east()).getBlock() == CoeBlocks.coe_wall_stone) || enumfacing$axis == EnumFacing.Axis.X && (worldIn.getBlockState(pos.north()).getBlock() == Blocks.COBBLESTONE_WALL || worldIn.getBlockState(pos.south()).getBlock() == Blocks.COBBLESTONE_WALL || worldIn.getBlockState(pos.north()).getBlock() == CoeBlocks.coe_wall_stone || worldIn.getBlockState(pos.south()).getBlock() == CoeBlocks.coe_wall_stone)) { state = state.withProperty(IN_WALL, Boolean.valueOf(true)); } return state; } /** * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed * blockstate. */ @Override public IBlockState withRotation(IBlockState state, Rotation rot) { return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING))); } /** * Returns the blockstate with the given mirror of the passed blockstate. If inapplicable, returns the passed * blockstate. */ @Override public IBlockState withMirror(IBlockState state, Mirror mirrorIn) { return state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING))); } @Override public boolean canPlaceBlockAt(World worldIn, BlockPos pos) { return worldIn.getBlockState(pos.down()).getMaterial().isSolid() ? super.canPlaceBlockAt(worldIn, pos) : false; } @Nullable public AxisAlignedBB getCollisionBoundingBox(IBlockState blockState, World worldIn, BlockPos pos) { return ((Boolean) blockState.getValue(OPEN)).booleanValue() ? NULL_AABB : (((EnumFacing) blockState.getValue(FACING)).getAxis() == EnumFacing.Axis.Z ? AABB_CLOSED_SELECTED_ZAXIS : AABB_CLOSED_SELECTED_XAXIS); } /** * Used to determine ambient occlusion and culling when rebuilding chunks for render */ @Override public boolean isOpaqueCube(IBlockState state) { return false; } @Override public boolean isFullCube(IBlockState state) { return false; } @Override public boolean isPassable(IBlockAccess worldIn, BlockPos pos) { return ((Boolean)worldIn.getBlockState(pos).getValue(OPEN)).booleanValue(); } /** * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the * IBlockstate */ @Override 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()) .withProperty(OPEN, Boolean.valueOf(false)).withProperty(POWERED, Boolean.valueOf(false)) .withProperty(IN_WALL, Boolean.valueOf(false)); } @Override public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, @Nullable ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { if (((Boolean) state.getValue(OPEN)).booleanValue()) { state = state.withProperty(OPEN, Boolean.valueOf(false)); worldIn.setBlockState(pos, state, 10); } else { EnumFacing enumfacing = EnumFacing.fromAngle((double) playerIn.rotationYaw); if (state.getValue(FACING) == enumfacing.getOpposite()) { state = state.withProperty(FACING, enumfacing); } state = state.withProperty(OPEN, Boolean.valueOf(true)); worldIn.setBlockState(pos, state, 10); } worldIn.playEvent(playerIn, ((Boolean) state.getValue(OPEN)).booleanValue() ? 1008 : 1014, pos, 0); return true; } /** * Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor * change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid * block, etc. */ @Override public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn) { if (!worldIn.isRemote) { boolean flag = worldIn.isBlockPowered(pos); if (flag || blockIn.getDefaultState().canProvidePower()) { if (flag && !((Boolean) state.getValue(OPEN)).booleanValue() && !((Boolean) state.getValue(POWERED)).booleanValue()) { worldIn.setBlockState(pos, state.withProperty(OPEN, Boolean.valueOf(true)).withProperty(POWERED, Boolean.valueOf(true)), 2); worldIn.playEvent((EntityPlayer) null, 1008, pos, 0); } else if (!flag && ((Boolean) state.getValue(OPEN)).booleanValue() && ((Boolean) state.getValue(POWERED)).booleanValue()) { worldIn.setBlockState(pos, state.withProperty(OPEN, Boolean.valueOf(false)).withProperty(POWERED, Boolean.valueOf(false)), 2); worldIn.playEvent((EntityPlayer) null, 1014, pos, 0); } else if (flag != ((Boolean) state.getValue(POWERED)).booleanValue()) { worldIn.setBlockState(pos, state.withProperty(POWERED, Boolean.valueOf(flag)), 2); } } } } @SideOnly(Side.CLIENT) public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAccess, BlockPos pos, EnumFacing side) { return true; } /** * Convert the given metadata into a BlockState for this Block */ @Override public IBlockState getStateFromMeta(int meta) { return this.getDefaultState().withProperty(FACING, EnumFacing.getHorizontal(meta)).withProperty(OPEN, Boolean.valueOf((meta & 4) != 0)).withProperty(POWERED, Boolean.valueOf((meta & != 0)); } /** * Convert the BlockState into the correct metadata value */ @Override public int getMetaFromState(IBlockState state) { int i = 0; i = i | ((EnumFacing)state.getValue(FACING)).getHorizontalIndex(); if (((Boolean)state.getValue(POWERED)).booleanValue()) { i |= 8; } if (((Boolean)state.getValue(OPEN)).booleanValue()) { i |= 4; } return i; } @Override protected BlockStateContainer createBlockState() { return new BlockStateContainer(this, new IProperty[] {FACING, OPEN, POWERED, IN_WALL}); } @Override public EnumBlockRenderType getRenderType(IBlockState state) { return EnumBlockRenderType.MODEL; } } Quote Link to comment Share on other sites More sharing options...
Animefan8888 Posted August 5, 2016 Share Posted August 5, 2016 If you do it should connect with other vanilla fences and walls. Quote VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect. Forge and vanilla BlockState generator. Link to comment Share on other sites More sharing options...
jjattack Posted August 5, 2016 Author Share Posted August 5, 2016 That takes me back to my previous help request, i was unable to extend the vanilla fence gate due to the way it accepted planks.enumtype. Quote Link to comment Share on other sites More sharing options...
Animefan8888 Posted August 5, 2016 Share Posted August 5, 2016 As long as you already override the methods that use the enumtype you should be able to pass in null. Quote VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect. Forge and vanilla BlockState generator. Link to comment Share on other sites More sharing options...
jjattack Posted August 5, 2016 Author Share Posted August 5, 2016 Thanks, il take a look at extending the fence gates again later. The problem still persists on walls and fences however which isn't the end of the world, although it would be nice if there was some trick around it. Quote Link to comment Share on other sites More sharing options...
Animefan8888 Posted August 5, 2016 Share Posted August 5, 2016 That is because Walls are hardcoded to only connect to BlockFenceGate and itself, sorry you won't be able to make it do that until Forge takes that pull request. Quote VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect. Forge and vanilla BlockState generator. Link to comment Share on other sites More sharing options...
jjattack Posted August 5, 2016 Author Share Posted August 5, 2016 I'm going to move onto slabs which i have been avoiding... although something tells me there has to be a work around for this, either by duping the vanilla class blocks into believing the new ones are acceptable blocks or, maybe, doing something in the subscribe placeblock event. I don't know java very well obviously, but it doesn't seem an overly complex thing to do in terms of things it can do. I'l mark this as unresolved for now. Quote Link to comment Share on other sites More sharing options...
jjattack Posted August 5, 2016 Author Share Posted August 5, 2016 The thing to do is to make a PullRequest to forge It seems as though i should make a topic on how to do that too not quite sure where to begin after iv forked the repository. I'm inclined to just let fences be fences and walls be walls really at this point haha. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.