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.block.model.ItemOverrideList;
|
||||||
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
|
import net.minecraftforge.common.model.TRSRTransformation;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
import javax.vecmath.Vector3f;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -17,18 +20,53 @@ import java.util.Map;
|
|||||||
public class BakedModelDiskDrive implements IBakedModel {
|
public class BakedModelDiskDrive implements IBakedModel {
|
||||||
private IBakedModel base;
|
private IBakedModel base;
|
||||||
private Map<EnumFacing, IBakedModel> models = new HashMap<>();
|
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;
|
this.base = base;
|
||||||
|
|
||||||
for (EnumFacing facing : EnumFacing.HORIZONTALS) {
|
for (EnumFacing facing : EnumFacing.HORIZONTALS) {
|
||||||
models.put(facing, new BakedModelTRSR(base, facing));
|
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
|
@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 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
|
@Override
|
||||||
|
@@ -19,6 +19,7 @@ import javax.vecmath.Matrix3f;
|
|||||||
import javax.vecmath.Matrix4f;
|
import javax.vecmath.Matrix4f;
|
||||||
import javax.vecmath.Vector3f;
|
import javax.vecmath.Vector3f;
|
||||||
import javax.vecmath.Vector4f;
|
import javax.vecmath.Vector4f;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -26,7 +27,7 @@ import java.util.List;
|
|||||||
*/
|
*/
|
||||||
public class BakedModelTRSR implements IBakedModel {
|
public class BakedModelTRSR implements IBakedModel {
|
||||||
protected final IBakedModel original;
|
protected final IBakedModel original;
|
||||||
protected final TRSRTransformation transformation;
|
public TRSRTransformation transformation;
|
||||||
private final TRSROverride override;
|
private final TRSROverride override;
|
||||||
private final int faceOffset;
|
private final int faceOffset;
|
||||||
|
|
||||||
@@ -71,7 +72,7 @@ public class BakedModelTRSR implements IBakedModel {
|
|||||||
public List<BakedQuad> getQuads(IBlockState state, EnumFacing side, long rand) {
|
public List<BakedQuad> getQuads(IBlockState state, EnumFacing side, long rand) {
|
||||||
// transform quads obtained from parent
|
// transform quads obtained from parent
|
||||||
|
|
||||||
ImmutableList.Builder<BakedQuad> builder = ImmutableList.builder();
|
List<BakedQuad> quads = new ArrayList<>();
|
||||||
|
|
||||||
if (!original.isBuiltInRenderer()) {
|
if (!original.isBuiltInRenderer()) {
|
||||||
try {
|
try {
|
||||||
@@ -82,14 +83,14 @@ public class BakedModelTRSR implements IBakedModel {
|
|||||||
for (BakedQuad quad : original.getQuads(state, side, rand)) {
|
for (BakedQuad quad : original.getQuads(state, side, rand)) {
|
||||||
Transformer transformer = new Transformer(transformation, quad.getFormat());
|
Transformer transformer = new Transformer(transformation, quad.getFormat());
|
||||||
quad.pipe(transformer);
|
quad.pipe(transformer);
|
||||||
builder.add(transformer.build());
|
quads.add(transformer.build());
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// do nothing. Seriously, why are you using immutable lists?!
|
// do nothing. Seriously, why are you using immutable lists?!
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return builder.build();
|
return quads;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -15,6 +15,7 @@ import java.util.Collections;
|
|||||||
|
|
||||||
public class ModelDiskDrive implements IModel {
|
public class ModelDiskDrive implements IModel {
|
||||||
private static final ResourceLocation MODEL_BASE = new ResourceLocation("refinedstorage:block/disk_drive");
|
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
|
@Override
|
||||||
public Collection<ResourceLocation> getDependencies() {
|
public Collection<ResourceLocation> getDependencies() {
|
||||||
@@ -29,14 +30,16 @@ public class ModelDiskDrive implements IModel {
|
|||||||
@Override
|
@Override
|
||||||
public IBakedModel bake(IModelState state, VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter) {
|
public IBakedModel bake(IModelState state, VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter) {
|
||||||
IModel baseModel;
|
IModel baseModel;
|
||||||
|
IModel diskModel;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
baseModel = ModelLoaderRegistry.getModel(MODEL_BASE);
|
baseModel = ModelLoaderRegistry.getModel(MODEL_BASE);
|
||||||
|
diskModel = ModelLoaderRegistry.getModel(MODEL_DISK);
|
||||||
} catch (Exception e) {
|
} 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
|
@Override
|
||||||
|
Reference in New Issue
Block a user