diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java index 5311a47ed..c6d8f2f6d 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java @@ -7,6 +7,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.network.node.IGuiReaderWriter; 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.tile.*; import com.raoulvdberge.refinedstorage.tile.craftingmonitor.TileCraftingMonitor; import com.raoulvdberge.refinedstorage.tile.craftingmonitor.WirelessCraftingMonitor; @@ -14,6 +15,9 @@ 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; @@ -23,6 +27,8 @@ 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) { @@ -89,12 +95,24 @@ public class GuiHandler implements IGuiHandler { return getWirelessCraftingMonitorContainer(player, x, y); } - return getContainer(ID, player, world.getTileEntity(new BlockPos(x, y, z))); + 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; } @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { - TileEntity tile = world.getTileEntity(new BlockPos(x, y, z)); + TileEntity tile = unwrapMultipart(world.getTileEntity(new BlockPos(x, y, z))); switch (ID) { case RSGui.CONTROLLER: diff --git a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java index cf5b38c63..bfd5cd580 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java @@ -6,7 +6,6 @@ import com.raoulvdberge.refinedstorage.RSItems; import com.raoulvdberge.refinedstorage.RSUtils; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.CraftingPattern; import com.raoulvdberge.refinedstorage.block.*; -import com.raoulvdberge.refinedstorage.gui.GuiBase; import com.raoulvdberge.refinedstorage.gui.GuiCraftingPreview; import com.raoulvdberge.refinedstorage.gui.grid.GuiCraftingStart; import com.raoulvdberge.refinedstorage.integration.mcmp.IntegrationMCMP; @@ -274,7 +273,7 @@ public class ProxyClient extends ProxyCommon { public int getColorFromItemstack(ItemStack stack, int tintIndex) { CraftingPattern pattern = ItemPattern.getPatternFromCache(Minecraft.getMinecraft().world, stack); - if (BakedModelPattern.displayPatternOutput(pattern) && + if (BakedModelPattern.canDisplayPatternOutput(pattern) && mcColors.getColorFromItemstack(pattern.getOutputs().get(0), tintIndex) != -1) { return mcColors.getColorFromItemstack(pattern.getOutputs().get(0), tintIndex); // Take the item } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/render/BakedModelPattern.java b/src/main/java/com/raoulvdberge/refinedstorage/render/BakedModelPattern.java index 8fef038e9..8d99b0e31 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/render/BakedModelPattern.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/render/BakedModelPattern.java @@ -26,23 +26,24 @@ import java.util.List; public class BakedModelPattern implements IBakedModel, IPerspectiveAwareModel { private IBakedModel patternModel; + private static ImmutableMap TRANSFORMS = ImmutableMap.builder() + .put(ItemCameraTransforms.TransformType.THIRD_PERSON_RIGHT_HAND, get(0, 3, 1, 0, 0, 0, 0.55f)) + .put(ItemCameraTransforms.TransformType.THIRD_PERSON_LEFT_HAND, get(0, 3, 1, 0, 0, 0, 0.55f)) + .put(ItemCameraTransforms.TransformType.FIRST_PERSON_RIGHT_HAND, get(1.13f, 3.2f, 1.13f, 0, -90, 25, 0.68f)) + .put(ItemCameraTransforms.TransformType.FIRST_PERSON_LEFT_HAND, get(1.13f, 3.2f, 1.13f, 0, 90, -25, 0.68f)) + .put(ItemCameraTransforms.TransformType.GROUND, get(0, 2, 0, 0, 0, 0, 0.5f)) + .put(ItemCameraTransforms.TransformType.HEAD, get(0, 13, 7, 0, 180, 0, 1)) + .build(); + private static TRSRTransformation get(float tx, float ty, float tz, float ax, float ay, float az, float s) { return new TRSRTransformation( - new javax.vecmath.Vector3f(tx / 16, ty / 16, tz / 16), - TRSRTransformation.quatFromXYZDegrees(new javax.vecmath.Vector3f(ax, ay, az)), - new javax.vecmath.Vector3f(s, s, s), - null); + new javax.vecmath.Vector3f(tx / 16, ty / 16, tz / 16), + TRSRTransformation.quatFromXYZDegrees(new javax.vecmath.Vector3f(ax, ay, az)), + new javax.vecmath.Vector3f(s, s, s), + null + ); } - private static ImmutableMap transforms = - ImmutableMap.builder() - .put(ItemCameraTransforms.TransformType.THIRD_PERSON_RIGHT_HAND, get(0, 3, 1, 0, 0, 0, 0.55f)) - .put(ItemCameraTransforms.TransformType.THIRD_PERSON_LEFT_HAND, get(0, 3, 1, 0, 0, 0, 0.55f)) - .put(ItemCameraTransforms.TransformType.FIRST_PERSON_RIGHT_HAND, get(1.13f, 3.2f, 1.13f, 0, -90, 25, 0.68f)) - .put(ItemCameraTransforms.TransformType.FIRST_PERSON_LEFT_HAND, get(1.13f, 3.2f, 1.13f, 0, 90, -25, 0.68f)) - .put(ItemCameraTransforms.TransformType.GROUND, get(0, 2, 0, 0, 0, 0, 0.5f)) - .put(ItemCameraTransforms.TransformType.HEAD, get(0, 13, 7, 0, 180, 0, 1)).build(); - public BakedModelPattern(IBakedModel patternModel) { this.patternModel = patternModel; } @@ -85,7 +86,7 @@ public class BakedModelPattern implements IBakedModel, IPerspectiveAwareModel { public IBakedModel handleItemState(IBakedModel originalModel, ItemStack stack, World world, EntityLivingBase entity) { CraftingPattern pattern = ItemPattern.getPatternFromCache(world, stack); - if (displayPatternOutput(pattern)) { + if (canDisplayPatternOutput(pattern)) { return Minecraft.getMinecraft().getRenderItem().getItemModelWithOverrides(pattern.getOutputs().get(0), world, entity); } @@ -96,17 +97,10 @@ public class BakedModelPattern implements IBakedModel, IPerspectiveAwareModel { @Override public Pair handlePerspective(ItemCameraTransforms.TransformType cameraTransformType) { - return Pair.of(this, - transforms.get(cameraTransformType) != null ? - transforms.get(cameraTransformType).getMatrix() : get(0, 0, 0, 0, 0, 0, 1.0f).getMatrix()); + return Pair.of(this, TRANSFORMS.get(cameraTransformType) != null ? TRANSFORMS.get(cameraTransformType).getMatrix() : get(0, 0, 0, 0, 0, 0, 1.0f).getMatrix()); } - /** - * Determines if the pattern output should be displayed - * @param pattern The pattern to check - * @return True to render output, not pattern item - */ - public static boolean displayPatternOutput(CraftingPattern pattern) { + public static boolean canDisplayPatternOutput(CraftingPattern pattern) { return GuiBase.isShiftKeyDown() && pattern.isValid() && pattern.getOutputs().size() == 1; } }