Move PortableGridBakedModel away from TRSRBakedModel, remove TRSRBakedModel completely
This commit is contained in:
@@ -37,29 +37,22 @@ public class PortableGridBakedModel extends DelegateBakedModel {
|
|||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public List<BakedQuad> load(@Nonnull CacheKey key) {
|
public List<BakedQuad> load(@Nonnull CacheKey key) {
|
||||||
List<BakedQuad> 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) {
|
List<BakedQuad> quads = new ArrayList<>(QuadTransformer.getTransformedQuads(
|
||||||
quads.addAll(new TRSRBakedModel(baseConnected, key.direction).getQuads(key.state, null, key.random));
|
active ? baseConnected : baseDisconnected,
|
||||||
} else {
|
direction,
|
||||||
quads.addAll(new TRSRBakedModel(baseDisconnected, key.direction).getQuads(key.state, null, key.random));
|
null,
|
||||||
}
|
key.state,
|
||||||
|
key.random,
|
||||||
|
key.side
|
||||||
|
));
|
||||||
|
|
||||||
switch (key.diskState) {
|
IBakedModel diskModel = getDiskModel(diskState);
|
||||||
case NORMAL:
|
if (diskModel != null) {
|
||||||
quads.addAll(new TRSRBakedModel(disk, key.direction).getQuads(key.state, null, key.random));
|
quads.addAll(QuadTransformer.getTransformedQuads(diskModel, direction, null, key.state, key.random, key.side));
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return quads;
|
return quads;
|
||||||
@@ -82,6 +75,24 @@ public class PortableGridBakedModel extends DelegateBakedModel {
|
|||||||
this.diskDisconnected = diskDisconnected;
|
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
|
@Override
|
||||||
public ItemOverrideList getOverrides() {
|
public ItemOverrideList getOverrides() {
|
||||||
return itemOverrideList;
|
return itemOverrideList;
|
||||||
@@ -90,11 +101,7 @@ public class PortableGridBakedModel extends DelegateBakedModel {
|
|||||||
@Override
|
@Override
|
||||||
public List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction side, Random rand) {
|
public List<BakedQuad> getQuads(@Nullable BlockState state, @Nullable Direction side, Random rand) {
|
||||||
if (state != null) {
|
if (state != null) {
|
||||||
Direction direction = state.get(RSBlocks.PORTABLE_GRID.getDirection().getProperty());
|
return cache.getUnchecked(new CacheKey(state, side, rand));
|
||||||
boolean active = state.get(PortableGridBlock.ACTIVE);
|
|
||||||
PortableGridDiskState diskState = state.get(PortableGridBlock.DISK_STATE);
|
|
||||||
|
|
||||||
return cache.getUnchecked(new CacheKey(direction, diskState, active, rand, state));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return super.getQuads(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) {
|
public IBakedModel getModelWithOverrides(IBakedModel model, ItemStack stack, @Nullable World worldIn, @Nullable LivingEntity entityIn) {
|
||||||
PortableGrid portableGrid = new PortableGrid(null, stack, -1);
|
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()) {
|
if (portableGrid.isGridActive()) {
|
||||||
return new PortableGridItemBakedModel(baseConnected, myDisk);
|
return new PortableGridItemBakedModel(baseConnected, getDiskModel(portableGrid.getDiskState()));
|
||||||
} else {
|
} else {
|
||||||
return new PortableGridItemBakedModel(baseDisconnected, myDisk);
|
return new PortableGridItemBakedModel(baseDisconnected, getDiskModel(portableGrid.getDiskState()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class CacheKey {
|
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 BlockState state;
|
||||||
|
private final Direction side;
|
||||||
|
private final Random random;
|
||||||
|
|
||||||
public CacheKey(Direction direction, PortableGridDiskState diskState, boolean active, Random random, BlockState state) {
|
public CacheKey(BlockState state, Direction side, Random random) {
|
||||||
this.direction = direction;
|
|
||||||
this.diskState = diskState;
|
|
||||||
this.active = active;
|
|
||||||
this.random = random;
|
|
||||||
this.state = state;
|
this.state = state;
|
||||||
|
this.side = side;
|
||||||
|
this.random = random;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -153,14 +137,14 @@ public class PortableGridBakedModel extends DelegateBakedModel {
|
|||||||
if (this == o) return true;
|
if (this == o) return true;
|
||||||
if (o == null || getClass() != o.getClass()) return false;
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
CacheKey cacheKey = (CacheKey) o;
|
CacheKey cacheKey = (CacheKey) o;
|
||||||
return active == cacheKey.active &&
|
return state.equals(cacheKey.state) &&
|
||||||
direction == cacheKey.direction &&
|
side == cacheKey.side &&
|
||||||
diskState == cacheKey.diskState;
|
random.equals(cacheKey.random);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return Objects.hash(direction, diskState, active);
|
return Objects.hash(state, side, random);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -13,14 +13,10 @@ import net.minecraftforge.client.model.pipeline.TRSRTransformer;
|
|||||||
import net.minecraftforge.common.model.TransformationHelper;
|
import net.minecraftforge.common.model.TransformationHelper;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.EnumMap;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
public class QuadTransformer {
|
public final class QuadTransformer {
|
||||||
private static final Map<Direction, TransformationMatrix> SIDE_TRANSFORMS = new EnumMap<>(Direction.class);
|
|
||||||
|
|
||||||
public static List<BakedQuad> getTransformedQuads(IBakedModel model, Direction facing, @Nullable Vector3f translation, BlockState state, Random rand, Direction side) {
|
public static List<BakedQuad> getTransformedQuads(IBakedModel model, Direction facing, @Nullable Vector3f translation, BlockState state, Random rand, Direction side) {
|
||||||
double r = Math.PI * (360 - facing.getOpposite().getHorizontalIndex() * 90) / 180d;
|
double r = Math.PI * (360 - facing.getOpposite().getHorizontalIndex() * 90) / 180d;
|
||||||
|
|
||||||
|
@@ -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<BakedQuad> getQuads(BlockState state, Direction side, @Nonnull Random rand) {
|
|
||||||
ImmutableList.Builder<BakedQuad> 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();
|
|
||||||
}
|
|
||||||
}
|
|
Reference in New Issue
Block a user