Compare commits
9 Commits
rv5.beta.2
...
rv5.beta.3
| Author | SHA1 | Date | |
|---|---|---|---|
| cc4599b5fc | |||
| c1fa77df51 | |||
| 725fa491e6 | |||
| e2a6cd1d57 | |||
| 6ddf60fab8 | |||
| 2c07acfe81 | |||
| 3749742231 | |||
| 74b9610b45 | |||
| a725779ff6 |
@@ -101,7 +101,6 @@ public class BlockCableBus extends AEBaseTileBlock
|
|||||||
// this will actually be overwritten later through setupTile and the
|
// this will actually be overwritten later through setupTile and the
|
||||||
// combined layers
|
// combined layers
|
||||||
this.setTileEntity( TileCableBus.class );
|
this.setTileEntity( TileCableBus.class );
|
||||||
this.useNeighborBrightness = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -47,9 +47,9 @@ import appeng.util.Platform;
|
|||||||
public class BlockSkyChest extends AEBaseTileBlock implements ICustomCollision
|
public class BlockSkyChest extends AEBaseTileBlock implements ICustomCollision
|
||||||
{
|
{
|
||||||
|
|
||||||
private static final double AABB_OFFSET_BOTTOM = .0625d;
|
private static final double AABB_OFFSET_BOTTOM = 0.00;
|
||||||
private static final double AABB_OFFSET_SIDES = 0;
|
private static final double AABB_OFFSET_SIDES = 0.06;
|
||||||
private static final double AABB_OFFSET_TOP = .125d;
|
private static final double AABB_OFFSET_TOP = 0.125;
|
||||||
|
|
||||||
public enum SkyChestType
|
public enum SkyChestType
|
||||||
{
|
{
|
||||||
@@ -111,18 +111,18 @@ public class BlockSkyChest extends AEBaseTileBlock implements ICustomCollision
|
|||||||
o = sk.getUp();
|
o = sk.getUp();
|
||||||
}
|
}
|
||||||
|
|
||||||
final double offsetX = o.getFrontOffsetX() == 0 ? AABB_OFFSET_BOTTOM : AABB_OFFSET_SIDES;
|
final double offsetX = o.getFrontOffsetX() == 0 ? AABB_OFFSET_SIDES : 0.0;
|
||||||
final double offsetY = o.getFrontOffsetY() == 0 ? AABB_OFFSET_BOTTOM : AABB_OFFSET_SIDES;
|
final double offsetY = o.getFrontOffsetY() == 0 ? AABB_OFFSET_SIDES : 0.0;
|
||||||
final double offsetZ = o.getFrontOffsetZ() == 0 ? AABB_OFFSET_BOTTOM : AABB_OFFSET_SIDES;
|
final double offsetZ = o.getFrontOffsetZ() == 0 ? AABB_OFFSET_SIDES : 0.0;
|
||||||
|
|
||||||
// x/z needs to be multiplied by -1, thus we simply add not substract.
|
// for x/z top and bottom is swapped
|
||||||
final double minX = Math.max( 0.0, offsetX + o.getFrontOffsetX() * AABB_OFFSET_TOP );
|
final double minX = Math.max( 0.0, offsetX + ( o.getFrontOffsetX() < 0 ? AABB_OFFSET_BOTTOM : ( o.getFrontOffsetX() * AABB_OFFSET_TOP ) ) );
|
||||||
final double minY = Math.max( 0.0, offsetY - o.getFrontOffsetY() * AABB_OFFSET_TOP );
|
final double minY = Math.max( 0.0, offsetY + ( o.getFrontOffsetY() < 0 ? AABB_OFFSET_TOP : ( o.getFrontOffsetY() * AABB_OFFSET_BOTTOM ) ) );
|
||||||
final double minZ = Math.max( 0.0, offsetZ + o.getFrontOffsetZ() * AABB_OFFSET_TOP );
|
final double minZ = Math.max( 0.0, offsetZ + ( o.getFrontOffsetZ() < 0 ? AABB_OFFSET_BOTTOM : ( o.getFrontOffsetZ() * AABB_OFFSET_TOP ) ) );
|
||||||
|
|
||||||
final double maxX = Math.min( 1.0, ( 1.0 - offsetX ) + o.getFrontOffsetX() * AABB_OFFSET_TOP );
|
final double maxX = Math.min( 1.0, 1.0 - offsetX - ( o.getFrontOffsetX() < 0 ? AABB_OFFSET_TOP : ( o.getFrontOffsetX() * AABB_OFFSET_BOTTOM ) ) );
|
||||||
final double maxY = Math.min( 1.0, ( 1.0 - offsetY ) - o.getFrontOffsetY() * AABB_OFFSET_TOP );
|
final double maxY = Math.min( 1.0, 1.0 - offsetY - ( o.getFrontOffsetY() < 0 ? AABB_OFFSET_BOTTOM : ( o.getFrontOffsetY() * AABB_OFFSET_TOP ) ) );
|
||||||
final double maxZ = Math.min( 1.0, ( 1.0 - offsetZ ) + o.getFrontOffsetZ() * AABB_OFFSET_TOP );
|
final double maxZ = Math.min( 1.0, 1.0 - offsetZ - ( o.getFrontOffsetZ() < 0 ? AABB_OFFSET_TOP : ( o.getFrontOffsetZ() * AABB_OFFSET_BOTTOM ) ) );
|
||||||
|
|
||||||
return new AxisAlignedBB( minX, minY, minZ, maxX, maxY, maxZ );
|
return new AxisAlignedBB( minX, minY, minZ, maxX, maxY, maxZ );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,69 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of Applied Energistics 2.
|
||||||
|
* Copyright (c) 2013 - 2017, AlgorithmX2, All rights reserved.
|
||||||
|
*
|
||||||
|
* Applied Energistics 2 is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Applied Energistics 2 is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package appeng.client.render;
|
||||||
|
|
||||||
|
|
||||||
|
import javax.vecmath.Matrix4f;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
|
|
||||||
|
import net.minecraft.client.renderer.block.model.IBakedModel;
|
||||||
|
import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
|
||||||
|
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
||||||
|
|
||||||
|
|
||||||
|
public abstract class DelegateBakedModel implements IBakedModel
|
||||||
|
{
|
||||||
|
private IBakedModel baseModel;
|
||||||
|
|
||||||
|
protected DelegateBakedModel( IBakedModel base )
|
||||||
|
{
|
||||||
|
this.baseModel = base;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Pair<? extends IBakedModel, Matrix4f> handlePerspective( ItemCameraTransforms.TransformType type )
|
||||||
|
{
|
||||||
|
Pair<? extends IBakedModel, Matrix4f> pair = this.baseModel.handlePerspective( type );
|
||||||
|
return Pair.of( this, pair.getValue() );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TextureAtlasSprite getParticleTexture()
|
||||||
|
{
|
||||||
|
return this.baseModel.getParticleTexture();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemCameraTransforms getItemCameraTransforms()
|
||||||
|
{
|
||||||
|
return this.baseModel.getItemCameraTransforms();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isAmbientOcclusion()
|
||||||
|
{
|
||||||
|
return this.baseModel.isAmbientOcclusion();
|
||||||
|
}
|
||||||
|
|
||||||
|
public IBakedModel getBaseModel()
|
||||||
|
{
|
||||||
|
return this.baseModel;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -27,9 +27,7 @@ import javax.annotation.Nullable;
|
|||||||
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.block.model.ItemOverrideList;
|
||||||
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
|
||||||
import net.minecraft.client.renderer.vertex.VertexFormat;
|
import net.minecraft.client.renderer.vertex.VertexFormat;
|
||||||
import net.minecraft.entity.EntityLivingBase;
|
import net.minecraft.entity.EntityLivingBase;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
@@ -44,16 +42,13 @@ import appeng.items.parts.ItemFacade;
|
|||||||
* on the item stack.
|
* on the item stack.
|
||||||
* A custom Item Override List is used to accomplish this.
|
* A custom Item Override List is used to accomplish this.
|
||||||
*/
|
*/
|
||||||
public class FacadeDispatcherBakedModel implements IBakedModel
|
public class FacadeDispatcherBakedModel extends DelegateBakedModel
|
||||||
{
|
{
|
||||||
|
|
||||||
private final IBakedModel baseModel;
|
|
||||||
|
|
||||||
private final VertexFormat format;
|
private final VertexFormat format;
|
||||||
|
|
||||||
public FacadeDispatcherBakedModel( IBakedModel baseModel, VertexFormat format )
|
public FacadeDispatcherBakedModel( IBakedModel baseModel, VertexFormat format )
|
||||||
{
|
{
|
||||||
this.baseModel = baseModel;
|
super( baseModel );
|
||||||
this.format = format;
|
this.format = format;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,16 +59,10 @@ public class FacadeDispatcherBakedModel implements IBakedModel
|
|||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isAmbientOcclusion()
|
|
||||||
{
|
|
||||||
return this.baseModel.isAmbientOcclusion();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isGui3d()
|
public boolean isGui3d()
|
||||||
{
|
{
|
||||||
return this.baseModel.isGui3d();
|
return this.getBaseModel().isGui3d();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -82,18 +71,6 @@ public class FacadeDispatcherBakedModel implements IBakedModel
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public TextureAtlasSprite getParticleTexture()
|
|
||||||
{
|
|
||||||
return this.baseModel.getParticleTexture();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemCameraTransforms getItemCameraTransforms()
|
|
||||||
{
|
|
||||||
return this.baseModel.getItemCameraTransforms();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemOverrideList getOverrides()
|
public ItemOverrideList getOverrides()
|
||||||
{
|
{
|
||||||
@@ -112,7 +89,8 @@ public class FacadeDispatcherBakedModel implements IBakedModel
|
|||||||
IBlockState state = itemFacade.getTextureBlockState( stack );
|
IBlockState state = itemFacade.getTextureBlockState( stack );
|
||||||
ItemStack textureItem = itemFacade.getTextureItem( stack );
|
ItemStack textureItem = itemFacade.getTextureItem( stack );
|
||||||
|
|
||||||
return new FacadeWithBlockBakedModel( FacadeDispatcherBakedModel.this.baseModel, state, textureItem, FacadeDispatcherBakedModel.this.format );
|
return new FacadeWithBlockBakedModel( FacadeDispatcherBakedModel.this
|
||||||
|
.getBaseModel(), state, textureItem, FacadeDispatcherBakedModel.this.format );
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ import net.minecraft.util.ResourceLocation;
|
|||||||
import net.minecraftforge.client.model.IModel;
|
import net.minecraftforge.client.model.IModel;
|
||||||
import net.minecraftforge.client.model.ModelLoaderRegistry;
|
import net.minecraftforge.client.model.ModelLoaderRegistry;
|
||||||
import net.minecraftforge.common.model.IModelState;
|
import net.minecraftforge.common.model.IModelState;
|
||||||
import net.minecraftforge.common.model.TRSRTransformation;
|
|
||||||
|
|
||||||
import appeng.core.AppEng;
|
import appeng.core.AppEng;
|
||||||
|
|
||||||
@@ -41,10 +40,27 @@ import appeng.core.AppEng;
|
|||||||
*/
|
*/
|
||||||
public class FacadeItemModel implements IModel
|
public class FacadeItemModel implements IModel
|
||||||
{
|
{
|
||||||
|
|
||||||
// We use this to get the default item transforms and make our lives easier
|
// We use this to get the default item transforms and make our lives easier
|
||||||
private static final ResourceLocation MODEL_BASE = new ResourceLocation( AppEng.MOD_ID, "item/facade_base" );
|
private static final ResourceLocation MODEL_BASE = new ResourceLocation( AppEng.MOD_ID, "item/facade_base" );
|
||||||
|
|
||||||
|
private IModel baseModel = null;
|
||||||
|
|
||||||
|
private IModel getBaseModel()
|
||||||
|
{
|
||||||
|
if( this.baseModel == null )
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
baseModel = ModelLoaderRegistry.getModel( MODEL_BASE );
|
||||||
|
}
|
||||||
|
catch( Exception e )
|
||||||
|
{
|
||||||
|
throw new RuntimeException( e );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return this.baseModel;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<ResourceLocation> getDependencies()
|
public Collection<ResourceLocation> getDependencies()
|
||||||
{
|
{
|
||||||
@@ -60,17 +76,7 @@ public class FacadeItemModel 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;
|
IBakedModel bakedBaseModel = this.getBaseModel().bake( state, format, bakedTextureGetter );
|
||||||
try
|
|
||||||
{
|
|
||||||
baseModel = ModelLoaderRegistry.getModel( MODEL_BASE );
|
|
||||||
}
|
|
||||||
catch( Exception e )
|
|
||||||
{
|
|
||||||
throw new RuntimeException( e );
|
|
||||||
}
|
|
||||||
|
|
||||||
IBakedModel bakedBaseModel = baseModel.bake( state, format, bakedTextureGetter );
|
|
||||||
|
|
||||||
return new FacadeDispatcherBakedModel( bakedBaseModel, format );
|
return new FacadeDispatcherBakedModel( bakedBaseModel, format );
|
||||||
}
|
}
|
||||||
@@ -78,6 +84,6 @@ public class FacadeItemModel implements IModel
|
|||||||
@Override
|
@Override
|
||||||
public IModelState getDefaultState()
|
public IModelState getDefaultState()
|
||||||
{
|
{
|
||||||
return TRSRTransformation.identity();
|
return getBaseModel().getDefaultState();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,9 +29,7 @@ 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.block.model.ItemOverrideList;
|
||||||
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
|
||||||
import net.minecraft.client.renderer.vertex.VertexFormat;
|
import net.minecraft.client.renderer.vertex.VertexFormat;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
@@ -44,11 +42,8 @@ import appeng.client.render.cablebus.FacadeBuilder;
|
|||||||
* This is the actual baked model that will combine the north face of a given block state
|
* This is the actual baked model that will combine the north face of a given block state
|
||||||
* with the base facade item model to achieve what is then actually rendered on screen.
|
* with the base facade item model to achieve what is then actually rendered on screen.
|
||||||
*/
|
*/
|
||||||
public class FacadeWithBlockBakedModel implements IBakedModel
|
public class FacadeWithBlockBakedModel extends DelegateBakedModel
|
||||||
{
|
{
|
||||||
|
|
||||||
private final IBakedModel baseModel;
|
|
||||||
|
|
||||||
private final IBlockState blockState;
|
private final IBlockState blockState;
|
||||||
|
|
||||||
private final IBakedModel textureModel;
|
private final IBakedModel textureModel;
|
||||||
@@ -59,7 +54,7 @@ public class FacadeWithBlockBakedModel implements IBakedModel
|
|||||||
|
|
||||||
public FacadeWithBlockBakedModel( IBakedModel baseModel, IBlockState blockState, ItemStack textureItem, VertexFormat format )
|
public FacadeWithBlockBakedModel( IBakedModel baseModel, IBlockState blockState, ItemStack textureItem, VertexFormat format )
|
||||||
{
|
{
|
||||||
this.baseModel = baseModel;
|
super( baseModel );
|
||||||
this.blockState = blockState;
|
this.blockState = blockState;
|
||||||
this.textureItem = textureItem;
|
this.textureItem = textureItem;
|
||||||
this.textureModel = Minecraft.getMinecraft().getBlockRendererDispatcher().getModelForState( blockState );
|
this.textureModel = Minecraft.getMinecraft().getBlockRendererDispatcher().getModelForState( blockState );
|
||||||
@@ -88,13 +83,7 @@ public class FacadeWithBlockBakedModel implements IBakedModel
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.baseModel.getQuads( state, side, rand );
|
return this.getBaseModel().getQuads( state, side, rand );
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isAmbientOcclusion()
|
|
||||||
{
|
|
||||||
return this.baseModel.isAmbientOcclusion();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -109,18 +98,6 @@ public class FacadeWithBlockBakedModel implements IBakedModel
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public TextureAtlasSprite getParticleTexture()
|
|
||||||
{
|
|
||||||
return this.baseModel.getParticleTexture();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemCameraTransforms getItemCameraTransforms()
|
|
||||||
{
|
|
||||||
return this.baseModel.getItemCameraTransforms();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemOverrideList getOverrides()
|
public ItemOverrideList getOverrides()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ package appeng.client.render.cablebus;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.EnumMap;
|
import java.util.EnumMap;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -52,6 +53,8 @@ import appeng.block.networking.BlockCableBus;
|
|||||||
public class CableBusBakedModel implements IBakedModel
|
public class CableBusBakedModel implements IBakedModel
|
||||||
{
|
{
|
||||||
|
|
||||||
|
private static final Map<CableBusRenderState, List<BakedQuad>> CABLE_MODEL_CACHE = new HashMap<>();
|
||||||
|
|
||||||
private final CableBuilder cableBuilder;
|
private final CableBuilder cableBuilder;
|
||||||
|
|
||||||
private final FacadeBuilder facadeBuilder;
|
private final FacadeBuilder facadeBuilder;
|
||||||
@@ -88,8 +91,15 @@ public class CableBusBakedModel implements IBakedModel
|
|||||||
// translucent facades further down below.
|
// translucent facades further down below.
|
||||||
if( layer == BlockRenderLayer.CUTOUT )
|
if( layer == BlockRenderLayer.CUTOUT )
|
||||||
{
|
{
|
||||||
|
|
||||||
// First, handle the cable at the center of the cable bus
|
// First, handle the cable at the center of the cable bus
|
||||||
this.addCableQuads( renderState, quads );
|
final List<BakedQuad> cableModel = CABLE_MODEL_CACHE.computeIfAbsent( renderState, k ->
|
||||||
|
{
|
||||||
|
final List<BakedQuad> model = new ArrayList<>();
|
||||||
|
this.addCableQuads( renderState, model );
|
||||||
|
return model;
|
||||||
|
} );
|
||||||
|
quads.addAll( cableModel );
|
||||||
|
|
||||||
// Then handle attachments
|
// Then handle attachments
|
||||||
for( EnumFacing facing : EnumFacing.values() )
|
for( EnumFacing facing : EnumFacing.values() )
|
||||||
@@ -308,10 +318,8 @@ public class CableBusBakedModel implements IBakedModel
|
|||||||
|
|
||||||
TextureAtlasSprite particleTexture = bakedModel.getParticleTexture();
|
TextureAtlasSprite particleTexture = bakedModel.getParticleTexture();
|
||||||
|
|
||||||
// If a part sub-model has no particle texture (indicated by it being the missing texture), don't
|
// If a part sub-model has no particle texture (indicated by it being the missing texture),
|
||||||
// add
|
// don't add it, so we don't get ugly missing texture break particles.
|
||||||
// it,
|
|
||||||
// so we don't get ugly missing texture break particles.
|
|
||||||
if( this.textureMap.getMissingSprite() != particleTexture )
|
if( this.textureMap.getMissingSprite() != particleTexture )
|
||||||
{
|
{
|
||||||
result.add( particleTexture );
|
result.add( particleTexture );
|
||||||
@@ -336,7 +344,7 @@ public class CableBusBakedModel implements IBakedModel
|
|||||||
@Override
|
@Override
|
||||||
public boolean isAmbientOcclusion()
|
public boolean isAmbientOcclusion()
|
||||||
{
|
{
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.EnumMap;
|
import java.util.EnumMap;
|
||||||
import java.util.EnumSet;
|
import java.util.EnumSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
import net.minecraft.util.math.AxisAlignedBB;
|
import net.minecraft.util.math.AxisAlignedBB;
|
||||||
@@ -153,4 +154,43 @@ public class CableBusRenderState
|
|||||||
return this.boundingBoxes;
|
return this.boundingBoxes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode()
|
||||||
|
{
|
||||||
|
final int prime = 31;
|
||||||
|
int result = 1;
|
||||||
|
result = prime * result + ( ( this.attachmentConnections == null ) ? 0 : this.attachmentConnections.hashCode() );
|
||||||
|
result = prime * result + ( ( this.cableBusAdjacent == null ) ? 0 : this.cableBusAdjacent.hashCode() );
|
||||||
|
result = prime * result + ( ( this.cableColor == null ) ? 0 : this.cableColor.hashCode() );
|
||||||
|
result = prime * result + ( ( this.cableType == null ) ? 0 : this.cableType.hashCode() );
|
||||||
|
result = prime * result + ( ( this.channelsOnSide == null ) ? 0 : this.channelsOnSide.hashCode() );
|
||||||
|
result = prime * result + ( ( this.connectionTypes == null ) ? 0 : this.connectionTypes.hashCode() );
|
||||||
|
result = prime * result + ( ( this.coreType == null ) ? 0 : this.coreType.hashCode() );
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals( Object obj )
|
||||||
|
{
|
||||||
|
if( this == obj )
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if( obj == null )
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if( getClass() != obj.getClass() )
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final CableBusRenderState other = (CableBusRenderState) obj;
|
||||||
|
|
||||||
|
return this.cableColor == other.cableColor && this.cableType == other.cableType && this.coreType == other.coreType && Objects
|
||||||
|
.equals( this.attachmentConnections, other.attachmentConnections ) && Objects.equals( this.cableBusAdjacent,
|
||||||
|
other.cableBusAdjacent ) && Objects.equals( this.channelsOnSide, other.channelsOnSide ) && Objects.equals( this.connectionTypes,
|
||||||
|
other.connectionTypes );
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,6 +59,8 @@ public class CubeBuilder
|
|||||||
|
|
||||||
private int color = 0xFFFFFFFF;
|
private int color = 0xFFFFFFFF;
|
||||||
|
|
||||||
|
private boolean useStandardUV = false;
|
||||||
|
|
||||||
private boolean renderFullBright;
|
private boolean renderFullBright;
|
||||||
|
|
||||||
public CubeBuilder( VertexFormat format, List<BakedQuad> output )
|
public CubeBuilder( VertexFormat format, List<BakedQuad> output )
|
||||||
@@ -142,7 +144,9 @@ public class CubeBuilder
|
|||||||
UnpackedBakedQuad.Builder builder = new UnpackedBakedQuad.Builder( this.format );
|
UnpackedBakedQuad.Builder builder = new UnpackedBakedQuad.Builder( this.format );
|
||||||
builder.setTexture( texture );
|
builder.setTexture( texture );
|
||||||
builder.setQuadOrientation( face );
|
builder.setQuadOrientation( face );
|
||||||
|
builder.setQuadTint( -1 );
|
||||||
|
builder.setApplyDiffuseLighting( true );
|
||||||
|
|
||||||
UvVector uv = new UvVector();
|
UvVector uv = new UvVector();
|
||||||
|
|
||||||
// The user might have set specific UV coordinates for this face
|
// The user might have set specific UV coordinates for this face
|
||||||
@@ -154,6 +158,10 @@ public class CubeBuilder
|
|||||||
uv.u2 = texture.getInterpolatedU( customUv.z );
|
uv.u2 = texture.getInterpolatedU( customUv.z );
|
||||||
uv.v2 = texture.getInterpolatedV( customUv.w );
|
uv.v2 = texture.getInterpolatedV( customUv.w );
|
||||||
}
|
}
|
||||||
|
else if( this.useStandardUV )
|
||||||
|
{
|
||||||
|
uv = this.getStandardUv( face, texture, x1, y1, z1, x2, y2, z2 );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
uv = this.getDefaultUv( face, texture, x1, y1, z1, x2, y2, z2 );
|
uv = this.getDefaultUv( face, texture, x1, y1, z1, x2, y2, z2 );
|
||||||
@@ -199,8 +207,7 @@ public class CubeBuilder
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
int[] vertexData = builder.build().getVertexData();
|
this.output.add( builder.build() );
|
||||||
this.output.add( new BakedQuad( vertexData, -1, face, texture, true, this.format ) );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private UvVector getDefaultUv( EnumFacing face, TextureAtlasSprite texture, float x1, float y1, float z1, float x2, float y2, float z2 )
|
private UvVector getDefaultUv( EnumFacing face, TextureAtlasSprite texture, float x1, float y1, float z1, float x2, float y2, float z2 )
|
||||||
@@ -251,6 +258,51 @@ public class CubeBuilder
|
|||||||
return uv;
|
return uv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private UvVector getStandardUv( EnumFacing face, TextureAtlasSprite texture, float x1, float y1, float z1, float x2, float y2, float z2 )
|
||||||
|
{
|
||||||
|
UvVector uv = new UvVector();
|
||||||
|
switch( face )
|
||||||
|
{
|
||||||
|
case DOWN:
|
||||||
|
uv.u1 = texture.getInterpolatedU( x1 * 16 );
|
||||||
|
uv.v1 = texture.getInterpolatedV( 16 - z1 * 16 );
|
||||||
|
uv.u2 = texture.getInterpolatedU( x2 * 16 );
|
||||||
|
uv.v2 = texture.getInterpolatedV( 16 - z2 * 16 );
|
||||||
|
break;
|
||||||
|
case UP:
|
||||||
|
uv.u1 = texture.getInterpolatedU( x1 * 16 );
|
||||||
|
uv.v1 = texture.getInterpolatedV( z1 * 16 );
|
||||||
|
uv.u2 = texture.getInterpolatedU( x2 * 16 );
|
||||||
|
uv.v2 = texture.getInterpolatedV( z2 * 16 );
|
||||||
|
break;
|
||||||
|
case NORTH:
|
||||||
|
uv.u1 = texture.getInterpolatedU( 16 - x1 * 16 );
|
||||||
|
uv.v1 = texture.getInterpolatedV( 16 - y1 * 16 );
|
||||||
|
uv.u2 = texture.getInterpolatedU( 16 - x2 * 16 );
|
||||||
|
uv.v2 = texture.getInterpolatedV( 16 - y2 * 16 );
|
||||||
|
break;
|
||||||
|
case SOUTH:
|
||||||
|
uv.u1 = texture.getInterpolatedU( x1 * 16 );
|
||||||
|
uv.v1 = texture.getInterpolatedV( 16 - y1 * 16 );
|
||||||
|
uv.u2 = texture.getInterpolatedU( x2 * 16 );
|
||||||
|
uv.v2 = texture.getInterpolatedV( 16 - y2 * 16 );
|
||||||
|
break;
|
||||||
|
case WEST:
|
||||||
|
uv.u1 = texture.getInterpolatedU( z1 * 16 );
|
||||||
|
uv.v1 = texture.getInterpolatedV( 16 - y1 * 16 );
|
||||||
|
uv.u2 = texture.getInterpolatedU( z2 * 16 );
|
||||||
|
uv.v2 = texture.getInterpolatedV( 16 - y2 * 16 );
|
||||||
|
break;
|
||||||
|
case EAST:
|
||||||
|
uv.u1 = texture.getInterpolatedU( 16 - z2 * 16 );
|
||||||
|
uv.v1 = texture.getInterpolatedV( 16 - y1 * 16 );
|
||||||
|
uv.u2 = texture.getInterpolatedU( 16 - z1 * 16 );
|
||||||
|
uv.v2 = texture.getInterpolatedV( 16 - y2 * 16 );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return uv;
|
||||||
|
}
|
||||||
|
|
||||||
// uv.u1, uv.v1
|
// uv.u1, uv.v1
|
||||||
private void putVertexTL( UnpackedBakedQuad.Builder builder, EnumFacing face, float x, float y, float z, UvVector uv )
|
private void putVertexTL( UnpackedBakedQuad.Builder builder, EnumFacing face, float x, float y, float z, UvVector uv )
|
||||||
{
|
{
|
||||||
@@ -484,6 +536,15 @@ public class CubeBuilder
|
|||||||
this.uvRotations[facing.ordinal()] = (byte) rotation;
|
this.uvRotations[facing.ordinal()] = (byte) rotation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CubeBuilder uses UV optimized for cables by default.
|
||||||
|
* This switches to standard UV coordinates.
|
||||||
|
*/
|
||||||
|
public void useStandardUV()
|
||||||
|
{
|
||||||
|
this.useStandardUV = true;
|
||||||
|
}
|
||||||
|
|
||||||
public List<BakedQuad> getOutput()
|
public List<BakedQuad> getOutput()
|
||||||
{
|
{
|
||||||
return this.output;
|
return this.output;
|
||||||
|
|||||||
@@ -175,6 +175,7 @@ public class FacadeBuilder
|
|||||||
|
|
||||||
// Reset to no color multiplicator
|
// Reset to no color multiplicator
|
||||||
builder.setColorRGB( 0xFFFFFF );
|
builder.setColorRGB( 0xFFFFFF );
|
||||||
|
builder.useStandardUV();
|
||||||
|
|
||||||
// We only render the stilt if we don't intersect with any part directly, and if there's no part on our side
|
// We only render the stilt if we don't intersect with any part directly, and if there's no part on our side
|
||||||
if( renderStilt && busBounds == null && layer == BlockRenderLayer.CUTOUT )
|
if( renderStilt && busBounds == null && layer == BlockRenderLayer.CUTOUT )
|
||||||
@@ -438,22 +439,22 @@ public class FacadeBuilder
|
|||||||
|
|
||||||
private static AxisAlignedBB getFacadeBox( EnumFacing side, boolean thinFacades )
|
private static AxisAlignedBB getFacadeBox( EnumFacing side, boolean thinFacades )
|
||||||
{
|
{
|
||||||
int thickness = thinFacades ? 1 : 2;
|
double thickness = ( thinFacades ? 1 : 2 ) / 16.0;
|
||||||
|
|
||||||
switch( side )
|
switch( side )
|
||||||
{
|
{
|
||||||
case DOWN:
|
case DOWN:
|
||||||
return new AxisAlignedBB( 0.0, 0.0, 0.0, 1.0, ( thickness ) / 16.0, 1.0 );
|
return new AxisAlignedBB( 0.0, 0.0, 0.0, 1.0, thickness, 1.0 );
|
||||||
case EAST:
|
case EAST:
|
||||||
return new AxisAlignedBB( ( 16.0 - thickness ) / 16.0, 0.0, 0.0, 1.0, 1.0, 1.0 );
|
return new AxisAlignedBB( 1.0 - thickness, 0.0, 0.0, 1.0, 1.0, 1.0 );
|
||||||
case NORTH:
|
case NORTH:
|
||||||
return new AxisAlignedBB( 0.0, 0.0, 0.0, 1.0, 1.0, ( thickness ) / 16.0 );
|
return new AxisAlignedBB( 0.0, 0.0, 0.0, 1.0, 1.0, thickness );
|
||||||
case SOUTH:
|
case SOUTH:
|
||||||
return new AxisAlignedBB( 0.0, 0.0, ( 16.0 - thickness ) / 16.0, 1.0, 1.0, 1.0 );
|
return new AxisAlignedBB( 0.0, 0.0, 1.0 - thickness, 1.0, 1.0, 1.0 );
|
||||||
case UP:
|
case UP:
|
||||||
return new AxisAlignedBB( 0.0, ( 16.0 - thickness ) / 16.0, 0.0, 1.0, 1.0, 1.0 );
|
return new AxisAlignedBB( 0.0, 1.0 - thickness, 0.0, 1.0, 1.0, 1.0 );
|
||||||
case WEST:
|
case WEST:
|
||||||
return new AxisAlignedBB( 0.0, 0.0, 0.0, ( thickness ) / 16.0, 1.0, 1.0 );
|
return new AxisAlignedBB( 0.0, 0.0, 0.0, thickness, 1.0, 1.0 );
|
||||||
default:
|
default:
|
||||||
throw new IllegalArgumentException( "Unsupported face: " + side );
|
throw new IllegalArgumentException( "Unsupported face: " + side );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,14 +19,11 @@
|
|||||||
package appeng.container;
|
package appeng.container;
|
||||||
|
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
|
||||||
import java.io.ByteArrayOutputStream;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
@@ -37,8 +34,6 @@ import net.minecraft.inventory.IContainerListener;
|
|||||||
import net.minecraft.inventory.IInventory;
|
import net.minecraft.inventory.IInventory;
|
||||||
import net.minecraft.inventory.Slot;
|
import net.minecraft.inventory.Slot;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.CompressedStreamTools;
|
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraftforge.items.IItemHandler;
|
import net.minecraftforge.items.IItemHandler;
|
||||||
import net.minecraftforge.items.wrapper.PlayerInvWrapper;
|
import net.minecraftforge.items.wrapper.PlayerInvWrapper;
|
||||||
@@ -73,7 +68,7 @@ import appeng.container.slot.SlotPlayerInv;
|
|||||||
import appeng.core.AELog;
|
import appeng.core.AELog;
|
||||||
import appeng.core.sync.network.NetworkHandler;
|
import appeng.core.sync.network.NetworkHandler;
|
||||||
import appeng.core.sync.packets.PacketInventoryAction;
|
import appeng.core.sync.packets.PacketInventoryAction;
|
||||||
import appeng.core.sync.packets.PacketPartialItem;
|
import appeng.core.sync.packets.PacketTargetItemStack;
|
||||||
import appeng.core.sync.packets.PacketValueConfig;
|
import appeng.core.sync.packets.PacketValueConfig;
|
||||||
import appeng.helpers.ICustomNameObject;
|
import appeng.helpers.ICustomNameObject;
|
||||||
import appeng.helpers.InventoryAction;
|
import appeng.helpers.InventoryAction;
|
||||||
@@ -93,7 +88,6 @@ public abstract class AEBaseContainer extends Container
|
|||||||
private final TileEntity tileEntity;
|
private final TileEntity tileEntity;
|
||||||
private final IPart part;
|
private final IPart part;
|
||||||
private final IGuiItemObject obj;
|
private final IGuiItemObject obj;
|
||||||
private final List<PacketPartialItem> dataChunks = new LinkedList<>();
|
|
||||||
private final HashMap<Integer, SyncData> syncData = new HashMap<>();
|
private final HashMap<Integer, SyncData> syncData = new HashMap<>();
|
||||||
private boolean isContainerValid = true;
|
private boolean isContainerValid = true;
|
||||||
private String customName;
|
private String customName;
|
||||||
@@ -175,47 +169,6 @@ public abstract class AEBaseContainer extends Container
|
|||||||
this.prepareSync();
|
this.prepareSync();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void postPartial( final PacketPartialItem packetPartialItem )
|
|
||||||
{
|
|
||||||
this.dataChunks.add( packetPartialItem );
|
|
||||||
if( packetPartialItem.getPageCount() == this.dataChunks.size() )
|
|
||||||
{
|
|
||||||
this.parsePartials();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void parsePartials()
|
|
||||||
{
|
|
||||||
int total = 0;
|
|
||||||
for( final PacketPartialItem ppi : this.dataChunks )
|
|
||||||
{
|
|
||||||
total += ppi.getSize();
|
|
||||||
}
|
|
||||||
|
|
||||||
final byte[] buffer = new byte[total];
|
|
||||||
int cursor = 0;
|
|
||||||
|
|
||||||
for( final PacketPartialItem ppi : this.dataChunks )
|
|
||||||
{
|
|
||||||
cursor = ppi.write( buffer, cursor );
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
final NBTTagCompound data = CompressedStreamTools.readCompressed( new ByteArrayInputStream( buffer ) );
|
|
||||||
if( data != null )
|
|
||||||
{
|
|
||||||
this.setTargetStack( AEItemStack.fromNBT( data ) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch( final IOException e )
|
|
||||||
{
|
|
||||||
AELog.debug( e );
|
|
||||||
}
|
|
||||||
|
|
||||||
this.dataChunks.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
public IAEItemStack getTargetStack()
|
public IAEItemStack getTargetStack()
|
||||||
{
|
{
|
||||||
return this.clientRequestedTargetItem;
|
return this.clientRequestedTargetItem;
|
||||||
@@ -235,47 +188,7 @@ public abstract class AEBaseContainer extends Container
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final ByteArrayOutputStream stream = new ByteArrayOutputStream();
|
NetworkHandler.instance().sendToServer( new PacketTargetItemStack( (AEItemStack) stack ) );
|
||||||
final NBTTagCompound item = new NBTTagCompound();
|
|
||||||
|
|
||||||
if( stack != null )
|
|
||||||
{
|
|
||||||
stack.writeToNBT( item );
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
CompressedStreamTools.writeCompressed( item, stream );
|
|
||||||
|
|
||||||
final int maxChunkSize = 30000;
|
|
||||||
final List<byte[]> miniPackets = new LinkedList<>();
|
|
||||||
|
|
||||||
final byte[] data = stream.toByteArray();
|
|
||||||
|
|
||||||
final ByteArrayInputStream bis = new ByteArrayInputStream( data, 0, stream.size() );
|
|
||||||
while( bis.available() > 0 )
|
|
||||||
{
|
|
||||||
final int nextBLock = bis.available() > maxChunkSize ? maxChunkSize : bis.available();
|
|
||||||
final byte[] nextSegment = new byte[nextBLock];
|
|
||||||
bis.read( nextSegment );
|
|
||||||
miniPackets.add( nextSegment );
|
|
||||||
}
|
|
||||||
bis.close();
|
|
||||||
stream.close();
|
|
||||||
|
|
||||||
int page = 0;
|
|
||||||
for( final byte[] packet : miniPackets )
|
|
||||||
{
|
|
||||||
final PacketPartialItem ppi = new PacketPartialItem( page, miniPackets.size(), packet );
|
|
||||||
page++;
|
|
||||||
NetworkHandler.instance().sendToServer( ppi );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch( final IOException e )
|
|
||||||
{
|
|
||||||
AELog.debug( e );
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.clientRequestedTargetItem = stack == null ? null : stack.copy();
|
this.clientRequestedTargetItem = stack == null ? null : stack.copy();
|
||||||
|
|||||||
@@ -41,11 +41,11 @@ import appeng.core.sync.packets.PacketMatterCannon;
|
|||||||
import appeng.core.sync.packets.PacketMockExplosion;
|
import appeng.core.sync.packets.PacketMockExplosion;
|
||||||
import appeng.core.sync.packets.PacketPaintedEntity;
|
import appeng.core.sync.packets.PacketPaintedEntity;
|
||||||
import appeng.core.sync.packets.PacketPartPlacement;
|
import appeng.core.sync.packets.PacketPartPlacement;
|
||||||
import appeng.core.sync.packets.PacketPartialItem;
|
|
||||||
import appeng.core.sync.packets.PacketPatternSlot;
|
import appeng.core.sync.packets.PacketPatternSlot;
|
||||||
import appeng.core.sync.packets.PacketProgressBar;
|
import appeng.core.sync.packets.PacketProgressBar;
|
||||||
import appeng.core.sync.packets.PacketSwapSlots;
|
import appeng.core.sync.packets.PacketSwapSlots;
|
||||||
import appeng.core.sync.packets.PacketSwitchGuis;
|
import appeng.core.sync.packets.PacketSwitchGuis;
|
||||||
|
import appeng.core.sync.packets.PacketTargetItemStack;
|
||||||
import appeng.core.sync.packets.PacketTransitionEffect;
|
import appeng.core.sync.packets.PacketTransitionEffect;
|
||||||
import appeng.core.sync.packets.PacketValueConfig;
|
import appeng.core.sync.packets.PacketValueConfig;
|
||||||
|
|
||||||
@@ -90,7 +90,7 @@ public class AppEngPacketHandlerBase
|
|||||||
|
|
||||||
PACKET_RECIPE_JEI( PacketJEIRecipe.class ),
|
PACKET_RECIPE_JEI( PacketJEIRecipe.class ),
|
||||||
|
|
||||||
PACKET_PARTIAL_ITEM( PacketPartialItem.class ),
|
PACKET_TARGET_ITEM( PacketTargetItemStack.class ),
|
||||||
|
|
||||||
PACKET_CRAFTING_REQUEST( PacketCraftRequest.class ),
|
PACKET_CRAFTING_REQUEST( PacketCraftRequest.class ),
|
||||||
|
|
||||||
|
|||||||
+36
-30
@@ -25,35 +25,56 @@ import io.netty.buffer.Unpooled;
|
|||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
|
||||||
import appeng.container.AEBaseContainer;
|
import appeng.container.AEBaseContainer;
|
||||||
|
import appeng.core.AELog;
|
||||||
import appeng.core.sync.AppEngPacket;
|
import appeng.core.sync.AppEngPacket;
|
||||||
import appeng.core.sync.network.INetworkInfo;
|
import appeng.core.sync.network.INetworkInfo;
|
||||||
|
import appeng.util.item.AEItemStack;
|
||||||
|
|
||||||
|
|
||||||
public class PacketPartialItem extends AppEngPacket
|
public class PacketTargetItemStack extends AppEngPacket
|
||||||
{
|
{
|
||||||
|
private AEItemStack stack;
|
||||||
private final short pageNum;
|
|
||||||
private final byte[] data;
|
|
||||||
|
|
||||||
// automatic.
|
// automatic.
|
||||||
public PacketPartialItem( final ByteBuf stream )
|
public PacketTargetItemStack( final ByteBuf stream )
|
||||||
{
|
{
|
||||||
this.pageNum = stream.readShort();
|
try
|
||||||
stream.readBytes( this.data = new byte[stream.readableBytes()] );
|
{
|
||||||
|
if( stream.readableBytes() > 0 )
|
||||||
|
{
|
||||||
|
this.stack = AEItemStack.fromPacket( stream );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.stack = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch( Exception ex )
|
||||||
|
{
|
||||||
|
AELog.debug( ex );
|
||||||
|
this.stack = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// api
|
// api
|
||||||
public PacketPartialItem( final int page, final int maxPages, final byte[] buf )
|
public PacketTargetItemStack( AEItemStack stack )
|
||||||
{
|
{
|
||||||
|
|
||||||
|
this.stack = stack;
|
||||||
|
|
||||||
final ByteBuf data = Unpooled.buffer();
|
final ByteBuf data = Unpooled.buffer();
|
||||||
|
|
||||||
this.pageNum = (short) ( page | ( maxPages << 8 ) );
|
|
||||||
this.data = buf;
|
|
||||||
data.writeInt( this.getPacketID() );
|
data.writeInt( this.getPacketID() );
|
||||||
data.writeShort( this.pageNum );
|
if( stack != null )
|
||||||
data.writeBytes( buf );
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
stack.writeToPacket( data );
|
||||||
|
}
|
||||||
|
catch( Exception ex )
|
||||||
|
{
|
||||||
|
AELog.debug( ex );
|
||||||
|
}
|
||||||
|
}
|
||||||
this.configureWrite( data );
|
this.configureWrite( data );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -62,23 +83,8 @@ public class PacketPartialItem extends AppEngPacket
|
|||||||
{
|
{
|
||||||
if( player.openContainer instanceof AEBaseContainer )
|
if( player.openContainer instanceof AEBaseContainer )
|
||||||
{
|
{
|
||||||
( (AEBaseContainer) player.openContainer ).postPartial( this );
|
( (AEBaseContainer) player.openContainer ).setTargetStack( this.stack );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getPageCount()
|
|
||||||
{
|
|
||||||
return this.pageNum >> 8;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getSize()
|
|
||||||
{
|
|
||||||
return this.data.length;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int write( final byte[] buffer, final int cursor )
|
|
||||||
{
|
|
||||||
System.arraycopy( this.data, 0, buffer, cursor, this.data.length );
|
|
||||||
return cursor + this.data.length;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -85,21 +85,10 @@ class PoweredItemCapabilities implements ICapabilityProvider, IEnergyStorage
|
|||||||
@Override
|
@Override
|
||||||
public int receiveEnergy( int maxReceive, boolean simulate )
|
public int receiveEnergy( int maxReceive, boolean simulate )
|
||||||
{
|
{
|
||||||
if( simulate )
|
final double convertedOffer = PowerUnits.RF.convertTo( PowerUnits.AE, maxReceive );
|
||||||
{
|
final double overflow = this.item.injectAEPower( this.is, convertedOffer, simulate ? Actionable.SIMULATE : Actionable.MODULATE );
|
||||||
final int required = (int) PowerUnits.AE.convertTo( PowerUnits.RF, this.item.getAEMaxPower( this.is ) - this.item.getAECurrentPower( this.is ) );
|
|
||||||
|
|
||||||
if( maxReceive < required )
|
return maxReceive - (int) PowerUnits.AE.convertTo( PowerUnits.RF, overflow );
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return maxReceive - required;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
final double powerRemainder = this.item.injectAEPower( this.is, PowerUnits.RF.convertTo( PowerUnits.AE, maxReceive ), Actionable.MODULATE );
|
|
||||||
return maxReceive - (int) PowerUnits.AE.convertTo( PowerUnits.RF, powerRemainder );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import net.minecraft.entity.player.EntityPlayer;
|
|||||||
import net.minecraft.init.Blocks;
|
import net.minecraft.init.Blocks;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemBlock;
|
import net.minecraft.item.ItemBlock;
|
||||||
|
import net.minecraft.item.ItemBlockSpecial;
|
||||||
import net.minecraft.item.ItemFirework;
|
import net.minecraft.item.ItemFirework;
|
||||||
import net.minecraft.item.ItemSkull;
|
import net.minecraft.item.ItemSkull;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
@@ -452,32 +453,14 @@ public class PartFormationPlane extends PartUpgradeable implements ICellContaine
|
|||||||
|
|
||||||
if( w.getBlockState( tePos ).getBlock().isReplaceable( w, tePos ) )
|
if( w.getBlockState( tePos ).getBlock().isReplaceable( w, tePos ) )
|
||||||
{
|
{
|
||||||
if( placeBlock == YesNo.YES && ( i instanceof ItemBlock || i instanceof IPlantable || i instanceof ItemSkull || i instanceof ItemFirework || i instanceof IPartItem || i == Item
|
if( placeBlock == YesNo.YES && ( i instanceof ItemBlock || i instanceof ItemBlockSpecial || i instanceof IPlantable || i instanceof ItemSkull || i instanceof ItemFirework || i instanceof IPartItem || i == Item
|
||||||
.getItemFromBlock(
|
.getItemFromBlock( Blocks.REEDS ) ) )
|
||||||
Blocks.REEDS ) ) )
|
|
||||||
{
|
{
|
||||||
final EntityPlayer player = Platform.getPlayer( (WorldServer) w );
|
final EntityPlayer player = Platform.getPlayer( (WorldServer) w );
|
||||||
Platform.configurePlayer( player, side, this.getTile() );
|
Platform.configurePlayer( player, side, this.getTile() );
|
||||||
EnumHand hand = player.getActiveHand();
|
EnumHand hand = player.getActiveHand();
|
||||||
player.setHeldItem( hand, is );
|
player.setHeldItem( hand, is );
|
||||||
|
|
||||||
// TODO: LIMIT FIREWORKS
|
|
||||||
/*
|
|
||||||
* if( i instanceof ItemFirework )
|
|
||||||
* {
|
|
||||||
* Chunk c = w.getChunkFromBlockCoords( tePos );
|
|
||||||
* int sum = 0;
|
|
||||||
* for( List Z : c.geten )
|
|
||||||
* {
|
|
||||||
* sum += Z.size();
|
|
||||||
* }
|
|
||||||
* if( sum > 32 )
|
|
||||||
* {
|
|
||||||
* return input;
|
|
||||||
* }
|
|
||||||
* }
|
|
||||||
*/
|
|
||||||
|
|
||||||
maxStorage = is.getCount();
|
maxStorage = is.getCount();
|
||||||
worked = true;
|
worked = true;
|
||||||
if( type == Actionable.MODULATE )
|
if( type == Actionable.MODULATE )
|
||||||
|
|||||||
@@ -19,23 +19,37 @@
|
|||||||
package appeng.tile.misc;
|
package appeng.tile.misc;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
|
||||||
import appeng.api.AEApi;
|
import appeng.api.AEApi;
|
||||||
import appeng.api.config.AccessRestriction;
|
import appeng.api.config.AccessRestriction;
|
||||||
import appeng.api.config.Actionable;
|
import appeng.api.config.Actionable;
|
||||||
import appeng.api.networking.security.IActionSource;
|
import appeng.api.networking.security.IActionSource;
|
||||||
|
import appeng.api.networking.ticking.TickRateModulation;
|
||||||
import appeng.api.storage.IMEMonitor;
|
import appeng.api.storage.IMEMonitor;
|
||||||
import appeng.api.storage.IMEMonitorHandlerReceiver;
|
import appeng.api.storage.IMEMonitorHandlerReceiver;
|
||||||
import appeng.api.storage.IStorageChannel;
|
import appeng.api.storage.IStorageChannel;
|
||||||
import appeng.api.storage.channels.IItemStorageChannel;
|
import appeng.api.storage.channels.IItemStorageChannel;
|
||||||
import appeng.api.storage.data.IAEItemStack;
|
import appeng.api.storage.data.IAEItemStack;
|
||||||
import appeng.api.storage.data.IItemList;
|
import appeng.api.storage.data.IItemList;
|
||||||
|
import appeng.me.helpers.BaseActionSource;
|
||||||
|
import appeng.me.storage.ITickingMonitor;
|
||||||
|
import appeng.util.item.AEItemStack;
|
||||||
import appeng.util.item.ItemList;
|
import appeng.util.item.ItemList;
|
||||||
|
|
||||||
|
|
||||||
class CondenserItemInventory implements IMEMonitor<IAEItemStack>
|
class CondenserItemInventory implements IMEMonitor<IAEItemStack>, ITickingMonitor
|
||||||
{
|
{
|
||||||
|
private final HashMap<IMEMonitorHandlerReceiver<IAEItemStack>, Object> listeners = new HashMap<>();
|
||||||
private final TileCondenser target;
|
private final TileCondenser target;
|
||||||
|
private boolean hasChanged = true;
|
||||||
|
private final ItemList cachedList = new ItemList();
|
||||||
|
private IActionSource actionSource = new BaseActionSource();
|
||||||
|
private ItemList changeSet = new ItemList();
|
||||||
|
|
||||||
CondenserItemInventory( final TileCondenser te )
|
CondenserItemInventory( final TileCondenser te )
|
||||||
{
|
{
|
||||||
@@ -49,30 +63,46 @@ class CondenserItemInventory implements IMEMonitor<IAEItemStack>
|
|||||||
{
|
{
|
||||||
this.target.addPower( input.getStackSize() );
|
this.target.addPower( input.getStackSize() );
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IAEItemStack extractItems( final IAEItemStack request, final Actionable mode, final IActionSource src )
|
public IAEItemStack extractItems( final IAEItemStack request, final Actionable mode, final IActionSource src )
|
||||||
{
|
{
|
||||||
return null;
|
AEItemStack ret = null;
|
||||||
|
ItemStack slotItem = target.getOutputSlot().getStackInSlot( 0 );
|
||||||
|
if( !slotItem.isEmpty() && request.isSameType( slotItem ) )
|
||||||
|
{
|
||||||
|
int count = (int) Math.min( request.getStackSize(), Integer.MAX_VALUE );
|
||||||
|
ret = AEItemStack.fromItemStack( target.getOutputSlot().extractItem( 0, count, mode == Actionable.SIMULATE ) );
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IItemList<IAEItemStack> getAvailableItems( final IItemList out )
|
public IItemList<IAEItemStack> getAvailableItems( final IItemList<IAEItemStack> out )
|
||||||
{
|
{
|
||||||
|
if( !target.getOutputSlot().getStackInSlot( 0 ).isEmpty() )
|
||||||
|
{
|
||||||
|
out.add( AEItemStack.fromItemStack( target.getOutputSlot().getStackInSlot( 0 ) ) );
|
||||||
|
}
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IItemList<IAEItemStack> getStorageList()
|
public IItemList<IAEItemStack> getStorageList()
|
||||||
{
|
{
|
||||||
return new ItemList();
|
if( this.hasChanged )
|
||||||
|
{
|
||||||
|
this.hasChanged = false;
|
||||||
|
this.cachedList.resetStatus();
|
||||||
|
return this.getAvailableItems( this.cachedList );
|
||||||
|
}
|
||||||
|
return this.cachedList;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IStorageChannel getChannel()
|
public IStorageChannel<IAEItemStack> getChannel()
|
||||||
{
|
{
|
||||||
return AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class );
|
return AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class );
|
||||||
}
|
}
|
||||||
@@ -80,7 +110,7 @@ class CondenserItemInventory implements IMEMonitor<IAEItemStack>
|
|||||||
@Override
|
@Override
|
||||||
public AccessRestriction getAccess()
|
public AccessRestriction getAccess()
|
||||||
{
|
{
|
||||||
return AccessRestriction.WRITE;
|
return AccessRestriction.READ_WRITE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -114,14 +144,62 @@ class CondenserItemInventory implements IMEMonitor<IAEItemStack>
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addListener( IMEMonitorHandlerReceiver<IAEItemStack> l, Object verificationToken )
|
public void addListener( final IMEMonitorHandlerReceiver<IAEItemStack> l, final Object verificationToken )
|
||||||
{
|
{
|
||||||
// Not implemented since the Condenser automatically voids everything, and there are no updates
|
this.listeners.put( l, verificationToken );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void removeListener( IMEMonitorHandlerReceiver<IAEItemStack> l )
|
public void removeListener( final IMEMonitorHandlerReceiver<IAEItemStack> l )
|
||||||
{
|
{
|
||||||
// Not implemented since we don't remember registered listeners anyway
|
this.listeners.remove( l );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateOutput( ItemStack added, ItemStack removed )
|
||||||
|
{
|
||||||
|
this.hasChanged = true;
|
||||||
|
if( !added.isEmpty() )
|
||||||
|
{
|
||||||
|
this.changeSet.add( AEItemStack.fromItemStack( added ) );
|
||||||
|
}
|
||||||
|
if( !removed.isEmpty() )
|
||||||
|
{
|
||||||
|
this.changeSet.add( AEItemStack.fromItemStack( removed ).setStackSize( -removed.getCount() ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TickRateModulation onTick()
|
||||||
|
{
|
||||||
|
final ItemList currentChanges = this.changeSet;
|
||||||
|
|
||||||
|
if( currentChanges.isEmpty() )
|
||||||
|
{
|
||||||
|
return TickRateModulation.IDLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.changeSet = new ItemList();
|
||||||
|
final Iterator<Entry<IMEMonitorHandlerReceiver<IAEItemStack>, Object>> i = this.listeners.entrySet().iterator();
|
||||||
|
while( i.hasNext() )
|
||||||
|
{
|
||||||
|
final Entry<IMEMonitorHandlerReceiver<IAEItemStack>, Object> l = i.next();
|
||||||
|
final IMEMonitorHandlerReceiver<IAEItemStack> key = l.getKey();
|
||||||
|
if( key.isValid( l.getValue() ) )
|
||||||
|
{
|
||||||
|
key.postChange( this, currentChanges, this.actionSource );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
i.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return TickRateModulation.URGENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setActionSource( IActionSource actionSource )
|
||||||
|
{
|
||||||
|
this.actionSource = actionSource;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,6 +55,8 @@ import appeng.util.ConfigManager;
|
|||||||
import appeng.util.IConfigManagerHost;
|
import appeng.util.IConfigManagerHost;
|
||||||
import appeng.util.inv.InvOperation;
|
import appeng.util.inv.InvOperation;
|
||||||
import appeng.util.inv.WrapperChainedItemHandler;
|
import appeng.util.inv.WrapperChainedItemHandler;
|
||||||
|
import appeng.util.inv.WrapperFilteredItemHandler;
|
||||||
|
import appeng.util.inv.filter.AEItemFilters;
|
||||||
|
|
||||||
|
|
||||||
public class TileCondenser extends AEBaseInvTile implements IConfigManagerHost, IConfigurableObject
|
public class TileCondenser extends AEBaseInvTile implements IConfigManagerHost, IConfigurableObject
|
||||||
@@ -62,14 +64,16 @@ public class TileCondenser extends AEBaseInvTile implements IConfigManagerHost,
|
|||||||
|
|
||||||
public static final int BYTE_MULTIPLIER = 8;
|
public static final int BYTE_MULTIPLIER = 8;
|
||||||
|
|
||||||
private final AppEngInternalInventory inv = new AppEngInternalInventory( this, 2 );
|
|
||||||
private final ConfigManager cm = new ConfigManager( this );
|
private final ConfigManager cm = new ConfigManager( this );
|
||||||
|
|
||||||
|
private final AppEngInternalInventory outputSlot = new AppEngInternalInventory( this, 1 );
|
||||||
|
private final AppEngInternalInventory storageSlot = new AppEngInternalInventory( this, 1 );
|
||||||
private final IItemHandler inputSlot = new CondenseItemHandler();
|
private final IItemHandler inputSlot = new CondenseItemHandler();
|
||||||
private final IFluidHandler fluidHandler = new FluidHandler();
|
private final IFluidHandler fluidHandler = new FluidHandler();
|
||||||
private final MEHandler meHandler = new MEHandler();
|
private final MEHandler meHandler = new MEHandler();
|
||||||
|
|
||||||
private final IItemHandler combinedInv = new WrapperChainedItemHandler( this.inputSlot, this.inv );
|
private final IItemHandler externalInv = new WrapperChainedItemHandler( this.inputSlot, new WrapperFilteredItemHandler( this.outputSlot, AEItemFilters.EXTRACT_ONLY ) );
|
||||||
|
private final IItemHandler combinedInv = new WrapperChainedItemHandler( this.inputSlot, this.outputSlot, this.storageSlot );
|
||||||
|
|
||||||
private double storedPower = 0;
|
private double storedPower = 0;
|
||||||
|
|
||||||
@@ -97,7 +101,7 @@ public class TileCondenser extends AEBaseInvTile implements IConfigManagerHost,
|
|||||||
|
|
||||||
public double getStorage()
|
public double getStorage()
|
||||||
{
|
{
|
||||||
final ItemStack is = this.inv.getStackInSlot( 1 );
|
final ItemStack is = this.storageSlot.getStackInSlot( 0 );
|
||||||
if( !is.isEmpty() )
|
if( !is.isEmpty() )
|
||||||
{
|
{
|
||||||
if( is.getItem() instanceof IStorageComponent )
|
if( is.getItem() instanceof IStorageComponent )
|
||||||
@@ -135,7 +139,7 @@ public class TileCondenser extends AEBaseInvTile implements IConfigManagerHost,
|
|||||||
|
|
||||||
private boolean canAddOutput( final ItemStack output )
|
private boolean canAddOutput( final ItemStack output )
|
||||||
{
|
{
|
||||||
return this.inv.insertItem( 0, output, true ).isEmpty();
|
return this.outputSlot.insertItem( 0, output, true ).isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -145,7 +149,12 @@ public class TileCondenser extends AEBaseInvTile implements IConfigManagerHost,
|
|||||||
*/
|
*/
|
||||||
private void addOutput( final ItemStack output )
|
private void addOutput( final ItemStack output )
|
||||||
{
|
{
|
||||||
this.inv.insertItem( 0, output, false );
|
this.outputSlot.insertItem( 0, output, false );
|
||||||
|
}
|
||||||
|
|
||||||
|
IItemHandler getOutputSlot()
|
||||||
|
{
|
||||||
|
return this.outputSlot;
|
||||||
}
|
}
|
||||||
|
|
||||||
private ItemStack getOutput()
|
private ItemStack getOutput()
|
||||||
@@ -180,7 +189,10 @@ public class TileCondenser extends AEBaseInvTile implements IConfigManagerHost,
|
|||||||
@Override
|
@Override
|
||||||
public void onChangeInventory( final IItemHandler inv, final int slot, final InvOperation mc, final ItemStack removed, final ItemStack added )
|
public void onChangeInventory( final IItemHandler inv, final int slot, final InvOperation mc, final ItemStack removed, final ItemStack added )
|
||||||
{
|
{
|
||||||
// nothing
|
if( inv == this.outputSlot )
|
||||||
|
{
|
||||||
|
this.meHandler.outputChanged( added, removed );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -225,7 +237,7 @@ public class TileCondenser extends AEBaseInvTile implements IConfigManagerHost,
|
|||||||
{
|
{
|
||||||
if( capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY )
|
if( capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY )
|
||||||
{
|
{
|
||||||
return (T) this.inputSlot;
|
return (T) this.externalInv;
|
||||||
}
|
}
|
||||||
else if( capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY )
|
else if( capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY )
|
||||||
{
|
{
|
||||||
@@ -336,6 +348,11 @@ public class TileCondenser extends AEBaseInvTile implements IConfigManagerHost,
|
|||||||
|
|
||||||
private final CondenserItemInventory itemInventory = new CondenserItemInventory( TileCondenser.this );
|
private final CondenserItemInventory itemInventory = new CondenserItemInventory( TileCondenser.this );
|
||||||
|
|
||||||
|
void outputChanged( ItemStack added, ItemStack removed )
|
||||||
|
{
|
||||||
|
itemInventory.updateOutput( added, removed );
|
||||||
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public IStorageMonitorable getInventory( IActionSource src )
|
public IStorageMonitorable getInventory( IActionSource src )
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ package appeng.util.inv;
|
|||||||
|
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraftforge.items.wrapper.PlayerInvWrapper;
|
import net.minecraftforge.items.wrapper.PlayerMainInvWrapper;
|
||||||
|
|
||||||
import appeng.util.Platform;
|
import appeng.util.Platform;
|
||||||
|
|
||||||
@@ -30,7 +30,7 @@ public class AdaptorItemHandlerPlayerInv extends AdaptorItemHandler
|
|||||||
{
|
{
|
||||||
public AdaptorItemHandlerPlayerInv( final EntityPlayer playerInv )
|
public AdaptorItemHandlerPlayerInv( final EntityPlayer playerInv )
|
||||||
{
|
{
|
||||||
super( new PlayerInvWrapper( playerInv.inventory ) );
|
super( new PlayerMainInvWrapper( playerInv.inventory ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -101,7 +101,6 @@ public final class AEFluidStack extends AEStack<IAEFluidStack> implements IAEFlu
|
|||||||
}
|
}
|
||||||
|
|
||||||
final AEFluidStack fluid = AEFluidStack.fromFluidStack( fluidStack );
|
final AEFluidStack fluid = AEFluidStack.fromFluidStack( fluidStack );
|
||||||
// fluid.priority = i.getInteger( "Priority" );
|
|
||||||
fluid.setStackSize( i.getLong( "Cnt" ) );
|
fluid.setStackSize( i.getLong( "Cnt" ) );
|
||||||
fluid.setCountRequestable( i.getLong( "Req" ) );
|
fluid.setCountRequestable( i.getLong( "Req" ) );
|
||||||
fluid.setCraftable( i.getBoolean( "Craft" ) );
|
fluid.setCraftable( i.getBoolean( "Craft" ) );
|
||||||
@@ -111,12 +110,10 @@ public final class AEFluidStack extends AEStack<IAEFluidStack> implements IAEFlu
|
|||||||
public static IAEFluidStack fromPacket( final ByteBuf data ) throws IOException
|
public static IAEFluidStack fromPacket( final ByteBuf data ) throws IOException
|
||||||
{
|
{
|
||||||
final byte mask = data.readByte();
|
final byte mask = data.readByte();
|
||||||
// byte PriorityType = (byte) (mask & 0x03);
|
|
||||||
final byte stackType = (byte) ( ( mask & 0x0C ) >> 2 );
|
final byte stackType = (byte) ( ( mask & 0x0C ) >> 2 );
|
||||||
final byte countReqType = (byte) ( ( mask & 0x30 ) >> 4 );
|
final byte countReqType = (byte) ( ( mask & 0x30 ) >> 4 );
|
||||||
final boolean isCraftable = ( mask & 0x40 ) > 0;
|
final boolean isCraftable = ( mask & 0x40 ) > 0;
|
||||||
final boolean hasTagCompound = ( mask & 0x80 ) > 0;
|
final boolean hasTagCompound = ( mask & 0x80 ) > 0;
|
||||||
boolean showCraftingLabel = data.readBoolean();
|
|
||||||
|
|
||||||
// don't send this...
|
// don't send this...
|
||||||
final NBTTagCompound d = new NBTTagCompound();
|
final NBTTagCompound d = new NBTTagCompound();
|
||||||
@@ -139,17 +136,11 @@ public final class AEFluidStack extends AEStack<IAEFluidStack> implements IAEFlu
|
|||||||
d.setTag( "tag", CompressedStreamTools.read( di ) );
|
d.setTag( "tag", CompressedStreamTools.read( di ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
// long priority = getPacketValue( PriorityType, data );
|
|
||||||
final long stackSize = getPacketValue( stackType, data );
|
final long stackSize = getPacketValue( stackType, data );
|
||||||
final long countRequestable = getPacketValue( countReqType, data );
|
final long countRequestable = getPacketValue( countReqType, data );
|
||||||
|
|
||||||
final FluidStack fluidStack = FluidStack.loadFluidStackFromNBT( d );
|
final FluidStack fluidStack = FluidStack.loadFluidStackFromNBT( d );
|
||||||
|
|
||||||
if( !showCraftingLabel )
|
|
||||||
{
|
|
||||||
showCraftingLabel = stackSize == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( fluidStack == null )
|
if( fluidStack == null )
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
@@ -170,10 +161,6 @@ public final class AEFluidStack extends AEStack<IAEFluidStack> implements IAEFlu
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if ( priority < ((AEFluidStack) option).priority )
|
|
||||||
// priority = ((AEFluidStack) option).priority;
|
|
||||||
|
|
||||||
this.incStackSize( option.getStackSize() );
|
this.incStackSize( option.getStackSize() );
|
||||||
this.setCountRequestable( this.getCountRequestable() + option.getCountRequestable() );
|
this.setCountRequestable( this.getCountRequestable() + option.getCountRequestable() );
|
||||||
this.setCraftable( this.isCraftable() || option.isCraftable() );
|
this.setCraftable( this.isCraftable() || option.isCraftable() );
|
||||||
@@ -364,7 +351,20 @@ public final class AEFluidStack extends AEStack<IAEFluidStack> implements IAEFlu
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void writeToStream( final ByteBuf i ) throws IOException
|
public void writeToPacket( final ByteBuf i ) throws IOException
|
||||||
|
{
|
||||||
|
final byte mask = (byte) ( ( this.getType( this.getStackSize() ) << 2 ) | ( this
|
||||||
|
.getType( this.getCountRequestable() ) << 4 ) | ( (byte) ( this.isCraftable() ? 1 : 0 ) << 6 ) | ( this.hasTagCompound() ? 1 : 0 ) << 7 );
|
||||||
|
|
||||||
|
i.writeByte( mask );
|
||||||
|
|
||||||
|
writeToStream( i );
|
||||||
|
|
||||||
|
this.putPacketValue( i, this.getStackSize() );
|
||||||
|
this.putPacketValue( i, this.getCountRequestable() );
|
||||||
|
}
|
||||||
|
|
||||||
|
private void writeToStream( final ByteBuf i ) throws IOException
|
||||||
{
|
{
|
||||||
final byte[] name = this.fluid.getName().getBytes( "UTF-8" );
|
final byte[] name = this.fluid.getName().getBytes( "UTF-8" );
|
||||||
i.writeByte( (byte) name.length );
|
i.writeByte( (byte) name.length );
|
||||||
|
|||||||
@@ -19,8 +19,8 @@
|
|||||||
package appeng.util.item;
|
package appeng.util.item;
|
||||||
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
@@ -106,15 +106,23 @@ public final class AEItemStack extends AEStack<IAEItemStack> implements IAEItemS
|
|||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IAEItemStack fromPacket( final ByteBuf data ) throws IOException
|
@Override
|
||||||
|
public void writeToNBT( final NBTTagCompound i )
|
||||||
|
{
|
||||||
|
this.getDefinition().writeToNBT( i );
|
||||||
|
i.setLong( "Cnt", this.getStackSize() );
|
||||||
|
i.setLong( "Req", this.getCountRequestable() );
|
||||||
|
i.setBoolean( "Craft", this.isCraftable() );
|
||||||
|
}
|
||||||
|
|
||||||
|
public static AEItemStack fromPacket( final ByteBuf data )
|
||||||
{
|
{
|
||||||
final byte mask = data.readByte();
|
final byte mask = data.readByte();
|
||||||
// byte PriorityType = (byte) (mask & 0x03);
|
|
||||||
final byte stackType = (byte) ( ( mask & 0x0C ) >> 2 );
|
final byte stackType = (byte) ( ( mask & 0x0C ) >> 2 );
|
||||||
final byte countReqType = (byte) ( ( mask & 0x30 ) >> 4 );
|
final byte countReqType = (byte) ( ( mask & 0x30 ) >> 4 );
|
||||||
final boolean isCraftable = ( mask & 0x40 ) > 0;
|
final boolean isCraftable = ( mask & 0x40 ) > 0;
|
||||||
|
|
||||||
final ItemStack itemstack = ByteBufUtils.readItemStack( data );
|
final ItemStack itemstack = new ItemStack( ByteBufUtils.readTag( data ) );
|
||||||
final long stackSize = getPacketValue( stackType, data );
|
final long stackSize = getPacketValue( stackType, data );
|
||||||
final long countRequestable = getPacketValue( countReqType, data );
|
final long countRequestable = getPacketValue( countReqType, data );
|
||||||
|
|
||||||
@@ -123,13 +131,24 @@ public final class AEItemStack extends AEStack<IAEItemStack> implements IAEItemS
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
final AEItemStack item = AEItemStack.fromItemStack( itemstack );
|
final AEItemStack item = new AEItemStack( AEItemStackRegistry.getRegisteredStack( itemstack ), stackSize );
|
||||||
item.setStackSize( stackSize );
|
|
||||||
item.setCountRequestable( countRequestable );
|
item.setCountRequestable( countRequestable );
|
||||||
item.setCraftable( isCraftable );
|
item.setCraftable( isCraftable );
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeToPacket( final ByteBuf i )
|
||||||
|
{
|
||||||
|
final byte mask = (byte) ( ( this.getType( this.getStackSize() ) << 2 ) | ( this
|
||||||
|
.getType( this.getCountRequestable() ) << 4 ) | ( (byte) ( this.isCraftable() ? 1 : 0 ) << 6 ) | ( this.hasTagCompound() ? 1 : 0 ) << 7 );
|
||||||
|
|
||||||
|
i.writeByte( mask );
|
||||||
|
ByteBufUtils.writeTag( i, this.getDefinition().serializeNBT() );
|
||||||
|
this.putPacketValue( i, this.getStackSize() );
|
||||||
|
this.putPacketValue( i, this.getCountRequestable() );
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void add( final IAEItemStack option )
|
public void add( final IAEItemStack option )
|
||||||
{
|
{
|
||||||
@@ -143,15 +162,6 @@ public final class AEItemStack extends AEStack<IAEItemStack> implements IAEItemS
|
|||||||
this.setCraftable( this.isCraftable() || option.isCraftable() );
|
this.setCraftable( this.isCraftable() || option.isCraftable() );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void writeToNBT( final NBTTagCompound i )
|
|
||||||
{
|
|
||||||
this.getDefinition().writeToNBT( i );
|
|
||||||
i.setLong( "Cnt", this.getStackSize() );
|
|
||||||
i.setLong( "Req", this.getCountRequestable() );
|
|
||||||
i.setBoolean( "Craft", this.isCraftable() );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean fuzzyComparison( final Object st, final FuzzyMode mode )
|
public boolean fuzzyComparison( final Object st, final FuzzyMode mode )
|
||||||
{
|
{
|
||||||
@@ -338,7 +348,7 @@ public final class AEItemStack extends AEStack<IAEItemStack> implements IAEItemS
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.sharedStack == ( (AEItemStack) otherStack ).sharedStack;
|
return Objects.equals( this.sharedStack, ( (AEItemStack) otherStack ).sharedStack );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -424,12 +434,6 @@ public final class AEItemStack extends AEStack<IAEItemStack> implements IAEItemS
|
|||||||
return this.oreReference;
|
return this.oreReference;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void writeToStream( final ByteBuf data ) throws IOException
|
|
||||||
{
|
|
||||||
ByteBufUtils.writeItemStack( data, this.getDefinition() );
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasTagCompound()
|
public boolean hasTagCompound()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -31,15 +31,30 @@ import javax.annotation.Nonnull;
|
|||||||
|
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
|
||||||
|
import appeng.util.Platform;
|
||||||
|
|
||||||
|
|
||||||
public final class AEItemStackRegistry
|
public final class AEItemStackRegistry
|
||||||
{
|
{
|
||||||
private static final WeakHashMap<AESharedItemStack, WeakReference<AESharedItemStack>> REGISTRY = new WeakHashMap<>();
|
private static final WeakHashMap<AESharedItemStack, WeakReference<AESharedItemStack>> SERVER_REGISTRY = new WeakHashMap<>();
|
||||||
|
private static final WeakHashMap<AESharedItemStack, WeakReference<AESharedItemStack>> CLIENT_REGISTRY = new WeakHashMap<>();
|
||||||
|
|
||||||
private AEItemStackRegistry()
|
private AEItemStackRegistry()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static WeakHashMap<AESharedItemStack, WeakReference<AESharedItemStack>> registry()
|
||||||
|
{
|
||||||
|
if( Platform.isClient() )
|
||||||
|
{
|
||||||
|
return CLIENT_REGISTRY;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return SERVER_REGISTRY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static synchronized AESharedItemStack getRegisteredStack( final @Nonnull ItemStack itemStack )
|
static synchronized AESharedItemStack getRegisteredStack( final @Nonnull ItemStack itemStack )
|
||||||
{
|
{
|
||||||
if( itemStack.isEmpty() )
|
if( itemStack.isEmpty() )
|
||||||
@@ -51,7 +66,7 @@ public final class AEItemStackRegistry
|
|||||||
itemStack.setCount( 1 );
|
itemStack.setCount( 1 );
|
||||||
|
|
||||||
AESharedItemStack search = new AESharedItemStack( itemStack );
|
AESharedItemStack search = new AESharedItemStack( itemStack );
|
||||||
WeakReference<AESharedItemStack> weak = REGISTRY.get( search );
|
WeakReference<AESharedItemStack> weak = registry().get( search );
|
||||||
AESharedItemStack ret = null;
|
AESharedItemStack ret = null;
|
||||||
|
|
||||||
if( weak != null )
|
if( weak != null )
|
||||||
@@ -62,7 +77,7 @@ public final class AEItemStackRegistry
|
|||||||
if( ret == null )
|
if( ret == null )
|
||||||
{
|
{
|
||||||
ret = new AESharedItemStack( itemStack.copy() );
|
ret = new AESharedItemStack( itemStack.copy() );
|
||||||
REGISTRY.put( ret, new WeakReference<>( ret ) );
|
registry().put( ret, new WeakReference<>( ret ) );
|
||||||
}
|
}
|
||||||
itemStack.setCount( oldStackSize );
|
itemStack.setCount( oldStackSize );
|
||||||
|
|
||||||
|
|||||||
@@ -56,6 +56,11 @@ final class AESharedItemStack implements Comparable<AESharedItemStack>
|
|||||||
return this.itemDamage;
|
return this.itemDamage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int getItemID()
|
||||||
|
{
|
||||||
|
return this.itemId;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode()
|
public int hashCode()
|
||||||
{
|
{
|
||||||
@@ -104,7 +109,17 @@ final class AESharedItemStack implements Comparable<AESharedItemStack>
|
|||||||
return damageValue;
|
return damageValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.compareNBT( b.getDefinition() );
|
final int nbt = this.compareNBT( b.getDefinition() );
|
||||||
|
if( nbt != 0 )
|
||||||
|
{
|
||||||
|
return nbt;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( !this.itemStack.areCapsCompatible( b.getDefinition() ) )
|
||||||
|
{
|
||||||
|
return System.identityHashCode( this.itemStack ) - System.identityHashCode( b.getDefinition() );
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
private int compareNBT( final ItemStack b )
|
private int compareNBT( final ItemStack b )
|
||||||
|
|||||||
@@ -19,8 +19,6 @@
|
|||||||
package appeng.util.item;
|
package appeng.util.item;
|
||||||
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
|
|
||||||
import appeng.api.storage.data.IAEStack;
|
import appeng.api.storage.data.IAEStack;
|
||||||
@@ -144,23 +142,7 @@ public abstract class AEStack<StackType extends IAEStack<StackType>> implements
|
|||||||
this.countRequestable -= i;
|
this.countRequestable -= i;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
protected byte getType( final long num )
|
||||||
public void writeToPacket( final ByteBuf i ) throws IOException
|
|
||||||
{
|
|
||||||
final byte mask = (byte) ( this.getType( 0 ) | ( this.getType( this.stackSize ) << 2 ) | ( this
|
|
||||||
.getType( this.countRequestable ) << 4 ) | ( (byte) ( this.isCraftable ? 1 : 0 ) << 6 ) | ( this.hasTagCompound() ? 1 : 0 ) << 7 );
|
|
||||||
|
|
||||||
i.writeByte( mask );
|
|
||||||
|
|
||||||
this.writeToStream( i );
|
|
||||||
|
|
||||||
this.putPacketValue( i, this.stackSize );
|
|
||||||
this.putPacketValue( i, this.countRequestable );
|
|
||||||
}
|
|
||||||
|
|
||||||
protected abstract void writeToStream( final ByteBuf data ) throws IOException;
|
|
||||||
|
|
||||||
private byte getType( final long num )
|
|
||||||
{
|
{
|
||||||
if( num <= 255 )
|
if( num <= 255 )
|
||||||
{
|
{
|
||||||
@@ -182,7 +164,7 @@ public abstract class AEStack<StackType extends IAEStack<StackType>> implements
|
|||||||
|
|
||||||
abstract boolean hasTagCompound();
|
abstract boolean hasTagCompound();
|
||||||
|
|
||||||
private void putPacketValue( final ByteBuf tag, final long num )
|
protected void putPacketValue( final ByteBuf tag, final long num )
|
||||||
{
|
{
|
||||||
if( num <= 255 )
|
if( num <= 255 )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,10 +1,15 @@
|
|||||||
{
|
{
|
||||||
"display": {
|
"display": {
|
||||||
"icon": {
|
"icon": {
|
||||||
"item": "appliedenergistics2:part", "data": 16
|
"item": "appliedenergistics2:part",
|
||||||
},
|
"data": 16
|
||||||
"title": { "translate": "achievement.ae2.GlassCable" },
|
},
|
||||||
"description": { "translate": "achievement.ae2.GlassCable.desc" }
|
"title": {
|
||||||
|
"translate": "achievement.ae2.GlassCable"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"translate": "achievement.ae2.GlassCable.desc"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"parent": "appliedenergistics2:main/fluix",
|
"parent": "appliedenergistics2:main/fluix",
|
||||||
"criteria": {
|
"criteria": {
|
||||||
@@ -13,11 +18,11 @@
|
|||||||
"conditions": {
|
"conditions": {
|
||||||
"items": [
|
"items": [
|
||||||
{
|
{
|
||||||
"type": "appliedenergistics2:part",
|
"type": "appliedenergistics2:part",
|
||||||
"part": "CABLE_GLASS"
|
"part": "CABLE_GLASS"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-8
@@ -1,11 +1,15 @@
|
|||||||
{
|
{
|
||||||
"display": {
|
"display": {
|
||||||
"icon": {
|
"icon": {
|
||||||
"item": "appliedenergistics2:material",
|
"item": "appliedenergistics2:material",
|
||||||
"data": 1
|
"data": 1
|
||||||
},
|
},
|
||||||
"title": { "translate": "achievement.ae2.ChargedQuartz" },
|
"title": {
|
||||||
"description": { "translate": "achievement.ae2.ChargedQuartz.desc" }
|
"translate": "achievement.ae2.ChargedQuartz"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"translate": "achievement.ae2.ChargedQuartz.desc"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"parent": "appliedenergistics2:main/root",
|
"parent": "appliedenergistics2:main/root",
|
||||||
"criteria": {
|
"criteria": {
|
||||||
@@ -14,11 +18,11 @@
|
|||||||
"conditions": {
|
"conditions": {
|
||||||
"items": [
|
"items": [
|
||||||
{
|
{
|
||||||
"item": "appliedenergistics2:material",
|
"item": "appliedenergistics2:material",
|
||||||
"data": 1
|
"data": 1
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,14 @@
|
|||||||
{
|
{
|
||||||
"display": {
|
"display": {
|
||||||
"icon": {
|
"icon": {
|
||||||
"item": "appliedenergistics2:charger"
|
"item": "appliedenergistics2:charger"
|
||||||
},
|
},
|
||||||
"title": { "translate": "achievement.ae2.Charger" },
|
"title": {
|
||||||
"description": { "translate": "achievement.ae2.Charger.desc" }
|
"translate": "achievement.ae2.Charger"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"translate": "achievement.ae2.Charger.desc"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"parent": "appliedenergistics2:main/charged_quartz",
|
"parent": "appliedenergistics2:main/charged_quartz",
|
||||||
"criteria": {
|
"criteria": {
|
||||||
@@ -19,4 +23,4 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,14 @@
|
|||||||
{
|
{
|
||||||
"display": {
|
"display": {
|
||||||
"icon": { "item": "appliedenergistics2:sky_compass" },
|
"icon": {
|
||||||
"title": { "translate": "achievement.ae2.Compass" },
|
"item": "appliedenergistics2:sky_compass"
|
||||||
"description": { "translate": "achievement.ae2.Compass.desc" }
|
},
|
||||||
|
"title": {
|
||||||
|
"translate": "achievement.ae2.Compass"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"translate": "achievement.ae2.Compass.desc"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"parent": "appliedenergistics2:main/root",
|
"parent": "appliedenergistics2:main/root",
|
||||||
"criteria": {
|
"criteria": {
|
||||||
@@ -17,4 +23,4 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,14 @@
|
|||||||
{
|
{
|
||||||
"display": {
|
"display": {
|
||||||
"icon": {
|
"icon": {
|
||||||
"item": "appliedenergistics2:controller"
|
"item": "appliedenergistics2:controller"
|
||||||
},
|
},
|
||||||
"title": { "translate": "achievement.ae2.Controller" },
|
"title": {
|
||||||
"description": { "translate": "achievement.ae2.Controller.desc" }
|
"translate": "achievement.ae2.Controller"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"translate": "achievement.ae2.Controller.desc"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"parent": "appliedenergistics2:main/presses",
|
"parent": "appliedenergistics2:main/presses",
|
||||||
"criteria": {
|
"criteria": {
|
||||||
@@ -19,4 +23,4 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,14 @@
|
|||||||
{
|
{
|
||||||
"display": {
|
"display": {
|
||||||
"icon": {
|
"icon": {
|
||||||
"item": "appliedenergistics2:crafting_storage_64k"
|
"item": "appliedenergistics2:crafting_storage_64k"
|
||||||
},
|
},
|
||||||
"title": { "translate": "achievement.ae2.CraftingCPU" },
|
"title": {
|
||||||
"description": { "translate": "achievement.ae2.CraftingCPU.desc" }
|
"translate": "achievement.ae2.CraftingCPU"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"translate": "achievement.ae2.CraftingCPU.desc"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"parent": "appliedenergistics2:main/pattern_terminal",
|
"parent": "appliedenergistics2:main/pattern_terminal",
|
||||||
"criteria": {
|
"criteria": {
|
||||||
@@ -47,9 +51,14 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"requirements": [
|
"requirements": [
|
||||||
[ "c1k", "c4k", "c16k", "c64k" ]
|
[
|
||||||
|
"c1k",
|
||||||
|
"c4k",
|
||||||
|
"c16k",
|
||||||
|
"c64k"
|
||||||
|
]
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
+13
-8
@@ -1,10 +1,15 @@
|
|||||||
{
|
{
|
||||||
"display": {
|
"display": {
|
||||||
"icon": {
|
"icon": {
|
||||||
"item": "appliedenergistics2:part", "data": 360
|
"item": "appliedenergistics2:part",
|
||||||
},
|
"data": 360
|
||||||
"title": { "translate": "achievement.ae2.CraftingTerminal" },
|
},
|
||||||
"description": { "translate": "achievement.ae2.CraftingTerminal.desc" }
|
"title": {
|
||||||
|
"translate": "achievement.ae2.CraftingTerminal"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"translate": "achievement.ae2.CraftingTerminal.desc"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"parent": "appliedenergistics2:main/controller",
|
"parent": "appliedenergistics2:main/controller",
|
||||||
"criteria": {
|
"criteria": {
|
||||||
@@ -13,11 +18,11 @@
|
|||||||
"conditions": {
|
"conditions": {
|
||||||
"items": [
|
"items": [
|
||||||
{
|
{
|
||||||
"type": "appliedenergistics2:part",
|
"type": "appliedenergistics2:part",
|
||||||
"part": "CRAFTING_TERMINAL"
|
"part": "CRAFTING_TERMINAL"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,14 @@
|
|||||||
{
|
{
|
||||||
"display": {
|
"display": {
|
||||||
"icon": { "item": "appliedenergistics2:facade" },
|
"icon": {
|
||||||
"title": { "translate": "achievement.ae2.Facade" },
|
"item": "appliedenergistics2:facade"
|
||||||
"description": { "translate": "achievement.ae2.Facade.desc" }
|
},
|
||||||
|
"title": {
|
||||||
|
"translate": "achievement.ae2.Facade"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"translate": "achievement.ae2.Facade.desc"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"parent": "appliedenergistics2:main/cable_glass",
|
"parent": "appliedenergistics2:main/cable_glass",
|
||||||
"criteria": {
|
"criteria": {
|
||||||
@@ -17,4 +23,4 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,15 @@
|
|||||||
{
|
{
|
||||||
"display": {
|
"display": {
|
||||||
"icon": {
|
"icon": {
|
||||||
"item": "appliedenergistics2:material",
|
"item": "appliedenergistics2:material",
|
||||||
"data": 7
|
"data": 7
|
||||||
},
|
},
|
||||||
"title": { "translate": "achievement.ae2.Fluix" },
|
"title": {
|
||||||
"description": { "translate": "achievement.ae2.Fluix.desc" }
|
"translate": "achievement.ae2.Fluix"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"translate": "achievement.ae2.Fluix.desc"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"parent": "appliedenergistics2:main/charged_quartz",
|
"parent": "appliedenergistics2:main/charged_quartz",
|
||||||
"criteria": {
|
"criteria": {
|
||||||
@@ -14,11 +18,11 @@
|
|||||||
"conditions": {
|
"conditions": {
|
||||||
"items": [
|
"items": [
|
||||||
{
|
{
|
||||||
"item": "appliedenergistics2:material",
|
"item": "appliedenergistics2:material",
|
||||||
"data": 7
|
"data": 7
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+10
-6
@@ -1,10 +1,14 @@
|
|||||||
{
|
{
|
||||||
"display": {
|
"display": {
|
||||||
"icon": {
|
"icon": {
|
||||||
"item": "appliedenergistics2:quartz_growth_accelerator"
|
"item": "appliedenergistics2:quartz_growth_accelerator"
|
||||||
},
|
},
|
||||||
"title": { "translate": "achievement.ae2.CrystalGrowthAccelerator" },
|
"title": {
|
||||||
"description": { "translate": "achievement.ae2.CrystalGrowthAccelerator.desc" }
|
"translate": "achievement.ae2.CrystalGrowthAccelerator"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"translate": "achievement.ae2.CrystalGrowthAccelerator.desc"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"parent": "appliedenergistics2:main/fluix",
|
"parent": "appliedenergistics2:main/fluix",
|
||||||
"criteria": {
|
"criteria": {
|
||||||
@@ -19,4 +23,4 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,14 @@
|
|||||||
{
|
{
|
||||||
"display": {
|
"display": {
|
||||||
"icon": {
|
"icon": {
|
||||||
"item": "appliedenergistics2:interface"
|
"item": "appliedenergistics2:interface"
|
||||||
},
|
},
|
||||||
"title": { "translate": "achievement.ae2.Recursive" },
|
"title": {
|
||||||
"description": { "translate": "achievement.ae2.Recursive.desc" }
|
"translate": "achievement.ae2.Recursive"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"translate": "achievement.ae2.Recursive.desc"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"parent": "appliedenergistics2:main/cable_glass",
|
"parent": "appliedenergistics2:main/cable_glass",
|
||||||
"criteria": {
|
"criteria": {
|
||||||
@@ -19,4 +23,4 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,14 @@
|
|||||||
{
|
{
|
||||||
"display": {
|
"display": {
|
||||||
"icon": {
|
"icon": {
|
||||||
"item": "appliedenergistics2:io_port"
|
"item": "appliedenergistics2:io_port"
|
||||||
},
|
},
|
||||||
"title": { "translate": "achievement.ae2.IOPort" },
|
"title": {
|
||||||
"description": { "translate": "achievement.ae2.IOPort.desc" }
|
"translate": "achievement.ae2.IOPort"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"translate": "achievement.ae2.IOPort.desc"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"parent": "appliedenergistics2:main/storage_cell",
|
"parent": "appliedenergistics2:main/storage_cell",
|
||||||
"criteria": {
|
"criteria": {
|
||||||
@@ -19,4 +23,4 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,20 @@
|
|||||||
{
|
{
|
||||||
"display": {
|
"display": {
|
||||||
"icon": {
|
"icon": {
|
||||||
"item": "appliedenergistics2:part", "data": 36
|
"item": "appliedenergistics2:part",
|
||||||
},
|
"data": 36
|
||||||
"title": { "translate": "achievement.ae2.Networking1" },
|
},
|
||||||
"description": { "translate": "achievement.ae2.Networking1.desc" }
|
"title": {
|
||||||
|
"translate": "achievement.ae2.Networking1"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"translate": "achievement.ae2.Networking1.desc"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"parent": "appliedenergistics2:main/cable_glass",
|
"parent": "appliedenergistics2:main/cable_glass",
|
||||||
"criteria": {
|
"criteria": {
|
||||||
"cable": {
|
"cable": {
|
||||||
"trigger": "appliedenergistics2:network_apprentice"
|
"trigger": "appliedenergistics2:network_apprentice"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,15 @@
|
|||||||
{
|
{
|
||||||
"display": {
|
"display": {
|
||||||
"icon": {
|
"icon": {
|
||||||
"item": "appliedenergistics2:part", "data": 56
|
"item": "appliedenergistics2:part",
|
||||||
},
|
"data": 56
|
||||||
"title": { "translate": "achievement.ae2.Networking2" },
|
},
|
||||||
"description": { "translate": "achievement.ae2.Networking2.desc" }
|
"title": {
|
||||||
|
"translate": "achievement.ae2.Networking2"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"translate": "achievement.ae2.Networking2.desc"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"parent": "appliedenergistics2:main/network1",
|
"parent": "appliedenergistics2:main/network1",
|
||||||
"criteria": {
|
"criteria": {
|
||||||
@@ -12,4 +17,4 @@
|
|||||||
"trigger": "appliedenergistics2:network_engineer"
|
"trigger": "appliedenergistics2:network_engineer"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,15 @@
|
|||||||
{
|
{
|
||||||
"display": {
|
"display": {
|
||||||
"icon": {
|
"icon": {
|
||||||
"item": "appliedenergistics2:part", "data": 76
|
"item": "appliedenergistics2:part",
|
||||||
},
|
"data": 76
|
||||||
"title": { "translate": "achievement.ae2.Networking3" },
|
},
|
||||||
"description": { "translate": "achievement.ae2.Networking3.desc" }
|
"title": {
|
||||||
|
"translate": "achievement.ae2.Networking3"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"translate": "achievement.ae2.Networking3.desc"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"parent": "appliedenergistics2:main/network2",
|
"parent": "appliedenergistics2:main/network2",
|
||||||
"criteria": {
|
"criteria": {
|
||||||
@@ -12,4 +17,4 @@
|
|||||||
"trigger": "appliedenergistics2:network_admin"
|
"trigger": "appliedenergistics2:network_admin"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,14 @@
|
|||||||
{
|
{
|
||||||
"display": {
|
"display": {
|
||||||
"icon": { "item": "appliedenergistics2:network_tool" },
|
"icon": {
|
||||||
"title": { "translate": "achievement.ae2.NetworkTool" },
|
"item": "appliedenergistics2:network_tool"
|
||||||
"description": { "translate": "achievement.ae2.NetworkTool.desc" }
|
},
|
||||||
|
"title": {
|
||||||
|
"translate": "achievement.ae2.NetworkTool"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"translate": "achievement.ae2.NetworkTool.desc"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"parent": "appliedenergistics2:main/controller",
|
"parent": "appliedenergistics2:main/controller",
|
||||||
"criteria": {
|
"criteria": {
|
||||||
@@ -17,4 +23,4 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,15 @@
|
|||||||
{
|
{
|
||||||
"display": {
|
"display": {
|
||||||
"icon": {
|
"icon": {
|
||||||
"item": "appliedenergistics2:part", "data": 460
|
"item": "appliedenergistics2:part",
|
||||||
},
|
"data": 460
|
||||||
"title": { "translate": "achievement.ae2.P2P" },
|
},
|
||||||
"description": { "translate": "achievement.ae2.P2P.desc" }
|
"title": {
|
||||||
|
"translate": "achievement.ae2.P2P"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"translate": "achievement.ae2.P2P.desc"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"parent": "appliedenergistics2:main/cable_glass",
|
"parent": "appliedenergistics2:main/cable_glass",
|
||||||
"criteria": {
|
"criteria": {
|
||||||
@@ -13,11 +18,11 @@
|
|||||||
"conditions": {
|
"conditions": {
|
||||||
"items": [
|
"items": [
|
||||||
{
|
{
|
||||||
"type": "appliedenergistics2:part",
|
"type": "appliedenergistics2:part",
|
||||||
"part": "P2P_TUNNEL_ME"
|
"part": "P2P_TUNNEL_ME"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+13
-8
@@ -1,10 +1,15 @@
|
|||||||
{
|
{
|
||||||
"display": {
|
"display": {
|
||||||
"icon": {
|
"icon": {
|
||||||
"item": "appliedenergistics2:part", "data": 340
|
"item": "appliedenergistics2:part",
|
||||||
},
|
"data": 340
|
||||||
"title": { "translate": "achievement.ae2.PatternTerminal" },
|
},
|
||||||
"description": { "translate": "achievement.ae2.PatternTerminal.desc" }
|
"title": {
|
||||||
|
"translate": "achievement.ae2.PatternTerminal"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"translate": "achievement.ae2.PatternTerminal.desc"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"parent": "appliedenergistics2:main/crafting_terminal",
|
"parent": "appliedenergistics2:main/crafting_terminal",
|
||||||
"criteria": {
|
"criteria": {
|
||||||
@@ -13,11 +18,11 @@
|
|||||||
"conditions": {
|
"conditions": {
|
||||||
"items": [
|
"items": [
|
||||||
{
|
{
|
||||||
"type": "appliedenergistics2:part",
|
"type": "appliedenergistics2:part",
|
||||||
"part": "PATTERN_TERMINAL"
|
"part": "PATTERN_TERMINAL"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,14 @@
|
|||||||
{
|
{
|
||||||
"display": {
|
"display": {
|
||||||
"icon": { "item": "appliedenergistics2:portable_cell" },
|
"icon": {
|
||||||
"title": { "translate": "achievement.ae2.PortableCell" },
|
"item": "appliedenergistics2:portable_cell"
|
||||||
"description": { "translate": "achievement.ae2.PortableCell.desc" }
|
},
|
||||||
|
"title": {
|
||||||
|
"translate": "achievement.ae2.PortableCell"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"translate": "achievement.ae2.PortableCell.desc"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"parent": "appliedenergistics2:main/storage_cell",
|
"parent": "appliedenergistics2:main/storage_cell",
|
||||||
"criteria": {
|
"criteria": {
|
||||||
@@ -17,4 +23,4 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,15 @@
|
|||||||
{
|
{
|
||||||
"display": {
|
"display": {
|
||||||
"icon": { "item": "appliedenergistics2:material", "data": 15 },
|
"icon": {
|
||||||
"title": { "translate": "achievement.ae2.Presses" },
|
"item": "appliedenergistics2:material",
|
||||||
"description": { "translate": "achievement.ae2.Presses.desc" }
|
"data": 15
|
||||||
|
},
|
||||||
|
"title": {
|
||||||
|
"translate": "achievement.ae2.Presses"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"translate": "achievement.ae2.Presses.desc"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"parent": "appliedenergistics2:main/root",
|
"parent": "appliedenergistics2:main/root",
|
||||||
"criteria": {
|
"criteria": {
|
||||||
@@ -11,7 +18,8 @@
|
|||||||
"conditions": {
|
"conditions": {
|
||||||
"items": [
|
"items": [
|
||||||
{
|
{
|
||||||
"item": "appliedenergistics2:material", "data": 13
|
"item": "appliedenergistics2:material",
|
||||||
|
"data": 13
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -21,7 +29,8 @@
|
|||||||
"conditions": {
|
"conditions": {
|
||||||
"items": [
|
"items": [
|
||||||
{
|
{
|
||||||
"item": "appliedenergistics2:material", "data": 14
|
"item": "appliedenergistics2:material",
|
||||||
|
"data": 14
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -31,7 +40,8 @@
|
|||||||
"conditions": {
|
"conditions": {
|
||||||
"items": [
|
"items": [
|
||||||
{
|
{
|
||||||
"item": "appliedenergistics2:material", "data": 15
|
"item": "appliedenergistics2:material",
|
||||||
|
"data": 15
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -41,13 +51,19 @@
|
|||||||
"conditions": {
|
"conditions": {
|
||||||
"items": [
|
"items": [
|
||||||
{
|
{
|
||||||
"item": "appliedenergistics2:material", "data": 19
|
"item": "appliedenergistics2:material",
|
||||||
|
"data": 19
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"requirements": [
|
"requirements": [
|
||||||
[ "calc", "eng", "logic", "silicon" ]
|
[
|
||||||
|
"calc",
|
||||||
|
"eng",
|
||||||
|
"logic",
|
||||||
|
"silicon"
|
||||||
|
]
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,14 @@
|
|||||||
{
|
{
|
||||||
"display": {
|
"display": {
|
||||||
"icon": {
|
"icon": {
|
||||||
"item": "appliedenergistics2:quantum_link"
|
"item": "appliedenergistics2:quantum_link"
|
||||||
},
|
},
|
||||||
"title": { "translate": "achievement.ae2.QNB" },
|
"title": {
|
||||||
"description": { "translate": "achievement.ae2.QNB.desc" }
|
"translate": "achievement.ae2.QNB"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"translate": "achievement.ae2.QNB.desc"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"parent": "appliedenergistics2:main/p2p",
|
"parent": "appliedenergistics2:main/p2p",
|
||||||
"criteria": {
|
"criteria": {
|
||||||
@@ -19,4 +23,4 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,18 @@
|
|||||||
{
|
{
|
||||||
"display": {
|
"display": {
|
||||||
"icon": {
|
"icon": {
|
||||||
"item": "appliedenergistics2:material",
|
"item": "appliedenergistics2:material",
|
||||||
"data": 0
|
"data": 0
|
||||||
},
|
},
|
||||||
"title": { "translate": "achievement.ae2.Root" },
|
"title": {
|
||||||
"description": { "translate": "achievement.ae2.Root.desc" },
|
"translate": "achievement.ae2.Root"
|
||||||
"background": "appliedenergistics2:textures/blocks/sky_stone_brick.png",
|
},
|
||||||
"show_toast": false,
|
"description": {
|
||||||
"announce_to_chat": false
|
"translate": "achievement.ae2.Root.desc"
|
||||||
|
},
|
||||||
|
"background": "appliedenergistics2:textures/blocks/sky_stone_brick.png",
|
||||||
|
"show_toast": false,
|
||||||
|
"announce_to_chat": false
|
||||||
},
|
},
|
||||||
"criteria": {
|
"criteria": {
|
||||||
"certus": {
|
"certus": {
|
||||||
@@ -16,11 +20,11 @@
|
|||||||
"conditions": {
|
"conditions": {
|
||||||
"items": [
|
"items": [
|
||||||
{
|
{
|
||||||
"item": "appliedenergistics2:material",
|
"item": "appliedenergistics2:material",
|
||||||
"data": 0
|
"data": 0
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-7
@@ -1,15 +1,19 @@
|
|||||||
{
|
{
|
||||||
"display": {
|
"display": {
|
||||||
"icon": {
|
"icon": {
|
||||||
"item": "appliedenergistics2:spatial_storage_cell_128_cubed"
|
"item": "appliedenergistics2:spatial_storage_cell_128_cubed"
|
||||||
},
|
},
|
||||||
"title": { "translate": "achievement.ae2.SpatialIOExplorer" },
|
"title": {
|
||||||
"description": { "translate": "achievement.ae2.SpatialIOExplorer.desc" }
|
"translate": "achievement.ae2.SpatialIOExplorer"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"translate": "achievement.ae2.SpatialIOExplorer.desc"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"parent": "appliedenergistics2:main/spatial_ioport",
|
"parent": "appliedenergistics2:main/spatial_ioport",
|
||||||
"criteria": {
|
"criteria": {
|
||||||
"explorer": {
|
"explorer": {
|
||||||
"trigger": "appliedenergistics2:spatial_explorer"
|
"trigger": "appliedenergistics2:spatial_explorer"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+10
-6
@@ -1,10 +1,14 @@
|
|||||||
{
|
{
|
||||||
"display": {
|
"display": {
|
||||||
"icon": {
|
"icon": {
|
||||||
"item": "appliedenergistics2:spatial_io_port"
|
"item": "appliedenergistics2:spatial_io_port"
|
||||||
},
|
},
|
||||||
"title": { "translate": "achievement.ae2.SpatialIO" },
|
"title": {
|
||||||
"description": { "translate": "achievement.ae2.SpatialIO.desc" }
|
"translate": "achievement.ae2.SpatialIO"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"translate": "achievement.ae2.SpatialIO.desc"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"parent": "appliedenergistics2:main/ioport",
|
"parent": "appliedenergistics2:main/ioport",
|
||||||
"criteria": {
|
"criteria": {
|
||||||
@@ -19,4 +23,4 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,15 @@
|
|||||||
{
|
{
|
||||||
"display": {
|
"display": {
|
||||||
"icon": {
|
"icon": {
|
||||||
"item": "appliedenergistics2:part", "data": 220
|
"item": "appliedenergistics2:part",
|
||||||
},
|
"data": 220
|
||||||
"title": { "translate": "achievement.ae2.StorageBus" },
|
},
|
||||||
"description": { "translate": "achievement.ae2.StorageBus.desc" }
|
"title": {
|
||||||
|
"translate": "achievement.ae2.StorageBus"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"translate": "achievement.ae2.StorageBus.desc"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"parent": "appliedenergistics2:main/interface",
|
"parent": "appliedenergistics2:main/interface",
|
||||||
"criteria": {
|
"criteria": {
|
||||||
@@ -13,11 +18,11 @@
|
|||||||
"conditions": {
|
"conditions": {
|
||||||
"items": [
|
"items": [
|
||||||
{
|
{
|
||||||
"type": "appliedenergistics2:part",
|
"type": "appliedenergistics2:part",
|
||||||
"part": "STORAGE_BUS"
|
"part": "STORAGE_BUS"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,14 @@
|
|||||||
{
|
{
|
||||||
"display": {
|
"display": {
|
||||||
"icon": {
|
"icon": {
|
||||||
"item": "appliedenergistics2:storage_cell_64k"
|
"item": "appliedenergistics2:storage_cell_64k"
|
||||||
},
|
},
|
||||||
"title": { "translate": "achievement.ae2.StorageCell" },
|
"title": {
|
||||||
"description": { "translate": "achievement.ae2.StorageCell.desc" }
|
"translate": "achievement.ae2.StorageCell"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"translate": "achievement.ae2.StorageCell.desc"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"parent": "appliedenergistics2:main/controller",
|
"parent": "appliedenergistics2:main/controller",
|
||||||
"criteria": {
|
"criteria": {
|
||||||
@@ -47,9 +51,14 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"requirements": [
|
"requirements": [
|
||||||
[ "c1k", "c4k", "c16k", "c64k" ]
|
[
|
||||||
|
"c1k",
|
||||||
|
"c4k",
|
||||||
|
"c16k",
|
||||||
|
"c64k"
|
||||||
|
]
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"normal": { "model": "appliedenergistics2:builtin/cable_bus" }
|
"normal": {
|
||||||
}
|
"model": "appliedenergistics2:builtin/cable_bus"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,11 +6,15 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"variants": {
|
"variants": {
|
||||||
"normal": [{
|
"normal": [
|
||||||
"model": "appliedenergistics2:charged_quartz_ore"
|
{
|
||||||
}],
|
"model": "appliedenergistics2:charged_quartz_ore"
|
||||||
"inventory": [{
|
}
|
||||||
"model": "cube_all"
|
],
|
||||||
}]
|
"inventory": [
|
||||||
|
{
|
||||||
|
"model": "cube_all"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,60 +1,60 @@
|
|||||||
{
|
{
|
||||||
"forge_marker": 1,
|
"forge_marker": 1,
|
||||||
"defaults": {
|
"defaults": {
|
||||||
"model": "appliedenergistics2:chest/base"
|
"model": "appliedenergistics2:chest/base"
|
||||||
},
|
},
|
||||||
"variants": {
|
"variants": {
|
||||||
"slot_state": {
|
"slot_state": {
|
||||||
"empty": {
|
"empty": {
|
||||||
"submodel": {
|
"submodel": {
|
||||||
"lights": {
|
"lights": {
|
||||||
"model": "appliedenergistics2:chest/lights_off"
|
"model": "appliedenergistics2:chest/lights_off"
|
||||||
},
|
},
|
||||||
"state": {
|
"state": {
|
||||||
"model": "appliedenergistics2:chest/cell_state_empty"
|
"model": "appliedenergistics2:chest/cell_state_empty"
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"offline": {
|
||||||
|
"submodel": {
|
||||||
|
"lights": {
|
||||||
|
"model": "appliedenergistics2:chest/lights_off"
|
||||||
|
},
|
||||||
|
"state": {
|
||||||
|
"model": "appliedenergistics2:chest/cell_state_offline"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"online": {
|
||||||
|
"submodel": {
|
||||||
|
"lights": {
|
||||||
|
"model": "appliedenergistics2:chest/lights_on"
|
||||||
|
},
|
||||||
|
"state": {
|
||||||
|
"model": "appliedenergistics2:chest/cell_state_online"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"types_full": {
|
||||||
|
"submodel": {
|
||||||
|
"lights": {
|
||||||
|
"model": "appliedenergistics2:chest/lights_on"
|
||||||
|
},
|
||||||
|
"state": {
|
||||||
|
"model": "appliedenergistics2:chest/cell_state_types_full"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"full": {
|
||||||
|
"submodel": {
|
||||||
|
"lights": {
|
||||||
|
"model": "appliedenergistics2:chest/lights_on"
|
||||||
|
},
|
||||||
|
"state": {
|
||||||
|
"model": "appliedenergistics2:chest/cell_state_full"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"offline": {
|
|
||||||
"submodel": {
|
|
||||||
"lights": {
|
|
||||||
"model": "appliedenergistics2:chest/lights_off"
|
|
||||||
},
|
|
||||||
"state": {
|
|
||||||
"model": "appliedenergistics2:chest/cell_state_offline"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"online": {
|
|
||||||
"submodel": {
|
|
||||||
"lights": {
|
|
||||||
"model": "appliedenergistics2:chest/lights_on"
|
|
||||||
},
|
|
||||||
"state": {
|
|
||||||
"model": "appliedenergistics2:chest/cell_state_online"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"types_full": {
|
|
||||||
"submodel": {
|
|
||||||
"lights": {
|
|
||||||
"model": "appliedenergistics2:chest/lights_on"
|
|
||||||
},
|
|
||||||
"state": {
|
|
||||||
"model": "appliedenergistics2:chest/cell_state_types_full"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"full": {
|
|
||||||
"submodel": {
|
|
||||||
"lights": {
|
|
||||||
"model": "appliedenergistics2:chest/lights_on"
|
|
||||||
},
|
|
||||||
"state": {
|
|
||||||
"model": "appliedenergistics2:chest/cell_state_full"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-1
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"variant=default": { "model": "appliedenergistics2:chiseled_quartz_block" }
|
"variant=default": {
|
||||||
|
"model": "appliedenergistics2:chiseled_quartz_block"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"half=bottom,variant=default": { "model": "appliedenergistics2:slabs/chiseled_quartz_half" },
|
"half=bottom,variant=default": {
|
||||||
"half=top,variant=default": { "model": "appliedenergistics2:slabs/chiseled_quartz_upper" }
|
"model": "appliedenergistics2:slabs/chiseled_quartz_half"
|
||||||
|
},
|
||||||
|
"half=top,variant=default": {
|
||||||
|
"model": "appliedenergistics2:slabs/chiseled_quartz_upper"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"normal": { "model": "appliedenergistics2:crafting/accelerator" }
|
"normal": {
|
||||||
}
|
"model": "appliedenergistics2:crafting/accelerator"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"normal": { "model": "appliedenergistics2:crafting/monitor" }
|
"normal": {
|
||||||
}
|
"model": "appliedenergistics2:crafting/monitor"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"normal": { "model": "appliedenergistics2:crafting/storage_16k" }
|
"normal": {
|
||||||
}
|
"model": "appliedenergistics2:crafting/storage_16k"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"normal": { "model": "appliedenergistics2:crafting/storage_1k" }
|
"normal": {
|
||||||
}
|
"model": "appliedenergistics2:crafting/storage_1k"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"normal": { "model": "appliedenergistics2:crafting/storage_4k" }
|
"normal": {
|
||||||
}
|
"model": "appliedenergistics2:crafting/storage_4k"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"normal": { "model": "appliedenergistics2:crafting/storage_64k" }
|
"normal": {
|
||||||
}
|
"model": "appliedenergistics2:crafting/storage_64k"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"normal": { "model": "appliedenergistics2:crafting/unit" }
|
"normal": {
|
||||||
}
|
"model": "appliedenergistics2:crafting/unit"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
{
|
{
|
||||||
"forge_marker": 1,
|
"forge_marker": 1,
|
||||||
"variants": {
|
"variants": {
|
||||||
"normal": { "model": "appliedenergistics2:crank" },
|
"normal": {
|
||||||
"inventory": { "model": "appliedenergistics2:crank_inventory" }
|
"model": "appliedenergistics2:crank"
|
||||||
}
|
},
|
||||||
|
"inventory": {
|
||||||
|
"model": "appliedenergistics2:crank_inventory"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"normal": {
|
"normal": {
|
||||||
"model": "appliedenergistics2:debug/chunk_loader"
|
"model": "appliedenergistics2:debug/chunk_loader"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"normal": {
|
"normal": {
|
||||||
"model": "appliedenergistics2:debug/cube_gen"
|
"model": "appliedenergistics2:debug/cube_gen"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"normal": {
|
"normal": {
|
||||||
"model": "appliedenergistics2:debug/item_gen"
|
"model": "appliedenergistics2:debug/item_gen"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"normal": {
|
"normal": {
|
||||||
"model": "appliedenergistics2:debug/phantom_node"
|
"model": "appliedenergistics2:debug/phantom_node"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"normal": { "model": "appliedenergistics2:builtin/drive" }
|
"normal": {
|
||||||
}
|
"model": "appliedenergistics2:builtin/drive"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"variant=default": { "model": "appliedenergistics2:fluix_block" }
|
"variant=default": {
|
||||||
|
"model": "appliedenergistics2:fluix_block"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"half=bottom,variant=default": { "model": "appliedenergistics2:slabs/fluix_half" },
|
"half=bottom,variant=default": {
|
||||||
"half=top,variant=default": { "model": "appliedenergistics2:slabs/fluix_upper" }
|
"model": "appliedenergistics2:slabs/fluix_half"
|
||||||
|
},
|
||||||
|
"half=top,variant=default": {
|
||||||
|
"model": "appliedenergistics2:slabs/fluix_upper"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,11 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"omnidirectional=true": { "model": "appliedenergistics2:interface" },
|
"omnidirectional=true": {
|
||||||
"omnidirectional=false": { "model": "appliedenergistics2:interface_oriented", "x": 90 }
|
"model": "appliedenergistics2:interface"
|
||||||
}
|
},
|
||||||
|
"omnidirectional=false": {
|
||||||
|
"model": "appliedenergistics2:interface_oriented",
|
||||||
|
"x": 90
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"normal": {
|
"normal": {
|
||||||
"model": "appliedenergistics2:matrix_frame"
|
"model": "appliedenergistics2:matrix_frame"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+12
-11
@@ -1,14 +1,15 @@
|
|||||||
{
|
{
|
||||||
"forge_marker": 1,
|
"forge_marker": 1,
|
||||||
"defaults": {
|
"defaults": {
|
||||||
"model": "appliedenergistics2:molecular_assembler"
|
"model": "appliedenergistics2:molecular_assembler"
|
||||||
},
|
},
|
||||||
"variants": {
|
"variants": {
|
||||||
"powered": {
|
"powered": {
|
||||||
"false": {},
|
"false": {
|
||||||
"true": {
|
},
|
||||||
"submodel": "appliedenergistics2:molecular_assembler_lights"
|
"true": {
|
||||||
}
|
"submodel": "appliedenergistics2:molecular_assembler_lights"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"normal": {
|
"normal": {
|
||||||
"model": "appliedenergistics2:paint"
|
"model": "appliedenergistics2:paint"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"formed=false": { "model": "appliedenergistics2:qnb/link" },
|
"formed=false": {
|
||||||
"formed=true": { "model": "appliedenergistics2:qnb/qnb_formed" }
|
"model": "appliedenergistics2:qnb/link"
|
||||||
}
|
},
|
||||||
|
"formed=true": {
|
||||||
|
"model": "appliedenergistics2:qnb/qnb_formed"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"formed=false": { "model": "appliedenergistics2:qnb/ring" },
|
"formed=false": {
|
||||||
"formed=true": { "model": "appliedenergistics2:qnb/qnb_formed" }
|
"model": "appliedenergistics2:qnb/ring"
|
||||||
}
|
},
|
||||||
|
"formed=true": {
|
||||||
|
"model": "appliedenergistics2:qnb/qnb_formed"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"variant=default": { "model": "appliedenergistics2:quartz_block" }
|
"variant=default": {
|
||||||
|
"model": "appliedenergistics2:quartz_block"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-1
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"variant=default": { "model": "appliedenergistics2:quartz_pillar" }
|
"variant=default": {
|
||||||
|
"model": "appliedenergistics2:quartz_pillar"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"half=bottom,variant=default": { "model": "appliedenergistics2:slabs/quartz_pillar_half" },
|
"half=bottom,variant=default": {
|
||||||
"half=top,variant=default": { "model": "appliedenergistics2:slabs/quartz_pillar_upper" }
|
"model": "appliedenergistics2:slabs/quartz_pillar_half"
|
||||||
|
},
|
||||||
|
"half=top,variant=default": {
|
||||||
|
"model": "appliedenergistics2:slabs/quartz_pillar_upper"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"half=bottom,variant=default": { "model": "appliedenergistics2:slabs/quartz_half" },
|
"half=bottom,variant=default": {
|
||||||
"half=top,variant=default": { "model": "appliedenergistics2:slabs/quartz_upper" }
|
"model": "appliedenergistics2:slabs/quartz_half"
|
||||||
|
},
|
||||||
|
"half=top,variant=default": {
|
||||||
|
"model": "appliedenergistics2:slabs/quartz_upper"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"powered=false": { "model": "appliedenergistics2:security_station_off" },
|
"powered=false": {
|
||||||
"powered=true": { "model": "appliedenergistics2:security_station_on" }
|
"model": "appliedenergistics2:security_station_off"
|
||||||
}
|
},
|
||||||
|
"powered=true": {
|
||||||
|
"model": "appliedenergistics2:security_station_on"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"normal": { "model": "appliedenergistics2:builtin/sky_compass" }
|
"normal": {
|
||||||
}
|
"model": "appliedenergistics2:builtin/sky_compass"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-1
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"variant=default": { "model": "appliedenergistics2:sky_stone_brick" }
|
"variant=default": {
|
||||||
|
"model": "appliedenergistics2:sky_stone_brick"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"half=bottom,variant=default": { "model": "appliedenergistics2:slabs/sky_stone_brick_half" },
|
"half=bottom,variant=default": {
|
||||||
"half=top,variant=default": { "model": "appliedenergistics2:slabs/sky_stone_brick_upper" }
|
"model": "appliedenergistics2:slabs/sky_stone_brick_half"
|
||||||
|
},
|
||||||
|
"half=top,variant=default": {
|
||||||
|
"model": "appliedenergistics2:slabs/sky_stone_brick_upper"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
{
|
{
|
||||||
"__comment": "This block is rendered via TESR, so this is only used for the particle texture.",
|
"__comment": "This block is rendered via TESR, so this is only used for the particle texture.",
|
||||||
"variants": {
|
"variants": {
|
||||||
"normal": { "model": "appliedenergistics2:sky_stone_block" }
|
"normal": {
|
||||||
}
|
"model": "appliedenergistics2:sky_stone_block"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-1
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"variant=default": { "model": "appliedenergistics2:sky_stone_block" }
|
"variant=default": {
|
||||||
|
"model": "appliedenergistics2:sky_stone_block"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"half=bottom,variant=default": { "model": "appliedenergistics2:slabs/sky_stone_half" },
|
"half=bottom,variant=default": {
|
||||||
"half=top,variant=default": { "model": "appliedenergistics2:slabs/sky_stone_upper" }
|
"model": "appliedenergistics2:slabs/sky_stone_half"
|
||||||
|
},
|
||||||
|
"half=top,variant=default": {
|
||||||
|
"model": "appliedenergistics2:slabs/sky_stone_upper"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-1
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"variant=default": { "model": "appliedenergistics2:sky_stone_small_brick" }
|
"variant=default": {
|
||||||
|
"model": "appliedenergistics2:sky_stone_small_brick"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-2
@@ -1,6 +1,10 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"half=bottom,variant=default": { "model": "appliedenergistics2:slabs/sky_stone_small_brick_half" },
|
"half=bottom,variant=default": {
|
||||||
"half=top,variant=default": { "model": "appliedenergistics2:slabs/sky_stone_small_brick_upper" }
|
"model": "appliedenergistics2:slabs/sky_stone_small_brick_half"
|
||||||
|
},
|
||||||
|
"half=top,variant=default": {
|
||||||
|
"model": "appliedenergistics2:slabs/sky_stone_small_brick_upper"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-4
@@ -1,6 +1,8 @@
|
|||||||
{
|
{
|
||||||
"__comment": "This block is rendered via TESR, so this is only used for the particle texture.",
|
"__comment": "This block is rendered via TESR, so this is only used for the particle texture.",
|
||||||
"variants": {
|
"variants": {
|
||||||
"normal": { "model": "appliedenergistics2:smooth_sky_stone_block" }
|
"normal": {
|
||||||
}
|
"model": "appliedenergistics2:smooth_sky_stone_block"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-1
@@ -1,5 +1,7 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"variant=default": { "model": "appliedenergistics2:smooth_sky_stone_block" }
|
"variant=default": {
|
||||||
|
"model": "appliedenergistics2:smooth_sky_stone_block"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-2
@@ -1,6 +1,10 @@
|
|||||||
{
|
{
|
||||||
"variants": {
|
"variants": {
|
||||||
"half=bottom,variant=default": { "model": "appliedenergistics2:slabs/smooth_sky_stone_half" },
|
"half=bottom,variant=default": {
|
||||||
"half=top,variant=default": { "model": "appliedenergistics2:slabs/smooth_sky_stone_upper" }
|
"model": "appliedenergistics2:slabs/smooth_sky_stone_half"
|
||||||
|
},
|
||||||
|
"half=top,variant=default": {
|
||||||
|
"model": "appliedenergistics2:slabs/smooth_sky_stone_upper"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,10 +5,10 @@
|
|||||||
"block": "blocks/stone",
|
"block": "blocks/stone",
|
||||||
"quartz": "appliedenergistics2:blocks/charged_quartz_ore_light",
|
"quartz": "appliedenergistics2:blocks/charged_quartz_ore_light",
|
||||||
"particle": "appliedenergistics2:blocks/charged_quartz_ore"
|
"particle": "appliedenergistics2:blocks/charged_quartz_ore"
|
||||||
},
|
},
|
||||||
"elements": [
|
"elements": [
|
||||||
{
|
{
|
||||||
"faces": {
|
"faces": {
|
||||||
"down": {
|
"down": {
|
||||||
"texture": "#block"
|
"texture": "#block"
|
||||||
},
|
},
|
||||||
@@ -40,7 +40,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"faces": {
|
"faces": {
|
||||||
"down": {
|
"down": {
|
||||||
"texture": "#quartz",
|
"texture": "#quartz",
|
||||||
"uvlightmap": {
|
"uvlightmap": {
|
||||||
|
|||||||
@@ -9,159 +9,349 @@
|
|||||||
"elements": [
|
"elements": [
|
||||||
{
|
{
|
||||||
"name": "back",
|
"name": "back",
|
||||||
"from": [ 6, 1, 14 ],
|
"from": [
|
||||||
"to": [ 10, 15, 16 ],
|
6,
|
||||||
|
1,
|
||||||
|
14
|
||||||
|
],
|
||||||
|
"to": [
|
||||||
|
10,
|
||||||
|
15,
|
||||||
|
16
|
||||||
|
],
|
||||||
"faces": {
|
"faces": {
|
||||||
"down": {
|
"down": {
|
||||||
"texture": "#side",
|
"texture": "#side",
|
||||||
"uv": [ 6, 14, 10, 16 ]
|
"uv": [
|
||||||
|
6,
|
||||||
|
14,
|
||||||
|
10,
|
||||||
|
16
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"east": {
|
"east": {
|
||||||
"texture": "#side",
|
"texture": "#side",
|
||||||
"uv": [ 0, 1, 2, 15 ]
|
"uv": [
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
15
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"north": {
|
"north": {
|
||||||
"texture": "#side",
|
"texture": "#side",
|
||||||
"uv": [ 6, 1, 10, 15 ]
|
"uv": [
|
||||||
|
6,
|
||||||
|
1,
|
||||||
|
10,
|
||||||
|
15
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"south": {
|
"south": {
|
||||||
"texture": "#side",
|
"texture": "#side",
|
||||||
"uv": [ 6, 1, 10, 15 ]
|
"uv": [
|
||||||
|
6,
|
||||||
|
1,
|
||||||
|
10,
|
||||||
|
15
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"up": {
|
"up": {
|
||||||
"texture": "#side",
|
"texture": "#side",
|
||||||
"uv": [ 6, 14, 10, 16]
|
"uv": [
|
||||||
|
6,
|
||||||
|
14,
|
||||||
|
10,
|
||||||
|
16
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"west": {
|
"west": {
|
||||||
"texture": "#side",
|
"texture": "#side",
|
||||||
"uv": [ 14, 1, 16, 15 ]
|
"uv": [
|
||||||
|
14,
|
||||||
|
1,
|
||||||
|
16,
|
||||||
|
15
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "bottom",
|
"name": "bottom",
|
||||||
"from": [ 2, 0, 2 ],
|
"from": [
|
||||||
"to": [ 14, 3, 14 ],
|
2,
|
||||||
|
0,
|
||||||
|
2
|
||||||
|
],
|
||||||
|
"to": [
|
||||||
|
14,
|
||||||
|
3,
|
||||||
|
14
|
||||||
|
],
|
||||||
"shade": false,
|
"shade": false,
|
||||||
"faces": {
|
"faces": {
|
||||||
"down": {
|
"down": {
|
||||||
"texture": "#top",
|
"texture": "#top",
|
||||||
"uv": [ 2, 2, 14, 14 ]
|
"uv": [
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
14,
|
||||||
|
14
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"east": {
|
"east": {
|
||||||
"texture": "#side",
|
"texture": "#side",
|
||||||
"uv": [ 2, 13, 14, 16 ]
|
"uv": [
|
||||||
|
2,
|
||||||
|
13,
|
||||||
|
14,
|
||||||
|
16
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"north": {
|
"north": {
|
||||||
"texture": "#side",
|
"texture": "#side",
|
||||||
"uv": [ 2, 13, 14, 16 ]
|
"uv": [
|
||||||
|
2,
|
||||||
|
13,
|
||||||
|
14,
|
||||||
|
16
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"south": {
|
"south": {
|
||||||
"texture": "#side",
|
"texture": "#side",
|
||||||
"uv": [ 2, 13, 14, 16 ]
|
"uv": [
|
||||||
|
2,
|
||||||
|
13,
|
||||||
|
14,
|
||||||
|
16
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"up": {
|
"up": {
|
||||||
"texture": "#side",
|
"texture": "#side",
|
||||||
"uv": [ 2, 2, 14, 14 ]
|
"uv": [
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
14,
|
||||||
|
14
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"west": {
|
"west": {
|
||||||
"texture": "#side",
|
"texture": "#side",
|
||||||
"uv": [ 2, 13, 14, 16 ]
|
"uv": [
|
||||||
|
2,
|
||||||
|
13,
|
||||||
|
14,
|
||||||
|
16
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "top",
|
"name": "top",
|
||||||
"from": [ 2, 13, 2 ],
|
"from": [
|
||||||
"to": [ 14, 16, 14 ],
|
2,
|
||||||
|
13,
|
||||||
|
2
|
||||||
|
],
|
||||||
|
"to": [
|
||||||
|
14,
|
||||||
|
16,
|
||||||
|
14
|
||||||
|
],
|
||||||
"faces": {
|
"faces": {
|
||||||
"down": {
|
"down": {
|
||||||
"texture": "#side",
|
"texture": "#side",
|
||||||
"uv": [ 2, 2, 14, 14 ]
|
"uv": [
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
14,
|
||||||
|
14
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"east": {
|
"east": {
|
||||||
"texture": "#side",
|
"texture": "#side",
|
||||||
"uv": [ 2, 0, 14, 3 ]
|
"uv": [
|
||||||
|
2,
|
||||||
|
0,
|
||||||
|
14,
|
||||||
|
3
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"north": {
|
"north": {
|
||||||
"texture": "#side",
|
"texture": "#side",
|
||||||
"uv": [ 2, 0, 14, 3 ]
|
"uv": [
|
||||||
|
2,
|
||||||
|
0,
|
||||||
|
14,
|
||||||
|
3
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"south": {
|
"south": {
|
||||||
"texture": "#side",
|
"texture": "#side",
|
||||||
"uv": [ 2, 0, 14, 3 ]
|
"uv": [
|
||||||
|
2,
|
||||||
|
0,
|
||||||
|
14,
|
||||||
|
3
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"up": {
|
"up": {
|
||||||
"texture": "#top",
|
"texture": "#top",
|
||||||
"uv": [ 2, 2, 14, 14 ]
|
"uv": [
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
14,
|
||||||
|
14
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"west": {
|
"west": {
|
||||||
"texture": "#side",
|
"texture": "#side",
|
||||||
"uv": [ 2, 0, 14, 3 ]
|
"uv": [
|
||||||
|
2,
|
||||||
|
0,
|
||||||
|
14,
|
||||||
|
3
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "inside-bottom",
|
"name": "inside-bottom",
|
||||||
"from": [ 3, 3, 3 ],
|
"from": [
|
||||||
"to": [ 13, 4, 13 ],
|
3,
|
||||||
|
3,
|
||||||
|
3
|
||||||
|
],
|
||||||
|
"to": [
|
||||||
|
13,
|
||||||
|
4,
|
||||||
|
13
|
||||||
|
],
|
||||||
"shade": false,
|
"shade": false,
|
||||||
"faces": {
|
"faces": {
|
||||||
"down": {
|
"down": {
|
||||||
"texture": "#inside",
|
"texture": "#inside",
|
||||||
"uv": [ 3, 3, 13, 13 ]
|
"uv": [
|
||||||
|
3,
|
||||||
|
3,
|
||||||
|
13,
|
||||||
|
13
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"east": {
|
"east": {
|
||||||
"texture": "#inside",
|
"texture": "#inside",
|
||||||
"uv": [ 3, 15, 13, 16 ]
|
"uv": [
|
||||||
|
3,
|
||||||
|
15,
|
||||||
|
13,
|
||||||
|
16
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"north": {
|
"north": {
|
||||||
"texture": "#inside",
|
"texture": "#inside",
|
||||||
"uv": [ 3, 15, 13, 16 ]
|
"uv": [
|
||||||
|
3,
|
||||||
|
15,
|
||||||
|
13,
|
||||||
|
16
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"south": {
|
"south": {
|
||||||
"texture": "#inside",
|
"texture": "#inside",
|
||||||
"uv": [ 3, 15, 13, 16 ]
|
"uv": [
|
||||||
|
3,
|
||||||
|
15,
|
||||||
|
13,
|
||||||
|
16
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"up": {
|
"up": {
|
||||||
"texture": "#inside",
|
"texture": "#inside",
|
||||||
"uv": [ 3, 3, 13, 13 ]
|
"uv": [
|
||||||
|
3,
|
||||||
|
3,
|
||||||
|
13,
|
||||||
|
13
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"west": {
|
"west": {
|
||||||
"texture": "#inside",
|
"texture": "#inside",
|
||||||
"uv": [ 3, 15, 13, 16 ]
|
"uv": [
|
||||||
|
3,
|
||||||
|
15,
|
||||||
|
13,
|
||||||
|
16
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "inside-top",
|
"name": "inside-top",
|
||||||
"from": [ 3, 12, 3 ],
|
"from": [
|
||||||
"to": [ 13, 13, 13 ],
|
3,
|
||||||
|
12,
|
||||||
|
3
|
||||||
|
],
|
||||||
|
"to": [
|
||||||
|
13,
|
||||||
|
13,
|
||||||
|
13
|
||||||
|
],
|
||||||
"shade": false,
|
"shade": false,
|
||||||
"faces": {
|
"faces": {
|
||||||
"down": {
|
"down": {
|
||||||
"texture": "#inside",
|
"texture": "#inside",
|
||||||
"uv": [ 3, 3, 13, 13 ]
|
"uv": [
|
||||||
|
3,
|
||||||
|
3,
|
||||||
|
13,
|
||||||
|
13
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"east": {
|
"east": {
|
||||||
"texture": "#inside",
|
"texture": "#inside",
|
||||||
"uv": [ 3, 0, 13, 1 ]
|
"uv": [
|
||||||
|
3,
|
||||||
|
0,
|
||||||
|
13,
|
||||||
|
1
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"north": {
|
"north": {
|
||||||
"texture": "#inside",
|
"texture": "#inside",
|
||||||
"uv": [ 3, 0, 13, 1 ]
|
"uv": [
|
||||||
|
3,
|
||||||
|
0,
|
||||||
|
13,
|
||||||
|
1
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"south": {
|
"south": {
|
||||||
"texture": "#inside",
|
"texture": "#inside",
|
||||||
"uv": [ 3, 0, 13, 1 ]
|
"uv": [
|
||||||
|
3,
|
||||||
|
0,
|
||||||
|
13,
|
||||||
|
1
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"up": {
|
"up": {
|
||||||
"texture": "#inside",
|
"texture": "#inside",
|
||||||
"uv": [ 3, 3, 13, 13 ]
|
"uv": [
|
||||||
|
3,
|
||||||
|
3,
|
||||||
|
13,
|
||||||
|
13
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"west": {
|
"west": {
|
||||||
"texture": "#inside",
|
"texture": "#inside",
|
||||||
"uv": [ 3, 0, 13, 1 ]
|
"uv": [
|
||||||
|
3,
|
||||||
|
0,
|
||||||
|
13,
|
||||||
|
1
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"parent": "block/cube",
|
"parent": "block/cube",
|
||||||
"textures": {
|
"textures": {
|
||||||
"particle": "appliedenergistics2:blocks/chest/side",
|
"particle": "appliedenergistics2:blocks/chest/side",
|
||||||
"up": "appliedenergistics2:blocks/chest/top",
|
"up": "appliedenergistics2:blocks/chest/top",
|
||||||
"down": "appliedenergistics2:blocks/chest/bottom",
|
"down": "appliedenergistics2:blocks/chest/bottom",
|
||||||
"north": "appliedenergistics2:blocks/chest/front",
|
"north": "appliedenergistics2:blocks/chest/front",
|
||||||
"east": "appliedenergistics2:blocks/chest/side",
|
"east": "appliedenergistics2:blocks/chest/side",
|
||||||
"south": "appliedenergistics2:blocks/chest/side",
|
"south": "appliedenergistics2:blocks/chest/side",
|
||||||
"west": "appliedenergistics2:blocks/chest/side"
|
"west": "appliedenergistics2:blocks/chest/side"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+22
-12
@@ -1,14 +1,24 @@
|
|||||||
{
|
{
|
||||||
"textures": {
|
"textures": {
|
||||||
"state": "appliedenergistics2:blocks/chest/cell_state_empty"
|
"state": "appliedenergistics2:blocks/chest/cell_state_empty"
|
||||||
},
|
},
|
||||||
"elements": [
|
"elements": [
|
||||||
{
|
{
|
||||||
"from": [0, 0, 0],
|
"from": [
|
||||||
"to": [16, 16, 16],
|
0,
|
||||||
"faces": {
|
0,
|
||||||
"north": {"texture": "#state"}
|
0
|
||||||
}
|
],
|
||||||
}
|
"to": [
|
||||||
]
|
16,
|
||||||
|
16,
|
||||||
|
16
|
||||||
|
],
|
||||||
|
"faces": {
|
||||||
|
"north": {
|
||||||
|
"texture": "#state"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
+44
-20
@@ -1,23 +1,47 @@
|
|||||||
{
|
{
|
||||||
"ae2_uvl_marker": true,
|
"ae2_uvl_marker": true,
|
||||||
"textures": {
|
"textures": {
|
||||||
"backdrop": "appliedenergistics2:blocks/chest/cell_state_backdrop",
|
"backdrop": "appliedenergistics2:blocks/chest/cell_state_backdrop",
|
||||||
"state": "appliedenergistics2:blocks/chest/cell_state_full"
|
"state": "appliedenergistics2:blocks/chest/cell_state_full"
|
||||||
},
|
|
||||||
"elements": [
|
|
||||||
{
|
|
||||||
"from": [0, 0, 0],
|
|
||||||
"to": [16, 16, 16],
|
|
||||||
"faces": {
|
|
||||||
"north": {"texture": "#backdrop" }
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
"elements": [
|
||||||
"from": [0, 0, 0],
|
{
|
||||||
"to": [16, 16, 16],
|
"from": [
|
||||||
"faces": {
|
0,
|
||||||
"north": {"texture": "#state", "uvlightmap": { "block": 0.007, "sky": 0.007 }}
|
0,
|
||||||
}
|
0
|
||||||
}
|
],
|
||||||
]
|
"to": [
|
||||||
|
16,
|
||||||
|
16,
|
||||||
|
16
|
||||||
|
],
|
||||||
|
"faces": {
|
||||||
|
"north": {
|
||||||
|
"texture": "#backdrop"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"to": [
|
||||||
|
16,
|
||||||
|
16,
|
||||||
|
16
|
||||||
|
],
|
||||||
|
"faces": {
|
||||||
|
"north": {
|
||||||
|
"texture": "#state",
|
||||||
|
"uvlightmap": {
|
||||||
|
"block": 0.007,
|
||||||
|
"sky": 0.007
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
+22
-12
@@ -1,14 +1,24 @@
|
|||||||
{
|
{
|
||||||
"textures": {
|
"textures": {
|
||||||
"state": "appliedenergistics2:blocks/chest/cell_state_offline"
|
"state": "appliedenergistics2:blocks/chest/cell_state_offline"
|
||||||
},
|
},
|
||||||
"elements": [
|
"elements": [
|
||||||
{
|
{
|
||||||
"from": [0, 0, 0],
|
"from": [
|
||||||
"to": [16, 16, 16],
|
0,
|
||||||
"faces": {
|
0,
|
||||||
"north": {"texture": "#state"}
|
0
|
||||||
}
|
],
|
||||||
}
|
"to": [
|
||||||
]
|
16,
|
||||||
|
16,
|
||||||
|
16
|
||||||
|
],
|
||||||
|
"faces": {
|
||||||
|
"north": {
|
||||||
|
"texture": "#state"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
+44
-20
@@ -1,23 +1,47 @@
|
|||||||
{
|
{
|
||||||
"ae2_uvl_marker": true,
|
"ae2_uvl_marker": true,
|
||||||
"textures": {
|
"textures": {
|
||||||
"backdrop": "appliedenergistics2:blocks/chest/cell_state_backdrop",
|
"backdrop": "appliedenergistics2:blocks/chest/cell_state_backdrop",
|
||||||
"state": "appliedenergistics2:blocks/chest/cell_state_online"
|
"state": "appliedenergistics2:blocks/chest/cell_state_online"
|
||||||
},
|
|
||||||
"elements": [
|
|
||||||
{
|
|
||||||
"from": [0, 0, 0],
|
|
||||||
"to": [16, 16, 16],
|
|
||||||
"faces": {
|
|
||||||
"north": {"texture": "#backdrop" }
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
"elements": [
|
||||||
"from": [0, 0, 0],
|
{
|
||||||
"to": [16, 16, 16],
|
"from": [
|
||||||
"faces": {
|
0,
|
||||||
"north": {"texture": "#state", "uvlightmap": { "block": 0.007, "sky": 0.007 }}
|
0,
|
||||||
}
|
0
|
||||||
}
|
],
|
||||||
]
|
"to": [
|
||||||
|
16,
|
||||||
|
16,
|
||||||
|
16
|
||||||
|
],
|
||||||
|
"faces": {
|
||||||
|
"north": {
|
||||||
|
"texture": "#backdrop"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"to": [
|
||||||
|
16,
|
||||||
|
16,
|
||||||
|
16
|
||||||
|
],
|
||||||
|
"faces": {
|
||||||
|
"north": {
|
||||||
|
"texture": "#state",
|
||||||
|
"uvlightmap": {
|
||||||
|
"block": 0.007,
|
||||||
|
"sky": 0.007
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
+44
-20
@@ -1,23 +1,47 @@
|
|||||||
{
|
{
|
||||||
"ae2_uvl_marker": true,
|
"ae2_uvl_marker": true,
|
||||||
"textures": {
|
"textures": {
|
||||||
"backdrop": "appliedenergistics2:blocks/chest/cell_state_backdrop",
|
"backdrop": "appliedenergistics2:blocks/chest/cell_state_backdrop",
|
||||||
"state": "appliedenergistics2:blocks/chest/cell_state_types_full"
|
"state": "appliedenergistics2:blocks/chest/cell_state_types_full"
|
||||||
},
|
|
||||||
"elements": [
|
|
||||||
{
|
|
||||||
"from": [0, 0, 0],
|
|
||||||
"to": [16, 16, 16],
|
|
||||||
"faces": {
|
|
||||||
"north": {"texture": "#backdrop" }
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
"elements": [
|
||||||
"from": [0, 0, 0],
|
{
|
||||||
"to": [16, 16, 16],
|
"from": [
|
||||||
"faces": {
|
0,
|
||||||
"north": {"texture": "#state", "uvlightmap": { "block": 0.007, "sky": 0.007 }}
|
0,
|
||||||
}
|
0
|
||||||
}
|
],
|
||||||
]
|
"to": [
|
||||||
|
16,
|
||||||
|
16,
|
||||||
|
16
|
||||||
|
],
|
||||||
|
"faces": {
|
||||||
|
"north": {
|
||||||
|
"texture": "#backdrop"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"to": [
|
||||||
|
16,
|
||||||
|
16,
|
||||||
|
16
|
||||||
|
],
|
||||||
|
"faces": {
|
||||||
|
"north": {
|
||||||
|
"texture": "#state",
|
||||||
|
"uvlightmap": {
|
||||||
|
"block": 0.007,
|
||||||
|
"sky": 0.007
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,25 @@
|
|||||||
{
|
{
|
||||||
"textures": {
|
"textures": {
|
||||||
"lights": "appliedenergistics2:blocks/chest/lights_off"
|
"lights": "appliedenergistics2:blocks/chest/lights_off"
|
||||||
},
|
},
|
||||||
"elements": [
|
"elements": [
|
||||||
{
|
{
|
||||||
"from": [0, 0, 0],
|
"from": [
|
||||||
"to": [16, 16, 16],
|
0,
|
||||||
"faces": {
|
0,
|
||||||
"up": { "texture": "#lights", "tintindex": 3 }
|
0
|
||||||
}
|
],
|
||||||
}
|
"to": [
|
||||||
]
|
16,
|
||||||
|
16,
|
||||||
|
16
|
||||||
|
],
|
||||||
|
"faces": {
|
||||||
|
"up": {
|
||||||
|
"texture": "#lights",
|
||||||
|
"tintindex": 3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user