Move custom collision stuff from BlockCable to BlockBase.

This commit is contained in:
raoulvdberge
2018-11-03 20:38:24 +01:00
parent 7e4423881e
commit 3bc174bfdd
3 changed files with 58 additions and 46 deletions

View File

@@ -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<CollisionGroup> 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<CollisionGroup> getCollisions(TileEntity tile, IBlockState state) {
return DEFAULT_COLLISION_GROUPS;
}
@Override
@SuppressWarnings("deprecation")
public void addCollisionBoxToList(IBlockState state, World world, BlockPos pos, AxisAlignedBB entityBox, List<AxisAlignedBB> 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;
}
}

View File

@@ -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<CollisionGroup> getCollisions(TileEntity tile, IBlockState state) {
List<CollisionGroup> 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<AxisAlignedBB> 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) {

View File

@@ -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);