diff --git a/src/main/java/com/refinedmods/refinedstorage/render/model/PortableGridBakedModel.java b/src/main/java/com/refinedmods/refinedstorage/render/model/PortableGridBakedModel.java index ae0cda059..3d988450d 100644 --- a/src/main/java/com/refinedmods/refinedstorage/render/model/PortableGridBakedModel.java +++ b/src/main/java/com/refinedmods/refinedstorage/render/model/PortableGridBakedModel.java @@ -37,29 +37,22 @@ public class PortableGridBakedModel extends DelegateBakedModel { @Override @SuppressWarnings("deprecation") public List load(@Nonnull CacheKey key) { - List quads = new ArrayList<>(); + Direction direction = key.state.get(RSBlocks.PORTABLE_GRID.getDirection().getProperty()); + boolean active = key.state.get(PortableGridBlock.ACTIVE); + PortableGridDiskState diskState = key.state.get(PortableGridBlock.DISK_STATE); - if (key.active) { - quads.addAll(new TRSRBakedModel(baseConnected, key.direction).getQuads(key.state, null, key.random)); - } else { - quads.addAll(new TRSRBakedModel(baseDisconnected, key.direction).getQuads(key.state, null, key.random)); - } + List quads = new ArrayList<>(QuadTransformer.getTransformedQuads( + active ? baseConnected : baseDisconnected, + direction, + null, + key.state, + key.random, + key.side + )); - switch (key.diskState) { - case NORMAL: - quads.addAll(new TRSRBakedModel(disk, key.direction).getQuads(key.state, null, key.random)); - break; - case NEAR_CAPACITY: - quads.addAll(new TRSRBakedModel(diskNearCapacity, key.direction).getQuads(key.state, null, key.random)); - break; - case FULL: - quads.addAll(new TRSRBakedModel(diskFull, key.direction).getQuads(key.state, null, key.random)); - break; - case DISCONNECTED: - quads.addAll(new TRSRBakedModel(diskDisconnected, key.direction).getQuads(key.state, null, key.random)); - break; - case NONE: - break; + IBakedModel diskModel = getDiskModel(diskState); + if (diskModel != null) { + quads.addAll(QuadTransformer.getTransformedQuads(diskModel, direction, null, key.state, key.random, key.side)); } return quads; @@ -82,6 +75,24 @@ public class PortableGridBakedModel extends DelegateBakedModel { this.diskDisconnected = diskDisconnected; } + @Nullable + private IBakedModel getDiskModel(PortableGridDiskState state) { + switch (state) { + case NORMAL: + return disk; + case NEAR_CAPACITY: + return diskNearCapacity; + case FULL: + return diskFull; + case DISCONNECTED: + return diskDisconnected; + case NONE: + return null; + default: + return null; + } + } + @Override public ItemOverrideList getOverrides() { return itemOverrideList; @@ -90,11 +101,7 @@ public class PortableGridBakedModel extends DelegateBakedModel { @Override public List getQuads(@Nullable BlockState state, @Nullable Direction side, Random rand) { if (state != null) { - Direction direction = state.get(RSBlocks.PORTABLE_GRID.getDirection().getProperty()); - boolean active = state.get(PortableGridBlock.ACTIVE); - PortableGridDiskState diskState = state.get(PortableGridBlock.DISK_STATE); - - return cache.getUnchecked(new CacheKey(direction, diskState, active, rand, state)); + return cache.getUnchecked(new CacheKey(state, side, rand)); } return super.getQuads(state, side, rand); @@ -106,46 +113,23 @@ public class PortableGridBakedModel extends DelegateBakedModel { public IBakedModel getModelWithOverrides(IBakedModel model, ItemStack stack, @Nullable World worldIn, @Nullable LivingEntity entityIn) { PortableGrid portableGrid = new PortableGrid(null, stack, -1); - IBakedModel myDisk = null; - - switch (portableGrid.getDiskState()) { - case NORMAL: - myDisk = disk; - break; - case NEAR_CAPACITY: - myDisk = diskNearCapacity; - break; - case FULL: - myDisk = diskFull; - break; - case DISCONNECTED: - myDisk = diskDisconnected; - break; - case NONE: - break; - } - if (portableGrid.isGridActive()) { - return new PortableGridItemBakedModel(baseConnected, myDisk); + return new PortableGridItemBakedModel(baseConnected, getDiskModel(portableGrid.getDiskState())); } else { - return new PortableGridItemBakedModel(baseDisconnected, myDisk); + return new PortableGridItemBakedModel(baseDisconnected, getDiskModel(portableGrid.getDiskState())); } } } private static class CacheKey { - private final Direction direction; - private final PortableGridDiskState diskState; - private final boolean active; - private final Random random; private final BlockState state; + private final Direction side; + private final Random random; - public CacheKey(Direction direction, PortableGridDiskState diskState, boolean active, Random random, BlockState state) { - this.direction = direction; - this.diskState = diskState; - this.active = active; - this.random = random; + public CacheKey(BlockState state, Direction side, Random random) { this.state = state; + this.side = side; + this.random = random; } @Override @@ -153,14 +137,14 @@ public class PortableGridBakedModel extends DelegateBakedModel { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; CacheKey cacheKey = (CacheKey) o; - return active == cacheKey.active && - direction == cacheKey.direction && - diskState == cacheKey.diskState; + return state.equals(cacheKey.state) && + side == cacheKey.side && + random.equals(cacheKey.random); } @Override public int hashCode() { - return Objects.hash(direction, diskState, active); + return Objects.hash(state, side, random); } } } diff --git a/src/main/java/com/refinedmods/refinedstorage/render/model/QuadTransformer.java b/src/main/java/com/refinedmods/refinedstorage/render/model/QuadTransformer.java index c19be3a14..5f15b9e14 100644 --- a/src/main/java/com/refinedmods/refinedstorage/render/model/QuadTransformer.java +++ b/src/main/java/com/refinedmods/refinedstorage/render/model/QuadTransformer.java @@ -13,14 +13,10 @@ import net.minecraftforge.client.model.pipeline.TRSRTransformer; import net.minecraftforge.common.model.TransformationHelper; import javax.annotation.Nullable; -import java.util.EnumMap; import java.util.List; -import java.util.Map; import java.util.Random; -public class QuadTransformer { - private static final Map SIDE_TRANSFORMS = new EnumMap<>(Direction.class); - +public final class QuadTransformer { public static List getTransformedQuads(IBakedModel model, Direction facing, @Nullable Vector3f translation, BlockState state, Random rand, Direction side) { double r = Math.PI * (360 - facing.getOpposite().getHorizontalIndex() * 90) / 180d; diff --git a/src/main/java/com/refinedmods/refinedstorage/render/model/TRSRBakedModel.java b/src/main/java/com/refinedmods/refinedstorage/render/model/TRSRBakedModel.java deleted file mode 100644 index d1bdeb8d3..000000000 --- a/src/main/java/com/refinedmods/refinedstorage/render/model/TRSRBakedModel.java +++ /dev/null @@ -1,120 +0,0 @@ -package com.refinedmods.refinedstorage.render.model; - -import com.google.common.collect.ImmutableList; -import net.minecraft.block.BlockState; -import net.minecraft.client.renderer.TransformationMatrix; -import net.minecraft.client.renderer.Vector3f; -import net.minecraft.client.renderer.model.BakedQuad; -import net.minecraft.client.renderer.model.IBakedModel; -import net.minecraft.client.renderer.model.ItemCameraTransforms; -import net.minecraft.client.renderer.model.ItemOverrideList; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.util.Direction; -import net.minecraftforge.client.model.data.EmptyModelData; -import net.minecraftforge.client.model.pipeline.BakedQuadBuilder; -import net.minecraftforge.client.model.pipeline.TRSRTransformer; -import net.minecraftforge.common.model.TransformationHelper; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import java.util.List; -import java.util.Random; - -public class TRSRBakedModel implements IBakedModel { - protected final IBakedModel original; - protected TransformationMatrix transformation; - private final int faceOffset; - - public TRSRBakedModel(IBakedModel original, float x, float y, float z, float scale) { - this(original, x, y, z, 0, 0, 0, scale, scale, scale); - } - - public TRSRBakedModel(IBakedModel original, float x, float y, float z, float rotX, float rotY, float rotZ, float scale) { - this(original, x, y, z, rotX, rotY, rotZ, scale, scale, scale); - } - - public TRSRBakedModel(IBakedModel original, float x, float y, float z, float rotX, float rotY, float rotZ, float scaleX, float scaleY, float scaleZ) { - this(original, new TransformationMatrix(new Vector3f(x, y, z), null, new Vector3f(scaleX, scaleY, scaleZ), TransformationHelper.quatFromXYZ(new Vector3f(rotX, rotY, rotZ), true))); - } - - public TRSRBakedModel(IBakedModel original, TransformationMatrix transform) { - this.original = original; - this.transformation = transform; - this.faceOffset = 0; - } - - public TRSRBakedModel(IBakedModel original, Direction facing) { - this(original,facing,null); - } - - public TRSRBakedModel(IBakedModel original, Direction facing, @Nullable Vector3f translation) { - this.original = original; - - double r = Math.PI * (360 - facing.getOpposite().getHorizontalIndex() * 90) / 180d; - - this.transformation = new TransformationMatrix(translation, TransformationHelper.quatFromXYZ(new Vector3f(0, (float) r, 0), false), null, null); - this.faceOffset = 4 + Direction.NORTH.getHorizontalIndex() - facing.getHorizontalIndex(); - } - - @Nonnull - @Override - @SuppressWarnings("deprecation") - public List getQuads(BlockState state, Direction side, @Nonnull Random rand) { - ImmutableList.Builder quads = ImmutableList.builder(); - - if (side != null && side.getHorizontalIndex() > -1) { - side = Direction.byHorizontalIndex((side.getHorizontalIndex() + this.faceOffset) % 4); - } - - for (BakedQuad quad : original.getQuads(state, side, rand, EmptyModelData.INSTANCE)) { - BakedQuadBuilder builder = new BakedQuadBuilder(quad.func_187508_a()); - TRSRTransformer transformer = new TRSRTransformer(builder, transformation.blockCenterToCorner()); - - quad.pipe(transformer); - - quads.add(builder.build()); - } - - return quads.build(); - } - - @Override - public boolean isAmbientOcclusion() { - return false; - } - - @Override - public boolean isGui3d() { - return original.isGui3d(); - } - - @Override - public boolean func_230044_c_() { - return original.func_230044_c_(); - } - - @Override - public boolean isBuiltInRenderer() { - return original.isBuiltInRenderer(); - } - - @Nonnull - @Override - @SuppressWarnings("deprecation") - public TextureAtlasSprite getParticleTexture() { - return original.getParticleTexture(); - } - - @Nonnull - @Override - @SuppressWarnings("deprecation") - public ItemCameraTransforms getItemCameraTransforms() { - return original.getItemCameraTransforms(); - } - - @Nonnull - @Override - public ItemOverrideList getOverrides() { - return original.getOverrides(); - } -}