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.BlockDirection;
|
||||||
import com.raoulvdberge.refinedstorage.block.info.BlockInfoBuilder;
|
import com.raoulvdberge.refinedstorage.block.info.BlockInfoBuilder;
|
||||||
import com.raoulvdberge.refinedstorage.render.IModelRegistration;
|
import com.raoulvdberge.refinedstorage.render.IModelRegistration;
|
||||||
|
import com.raoulvdberge.refinedstorage.render.model.baked.BakedModelFullbright;
|
||||||
import com.raoulvdberge.refinedstorage.tile.TileSecurityManager;
|
import com.raoulvdberge.refinedstorage.tile.TileSecurityManager;
|
||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
|
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
import net.minecraft.util.BlockRenderLayer;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
import net.minecraft.util.EnumHand;
|
import net.minecraft.util.EnumHand;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
@@ -28,6 +30,20 @@ public class BlockSecurityManager extends BlockNode {
|
|||||||
@SideOnly(Side.CLIENT)
|
@SideOnly(Side.CLIENT)
|
||||||
public void registerModels(IModelRegistration modelRegistration) {
|
public void registerModels(IModelRegistration modelRegistration) {
|
||||||
modelRegistration.setModel(this, 0, new ModelResourceLocation(info.getId(), "inventory"));
|
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
|
@Override
|
||||||
|
@@ -13,27 +13,21 @@ import net.minecraft.block.state.IBlockState;
|
|||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.renderer.block.model.BakedQuad;
|
import net.minecraft.client.renderer.block.model.BakedQuad;
|
||||||
import net.minecraft.client.renderer.block.model.IBakedModel;
|
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.client.renderer.texture.TextureAtlasSprite;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
import net.minecraft.util.math.AxisAlignedBB;
|
import net.minecraft.util.math.AxisAlignedBB;
|
||||||
import net.minecraftforge.common.property.IExtendedBlockState;
|
import net.minecraftforge.common.property.IExtendedBlockState;
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
|
||||||
import org.lwjgl.util.vector.Vector3f;
|
import org.lwjgl.util.vector.Vector3f;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import javax.vecmath.Matrix4f;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class BakedModelCableCover implements IBakedModel {
|
public class BakedModelCableCover extends BakedModelDelegate {
|
||||||
private static TextureAtlasSprite GREY_SPRITE;
|
private static TextureAtlasSprite GREY_SPRITE;
|
||||||
|
|
||||||
private IBakedModel base;
|
|
||||||
|
|
||||||
public BakedModelCableCover(IBakedModel base) {
|
public BakedModelCableCover(IBakedModel base) {
|
||||||
this.base = base;
|
super(base);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -362,45 +356,4 @@ public class BakedModelCableCover implements IBakedModel {
|
|||||||
.bake()
|
.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.block.state.IBlockState;
|
||||||
import net.minecraft.client.renderer.block.model.BakedQuad;
|
import net.minecraft.client.renderer.block.model.BakedQuad;
|
||||||
import net.minecraft.client.renderer.block.model.IBakedModel;
|
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.EnumFacing;
|
||||||
import net.minecraftforge.common.model.TRSRTransformation;
|
import net.minecraftforge.common.model.TRSRTransformation;
|
||||||
import net.minecraftforge.common.property.IExtendedBlockState;
|
import net.minecraftforge.common.property.IExtendedBlockState;
|
||||||
@@ -20,7 +17,7 @@ import javax.annotation.Nullable;
|
|||||||
import javax.vecmath.Vector3f;
|
import javax.vecmath.Vector3f;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
public class BakedModelDiskDrive implements IBakedModel {
|
public class BakedModelDiskDrive extends BakedModelDelegate {
|
||||||
private class CacheKey {
|
private class CacheKey {
|
||||||
private IBlockState state;
|
private IBlockState state;
|
||||||
private EnumFacing side;
|
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, IBakedModel> models = new HashMap<>();
|
||||||
private Map<EnumFacing, Map<Integer, List<IBakedModel>>> disks = 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) {
|
public BakedModelDiskDrive(IBakedModel base, IBakedModel disk, IBakedModel diskNearCapacity, IBakedModel diskFull, IBakedModel diskDisconnected) {
|
||||||
this.base = base;
|
super(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));
|
||||||
@@ -143,35 +139,4 @@ public class BakedModelDiskDrive implements IBakedModel {
|
|||||||
|
|
||||||
return cache.getUnchecked(key);
|
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.block.state.IBlockState;
|
||||||
import net.minecraft.client.renderer.block.model.BakedQuad;
|
import net.minecraft.client.renderer.block.model.BakedQuad;
|
||||||
import net.minecraft.client.renderer.block.model.IBakedModel;
|
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.EnumFacing;
|
||||||
import net.minecraftforge.common.model.TRSRTransformation;
|
import net.minecraftforge.common.model.TRSRTransformation;
|
||||||
import net.minecraftforge.common.property.IExtendedBlockState;
|
import net.minecraftforge.common.property.IExtendedBlockState;
|
||||||
@@ -20,7 +17,7 @@ import javax.annotation.Nullable;
|
|||||||
import javax.vecmath.Vector3f;
|
import javax.vecmath.Vector3f;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
public class BakedModelDiskManipulator implements IBakedModel {
|
public class BakedModelDiskManipulator extends BakedModelDelegate {
|
||||||
private class CacheKey {
|
private class CacheKey {
|
||||||
private IBlockState state;
|
private IBlockState state;
|
||||||
private EnumFacing side;
|
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> modelsConnected = new HashMap<>();
|
||||||
private Map<EnumFacing, IBakedModel> modelsDisconnected = new HashMap<>();
|
private Map<EnumFacing, IBakedModel> modelsDisconnected = new HashMap<>();
|
||||||
private Map<EnumFacing, Map<Integer, List<IBakedModel>>> disks = 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) {
|
public BakedModelDiskManipulator(IBakedModel baseConnected, IBakedModel baseDisconnected, IBakedModel disk, IBakedModel diskNearCapacity, IBakedModel diskFull, IBakedModel diskDisconnected) {
|
||||||
this.baseDisconnected = baseDisconnected;
|
super(baseDisconnected);
|
||||||
|
|
||||||
for (EnumFacing facing : EnumFacing.HORIZONTALS) {
|
for (EnumFacing facing : EnumFacing.HORIZONTALS) {
|
||||||
modelsConnected.put(facing, new BakedModelTRSR(baseConnected, facing));
|
modelsConnected.put(facing, new BakedModelTRSR(baseConnected, facing));
|
||||||
@@ -132,48 +128,17 @@ public class BakedModelDiskManipulator implements IBakedModel {
|
|||||||
@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) {
|
||||||
if (!(state instanceof IExtendedBlockState)) {
|
if (!(state instanceof IExtendedBlockState)) {
|
||||||
return baseDisconnected.getQuads(state, side, rand);
|
return base.getQuads(state, side, rand);
|
||||||
}
|
}
|
||||||
|
|
||||||
Integer[] diskState = ((IExtendedBlockState) state).getValue(BlockDiskManipulator.DISK_STATE);
|
Integer[] diskState = ((IExtendedBlockState) state).getValue(BlockDiskManipulator.DISK_STATE);
|
||||||
|
|
||||||
if (diskState == null) {
|
if (diskState == null) {
|
||||||
return baseDisconnected.getQuads(state, side, rand);
|
return base.getQuads(state, side, rand);
|
||||||
}
|
}
|
||||||
|
|
||||||
CacheKey key = new CacheKey(((IExtendedBlockState) state).getClean(), side, diskState);
|
CacheKey key = new CacheKey(((IExtendedBlockState) state).getClean(), side, diskState);
|
||||||
|
|
||||||
return cache.getUnchecked(key);
|
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.apiimpl.autocrafting.CraftingPattern;
|
||||||
import com.raoulvdberge.refinedstorage.item.ItemPattern;
|
import com.raoulvdberge.refinedstorage.item.ItemPattern;
|
||||||
import com.raoulvdberge.refinedstorage.util.RenderUtils;
|
import com.raoulvdberge.refinedstorage.util.RenderUtils;
|
||||||
import net.minecraft.block.state.IBlockState;
|
|
||||||
import net.minecraft.client.Minecraft;
|
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.IBakedModel;
|
||||||
import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
|
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.entity.EntityLivingBase;
|
import net.minecraft.entity.EntityLivingBase;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.EnumFacing;
|
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.common.model.TRSRTransformation;
|
import net.minecraftforge.common.model.TRSRTransformation;
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
import javax.vecmath.Matrix4f;
|
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) {
|
public BakedModelPattern(IBakedModel base) {
|
||||||
this.base = base;
|
super(base);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -37,37 +29,6 @@ public class BakedModelPattern implements IBakedModel {
|
|||||||
return Pair.of(this, transform == null ? RenderUtils.EMPTY_MATRIX_TRANSFORM : transform.getMatrix());
|
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
|
@Override
|
||||||
public ItemOverrideList getOverrides() {
|
public ItemOverrideList getOverrides() {
|
||||||
return new ItemOverrideList(base.getOverrides().getOverrides()) {
|
return new ItemOverrideList(base.getOverrides().getOverrides()) {
|
||||||
|
@@ -1,15 +1,20 @@
|
|||||||
{
|
{
|
||||||
"forge_marker": 1,
|
"forge_marker": 1,
|
||||||
"defaults": {
|
"defaults": {
|
||||||
"model": "cube",
|
"model": "refinedstorage:security_manager",
|
||||||
"textures": {
|
"textures": {
|
||||||
"particle": "refinedstorage:blocks/security_manager_front_disconnected",
|
"particle": "refinedstorage:blocks/security_manager/front",
|
||||||
"down": "refinedstorage:blocks/security_manager_bottom",
|
"down": "refinedstorage:blocks/security_manager/bottom",
|
||||||
"up": "refinedstorage:blocks/security_manager_top_disconnected",
|
"up": "refinedstorage:blocks/security_manager/top",
|
||||||
"north": "refinedstorage:blocks/security_manager_front_disconnected",
|
"north": "refinedstorage:blocks/security_manager/front",
|
||||||
"east": "refinedstorage:blocks/security_manager_left_disconnected",
|
"east": "refinedstorage:blocks/security_manager/left",
|
||||||
"south": "refinedstorage:blocks/security_manager_back_disconnected",
|
"south": "refinedstorage:blocks/security_manager/back",
|
||||||
"west": "refinedstorage:blocks/security_manager_right_disconnected"
|
"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": {
|
"variants": {
|
||||||
@@ -21,11 +26,11 @@
|
|||||||
"connected": {
|
"connected": {
|
||||||
"true": {
|
"true": {
|
||||||
"textures": {
|
"textures": {
|
||||||
"up": "refinedstorage:blocks/security_manager_top_connected",
|
"cutout_up": "refinedstorage:blocks/security_manager/cutouts/top_connected",
|
||||||
"north": "refinedstorage:blocks/security_manager_front_connected",
|
"cutout_north": "refinedstorage:blocks/security_manager/cutouts/front_connected",
|
||||||
"east": "refinedstorage:blocks/security_manager_left_connected",
|
"cutout_east": "refinedstorage:blocks/security_manager/cutouts/left_connected",
|
||||||
"south": "refinedstorage:blocks/security_manager_back_connected",
|
"cutout_south": "refinedstorage:blocks/security_manager/cutouts/back_connected",
|
||||||
"west": "refinedstorage:blocks/security_manager_right_connected"
|
"cutout_west": "refinedstorage:blocks/security_manager/cutouts/right_connected"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"false": {
|
"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 |