Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions src/main/java/mcjty/xnet/blocks/cables/ConnectorBlock.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import net.minecraft.client.renderer.block.statemap.StateMapperBase;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
Expand All @@ -41,6 +42,7 @@
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.NonNullList;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.world.IBlockAccess;
Expand Down Expand Up @@ -448,4 +450,32 @@ public static boolean isAdvancedConnector(World world, BlockPos pos) {
public boolean isAdvancedConnector() {
return false;
}

@Override
public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List<AxisAlignedBB> collidingBoxes, @Nullable Entity entityIn, boolean isActualState) {
IBlockState mimicBlock = getMimicBlock(worldIn, pos);
if (mimicBlock != null) {
mimicBlock = mimicBlock.getActualState(worldIn, pos);
mimicBlock.getBlock().addCollisionBoxToList(mimicBlock, worldIn, pos, entityBox, collidingBoxes, entityIn, true);
return;
}

addCollisionBoxToList(pos, entityBox, collidingBoxes, AABB_CENTER);

for (EnumFacing facing : EnumFacing.VALUES) {
ConnectorType connectorType = getConnectorType(state.getValue(COLOR), worldIn, pos, facing);
if (connectorType == ConnectorType.CABLE) {
addCollisionBoxToList(pos, entityBox, collidingBoxes, AABBS[facing.getIndex()]);
} else if (connectorType == ConnectorType.BLOCK) {
addCollisionBoxToList(pos, entityBox, collidingBoxes, AABBS_CONNECTOR[facing.getIndex()]);
}
}
}

@Override
@SideOnly(Side.CLIENT)
public AxisAlignedBB getSelectedBoundingBox(IBlockState state, World worldIn, BlockPos pos) {
IBlockState mimicBlock = getMimicBlock(worldIn, pos);
return mimicBlock != null ? mimicBlock.getSelectedBoundingBox(worldIn, pos) : super.getSelectedBoundingBox(state, worldIn, pos);
}
}
14 changes: 14 additions & 0 deletions src/main/java/mcjty/xnet/blocks/cables/NetCableBlock.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,12 @@
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.client.renderer.block.statemap.StateMapperBase;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.NonNullList;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
Expand All @@ -21,6 +23,8 @@
import net.minecraftforge.fml.relauncher.SideOnly;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.List;

public class NetCableBlock extends GenericCableBlock {

Expand Down Expand Up @@ -80,4 +84,14 @@ protected ConnectorType getConnectorType(@Nonnull CableColor color, IBlockAccess
}
}

@Override
public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List<AxisAlignedBB> collidingBoxes, @Nullable Entity entityIn, boolean isActualState) {
addCollisionBoxToList(pos, entityBox, collidingBoxes, AABB_CENTER);

for (EnumFacing facing : EnumFacing.VALUES) {
if (getConnectorType(state.getValue(COLOR), worldIn, pos, facing) != ConnectorType.NONE) {
addCollisionBoxToList(pos, entityBox, collidingBoxes, AABBS[facing.getIndex()]);
}
}
}
}
34 changes: 21 additions & 13 deletions src/main/java/mcjty/xnet/blocks/facade/FacadeBlock.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.client.renderer.block.statemap.StateMapperBase;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
Expand All @@ -22,9 +23,8 @@
import net.minecraft.util.EnumFacing;
import net.minecraft.util.NonNullList;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.client.model.ModelLoader;
Expand All @@ -35,6 +35,7 @@
import net.minecraftforge.fml.relauncher.SideOnly;

import javax.annotation.Nullable;
import java.util.List;

public class FacadeBlock extends NetCableBlock implements ITileEntityProvider {

Expand All @@ -60,13 +61,6 @@ protected void initTileEntity() {
GameRegistry.registerTileEntity(FacadeTileEntity.class, XNet.MODID + "_facade");
}

@Nullable
@Override
public RayTraceResult collisionRayTrace(IBlockState blockState, World world, BlockPos pos, Vec3d start, Vec3d end) {
// We do not want the raytracing that happens in the GenericCableBlock
return super.originalCollisionRayTrace(blockState, world, pos, start, end);
}

@Override
public TileEntity createNewTileEntity(World world, int i) {
return null;
Expand Down Expand Up @@ -116,8 +110,6 @@ public void breakBlock(World world, BlockPos pos, IBlockState state) {
originalBreakBlock(world, pos, state);
}



@Override
@SideOnly(Side.CLIENT)
public void initModel() {
Expand Down Expand Up @@ -149,6 +141,24 @@ public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAc
return mimicBlock == null ? true : mimicBlock.shouldSideBeRendered(blockAccess, pos, side);
}

@Override
public void addCollisionBoxToList(IBlockState state, World worldIn, BlockPos pos, AxisAlignedBB entityBox, List<AxisAlignedBB> collidingBoxes, @Nullable Entity entityIn, boolean isActualState) {
IBlockState mimicBlock = getMimicBlock(worldIn, pos);
if (mimicBlock != null) {
mimicBlock = mimicBlock.getActualState(worldIn, pos);
mimicBlock.getBlock().addCollisionBoxToList(mimicBlock, worldIn, pos, entityBox, collidingBoxes, entityIn, true);
return;
}
super.addCollisionBoxToList(state, worldIn, pos, entityBox, collidingBoxes, entityIn, isActualState);
}

@Override
@SideOnly(Side.CLIENT)
public AxisAlignedBB getSelectedBoundingBox(IBlockState state, World worldIn, BlockPos pos) {
IBlockState mimicBlock = getMimicBlock(worldIn, pos);
return mimicBlock != null ? mimicBlock.getSelectedBoundingBox(worldIn, pos) : super.getSelectedBoundingBox(state, worldIn, pos);
}

@Override
@SideOnly(Side.CLIENT)
public boolean canRenderInLayer(IBlockState state, BlockRenderLayer layer) {
Expand All @@ -175,6 +185,4 @@ public boolean doesSideBlockRendering(IBlockState state, IBlockAccess world, Blo
public boolean isFullCube(IBlockState state) {
return true;
}


}
16 changes: 9 additions & 7 deletions src/main/java/mcjty/xnet/blocks/generic/GenericCableBlock.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import net.minecraft.block.material.Material;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.properties.PropertyEnum;
import net.minecraft.block.state.BlockFaceShape;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
Expand Down Expand Up @@ -184,9 +185,9 @@ public AxisAlignedBB getSelectedBoundingBox(IBlockState state, World worldIn, Bl
@Nullable
@Override
public RayTraceResult collisionRayTrace(IBlockState blockState, World world, BlockPos pos, Vec3d start, Vec3d end) {
if (getMimicBlock(world, pos) != null) {
// In mimic mode we use original raytrace mode
return originalCollisionRayTrace(blockState, world, pos, start, end);
IBlockState mimicBlock = getMimicBlock(world, pos);
if (mimicBlock != null) {
return mimicBlock.getBlock().collisionRayTrace(mimicBlock, world, pos, start, end);
}
Vec3d vec3d = start.subtract(pos.getX(), pos.getY(), pos.getZ());
Vec3d vec3d1 = end.subtract(pos.getX(), pos.getY(), pos.getZ());
Expand Down Expand Up @@ -219,10 +220,6 @@ private RayTraceResult checkIntersect(BlockPos pos, Vec3d vec3d, Vec3d vec3d1, A
return raytraceresult == null ? null : new RayTraceResult(raytraceresult.hitVec.addVector(pos.getX(), pos.getY(), pos.getZ()), raytraceresult.sideHit, pos);
}

protected RayTraceResult originalCollisionRayTrace(IBlockState blockState, World world, BlockPos pos, Vec3d start, Vec3d end) {
return super.collisionRayTrace(blockState, world, pos, start, end);
}

@Override
@SideOnly(Side.CLIENT)
@Optional.Method(modid = "waila")
Expand Down Expand Up @@ -311,6 +308,11 @@ public boolean shouldSideBeRendered(IBlockState blockState, IBlockAccess blockAc
return false;
}

@Override
public BlockFaceShape getBlockFaceShape(IBlockAccess worldIn, IBlockState state, BlockPos pos, EnumFacing face) {
return BlockFaceShape.UNDEFINED;
}

@Override
public boolean isBlockNormalCube(IBlockState blockState) {
return false;
Expand Down