Fixed occlusion not working on other side, should fix dependency issue as well
This commit is contained in:
@@ -3,6 +3,7 @@ package com.raoulvdberge.refinedstorage.apiimpl.network.node;
|
|||||||
import com.raoulvdberge.refinedstorage.RS;
|
import com.raoulvdberge.refinedstorage.RS;
|
||||||
import com.raoulvdberge.refinedstorage.block.BlockCable;
|
import com.raoulvdberge.refinedstorage.block.BlockCable;
|
||||||
import com.raoulvdberge.refinedstorage.integration.mcmp.IntegrationMCMP;
|
import com.raoulvdberge.refinedstorage.integration.mcmp.IntegrationMCMP;
|
||||||
|
import com.raoulvdberge.refinedstorage.integration.mcmp.RSMCMPAddon;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
@@ -27,6 +28,11 @@ public class NetworkNodeCable extends NetworkNode {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canConduct(@Nullable EnumFacing direction) {
|
public boolean canConduct(@Nullable EnumFacing direction) {
|
||||||
return !IntegrationMCMP.isLoaded() || IntegrationMCMP.hasConnectionWith(holder.world(), holder.pos(), Collections.singletonList(BlockCable.directionToAABB(direction)));
|
if (IntegrationMCMP.isLoaded() && direction != null) {
|
||||||
|
return RSMCMPAddon.hasConnectionWith(holder.world(), holder.pos(), Collections.singletonList(BlockCable.directionToAABB(direction)))
|
||||||
|
&& RSMCMPAddon.hasConnectionWith(holder.world(), holder.pos().offset(direction), Collections.singletonList(BlockCable.directionToAABB(direction.getOpposite())));
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -2,6 +2,7 @@ package com.raoulvdberge.refinedstorage.block;
|
|||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.RSUtils;
|
import com.raoulvdberge.refinedstorage.RSUtils;
|
||||||
import com.raoulvdberge.refinedstorage.integration.mcmp.IntegrationMCMP;
|
import com.raoulvdberge.refinedstorage.integration.mcmp.IntegrationMCMP;
|
||||||
|
import com.raoulvdberge.refinedstorage.integration.mcmp.RSMCMPAddon;
|
||||||
import com.raoulvdberge.refinedstorage.proxy.CapabilityNetworkNodeProxy;
|
import com.raoulvdberge.refinedstorage.proxy.CapabilityNetworkNodeProxy;
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileCable;
|
import com.raoulvdberge.refinedstorage.tile.TileCable;
|
||||||
import net.minecraft.block.properties.PropertyBool;
|
import net.minecraft.block.properties.PropertyBool;
|
||||||
@@ -95,7 +96,12 @@ public class BlockCable extends BlockNode {
|
|||||||
EnumFacing otherTileSide = direction.getOpposite();
|
EnumFacing otherTileSide = direction.getOpposite();
|
||||||
|
|
||||||
if (otherTile != null && otherTile.hasCapability(CapabilityNetworkNodeProxy.NETWORK_NODE_PROXY_CAPABILITY, otherTileSide)) {
|
if (otherTile != null && otherTile.hasCapability(CapabilityNetworkNodeProxy.NETWORK_NODE_PROXY_CAPABILITY, otherTileSide)) {
|
||||||
return !IntegrationMCMP.isLoaded() || IntegrationMCMP.hasConnectionWith(world, pos, Collections.singletonList(directionToAABB(direction)));
|
if (IntegrationMCMP.isLoaded()) {
|
||||||
|
return RSMCMPAddon.hasConnectionWith(world, pos, Collections.singletonList(BlockCable.directionToAABB(direction)))
|
||||||
|
&& RSMCMPAddon.hasConnectionWith(world, pos.offset(direction), Collections.singletonList(BlockCable.directionToAABB(direction.getOpposite())));
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@@ -1,88 +1,8 @@
|
|||||||
package com.raoulvdberge.refinedstorage.integration.mcmp;
|
package com.raoulvdberge.refinedstorage.integration.mcmp;
|
||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.RSBlocks;
|
|
||||||
import mcmultipart.api.addon.IMCMPAddon;
|
|
||||||
import mcmultipart.api.addon.MCMPAddon;
|
|
||||||
import mcmultipart.api.container.IPartInfo;
|
|
||||||
import mcmultipart.api.multipart.IMultipart;
|
|
||||||
import mcmultipart.api.multipart.IMultipartRegistry;
|
|
||||||
import mcmultipart.api.multipart.IMultipartTile;
|
|
||||||
import mcmultipart.api.multipart.MultipartOcclusionHelper;
|
|
||||||
import mcmultipart.api.ref.MCMPCapabilities;
|
|
||||||
import net.minecraft.item.Item;
|
|
||||||
import net.minecraft.tileentity.TileEntity;
|
|
||||||
import net.minecraft.util.EnumFacing;
|
|
||||||
import net.minecraft.util.ResourceLocation;
|
|
||||||
import net.minecraft.util.math.AxisAlignedBB;
|
|
||||||
import net.minecraft.util.math.BlockPos;
|
|
||||||
import net.minecraft.world.IBlockAccess;
|
|
||||||
import net.minecraftforge.common.MinecraftForge;
|
|
||||||
import net.minecraftforge.common.capabilities.Capability;
|
|
||||||
import net.minecraftforge.common.capabilities.ICapabilityProvider;
|
|
||||||
import net.minecraftforge.event.AttachCapabilitiesEvent;
|
|
||||||
import net.minecraftforge.fml.common.Loader;
|
import net.minecraftforge.fml.common.Loader;
|
||||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@MCMPAddon
|
|
||||||
public class IntegrationMCMP implements IMCMPAddon {
|
|
||||||
@Override
|
|
||||||
public void registerParts(IMultipartRegistry registry) {
|
|
||||||
MinecraftForge.EVENT_BUS.register(this);
|
|
||||||
|
|
||||||
registry.registerPartWrapper(RSBlocks.CABLE, new PartCable());
|
|
||||||
registry.registerStackWrapper(Item.getItemFromBlock(RSBlocks.CABLE), s -> true, RSBlocks.CABLE);
|
|
||||||
}
|
|
||||||
|
|
||||||
@SubscribeEvent
|
|
||||||
public void onAttachCapability(AttachCapabilitiesEvent<TileEntity> e) {
|
|
||||||
e.addCapability(new ResourceLocation("refinedstorage:cable"), new ICapabilityProvider() {
|
|
||||||
private PartCableTile tile;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing) {
|
|
||||||
return capability == MCMPCapabilities.MULTIPART_TILE;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
@Override
|
|
||||||
public <T> T getCapability(@Nonnull Capability<T> capability, @Nullable EnumFacing facing) {
|
|
||||||
if (capability == MCMPCapabilities.MULTIPART_TILE) {
|
|
||||||
if (tile == null) {
|
|
||||||
tile = new PartCableTile(e.getObject());
|
|
||||||
}
|
|
||||||
|
|
||||||
return MCMPCapabilities.MULTIPART_TILE.cast(tile);
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean hasConnectionWith(IBlockAccess world, BlockPos pos, List<AxisAlignedBB> aabbs) {
|
|
||||||
TileEntity tile = world.getTileEntity(pos);
|
|
||||||
|
|
||||||
if (tile != null && tile.hasCapability(MCMPCapabilities.MULTIPART_TILE, null)) {
|
|
||||||
IMultipartTile multipartTile = tile.getCapability(MCMPCapabilities.MULTIPART_TILE, null);
|
|
||||||
|
|
||||||
if (multipartTile instanceof PartCableTile && ((PartCableTile) multipartTile).getInfo() != null) {
|
|
||||||
for (IPartInfo info : ((PartCableTile) multipartTile).getInfo().getContainer().getParts().values()) {
|
|
||||||
IMultipart multipart = info.getPart();
|
|
||||||
|
|
||||||
if (MultipartOcclusionHelper.testBoxIntersection(aabbs, multipart.getOcclusionBoxes(info))) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
public final class IntegrationMCMP {
|
||||||
public static boolean isLoaded() {
|
public static boolean isLoaded() {
|
||||||
return Loader.isModLoaded("mcmultipart");
|
return Loader.isModLoaded("mcmultipart");
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,84 @@
|
|||||||
|
package com.raoulvdberge.refinedstorage.integration.mcmp;
|
||||||
|
|
||||||
|
import com.raoulvdberge.refinedstorage.RSBlocks;
|
||||||
|
import mcmultipart.api.addon.IMCMPAddon;
|
||||||
|
import mcmultipart.api.addon.MCMPAddon;
|
||||||
|
import mcmultipart.api.container.IPartInfo;
|
||||||
|
import mcmultipart.api.multipart.IMultipart;
|
||||||
|
import mcmultipart.api.multipart.IMultipartRegistry;
|
||||||
|
import mcmultipart.api.multipart.IMultipartTile;
|
||||||
|
import mcmultipart.api.multipart.MultipartOcclusionHelper;
|
||||||
|
import mcmultipart.api.ref.MCMPCapabilities;
|
||||||
|
import net.minecraft.item.Item;
|
||||||
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraft.util.EnumFacing;
|
||||||
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
import net.minecraft.util.math.AxisAlignedBB;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.world.IBlockAccess;
|
||||||
|
import net.minecraftforge.common.MinecraftForge;
|
||||||
|
import net.minecraftforge.common.capabilities.Capability;
|
||||||
|
import net.minecraftforge.common.capabilities.ICapabilityProvider;
|
||||||
|
import net.minecraftforge.event.AttachCapabilitiesEvent;
|
||||||
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@MCMPAddon
|
||||||
|
public class RSMCMPAddon implements IMCMPAddon {
|
||||||
|
@Override
|
||||||
|
public void registerParts(IMultipartRegistry registry) {
|
||||||
|
MinecraftForge.EVENT_BUS.register(this);
|
||||||
|
|
||||||
|
registry.registerPartWrapper(RSBlocks.CABLE, new PartCable());
|
||||||
|
registry.registerStackWrapper(Item.getItemFromBlock(RSBlocks.CABLE), s -> true, RSBlocks.CABLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
|
public void onAttachCapability(AttachCapabilitiesEvent<TileEntity> e) {
|
||||||
|
e.addCapability(new ResourceLocation("refinedstorage:cable"), new ICapabilityProvider() {
|
||||||
|
private PartCableTile tile;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing) {
|
||||||
|
return capability == MCMPCapabilities.MULTIPART_TILE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public <T> T getCapability(@Nonnull Capability<T> capability, @Nullable EnumFacing facing) {
|
||||||
|
if (capability == MCMPCapabilities.MULTIPART_TILE) {
|
||||||
|
if (tile == null) {
|
||||||
|
tile = new PartCableTile(e.getObject());
|
||||||
|
}
|
||||||
|
|
||||||
|
return MCMPCapabilities.MULTIPART_TILE.cast(tile);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean hasConnectionWith(IBlockAccess world, BlockPos pos, List<AxisAlignedBB> aabbs) {
|
||||||
|
TileEntity tile = world.getTileEntity(pos);
|
||||||
|
|
||||||
|
if (tile != null && tile.hasCapability(MCMPCapabilities.MULTIPART_TILE, null)) {
|
||||||
|
IMultipartTile multipartTile = tile.getCapability(MCMPCapabilities.MULTIPART_TILE, null);
|
||||||
|
|
||||||
|
if (multipartTile instanceof PartCableTile && ((PartCableTile) multipartTile).getInfo() != null) {
|
||||||
|
for (IPartInfo info : ((PartCableTile) multipartTile).getInfo().getContainer().getParts().values()) {
|
||||||
|
IMultipart multipart = info.getPart();
|
||||||
|
|
||||||
|
if (MultipartOcclusionHelper.testBoxIntersection(aabbs, multipart.getOcclusionBoxes(info))) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user