Implement security manager fullbright with the new system. #1860
@@ -6,10 +6,12 @@ import com.raoulvdberge.refinedstorage.api.network.security.Permission;
|
||||
import com.raoulvdberge.refinedstorage.block.info.BlockDirection;
|
||||
import com.raoulvdberge.refinedstorage.block.info.BlockInfoBuilder;
|
||||
import com.raoulvdberge.refinedstorage.render.IModelRegistration;
|
||||
import com.raoulvdberge.refinedstorage.render.model.baked.BakedModelFullbright;
|
||||
import com.raoulvdberge.refinedstorage.tile.TileSecurityManager;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.util.BlockRenderLayer;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
@@ -28,6 +30,20 @@ public class BlockSecurityManager extends BlockNode {
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void registerModels(IModelRegistration modelRegistration) {
|
||||
modelRegistration.setModel(this, 0, new ModelResourceLocation(info.getId(), "inventory"));
|
||||
|
||||
modelRegistration.addBakedModelOverride(info.getId(), base -> new BakedModelFullbright(
|
||||
base,
|
||||
"refinedstorage:blocks/security_manager/cutouts/top_connected",
|
||||
"refinedstorage:blocks/security_manager/cutouts/front_connected",
|
||||
"refinedstorage:blocks/security_manager/cutouts/left_connected",
|
||||
"refinedstorage:blocks/security_manager/cutouts/back_connected",
|
||||
"refinedstorage:blocks/security_manager/cutouts/right_connected"
|
||||
));
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockRenderLayer getBlockLayer() {
|
||||
return BlockRenderLayer.CUTOUT;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -13,27 +13,21 @@ import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.block.model.BakedQuad;
|
||||
import net.minecraft.client.renderer.block.model.IBakedModel;
|
||||
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.minecraft.util.math.AxisAlignedBB;
|
||||
import net.minecraftforge.common.property.IExtendedBlockState;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
import org.lwjgl.util.vector.Vector3f;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import javax.vecmath.Matrix4f;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class BakedModelCableCover implements IBakedModel {
|
||||
public class BakedModelCableCover extends BakedModelDelegate {
|
||||
private static TextureAtlasSprite GREY_SPRITE;
|
||||
|
||||
private IBakedModel base;
|
||||
|
||||
public BakedModelCableCover(IBakedModel base) {
|
||||
this.base = base;
|
||||
super(base);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -362,45 +356,4 @@ public class BakedModelCableCover implements IBakedModel {
|
||||
.bake()
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("deprecation")
|
||||
public ItemCameraTransforms getItemCameraTransforms() {
|
||||
return base.getItemCameraTransforms();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemOverrideList getOverrides() {
|
||||
return base.getOverrides();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAmbientOcclusion(IBlockState state) {
|
||||
return base.isAmbientOcclusion(state);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pair<? extends IBakedModel, Matrix4f> handlePerspective(ItemCameraTransforms.TransformType cameraTransformType) {
|
||||
return base.handlePerspective(cameraTransformType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAmbientOcclusion() {
|
||||
return base.isAmbientOcclusion();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isGui3d() {
|
||||
return base.isGui3d();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isBuiltInRenderer() {
|
||||
return base.isBuiltInRenderer();
|
||||
}
|
||||
|
||||
@Override
|
||||
public TextureAtlasSprite getParticleTexture() {
|
||||
return base.getParticleTexture();
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,68 @@
|
||||
package com.raoulvdberge.refinedstorage.render.model.baked;
|
||||
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.client.renderer.block.model.BakedQuad;
|
||||
import net.minecraft.client.renderer.block.model.IBakedModel;
|
||||
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 org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import javax.vecmath.Matrix4f;
|
||||
import java.util.List;
|
||||
|
||||
public class BakedModelDelegate implements IBakedModel {
|
||||
protected final IBakedModel base;
|
||||
|
||||
public BakedModelDelegate(IBakedModel base) {
|
||||
this.base = base;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BakedQuad> getQuads(@Nullable IBlockState state, @Nullable EnumFacing side, long rand) {
|
||||
return base.getQuads(state, side, rand);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAmbientOcclusion() {
|
||||
return base.isAmbientOcclusion();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAmbientOcclusion(IBlockState state) {
|
||||
return base.isAmbientOcclusion(state);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isGui3d() {
|
||||
return base.isGui3d();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isBuiltInRenderer() {
|
||||
return base.isBuiltInRenderer();
|
||||
}
|
||||
|
||||
@Override
|
||||
public TextureAtlasSprite getParticleTexture() {
|
||||
return base.getParticleTexture();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemOverrideList getOverrides() {
|
||||
return base.getOverrides();
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("deprecation")
|
||||
public ItemCameraTransforms getItemCameraTransforms() {
|
||||
return base.getItemCameraTransforms();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pair<? extends IBakedModel, Matrix4f> handlePerspective(ItemCameraTransforms.TransformType cameraTransformType) {
|
||||
return base.handlePerspective(cameraTransformType);
|
||||
}
|
||||
}
|
@@ -9,9 +9,6 @@ import com.raoulvdberge.refinedstorage.tile.TileDiskDrive;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.client.renderer.block.model.BakedQuad;
|
||||
import net.minecraft.client.renderer.block.model.IBakedModel;
|
||||
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 net.minecraftforge.common.property.IExtendedBlockState;
|
||||
@@ -20,7 +17,7 @@ import javax.annotation.Nullable;
|
||||
import javax.vecmath.Vector3f;
|
||||
import java.util.*;
|
||||
|
||||
public class BakedModelDiskDrive implements IBakedModel {
|
||||
public class BakedModelDiskDrive extends BakedModelDelegate {
|
||||
private class CacheKey {
|
||||
private IBlockState state;
|
||||
private EnumFacing side;
|
||||
@@ -64,7 +61,6 @@ public class BakedModelDiskDrive implements IBakedModel {
|
||||
}
|
||||
}
|
||||
|
||||
private IBakedModel base;
|
||||
private Map<EnumFacing, IBakedModel> models = new HashMap<>();
|
||||
private Map<EnumFacing, Map<Integer, List<IBakedModel>>> disks = new HashMap<>();
|
||||
|
||||
@@ -86,7 +82,7 @@ public class BakedModelDiskDrive implements IBakedModel {
|
||||
});
|
||||
|
||||
public BakedModelDiskDrive(IBakedModel base, IBakedModel disk, IBakedModel diskNearCapacity, IBakedModel diskFull, IBakedModel diskDisconnected) {
|
||||
this.base = base;
|
||||
super(base);
|
||||
|
||||
for (EnumFacing facing : EnumFacing.HORIZONTALS) {
|
||||
models.put(facing, new BakedModelTRSR(base, facing));
|
||||
@@ -143,35 +139,4 @@ public class BakedModelDiskDrive implements IBakedModel {
|
||||
|
||||
return cache.getUnchecked(key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAmbientOcclusion() {
|
||||
return base.isAmbientOcclusion();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isGui3d() {
|
||||
return base.isGui3d();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isBuiltInRenderer() {
|
||||
return base.isBuiltInRenderer();
|
||||
}
|
||||
|
||||
@Override
|
||||
public TextureAtlasSprite getParticleTexture() {
|
||||
return base.getParticleTexture();
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("deprecation")
|
||||
public ItemCameraTransforms getItemCameraTransforms() {
|
||||
return base.getItemCameraTransforms();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemOverrideList getOverrides() {
|
||||
return base.getOverrides();
|
||||
}
|
||||
}
|
||||
|
@@ -9,9 +9,6 @@ import com.raoulvdberge.refinedstorage.tile.TileDiskDrive;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.client.renderer.block.model.BakedQuad;
|
||||
import net.minecraft.client.renderer.block.model.IBakedModel;
|
||||
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 net.minecraftforge.common.property.IExtendedBlockState;
|
||||
@@ -20,7 +17,7 @@ import javax.annotation.Nullable;
|
||||
import javax.vecmath.Vector3f;
|
||||
import java.util.*;
|
||||
|
||||
public class BakedModelDiskManipulator implements IBakedModel {
|
||||
public class BakedModelDiskManipulator extends BakedModelDelegate {
|
||||
private class CacheKey {
|
||||
private IBlockState state;
|
||||
private EnumFacing side;
|
||||
@@ -64,7 +61,6 @@ public class BakedModelDiskManipulator implements IBakedModel {
|
||||
}
|
||||
}
|
||||
|
||||
private IBakedModel baseDisconnected;
|
||||
private Map<EnumFacing, IBakedModel> modelsConnected = new HashMap<>();
|
||||
private Map<EnumFacing, IBakedModel> modelsDisconnected = new HashMap<>();
|
||||
private Map<EnumFacing, Map<Integer, List<IBakedModel>>> disks = new HashMap<>();
|
||||
@@ -87,7 +83,7 @@ public class BakedModelDiskManipulator implements IBakedModel {
|
||||
});
|
||||
|
||||
public BakedModelDiskManipulator(IBakedModel baseConnected, IBakedModel baseDisconnected, IBakedModel disk, IBakedModel diskNearCapacity, IBakedModel diskFull, IBakedModel diskDisconnected) {
|
||||
this.baseDisconnected = baseDisconnected;
|
||||
super(baseDisconnected);
|
||||
|
||||
for (EnumFacing facing : EnumFacing.HORIZONTALS) {
|
||||
modelsConnected.put(facing, new BakedModelTRSR(baseConnected, facing));
|
||||
@@ -132,48 +128,17 @@ public class BakedModelDiskManipulator implements IBakedModel {
|
||||
@Override
|
||||
public List<BakedQuad> getQuads(@Nullable IBlockState state, @Nullable EnumFacing side, long rand) {
|
||||
if (!(state instanceof IExtendedBlockState)) {
|
||||
return baseDisconnected.getQuads(state, side, rand);
|
||||
return base.getQuads(state, side, rand);
|
||||
}
|
||||
|
||||
Integer[] diskState = ((IExtendedBlockState) state).getValue(BlockDiskManipulator.DISK_STATE);
|
||||
|
||||
if (diskState == null) {
|
||||
return baseDisconnected.getQuads(state, side, rand);
|
||||
return base.getQuads(state, side, rand);
|
||||
}
|
||||
|
||||
CacheKey key = new CacheKey(((IExtendedBlockState) state).getClean(), side, diskState);
|
||||
|
||||
return cache.getUnchecked(key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAmbientOcclusion() {
|
||||
return baseDisconnected.isAmbientOcclusion();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isGui3d() {
|
||||
return baseDisconnected.isGui3d();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isBuiltInRenderer() {
|
||||
return baseDisconnected.isBuiltInRenderer();
|
||||
}
|
||||
|
||||
@Override
|
||||
public TextureAtlasSprite getParticleTexture() {
|
||||
return baseDisconnected.getParticleTexture();
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("deprecation")
|
||||
public ItemCameraTransforms getItemCameraTransforms() {
|
||||
return baseDisconnected.getItemCameraTransforms();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemOverrideList getOverrides() {
|
||||
return baseDisconnected.getOverrides();
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,129 @@
|
||||
package com.raoulvdberge.refinedstorage.render.model.baked;
|
||||
|
||||
import com.google.common.cache.CacheBuilder;
|
||||
import com.google.common.cache.CacheLoader;
|
||||
import com.google.common.cache.LoadingCache;
|
||||
import com.raoulvdberge.refinedstorage.util.RenderUtils;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.block.model.BakedQuad;
|
||||
import net.minecraft.client.renderer.block.model.IBakedModel;
|
||||
import net.minecraft.client.renderer.vertex.VertexFormat;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraftforge.client.model.pipeline.UnpackedBakedQuad;
|
||||
import net.minecraftforge.client.model.pipeline.VertexLighterFlat;
|
||||
import net.minecraftforge.common.property.IExtendedBlockState;
|
||||
import scala.actors.threadpool.Arrays;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public class BakedModelFullbright extends BakedModelDelegate {
|
||||
private class CacheKey {
|
||||
private IBakedModel base;
|
||||
private Set<String> textures;
|
||||
private IBlockState state;
|
||||
private EnumFacing side;
|
||||
|
||||
public CacheKey(IBakedModel base, Set<String> textures, IBlockState state, EnumFacing side) {
|
||||
this.base = base;
|
||||
this.textures = textures;
|
||||
this.state = state;
|
||||
this.side = side;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (o == null || getClass() != o.getClass()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
CacheKey cacheKey = (CacheKey) o;
|
||||
|
||||
if (cacheKey.side != side) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!state.equals(cacheKey.state)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return state.hashCode() + (31 * (side != null ? side.hashCode() : 0));
|
||||
}
|
||||
}
|
||||
|
||||
private static final LoadingCache<CacheKey, List<BakedQuad>> CACHE = CacheBuilder.newBuilder().build(new CacheLoader<CacheKey, List<BakedQuad>>() {
|
||||
@Override
|
||||
public List<BakedQuad> load(CacheKey key) throws Exception {
|
||||
List<BakedQuad> quads = key.base.getQuads(key.state, key.side, 0);
|
||||
|
||||
for (int i = 0; i < quads.size(); ++i) {
|
||||
BakedQuad quad = quads.get(i);
|
||||
|
||||
if (key.textures.contains(quad.getSprite().getIconName())) {
|
||||
quads.set(i, transformQuad(quad, 0.007F));
|
||||
}
|
||||
}
|
||||
|
||||
return quads;
|
||||
}
|
||||
});
|
||||
|
||||
private Set<String> textures;
|
||||
|
||||
public BakedModelFullbright(IBakedModel base, String... textures) {
|
||||
super(base);
|
||||
|
||||
this.textures = new HashSet<>(Arrays.asList(textures));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BakedQuad> getQuads(@Nullable IBlockState state, @Nullable EnumFacing side, long rand) {
|
||||
if (state == null) {
|
||||
return base.getQuads(state, side, rand);
|
||||
}
|
||||
|
||||
return CACHE.getUnchecked(new CacheKey(base, textures, state instanceof IExtendedBlockState ? ((IExtendedBlockState) state).getClean() : state, side));
|
||||
}
|
||||
|
||||
private static BakedQuad transformQuad(BakedQuad quad, float light) {
|
||||
VertexFormat newFormat = RenderUtils.getFormatWithLightMap(quad.getFormat());
|
||||
|
||||
UnpackedBakedQuad.Builder builder = new UnpackedBakedQuad.Builder(newFormat);
|
||||
|
||||
VertexLighterFlat trans = new VertexLighterFlat(Minecraft.getMinecraft().getBlockColors()) {
|
||||
@Override
|
||||
protected void updateLightmap(float[] normal, float[] lightmap, float x, float y, float z) {
|
||||
lightmap[0] = light;
|
||||
lightmap[1] = light;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setQuadTint(int tint) {
|
||||
// NO OP
|
||||
}
|
||||
};
|
||||
|
||||
trans.setParent(builder);
|
||||
|
||||
quad.pipe(trans);
|
||||
|
||||
builder.setQuadTint(quad.getTintIndex());
|
||||
builder.setQuadOrientation(quad.getFace());
|
||||
builder.setTexture(quad.getSprite());
|
||||
builder.setApplyDiffuseLighting(false);
|
||||
|
||||
return builder.build();
|
||||
}
|
||||
}
|
@@ -5,29 +5,21 @@ import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.CraftingPattern;
|
||||
import com.raoulvdberge.refinedstorage.item.ItemPattern;
|
||||
import com.raoulvdberge.refinedstorage.util.RenderUtils;
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.block.model.BakedQuad;
|
||||
import net.minecraft.client.renderer.block.model.IBakedModel;
|
||||
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.entity.EntityLivingBase;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.model.TRSRTransformation;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import javax.vecmath.Matrix4f;
|
||||
import java.util.List;
|
||||
|
||||
public class BakedModelPattern implements IBakedModel {
|
||||
private IBakedModel base;
|
||||
|
||||
public class BakedModelPattern extends BakedModelDelegate {
|
||||
public BakedModelPattern(IBakedModel base) {
|
||||
this.base = base;
|
||||
super(base);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -37,37 +29,6 @@ public class BakedModelPattern implements IBakedModel {
|
||||
return Pair.of(this, transform == null ? RenderUtils.EMPTY_MATRIX_TRANSFORM : transform.getMatrix());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BakedQuad> getQuads(@Nullable IBlockState state, @Nullable EnumFacing side, long rand) {
|
||||
return base.getQuads(state, side, rand);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAmbientOcclusion() {
|
||||
return base.isAmbientOcclusion();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isGui3d() {
|
||||
return base.isGui3d();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isBuiltInRenderer() {
|
||||
return base.isBuiltInRenderer();
|
||||
}
|
||||
|
||||
@Override
|
||||
public TextureAtlasSprite getParticleTexture() {
|
||||
return base.getParticleTexture();
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("deprecation")
|
||||
public ItemCameraTransforms getItemCameraTransforms() {
|
||||
return base.getItemCameraTransforms();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemOverrideList getOverrides() {
|
||||
return new ItemOverrideList(base.getOverrides().getOverrides()) {
|
||||
|
@@ -1,15 +1,20 @@
|
||||
{
|
||||
"forge_marker": 1,
|
||||
"defaults": {
|
||||
"model": "cube",
|
||||
"model": "refinedstorage:security_manager",
|
||||
"textures": {
|
||||
"particle": "refinedstorage:blocks/security_manager_front_disconnected",
|
||||
"down": "refinedstorage:blocks/security_manager_bottom",
|
||||
"up": "refinedstorage:blocks/security_manager_top_disconnected",
|
||||
"north": "refinedstorage:blocks/security_manager_front_disconnected",
|
||||
"east": "refinedstorage:blocks/security_manager_left_disconnected",
|
||||
"south": "refinedstorage:blocks/security_manager_back_disconnected",
|
||||
"west": "refinedstorage:blocks/security_manager_right_disconnected"
|
||||
"particle": "refinedstorage:blocks/security_manager/front",
|
||||
"down": "refinedstorage:blocks/security_manager/bottom",
|
||||
"up": "refinedstorage:blocks/security_manager/top",
|
||||
"north": "refinedstorage:blocks/security_manager/front",
|
||||
"east": "refinedstorage:blocks/security_manager/left",
|
||||
"south": "refinedstorage:blocks/security_manager/back",
|
||||
"west": "refinedstorage:blocks/security_manager/right",
|
||||
"cutout_up": "refinedstorage:blocks/security_manager/cutouts/top_disconnected",
|
||||
"cutout_north": "refinedstorage:blocks/security_manager/cutouts/front_disconnected",
|
||||
"cutout_east": "refinedstorage:blocks/security_manager/cutouts/left_disconnected",
|
||||
"cutout_south": "refinedstorage:blocks/security_manager/cutouts/back_disconnected",
|
||||
"cutout_west": "refinedstorage:blocks/security_manager/cutouts/right_disconnected"
|
||||
}
|
||||
},
|
||||
"variants": {
|
||||
@@ -21,11 +26,11 @@
|
||||
"connected": {
|
||||
"true": {
|
||||
"textures": {
|
||||
"up": "refinedstorage:blocks/security_manager_top_connected",
|
||||
"north": "refinedstorage:blocks/security_manager_front_connected",
|
||||
"east": "refinedstorage:blocks/security_manager_left_connected",
|
||||
"south": "refinedstorage:blocks/security_manager_back_connected",
|
||||
"west": "refinedstorage:blocks/security_manager_right_connected"
|
||||
"cutout_up": "refinedstorage:blocks/security_manager/cutouts/top_connected",
|
||||
"cutout_north": "refinedstorage:blocks/security_manager/cutouts/front_connected",
|
||||
"cutout_east": "refinedstorage:blocks/security_manager/cutouts/left_connected",
|
||||
"cutout_south": "refinedstorage:blocks/security_manager/cutouts/back_connected",
|
||||
"cutout_west": "refinedstorage:blocks/security_manager/cutouts/right_connected"
|
||||
}
|
||||
},
|
||||
"false": {
|
||||
|
@@ -0,0 +1,78 @@
|
||||
{
|
||||
"parent": "block/cube",
|
||||
"elements": [
|
||||
{
|
||||
"from": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"to": [
|
||||
16,
|
||||
16,
|
||||
16
|
||||
],
|
||||
"faces": {
|
||||
"down": {
|
||||
"texture": "#down",
|
||||
"cullface": "down"
|
||||
},
|
||||
"up": {
|
||||
"texture": "#up",
|
||||
"cullface": "up"
|
||||
},
|
||||
"north": {
|
||||
"texture": "#north",
|
||||
"cullface": "north"
|
||||
},
|
||||
"south": {
|
||||
"texture": "#south",
|
||||
"cullface": "south"
|
||||
},
|
||||
"west": {
|
||||
"texture": "#west",
|
||||
"cullface": "west"
|
||||
},
|
||||
"east": {
|
||||
"texture": "#east",
|
||||
"cullface": "east"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"from": [
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
"to": [
|
||||
16,
|
||||
16,
|
||||
16
|
||||
],
|
||||
"shade": false,
|
||||
"faces": {
|
||||
"up": {
|
||||
"texture": "#cutout_up",
|
||||
"cullface": "up"
|
||||
},
|
||||
"north": {
|
||||
"texture": "#cutout_north",
|
||||
"cullface": "north"
|
||||
},
|
||||
"south": {
|
||||
"texture": "#cutout_south",
|
||||
"cullface": "south"
|
||||
},
|
||||
"west": {
|
||||
"texture": "#cutout_west",
|
||||
"cullface": "west"
|
||||
},
|
||||
"east": {
|
||||
"texture": "#cutout_east",
|
||||
"cullface": "east"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
After Width: | Height: | Size: 540 B |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 380 B After Width: | Height: | Size: 380 B |
After Width: | Height: | Size: 242 B |
Before Width: | Height: | Size: 331 B After Width: | Height: | Size: 331 B |
After Width: | Height: | Size: 227 B |
Before Width: | Height: | Size: 361 B After Width: | Height: | Size: 361 B |
After Width: | Height: | Size: 241 B |
Before Width: | Height: | Size: 354 B After Width: | Height: | Size: 354 B |
After Width: | Height: | Size: 239 B |
Before Width: | Height: | Size: 575 B After Width: | Height: | Size: 575 B |
After Width: | Height: | Size: 297 B |
After Width: | Height: | Size: 498 B |
After Width: | Height: | Size: 551 B |
After Width: | Height: | Size: 574 B |
After Width: | Height: | Size: 495 B |
Before Width: | Height: | Size: 1.6 KiB |
@@ -1,9 +0,0 @@
|
||||
{
|
||||
"ctm": {
|
||||
"ctm_version": 1,
|
||||
"layer": "CUTOUT",
|
||||
"extra": {
|
||||
"light": 15
|
||||
}
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.5 KiB |
@@ -1,9 +0,0 @@
|
||||
{
|
||||
"ctm": {
|
||||
"ctm_version": 1,
|
||||
"layer": "CUTOUT",
|
||||
"extra": {
|
||||
"light": 15
|
||||
}
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.6 KiB |
@@ -1,9 +0,0 @@
|
||||
{
|
||||
"ctm": {
|
||||
"ctm_version": 1,
|
||||
"layer": "CUTOUT",
|
||||
"extra": {
|
||||
"light": 15
|
||||
}
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.6 KiB |
@@ -1,9 +0,0 @@
|
||||
{
|
||||
"ctm": {
|
||||
"ctm_version": 1,
|
||||
"layer": "CUTOUT",
|
||||
"extra": {
|
||||
"light": 15
|
||||
}
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.5 KiB |
@@ -1,9 +0,0 @@
|
||||
{
|
||||
"ctm": {
|
||||
"ctm_version": 1,
|
||||
"layer": "CUTOUT",
|
||||
"extra": {
|
||||
"light": 15
|
||||
}
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 1.3 KiB |