Fix MCMP loading issues 2k17
This commit is contained in:
@@ -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<IMultipartTile> multipartTile = ((TileMultipartContainer.Ticking) tile).getPartTile(EnumCenterSlot.CENTER);
|
||||
|
||||
if (multipartTile.isPresent()) {
|
||||
return state.withProperty(DIRECTION, ((TileBase) multipartTile.get().getTileEntity()).getDirection());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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<IMultipartTile> multipartTile = ((TileMultipartContainer.Ticking) tile).getPartTile(EnumCenterSlot.CENTER);
|
||||
|
||||
if (multipartTile.isPresent()) {
|
||||
return (TileNode) multipartTile.get().getTileEntity();
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<IMultipartTile> 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:
|
||||
|
||||
@@ -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<IMultipartTile> 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<TileMultipartContainer> multipartContainer = BlockMultipartContainer.getTile(world, pos);
|
||||
|
||||
if (multipartContainer.isPresent()) {
|
||||
Optional<IPartInfo> info = multipartContainer.get().get(EnumCenterSlot.CENTER);
|
||||
|
||||
if (info.isPresent()) {
|
||||
return info.get().getPart().getBlock();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return state.getBlock();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<TileMultipartContainer> multipartContainer = BlockMultipartContainer.getTile(player.getEntityWorld(), pos);
|
||||
|
||||
if (multipartContainer.isPresent()) {
|
||||
Optional<IPartInfo> 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;
|
||||
|
||||
Reference in New Issue
Block a user