Implement security manager fullbright with the new system. #1860

This commit is contained in:
raoulvdberge
2018-07-11 13:48:24 +02:00
parent b7de36638f
commit bbff51a09e
40 changed files with 319 additions and 224 deletions

View File

@@ -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

View File

@@ -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();
}
}

View File

@@ -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);
}
}

View File

@@ -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();
}
}

View File

@@ -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();
}
}

View File

@@ -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();
}
}

View File

@@ -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()) {

View File

@@ -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": {

View File

@@ -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"
}
}
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 540 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 242 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 241 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 498 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 551 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 574 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 495 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -1,9 +0,0 @@
{
"ctm": {
"ctm_version": 1,
"layer": "CUTOUT",
"extra": {
"light": 15
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -1,9 +0,0 @@
{
"ctm": {
"ctm_version": 1,
"layer": "CUTOUT",
"extra": {
"light": 15
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -1,9 +0,0 @@
{
"ctm": {
"ctm_version": 1,
"layer": "CUTOUT",
"extra": {
"light": 15
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -1,9 +0,0 @@
{
"ctm": {
"ctm_version": 1,
"layer": "CUTOUT",
"extra": {
"light": 15
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -1,9 +0,0 @@
{
"ctm": {
"ctm_version": 1,
"layer": "CUTOUT",
"extra": {
"light": 15
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB