diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCable.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCable.java index bb294fe2d..5ed76f2a0 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCable.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCable.java @@ -16,7 +16,7 @@ public class NetworkNodeCable extends NetworkNode implements ICoverable { private static final String NBT_COVERS = "Covers"; - private CoverManager coverManager = new CoverManager(this, CoverManager.CoverPlacementMode.ANY); + private CoverManager coverManager = new CoverManager(this); public NetworkNodeCable(World world, BlockPos pos) { super(world, pos); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeConstructor.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeConstructor.java index 18135dde2..30f9ee8fa 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeConstructor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeConstructor.java @@ -67,7 +67,7 @@ public class NetworkNodeConstructor extends NetworkNode implements IComparable, private int type = IType.ITEMS; private boolean drop = false; - private CoverManager coverManager = new CoverManager(this, CoverManager.CoverPlacementMode.HOLLOW_LARGE_ON_FACE); + private CoverManager coverManager = new CoverManager(this); public NetworkNodeConstructor(World world, BlockPos pos) { super(world, pos); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeDestructor.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeDestructor.java index dc06e47c9..e5dcd0481 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeDestructor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeDestructor.java @@ -73,7 +73,7 @@ public class NetworkNodeDestructor extends NetworkNode implements IComparable, I private int type = IType.ITEMS; private boolean pickupItem = false; - private CoverManager coverManager = new CoverManager(this, CoverManager.CoverPlacementMode.HOLLOW_LARGE_ON_FACE); + private CoverManager coverManager = new CoverManager(this); public NetworkNodeDestructor(World world, BlockPos pos) { super(world, pos); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeExporter.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeExporter.java index 824bbdadb..a3c4e0ecd 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeExporter.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeExporter.java @@ -44,7 +44,7 @@ public class NetworkNodeExporter extends NetworkNode implements IComparable, ITy private int compare = IComparer.COMPARE_NBT | IComparer.COMPARE_DAMAGE; private int type = IType.ITEMS; - private CoverManager coverManager = new CoverManager(this, CoverManager.CoverPlacementMode.HOLLOW_ON_FACE); + private CoverManager coverManager = new CoverManager(this); private int filterSlot; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeExternalStorage.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeExternalStorage.java index d5d50c55b..b08937485 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeExternalStorage.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeExternalStorage.java @@ -56,7 +56,7 @@ public class NetworkNodeExternalStorage extends NetworkNode implements IStorageP private AccessType accessType = AccessType.INSERT_EXTRACT; private int networkTicks; - private CoverManager coverManager = new CoverManager(this, CoverManager.CoverPlacementMode.HOLLOW_MEDIUM_ON_FACE); + private CoverManager coverManager = new CoverManager(this); private List> itemStorages = new CopyOnWriteArrayList<>(); private List> fluidStorages = new CopyOnWriteArrayList<>(); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeImporter.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeImporter.java index 13d04f1a3..c0e6b0acb 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeImporter.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeImporter.java @@ -49,7 +49,7 @@ public class NetworkNodeImporter extends NetworkNode implements IComparable, IFi private int mode = IFilterable.BLACKLIST; private int type = IType.ITEMS; - private CoverManager coverManager = new CoverManager(this, CoverManager.CoverPlacementMode.HOLLOW_MEDIUM_ON_FACE); + private CoverManager coverManager = new CoverManager(this); private int currentSlot; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeReader.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeReader.java index 8e5f7a809..83cd3928a 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeReader.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeReader.java @@ -21,7 +21,7 @@ public class NetworkNodeReader extends NetworkNode implements IReader, IGuiReade private String channel = ""; - private CoverManager coverManager = new CoverManager(this, CoverManager.CoverPlacementMode.HOLLOW_LARGE_ON_FACE); + private CoverManager coverManager = new CoverManager(this); public NetworkNodeReader(World world, BlockPos pos) { super(world, pos); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeWriter.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeWriter.java index 349027294..691dc5372 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeWriter.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeWriter.java @@ -27,7 +27,7 @@ public class NetworkNodeWriter extends NetworkNode implements IWriter, IGuiReade private int redstoneStrength; private int lastRedstoneStrength; - private CoverManager coverManager = new CoverManager(this, CoverManager.CoverPlacementMode.HOLLOW_LARGE_ON_FACE); + private CoverManager coverManager = new CoverManager(this); public NetworkNodeWriter(World world, BlockPos pos) { super(world, pos); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/cover/CoverManager.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/cover/CoverManager.java index 497645c39..c0eaf240a 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/cover/CoverManager.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/cover/CoverManager.java @@ -4,6 +4,7 @@ import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode; import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.apiimpl.network.node.ICoverable; import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNode; +import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeCable; import com.raoulvdberge.refinedstorage.item.ItemCover; import net.minecraft.block.Block; import net.minecraft.block.BlockGlass; @@ -24,29 +25,20 @@ import java.util.HashMap; import java.util.Map; public class CoverManager { - public enum CoverPlacementMode { - ANY, - HOLLOW_ON_FACE, - HOLLOW_MEDIUM_ON_FACE, - HOLLOW_LARGE_ON_FACE - } - private static final String NBT_DIRECTION = "Direction"; private static final String NBT_ITEM = "Item"; private static final String NBT_TYPE = "Type"; private Map covers = new HashMap<>(); private NetworkNode node; - private CoverPlacementMode placementMode; - public CoverManager(NetworkNode node, CoverPlacementMode placementMode) { + public CoverManager(NetworkNode node) { this.node = node; - this.placementMode = placementMode; } public boolean canConduct(EnumFacing direction) { Cover cover = getCover(direction); - if (cover != null && !cover.getType().isHollow()) { + if (cover != null && cover.getType() != CoverType.HOLLOW) { return false; } @@ -54,7 +46,7 @@ public class CoverManager { if (neighbor instanceof ICoverable) { cover = ((ICoverable) neighbor).getCoverManager().getCover(direction.getOpposite()); - if (cover != null && !cover.getType().isHollow()) { + if (cover != null && cover.getType() != CoverType.HOLLOW) { return false; } } @@ -73,19 +65,8 @@ public class CoverManager { public boolean setCover(EnumFacing facing, Cover cover) { if (isValidCover(cover.getStack()) && !hasCover(facing)) { - if (facing == node.getDirection()) { - switch (placementMode) { - case ANY: - break; - case HOLLOW_ON_FACE: - case HOLLOW_MEDIUM_ON_FACE: - case HOLLOW_LARGE_ON_FACE: - if (!cover.getType().isHollow()) { - return false; - } - cover = new Cover(cover.getStack(), placementMode == CoverPlacementMode.HOLLOW_ON_FACE ? CoverType.HOLLOW : (placementMode == CoverPlacementMode.HOLLOW_MEDIUM_ON_FACE ? CoverType.HOLLOW_MEDIUM : CoverType.HOLLOW_LARGE)); - break; - } + if (facing == node.getDirection() && !(node instanceof NetworkNodeCable) && cover.getType() != CoverType.HOLLOW) { + return false; } covers.put(facing, cover); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/cover/CoverType.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/cover/CoverType.java index b60d9279c..20094de9d 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/cover/CoverType.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/cover/CoverType.java @@ -5,13 +5,7 @@ import net.minecraft.item.ItemStack; public enum CoverType { NORMAL, - HOLLOW, - HOLLOW_MEDIUM, - HOLLOW_LARGE; - - public boolean isHollow() { - return this == HOLLOW || this == HOLLOW_MEDIUM || this == HOLLOW_LARGE; - } + HOLLOW; public ItemStack createStack() { return new ItemStack(this == NORMAL ? RSItems.COVER : RSItems.HOLLOW_COVER); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockCable.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockCable.java index b475569f1..c428e31be 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockCable.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockCable.java @@ -4,6 +4,7 @@ import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode; 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.CoverManager; +import com.raoulvdberge.refinedstorage.apiimpl.network.node.cover.CoverType; import com.raoulvdberge.refinedstorage.block.info.BlockInfoBuilder; import com.raoulvdberge.refinedstorage.block.info.IBlockInfo; import com.raoulvdberge.refinedstorage.block.property.PropertyObject; @@ -149,7 +150,7 @@ public class BlockCable extends BlockNode { if (node instanceof ICoverable) { Cover cover = ((ICoverable) node).getCoverManager().getCover(direction); - if (cover != null && !cover.getType().isHollow()) { + if (cover != null && cover.getType() != CoverType.HOLLOW) { return false; } } @@ -159,7 +160,7 @@ public class BlockCable extends BlockNode { if (otherTile instanceof TileNode && ((TileNode) otherTile).getNode() instanceof ICoverable) { Cover cover = ((ICoverable) ((TileNode) otherTile).getNode()).getCoverManager().getCover(direction.getOpposite()); - if (cover != null && !cover.getType().isHollow()) { + if (cover != null && cover.getType() != CoverType.HOLLOW) { return false; } } @@ -244,7 +245,7 @@ public class BlockCable extends BlockNode { coverEast != null ? 14 : 16, coverUp != null ? 14 : 16, 2 ))); - if (!coverNorth.getType().isHollow()) { + if (coverNorth.getType() != CoverType.HOLLOW) { groups.add(ConstantsCable.HOLDER_NORTH); } } @@ -255,7 +256,7 @@ public class BlockCable extends BlockNode { 16, coverUp != null ? 14 : 16, 16 ))); - if (!coverEast.getType().isHollow()) { + if (coverEast.getType() != CoverType.HOLLOW) { groups.add(ConstantsCable.HOLDER_EAST); } } @@ -266,7 +267,7 @@ public class BlockCable extends BlockNode { coverWest != null ? 2 : 0, coverUp != null ? 14 : 16, 14 ))); - if (!coverSouth.getType().isHollow()) { + if (coverSouth.getType() != CoverType.HOLLOW) { groups.add(ConstantsCable.HOLDER_SOUTH); } } @@ -277,7 +278,7 @@ public class BlockCable extends BlockNode { 2, coverUp != null ? 14 : 16, 16 ))); - if (!coverWest.getType().isHollow()) { + if (coverWest.getType() != CoverType.HOLLOW) { groups.add(ConstantsCable.HOLDER_WEST); } } @@ -288,7 +289,7 @@ public class BlockCable extends BlockNode { 16, 16, 16 ))); - if (!coverUp.getType().isHollow()) { + if (coverUp.getType() != CoverType.HOLLOW) { groups.add(ConstantsCable.HOLDER_UP); } } @@ -299,7 +300,7 @@ public class BlockCable extends BlockNode { 16, 2, 16 ))); - if (!coverDown.getType().isHollow()) { + if (coverDown.getType() != CoverType.HOLLOW) { groups.add(ConstantsCable.HOLDER_DOWN); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/render/collision/constants/ConstantsCable.java b/src/main/java/com/raoulvdberge/refinedstorage/render/collision/constants/ConstantsCable.java index aeddd0836..9bb1302ec 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/render/collision/constants/ConstantsCable.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/render/collision/constants/ConstantsCable.java @@ -1,19 +1,20 @@ package com.raoulvdberge.refinedstorage.render.collision.constants; import com.raoulvdberge.refinedstorage.render.collision.CollisionGroup; +import com.raoulvdberge.refinedstorage.util.CollisionUtils; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.AxisAlignedBB; import javax.annotation.Nonnull; public final class ConstantsCable { - public static final CollisionGroup CORE = new CollisionGroup().addItem(getBounds(6, 6, 6, 10, 10, 10)); - public static final CollisionGroup NORTH = new CollisionGroup().addItem(getBounds(6, 6, 0, 10, 10, 6)); - public static final CollisionGroup EAST = new CollisionGroup().addItem(getBounds(10, 6, 6, 16, 10, 10)); - public static final CollisionGroup SOUTH = new CollisionGroup().addItem(getBounds(6, 6, 10, 10, 10, 16)); - public static final CollisionGroup WEST = new CollisionGroup().addItem(getBounds(0, 6, 6, 6, 10, 10)); - public static final CollisionGroup UP = new CollisionGroup().addItem(getBounds(6, 10, 6, 10, 16, 10)); - public static final CollisionGroup DOWN = new CollisionGroup().addItem(getBounds(6, 0, 6, 10, 6, 10)); + public static final CollisionGroup CORE = new CollisionGroup().addItem(CollisionUtils.getBounds(6, 6, 6, 10, 10, 10)); + public static final CollisionGroup NORTH = new CollisionGroup().addItem(CollisionUtils.getBounds(6, 6, 0, 10, 10, 6)); + public static final CollisionGroup EAST = new CollisionGroup().addItem(CollisionUtils.getBounds(10, 6, 6, 16, 10, 10)); + public static final CollisionGroup SOUTH = new CollisionGroup().addItem(CollisionUtils.getBounds(6, 6, 10, 10, 10, 16)); + public static final CollisionGroup WEST = new CollisionGroup().addItem(CollisionUtils.getBounds(0, 6, 6, 6, 10, 10)); + public static final CollisionGroup UP = new CollisionGroup().addItem(CollisionUtils.getBounds(6, 10, 6, 10, 16, 10)); + public static final CollisionGroup DOWN = new CollisionGroup().addItem(CollisionUtils.getBounds(6, 0, 6, 10, 6, 10)); public static final CollisionGroup HOLDER_NORTH = new CollisionGroup().addItem(getHolderBounds(EnumFacing.NORTH)); public static final CollisionGroup HOLDER_EAST = new CollisionGroup().addItem(getHolderBounds(EnumFacing.EAST)); @@ -22,26 +23,21 @@ public final class ConstantsCable { public static final CollisionGroup HOLDER_UP = new CollisionGroup().addItem(getHolderBounds(EnumFacing.UP)); public static final CollisionGroup HOLDER_DOWN = new CollisionGroup().addItem(getHolderBounds(EnumFacing.DOWN)); - - public static AxisAlignedBB getBounds(int fromX, int fromY, int fromZ, int toX, int toY, int toZ) { - return new AxisAlignedBB((float) fromX / 16F, (float) fromY / 16F, (float) fromZ / 16F, (float) toX / 16F, (float) toY / 16F, (float) toZ / 16F); - } - @Nonnull public static AxisAlignedBB getCoverBounds(EnumFacing side) { switch (side) { case DOWN: - return getBounds(0, 0, 0, 16, 2, 16); + return CollisionUtils.getBounds(0, 0, 0, 16, 2, 16); case UP: - return getBounds(0, 14, 0, 16, 16, 16); + return CollisionUtils.getBounds(0, 14, 0, 16, 16, 16); case NORTH: - return getBounds(0, 0, 0, 16, 16, 2); + return CollisionUtils.getBounds(0, 0, 0, 16, 16, 2); case SOUTH: - return getBounds(0, 0, 14, 16, 16, 16); + return CollisionUtils.getBounds(0, 0, 14, 16, 16, 16); case WEST: - return getBounds(0, 0, 0, 2, 16, 16); + return CollisionUtils.getBounds(0, 0, 0, 2, 16, 16); case EAST: - return getBounds(14, 0, 0, 16, 16, 16); + return CollisionUtils.getBounds(14, 0, 0, 16, 16, 16); default: return null; } @@ -51,17 +47,17 @@ public final class ConstantsCable { public static AxisAlignedBB getHolderBounds(EnumFacing side) { switch (side) { case DOWN: - return getBounds(7, 2, 7, 9, 6, 9); + return CollisionUtils.getBounds(7, 2, 7, 9, 6, 9); case UP: - return getBounds(7, 10, 7, 9, 14, 9); + return CollisionUtils.getBounds(7, 10, 7, 9, 14, 9); case NORTH: - return getBounds(7, 7, 2, 9, 9, 6); + return CollisionUtils.getBounds(7, 7, 2, 9, 9, 6); case SOUTH: - return getBounds(7, 7, 10, 9, 9, 14); + return CollisionUtils.getBounds(7, 7, 10, 9, 9, 14); case WEST: - return getBounds(2, 7, 7, 6, 9, 9); + return CollisionUtils.getBounds(2, 7, 7, 6, 9, 9); case EAST: - return getBounds(10, 7, 7, 14, 9, 9); + return CollisionUtils.getBounds(10, 7, 7, 14, 9, 9); default: return null; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/render/model/baked/BakedModelCableCover.java b/src/main/java/com/raoulvdberge/refinedstorage/render/model/baked/BakedModelCableCover.java index ab828b1de..168f6617e 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/render/model/baked/BakedModelCableCover.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/render/model/baked/BakedModelCableCover.java @@ -1,8 +1,10 @@ package com.raoulvdberge.refinedstorage.render.model.baked; import com.raoulvdberge.refinedstorage.RS; +import com.raoulvdberge.refinedstorage.RSBlocks; import com.raoulvdberge.refinedstorage.apiimpl.network.node.cover.Cover; import com.raoulvdberge.refinedstorage.apiimpl.network.node.cover.CoverManager; +import com.raoulvdberge.refinedstorage.block.BlockBase; import com.raoulvdberge.refinedstorage.block.BlockCable; import com.raoulvdberge.refinedstorage.render.CubeBuilder; import com.raoulvdberge.refinedstorage.render.collision.constants.ConstantsCable; @@ -39,26 +41,40 @@ public class BakedModelCableCover implements IBakedModel { List quads = new ArrayList<>(base.getQuads(state, side, rand)); if (state != null) { - IExtendedBlockState s = (IExtendedBlockState) state; + IExtendedBlockState extendedState = (IExtendedBlockState) state; - boolean hasUp = s.getValue(BlockCable.COVER_UP) != null; - boolean hasDown = s.getValue(BlockCable.COVER_DOWN) != null; - - boolean hasEast = s.getValue(BlockCable.COVER_EAST) != null; - boolean hasWest = s.getValue(BlockCable.COVER_WEST) != null; - - addCover(quads, s.getValue(BlockCable.COVER_NORTH), EnumFacing.NORTH, side, rand, hasUp, hasDown, hasEast, hasWest, true); - addCover(quads, s.getValue(BlockCable.COVER_SOUTH), EnumFacing.SOUTH, side, rand, hasUp, hasDown, hasEast, hasWest, true); - addCover(quads, s.getValue(BlockCable.COVER_EAST), EnumFacing.EAST, side, rand, hasUp, hasDown, hasEast, hasWest, true); - addCover(quads, s.getValue(BlockCable.COVER_WEST), EnumFacing.WEST, side, rand, hasUp, hasDown, hasEast, hasWest, true); - addCover(quads, s.getValue(BlockCable.COVER_DOWN), EnumFacing.DOWN, side, rand, hasUp, hasDown, hasEast, hasWest, true); - addCover(quads, s.getValue(BlockCable.COVER_UP), EnumFacing.UP, side, rand, hasUp, hasDown, hasEast, hasWest, true); + addCover(quads, extendedState.getValue(BlockCable.COVER_NORTH), EnumFacing.NORTH, side, rand, extendedState, true); + addCover(quads, extendedState.getValue(BlockCable.COVER_SOUTH), EnumFacing.SOUTH, side, rand, extendedState, true); + addCover(quads, extendedState.getValue(BlockCable.COVER_EAST), EnumFacing.EAST, side, rand, extendedState, true); + addCover(quads, extendedState.getValue(BlockCable.COVER_WEST), EnumFacing.WEST, side, rand, extendedState, true); + addCover(quads, extendedState.getValue(BlockCable.COVER_DOWN), EnumFacing.DOWN, side, rand, extendedState, true); + addCover(quads, extendedState.getValue(BlockCable.COVER_UP), EnumFacing.UP, side, rand, extendedState, true); } return quads; } - protected static void addCover(List quads, @Nullable Cover cover, EnumFacing coverSide, EnumFacing side, long rand, boolean hasUp, boolean hasDown, boolean hasEast, boolean hasWest, boolean handle) { + private static int getHollowCoverSize(@Nullable IBlockState state, EnumFacing coverSide) { + if (state == null) { + return 6; + } + + BlockBase block = (BlockBase) state.getBlock(); + + if (block.getDirection() != null && state.getValue(block.getDirection().getProperty()) == coverSide) { + if (block == RSBlocks.CABLE || block == RSBlocks.EXPORTER) { + return 6; + } else if (block == RSBlocks.EXTERNAL_STORAGE || block == RSBlocks.IMPORTER) { + return 3; + } else if (block == RSBlocks.CONSTRUCTOR || block == RSBlocks.DESTRUCTOR || block == RSBlocks.READER || block == RSBlocks.WRITER) { + return 2; + } + } + + return 6; + } + + protected static void addCover(List quads, @Nullable Cover cover, EnumFacing coverSide, EnumFacing side, long rand, @Nullable IExtendedBlockState state, boolean handle) { if (cover == null) { return; } @@ -69,6 +85,15 @@ public class BakedModelCableCover implements IBakedModel { return; } + boolean hasUp = false, hasDown = false, hasEast = false, hasWest = false; + + if (state != null) { + hasUp = state.getValue(BlockCable.COVER_UP) != null; + hasDown = state.getValue(BlockCable.COVER_DOWN) != null; + hasEast = state.getValue(BlockCable.COVER_EAST) != null; + hasWest = state.getValue(BlockCable.COVER_WEST) != null; + } + TextureAtlasSprite sprite = RenderUtils.getSprite(Minecraft.getMinecraft().getBlockRendererDispatcher().getModelForState(coverState), coverState, side, rand); switch (cover.getType()) { @@ -76,13 +101,7 @@ public class BakedModelCableCover implements IBakedModel { addNormalCover(quads, sprite, coverSide, hasUp, hasDown, hasEast, hasWest, handle); break; case HOLLOW: - addHollowCover(quads, sprite, coverSide, hasUp, hasDown, hasEast, hasWest, 6); - break; - case HOLLOW_MEDIUM: - addHollowCover(quads, sprite, coverSide, hasUp, hasDown, hasEast, hasWest, 3); - break; - case HOLLOW_LARGE: - addHollowCover(quads, sprite, coverSide, hasUp, hasDown, hasEast, hasWest, 2); + addHollowCover(quads, sprite, coverSide, hasUp, hasDown, hasEast, hasWest, getHollowCoverSize(state, coverSide)); break; } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/render/model/baked/BakedModelCover.java b/src/main/java/com/raoulvdberge/refinedstorage/render/model/baked/BakedModelCover.java index e8847e5fe..bc349bdca 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/render/model/baked/BakedModelCover.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/render/model/baked/BakedModelCover.java @@ -72,7 +72,7 @@ public class BakedModelCover extends BakedModelCableCover { public List load(CacheKey key) { List quads = new ArrayList<>(); - addCover(quads, new Cover(key.stack, key.type), EnumFacing.NORTH, key.side, 0, false, false, false, false, false); + addCover(quads, new Cover(key.stack, key.type), EnumFacing.NORTH, key.side, 0, null, false); return quads; }