Fixes to the dynamic portable grid model: transform and correct item model

This commit is contained in:
raoulvdberge
2017-06-13 11:58:23 +02:00
parent 4f3566ba19
commit 9a6d009695
11 changed files with 160 additions and 51 deletions

View File

@@ -1,5 +1,8 @@
# Refined Storage Changelog # Refined Storage Changelog
### 1.4.13
- Fixed Portable Grid model (raoulvdberge)
### 1.4.12 ### 1.4.12
- Updated Forge to 2315 (raoulvdberge) - Updated Forge to 2315 (raoulvdberge)
- Updated JEI to 4.5.0 (raoulvdberge) - Updated JEI to 4.5.0 (raoulvdberge)

View File

@@ -1,5 +1,6 @@
package com.raoulvdberge.refinedstorage; package com.raoulvdberge.refinedstorage;
import com.google.common.collect.ImmutableMap;
import com.raoulvdberge.refinedstorage.api.network.INetwork; import com.raoulvdberge.refinedstorage.api.network.INetwork;
import com.raoulvdberge.refinedstorage.api.storage.AccessType; import com.raoulvdberge.refinedstorage.api.storage.AccessType;
import com.raoulvdberge.refinedstorage.api.storage.IStorage; 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.GlStateManager;
import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.VertexBuffer; 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.TextureAtlasSprite;
import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats; 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.TextComponentTranslation;
import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.TextFormatting;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.model.TRSRTransformation;
import net.minecraftforge.common.util.Constants; import net.minecraftforge.common.util.Constants;
import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidRegistry;
@@ -55,6 +58,8 @@ import org.apache.commons.lang3.tuple.Pair;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import javax.vecmath.Matrix4f;
import javax.vecmath.Vector3f;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols; import java.text.DecimalFormatSymbols;
@@ -588,4 +593,58 @@ public final class RSUtils {
vertexBuffer.pos(xCoord, yCoord + maskTop, zLevel).tex(uMin, vMin).endVertex(); vertexBuffer.pos(xCoord, yCoord + maskTop, zLevel).tex(uMin, vMin).endVertex();
tessellator.draw(); 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<ItemCameraTransforms.TransformType, TRSRTransformation> DEFAULT_ITEM_TRANSFORM;
private static ImmutableMap<ItemCameraTransforms.TransformType, TRSRTransformation> DEFAULT_BLOCK_TRANSFORM;
public static ImmutableMap<ItemCameraTransforms.TransformType, TRSRTransformation> getDefaultItemTransforms() {
if (DEFAULT_ITEM_TRANSFORM != null) {
return DEFAULT_ITEM_TRANSFORM;
}
return DEFAULT_ITEM_TRANSFORM = ImmutableMap.<ItemCameraTransforms.TransformType, TRSRTransformation>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<ItemCameraTransforms.TransformType, TRSRTransformation> 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.<ItemCameraTransforms.TransformType, TRSRTransformation>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();
}
} }

View File

@@ -1,7 +1,6 @@
package com.raoulvdberge.refinedstorage.block; package com.raoulvdberge.refinedstorage.block;
import com.raoulvdberge.refinedstorage.RSGui; import com.raoulvdberge.refinedstorage.RSGui;
import com.raoulvdberge.refinedstorage.render.PropertyObject;
import com.raoulvdberge.refinedstorage.tile.TileDiskDrive; import com.raoulvdberge.refinedstorage.tile.TileDiskDrive;
import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;

View File

@@ -1,7 +1,6 @@
package com.raoulvdberge.refinedstorage.block; package com.raoulvdberge.refinedstorage.block;
import com.raoulvdberge.refinedstorage.RSGui; import com.raoulvdberge.refinedstorage.RSGui;
import com.raoulvdberge.refinedstorage.render.PropertyObject;
import com.raoulvdberge.refinedstorage.tile.TileDiskManipulator; import com.raoulvdberge.refinedstorage.tile.TileDiskManipulator;
import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;

View File

@@ -1,4 +1,4 @@
package com.raoulvdberge.refinedstorage.render; package com.raoulvdberge.refinedstorage.block;
import net.minecraftforge.common.property.IUnlistedProperty; import net.minecraftforge.common.property.IUnlistedProperty;

View File

@@ -9,10 +9,7 @@ import com.raoulvdberge.refinedstorage.integration.mcmp.IntegrationMCMP;
import com.raoulvdberge.refinedstorage.integration.mcmp.RSMCMPAddon; import com.raoulvdberge.refinedstorage.integration.mcmp.RSMCMPAddon;
import com.raoulvdberge.refinedstorage.item.*; import com.raoulvdberge.refinedstorage.item.*;
import com.raoulvdberge.refinedstorage.network.MessageGridCraftingPreviewResponse; import com.raoulvdberge.refinedstorage.network.MessageGridCraftingPreviewResponse;
import com.raoulvdberge.refinedstorage.render.BakedModelPattern; import com.raoulvdberge.refinedstorage.render.*;
import com.raoulvdberge.refinedstorage.render.ModelDiskDrive;
import com.raoulvdberge.refinedstorage.render.ModelDiskManipulator;
import com.raoulvdberge.refinedstorage.render.TileEntitySpecialRendererStorageMonitor;
import com.raoulvdberge.refinedstorage.tile.TileController; import com.raoulvdberge.refinedstorage.tile.TileController;
import com.raoulvdberge.refinedstorage.tile.TileStorageMonitor; import com.raoulvdberge.refinedstorage.tile.TileStorageMonitor;
import com.raoulvdberge.refinedstorage.tile.grid.portable.PortableGrid; import com.raoulvdberge.refinedstorage.tile.grid.portable.PortableGrid;
@@ -310,8 +307,12 @@ public class ProxyClient extends ProxyCommon {
@SubscribeEvent @SubscribeEvent
public void onModelBake(ModelBakeEvent e) { public void onModelBake(ModelBakeEvent e) {
for (ModelResourceLocation model : e.getModelRegistry().getKeys()) { for (ModelResourceLocation model : e.getModelRegistry().getKeys()) {
if (model.getResourceDomain().equals(RS.ID) && model.getResourcePath().equals("pattern")) { if (model.getResourceDomain().equals(RS.ID)) {
e.getModelRegistry().putObject(model, new BakedModelPattern(e.getModelRegistry().getObject(model))); 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)));
}
} }
} }
} }

View File

@@ -1,6 +1,6 @@
package com.raoulvdberge.refinedstorage.render; 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.apiimpl.autocrafting.CraftingPattern;
import com.raoulvdberge.refinedstorage.gui.GuiBase; import com.raoulvdberge.refinedstorage.gui.GuiBase;
import com.raoulvdberge.refinedstorage.item.ItemPattern; import com.raoulvdberge.refinedstorage.item.ItemPattern;
@@ -24,64 +24,53 @@ import javax.vecmath.Matrix4f;
import java.util.List; import java.util.List;
public class BakedModelPattern implements IBakedModel, IPerspectiveAwareModel { public class BakedModelPattern implements IBakedModel, IPerspectiveAwareModel {
private IBakedModel patternModel; private IBakedModel base;
private static ImmutableMap<ItemCameraTransforms.TransformType, TRSRTransformation> TRANSFORMS = ImmutableMap.<ItemCameraTransforms.TransformType, TRSRTransformation>builder() public BakedModelPattern(IBakedModel base) {
.put(ItemCameraTransforms.TransformType.THIRD_PERSON_RIGHT_HAND, get(0, 3, 1, 0, 0, 0, 0.55f)) this.base = base;
.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 patternModel) { @Override
this.patternModel = patternModel; public Pair<? extends IBakedModel, Matrix4f> handlePerspective(ItemCameraTransforms.TransformType cameraTransformType) {
TRSRTransformation transform = RSUtils.getDefaultItemTransforms().get(cameraTransformType);
return Pair.of(this, transform == null ? RSUtils.EMPTY_MATRIX : transform.getMatrix());
} }
@Override @Override
public List<BakedQuad> getQuads(@Nullable IBlockState state, @Nullable EnumFacing side, long rand) { public List<BakedQuad> getQuads(@Nullable IBlockState state, @Nullable EnumFacing side, long rand) {
return patternModel.getQuads(state, side, rand); return base.getQuads(state, side, rand);
} }
@Override @Override
public boolean isAmbientOcclusion() { public boolean isAmbientOcclusion() {
return patternModel.isAmbientOcclusion(); return base.isAmbientOcclusion();
} }
@Override @Override
public boolean isGui3d() { public boolean isGui3d() {
return patternModel.isGui3d(); return base.isGui3d();
} }
@Override @Override
public boolean isBuiltInRenderer() { public boolean isBuiltInRenderer() {
return patternModel.isBuiltInRenderer(); return base.isBuiltInRenderer();
} }
@Override @Override
public TextureAtlasSprite getParticleTexture() { public TextureAtlasSprite getParticleTexture() {
return patternModel.getParticleTexture(); return base.getParticleTexture();
} }
@Override @Override
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public ItemCameraTransforms getItemCameraTransforms() { public ItemCameraTransforms getItemCameraTransforms() {
return patternModel.getItemCameraTransforms(); return base.getItemCameraTransforms();
} }
@Override @Override
public ItemOverrideList getOverrides() { public ItemOverrideList getOverrides() {
return new ItemOverrideList(patternModel.getOverrides().getOverrides()) { return new ItemOverrideList(base.getOverrides().getOverrides()) {
@Override @Override
public IBakedModel handleItemState(IBakedModel originalModel, ItemStack stack, World world, EntityLivingBase entity) { public IBakedModel handleItemState(IBakedModel originalModel, ItemStack stack, World world, EntityLivingBase entity) {
CraftingPattern pattern = ItemPattern.getPatternFromCache(world, stack); CraftingPattern pattern = ItemPattern.getPatternFromCache(world, stack);
@@ -95,11 +84,6 @@ public class BakedModelPattern implements IBakedModel, IPerspectiveAwareModel {
}; };
} }
@Override
public Pair<? extends IBakedModel, Matrix4f> 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) { public static boolean canDisplayPatternOutput(CraftingPattern pattern) {
return GuiBase.isShiftKeyDown() && pattern.isValid() && pattern.getOutputs().size() == 1; return GuiBase.isShiftKeyDown() && pattern.isValid() && pattern.getOutputs().size() == 1;
} }

View File

@@ -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<? extends IBakedModel, Matrix4f> handlePerspective(ItemCameraTransforms.TransformType cameraTransformType) {
TRSRTransformation transform = RSUtils.getDefaultBlockTransforms().get(cameraTransformType);
return Pair.of(this, transform == null ? RSUtils.EMPTY_MATRIX : transform.getMatrix());
}
@Override
public List<BakedQuad> 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();
}
}

View File

@@ -76,7 +76,7 @@ public class PortableGrid implements IGrid, IPortableGrid {
protected void onContentsChanged(int slot) { protected void onContentsChanged(int slot) {
super.onContentsChanged(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()) { if (getStackInSlot(slot).isEmpty()) {
storage = null; storage = null;
} else { } else {

View File

@@ -185,7 +185,9 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid,
cache.invalidate(); cache.invalidate();
checkIfDiskStateChanged(); if (world != null) {
checkIfDiskStateChanged();
}
} }
} }
@@ -572,15 +574,14 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid,
} }
redstoneMode = RedstoneMode.read(tag); redstoneMode = RedstoneMode.read(tag);
diskState = getDiskState(this);
} }
@Override @Override
public void onLoad() { public void onLoad() {
super.onLoad(); super.onLoad();
checkIfConnectivityChanged(); connected = getEnergy() != 0;
diskState = getDiskState(this);
} }
@Override @Override

View File

@@ -16,11 +16,6 @@
"uvlock": false "uvlock": false
}, },
"variants": { "variants": {
"inventory": [
{
"transform": "forge:default-block"
}
],
"disk_state": { "disk_state": {
"normal": { "normal": {
"textures": { "textures": {