Move custom collision stuff from BlockCable to BlockBase.
This commit is contained in:
@@ -5,25 +5,38 @@ import com.raoulvdberge.refinedstorage.block.info.BlockDirection;
|
|||||||
import com.raoulvdberge.refinedstorage.block.info.IBlockInfo;
|
import com.raoulvdberge.refinedstorage.block.info.IBlockInfo;
|
||||||
import com.raoulvdberge.refinedstorage.item.itemblock.ItemBlockBase;
|
import com.raoulvdberge.refinedstorage.item.itemblock.ItemBlockBase;
|
||||||
import com.raoulvdberge.refinedstorage.render.IModelRegistration;
|
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.tile.TileBase;
|
||||||
|
import com.raoulvdberge.refinedstorage.util.CollisionUtils;
|
||||||
import com.raoulvdberge.refinedstorage.util.WorldUtils;
|
import com.raoulvdberge.refinedstorage.util.WorldUtils;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.state.BlockStateContainer;
|
import net.minecraft.block.state.BlockStateContainer;
|
||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
|
import net.minecraft.util.math.AxisAlignedBB;
|
||||||
import net.minecraft.util.math.BlockPos;
|
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.IBlockAccess;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.fml.relauncher.Side;
|
import net.minecraftforge.fml.relauncher.Side;
|
||||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public abstract class BlockBase extends Block {
|
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;
|
protected final IBlockInfo info;
|
||||||
|
|
||||||
public BlockBase(IBlockInfo info) {
|
public BlockBase(IBlockInfo info) {
|
||||||
@@ -162,4 +175,42 @@ public abstract class BlockBase extends Block {
|
|||||||
public final IBlockInfo getInfo() {
|
public final IBlockInfo getInfo() {
|
||||||
return info;
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -10,8 +10,6 @@ import com.raoulvdberge.refinedstorage.block.info.IBlockInfo;
|
|||||||
import com.raoulvdberge.refinedstorage.block.property.PropertyObject;
|
import com.raoulvdberge.refinedstorage.block.property.PropertyObject;
|
||||||
import com.raoulvdberge.refinedstorage.capability.CapabilityNetworkNodeProxy;
|
import com.raoulvdberge.refinedstorage.capability.CapabilityNetworkNodeProxy;
|
||||||
import com.raoulvdberge.refinedstorage.render.IModelRegistration;
|
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.collision.CollisionGroup;
|
||||||
import com.raoulvdberge.refinedstorage.render.constants.ConstantsCable;
|
import com.raoulvdberge.refinedstorage.render.constants.ConstantsCable;
|
||||||
import com.raoulvdberge.refinedstorage.render.model.baked.BakedModelCableCover;
|
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.BlockStateContainer;
|
||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
|
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
|
||||||
import net.minecraft.entity.Entity;
|
|
||||||
import net.minecraft.entity.EntityLivingBase;
|
import net.minecraft.entity.EntityLivingBase;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.BlockRenderLayer;
|
import net.minecraft.util.BlockRenderLayer;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
import net.minecraft.util.math.AxisAlignedBB;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
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.IBlockAccess;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.common.property.IExtendedBlockState;
|
import net.minecraftforge.common.property.IExtendedBlockState;
|
||||||
@@ -185,22 +179,7 @@ public class BlockCable extends BlockNode {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean canAccessGui(IBlockState state, World world, BlockPos pos, float hitX, float hitY, float hitZ) {
|
@Override
|
||||||
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) {
|
public List<CollisionGroup> getCollisions(TileEntity tile, IBlockState state) {
|
||||||
List<CollisionGroup> groups = getCoverCollisions(tile);
|
List<CollisionGroup> groups = getCoverCollisions(tile);
|
||||||
|
|
||||||
@@ -316,24 +295,6 @@ public class BlockCable extends BlockNode {
|
|||||||
return groups;
|
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
|
@Override
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public boolean isOpaqueCube(IBlockState state) {
|
public boolean isOpaqueCube(IBlockState state) {
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
package com.raoulvdberge.refinedstorage.render.collision;
|
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.Block;
|
||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
import net.minecraft.client.renderer.BufferBuilder;
|
import net.minecraft.client.renderer.BufferBuilder;
|
||||||
@@ -25,21 +25,21 @@ public class BlockHighlightListener {
|
|||||||
|
|
||||||
BlockPos pos = e.getTarget().getBlockPos();
|
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;
|
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(
|
AdvancedRayTraceResult result = AdvancedRayTracer.rayTrace(
|
||||||
pos,
|
pos,
|
||||||
AdvancedRayTracer.getStart(player),
|
AdvancedRayTracer.getStart(player),
|
||||||
AdvancedRayTracer.getEnd(player),
|
AdvancedRayTracer.getEnd(player),
|
||||||
cable.getCollisions(player.getEntityWorld().getTileEntity(pos), state)
|
block.getCollisions(player.getEntityWorld().getTileEntity(pos), state)
|
||||||
);
|
);
|
||||||
|
|
||||||
e.setCanceled(true);
|
e.setCanceled(true);
|
||||||
|
Reference in New Issue
Block a user