Move PortableGridBakedModel away from TRSRBakedModel, remove TRSRBakedModel completely
This commit is contained in:
@@ -37,29 +37,22 @@ public class PortableGridBakedModel extends DelegateBakedModel {
|
||||
@Override
|
||||
@SuppressWarnings("deprecation")
|
||||
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) {
|
||||
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<BakedQuad> 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<BakedQuad> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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<Direction, TransformationMatrix> SIDE_TRANSFORMS = new EnumMap<>(Direction.class);
|
||||
|
||||
public final class QuadTransformer {
|
||||
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;
|
||||
|
||||
|
@@ -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