More Rendering Fixes

This commit is contained in:
Sebastian Hartte
2020-06-07 15:56:48 +02:00
parent 2dc2f90d5b
commit 1c7a28c606
29 changed files with 300 additions and 217 deletions
@@ -66,7 +66,7 @@ public class BlockCharger extends AEBaseTileBlock<TileCharger>
public BlockCharger()
{
super( Properties.create(Material.IRON) );
super( Properties.create(Material.IRON).notSolid() );
this.setFullSize( this.setOpaque( false ) );
}
@@ -26,10 +26,12 @@ import appeng.container.implementations.ContainerWireless;
import appeng.helpers.AEGlassMaterial;
import appeng.tile.networking.TileWireless;
import appeng.util.Platform;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.state.EnumProperty;
import net.minecraft.state.StateContainer;
import net.minecraft.state.properties.BlockStateProperties;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.Direction;
import net.minecraft.util.Hand;
@@ -65,20 +67,16 @@ public class BlockWireless extends AEBaseTileBlock<TileWireless>
public BlockWireless()
{
super( Properties.create(AEGlassMaterial.INSTANCE) );
super( Properties.create(AEGlassMaterial.INSTANCE).notSolid() );
this.setFullSize( false );
this.setOpaque( false );
this.setDefaultState( this.getDefaultState().with( STATE, State.OFF ) );
}
// FIXME This has to be triggered by the tile entity's state changing directly
@Override
public BlockState updatePostPlacement(BlockState stateIn, Direction facing, BlockState facingState, IWorld world, BlockPos pos, BlockPos facingPos) {
protected BlockState updateBlockStateFromTileEntity(BlockState currentState, TileWireless te) {
State teState = State.OFF;
TileWireless te = this.getTileEntity( world, pos );
if( te != null )
{
if( te.isActive() )
{
teState = State.HAS_CHANNEL;
@@ -87,14 +85,12 @@ public class BlockWireless extends AEBaseTileBlock<TileWireless>
{
teState = State.ON;
}
}
return super.updatePostPlacement(stateIn, facing, facingState, world, pos, facingPos)
.with( STATE, teState );
return currentState.with(STATE, teState);
}
@Override
protected void fillStateContainer(StateContainer.Builder builder) {
protected void fillStateContainer(StateContainer.Builder<Block, BlockState> builder) {
super.fillStateContainer(builder);
builder.add(STATE);
}
@@ -173,7 +169,7 @@ public class BlockWireless extends AEBaseTileBlock<TileWireless>
return VoxelShapes.create( new AxisAlignedBB( minX, minY, minZ, maxX, maxY, maxZ ) );
}
return VoxelShapes.fullCube();
return VoxelShapes.empty();
}
@Override
@@ -237,7 +233,7 @@ public class BlockWireless extends AEBaseTileBlock<TileWireless>
}
else
{
return VoxelShapes.fullCube();
return VoxelShapes.empty();
}
}
@@ -19,7 +19,6 @@ public class PaintRendering extends BlockRenderingCustomizer
public void customize( IBlockRendering rendering, IItemRendering itemRendering )
{
rendering.renderType(RenderType.getCutout());
// FIXME rendering.builtInModel( "models/block/paint", new PaintModel() );
// Disable auto rotation
rendering.modelCustomizer( ( location, model ) -> model );
}
@@ -40,9 +40,9 @@ import net.minecraftforge.client.model.data.IModelData;
class PaintSplotchesBakedModel implements IDynamicBakedModel
{
private static final Material TEXTURE_PAINT1 = new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, new ResourceLocation(AppEng.MOD_ID, "blocks/paint1" ));
private static final Material TEXTURE_PAINT2 = new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, new ResourceLocation( AppEng.MOD_ID, "blocks/paint2" ));
private static final Material TEXTURE_PAINT3 = new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, new ResourceLocation( AppEng.MOD_ID, "blocks/paint3" ));
private static final Material TEXTURE_PAINT1 = new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, new ResourceLocation(AppEng.MOD_ID, "block/paint1" ));
private static final Material TEXTURE_PAINT2 = new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, new ResourceLocation( AppEng.MOD_ID, "block/paint2" ));
private static final Material TEXTURE_PAINT3 = new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, new ResourceLocation( AppEng.MOD_ID, "block/paint3" ));
private final TextureAtlasSprite[] textures;
@@ -27,10 +27,10 @@ import java.util.function.Function;
class QnbFormedBakedModel implements IDynamicBakedModel
{
private static final Material TEXTURE_LINK = new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, new ResourceLocation(AppEng.MOD_ID, "blocks/quantum_link" ));
private static final Material TEXTURE_RING = new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, new ResourceLocation( AppEng.MOD_ID, "blocks/quantum_ring" ));
private static final Material TEXTURE_RING_LIGHT = new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, new ResourceLocation( AppEng.MOD_ID, "blocks/quantum_ring_light" ));
private static final Material TEXTURE_RING_LIGHT_CORNER = new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, new ResourceLocation( AppEng.MOD_ID, "blocks/quantum_ring_light_corner" ));
private static final Material TEXTURE_LINK = new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, new ResourceLocation(AppEng.MOD_ID, "block/quantum_link" ));
private static final Material TEXTURE_RING = new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, new ResourceLocation( AppEng.MOD_ID, "block/quantum_ring" ));
private static final Material TEXTURE_RING_LIGHT = new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, new ResourceLocation( AppEng.MOD_ID, "block/quantum_ring_light" ));
private static final Material TEXTURE_RING_LIGHT_CORNER = new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, new ResourceLocation( AppEng.MOD_ID, "block/quantum_ring_light_corner" ));
private static final Material TEXTURE_CABLE_GLASS = new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, new ResourceLocation( AppEng.MOD_ID, "parts/cable/glass/transparent" ));
private static final Material TEXTURE_COVERED_CABLE = new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, new ResourceLocation( AppEng.MOD_ID, "parts/cable/covered/transparent" ));
@@ -27,6 +27,7 @@ import appeng.container.implementations.ContainerQNB;
import appeng.core.localization.PlayerMessages;
import appeng.tile.storage.TileChest;
import appeng.util.Platform;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.PlayerEntity;
@@ -56,7 +57,7 @@ public class BlockChest extends AEBaseTileBlock<TileChest>
}
@Override
protected void fillStateContainer(StateContainer.Builder builder) {
protected void fillStateContainer(StateContainer.Builder<Block, BlockState> builder) {
super.fillStateContainer(builder);
builder.add(SLOT_STATE);
}
@@ -22,7 +22,7 @@ package appeng.bootstrap;
import appeng.block.AEBaseTileBlock;
import appeng.bootstrap.components.BlockColorComponent;
import appeng.bootstrap.components.RenderTypeComponent;
import appeng.bootstrap.components.TileEntityRendererComponent;
import appeng.client.render.model.AutoRotatingBakedModel;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.color.IBlockColor;
@@ -105,12 +105,12 @@ class BlockRendering implements IBlockRendering
{
// This is a default rotating model if the base-block uses an AE tile entity which exposes UP/FRONT as
// extended props
// FIXME factory.addModelOverride( block.getRegistryName().getPath(), ( l, m ) -> new AutoRotatingModel( m ) );
factory.addModelOverride( block.getRegistryName().getPath(), ( l, m ) -> new AutoRotatingBakedModel( m ) );
}
// TODO : 1.12
this.builtInModels.forEach( factory::addBuiltInModel );
// TODO : 1.12
if( this.blockColor != null )
{
factory.addBootstrapComponent( new BlockColorComponent( block, this.blockColor ) );
@@ -0,0 +1,10 @@
package appeng.bootstrap.components;
import appeng.bootstrap.IBootstrapComponent;
import net.minecraftforge.client.event.ModelBakeEvent;
public interface IModelBakeComponent extends IBootstrapComponent {
void onModelBakeEvent(ModelBakeEvent event);
}
@@ -29,15 +29,12 @@ import com.google.common.collect.Sets;
import net.minecraft.client.renderer.model.IBakedModel;
import net.minecraft.client.renderer.model.ModelBakery;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.client.event.ModelBakeEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import appeng.core.AppEng;
public class ModelOverrideComponent implements IPreInitComponent
public class ModelOverrideComponent implements IModelBakeComponent
{
// Maps from resource path to customizer
@@ -48,13 +45,6 @@ public class ModelOverrideComponent implements IPreInitComponent
this.customizer.put( resourcePath, customizer );
}
@Override
public void preInitialize( Dist dist )
{
MinecraftForge.EVENT_BUS.register( this );
}
@SubscribeEvent
public void onModelBakeEvent( final ModelBakeEvent event )
{
Map<ResourceLocation, IBakedModel> modelRegistry = event.getModelRegistry();
@@ -1,58 +0,0 @@
/*
* This file is part of Applied Energistics 2.
* Copyright (c) 2013 - 2014, 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.bootstrap.components;
import java.util.function.Function;
import net.minecraft.client.renderer.tileentity.TileEntityRenderer;
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
import net.minecraft.tileentity.TileEntityType;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.fml.client.registry.ClientRegistry;
import appeng.tile.AEBaseTile;
/**
* Registers a TESR for a given tile entity class.
*
* @param <T>
*/
public class TileEntityRendererComponent<T extends AEBaseTile> implements IPreInitComponent
{
private final TileEntityType<T> tileEntityType;
private final Function<? super TileEntityRendererDispatcher, ? extends TileEntityRenderer<? super T>> tileEntityRenderer;
public TileEntityRendererComponent(TileEntityType<T> tileEntityType,
Function<? super TileEntityRendererDispatcher, ? extends TileEntityRenderer<? super T>> tileEntityRenderer)
{
this.tileEntityType = tileEntityType;
this.tileEntityRenderer = tileEntityRenderer;
}
@Override
// public void modelReg( Dist dist )
public void preInitialize( Dist dist )
{
ClientRegistry.bindTileEntityRenderer( tileEntityType, tileEntityRenderer);
}
}
@@ -408,6 +408,7 @@ public class CubeBuilder
if( e.getIndex() == 0 )
{
builder.put( i, u, v );
break;
}
else if( e.getIndex() == 2 && renderFullBright )
{
@@ -416,8 +417,8 @@ public class CubeBuilder
final float lightMapU = (float) ( 15 * 0x20 ) / 0xFFFF;
final float lightMapV = (float) ( 15 * 0x20 ) / 0xFFFF;
builder.put( i, lightMapU, lightMapV );
}
break;
}
default:
builder.put( i );
break;
@@ -117,6 +117,6 @@ class CraftingCubeModel implements IModelGeometry<CraftingCubeModel>
private static Material texture( String name )
{
return new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, new ResourceLocation(AppEng.MOD_ID, "blocks/crafting/" + name));
return new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, new ResourceLocation(AppEng.MOD_ID, "block/crafting/" + name));
}
}
@@ -2,10 +2,10 @@ package appeng.client.render.effects;
import com.mojang.brigadier.StringReader;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import com.sun.javafx.geom.Vec3f;
import net.minecraft.network.PacketBuffer;
import net.minecraft.particles.IParticleData;
import net.minecraft.particles.ParticleType;
import net.minecraft.util.math.Vec3d;
import java.util.Locale;
@@ -14,9 +14,9 @@ import java.util.Locale;
*/
public class LightningArcParticleData implements IParticleData {
public final Vec3f target;
public final Vec3d target;
public LightningArcParticleData(Vec3f target) {
public LightningArcParticleData(Vec3d target) {
this.target = target;
}
@@ -29,7 +29,7 @@ public class LightningArcParticleData implements IParticleData {
float y = reader.readFloat();
reader.expect(' ');
float z = reader.readFloat();
return new LightningArcParticleData(new Vec3f(x, y, z));
return new LightningArcParticleData(new Vec3d(x, y, z));
}
@Override
@@ -37,7 +37,7 @@ public class LightningArcParticleData implements IParticleData {
float x = buffer.readFloat();
float y = buffer.readFloat();
float z = buffer.readFloat();
return new LightningArcParticleData(new Vec3f(x, y, z));
return new LightningArcParticleData(new Vec3d(x, y, z));
}
};
@@ -48,9 +48,9 @@ public class LightningArcParticleData implements IParticleData {
@Override
public void write(PacketBuffer buffer) {
buffer.writeFloat(target.x);
buffer.writeFloat(target.y);
buffer.writeFloat(target.z);
buffer.writeFloat((float) target.x);
buffer.writeFloat((float) target.y);
buffer.writeFloat((float) target.z);
}
@Override
@@ -160,7 +160,7 @@ public class AutoRotatingBakedModel implements IBakedModel
if( forward == null || up == null )
{
return this.parent.getQuads( state, side, rand );
return this.parent.getQuads( state, side, rand, extraData );
}
// The model has other properties than just forward/up, so it would cause our cache to inadvertendly also cache
@@ -1,34 +0,0 @@
package appeng.client.render.model;
import com.mojang.datafixers.util.Pair;
import net.minecraft.client.renderer.model.*;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.IModelConfiguration;
import net.minecraftforge.client.model.geometry.IModelGeometry;
import java.util.Collection;
import java.util.Set;
import java.util.function.Function;
public class AutoRotatingModel implements IModelGeometry<AutoRotatingModel> {
private final BlockModel blockModel;
public AutoRotatingModel(BlockModel blockModel) {
this.blockModel = blockModel;
}
@Override
public IBakedModel bake(IModelConfiguration owner, ModelBakery bakery, Function<Material, TextureAtlasSprite> spriteGetter, IModelTransform modelTransform, ItemOverrideList overrides, ResourceLocation modelLocation) {
return new AutoRotatingBakedModel(
this.blockModel.bakeModel(bakery, this.blockModel, spriteGetter, modelTransform, modelLocation, true)
);
}
@Override
public Collection<Material> getTextures(IModelConfiguration owner, Function<ResourceLocation, IUnbakedModel> modelGetter, Set<Pair<String, String>> missingTextureErrors) {
return this.blockModel.getTextures(modelGetter, missingTextureErrors);
}
}
@@ -1,24 +0,0 @@
package appeng.client.render.model;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonObject;
import net.minecraft.client.renderer.model.BlockModel;
import net.minecraft.resources.IResourceManager;
import net.minecraftforge.client.model.IModelLoader;
public class AutoRotatingModelLoader implements IModelLoader<AutoRotatingModel> {
public static final AutoRotatingModelLoader INSTANCE = new AutoRotatingModelLoader();
@Override
public void onResourceManagerReload(IResourceManager resourceManager) {
}
@Override
public AutoRotatingModel read(JsonDeserializationContext deserializationContext, JsonObject modelContents) {
modelContents.remove("loader");
BlockModel blockModel = deserializationContext.deserialize(modelContents, BlockModel.class);
return new AutoRotatingModel(blockModel);
}
}
@@ -57,7 +57,7 @@ public class SpatialPylonModel implements IModelGeometry<SpatialPylonModel>
private static Material getTexturePath( SpatialPylonTextureType type )
{
return new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, new ResourceLocation( AppEng.MOD_ID, "blocks/spatial_pylon/" + type.name().toLowerCase() ) );
return new Material(AtlasTexture.LOCATION_BLOCKS_TEXTURE, new ResourceLocation( AppEng.MOD_ID, "block/spatial_pylon/" + type.name().toLowerCase() ) );
}
}
@@ -32,7 +32,7 @@ public final class InscriberTESR extends TileEntityRenderer<TileInscriber>
private static final float ITEM_RENDER_SCALE = 1.0f / 1.2f;
private static final ResourceLocation TEXTURE_INSIDE = new ResourceLocation( AppEng.MOD_ID, "blocks/inscriber_inside" );
private static final ResourceLocation TEXTURE_INSIDE = new ResourceLocation( AppEng.MOD_ID, "block/inscriber_inside" );
private static TextureAtlasSprite textureInside;
+1 -1
View File
@@ -144,6 +144,7 @@ public final class AppEng
DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> modEventBus.addListener(this::clientSetup));
DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> modEventBus.addListener(registration::modelRegistryEvent));
DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> modEventBus.addListener(registration::registerItemColors));
DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> modEventBus.addListener(registration::handleModelBake));
MinecraftForge.EVENT_BUS.addListener( TickHandler.INSTANCE::unloadWorld );
MinecraftForge.EVENT_BUS.addListener( TickHandler.INSTANCE::onTick );
@@ -203,7 +204,6 @@ public final class AppEng
addBuiltInModel("paint_splotches", PaintSplotchesModel::new);
addBuiltInModel("quantum_bridge_formed", QnbFormedModel::new);
ModelLoaderRegistry.registerLoader(new ResourceLocation(AppEng.MOD_ID, "crafting_cube"), CraftingCubeModelLoader.INSTANCE);
ModelLoaderRegistry.registerLoader(new ResourceLocation(AppEng.MOD_ID, "auto_rotating"), AutoRotatingModelLoader.INSTANCE);
}
private static <T extends IModelGeometry<T>> void addBuiltInModel(String id, Supplier<T> modelFactory) {
+7 -4
View File
@@ -104,14 +104,12 @@ import net.minecraft.tileentity.TileEntityType;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.client.event.ColorHandlerEvent;
import net.minecraftforge.client.event.ModelRegistryEvent;
import net.minecraftforge.client.event.ParticleFactoryRegisterEvent;
import net.minecraftforge.client.event.TextureStitchEvent;
import net.minecraftforge.client.event.*;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.common.crafting.CraftingHelper;
import net.minecraftforge.common.extensions.IForgeContainerType;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.eventbus.api.Event;
import net.minecraftforge.fml.DistExecutor;
import net.minecraftforge.fml.event.server.FMLServerStartingEvent;
import net.minecraftforge.fml.loading.FMLEnvironment;
@@ -888,4 +886,9 @@ final class Registration
definitions.getRegistry().getBootstrapComponents( IItemColorRegistrationComponent.class ).forEachRemaining(c -> c.register(event.getItemColors(), event.getBlockColors()));
}
@OnlyIn(Dist.CLIENT)
public void handleModelBake(ModelBakeEvent event) {
final ApiDefinitions definitions = Api.INSTANCE.definitions();
definitions.getRegistry().getBootstrapComponents( IModelBakeComponent.class ).forEachRemaining(c -> c.onModelBakeEvent(event));
}
}
@@ -30,6 +30,7 @@ import appeng.block.grindstone.BlockGrinder;
import appeng.block.misc.*;
import appeng.block.networking.*;
import appeng.block.paint.BlockPaint;
import appeng.block.paint.PaintRendering;
import appeng.block.qnb.BlockQuantumLinkChamber;
import appeng.block.qnb.BlockQuantumRing;
import appeng.block.qnb.QuantumBridgeRendering;
@@ -494,7 +495,7 @@ public final class ApiBlocks implements IBlocks
this.paint = registry.block( "paint", BlockPaint::new )
.features( AEFeature.PAINT_BALLS )
.tileEntity( registry.tileEntity("paint", TilePaint.class, TilePaint::new).build() )
// FIXME .rendering( new PaintRendering() )
.rendering( new PaintRendering() )
.build();
this.skyStoneStairs = deco.block( "sky_stone_stairs", () -> new StairsBlock(this.skyStoneBlock().block()::getDefaultState, SKYSTONE_PROPERTIES ) )
+7 -1
View File
@@ -297,6 +297,9 @@ public class AEBaseTile extends TileEntity implements IOrientable, ICommonTile,
// TODO: Optimize Network Load
if( this.world != null )
{
this.requestModelDataUpdate();
boolean alreadyUpdated = false;
// Let the block update it's own state with our internal state changes
BlockState currentState = getBlockState();
if (currentState.getBlock() instanceof AEBaseTileBlock) {
@@ -305,10 +308,13 @@ public class AEBaseTile extends TileEntity implements IOrientable, ICommonTile,
if (currentState != newState) {
AELog.blockUpdate(this.pos, currentState, newState, this);
this.world.setBlockState(pos, newState);
alreadyUpdated = true;
}
}
this.requestModelDataUpdate();
if (!alreadyUpdated) {
this.world.notifyBlockUpdate(this.pos, currentState, currentState, 1);
}
}
}
}
@@ -1,41 +1,55 @@
{
"forge_marker": 1,
"defaults": {
"multipart": [
{
"apply": {
"model": "appliedenergistics2:block/wireless_access_point_chassis",
"y": 180
},
"variants": {
"state": {
"off": {
"submodel": {
"state": {
"model": "appliedenergistics2:block/wireless_access_point_status_off"
},
"torch": {
"model": "appliedenergistics2:block/wireless_access_point_off"
}
}
},
"on": {
"submodel": {
"state": {
"model": "appliedenergistics2:block/wireless_access_point_status_on"
{
"when": {
"state": "off"
},
"torch": {
"model": "appliedenergistics2:block/wireless_access_point_off"
}
"apply": {
"model": "appliedenergistics2:block/wireless_access_point_status_off",
"y": 180
}
},
"has_channel": {
"submodel": {
"state": {
"model": "appliedenergistics2:block/wireless_access_point_status_has_channel"
{
"when": {
"state": "off|on"
},
"torch": {
"model": "appliedenergistics2:block/wireless_access_point_on"
}
}
}
"apply": {
"model": "appliedenergistics2:block/wireless_access_point_off",
"y": 180
}
},
{
"when": {
"state": "on"
},
"apply": {
"model": "appliedenergistics2:block/wireless_access_point_status_on",
"y": 180
}
},
{
"when": {
"state": "has_channel"
},
"apply": {
"model": "appliedenergistics2:block/wireless_access_point_on",
"y": 180
}
},
{
"when": {
"state": "has_channel"
},
"apply": {
"model": "appliedenergistics2:block/wireless_access_point_status_has_channel",
"y": 180
}
}
]
}
@@ -1,5 +1,4 @@
{
"loader": "appliedenergistics2:auto_rotating",
"parent": "block/orientable",
"textures": {
"particle": "appliedenergistics2:block/inscriber",
@@ -0,0 +1,3 @@
{
"loader": "appliedenergistics2:paint_splotches"
}
@@ -0,0 +1,3 @@
{
"loader": "appliedenergistics2:quantum_bridge_formed"
}
@@ -1,3 +1,176 @@
{
"parent": "appliedenergistics2:block/wireless_access_point_off"
"parent": "block/block",
"textures": {
"particle": "appliedenergistics2:block/wireless_access_point_inside",
"inside": "appliedenergistics2:block/wireless_access_point_inside",
"sides": "appliedenergistics2:parts/monitor_sides",
"sidesStatus": "appliedenergistics2:parts/monitor_sides_status",
"torch": "appliedenergistics2:block/wireless_access_point",
"indicator": "appliedenergistics2:parts/monitor_sides_status_off"
},
"elements": [
{
"from": [4.875, 5, 5],
"to": [5.875, 11, 11],
"rotation": {"angle": 0, "axis": "y", "origin": [12.875, 8, 8]},
"faces": {
"north": {"uv": [12, 5, 13, 11], "texture": "#sidesStatus"},
"east": {"uv": [5, 5, 11, 11], "texture": "#sides"},
"south": {"uv": [3, 5, 4, 11], "texture": "#sidesStatus"},
"west": {"uv": [5, 5, 11, 11], "texture": "#sides"},
"up": {"uv": [12, 5, 13, 11], "rotation": 270, "texture": "#sidesStatus"},
"down": {"uv": [12, 5, 13, 11], "rotation": 90, "texture": "#sidesStatus"}
}
},
{
"from": [5.875, 5, 5],
"to": [6.875, 11, 11],
"rotation": {"angle": 0, "axis": "y", "origin": [12.875, 8, 8]},
"faces": {
"north": {"uv": [11, 5, 12, 11], "texture": "#sides"},
"east": {"uv": [5, 5, 11, 11], "texture": "#inside"},
"south": {"uv": [4, 5, 5, 11], "texture": "#sides"},
"west": {"uv": [5, 5, 11, 11], "texture": "#inside"},
"up": {"uv": [11, 5, 12, 11], "rotation": 270, "texture": "#sides"},
"down": {"uv": [11, 5, 12, 11], "rotation": 90, "texture": "#sides"}
}
},
{
"name": "Side Antenna I Up",
"from": [6.875, 10, 6],
"to": [8.875, 12, 10],
"rotation": {"angle": 0, "axis": "y", "origin": [12.875, 8, 8]},
"faces": {
"north": {"uv": [9, 4, 11, 6], "texture": "#sides"},
"east": {"uv": [6, 4, 10, 6], "texture": "#inside"},
"south": {"uv": [5, 4, 7, 6], "texture": "#sides"},
"west": {"uv": [6, 4, 10, 6], "texture": "#inside"},
"up": {"uv": [9, 6, 11, 10], "rotation": 270, "texture": "#sides"},
"down": {"uv": [9, 6, 11, 10], "rotation": 90, "texture": "#sides"}
}
},
{
"name": "Side Antenna I Down",
"from": [6.875, 4, 6],
"to": [8.875, 6, 10],
"rotation": {"angle": 0, "axis": "y", "origin": [12.875, 8, 8]},
"faces": {
"north": {"uv": [9, 10, 11, 12], "texture": "#sides"},
"east": {"uv": [6, 10, 10, 12], "texture": "#inside"},
"south": {"uv": [5, 10, 7, 12], "texture": "#sides"},
"west": {"uv": [6, 10, 10, 12], "texture": "#inside"},
"up": {"uv": [9, 6, 11, 10], "rotation": 270, "texture": "#sides"},
"down": {"uv": [9, 6, 11, 10], "rotation": 90, "texture": "#sides"}
}
},
{
"name": "Side Antenna I West",
"from": [6.875, 6, 10],
"to": [8.875, 10, 12],
"rotation": {"angle": 0, "axis": "y", "origin": [12.875, 8, 8]},
"faces": {
"north": {"uv": [9, 6, 11, 10], "texture": "#sides"},
"east": {"uv": [4, 6, 6, 10], "texture": "#inside"},
"south": {"uv": [5, 6, 7, 10], "texture": "#sides"},
"west": {"uv": [10, 6, 12, 10], "texture": "#inside"},
"up": {"uv": [9, 4, 11, 6], "rotation": 270, "texture": "#sides"},
"down": {"uv": [9, 10, 11, 12], "rotation": 90, "texture": "#sides"}
}
},
{
"name": "Side Antenna I East",
"from": [6.875, 6, 4],
"to": [8.875, 10, 6],
"rotation": {"angle": 0, "axis": "y", "origin": [12.875, 8, 8]},
"faces": {
"north": {"uv": [9, 6, 11, 10], "texture": "#sides"},
"east": {"uv": [10, 6, 12, 10], "texture": "#inside"},
"south": {"uv": [5, 6, 7, 10], "texture": "#sides"},
"west": {"uv": [4, 6, 6, 10], "texture": "#inside"},
"up": {"uv": [9, 10, 11, 12], "rotation": 270, "texture": "#sides"},
"down": {"uv": [9, 4, 11, 6], "rotation": 90, "texture": "#sides"}
}
},
{
"name": "Side Antenna II Up",
"from": [7.875, 12, 7],
"to": [10.875, 13, 9],
"rotation": {"angle": 0, "axis": "y", "origin": [12.875, 8, 8]},
"faces": {
"north": {"uv": [7, 3, 10, 4], "texture": "#sides"},
"east": {"uv": [7, 3, 9, 4], "texture": "#inside"},
"south": {"uv": [6, 3, 9, 4], "texture": "#sides"},
"west": {"uv": [7, 3, 9, 4], "texture": "#inside"},
"up": {"uv": [7, 7, 10, 9], "rotation": 270, "texture": "#sides"},
"down": {"uv": [7, 7, 10, 9], "rotation": 90, "texture": "#sides"}
}
},
{
"name": "Side Antenna II Down",
"from": [7.875, 3, 7],
"to": [10.875, 4, 9],
"rotation": {"angle": 0, "axis": "y", "origin": [12.875, 8, 8]},
"faces": {
"north": {"uv": [7, 12, 10, 13], "texture": "#sides"},
"east": {"uv": [7, 12, 9, 13], "texture": "#inside"},
"south": {"uv": [6, 12, 9, 13], "texture": "#sides"},
"west": {"uv": [7, 12, 9, 13], "texture": "#inside"},
"up": {"uv": [7, 7, 10, 9], "rotation": 270, "texture": "#sides"},
"down": {"uv": [7, 7, 10, 9], "rotation": 90, "texture": "#sides"}
}
},
{
"name": "Side Antenna II West",
"from": [7.875, 7, 12],
"to": [10.875, 9, 13],
"rotation": {"angle": 0, "axis": "y", "origin": [12.875, 8, 8]},
"faces": {
"north": {"uv": [7, 7, 10, 9], "texture": "#sides"},
"east": {"uv": [3, 7, 4, 9], "texture": "#inside"},
"south": {"uv": [6, 7, 9, 9], "texture": "#sides"},
"west": {"uv": [12, 7, 13, 9], "texture": "#inside"},
"up": {"uv": [7, 3, 10, 4], "rotation": 270, "texture": "#sides"},
"down": {"uv": [7, 12, 10, 13], "rotation": 90, "texture": "#sides"}
}
},
{
"name": "Side Antenna II East",
"from": [7.875, 7, 3],
"to": [10.875, 9, 4],
"rotation": {"angle": 0, "axis": "y", "origin": [12.875, 8, 8]},
"faces": {
"north": {"uv": [7, 7, 10, 9], "texture": "#sides"},
"east": {"uv": [12, 7, 13, 9], "texture": "#inside"},
"south": {"uv": [6, 7, 9, 9], "texture": "#sides"},
"west": {"uv": [3, 7, 4, 9], "texture": "#inside"},
"up": {"uv": [7, 12, 10, 13], "rotation": 270, "texture": "#sides"},
"down": {"uv": [7, 3, 10, 4], "rotation": 90, "texture": "#sides"}
}
},
{
"name": "Antenna Off",
"from": [5.875, 7, 7],
"to": [13.875, 9, 9],
"rotation": {"angle": 0, "axis": "y", "origin": [12.875, 8, 8]},
"faces": {
"north": {"uv": [1, 7, 9, 9], "rotation": 180, "texture": "#torch"},
"east": {"uv": [7, 7, 9, 9], "rotation": 270, "texture": "#torch"},
"south": {"uv": [1, 7, 9, 9], "texture": "#torch"},
"up": {"uv": [1, 7, 9, 9], "texture": "#torch"},
"down": {"uv": [1, 7, 9, 9], "texture": "#torch"}
}
},
{
"name": "Status Off",
"from": [4.875, 5, 5],
"to": [5.875, 11, 11],
"rotation": {"angle": 0, "axis": "y", "origin": [12.875, 8, 8]},
"faces": {
"north": {"uv": [12, 5, 13, 11], "texture": "#indicator"},
"south": {"uv": [3, 5, 4, 11], "texture": "#indicator"},
"up": {"uv": [12, 5, 13, 11], "rotation": 270, "texture": "#indicator"},
"down": {"uv": [12, 5, 13, 11], "rotation": 90, "texture": "#indicator"}
}
}
]
}
@@ -1,7 +1,7 @@
{
"ae2_uvl_marker": true,
"textures": {
"0": "blocks/obsidian",
"0": "block/obsidian",
"1": "uvlightmapjsontest:blocks/BlockControllerLights"
},
"elements": [
@@ -1,6 +1,6 @@
{
"parent": "uvlightmapjsontest:block/uvlblock",
"textures": {
"0": "blocks/diamond_block"
"0": "block/diamond_block"
}
}