diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockBase.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockBase.java index d2d611c19..e17a42e9c 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockBase.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockBase.java @@ -6,12 +6,10 @@ import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode; import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeProxy; import com.raoulvdberge.refinedstorage.api.network.security.Permission; import com.raoulvdberge.refinedstorage.integration.mcmp.IntegrationMCMP; +import com.raoulvdberge.refinedstorage.integration.mcmp.RSMCMPAddon; import com.raoulvdberge.refinedstorage.item.ItemBlockBase; import com.raoulvdberge.refinedstorage.proxy.CapabilityNetworkNodeProxy; import com.raoulvdberge.refinedstorage.tile.TileBase; -import mcmultipart.api.multipart.IMultipartTile; -import mcmultipart.api.slot.EnumCenterSlot; -import mcmultipart.block.TileMultipartContainer; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyDirection; @@ -29,8 +27,6 @@ import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.items.IItemHandler; -import java.util.Optional; - public abstract class BlockBase extends Block { public static final PropertyDirection DIRECTION = PropertyDirection.create("direction"); @@ -85,16 +81,10 @@ public abstract class BlockBase extends Block { @SuppressWarnings("deprecation") public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos) { if (getPlacementType() != null) { - TileEntity tile = world.getTileEntity(pos); + TileEntity tile = IntegrationMCMP.isLoaded() ? RSMCMPAddon.unwrapTile(world, pos) : world.getTileEntity(pos); if (tile instanceof TileBase) { return state.withProperty(DIRECTION, ((TileBase) tile).getDirection()); - } else if (IntegrationMCMP.isLoaded() && tile instanceof TileMultipartContainer.Ticking) { - Optional multipartTile = ((TileMultipartContainer.Ticking) tile).getPartTile(EnumCenterSlot.CENTER); - - if (multipartTile.isPresent()) { - return state.withProperty(DIRECTION, ((TileBase) multipartTile.get().getTileEntity()).getDirection()); - } } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockCable.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockCable.java index 9c21a013d..237c54f09 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockCable.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockCable.java @@ -79,7 +79,7 @@ public class BlockCable extends BlockNode { @Override @SuppressWarnings("deprecation") public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos) { - TileNode tile = getNode(world, pos); + TileEntity tile = IntegrationMCMP.isLoaded() ? RSMCMPAddon.unwrapTile(world, pos) : world.getTileEntity(pos); state = super.getActualState(state, world, pos) .withProperty(NORTH, hasConnectionWith(world, pos, tile, EnumFacing.NORTH)) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockNode.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockNode.java index bca06abbd..a9207d806 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockNode.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockNode.java @@ -4,10 +4,8 @@ import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode; import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeManager; import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.integration.mcmp.IntegrationMCMP; +import com.raoulvdberge.refinedstorage.integration.mcmp.RSMCMPAddon; import com.raoulvdberge.refinedstorage.tile.TileNode; -import mcmultipart.api.multipart.IMultipartTile; -import mcmultipart.api.slot.EnumCenterSlot; -import mcmultipart.block.TileMultipartContainer; import net.minecraft.block.properties.PropertyBool; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; @@ -19,9 +17,6 @@ import net.minecraft.world.Explosion; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; -import javax.annotation.Nullable; -import java.util.Optional; - public abstract class BlockNode extends BlockBase { public static final String NBT_REFINED_STORAGE_DATA = "RefinedStorageData"; @@ -107,10 +102,10 @@ public abstract class BlockNode extends BlockBase { state = super.getActualState(state, world, pos); if (hasConnectivityState()) { - TileNode tile = getNode(world, pos); + TileEntity tile = IntegrationMCMP.isLoaded() ? RSMCMPAddon.unwrapTile(world, pos) : world.getTileEntity(pos); - if (tile != null) { - return state.withProperty(CONNECTED, tile.getNode().isActive()); + if (tile instanceof TileNode) { + return state.withProperty(CONNECTED, ((TileNode) tile).getNode().isActive()); } } @@ -120,21 +115,4 @@ public abstract class BlockNode extends BlockBase { public boolean hasConnectivityState() { return false; } - - @Nullable - public static TileNode getNode(IBlockAccess world, BlockPos pos) { - TileEntity tile = world.getTileEntity(pos); - - if (tile instanceof TileNode) { - return (TileNode) tile; - } else if (IntegrationMCMP.isLoaded() && tile instanceof TileMultipartContainer.Ticking) { - Optional multipartTile = ((TileMultipartContainer.Ticking) tile).getPartTile(EnumCenterSlot.CENTER); - - if (multipartTile.isPresent()) { - return (TileNode) multipartTile.get().getTileEntity(); - } - } - - return null; - } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java index c6d8f2f6d..3ce1e34a6 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java @@ -8,6 +8,7 @@ import com.raoulvdberge.refinedstorage.container.*; import com.raoulvdberge.refinedstorage.gui.grid.GridDisplayDummy; import com.raoulvdberge.refinedstorage.gui.grid.GuiGrid; import com.raoulvdberge.refinedstorage.integration.mcmp.IntegrationMCMP; +import com.raoulvdberge.refinedstorage.integration.mcmp.RSMCMPAddon; import com.raoulvdberge.refinedstorage.tile.*; import com.raoulvdberge.refinedstorage.tile.craftingmonitor.TileCraftingMonitor; import com.raoulvdberge.refinedstorage.tile.craftingmonitor.WirelessCraftingMonitor; @@ -15,9 +16,6 @@ import com.raoulvdberge.refinedstorage.tile.grid.IGrid; import com.raoulvdberge.refinedstorage.tile.grid.TileGrid; import com.raoulvdberge.refinedstorage.tile.grid.WirelessFluidGrid; import com.raoulvdberge.refinedstorage.tile.grid.WirelessGrid; -import mcmultipart.api.multipart.IMultipartTile; -import mcmultipart.api.slot.EnumCenterSlot; -import mcmultipart.block.TileMultipartContainer; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; @@ -27,8 +25,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.fml.common.network.IGuiHandler; -import java.util.Optional; - public class GuiHandler implements IGuiHandler { private Container getContainer(int ID, EntityPlayer player, TileEntity tile) { switch (ID) { @@ -95,24 +91,12 @@ public class GuiHandler implements IGuiHandler { return getWirelessCraftingMonitorContainer(player, x, y); } - return getContainer(ID, player, unwrapMultipart(world.getTileEntity(new BlockPos(x, y, z)))); - } - - private TileEntity unwrapMultipart(TileEntity tile) { - if (IntegrationMCMP.isLoaded() && tile instanceof TileMultipartContainer.Ticking) { - Optional multipartTile = ((TileMultipartContainer.Ticking) tile).getPartTile(EnumCenterSlot.CENTER); - - if (multipartTile.isPresent()) { - return multipartTile.get().getTileEntity(); - } - } - - return tile; + return getContainer(ID, player, IntegrationMCMP.isLoaded() ? RSMCMPAddon.unwrapTile(world, new BlockPos(x, y, z)) : world.getTileEntity(new BlockPos(x, y, z))); } @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { - TileEntity tile = unwrapMultipart(world.getTileEntity(new BlockPos(x, y, z))); + TileEntity tile = IntegrationMCMP.isLoaded() ? RSMCMPAddon.unwrapTile(world, new BlockPos(x, y, z)) : world.getTileEntity(new BlockPos(x, y, z)); switch (ID) { case RSGui.CONTROLLER: diff --git a/src/main/java/com/raoulvdberge/refinedstorage/integration/mcmp/RSMCMPAddon.java b/src/main/java/com/raoulvdberge/refinedstorage/integration/mcmp/RSMCMPAddon.java index d472464ca..3c13d479a 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/integration/mcmp/RSMCMPAddon.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/integration/mcmp/RSMCMPAddon.java @@ -10,11 +10,18 @@ import mcmultipart.api.multipart.IMultipartRegistry; import mcmultipart.api.multipart.IMultipartTile; import mcmultipart.api.multipart.MultipartOcclusionHelper; import mcmultipart.api.ref.MCMPCapabilities; +import mcmultipart.api.slot.EnumCenterSlot; +import mcmultipart.block.BlockMultipartContainer; +import mcmultipart.block.TileMultipartContainer; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; 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; @@ -24,6 +31,7 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.List; +import java.util.Optional; @MCMPAddon public class RSMCMPAddon implements IMCMPAddon { @@ -100,4 +108,37 @@ public class RSMCMPAddon implements IMCMPAddon { return true; } + + @Nullable + public static TileEntity unwrapTile(IBlockAccess world, BlockPos pos) { + TileEntity tile = world.getTileEntity(pos); + + if (tile instanceof TileMultipartContainer.Ticking) { + Optional multipartTile = ((TileMultipartContainer.Ticking) tile).getPartTile(EnumCenterSlot.CENTER); + + if (multipartTile.isPresent()) { + return multipartTile.get().getTileEntity(); + } + } + + return tile; + } + + public static Block unwrapBlock(IBlockAccess world, BlockPos pos) { + IBlockState state = world.getBlockState(pos); + + if (state.getBlock() instanceof BlockMultipartContainer) { + Optional multipartContainer = BlockMultipartContainer.getTile(world, pos); + + if (multipartContainer.isPresent()) { + Optional info = multipartContainer.get().get(EnumCenterSlot.CENTER); + + if (info.isPresent()) { + return info.get().getPart().getBlock(); + } + } + } + + return state.getBlock(); + } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java index 35526ca84..807905d12 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java @@ -9,6 +9,7 @@ import com.raoulvdberge.refinedstorage.block.*; import com.raoulvdberge.refinedstorage.gui.GuiCraftingPreview; import com.raoulvdberge.refinedstorage.gui.grid.GuiCraftingStart; import com.raoulvdberge.refinedstorage.integration.mcmp.IntegrationMCMP; +import com.raoulvdberge.refinedstorage.integration.mcmp.RSMCMPAddon; import com.raoulvdberge.refinedstorage.item.*; import com.raoulvdberge.refinedstorage.network.MessageGridCraftingPreviewResponse; import com.raoulvdberge.refinedstorage.render.BakedModelPattern; @@ -17,10 +18,6 @@ import com.raoulvdberge.refinedstorage.render.ModelDiskManipulator; import com.raoulvdberge.refinedstorage.render.TileEntitySpecialRendererStorageMonitor; import com.raoulvdberge.refinedstorage.tile.TileController; import com.raoulvdberge.refinedstorage.tile.TileStorageMonitor; -import mcmultipart.api.container.IPartInfo; -import mcmultipart.api.slot.EnumCenterSlot; -import mcmultipart.block.BlockMultipartContainer; -import mcmultipart.block.TileMultipartContainer; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.client.Minecraft; @@ -56,7 +53,6 @@ import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import java.util.List; -import java.util.Optional; public class ProxyClient extends ProxyCommon { @Override @@ -274,7 +270,7 @@ public class ProxyClient extends ProxyCommon { CraftingPattern pattern = ItemPattern.getPatternFromCache(Minecraft.getMinecraft().world, stack); if (BakedModelPattern.canDisplayPatternOutput(pattern) && - mcColors.getColorFromItemstack(pattern.getOutputs().get(0), tintIndex) != -1) { + mcColors.getColorFromItemstack(pattern.getOutputs().get(0), tintIndex) != -1) { return mcColors.getColorFromItemstack(pattern.getOutputs().get(0), tintIndex); // Take the item } @@ -324,33 +320,15 @@ public class ProxyClient extends ProxyCommon { BlockPos pos = e.getTarget().getBlockPos(); - IBlockState state = player.getEntityWorld().getBlockState(pos); + Block block = IntegrationMCMP.isLoaded() ? RSMCMPAddon.unwrapBlock(player.getEntityWorld(), pos) : player.getEntityWorld().getBlockState(pos).getBlock(); - BlockCable cable = null; - - if (state.getBlock() instanceof BlockCable) { - cable = (BlockCable) state.getBlock(); - } else if (IntegrationMCMP.isLoaded() && state.getBlock() instanceof BlockMultipartContainer) { - Optional multipartContainer = BlockMultipartContainer.getTile(player.getEntityWorld(), pos); - - if (multipartContainer.isPresent()) { - Optional info = multipartContainer.get().get(EnumCenterSlot.CENTER); - - if (info.isPresent()) { - Block block = info.get().getPart().getBlock(); - - if (block instanceof BlockCable) { - cable = (BlockCable) block; - } - } - } - } - - if (cable == null) { + if (!(block instanceof BlockCable)) { return; } - state = cable.getActualStateForRendering(player.getEntityWorld(), pos); + BlockCable cable = (BlockCable) block; + + IBlockState state = cable.getActualStateForRendering(player.getEntityWorld(), pos); if (cable.collisionRayTrace(state, player.getEntityWorld(), pos, RSUtils.getStart(player), RSUtils.getEnd(player)) == null) { return;