Disk drive shows all disks for now
This commit is contained in:
@@ -8,8 +8,11 @@ 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.common.model.TRSRTransformation;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import javax.vecmath.Vector3f;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -17,18 +20,53 @@ import java.util.Map;
|
||||
public class BakedModelDiskDrive implements IBakedModel {
|
||||
private IBakedModel base;
|
||||
private Map<EnumFacing, IBakedModel> models = new HashMap<>();
|
||||
private Map<EnumFacing, List<IBakedModel>> disks = new HashMap<>();
|
||||
|
||||
public BakedModelDiskDrive(IBakedModel base) {
|
||||
public BakedModelDiskDrive(IBakedModel base, IBakedModel disk) {
|
||||
this.base = base;
|
||||
|
||||
for (EnumFacing facing : EnumFacing.HORIZONTALS) {
|
||||
models.put(facing, new BakedModelTRSR(base, facing));
|
||||
|
||||
disks.put(facing, new ArrayList<>());
|
||||
|
||||
for (int y = 0; y < 4; ++y) {
|
||||
for (int x = 0; x < 2; ++x) {
|
||||
BakedModelTRSR model = new BakedModelTRSR(disk, facing);
|
||||
|
||||
Vector3f trans = model.transformation.getTranslation();
|
||||
|
||||
if (facing == EnumFacing.NORTH || facing == EnumFacing.SOUTH) {
|
||||
trans.x += (((float) x * 7F) / 16F) * (facing == EnumFacing.NORTH ? -1 : 1);
|
||||
} else if (facing == EnumFacing.EAST || facing == EnumFacing.WEST) {
|
||||
trans.z += (((float) x * 7F) / 16F) * (facing == EnumFacing.EAST ? -1 : 1);
|
||||
}
|
||||
|
||||
trans.y -= ((float) y * 3F) / 16F;
|
||||
|
||||
model.transformation = new TRSRTransformation(trans, model.transformation.getLeftRot(), model.transformation.getScale(), model.transformation.getRightRot());
|
||||
|
||||
disks.get(facing).add(model);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BakedQuad> getQuads(@Nullable IBlockState state, @Nullable EnumFacing side, long rand) {
|
||||
return state == null ? base.getQuads(state, side, rand) : models.get(state.getValue(BlockBase.DIRECTION)).getQuads(state, side, rand);
|
||||
if (state == null) {
|
||||
return base.getQuads(state, side, rand);
|
||||
}
|
||||
|
||||
EnumFacing facing = state.getValue(BlockBase.DIRECTION);
|
||||
|
||||
List<BakedQuad> quads = models.get(facing).getQuads(state, side, rand);
|
||||
|
||||
for (int i = 0; i < 8; ++i) {
|
||||
quads.addAll(disks.get(facing).get(i).getQuads(state, side, rand));
|
||||
}
|
||||
|
||||
return quads;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -19,6 +19,7 @@ import javax.vecmath.Matrix3f;
|
||||
import javax.vecmath.Matrix4f;
|
||||
import javax.vecmath.Vector3f;
|
||||
import javax.vecmath.Vector4f;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -26,7 +27,7 @@ import java.util.List;
|
||||
*/
|
||||
public class BakedModelTRSR implements IBakedModel {
|
||||
protected final IBakedModel original;
|
||||
protected final TRSRTransformation transformation;
|
||||
public TRSRTransformation transformation;
|
||||
private final TRSROverride override;
|
||||
private final int faceOffset;
|
||||
|
||||
@@ -71,7 +72,7 @@ public class BakedModelTRSR implements IBakedModel {
|
||||
public List<BakedQuad> getQuads(IBlockState state, EnumFacing side, long rand) {
|
||||
// transform quads obtained from parent
|
||||
|
||||
ImmutableList.Builder<BakedQuad> builder = ImmutableList.builder();
|
||||
List<BakedQuad> quads = new ArrayList<>();
|
||||
|
||||
if (!original.isBuiltInRenderer()) {
|
||||
try {
|
||||
@@ -82,14 +83,14 @@ public class BakedModelTRSR implements IBakedModel {
|
||||
for (BakedQuad quad : original.getQuads(state, side, rand)) {
|
||||
Transformer transformer = new Transformer(transformation, quad.getFormat());
|
||||
quad.pipe(transformer);
|
||||
builder.add(transformer.build());
|
||||
quads.add(transformer.build());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// do nothing. Seriously, why are you using immutable lists?!
|
||||
}
|
||||
}
|
||||
|
||||
return builder.build();
|
||||
return quads;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -15,6 +15,7 @@ import java.util.Collections;
|
||||
|
||||
public class ModelDiskDrive implements IModel {
|
||||
private static final ResourceLocation MODEL_BASE = new ResourceLocation("refinedstorage:block/disk_drive");
|
||||
private static final ResourceLocation MODEL_DISK = new ResourceLocation("refinedstorage:block/disk_drive_disk");
|
||||
|
||||
@Override
|
||||
public Collection<ResourceLocation> getDependencies() {
|
||||
@@ -29,14 +30,16 @@ public class ModelDiskDrive implements IModel {
|
||||
@Override
|
||||
public IBakedModel bake(IModelState state, VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter) {
|
||||
IModel baseModel;
|
||||
IModel diskModel;
|
||||
|
||||
try {
|
||||
baseModel = ModelLoaderRegistry.getModel(MODEL_BASE);
|
||||
diskModel = ModelLoaderRegistry.getModel(MODEL_DISK);
|
||||
} catch (Exception e) {
|
||||
throw new Error("Unable to load disk drive base model", e);
|
||||
throw new Error("Unable to load disk drive models", e);
|
||||
}
|
||||
|
||||
return new BakedModelDiskDrive(baseModel.bake(state, format, bakedTextureGetter));
|
||||
return new BakedModelDiskDrive(baseModel.bake(state, format, bakedTextureGetter), diskModel.bake(state, format, bakedTextureGetter));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Reference in New Issue
Block a user