Refactor the cable collision system.
This commit is contained in:
@@ -5,7 +5,10 @@ import com.raoulvdberge.refinedstorage.apiimpl.network.node.ICoverable;
|
|||||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.cover.Cover;
|
import com.raoulvdberge.refinedstorage.apiimpl.network.node.cover.Cover;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.cover.CoverManager;
|
import com.raoulvdberge.refinedstorage.apiimpl.network.node.cover.CoverManager;
|
||||||
import com.raoulvdberge.refinedstorage.capability.CapabilityNetworkNodeProxy;
|
import com.raoulvdberge.refinedstorage.capability.CapabilityNetworkNodeProxy;
|
||||||
import com.raoulvdberge.refinedstorage.render.constants.ConstantsCable;
|
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.constants.ConstantsCable;
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileBase;
|
import com.raoulvdberge.refinedstorage.tile.TileBase;
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileCable;
|
import com.raoulvdberge.refinedstorage.tile.TileCable;
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileNode;
|
import com.raoulvdberge.refinedstorage.tile.TileNode;
|
||||||
@@ -39,12 +42,12 @@ public class BlockCable extends BlockNode {
|
|||||||
public static final PropertyObject<Cover> COVER_UP = new PropertyObject<>("cover_up", Cover.class);
|
public static final PropertyObject<Cover> COVER_UP = new PropertyObject<>("cover_up", Cover.class);
|
||||||
public static final PropertyObject<Cover> COVER_DOWN = new PropertyObject<>("cover_down", Cover.class);
|
public static final PropertyObject<Cover> COVER_DOWN = new PropertyObject<>("cover_down", Cover.class);
|
||||||
|
|
||||||
protected static final PropertyBool NORTH = PropertyBool.create("north");
|
private static final PropertyBool NORTH = PropertyBool.create("north");
|
||||||
protected static final PropertyBool EAST = PropertyBool.create("east");
|
private static final PropertyBool EAST = PropertyBool.create("east");
|
||||||
protected static final PropertyBool SOUTH = PropertyBool.create("south");
|
private static final PropertyBool SOUTH = PropertyBool.create("south");
|
||||||
protected static final PropertyBool WEST = PropertyBool.create("west");
|
private static final PropertyBool WEST = PropertyBool.create("west");
|
||||||
protected static final PropertyBool UP = PropertyBool.create("up");
|
private static final PropertyBool UP = PropertyBool.create("up");
|
||||||
protected static final PropertyBool DOWN = PropertyBool.create("down");
|
private static final PropertyBool DOWN = PropertyBool.create("down");
|
||||||
|
|
||||||
public BlockCable(String name) {
|
public BlockCable(String name) {
|
||||||
super(name);
|
super(name);
|
||||||
@@ -153,68 +156,56 @@ public class BlockCable extends BlockNode {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean hitCablePart(IBlockState state, World world, BlockPos pos, float hitX, float hitY, float hitZ) {
|
protected boolean canAccessGui(IBlockState state, World world, BlockPos pos, float hitX, float hitY, float hitZ) {
|
||||||
state = getActualState(state, world, pos);
|
state = getActualState(state, world, pos);
|
||||||
|
|
||||||
if ((RenderUtils.isInBounds(ConstantsCable.CORE_AABB, hitX, hitY, hitZ)) ||
|
for (CollisionGroup group : getCollisions(world.getTileEntity(pos), state)) {
|
||||||
(state.getValue(NORTH) && RenderUtils.isInBounds(ConstantsCable.NORTH_AABB, hitX, hitY, hitZ)) ||
|
if (group.canAccessGui()) {
|
||||||
(state.getValue(EAST) && RenderUtils.isInBounds(ConstantsCable.EAST_AABB, hitX, hitY, hitZ)) ||
|
for (AxisAlignedBB aabb : group.getItems()) {
|
||||||
(state.getValue(SOUTH) && RenderUtils.isInBounds(ConstantsCable.SOUTH_AABB, hitX, hitY, hitZ)) ||
|
if (RenderUtils.isInBounds(aabb, hitX, hitY, hitZ)) {
|
||||||
(state.getValue(WEST) && RenderUtils.isInBounds(ConstantsCable.WEST_AABB, hitX, hitY, hitZ)) ||
|
return true;
|
||||||
(state.getValue(UP) && RenderUtils.isInBounds(ConstantsCable.UP_AABB, hitX, hitY, hitZ)) ||
|
}
|
||||||
(state.getValue(DOWN) && RenderUtils.isInBounds(ConstantsCable.DOWN_AABB, hitX, hitY, hitZ))) {
|
}
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
List<AxisAlignedBB> coverAabbs = getCoverCollisions(world.getTileEntity(pos));
|
|
||||||
|
|
||||||
for (AxisAlignedBB coverAabb : coverAabbs) {
|
|
||||||
if (RenderUtils.isInBounds(coverAabb, hitX, hitY, hitZ)) {
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<AxisAlignedBB> getCombinedCollisionBoxes(IBlockState state) {
|
public List<CollisionGroup> getCollisions(TileEntity tile, IBlockState state) {
|
||||||
List<AxisAlignedBB> boxes = new ArrayList<>();
|
List<CollisionGroup> groups = getCoverCollisions(tile);
|
||||||
|
|
||||||
boxes.add(ConstantsCable.CORE_AABB);
|
groups.add(ConstantsCable.CORE);
|
||||||
|
|
||||||
if (state.getValue(NORTH)) {
|
if (state.getValue(NORTH)) {
|
||||||
boxes.add(ConstantsCable.NORTH_AABB);
|
groups.add(ConstantsCable.NORTH);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (state.getValue(EAST)) {
|
if (state.getValue(EAST)) {
|
||||||
boxes.add(ConstantsCable.EAST_AABB);
|
groups.add(ConstantsCable.EAST);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (state.getValue(SOUTH)) {
|
if (state.getValue(SOUTH)) {
|
||||||
boxes.add(ConstantsCable.SOUTH_AABB);
|
groups.add(ConstantsCable.SOUTH);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (state.getValue(WEST)) {
|
if (state.getValue(WEST)) {
|
||||||
boxes.add(ConstantsCable.WEST_AABB);
|
groups.add(ConstantsCable.WEST);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (state.getValue(UP)) {
|
if (state.getValue(UP)) {
|
||||||
boxes.add(ConstantsCable.UP_AABB);
|
groups.add(ConstantsCable.UP);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (state.getValue(DOWN)) {
|
if (state.getValue(DOWN)) {
|
||||||
boxes.add(ConstantsCable.DOWN_AABB);
|
groups.add(ConstantsCable.DOWN);
|
||||||
}
|
}
|
||||||
|
|
||||||
return boxes;
|
return groups;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<AxisAlignedBB> getCollisionBoxes(TileEntity tile, IBlockState state) {
|
private List<CollisionGroup> getCoverCollisions(TileEntity tile) {
|
||||||
return getCoverCollisions(tile);
|
List<CollisionGroup> groups = new ArrayList<>();
|
||||||
}
|
|
||||||
|
|
||||||
private List<AxisAlignedBB> getCoverCollisions(TileEntity tile) {
|
|
||||||
List<AxisAlignedBB> boxes = new ArrayList<>();
|
|
||||||
|
|
||||||
if (tile instanceof TileNode && ((TileNode) tile).getNode() instanceof ICoverable) {
|
if (tile instanceof TileNode && ((TileNode) tile).getNode() instanceof ICoverable) {
|
||||||
CoverManager coverManager = ((ICoverable) ((TileNode) tile).getNode()).getCoverManager();
|
CoverManager coverManager = ((ICoverable) ((TileNode) tile).getNode()).getCoverManager();
|
||||||
@@ -227,98 +218,91 @@ public class BlockCable extends BlockNode {
|
|||||||
Cover coverDown = coverManager.getCover(EnumFacing.DOWN);
|
Cover coverDown = coverManager.getCover(EnumFacing.DOWN);
|
||||||
|
|
||||||
if (coverNorth != null) {
|
if (coverNorth != null) {
|
||||||
boxes.add(RenderUtils.getBounds(
|
groups.add(new CollisionGroup().addItem(RenderUtils.getBounds(
|
||||||
coverWest != null ? 2 : 0, coverDown != null ? 2 : 0, 0,
|
coverWest != null ? 2 : 0, coverDown != null ? 2 : 0, 0,
|
||||||
coverEast != null ? 14 : 16, coverUp != null ? 14 : 16, 2
|
coverEast != null ? 14 : 16, coverUp != null ? 14 : 16, 2
|
||||||
));
|
)));
|
||||||
|
|
||||||
if (!coverNorth.getType().isHollow()) {
|
if (!coverNorth.getType().isHollow()) {
|
||||||
boxes.add(ConstantsCable.HOLDER_NORTH_AABB);
|
groups.add(ConstantsCable.HOLDER_NORTH);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (coverEast != null) {
|
if (coverEast != null) {
|
||||||
boxes.add(RenderUtils.getBounds(
|
groups.add(new CollisionGroup().addItem(RenderUtils.getBounds(
|
||||||
14, coverDown != null ? 2 : 0, 0,
|
14, coverDown != null ? 2 : 0, 0,
|
||||||
16, coverUp != null ? 14 : 16, 16
|
16, coverUp != null ? 14 : 16, 16
|
||||||
));
|
)));
|
||||||
|
|
||||||
if (!coverEast.getType().isHollow()) {
|
if (!coverEast.getType().isHollow()) {
|
||||||
boxes.add(ConstantsCable.HOLDER_EAST_AABB);
|
groups.add(ConstantsCable.HOLDER_EAST);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (coverSouth != null) {
|
if (coverSouth != null) {
|
||||||
boxes.add(RenderUtils.getBounds(
|
groups.add(new CollisionGroup().addItem(RenderUtils.getBounds(
|
||||||
coverEast != null ? 14 : 16, coverDown != null ? 2 : 0, 16,
|
coverEast != null ? 14 : 16, coverDown != null ? 2 : 0, 16,
|
||||||
coverWest != null ? 2 : 0, coverUp != null ? 14 : 16, 14
|
coverWest != null ? 2 : 0, coverUp != null ? 14 : 16, 14
|
||||||
));
|
)));
|
||||||
|
|
||||||
if (!coverSouth.getType().isHollow()) {
|
if (!coverSouth.getType().isHollow()) {
|
||||||
boxes.add(ConstantsCable.HOLDER_SOUTH_AABB);
|
groups.add(ConstantsCable.HOLDER_SOUTH);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (coverWest != null) {
|
if (coverWest != null) {
|
||||||
boxes.add(RenderUtils.getBounds(
|
groups.add(new CollisionGroup().addItem(RenderUtils.getBounds(
|
||||||
0, coverDown != null ? 2 : 0, 0,
|
0, coverDown != null ? 2 : 0, 0,
|
||||||
2, coverUp != null ? 14 : 16, 16
|
2, coverUp != null ? 14 : 16, 16
|
||||||
));
|
)));
|
||||||
|
|
||||||
if (!coverWest.getType().isHollow()) {
|
if (!coverWest.getType().isHollow()) {
|
||||||
boxes.add(ConstantsCable.HOLDER_WEST_AABB);
|
groups.add(ConstantsCable.HOLDER_WEST);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (coverUp != null) {
|
if (coverUp != null) {
|
||||||
boxes.add(RenderUtils.getBounds(
|
groups.add(new CollisionGroup().addItem(RenderUtils.getBounds(
|
||||||
0, 14, 0,
|
0, 14, 0,
|
||||||
16, 16, 16
|
16, 16, 16
|
||||||
));
|
)));
|
||||||
|
|
||||||
if (!coverUp.getType().isHollow()) {
|
if (!coverUp.getType().isHollow()) {
|
||||||
boxes.add(ConstantsCable.HOLDER_UP_AABB);
|
groups.add(ConstantsCable.HOLDER_UP);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (coverDown != null) {
|
if (coverDown != null) {
|
||||||
boxes.add(RenderUtils.getBounds(
|
groups.add(new CollisionGroup().addItem(RenderUtils.getBounds(
|
||||||
0, 0, 0,
|
0, 0, 0,
|
||||||
16, 2, 16
|
16, 2, 16
|
||||||
));
|
)));
|
||||||
|
|
||||||
if (!coverDown.getType().isHollow()) {
|
if (!coverDown.getType().isHollow()) {
|
||||||
boxes.add(ConstantsCable.HOLDER_DOWN_AABB);
|
groups.add(ConstantsCable.HOLDER_DOWN);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return boxes;
|
return groups;
|
||||||
}
|
|
||||||
|
|
||||||
private List<AxisAlignedBB> getAllCollisionBoxes(TileEntity tile, IBlockState state) {
|
|
||||||
List<AxisAlignedBB> boxes = new ArrayList<>();
|
|
||||||
|
|
||||||
boxes.addAll(getCombinedCollisionBoxes(state));
|
|
||||||
boxes.addAll(getCollisionBoxes(tile, state));
|
|
||||||
|
|
||||||
return boxes;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public void addCollisionBoxToList(IBlockState state, World world, BlockPos pos, AxisAlignedBB entityBox, List<AxisAlignedBB> collidingBoxes, Entity entityIn, boolean p_185477_7_) {
|
public void addCollisionBoxToList(IBlockState state, World world, BlockPos pos, AxisAlignedBB entityBox, List<AxisAlignedBB> collidingBoxes, Entity entityIn, boolean p_185477_7_) {
|
||||||
for (AxisAlignedBB aabb : getAllCollisionBoxes(world.getTileEntity(pos), this.getActualState(state, world, pos))) {
|
for (CollisionGroup group : getCollisions(world.getTileEntity(pos), this.getActualState(state, world, pos))) {
|
||||||
addCollisionBoxToList(pos, entityBox, collidingBoxes, aabb);
|
for (AxisAlignedBB aabb : group.getItems()) {
|
||||||
|
addCollisionBoxToList(pos, entityBox, collidingBoxes, aabb);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public RayTraceResult collisionRayTrace(IBlockState state, World world, BlockPos pos, Vec3d start, Vec3d end) {
|
public RayTraceResult collisionRayTrace(IBlockState state, World world, BlockPos pos, Vec3d start, Vec3d end) {
|
||||||
RenderUtils.AdvancedRayTraceResult result = RenderUtils.collisionRayTrace(pos, start, end, getAllCollisionBoxes(world.getTileEntity(pos), this.getActualState(state, world, pos)));
|
AdvancedRayTraceResult result = AdvancedRayTracer.rayTrace(pos, start, end, getCollisions(world.getTileEntity(pos), this.getActualState(state, world, pos)));
|
||||||
|
|
||||||
return result != null ? result.hit : null;
|
return result != null ? result.getHit() : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -1,15 +1,15 @@
|
|||||||
package com.raoulvdberge.refinedstorage.block;
|
package com.raoulvdberge.refinedstorage.block;
|
||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.RSGui;
|
import com.raoulvdberge.refinedstorage.RSGui;
|
||||||
import com.raoulvdberge.refinedstorage.render.constants.ConstantsCable;
|
import com.raoulvdberge.refinedstorage.render.collision.CollisionGroup;
|
||||||
import com.raoulvdberge.refinedstorage.render.constants.ConstantsConstructor;
|
import com.raoulvdberge.refinedstorage.render.collision.constants.ConstantsCable;
|
||||||
|
import com.raoulvdberge.refinedstorage.render.collision.constants.ConstantsConstructor;
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileConstructor;
|
import com.raoulvdberge.refinedstorage.tile.TileConstructor;
|
||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
import net.minecraft.util.EnumHand;
|
import net.minecraft.util.EnumHand;
|
||||||
import net.minecraft.util.math.AxisAlignedBB;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
@@ -22,37 +22,37 @@ public class BlockConstructor extends BlockCable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<AxisAlignedBB> getCollisionBoxes(TileEntity tile, IBlockState state) {
|
public List<CollisionGroup> getCollisions(TileEntity tile, IBlockState state) {
|
||||||
List<AxisAlignedBB> boxes = super.getCollisionBoxes(tile, state);
|
List<CollisionGroup> groups = super.getCollisions(tile, state);
|
||||||
|
|
||||||
switch (state.getValue(getDirection().getProperty())) {
|
switch (state.getValue(getDirection().getProperty())) {
|
||||||
case NORTH:
|
case NORTH:
|
||||||
boxes.add(ConstantsCable.HOLDER_NORTH_AABB);
|
groups.add(ConstantsCable.HOLDER_NORTH);
|
||||||
boxes.add(ConstantsConstructor.HEAD_NORTH_AABB);
|
groups.add(ConstantsConstructor.HEAD_NORTH);
|
||||||
break;
|
break;
|
||||||
case EAST:
|
case EAST:
|
||||||
boxes.add(ConstantsCable.HOLDER_EAST_AABB);
|
groups.add(ConstantsCable.HOLDER_EAST);
|
||||||
boxes.add(ConstantsConstructor.HEAD_EAST_AABB);
|
groups.add(ConstantsConstructor.HEAD_EAST);
|
||||||
break;
|
break;
|
||||||
case SOUTH:
|
case SOUTH:
|
||||||
boxes.add(ConstantsCable.HOLDER_SOUTH_AABB);
|
groups.add(ConstantsCable.HOLDER_SOUTH);
|
||||||
boxes.add(ConstantsConstructor.HEAD_SOUTH_AABB);
|
groups.add(ConstantsConstructor.HEAD_SOUTH);
|
||||||
break;
|
break;
|
||||||
case WEST:
|
case WEST:
|
||||||
boxes.add(ConstantsCable.HOLDER_WEST_AABB);
|
groups.add(ConstantsCable.HOLDER_WEST);
|
||||||
boxes.add(ConstantsConstructor.HEAD_WEST_AABB);
|
groups.add(ConstantsConstructor.HEAD_WEST);
|
||||||
break;
|
break;
|
||||||
case UP:
|
case UP:
|
||||||
boxes.add(ConstantsCable.HOLDER_UP_AABB);
|
groups.add(ConstantsCable.HOLDER_UP);
|
||||||
boxes.add(ConstantsConstructor.HEAD_UP_AABB);
|
groups.add(ConstantsConstructor.HEAD_UP);
|
||||||
break;
|
break;
|
||||||
case DOWN:
|
case DOWN:
|
||||||
boxes.add(ConstantsCable.HOLDER_DOWN_AABB);
|
groups.add(ConstantsCable.HOLDER_DOWN);
|
||||||
boxes.add(ConstantsConstructor.HEAD_DOWN_AABB);
|
groups.add(ConstantsConstructor.HEAD_DOWN);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return boxes;
|
return groups;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -62,7 +62,7 @@ public class BlockConstructor extends BlockCable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) {
|
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) {
|
||||||
if (hitCablePart(state, world, pos, hitX, hitY, hitZ)) {
|
if (!canAccessGui(state, world, pos, hitX, hitY, hitZ)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -2,13 +2,13 @@ package com.raoulvdberge.refinedstorage.block;
|
|||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.RSBlocks;
|
import com.raoulvdberge.refinedstorage.RSBlocks;
|
||||||
import com.raoulvdberge.refinedstorage.RSGui;
|
import com.raoulvdberge.refinedstorage.RSGui;
|
||||||
|
import com.raoulvdberge.refinedstorage.render.collision.CollisionGroup;
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileDestructor;
|
import com.raoulvdberge.refinedstorage.tile.TileDestructor;
|
||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
import net.minecraft.util.EnumHand;
|
import net.minecraft.util.EnumHand;
|
||||||
import net.minecraft.util.math.AxisAlignedBB;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
@@ -26,13 +26,13 @@ public class BlockDestructor extends BlockCable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<AxisAlignedBB> getCollisionBoxes(TileEntity tile, IBlockState state) {
|
public List<CollisionGroup> getCollisions(TileEntity tile, IBlockState state) {
|
||||||
return RSBlocks.CONSTRUCTOR.getCollisionBoxes(tile, state);
|
return RSBlocks.CONSTRUCTOR.getCollisions(tile, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) {
|
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) {
|
||||||
if (hitCablePart(state, world, pos, hitX, hitY, hitZ)) {
|
if (!canAccessGui(state, world, pos, hitX, hitY, hitZ)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
package com.raoulvdberge.refinedstorage.block;
|
package com.raoulvdberge.refinedstorage.block;
|
||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.RSGui;
|
import com.raoulvdberge.refinedstorage.RSGui;
|
||||||
import com.raoulvdberge.refinedstorage.render.constants.ConstantsDetector;
|
import com.raoulvdberge.refinedstorage.render.collision.constants.ConstantsDetector;
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileDetector;
|
import com.raoulvdberge.refinedstorage.tile.TileDetector;
|
||||||
import net.minecraft.block.properties.PropertyBool;
|
import net.minecraft.block.properties.PropertyBool;
|
||||||
import net.minecraft.block.state.BlockFaceShape;
|
import net.minecraft.block.state.BlockFaceShape;
|
||||||
|
@@ -1,14 +1,14 @@
|
|||||||
package com.raoulvdberge.refinedstorage.block;
|
package com.raoulvdberge.refinedstorage.block;
|
||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.RSGui;
|
import com.raoulvdberge.refinedstorage.RSGui;
|
||||||
import com.raoulvdberge.refinedstorage.render.constants.ConstantsExporter;
|
import com.raoulvdberge.refinedstorage.render.collision.CollisionGroup;
|
||||||
|
import com.raoulvdberge.refinedstorage.render.collision.constants.ConstantsExporter;
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileExporter;
|
import com.raoulvdberge.refinedstorage.tile.TileExporter;
|
||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
import net.minecraft.util.EnumHand;
|
import net.minecraft.util.EnumHand;
|
||||||
import net.minecraft.util.math.AxisAlignedBB;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
@@ -21,43 +21,31 @@ public class BlockExporter extends BlockCable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<AxisAlignedBB> getCollisionBoxes(TileEntity tile, IBlockState state) {
|
public List<CollisionGroup> getCollisions(TileEntity tile, IBlockState state) {
|
||||||
List<AxisAlignedBB> boxes = super.getCollisionBoxes(tile, state);
|
List<CollisionGroup> groups = super.getCollisions(tile, state);
|
||||||
|
|
||||||
switch (state.getValue(getDirection().getProperty())) {
|
switch (state.getValue(getDirection().getProperty())) {
|
||||||
case NORTH:
|
case NORTH:
|
||||||
boxes.add(ConstantsExporter.LINE_NORTH_1_AABB);
|
groups.add(ConstantsExporter.LINE_NORTH);
|
||||||
boxes.add(ConstantsExporter.LINE_NORTH_2_AABB);
|
|
||||||
boxes.add(ConstantsExporter.LINE_NORTH_3_AABB);
|
|
||||||
break;
|
break;
|
||||||
case EAST:
|
case EAST:
|
||||||
boxes.add(ConstantsExporter.LINE_EAST_1_AABB);
|
groups.add(ConstantsExporter.LINE_EAST);
|
||||||
boxes.add(ConstantsExporter.LINE_EAST_2_AABB);
|
|
||||||
boxes.add(ConstantsExporter.LINE_EAST_3_AABB);
|
|
||||||
break;
|
break;
|
||||||
case SOUTH:
|
case SOUTH:
|
||||||
boxes.add(ConstantsExporter.LINE_SOUTH_1_AABB);
|
groups.add(ConstantsExporter.LINE_SOUTH);
|
||||||
boxes.add(ConstantsExporter.LINE_SOUTH_2_AABB);
|
|
||||||
boxes.add(ConstantsExporter.LINE_SOUTH_3_AABB);
|
|
||||||
break;
|
break;
|
||||||
case WEST:
|
case WEST:
|
||||||
boxes.add(ConstantsExporter.LINE_WEST_1_AABB);
|
groups.add(ConstantsExporter.LINE_WEST);
|
||||||
boxes.add(ConstantsExporter.LINE_WEST_2_AABB);
|
|
||||||
boxes.add(ConstantsExporter.LINE_WEST_3_AABB);
|
|
||||||
break;
|
break;
|
||||||
case UP:
|
case UP:
|
||||||
boxes.add(ConstantsExporter.LINE_UP_1_AABB);
|
groups.add(ConstantsExporter.LINE_UP);
|
||||||
boxes.add(ConstantsExporter.LINE_UP_2_AABB);
|
|
||||||
boxes.add(ConstantsExporter.LINE_UP_3_AABB);
|
|
||||||
break;
|
break;
|
||||||
case DOWN:
|
case DOWN:
|
||||||
boxes.add(ConstantsExporter.LINE_DOWN_1_AABB);
|
groups.add(ConstantsExporter.LINE_DOWN);
|
||||||
boxes.add(ConstantsExporter.LINE_DOWN_2_AABB);
|
|
||||||
boxes.add(ConstantsExporter.LINE_DOWN_3_AABB);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return boxes;
|
return groups;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -67,7 +55,7 @@ public class BlockExporter extends BlockCable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) {
|
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) {
|
||||||
if (hitCablePart(state, world, pos, hitX, hitY, hitZ)) {
|
if (!canAccessGui(state, world, pos, hitX, hitY, hitZ)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -2,8 +2,9 @@ package com.raoulvdberge.refinedstorage.block;
|
|||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.RSGui;
|
import com.raoulvdberge.refinedstorage.RSGui;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeExternalStorage;
|
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeExternalStorage;
|
||||||
import com.raoulvdberge.refinedstorage.render.constants.ConstantsCable;
|
import com.raoulvdberge.refinedstorage.render.collision.CollisionGroup;
|
||||||
import com.raoulvdberge.refinedstorage.render.constants.ConstantsExternalStorage;
|
import com.raoulvdberge.refinedstorage.render.collision.constants.ConstantsCable;
|
||||||
|
import com.raoulvdberge.refinedstorage.render.collision.constants.ConstantsExternalStorage;
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileExternalStorage;
|
import com.raoulvdberge.refinedstorage.tile.TileExternalStorage;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
@@ -11,7 +12,6 @@ import net.minecraft.entity.player.EntityPlayer;
|
|||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
import net.minecraft.util.EnumHand;
|
import net.minecraft.util.EnumHand;
|
||||||
import net.minecraft.util.math.AxisAlignedBB;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
@@ -24,37 +24,37 @@ public class BlockExternalStorage extends BlockCable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<AxisAlignedBB> getCollisionBoxes(TileEntity tile, IBlockState state) {
|
public List<CollisionGroup> getCollisions(TileEntity tile, IBlockState state) {
|
||||||
List<AxisAlignedBB> boxes = super.getCollisionBoxes(tile, state);
|
List<CollisionGroup> groups = super.getCollisions(tile, state);
|
||||||
|
|
||||||
switch (state.getValue(getDirection().getProperty())) {
|
switch (state.getValue(getDirection().getProperty())) {
|
||||||
case NORTH:
|
case NORTH:
|
||||||
boxes.add(ConstantsCable.HOLDER_NORTH_AABB);
|
groups.add(ConstantsCable.HOLDER_NORTH);
|
||||||
boxes.add(ConstantsExternalStorage.HEAD_NORTH_AABB);
|
groups.add(ConstantsExternalStorage.HEAD_NORTH);
|
||||||
break;
|
break;
|
||||||
case EAST:
|
case EAST:
|
||||||
boxes.add(ConstantsCable.HOLDER_EAST_AABB);
|
groups.add(ConstantsCable.HOLDER_EAST);
|
||||||
boxes.add(ConstantsExternalStorage.HEAD_EAST_AABB);
|
groups.add(ConstantsExternalStorage.HEAD_EAST);
|
||||||
break;
|
break;
|
||||||
case SOUTH:
|
case SOUTH:
|
||||||
boxes.add(ConstantsCable.HOLDER_SOUTH_AABB);
|
groups.add(ConstantsCable.HOLDER_SOUTH);
|
||||||
boxes.add(ConstantsExternalStorage.HEAD_SOUTH_AABB);
|
groups.add(ConstantsExternalStorage.HEAD_SOUTH);
|
||||||
break;
|
break;
|
||||||
case WEST:
|
case WEST:
|
||||||
boxes.add(ConstantsCable.HOLDER_WEST_AABB);
|
groups.add(ConstantsCable.HOLDER_WEST);
|
||||||
boxes.add(ConstantsExternalStorage.HEAD_WEST_AABB);
|
groups.add(ConstantsExternalStorage.HEAD_WEST);
|
||||||
break;
|
break;
|
||||||
case UP:
|
case UP:
|
||||||
boxes.add(ConstantsCable.HOLDER_UP_AABB);
|
groups.add(ConstantsCable.HOLDER_UP);
|
||||||
boxes.add(ConstantsExternalStorage.HEAD_UP_AABB);
|
groups.add(ConstantsExternalStorage.HEAD_UP);
|
||||||
break;
|
break;
|
||||||
case DOWN:
|
case DOWN:
|
||||||
boxes.add(ConstantsCable.HOLDER_DOWN_AABB);
|
groups.add(ConstantsCable.HOLDER_DOWN);
|
||||||
boxes.add(ConstantsExternalStorage.HEAD_DOWN_AABB);
|
groups.add(ConstantsExternalStorage.HEAD_DOWN);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return boxes;
|
return groups;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -64,7 +64,7 @@ public class BlockExternalStorage extends BlockCable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) {
|
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) {
|
||||||
if (hitCablePart(state, world, pos, hitX, hitY, hitZ)) {
|
if (!canAccessGui(state, world, pos, hitX, hitY, hitZ)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,14 +1,14 @@
|
|||||||
package com.raoulvdberge.refinedstorage.block;
|
package com.raoulvdberge.refinedstorage.block;
|
||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.RSGui;
|
import com.raoulvdberge.refinedstorage.RSGui;
|
||||||
import com.raoulvdberge.refinedstorage.render.constants.ConstantsImporter;
|
import com.raoulvdberge.refinedstorage.render.collision.CollisionGroup;
|
||||||
|
import com.raoulvdberge.refinedstorage.render.collision.constants.ConstantsImporter;
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileImporter;
|
import com.raoulvdberge.refinedstorage.tile.TileImporter;
|
||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
import net.minecraft.util.EnumHand;
|
import net.minecraft.util.EnumHand;
|
||||||
import net.minecraft.util.math.AxisAlignedBB;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
@@ -21,43 +21,31 @@ public class BlockImporter extends BlockCable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<AxisAlignedBB> getCollisionBoxes(TileEntity tile, IBlockState state) {
|
public List<CollisionGroup> getCollisions(TileEntity tile, IBlockState state) {
|
||||||
List<AxisAlignedBB> boxes = super.getCollisionBoxes(tile, state);
|
List<CollisionGroup> groups = super.getCollisions(tile, state);
|
||||||
|
|
||||||
switch (state.getValue(getDirection().getProperty())) {
|
switch (state.getValue(getDirection().getProperty())) {
|
||||||
case NORTH:
|
case NORTH:
|
||||||
boxes.add(ConstantsImporter.LINE_NORTH_1_AABB);
|
groups.add(ConstantsImporter.LINE_NORTH);
|
||||||
boxes.add(ConstantsImporter.LINE_NORTH_2_AABB);
|
|
||||||
boxes.add(ConstantsImporter.LINE_NORTH_3_AABB);
|
|
||||||
break;
|
break;
|
||||||
case EAST:
|
case EAST:
|
||||||
boxes.add(ConstantsImporter.LINE_EAST_1_AABB);
|
groups.add(ConstantsImporter.LINE_EAST);
|
||||||
boxes.add(ConstantsImporter.LINE_EAST_2_AABB);
|
|
||||||
boxes.add(ConstantsImporter.LINE_EAST_3_AABB);
|
|
||||||
break;
|
break;
|
||||||
case SOUTH:
|
case SOUTH:
|
||||||
boxes.add(ConstantsImporter.LINE_SOUTH_1_AABB);
|
groups.add(ConstantsImporter.LINE_SOUTH);
|
||||||
boxes.add(ConstantsImporter.LINE_SOUTH_2_AABB);
|
|
||||||
boxes.add(ConstantsImporter.LINE_SOUTH_3_AABB);
|
|
||||||
break;
|
break;
|
||||||
case WEST:
|
case WEST:
|
||||||
boxes.add(ConstantsImporter.LINE_WEST_1_AABB);
|
groups.add(ConstantsImporter.LINE_WEST);
|
||||||
boxes.add(ConstantsImporter.LINE_WEST_2_AABB);
|
|
||||||
boxes.add(ConstantsImporter.LINE_WEST_3_AABB);
|
|
||||||
break;
|
break;
|
||||||
case UP:
|
case UP:
|
||||||
boxes.add(ConstantsImporter.LINE_UP_1_AABB);
|
groups.add(ConstantsImporter.LINE_UP);
|
||||||
boxes.add(ConstantsImporter.LINE_UP_2_AABB);
|
|
||||||
boxes.add(ConstantsImporter.LINE_UP_3_AABB);
|
|
||||||
break;
|
break;
|
||||||
case DOWN:
|
case DOWN:
|
||||||
boxes.add(ConstantsImporter.LINE_DOWN_1_AABB);
|
groups.add(ConstantsImporter.LINE_DOWN);
|
||||||
boxes.add(ConstantsImporter.LINE_DOWN_2_AABB);
|
|
||||||
boxes.add(ConstantsImporter.LINE_DOWN_3_AABB);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return boxes;
|
return groups;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -67,7 +55,7 @@ public class BlockImporter extends BlockCable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) {
|
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) {
|
||||||
if (hitCablePart(state, world, pos, hitX, hitY, hitZ)) {
|
if (!canAccessGui(state, world, pos, hitX, hitY, hitZ)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -3,7 +3,7 @@ package com.raoulvdberge.refinedstorage.block;
|
|||||||
import com.raoulvdberge.refinedstorage.RS;
|
import com.raoulvdberge.refinedstorage.RS;
|
||||||
import com.raoulvdberge.refinedstorage.RSGui;
|
import com.raoulvdberge.refinedstorage.RSGui;
|
||||||
import com.raoulvdberge.refinedstorage.item.ItemBlockPortableGrid;
|
import com.raoulvdberge.refinedstorage.item.ItemBlockPortableGrid;
|
||||||
import com.raoulvdberge.refinedstorage.render.constants.ConstantsPortableGrid;
|
import com.raoulvdberge.refinedstorage.render.collision.constants.ConstantsPortableGrid;
|
||||||
import com.raoulvdberge.refinedstorage.tile.grid.portable.TilePortableGrid;
|
import com.raoulvdberge.refinedstorage.tile.grid.portable.TilePortableGrid;
|
||||||
import net.minecraft.block.properties.PropertyBool;
|
import net.minecraft.block.properties.PropertyBool;
|
||||||
import net.minecraft.block.properties.PropertyEnum;
|
import net.minecraft.block.properties.PropertyEnum;
|
||||||
|
@@ -4,13 +4,13 @@ import com.raoulvdberge.refinedstorage.RSBlocks;
|
|||||||
import com.raoulvdberge.refinedstorage.RSGui;
|
import com.raoulvdberge.refinedstorage.RSGui;
|
||||||
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterChannel;
|
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterChannel;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeReader;
|
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeReader;
|
||||||
|
import com.raoulvdberge.refinedstorage.render.collision.CollisionGroup;
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileReader;
|
import com.raoulvdberge.refinedstorage.tile.TileReader;
|
||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
import net.minecraft.util.EnumHand;
|
import net.minecraft.util.EnumHand;
|
||||||
import net.minecraft.util.math.AxisAlignedBB;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.IBlockAccess;
|
import net.minecraft.world.IBlockAccess;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
@@ -24,13 +24,13 @@ public class BlockReader extends BlockCable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<AxisAlignedBB> getCollisionBoxes(TileEntity tile, IBlockState state) {
|
public List<CollisionGroup> getCollisions(TileEntity tile, IBlockState state) {
|
||||||
return RSBlocks.CONSTRUCTOR.getCollisionBoxes(tile, state);
|
return RSBlocks.CONSTRUCTOR.getCollisions(tile, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) {
|
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) {
|
||||||
if (hitCablePart(state, world, pos, hitX, hitY, hitZ)) {
|
if (!canAccessGui(state, world, pos, hitX, hitY, hitZ)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
package com.raoulvdberge.refinedstorage.block;
|
package com.raoulvdberge.refinedstorage.block;
|
||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.RSGui;
|
import com.raoulvdberge.refinedstorage.RSGui;
|
||||||
import com.raoulvdberge.refinedstorage.render.constants.ConstantsWirelessTransmitter;
|
import com.raoulvdberge.refinedstorage.render.collision.constants.ConstantsWirelessTransmitter;
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileWirelessTransmitter;
|
import com.raoulvdberge.refinedstorage.tile.TileWirelessTransmitter;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.state.BlockFaceShape;
|
import net.minecraft.block.state.BlockFaceShape;
|
||||||
|
@@ -5,13 +5,13 @@ import com.raoulvdberge.refinedstorage.RSGui;
|
|||||||
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterChannel;
|
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterChannel;
|
||||||
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IWriter;
|
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IWriter;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeWriter;
|
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeWriter;
|
||||||
|
import com.raoulvdberge.refinedstorage.render.collision.CollisionGroup;
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileWriter;
|
import com.raoulvdberge.refinedstorage.tile.TileWriter;
|
||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
import net.minecraft.util.EnumHand;
|
import net.minecraft.util.EnumHand;
|
||||||
import net.minecraft.util.math.AxisAlignedBB;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.IBlockAccess;
|
import net.minecraft.world.IBlockAccess;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
@@ -25,13 +25,13 @@ public class BlockWriter extends BlockCable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<AxisAlignedBB> getCollisionBoxes(TileEntity tile, IBlockState state) {
|
public List<CollisionGroup> getCollisions(TileEntity tile, IBlockState state) {
|
||||||
return RSBlocks.CONSTRUCTOR.getCollisionBoxes(tile, state);
|
return RSBlocks.CONSTRUCTOR.getCollisions(tile, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) {
|
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) {
|
||||||
if (hitCablePart(state, world, pos, hitX, hitY, hitZ)) {
|
if (!canAccessGui(state, world, pos, hitX, hitY, hitZ)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -15,6 +15,7 @@ import com.raoulvdberge.refinedstorage.gui.grid.GuiCraftingStart;
|
|||||||
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase;
|
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase;
|
||||||
import com.raoulvdberge.refinedstorage.item.*;
|
import com.raoulvdberge.refinedstorage.item.*;
|
||||||
import com.raoulvdberge.refinedstorage.network.MessageGridCraftingPreviewResponse;
|
import com.raoulvdberge.refinedstorage.network.MessageGridCraftingPreviewResponse;
|
||||||
|
import com.raoulvdberge.refinedstorage.render.collision.BlockHighlightListener;
|
||||||
import com.raoulvdberge.refinedstorage.render.model.ModelDiskDrive;
|
import com.raoulvdberge.refinedstorage.render.model.ModelDiskDrive;
|
||||||
import com.raoulvdberge.refinedstorage.render.model.ModelDiskManipulator;
|
import com.raoulvdberge.refinedstorage.render.model.ModelDiskManipulator;
|
||||||
import com.raoulvdberge.refinedstorage.render.model.baked.BakedModelCableCover;
|
import com.raoulvdberge.refinedstorage.render.model.baked.BakedModelCableCover;
|
||||||
@@ -27,41 +28,30 @@ import com.raoulvdberge.refinedstorage.tile.TileController;
|
|||||||
import com.raoulvdberge.refinedstorage.tile.TileStorageMonitor;
|
import com.raoulvdberge.refinedstorage.tile.TileStorageMonitor;
|
||||||
import com.raoulvdberge.refinedstorage.tile.grid.portable.IPortableGrid;
|
import com.raoulvdberge.refinedstorage.tile.grid.portable.IPortableGrid;
|
||||||
import com.raoulvdberge.refinedstorage.tile.grid.portable.TilePortableGrid;
|
import com.raoulvdberge.refinedstorage.tile.grid.portable.TilePortableGrid;
|
||||||
import com.raoulvdberge.refinedstorage.util.RenderUtils;
|
|
||||||
import com.raoulvdberge.refinedstorage.util.StackUtils;
|
import com.raoulvdberge.refinedstorage.util.StackUtils;
|
||||||
import net.minecraft.block.Block;
|
|
||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.GuiScreen;
|
import net.minecraft.client.gui.GuiScreen;
|
||||||
import net.minecraft.client.renderer.BufferBuilder;
|
|
||||||
import net.minecraft.client.renderer.GlStateManager;
|
|
||||||
import net.minecraft.client.renderer.Tessellator;
|
|
||||||
import net.minecraft.client.renderer.block.model.ModelBakery;
|
import net.minecraft.client.renderer.block.model.ModelBakery;
|
||||||
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
|
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
|
||||||
import net.minecraft.client.renderer.block.statemap.StateMap;
|
import net.minecraft.client.renderer.block.statemap.StateMap;
|
||||||
import net.minecraft.client.renderer.block.statemap.StateMapperBase;
|
import net.minecraft.client.renderer.block.statemap.StateMapperBase;
|
||||||
import net.minecraft.client.renderer.color.ItemColors;
|
import net.minecraft.client.renderer.color.ItemColors;
|
||||||
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
|
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraft.util.math.AxisAlignedBB;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
|
||||||
import net.minecraftforge.client.event.DrawBlockHighlightEvent;
|
|
||||||
import net.minecraftforge.client.event.ModelBakeEvent;
|
import net.minecraftforge.client.event.ModelBakeEvent;
|
||||||
import net.minecraftforge.client.event.ModelRegistryEvent;
|
import net.minecraftforge.client.event.ModelRegistryEvent;
|
||||||
import net.minecraftforge.client.model.ModelLoader;
|
import net.minecraftforge.client.model.ModelLoader;
|
||||||
import net.minecraftforge.client.model.ModelLoaderRegistry;
|
import net.minecraftforge.client.model.ModelLoaderRegistry;
|
||||||
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
import net.minecraftforge.energy.CapabilityEnergy;
|
import net.minecraftforge.energy.CapabilityEnergy;
|
||||||
import net.minecraftforge.fml.client.registry.ClientRegistry;
|
import net.minecraftforge.fml.client.registry.ClientRegistry;
|
||||||
import net.minecraftforge.fml.common.FMLCommonHandler;
|
import net.minecraftforge.fml.common.FMLCommonHandler;
|
||||||
import net.minecraftforge.fml.common.Loader;
|
import net.minecraftforge.fml.common.Loader;
|
||||||
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
|
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
|
||||||
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
||||||
import net.minecraftforge.fml.common.eventhandler.EventPriority;
|
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class ProxyClient extends ProxyCommon {
|
public class ProxyClient extends ProxyCommon {
|
||||||
@@ -69,6 +59,8 @@ public class ProxyClient extends ProxyCommon {
|
|||||||
public void preInit(FMLPreInitializationEvent e) {
|
public void preInit(FMLPreInitializationEvent e) {
|
||||||
super.preInit(e);
|
super.preInit(e);
|
||||||
|
|
||||||
|
MinecraftForge.EVENT_BUS.register(new BlockHighlightListener());
|
||||||
|
|
||||||
ClientRegistry.bindTileEntitySpecialRenderer(TileStorageMonitor.class, new TileEntitySpecialRendererStorageMonitor());
|
ClientRegistry.bindTileEntitySpecialRenderer(TileStorageMonitor.class, new TileEntitySpecialRendererStorageMonitor());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -389,97 +381,4 @@ public class ProxyClient extends ProxyCommon {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent(priority = EventPriority.LOWEST)
|
|
||||||
public void onBlockDrawHighlight(DrawBlockHighlightEvent e) {
|
|
||||||
if (e.getTarget() == null || e.getTarget().getBlockPos() == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
EntityPlayer player = e.getPlayer();
|
|
||||||
|
|
||||||
BlockPos pos = e.getTarget().getBlockPos();
|
|
||||||
|
|
||||||
Block block = player.getEntityWorld().getBlockState(pos).getBlock();
|
|
||||||
|
|
||||||
if (!(block instanceof BlockCable)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
BlockCable cable = (BlockCable) block;
|
|
||||||
|
|
||||||
IBlockState state = cable.getActualState(cable.getDefaultState(), player.getEntityWorld(), pos);
|
|
||||||
|
|
||||||
if (cable.collisionRayTrace(state, player.getEntityWorld(), pos, RenderUtils.getStart(player), RenderUtils.getEnd(player)) == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
List<AxisAlignedBB> combinedBoxes = cable.getCombinedCollisionBoxes(state);
|
|
||||||
List<AxisAlignedBB> boxes = cable.getCollisionBoxes(player.world.getTileEntity(pos), state);
|
|
||||||
|
|
||||||
e.setCanceled(true);
|
|
||||||
|
|
||||||
GlStateManager.enableBlend();
|
|
||||||
GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0);
|
|
||||||
GlStateManager.color(0.0F, 0.0F, 0.0F, 0.4F);
|
|
||||||
GlStateManager.glLineWidth(2.0F);
|
|
||||||
GlStateManager.disableTexture2D();
|
|
||||||
GlStateManager.depthMask(false);
|
|
||||||
|
|
||||||
double d0 = player.lastTickPosX + (player.posX - player.lastTickPosX) * (double) e.getPartialTicks();
|
|
||||||
double d1 = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double) e.getPartialTicks();
|
|
||||||
double d2 = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * (double) e.getPartialTicks();
|
|
||||||
|
|
||||||
AxisAlignedBB combinedAabb = combinedBoxes.get(0);
|
|
||||||
|
|
||||||
for (int i = 1; i < combinedBoxes.size(); ++i) {
|
|
||||||
combinedAabb = combinedAabb.union(combinedBoxes.get(i));
|
|
||||||
}
|
|
||||||
|
|
||||||
drawSelectionBoundingBox(combinedAabb.expand(0.0020000000949949026D, 0.0020000000949949026D, 0.0020000000949949026D).offset(-d0, -d1, -d2).offset(pos.getX(), pos.getY(), pos.getZ()));
|
|
||||||
|
|
||||||
for (AxisAlignedBB aabb : boxes) {
|
|
||||||
drawSelectionBoundingBox(aabb.expand(0.0020000000949949026D, 0.0020000000949949026D, 0.0020000000949949026D).offset(-d0, -d1, -d2).offset(pos.getX(), pos.getY(), pos.getZ()));
|
|
||||||
}
|
|
||||||
|
|
||||||
GlStateManager.depthMask(true);
|
|
||||||
GlStateManager.enableTexture2D();
|
|
||||||
GlStateManager.disableBlend();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void drawSelectionBoundingBox(AxisAlignedBB aabb) {
|
|
||||||
Tessellator tessellator = Tessellator.getInstance();
|
|
||||||
|
|
||||||
BufferBuilder buffer = tessellator.getBuffer();
|
|
||||||
|
|
||||||
buffer.begin(3, DefaultVertexFormats.POSITION);
|
|
||||||
buffer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex();
|
|
||||||
buffer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex();
|
|
||||||
buffer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex();
|
|
||||||
buffer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex();
|
|
||||||
buffer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex();
|
|
||||||
|
|
||||||
tessellator.draw();
|
|
||||||
|
|
||||||
buffer.begin(3, DefaultVertexFormats.POSITION);
|
|
||||||
buffer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex();
|
|
||||||
buffer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex();
|
|
||||||
buffer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex();
|
|
||||||
buffer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex();
|
|
||||||
buffer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex();
|
|
||||||
|
|
||||||
tessellator.draw();
|
|
||||||
|
|
||||||
buffer.begin(1, DefaultVertexFormats.POSITION);
|
|
||||||
buffer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex();
|
|
||||||
buffer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex();
|
|
||||||
buffer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex();
|
|
||||||
buffer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex();
|
|
||||||
buffer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex();
|
|
||||||
buffer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex();
|
|
||||||
buffer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex();
|
|
||||||
buffer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex();
|
|
||||||
|
|
||||||
tessellator.draw();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,37 @@
|
|||||||
|
package com.raoulvdberge.refinedstorage.render.collision;
|
||||||
|
|
||||||
|
import net.minecraft.util.math.AxisAlignedBB;
|
||||||
|
import net.minecraft.util.math.RayTraceResult;
|
||||||
|
import net.minecraft.util.math.Vec3d;
|
||||||
|
|
||||||
|
public class AdvancedRayTraceResult<T extends RayTraceResult> {
|
||||||
|
private CollisionGroup group;
|
||||||
|
private AxisAlignedBB bounds;
|
||||||
|
private T hit;
|
||||||
|
|
||||||
|
public AdvancedRayTraceResult(CollisionGroup group, AxisAlignedBB bounds, T hit) {
|
||||||
|
this.group = group;
|
||||||
|
this.bounds = bounds;
|
||||||
|
this.hit = hit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean valid() {
|
||||||
|
return hit != null && bounds != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double squareDistanceTo(Vec3d vec) {
|
||||||
|
return hit.hitVec.squareDistanceTo(vec);
|
||||||
|
}
|
||||||
|
|
||||||
|
public CollisionGroup getGroup() {
|
||||||
|
return group;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AxisAlignedBB getBounds() {
|
||||||
|
return bounds;
|
||||||
|
}
|
||||||
|
|
||||||
|
public T getHit() {
|
||||||
|
return hit;
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,63 @@
|
|||||||
|
package com.raoulvdberge.refinedstorage.render.collision;
|
||||||
|
|
||||||
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
import net.minecraft.entity.player.EntityPlayerMP;
|
||||||
|
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 java.util.Collection;
|
||||||
|
|
||||||
|
public final class AdvancedRayTracer {
|
||||||
|
public static Vec3d getStart(EntityPlayer player) {
|
||||||
|
return new Vec3d(player.posX, player.posY + player.getEyeHeight(), player.posZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Vec3d getEnd(EntityPlayer player) {
|
||||||
|
double reachDistance = player instanceof EntityPlayerMP ? player.getEntityAttribute(EntityPlayer.REACH_DISTANCE).getAttributeValue() : (player.capabilities.isCreativeMode ? 5.0D : 4.5D);
|
||||||
|
|
||||||
|
Vec3d lookVec = player.getLookVec();
|
||||||
|
Vec3d start = getStart(player);
|
||||||
|
|
||||||
|
return start.addVector(lookVec.x * reachDistance, lookVec.y * reachDistance, lookVec.z * reachDistance);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static AdvancedRayTraceResult<RayTraceResult> rayTrace(BlockPos pos, Vec3d start, Vec3d end, Collection<CollisionGroup> groups) {
|
||||||
|
double minDistance = Double.POSITIVE_INFINITY;
|
||||||
|
AdvancedRayTraceResult hit = null;
|
||||||
|
int i = -1;
|
||||||
|
|
||||||
|
for (CollisionGroup group : groups) {
|
||||||
|
for (AxisAlignedBB aabb : group.getItems()) {
|
||||||
|
AdvancedRayTraceResult result = rayTrace(pos, start, end, aabb, i, group);
|
||||||
|
|
||||||
|
if (result != null) {
|
||||||
|
double d = result.squareDistanceTo(start);
|
||||||
|
|
||||||
|
if (d < minDistance) {
|
||||||
|
minDistance = d;
|
||||||
|
hit = result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return hit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static AdvancedRayTraceResult<RayTraceResult> rayTrace(BlockPos pos, Vec3d start, Vec3d end, AxisAlignedBB bounds, int subHit, CollisionGroup group) {
|
||||||
|
RayTraceResult result = bounds.offset(pos).calculateIntercept(start, end);
|
||||||
|
|
||||||
|
if (result == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = new RayTraceResult(RayTraceResult.Type.BLOCK, result.hitVec, result.sideHit, pos);
|
||||||
|
result.subHit = subHit;
|
||||||
|
|
||||||
|
return new AdvancedRayTraceResult<>(group, bounds, result);
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,106 @@
|
|||||||
|
package com.raoulvdberge.refinedstorage.render.collision;
|
||||||
|
|
||||||
|
import com.raoulvdberge.refinedstorage.block.BlockCable;
|
||||||
|
import net.minecraft.block.Block;
|
||||||
|
import net.minecraft.block.state.IBlockState;
|
||||||
|
import net.minecraft.client.renderer.BufferBuilder;
|
||||||
|
import net.minecraft.client.renderer.GlStateManager;
|
||||||
|
import net.minecraft.client.renderer.Tessellator;
|
||||||
|
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
|
||||||
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
import net.minecraft.util.math.AxisAlignedBB;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraftforge.client.event.DrawBlockHighlightEvent;
|
||||||
|
import net.minecraftforge.fml.common.eventhandler.EventPriority;
|
||||||
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
|
||||||
|
public class BlockHighlightListener {
|
||||||
|
@SubscribeEvent(priority = EventPriority.LOWEST)
|
||||||
|
public void onBlockDrawHighlight(DrawBlockHighlightEvent e) {
|
||||||
|
if (e.getTarget() == null || e.getTarget().getBlockPos() == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
EntityPlayer player = e.getPlayer();
|
||||||
|
|
||||||
|
BlockPos pos = e.getTarget().getBlockPos();
|
||||||
|
|
||||||
|
Block block = player.getEntityWorld().getBlockState(pos).getBlock();
|
||||||
|
|
||||||
|
if (!(block instanceof BlockCable)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
BlockCable cable = (BlockCable) block;
|
||||||
|
|
||||||
|
IBlockState state = cable.getActualState(cable.getDefaultState(), player.getEntityWorld(), pos);
|
||||||
|
|
||||||
|
AdvancedRayTraceResult result = AdvancedRayTracer.rayTrace(
|
||||||
|
pos,
|
||||||
|
AdvancedRayTracer.getStart(player),
|
||||||
|
AdvancedRayTracer.getEnd(player),
|
||||||
|
cable.getCollisions(player.getEntityWorld().getTileEntity(pos), state)
|
||||||
|
);
|
||||||
|
|
||||||
|
e.setCanceled(true);
|
||||||
|
|
||||||
|
if (result == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
GlStateManager.enableBlend();
|
||||||
|
GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0);
|
||||||
|
GlStateManager.color(0.0F, 0.0F, 0.0F, 0.4F);
|
||||||
|
GlStateManager.glLineWidth(3.0F);
|
||||||
|
GlStateManager.disableTexture2D();
|
||||||
|
GlStateManager.depthMask(false);
|
||||||
|
|
||||||
|
double d0 = player.lastTickPosX + (player.posX - player.lastTickPosX) * (double) e.getPartialTicks();
|
||||||
|
double d1 = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double) e.getPartialTicks();
|
||||||
|
double d2 = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * (double) e.getPartialTicks();
|
||||||
|
|
||||||
|
for (AxisAlignedBB aabb : result.getGroup().getItems()) {
|
||||||
|
drawSelectionBoundingBox(aabb.expand(0.0020000000949949026D, 0.0020000000949949026D, 0.0020000000949949026D).offset(-d0, -d1, -d2).offset(pos.getX(), pos.getY(), pos.getZ()));
|
||||||
|
}
|
||||||
|
|
||||||
|
GlStateManager.depthMask(true);
|
||||||
|
GlStateManager.enableTexture2D();
|
||||||
|
GlStateManager.disableBlend();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void drawSelectionBoundingBox(AxisAlignedBB aabb) {
|
||||||
|
Tessellator tessellator = Tessellator.getInstance();
|
||||||
|
|
||||||
|
BufferBuilder buffer = tessellator.getBuffer();
|
||||||
|
|
||||||
|
buffer.begin(3, DefaultVertexFormats.POSITION);
|
||||||
|
buffer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex();
|
||||||
|
buffer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex();
|
||||||
|
buffer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex();
|
||||||
|
buffer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex();
|
||||||
|
buffer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex();
|
||||||
|
|
||||||
|
tessellator.draw();
|
||||||
|
|
||||||
|
buffer.begin(3, DefaultVertexFormats.POSITION);
|
||||||
|
buffer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex();
|
||||||
|
buffer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex();
|
||||||
|
buffer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex();
|
||||||
|
buffer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex();
|
||||||
|
buffer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex();
|
||||||
|
|
||||||
|
tessellator.draw();
|
||||||
|
|
||||||
|
buffer.begin(1, DefaultVertexFormats.POSITION);
|
||||||
|
buffer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex();
|
||||||
|
buffer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex();
|
||||||
|
buffer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex();
|
||||||
|
buffer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex();
|
||||||
|
buffer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex();
|
||||||
|
buffer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex();
|
||||||
|
buffer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex();
|
||||||
|
buffer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex();
|
||||||
|
|
||||||
|
tessellator.draw();
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,31 @@
|
|||||||
|
package com.raoulvdberge.refinedstorage.render.collision;
|
||||||
|
|
||||||
|
import net.minecraft.util.math.AxisAlignedBB;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class CollisionGroup {
|
||||||
|
private List<AxisAlignedBB> items = new ArrayList<>();
|
||||||
|
private boolean canAccessGui;
|
||||||
|
|
||||||
|
public CollisionGroup addItem(AxisAlignedBB item) {
|
||||||
|
items.add(item);
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<AxisAlignedBB> getItems() {
|
||||||
|
return items;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean canAccessGui() {
|
||||||
|
return canAccessGui;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CollisionGroup setCanAccessGui(boolean canAccessGui) {
|
||||||
|
this.canAccessGui = canAccessGui;
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
@@ -1,5 +1,6 @@
|
|||||||
package com.raoulvdberge.refinedstorage.render.constants;
|
package com.raoulvdberge.refinedstorage.render.collision.constants;
|
||||||
|
|
||||||
|
import com.raoulvdberge.refinedstorage.render.collision.CollisionGroup;
|
||||||
import com.raoulvdberge.refinedstorage.util.RenderUtils;
|
import com.raoulvdberge.refinedstorage.util.RenderUtils;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
import net.minecraft.util.math.AxisAlignedBB;
|
import net.minecraft.util.math.AxisAlignedBB;
|
||||||
@@ -7,20 +8,20 @@ import org.apache.commons.lang3.tuple.Pair;
|
|||||||
import org.lwjgl.util.vector.Vector3f;
|
import org.lwjgl.util.vector.Vector3f;
|
||||||
|
|
||||||
public final class ConstantsCable {
|
public final class ConstantsCable {
|
||||||
public static final AxisAlignedBB CORE_AABB = RenderUtils.getBounds(6, 6, 6, 10, 10, 10);
|
public static final CollisionGroup CORE = new CollisionGroup().addItem(RenderUtils.getBounds(6, 6, 6, 10, 10, 10));
|
||||||
public static final AxisAlignedBB NORTH_AABB = RenderUtils.getBounds(6, 6, 0, 10, 10, 6);
|
public static final CollisionGroup NORTH = new CollisionGroup().addItem(RenderUtils.getBounds(6, 6, 0, 10, 10, 6));
|
||||||
public static final AxisAlignedBB EAST_AABB = RenderUtils.getBounds(10, 6, 6, 16, 10, 10);
|
public static final CollisionGroup EAST = new CollisionGroup().addItem(RenderUtils.getBounds(10, 6, 6, 16, 10, 10));
|
||||||
public static final AxisAlignedBB SOUTH_AABB = RenderUtils.getBounds(6, 6, 10, 10, 10, 16);
|
public static final CollisionGroup SOUTH = new CollisionGroup().addItem(RenderUtils.getBounds(6, 6, 10, 10, 10, 16));
|
||||||
public static final AxisAlignedBB WEST_AABB = RenderUtils.getBounds(0, 6, 6, 6, 10, 10);
|
public static final CollisionGroup WEST = new CollisionGroup().addItem(RenderUtils.getBounds(0, 6, 6, 6, 10, 10));
|
||||||
public static final AxisAlignedBB UP_AABB = RenderUtils.getBounds(6, 10, 6, 10, 16, 10);
|
public static final CollisionGroup UP = new CollisionGroup().addItem(RenderUtils.getBounds(6, 10, 6, 10, 16, 10));
|
||||||
public static final AxisAlignedBB DOWN_AABB = RenderUtils.getBounds(6, 0, 6, 10, 6, 10);
|
public static final CollisionGroup DOWN = new CollisionGroup().addItem(RenderUtils.getBounds(6, 0, 6, 10, 6, 10));
|
||||||
|
|
||||||
public static final AxisAlignedBB HOLDER_NORTH_AABB = getHolderBoundsAabb(EnumFacing.NORTH);
|
public static final CollisionGroup HOLDER_NORTH = new CollisionGroup().addItem(getHolderBoundsAabb(EnumFacing.NORTH));
|
||||||
public static final AxisAlignedBB HOLDER_EAST_AABB = getHolderBoundsAabb(EnumFacing.EAST);
|
public static final CollisionGroup HOLDER_EAST = new CollisionGroup().addItem(getHolderBoundsAabb(EnumFacing.EAST));
|
||||||
public static final AxisAlignedBB HOLDER_SOUTH_AABB = getHolderBoundsAabb(EnumFacing.SOUTH);
|
public static final CollisionGroup HOLDER_SOUTH = new CollisionGroup().addItem(getHolderBoundsAabb(EnumFacing.SOUTH));
|
||||||
public static final AxisAlignedBB HOLDER_WEST_AABB = getHolderBoundsAabb(EnumFacing.WEST);
|
public static final CollisionGroup HOLDER_WEST = new CollisionGroup().addItem(getHolderBoundsAabb(EnumFacing.WEST));
|
||||||
public static final AxisAlignedBB HOLDER_UP_AABB = getHolderBoundsAabb(EnumFacing.UP);
|
public static final CollisionGroup HOLDER_UP = new CollisionGroup().addItem(getHolderBoundsAabb(EnumFacing.UP));
|
||||||
public static final AxisAlignedBB HOLDER_DOWN_AABB = getHolderBoundsAabb(EnumFacing.DOWN);
|
public static final CollisionGroup HOLDER_DOWN = new CollisionGroup().addItem(getHolderBoundsAabb(EnumFacing.DOWN));
|
||||||
|
|
||||||
public static Pair<Vector3f, Vector3f> getCoverBounds(EnumFacing side) {
|
public static Pair<Vector3f, Vector3f> getCoverBounds(EnumFacing side) {
|
||||||
switch (side) {
|
switch (side) {
|
@@ -0,0 +1,13 @@
|
|||||||
|
package com.raoulvdberge.refinedstorage.render.collision.constants;
|
||||||
|
|
||||||
|
import com.raoulvdberge.refinedstorage.render.collision.CollisionGroup;
|
||||||
|
import com.raoulvdberge.refinedstorage.util.RenderUtils;
|
||||||
|
|
||||||
|
public final class ConstantsConstructor {
|
||||||
|
public static final CollisionGroup HEAD_NORTH = new CollisionGroup().addItem(RenderUtils.getBounds(2, 2, 0, 14, 14, 2)).setCanAccessGui(true);
|
||||||
|
public static final CollisionGroup HEAD_EAST = new CollisionGroup().addItem(RenderUtils.getBounds(14, 2, 2, 16, 14, 14)).setCanAccessGui(true);
|
||||||
|
public static final CollisionGroup HEAD_SOUTH = new CollisionGroup().addItem(RenderUtils.getBounds(2, 2, 14, 14, 14, 16)).setCanAccessGui(true);
|
||||||
|
public static final CollisionGroup HEAD_WEST = new CollisionGroup().addItem(RenderUtils.getBounds(0, 2, 2, 2, 14, 14)).setCanAccessGui(true);
|
||||||
|
public static final CollisionGroup HEAD_DOWN = new CollisionGroup().addItem(RenderUtils.getBounds(2, 0, 2, 14, 2, 14)).setCanAccessGui(true);
|
||||||
|
public static final CollisionGroup HEAD_UP = new CollisionGroup().addItem(RenderUtils.getBounds(2, 14, 2, 14, 16, 14)).setCanAccessGui(true);
|
||||||
|
}
|
@@ -1,4 +1,4 @@
|
|||||||
package com.raoulvdberge.refinedstorage.render.constants;
|
package com.raoulvdberge.refinedstorage.render.collision.constants;
|
||||||
|
|
||||||
import net.minecraft.util.math.AxisAlignedBB;
|
import net.minecraft.util.math.AxisAlignedBB;
|
||||||
|
|
@@ -1,5 +1,6 @@
|
|||||||
package com.raoulvdberge.refinedstorage.render.constants;
|
package com.raoulvdberge.refinedstorage.render.collision.constants;
|
||||||
|
|
||||||
|
import com.raoulvdberge.refinedstorage.render.collision.CollisionGroup;
|
||||||
import com.raoulvdberge.refinedstorage.util.RenderUtils;
|
import com.raoulvdberge.refinedstorage.util.RenderUtils;
|
||||||
import net.minecraft.util.math.AxisAlignedBB;
|
import net.minecraft.util.math.AxisAlignedBB;
|
||||||
|
|
||||||
@@ -7,19 +8,30 @@ public final class ConstantsExporter {
|
|||||||
public static final AxisAlignedBB LINE_NORTH_1_AABB = RenderUtils.getBounds(6, 6, 0, 10, 10, 2);
|
public static final AxisAlignedBB LINE_NORTH_1_AABB = RenderUtils.getBounds(6, 6, 0, 10, 10, 2);
|
||||||
public static final AxisAlignedBB LINE_NORTH_2_AABB = RenderUtils.getBounds(5, 5, 2, 11, 11, 4);
|
public static final AxisAlignedBB LINE_NORTH_2_AABB = RenderUtils.getBounds(5, 5, 2, 11, 11, 4);
|
||||||
public static final AxisAlignedBB LINE_NORTH_3_AABB = RenderUtils.getBounds(3, 3, 4, 13, 13, 6);
|
public static final AxisAlignedBB LINE_NORTH_3_AABB = RenderUtils.getBounds(3, 3, 4, 13, 13, 6);
|
||||||
|
public static final CollisionGroup LINE_NORTH = new CollisionGroup().addItem(LINE_NORTH_1_AABB).addItem(LINE_NORTH_2_AABB).addItem(LINE_NORTH_3_AABB).setCanAccessGui(true);
|
||||||
|
|
||||||
public static final AxisAlignedBB LINE_EAST_1_AABB = RenderUtils.getBounds(14, 6, 6, 16, 10, 10);
|
public static final AxisAlignedBB LINE_EAST_1_AABB = RenderUtils.getBounds(14, 6, 6, 16, 10, 10);
|
||||||
public static final AxisAlignedBB LINE_EAST_2_AABB = RenderUtils.getBounds(12, 5, 5, 14, 11, 11);
|
public static final AxisAlignedBB LINE_EAST_2_AABB = RenderUtils.getBounds(12, 5, 5, 14, 11, 11);
|
||||||
public static final AxisAlignedBB LINE_EAST_3_AABB = RenderUtils.getBounds(10, 3, 3, 12, 13, 13);
|
public static final AxisAlignedBB LINE_EAST_3_AABB = RenderUtils.getBounds(10, 3, 3, 12, 13, 13);
|
||||||
|
public static final CollisionGroup LINE_EAST = new CollisionGroup().addItem(LINE_EAST_1_AABB).addItem(LINE_EAST_2_AABB).addItem(LINE_EAST_3_AABB).setCanAccessGui(true);
|
||||||
|
|
||||||
public static final AxisAlignedBB LINE_SOUTH_1_AABB = RenderUtils.getBounds(6, 6, 14, 10, 10, 16);
|
public static final AxisAlignedBB LINE_SOUTH_1_AABB = RenderUtils.getBounds(6, 6, 14, 10, 10, 16);
|
||||||
public static final AxisAlignedBB LINE_SOUTH_2_AABB = RenderUtils.getBounds(5, 5, 12, 11, 11, 14);
|
public static final AxisAlignedBB LINE_SOUTH_2_AABB = RenderUtils.getBounds(5, 5, 12, 11, 11, 14);
|
||||||
public static final AxisAlignedBB LINE_SOUTH_3_AABB = RenderUtils.getBounds(3, 3, 10, 13, 13, 12);
|
public static final AxisAlignedBB LINE_SOUTH_3_AABB = RenderUtils.getBounds(3, 3, 10, 13, 13, 12);
|
||||||
|
public static final CollisionGroup LINE_SOUTH = new CollisionGroup().addItem(LINE_SOUTH_1_AABB).addItem(LINE_SOUTH_2_AABB).addItem(LINE_SOUTH_3_AABB).setCanAccessGui(true);
|
||||||
|
|
||||||
public static final AxisAlignedBB LINE_WEST_1_AABB = RenderUtils.getBounds(0, 6, 6, 2, 10, 10);
|
public static final AxisAlignedBB LINE_WEST_1_AABB = RenderUtils.getBounds(0, 6, 6, 2, 10, 10);
|
||||||
public static final AxisAlignedBB LINE_WEST_2_AABB = RenderUtils.getBounds(2, 5, 5, 4, 11, 11);
|
public static final AxisAlignedBB LINE_WEST_2_AABB = RenderUtils.getBounds(2, 5, 5, 4, 11, 11);
|
||||||
public static final AxisAlignedBB LINE_WEST_3_AABB = RenderUtils.getBounds(4, 3, 3, 6, 13, 13);
|
public static final AxisAlignedBB LINE_WEST_3_AABB = RenderUtils.getBounds(4, 3, 3, 6, 13, 13);
|
||||||
|
public static final CollisionGroup LINE_WEST = new CollisionGroup().addItem(LINE_WEST_1_AABB).addItem(LINE_WEST_2_AABB).addItem(LINE_WEST_3_AABB).setCanAccessGui(true);
|
||||||
|
|
||||||
public static final AxisAlignedBB LINE_UP_1_AABB = RenderUtils.getBounds(6, 14, 6, 10, 16, 10);
|
public static final AxisAlignedBB LINE_UP_1_AABB = RenderUtils.getBounds(6, 14, 6, 10, 16, 10);
|
||||||
public static final AxisAlignedBB LINE_UP_2_AABB = RenderUtils.getBounds(5, 12, 5, 11, 14, 11);
|
public static final AxisAlignedBB LINE_UP_2_AABB = RenderUtils.getBounds(5, 12, 5, 11, 14, 11);
|
||||||
public static final AxisAlignedBB LINE_UP_3_AABB = RenderUtils.getBounds(3, 10, 3, 13, 12, 13);
|
public static final AxisAlignedBB LINE_UP_3_AABB = RenderUtils.getBounds(3, 10, 3, 13, 12, 13);
|
||||||
|
public static final CollisionGroup LINE_UP = new CollisionGroup().addItem(LINE_UP_1_AABB).addItem(LINE_UP_2_AABB).addItem(LINE_UP_3_AABB).setCanAccessGui(true);
|
||||||
|
|
||||||
public static final AxisAlignedBB LINE_DOWN_1_AABB = RenderUtils.getBounds(6, 0, 6, 10, 2, 10);
|
public static final AxisAlignedBB LINE_DOWN_1_AABB = RenderUtils.getBounds(6, 0, 6, 10, 2, 10);
|
||||||
public static final AxisAlignedBB LINE_DOWN_2_AABB = RenderUtils.getBounds(5, 2, 5, 11, 4, 11);
|
public static final AxisAlignedBB LINE_DOWN_2_AABB = RenderUtils.getBounds(5, 2, 5, 11, 4, 11);
|
||||||
public static final AxisAlignedBB LINE_DOWN_3_AABB = RenderUtils.getBounds(3, 4, 3, 13, 6, 13);
|
public static final AxisAlignedBB LINE_DOWN_3_AABB = RenderUtils.getBounds(3, 4, 3, 13, 6, 13);
|
||||||
|
public static final CollisionGroup LINE_DOWN = new CollisionGroup().addItem(LINE_DOWN_1_AABB).addItem(LINE_DOWN_2_AABB).addItem(LINE_DOWN_3_AABB).setCanAccessGui(true);
|
||||||
}
|
}
|
@@ -0,0 +1,13 @@
|
|||||||
|
package com.raoulvdberge.refinedstorage.render.collision.constants;
|
||||||
|
|
||||||
|
import com.raoulvdberge.refinedstorage.render.collision.CollisionGroup;
|
||||||
|
import com.raoulvdberge.refinedstorage.util.RenderUtils;
|
||||||
|
|
||||||
|
public final class ConstantsExternalStorage {
|
||||||
|
public static final CollisionGroup HEAD_NORTH = new CollisionGroup().addItem(RenderUtils.getBounds(3, 3, 0, 13, 13, 2)).setCanAccessGui(true);
|
||||||
|
public static final CollisionGroup HEAD_EAST = new CollisionGroup().addItem(RenderUtils.getBounds(14, 3, 3, 16, 13, 13)).setCanAccessGui(true);
|
||||||
|
public static final CollisionGroup HEAD_SOUTH = new CollisionGroup().addItem(RenderUtils.getBounds(3, 3, 14, 13, 13, 16)).setCanAccessGui(true);
|
||||||
|
public static final CollisionGroup HEAD_WEST = new CollisionGroup().addItem(RenderUtils.getBounds(0, 3, 3, 2, 13, 13)).setCanAccessGui(true);
|
||||||
|
public static final CollisionGroup HEAD_UP = new CollisionGroup().addItem(RenderUtils.getBounds(3, 14, 3, 13, 16, 13)).setCanAccessGui(true);
|
||||||
|
public static final CollisionGroup HEAD_DOWN = new CollisionGroup().addItem(RenderUtils.getBounds(3, 0, 3, 13, 2, 13)).setCanAccessGui(true);
|
||||||
|
}
|
@@ -1,5 +1,6 @@
|
|||||||
package com.raoulvdberge.refinedstorage.render.constants;
|
package com.raoulvdberge.refinedstorage.render.collision.constants;
|
||||||
|
|
||||||
|
import com.raoulvdberge.refinedstorage.render.collision.CollisionGroup;
|
||||||
import com.raoulvdberge.refinedstorage.util.RenderUtils;
|
import com.raoulvdberge.refinedstorage.util.RenderUtils;
|
||||||
import net.minecraft.util.math.AxisAlignedBB;
|
import net.minecraft.util.math.AxisAlignedBB;
|
||||||
|
|
||||||
@@ -7,19 +8,30 @@ public final class ConstantsImporter {
|
|||||||
public static final AxisAlignedBB LINE_NORTH_1_AABB = RenderUtils.getBounds(6, 6, 4, 10, 10, 6);
|
public static final AxisAlignedBB LINE_NORTH_1_AABB = RenderUtils.getBounds(6, 6, 4, 10, 10, 6);
|
||||||
public static final AxisAlignedBB LINE_NORTH_2_AABB = RenderUtils.getBounds(5, 5, 2, 11, 11, 4);
|
public static final AxisAlignedBB LINE_NORTH_2_AABB = RenderUtils.getBounds(5, 5, 2, 11, 11, 4);
|
||||||
public static final AxisAlignedBB LINE_NORTH_3_AABB = RenderUtils.getBounds(3, 3, 0, 13, 13, 2);
|
public static final AxisAlignedBB LINE_NORTH_3_AABB = RenderUtils.getBounds(3, 3, 0, 13, 13, 2);
|
||||||
|
public static final CollisionGroup LINE_NORTH = new CollisionGroup().addItem(LINE_NORTH_1_AABB).addItem(LINE_NORTH_2_AABB).addItem(LINE_NORTH_3_AABB).setCanAccessGui(true);
|
||||||
|
|
||||||
public static final AxisAlignedBB LINE_EAST_1_AABB = RenderUtils.getBounds(10, 6, 6, 12, 10, 10);
|
public static final AxisAlignedBB LINE_EAST_1_AABB = RenderUtils.getBounds(10, 6, 6, 12, 10, 10);
|
||||||
public static final AxisAlignedBB LINE_EAST_2_AABB = RenderUtils.getBounds(12, 5, 5, 14, 11, 11);
|
public static final AxisAlignedBB LINE_EAST_2_AABB = RenderUtils.getBounds(12, 5, 5, 14, 11, 11);
|
||||||
public static final AxisAlignedBB LINE_EAST_3_AABB = RenderUtils.getBounds(14, 3, 3, 16, 13, 13);
|
public static final AxisAlignedBB LINE_EAST_3_AABB = RenderUtils.getBounds(14, 3, 3, 16, 13, 13);
|
||||||
|
public static final CollisionGroup LINE_EAST = new CollisionGroup().addItem(LINE_EAST_1_AABB).addItem(LINE_EAST_2_AABB).addItem(LINE_EAST_3_AABB).setCanAccessGui(true);
|
||||||
|
|
||||||
public static final AxisAlignedBB LINE_SOUTH_1_AABB = RenderUtils.getBounds(6, 6, 10, 10, 10, 12);
|
public static final AxisAlignedBB LINE_SOUTH_1_AABB = RenderUtils.getBounds(6, 6, 10, 10, 10, 12);
|
||||||
public static final AxisAlignedBB LINE_SOUTH_2_AABB = RenderUtils.getBounds(5, 5, 12, 11, 11, 14);
|
public static final AxisAlignedBB LINE_SOUTH_2_AABB = RenderUtils.getBounds(5, 5, 12, 11, 11, 14);
|
||||||
public static final AxisAlignedBB LINE_SOUTH_3_AABB = RenderUtils.getBounds(3, 3, 14, 13, 13, 16);
|
public static final AxisAlignedBB LINE_SOUTH_3_AABB = RenderUtils.getBounds(3, 3, 14, 13, 13, 16);
|
||||||
|
public static final CollisionGroup LINE_SOUTH = new CollisionGroup().addItem(LINE_SOUTH_1_AABB).addItem(LINE_SOUTH_2_AABB).addItem(LINE_SOUTH_3_AABB).setCanAccessGui(true);
|
||||||
|
|
||||||
public static final AxisAlignedBB LINE_WEST_1_AABB = RenderUtils.getBounds(4, 6, 6, 6, 10, 10);
|
public static final AxisAlignedBB LINE_WEST_1_AABB = RenderUtils.getBounds(4, 6, 6, 6, 10, 10);
|
||||||
public static final AxisAlignedBB LINE_WEST_2_AABB = RenderUtils.getBounds(2, 5, 5, 4, 11, 11);
|
public static final AxisAlignedBB LINE_WEST_2_AABB = RenderUtils.getBounds(2, 5, 5, 4, 11, 11);
|
||||||
public static final AxisAlignedBB LINE_WEST_3_AABB = RenderUtils.getBounds(0, 3, 3, 2, 13, 13);
|
public static final AxisAlignedBB LINE_WEST_3_AABB = RenderUtils.getBounds(0, 3, 3, 2, 13, 13);
|
||||||
|
public static final CollisionGroup LINE_WEST = new CollisionGroup().addItem(LINE_WEST_1_AABB).addItem(LINE_WEST_2_AABB).addItem(LINE_WEST_3_AABB).setCanAccessGui(true);
|
||||||
|
|
||||||
public static final AxisAlignedBB LINE_UP_1_AABB = RenderUtils.getBounds(6, 10, 6, 10, 12, 10);
|
public static final AxisAlignedBB LINE_UP_1_AABB = RenderUtils.getBounds(6, 10, 6, 10, 12, 10);
|
||||||
public static final AxisAlignedBB LINE_UP_2_AABB = RenderUtils.getBounds(5, 12, 5, 11, 14, 11);
|
public static final AxisAlignedBB LINE_UP_2_AABB = RenderUtils.getBounds(5, 12, 5, 11, 14, 11);
|
||||||
public static final AxisAlignedBB LINE_UP_3_AABB = RenderUtils.getBounds(3, 14, 3, 13, 16, 13);
|
public static final AxisAlignedBB LINE_UP_3_AABB = RenderUtils.getBounds(3, 14, 3, 13, 16, 13);
|
||||||
|
public static final CollisionGroup LINE_UP = new CollisionGroup().addItem(LINE_UP_1_AABB).addItem(LINE_UP_2_AABB).addItem(LINE_UP_3_AABB).setCanAccessGui(true);
|
||||||
|
|
||||||
public static final AxisAlignedBB LINE_DOWN_1_AABB = RenderUtils.getBounds(6, 4, 6, 10, 6, 10);
|
public static final AxisAlignedBB LINE_DOWN_1_AABB = RenderUtils.getBounds(6, 4, 6, 10, 6, 10);
|
||||||
public static final AxisAlignedBB LINE_DOWN_2_AABB = RenderUtils.getBounds(5, 2, 5, 11, 4, 11);
|
public static final AxisAlignedBB LINE_DOWN_2_AABB = RenderUtils.getBounds(5, 2, 5, 11, 4, 11);
|
||||||
public static final AxisAlignedBB LINE_DOWN_3_AABB = RenderUtils.getBounds(3, 0, 3, 13, 2, 13);
|
public static final AxisAlignedBB LINE_DOWN_3_AABB = RenderUtils.getBounds(3, 0, 3, 13, 2, 13);
|
||||||
|
public static final CollisionGroup LINE_DOWN = new CollisionGroup().addItem(LINE_DOWN_1_AABB).addItem(LINE_DOWN_2_AABB).addItem(LINE_DOWN_3_AABB).setCanAccessGui(true);
|
||||||
}
|
}
|
@@ -1,4 +1,4 @@
|
|||||||
package com.raoulvdberge.refinedstorage.render.constants;
|
package com.raoulvdberge.refinedstorage.render.collision.constants;
|
||||||
|
|
||||||
import net.minecraft.util.math.AxisAlignedBB;
|
import net.minecraft.util.math.AxisAlignedBB;
|
||||||
|
|
@@ -1,4 +1,4 @@
|
|||||||
package com.raoulvdberge.refinedstorage.render.constants;
|
package com.raoulvdberge.refinedstorage.render.collision.constants;
|
||||||
|
|
||||||
import net.minecraft.util.math.AxisAlignedBB;
|
import net.minecraft.util.math.AxisAlignedBB;
|
||||||
|
|
@@ -1,13 +0,0 @@
|
|||||||
package com.raoulvdberge.refinedstorage.render.constants;
|
|
||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.util.RenderUtils;
|
|
||||||
import net.minecraft.util.math.AxisAlignedBB;
|
|
||||||
|
|
||||||
public final class ConstantsConstructor {
|
|
||||||
public static final AxisAlignedBB HEAD_NORTH_AABB = RenderUtils.getBounds(2, 2, 0, 14, 14, 2);
|
|
||||||
public static final AxisAlignedBB HEAD_EAST_AABB = RenderUtils.getBounds(14, 2, 2, 16, 14, 14);
|
|
||||||
public static final AxisAlignedBB HEAD_SOUTH_AABB = RenderUtils.getBounds(2, 2, 14, 14, 14, 16);
|
|
||||||
public static final AxisAlignedBB HEAD_WEST_AABB = RenderUtils.getBounds(0, 2, 2, 2, 14, 14);
|
|
||||||
public static final AxisAlignedBB HEAD_DOWN_AABB = RenderUtils.getBounds(2, 0, 2, 14, 2, 14);
|
|
||||||
public static final AxisAlignedBB HEAD_UP_AABB = RenderUtils.getBounds(2, 14, 2, 14, 16, 14);
|
|
||||||
}
|
|
@@ -1,13 +0,0 @@
|
|||||||
package com.raoulvdberge.refinedstorage.render.constants;
|
|
||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.util.RenderUtils;
|
|
||||||
import net.minecraft.util.math.AxisAlignedBB;
|
|
||||||
|
|
||||||
public final class ConstantsExternalStorage {
|
|
||||||
public static final AxisAlignedBB HEAD_NORTH_AABB = RenderUtils.getBounds(3, 3, 0, 13, 13, 2);
|
|
||||||
public static final AxisAlignedBB HEAD_EAST_AABB = RenderUtils.getBounds(14, 3, 3, 16, 13, 13);
|
|
||||||
public static final AxisAlignedBB HEAD_SOUTH_AABB = RenderUtils.getBounds(3, 3, 14, 13, 13, 16);
|
|
||||||
public static final AxisAlignedBB HEAD_WEST_AABB = RenderUtils.getBounds(0, 3, 3, 2, 13, 13);
|
|
||||||
public static final AxisAlignedBB HEAD_UP_AABB = RenderUtils.getBounds(3, 14, 3, 13, 16, 13);
|
|
||||||
public static final AxisAlignedBB HEAD_DOWN_AABB = RenderUtils.getBounds(3, 0, 3, 13, 2, 13);
|
|
||||||
}
|
|
@@ -5,7 +5,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.network.node.cover.Cover;
|
|||||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.cover.CoverManager;
|
import com.raoulvdberge.refinedstorage.apiimpl.network.node.cover.CoverManager;
|
||||||
import com.raoulvdberge.refinedstorage.block.BlockCable;
|
import com.raoulvdberge.refinedstorage.block.BlockCable;
|
||||||
import com.raoulvdberge.refinedstorage.render.CubeBuilder;
|
import com.raoulvdberge.refinedstorage.render.CubeBuilder;
|
||||||
import com.raoulvdberge.refinedstorage.render.constants.ConstantsCable;
|
import com.raoulvdberge.refinedstorage.render.collision.constants.ConstantsCable;
|
||||||
import com.raoulvdberge.refinedstorage.util.RenderUtils;
|
import com.raoulvdberge.refinedstorage.util.RenderUtils;
|
||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
|
@@ -17,16 +17,11 @@ import net.minecraft.client.renderer.texture.TextureMap;
|
|||||||
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
|
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
|
||||||
import net.minecraft.client.renderer.vertex.VertexFormat;
|
import net.minecraft.client.renderer.vertex.VertexFormat;
|
||||||
import net.minecraft.client.util.ITooltipFlag;
|
import net.minecraft.client.util.ITooltipFlag;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
|
||||||
import net.minecraft.entity.player.EntityPlayerMP;
|
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.BlockRenderLayer;
|
import net.minecraft.util.BlockRenderLayer;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraft.util.math.AxisAlignedBB;
|
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.util.text.TextFormatting;
|
import net.minecraft.util.text.TextFormatting;
|
||||||
import net.minecraftforge.client.ForgeHooksClient;
|
import net.minecraftforge.client.ForgeHooksClient;
|
||||||
import net.minecraftforge.client.MinecraftForgeClient;
|
import net.minecraftforge.client.MinecraftForgeClient;
|
||||||
@@ -44,7 +39,6 @@ import net.minecraftforge.fml.relauncher.SideOnly;
|
|||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import javax.vecmath.Matrix4f;
|
import javax.vecmath.Matrix4f;
|
||||||
import javax.vecmath.Vector3f;
|
import javax.vecmath.Vector3f;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@@ -68,19 +62,6 @@ public final class RenderUtils {
|
|||||||
return hitX >= aabb.minX && hitX <= aabb.maxX && hitY >= aabb.minY && hitY <= aabb.maxY && hitZ >= aabb.minZ && hitZ <= aabb.maxZ;
|
return hitX >= aabb.minX && hitX <= aabb.maxX && hitY >= aabb.minY && hitY <= aabb.maxY && hitZ >= aabb.minZ && hitZ <= aabb.maxZ;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Vec3d getStart(EntityPlayer player) {
|
|
||||||
return new Vec3d(player.posX, player.posY + player.getEyeHeight(), player.posZ);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Vec3d getEnd(EntityPlayer player) {
|
|
||||||
double reachDistance = player instanceof EntityPlayerMP ? player.getEntityAttribute(EntityPlayer.REACH_DISTANCE).getAttributeValue() : (player.capabilities.isCreativeMode ? 5.0D : 4.5D);
|
|
||||||
|
|
||||||
Vec3d lookVec = player.getLookVec();
|
|
||||||
Vec3d start = getStart(player);
|
|
||||||
|
|
||||||
return start.addVector(lookVec.x * reachDistance, lookVec.y * reachDistance, lookVec.z * reachDistance);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String shorten(String text, int length) {
|
public static String shorten(String text, int length) {
|
||||||
if (text.length() > length) {
|
if (text.length() > length) {
|
||||||
text = text.substring(0, length) + "...";
|
text = text.substring(0, length) + "...";
|
||||||
@@ -88,42 +69,6 @@ public final class RenderUtils {
|
|||||||
return text;
|
return text;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static AdvancedRayTraceResult collisionRayTrace(BlockPos pos, Vec3d start, Vec3d end, Collection<AxisAlignedBB> boxes) {
|
|
||||||
double minDistance = Double.POSITIVE_INFINITY;
|
|
||||||
AdvancedRayTraceResult hit = null;
|
|
||||||
int i = -1;
|
|
||||||
|
|
||||||
for (AxisAlignedBB aabb : boxes) {
|
|
||||||
AdvancedRayTraceResult result = aabb == null ? null : collisionRayTrace(pos, start, end, aabb, i, null);
|
|
||||||
|
|
||||||
if (result != null) {
|
|
||||||
double d = result.squareDistanceTo(start);
|
|
||||||
if (d < minDistance) {
|
|
||||||
minDistance = d;
|
|
||||||
hit = result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return hit;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static AdvancedRayTraceResult collisionRayTrace(BlockPos pos, Vec3d start, Vec3d end, AxisAlignedBB bounds, int subHit, Object hitInfo) {
|
|
||||||
RayTraceResult result = bounds.offset(pos).calculateIntercept(start, end);
|
|
||||||
|
|
||||||
if (result == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
result = new RayTraceResult(RayTraceResult.Type.BLOCK, result.hitVec, result.sideHit, pos);
|
|
||||||
result.subHit = subHit;
|
|
||||||
result.hitInfo = hitInfo;
|
|
||||||
|
|
||||||
return new AdvancedRayTraceResult(result, bounds);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void setGLColorFromInt(int color) {
|
private static void setGLColorFromInt(int color) {
|
||||||
float red = (color >> 16 & 0xFF) / 255.0F;
|
float red = (color >> 16 & 0xFF) / 255.0F;
|
||||||
float green = (color >> 8 & 0xFF) / 255.0F;
|
float green = (color >> 8 & 0xFF) / 255.0F;
|
||||||
@@ -203,31 +148,6 @@ public final class RenderUtils {
|
|||||||
return (int) multiplier;
|
return (int) multiplier;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class AdvancedRayTraceResultBase<T extends RayTraceResult> {
|
|
||||||
public final AxisAlignedBB bounds;
|
|
||||||
public final T hit;
|
|
||||||
|
|
||||||
public AdvancedRayTraceResultBase(T mop, AxisAlignedBB bounds) {
|
|
||||||
|
|
||||||
this.hit = mop;
|
|
||||||
this.bounds = bounds;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean valid() {
|
|
||||||
return hit != null && bounds != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public double squareDistanceTo(Vec3d vec) {
|
|
||||||
return hit.hitVec.squareDistanceTo(vec);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class AdvancedRayTraceResult extends AdvancedRayTraceResultBase<RayTraceResult> {
|
|
||||||
public AdvancedRayTraceResult(RayTraceResult mop, AxisAlignedBB bounds) {
|
|
||||||
super(mop, bounds);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class FluidRenderer {
|
public static class FluidRenderer {
|
||||||
private static final int TEX_WIDTH = 16;
|
private static final int TEX_WIDTH = 16;
|
||||||
private static final int TEX_HEIGHT = 16;
|
private static final int TEX_HEIGHT = 16;
|
||||||
|
Reference in New Issue
Block a user