diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockBase.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockBase.java index 2240e5c7e..ad835a1f5 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockBase.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockBase.java @@ -5,25 +5,38 @@ import com.raoulvdberge.refinedstorage.block.info.BlockDirection; import com.raoulvdberge.refinedstorage.block.info.IBlockInfo; import com.raoulvdberge.refinedstorage.item.itemblock.ItemBlockBase; import com.raoulvdberge.refinedstorage.render.IModelRegistration; +import com.raoulvdberge.refinedstorage.render.collision.AdvancedRayTraceResult; +import com.raoulvdberge.refinedstorage.render.collision.AdvancedRayTracer; +import com.raoulvdberge.refinedstorage.render.collision.CollisionGroup; import com.raoulvdberge.refinedstorage.tile.TileBase; +import com.raoulvdberge.refinedstorage.util.CollisionUtils; import com.raoulvdberge.refinedstorage.util.WorldUtils; import net.minecraft.block.Block; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; +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.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import javax.annotation.Nullable; +import java.util.Collections; +import java.util.List; public abstract class BlockBase extends Block { + private static final CollisionGroup DEFAULT_COLLISION_GROUP = new CollisionGroup().addItem(new AxisAlignedBB(0, 0, 0, 1, 1, 1)).setCanAccessGui(true); + private static final List DEFAULT_COLLISION_GROUPS = Collections.singletonList(DEFAULT_COLLISION_GROUP); + protected final IBlockInfo info; public BlockBase(IBlockInfo info) { @@ -162,4 +175,42 @@ public abstract class BlockBase extends Block { public final IBlockInfo getInfo() { return info; } + + protected boolean canAccessGui(IBlockState state, World world, BlockPos pos, float hitX, float hitY, float hitZ) { + state = getActualState(state, world, pos); + + for (CollisionGroup group : getCollisions(world.getTileEntity(pos), state)) { + if (group.canAccessGui()) { + for (AxisAlignedBB aabb : group.getItems()) { + if (CollisionUtils.isInBounds(aabb, hitX, hitY, hitZ)) { + return true; + } + } + } + } + + return false; + } + + public List getCollisions(TileEntity tile, IBlockState state) { + return DEFAULT_COLLISION_GROUPS; + } + + @Override + @SuppressWarnings("deprecation") + public void addCollisionBoxToList(IBlockState state, World world, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, Entity entityIn, boolean isActualState) { + for (CollisionGroup group : getCollisions(world.getTileEntity(pos), this.getActualState(state, world, pos))) { + for (AxisAlignedBB aabb : group.getItems()) { + addCollisionBoxToList(pos, entityBox, collidingBoxes, aabb); + } + } + } + + @Override + @SuppressWarnings("deprecation") + public RayTraceResult collisionRayTrace(IBlockState state, World world, BlockPos pos, Vec3d start, Vec3d end) { + AdvancedRayTraceResult result = AdvancedRayTracer.rayTrace(pos, start, end, getCollisions(world.getTileEntity(pos), this.getActualState(state, world, pos))); + + return result != null ? result.getHit() : null; + } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockCable.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockCable.java index 73eba90cf..2841e1210 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockCable.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockCable.java @@ -10,8 +10,6 @@ import com.raoulvdberge.refinedstorage.block.info.IBlockInfo; import com.raoulvdberge.refinedstorage.block.property.PropertyObject; import com.raoulvdberge.refinedstorage.capability.CapabilityNetworkNodeProxy; import com.raoulvdberge.refinedstorage.render.IModelRegistration; -import com.raoulvdberge.refinedstorage.render.collision.AdvancedRayTraceResult; -import com.raoulvdberge.refinedstorage.render.collision.AdvancedRayTracer; import com.raoulvdberge.refinedstorage.render.collision.CollisionGroup; import com.raoulvdberge.refinedstorage.render.constants.ConstantsCable; import com.raoulvdberge.refinedstorage.render.model.baked.BakedModelCableCover; @@ -27,15 +25,11 @@ 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; -import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockRenderLayer; import net.minecraft.util.EnumFacing; -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.common.property.IExtendedBlockState; @@ -185,22 +179,7 @@ public class BlockCable extends BlockNode { return false; } - protected boolean canAccessGui(IBlockState state, World world, BlockPos pos, float hitX, float hitY, float hitZ) { - state = getActualState(state, world, pos); - - for (CollisionGroup group : getCollisions(world.getTileEntity(pos), state)) { - if (group.canAccessGui()) { - for (AxisAlignedBB aabb : group.getItems()) { - if (CollisionUtils.isInBounds(aabb, hitX, hitY, hitZ)) { - return true; - } - } - } - } - - return false; - } - + @Override public List getCollisions(TileEntity tile, IBlockState state) { List groups = getCoverCollisions(tile); @@ -316,24 +295,6 @@ public class BlockCable extends BlockNode { return groups; } - @Override - @SuppressWarnings("deprecation") - public void addCollisionBoxToList(IBlockState state, World world, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, Entity entityIn, boolean isActualState) { - for (CollisionGroup group : getCollisions(world.getTileEntity(pos), this.getActualState(state, world, pos))) { - for (AxisAlignedBB aabb : group.getItems()) { - addCollisionBoxToList(pos, entityBox, collidingBoxes, aabb); - } - } - } - - @Override - @SuppressWarnings("deprecation") - public RayTraceResult collisionRayTrace(IBlockState state, World world, BlockPos pos, Vec3d start, Vec3d end) { - AdvancedRayTraceResult result = AdvancedRayTracer.rayTrace(pos, start, end, getCollisions(world.getTileEntity(pos), this.getActualState(state, world, pos))); - - return result != null ? result.getHit() : null; - } - @Override @SuppressWarnings("deprecation") public boolean isOpaqueCube(IBlockState state) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/render/collision/BlockHighlightListener.java b/src/main/java/com/raoulvdberge/refinedstorage/render/collision/BlockHighlightListener.java index 9ab27f168..7b6a703b3 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/render/collision/BlockHighlightListener.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/render/collision/BlockHighlightListener.java @@ -1,6 +1,6 @@ package com.raoulvdberge.refinedstorage.render.collision; -import com.raoulvdberge.refinedstorage.block.BlockCable; +import com.raoulvdberge.refinedstorage.block.BlockBase; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.BufferBuilder; @@ -25,21 +25,21 @@ public class BlockHighlightListener { BlockPos pos = e.getTarget().getBlockPos(); - Block block = player.getEntityWorld().getBlockState(pos).getBlock(); + Block b = player.getEntityWorld().getBlockState(pos).getBlock(); - if (!(block instanceof BlockCable)) { + if (!(b instanceof BlockBase)) { return; } - BlockCable cable = (BlockCable) block; + BlockBase block = (BlockBase) b; - IBlockState state = cable.getActualState(cable.getDefaultState(), player.getEntityWorld(), pos); + IBlockState state = block.getActualState(block.getDefaultState(), player.getEntityWorld(), pos); AdvancedRayTraceResult result = AdvancedRayTracer.rayTrace( pos, AdvancedRayTracer.getStart(player), AdvancedRayTracer.getEnd(player), - cable.getCollisions(player.getEntityWorld().getTileEntity(pos), state) + block.getCollisions(player.getEntityWorld().getTileEntity(pos), state) ); e.setCanceled(true);