diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f4c8c020..deab84755 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Refined Storage Changelog +### 1.4.13 +- Fixed Portable Grid model (raoulvdberge) + ### 1.4.12 - Updated Forge to 2315 (raoulvdberge) - Updated JEI to 4.5.0 (raoulvdberge) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSUtils.java b/src/main/java/com/raoulvdberge/refinedstorage/RSUtils.java index e7912081d..3e36213eb 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSUtils.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSUtils.java @@ -1,5 +1,6 @@ package com.raoulvdberge.refinedstorage; +import com.google.common.collect.ImmutableMap; import com.raoulvdberge.refinedstorage.api.network.INetwork; import com.raoulvdberge.refinedstorage.api.storage.AccessType; import com.raoulvdberge.refinedstorage.api.storage.IStorage; @@ -12,6 +13,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.VertexBuffer; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; import net.minecraft.client.renderer.texture.TextureAtlasSprite; import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; @@ -36,6 +38,7 @@ import net.minecraft.util.text.Style; import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.util.text.TextFormatting; import net.minecraft.world.World; +import net.minecraftforge.common.model.TRSRTransformation; import net.minecraftforge.common.util.Constants; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; @@ -55,6 +58,8 @@ import org.apache.commons.lang3.tuple.Pair; import javax.annotation.Nonnull; import javax.annotation.Nullable; +import javax.vecmath.Matrix4f; +import javax.vecmath.Vector3f; import java.math.RoundingMode; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; @@ -588,4 +593,58 @@ public final class RSUtils { vertexBuffer.pos(xCoord, yCoord + maskTop, zLevel).tex(uMin, vMin).endVertex(); tessellator.draw(); } + + public static final Matrix4f EMPTY_MATRIX = getTransform(0, 0, 0, 0, 0, 0, 1.0f).getMatrix(); + + // From ForgeBlockStateV1 + private static final TRSRTransformation FLIP_X = new TRSRTransformation(null, null, new Vector3f(-1, 1, 1), null); + + private static TRSRTransformation leftifyTransform(TRSRTransformation transform) { + return TRSRTransformation.blockCenterToCorner(FLIP_X.compose(TRSRTransformation.blockCornerToCenter(transform)).compose(FLIP_X)); + } + + private static TRSRTransformation getTransform(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 + ); + } + + private static ImmutableMap DEFAULT_ITEM_TRANSFORM; + private static ImmutableMap DEFAULT_BLOCK_TRANSFORM; + + public static ImmutableMap getDefaultItemTransforms() { + if (DEFAULT_ITEM_TRANSFORM != null) { + return DEFAULT_ITEM_TRANSFORM; + } + + return DEFAULT_ITEM_TRANSFORM = ImmutableMap.builder() + .put(ItemCameraTransforms.TransformType.THIRD_PERSON_RIGHT_HAND, getTransform(0, 3, 1, 0, 0, 0, 0.55f)) + .put(ItemCameraTransforms.TransformType.THIRD_PERSON_LEFT_HAND, getTransform(0, 3, 1, 0, 0, 0, 0.55f)) + .put(ItemCameraTransforms.TransformType.FIRST_PERSON_RIGHT_HAND, getTransform(1.13f, 3.2f, 1.13f, 0, -90, 25, 0.68f)) + .put(ItemCameraTransforms.TransformType.FIRST_PERSON_LEFT_HAND, getTransform(1.13f, 3.2f, 1.13f, 0, 90, -25, 0.68f)) + .put(ItemCameraTransforms.TransformType.GROUND, getTransform(0, 2, 0, 0, 0, 0, 0.5f)) + .put(ItemCameraTransforms.TransformType.HEAD, getTransform(0, 13, 7, 0, 180, 0, 1)) + .build(); + } + + public static ImmutableMap getDefaultBlockTransforms() { + if (DEFAULT_BLOCK_TRANSFORM != null) { + return DEFAULT_BLOCK_TRANSFORM; + } + + TRSRTransformation thirdperson = getTransform(0, 2.5f, 0, 75, 45, 0, 0.375f); + + return DEFAULT_BLOCK_TRANSFORM = ImmutableMap.builder() + .put(ItemCameraTransforms.TransformType.GUI, getTransform(0, 0, 0, 30, 225, 0, 0.625f)) + .put(ItemCameraTransforms.TransformType.GROUND, getTransform(0, 3, 0, 0, 0, 0, 0.25f)) + .put(ItemCameraTransforms.TransformType.FIXED, getTransform(0, 0, 0, 0, 0, 0, 0.5f)) + .put(ItemCameraTransforms.TransformType.THIRD_PERSON_RIGHT_HAND, thirdperson) + .put(ItemCameraTransforms.TransformType.THIRD_PERSON_LEFT_HAND, leftifyTransform(thirdperson)) + .put(ItemCameraTransforms.TransformType.FIRST_PERSON_RIGHT_HAND, getTransform(0, 0, 0, 0, 45, 0, 0.4f)) + .put(ItemCameraTransforms.TransformType.FIRST_PERSON_LEFT_HAND, getTransform(0, 0, 0, 0, 225, 0, 0.4f)) + .build(); + } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockDiskDrive.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockDiskDrive.java index cf49c3454..2cba1e0ca 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockDiskDrive.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockDiskDrive.java @@ -1,7 +1,6 @@ package com.raoulvdberge.refinedstorage.block; import com.raoulvdberge.refinedstorage.RSGui; -import com.raoulvdberge.refinedstorage.render.PropertyObject; import com.raoulvdberge.refinedstorage.tile.TileDiskDrive; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockDiskManipulator.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockDiskManipulator.java index f89800833..764e467f8 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockDiskManipulator.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockDiskManipulator.java @@ -1,7 +1,6 @@ package com.raoulvdberge.refinedstorage.block; import com.raoulvdberge.refinedstorage.RSGui; -import com.raoulvdberge.refinedstorage.render.PropertyObject; import com.raoulvdberge.refinedstorage.tile.TileDiskManipulator; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/render/PropertyObject.java b/src/main/java/com/raoulvdberge/refinedstorage/block/PropertyObject.java old mode 100755 new mode 100644 similarity index 95% rename from src/main/java/com/raoulvdberge/refinedstorage/render/PropertyObject.java rename to src/main/java/com/raoulvdberge/refinedstorage/block/PropertyObject.java index 48bbd001c..61f398553 --- a/src/main/java/com/raoulvdberge/refinedstorage/render/PropertyObject.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/PropertyObject.java @@ -1,4 +1,4 @@ -package com.raoulvdberge.refinedstorage.render; +package com.raoulvdberge.refinedstorage.block; import net.minecraftforge.common.property.IUnlistedProperty; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java index a6cfe7c43..08b46c7c0 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java @@ -9,10 +9,7 @@ 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; -import com.raoulvdberge.refinedstorage.render.ModelDiskDrive; -import com.raoulvdberge.refinedstorage.render.ModelDiskManipulator; -import com.raoulvdberge.refinedstorage.render.TileEntitySpecialRendererStorageMonitor; +import com.raoulvdberge.refinedstorage.render.*; import com.raoulvdberge.refinedstorage.tile.TileController; import com.raoulvdberge.refinedstorage.tile.TileStorageMonitor; import com.raoulvdberge.refinedstorage.tile.grid.portable.PortableGrid; @@ -310,8 +307,12 @@ public class ProxyClient extends ProxyCommon { @SubscribeEvent public void onModelBake(ModelBakeEvent e) { for (ModelResourceLocation model : e.getModelRegistry().getKeys()) { - if (model.getResourceDomain().equals(RS.ID) && model.getResourcePath().equals("pattern")) { - e.getModelRegistry().putObject(model, new BakedModelPattern(e.getModelRegistry().getObject(model))); + if (model.getResourceDomain().equals(RS.ID)) { + if (model.getResourcePath().equals("pattern")) { + e.getModelRegistry().putObject(model, new BakedModelPattern(e.getModelRegistry().getObject(model))); + } else if (model.getResourcePath().equals("portable_grid")) { + e.getModelRegistry().putObject(model, new BakedModelPortableGrid(e.getModelRegistry().getObject(model))); + } } } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/render/BakedModelPattern.java b/src/main/java/com/raoulvdberge/refinedstorage/render/BakedModelPattern.java index 8d99b0e31..a2a9cfe27 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/render/BakedModelPattern.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/render/BakedModelPattern.java @@ -1,6 +1,6 @@ package com.raoulvdberge.refinedstorage.render; -import com.google.common.collect.ImmutableMap; +import com.raoulvdberge.refinedstorage.RSUtils; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.CraftingPattern; import com.raoulvdberge.refinedstorage.gui.GuiBase; import com.raoulvdberge.refinedstorage.item.ItemPattern; @@ -24,64 +24,53 @@ import javax.vecmath.Matrix4f; import java.util.List; public class BakedModelPattern implements IBakedModel, IPerspectiveAwareModel { - private IBakedModel patternModel; + private IBakedModel base; - 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 - ); + public BakedModelPattern(IBakedModel base) { + this.base = base; } - public BakedModelPattern(IBakedModel patternModel) { - this.patternModel = patternModel; + @Override + public Pair handlePerspective(ItemCameraTransforms.TransformType cameraTransformType) { + TRSRTransformation transform = RSUtils.getDefaultItemTransforms().get(cameraTransformType); + + return Pair.of(this, transform == null ? RSUtils.EMPTY_MATRIX : transform.getMatrix()); } @Override public List getQuads(@Nullable IBlockState state, @Nullable EnumFacing side, long rand) { - return patternModel.getQuads(state, side, rand); + return base.getQuads(state, side, rand); } @Override public boolean isAmbientOcclusion() { - return patternModel.isAmbientOcclusion(); + return base.isAmbientOcclusion(); } @Override public boolean isGui3d() { - return patternModel.isGui3d(); + return base.isGui3d(); } @Override public boolean isBuiltInRenderer() { - return patternModel.isBuiltInRenderer(); + return base.isBuiltInRenderer(); } @Override public TextureAtlasSprite getParticleTexture() { - return patternModel.getParticleTexture(); + return base.getParticleTexture(); } @Override @SuppressWarnings("deprecation") public ItemCameraTransforms getItemCameraTransforms() { - return patternModel.getItemCameraTransforms(); + return base.getItemCameraTransforms(); } @Override public ItemOverrideList getOverrides() { - return new ItemOverrideList(patternModel.getOverrides().getOverrides()) { + return new ItemOverrideList(base.getOverrides().getOverrides()) { @Override public IBakedModel handleItemState(IBakedModel originalModel, ItemStack stack, World world, EntityLivingBase entity) { CraftingPattern pattern = ItemPattern.getPatternFromCache(world, stack); @@ -95,11 +84,6 @@ 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()); - } - public static boolean canDisplayPatternOutput(CraftingPattern pattern) { return GuiBase.isShiftKeyDown() && pattern.isValid() && pattern.getOutputs().size() == 1; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/render/BakedModelPortableGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/render/BakedModelPortableGrid.java new file mode 100644 index 000000000..516876f6f --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/render/BakedModelPortableGrid.java @@ -0,0 +1,68 @@ +package com.raoulvdberge.refinedstorage.render; + +import com.raoulvdberge.refinedstorage.RSUtils; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.block.model.IBakedModel; +import net.minecraft.client.renderer.block.model.ItemCameraTransforms; +import net.minecraft.client.renderer.block.model.ItemOverrideList; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.client.model.IPerspectiveAwareModel; +import net.minecraftforge.common.model.TRSRTransformation; +import org.apache.commons.lang3.tuple.Pair; + +import javax.annotation.Nullable; +import javax.vecmath.Matrix4f; +import java.util.List; + +public class BakedModelPortableGrid implements IPerspectiveAwareModel { + private IBakedModel base; + + public BakedModelPortableGrid(IBakedModel base) { + this.base = base; + } + + @Override + public Pair handlePerspective(ItemCameraTransforms.TransformType cameraTransformType) { + TRSRTransformation transform = RSUtils.getDefaultBlockTransforms().get(cameraTransformType); + + return Pair.of(this, transform == null ? RSUtils.EMPTY_MATRIX : transform.getMatrix()); + } + + @Override + public List getQuads(@Nullable IBlockState state, @Nullable EnumFacing side, long rand) { + return base.getQuads(state, side, rand); + } + + @Override + public boolean isAmbientOcclusion() { + return base.isAmbientOcclusion(); + } + + @Override + public boolean isGui3d() { + return base.isGui3d(); + } + + @Override + public boolean isBuiltInRenderer() { + return base.isBuiltInRenderer(); + } + + @Override + public TextureAtlasSprite getParticleTexture() { + return base.getParticleTexture(); + } + + @Override + @SuppressWarnings("deprecation") + public ItemCameraTransforms getItemCameraTransforms() { + return base.getItemCameraTransforms(); + } + + @Override + public ItemOverrideList getOverrides() { + return base.getOverrides(); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/PortableGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/PortableGrid.java index e31551540..20f1f5267 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/PortableGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/PortableGrid.java @@ -76,7 +76,7 @@ public class PortableGrid implements IGrid, IPortableGrid { protected void onContentsChanged(int slot) { super.onContentsChanged(slot); - if (FMLCommonHandler.instance().getEffectiveSide() == Side.SERVER) { + if (FMLCommonHandler.instance().getEffectiveSide() == Side.SERVER || (player == null && FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT)) { if (getStackInSlot(slot).isEmpty()) { storage = null; } else { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/TilePortableGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/TilePortableGrid.java index 7c3207ae7..3303da974 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/TilePortableGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/TilePortableGrid.java @@ -185,7 +185,9 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid, cache.invalidate(); - checkIfDiskStateChanged(); + if (world != null) { + checkIfDiskStateChanged(); + } } } @@ -572,15 +574,14 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid, } redstoneMode = RedstoneMode.read(tag); - - diskState = getDiskState(this); } @Override public void onLoad() { super.onLoad(); - checkIfConnectivityChanged(); + connected = getEnergy() != 0; + diskState = getDiskState(this); } @Override diff --git a/src/main/resources/assets/refinedstorage/blockstates/portable_grid.json b/src/main/resources/assets/refinedstorage/blockstates/portable_grid.json index 99bf9eb10..d57789073 100644 --- a/src/main/resources/assets/refinedstorage/blockstates/portable_grid.json +++ b/src/main/resources/assets/refinedstorage/blockstates/portable_grid.json @@ -16,11 +16,6 @@ "uvlock": false }, "variants": { - "inventory": [ - { - "transform": "forge:default-block" - } - ], "disk_state": { "normal": { "textures": {