Fix MCMP loading issues 2k17

This commit is contained in:
raoulvdberge
2017-03-01 20:48:46 +01:00
parent 57d2cc8215
commit 34eeee9f52
6 changed files with 58 additions and 87 deletions

View File

@@ -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());
}
}
}

View File

@@ -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))

View File

@@ -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;
}
}

View File

@@ -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:

View File

@@ -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();
}
}

View File

@@ -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;