Added Fluid Laser Relays

This commit is contained in:
Ellpeck 2016-09-01 20:50:44 +02:00
parent e75a0ee64e
commit 39baccc762
12 changed files with 1095 additions and 4 deletions

View file

@ -23,7 +23,7 @@ if(hasProperty('buildnumber')){
} }
minecraft { minecraft {
version = "1.10.2-12.18.1.2044" version = "1.10.2-12.18.1.2076"
runDir = "idea" runDir = "idea"
mappings = "snapshot_20160519" mappings = "snapshot_20160519"

View file

@ -19,6 +19,7 @@ import java.util.List;
public class ConnectionPair{ public class ConnectionPair{
//TODO Remove eventually, just for making the implementation of LaserType work //TODO Remove eventually, just for making the implementation of LaserType work
//TODO Also remove those deprecated methods in the API
public static final List<ConnectionPair> PAIRS_FOR_FIXING = new ArrayList<ConnectionPair>(); public static final List<ConnectionPair> PAIRS_FOR_FIXING = new ArrayList<ConnectionPair>();
public final BlockPos[] positions = new BlockPos[2]; public final BlockPos[] positions = new BlockPos[2];

View file

@ -133,6 +133,8 @@ public class BlockLaserRelay extends BlockContainerBase{
return new TileEntityLaserRelayEnergyAdvanced(); return new TileEntityLaserRelayEnergyAdvanced();
case ENERGY_EXTREME: case ENERGY_EXTREME:
return new TileEntityLaserRelayEnergyExtreme(); return new TileEntityLaserRelayEnergyExtreme();
case FLUIDS:
return new TileEntityLaserRelayFluids();
default: default:
return new TileEntityLaserRelayEnergy(); return new TileEntityLaserRelayEnergy();
} }
@ -142,6 +144,7 @@ public class BlockLaserRelay extends BlockContainerBase{
ENERGY_BASIC, ENERGY_BASIC,
ENERGY_ADVANCED, ENERGY_ADVANCED,
ENERGY_EXTREME, ENERGY_EXTREME,
FLUIDS,
ITEM, ITEM,
ITEM_WHITELIST ITEM_WHITELIST
} }

View file

@ -98,6 +98,7 @@ public final class InitBlocks{
public static Block blockLaserRelay; public static Block blockLaserRelay;
public static Block blockLaserRelayAdvanced; public static Block blockLaserRelayAdvanced;
public static Block blockLaserRelayExtreme; public static Block blockLaserRelayExtreme;
public static Block blockLaserRelayFluids;
public static Block blockLaserRelayItem; public static Block blockLaserRelayItem;
public static Block blockLaserRelayItemWhitelist; public static Block blockLaserRelayItemWhitelist;
public static Block blockItemViewer; public static Block blockItemViewer;
@ -147,6 +148,7 @@ public final class InitBlocks{
blockLaserRelay = new BlockLaserRelay("blockLaserRelay", Type.ENERGY_BASIC); blockLaserRelay = new BlockLaserRelay("blockLaserRelay", Type.ENERGY_BASIC);
blockLaserRelayAdvanced = new BlockLaserRelay("blockLaserRelayAdvanced", Type.ENERGY_ADVANCED); blockLaserRelayAdvanced = new BlockLaserRelay("blockLaserRelayAdvanced", Type.ENERGY_ADVANCED);
blockLaserRelayExtreme = new BlockLaserRelay("blockLaserRelayExtreme", Type.ENERGY_EXTREME); blockLaserRelayExtreme = new BlockLaserRelay("blockLaserRelayExtreme", Type.ENERGY_EXTREME);
blockLaserRelayFluids = new BlockLaserRelay("blockLaserRelayFluids", Type.FLUIDS);
blockLaserRelayItem = new BlockLaserRelay("blockLaserRelayItem", Type.ITEM); blockLaserRelayItem = new BlockLaserRelay("blockLaserRelayItem", Type.ITEM);
blockLaserRelayItemWhitelist = new BlockLaserRelay("blockLaserRelayItemWhitelist", Type.ITEM_WHITELIST); blockLaserRelayItemWhitelist = new BlockLaserRelay("blockLaserRelayItemWhitelist", Type.ITEM_WHITELIST);
blockRangedCollector = new BlockRangedCollector("blockRangedCollector"); blockRangedCollector = new BlockRangedCollector("blockRangedCollector");

View file

@ -69,6 +69,7 @@ public class CreativeTab extends CreativeTabs{
this.add(InitBlocks.blockLaserRelay); this.add(InitBlocks.blockLaserRelay);
this.add(InitBlocks.blockLaserRelayAdvanced); this.add(InitBlocks.blockLaserRelayAdvanced);
this.add(InitBlocks.blockLaserRelayExtreme); this.add(InitBlocks.blockLaserRelayExtreme);
this.add(InitBlocks.blockLaserRelayFluids);
this.add(InitBlocks.blockLaserRelayItem); this.add(InitBlocks.blockLaserRelayItem);
this.add(InitBlocks.blockLaserRelayItemWhitelist); this.add(InitBlocks.blockLaserRelayItemWhitelist);
this.add(InitBlocks.blockItemViewer); this.add(InitBlocks.blockItemViewer);

View file

@ -35,7 +35,8 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{
public static final int MAX_DISTANCE = 15; public static final int MAX_DISTANCE = 15;
private static final float[] COLOR = new float[]{1F, 0F, 0F}; private static final float[] COLOR = new float[]{1F, 0F, 0F};
private static final float[] COLOR_ITEM = new float[]{139F/255F, 94F/255F, 1F}; private static final float[] COLOR_ITEM = new float[]{43F/255F, 158F/255F, 39/255F};
private static final float[] COLOR_FLUIDS = new float[]{139F/255F, 94F/255F, 1F};
public final LaserType type; public final LaserType type;
@ -113,7 +114,7 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{
if(network != null){ if(network != null){
for(ConnectionPair aPair : network.connections){ for(ConnectionPair aPair : network.connections){
if(!aPair.suppressConnectionRender && aPair.contains(this.pos) && this.pos.equals(aPair.positions[0])){ if(!aPair.suppressConnectionRender && aPair.contains(this.pos) && this.pos.equals(aPair.positions[0])){
AssetUtil.renderParticlesFromAToB(aPair.positions[0].getX(), aPair.positions[0].getY(), aPair.positions[0].getZ(), aPair.positions[1].getX(), aPair.positions[1].getY(), aPair.positions[1].getZ(), ConfigBoolValues.LESS_PARTICLES.isEnabled() ? 1 : Util.RANDOM.nextInt(3)+1, 0.8F, this.type == LaserType.ITEM ? COLOR_ITEM : COLOR, 1F); AssetUtil.renderParticlesFromAToB(aPair.positions[0].getX(), aPair.positions[0].getY(), aPair.positions[0].getZ(), aPair.positions[1].getX(), aPair.positions[1].getY(), aPair.positions[1].getZ(), ConfigBoolValues.LESS_PARTICLES.isEnabled() ? 1 : Util.RANDOM.nextInt(3)+1, 0.8F, this.type == LaserType.ITEM ? COLOR_ITEM : (this.type == LaserType.FLUID ? COLOR_FLUIDS : COLOR), 1F);
} }
} }
} }

View file

@ -58,7 +58,7 @@ public class TileEntityLaserRelayEnergy extends TileEntityLaserRelay implements
return this.getEnergyCap(); return this.getEnergyCap();
} }
public int transmitEnergy(EnumFacing from, int maxTransmit, boolean simulate){ private int transmitEnergy(EnumFacing from, int maxTransmit, boolean simulate){
int transmitted = 0; int transmitted = 0;
if(maxTransmit > 0){ if(maxTransmit > 0){
Network network = ActuallyAdditionsAPI.connectionHandler.getNetworkFor(this.pos, this.worldObj); Network network = ActuallyAdditionsAPI.connectionHandler.getNetworkFor(this.pos, this.worldObj);

View file

@ -0,0 +1,183 @@
/*
* This file ("TileEntityLaserRelayFluids.java") is part of the Actually Additions mod for Minecraft.
* It is created and owned by Ellpeck and distributed
* under the Actually Additions License to be found at
* http://ellpeck.de/actaddlicense
* View the source code at https://github.com/Ellpeck/ActuallyAdditions
*
* © 2015-2016 Ellpeck
*/
package de.ellpeck.actuallyadditions.mod.tile;
import cofh.api.energy.IEnergyReceiver;
import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI;
import de.ellpeck.actuallyadditions.api.laser.ConnectionPair;
import de.ellpeck.actuallyadditions.api.laser.LaserType;
import de.ellpeck.actuallyadditions.api.laser.Network;
import de.ellpeck.actuallyadditions.mod.ActuallyAdditions;
import de.ellpeck.actuallyadditions.mod.util.compat.TeslaUtil;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTankInfo;
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
import net.minecraftforge.fluids.capability.IFluidHandler;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class TileEntityLaserRelayFluids extends TileEntityLaserRelay implements ISharingFluidHandler{
public final ConcurrentHashMap<EnumFacing, TileEntity> receiversAround = new ConcurrentHashMap<EnumFacing, TileEntity>();
public TileEntityLaserRelayFluids(){
super("laserRelayFluids", LaserType.FLUID);
}
@Override
public void saveAllHandlersAround(){
this.receiversAround.clear();
for(EnumFacing side : EnumFacing.values()){
BlockPos pos = this.getPos().offset(side);
TileEntity tile = this.worldObj.getTileEntity(pos);
if(tile != null && !(tile instanceof TileEntityLaserRelay)){
if(tile instanceof net.minecraftforge.fluids.IFluidHandler || tile.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side.getOpposite())){
this.receiversAround.put(side, tile);
}
}
}
}
@Override
public int getFluidAmountToSplitShare(){
return 0;
}
@Override
public boolean doesShareFluid(){
return false;
}
@Override
public EnumFacing[] getFluidShareSides(){
return new EnumFacing[0];
}
@Override
public int fill(EnumFacing from, FluidStack resource, boolean doFill){
return this.transmitEnergy(from, resource, doFill);
}
private int transmitEnergy(EnumFacing from, FluidStack stack, boolean doFill){
int transmitted = 0;
if(stack != null){
Network network = ActuallyAdditionsAPI.connectionHandler.getNetworkFor(this.pos, this.worldObj);
if(network != null){
transmitted = this.transferEnergyToReceiverInNeed(from, network, stack, doFill);
}
}
return transmitted;
}
private int transferEnergyToReceiverInNeed(EnumFacing from, Network network, FluidStack stack, boolean doFill){
int transmitted = 0;
//Keeps track of all the Laser Relays and Energy Acceptors that have been checked already to make nothing run multiple times
List<BlockPos> alreadyChecked = new ArrayList<BlockPos>();
List<TileEntityLaserRelayFluids> relaysThatWork = new ArrayList<TileEntityLaserRelayFluids>();
int totalReceiverAmount = 0;
for(ConnectionPair pair : network.connections){
for(BlockPos relay : pair.positions){
if(relay != null && !alreadyChecked.contains(relay)){
alreadyChecked.add(relay);
TileEntity relayTile = this.worldObj.getTileEntity(relay);
if(relayTile instanceof TileEntityLaserRelayFluids){
TileEntityLaserRelayFluids theRelay = (TileEntityLaserRelayFluids)relayTile;
int amount = theRelay.receiversAround.size();
if(amount > 0){
relaysThatWork.add(theRelay);
totalReceiverAmount += amount;
}
}
}
}
}
if(totalReceiverAmount > 0 && !relaysThatWork.isEmpty()){
int amountPer = stack.amount/totalReceiverAmount;
if(amountPer <= 0){
amountPer = stack.amount;
}
for(TileEntityLaserRelayFluids theRelay : relaysThatWork){
for(Map.Entry<EnumFacing, TileEntity> receiver : theRelay.receiversAround.entrySet()){
if(receiver != null){
EnumFacing side = receiver.getKey();
EnumFacing opp = side.getOpposite();
TileEntity tile = receiver.getValue();
if(!alreadyChecked.contains(tile.getPos())){
alreadyChecked.add(tile.getPos());
if(theRelay != this || side != from){
if(tile instanceof net.minecraftforge.fluids.IFluidHandler){
net.minecraftforge.fluids.IFluidHandler iHandler = (net.minecraftforge.fluids.IFluidHandler)tile;
if(iHandler.canFill(opp, stack.getFluid())){
FluidStack copy = stack.copy();
copy.amount = amountPer;
transmitted += iHandler.fill(opp, copy, doFill);
}
}
else if(tile.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, opp)){
IFluidHandler cap = tile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, opp);
if(cap != null){
FluidStack copy = stack.copy();
copy.amount = amountPer;
transmitted += cap.fill(copy, doFill);
}
}
//If everything that could be transmitted was transmitted
if(transmitted >= stack.amount){
return transmitted;
}
}
}
}
}
}
}
return transmitted;
}
@Override
public FluidStack drain(EnumFacing from, FluidStack resource, boolean doDrain){
return null;
}
@Override
public FluidStack drain(EnumFacing from, int maxDrain, boolean doDrain){
return null;
}
@Override
public boolean canFill(EnumFacing from, Fluid fluid){
return true;
}
@Override
public boolean canDrain(EnumFacing from, Fluid fluid){
return false;
}
@Override
public FluidTankInfo[] getTankInfo(EnumFacing from){
return new FluidTankInfo[0];
}
}

View file

@ -0,0 +1,19 @@
{
"forge_marker": 1,
"defaults": {
"model": "actuallyadditions:blockLaserRelayFluids",
"transform": "forge:default-block"
},
"variants": {
"normal": [{}],
"inventory": [{}],
"meta": {
"0": { "x": 180 },
"1": {},
"2": { "x": 90 },
"3": { "x": 270 },
"4": { "x": 90, "y": 270 },
"5": { "x": 270, "y": 270 }
}
}
}

View file

@ -188,6 +188,7 @@ tile.actuallyadditions.blockRangedCollector.name=Ranged Collector
tile.actuallyadditions.blockLaserRelay.name=Energy Laser Relay tile.actuallyadditions.blockLaserRelay.name=Energy Laser Relay
tile.actuallyadditions.blockLaserRelayAdvanced.name=Advanced Energy Laser Relay tile.actuallyadditions.blockLaserRelayAdvanced.name=Advanced Energy Laser Relay
tile.actuallyadditions.blockLaserRelayExtreme.name=Extreme Energy Laser Relay tile.actuallyadditions.blockLaserRelayExtreme.name=Extreme Energy Laser Relay
tile.actuallyadditions.blockLaserRelayFluids.name=Fluid Laser Relay
tile.actuallyadditions.blockMiscIronCasing.name=Iron Casing tile.actuallyadditions.blockMiscIronCasing.name=Iron Casing
tile.actuallyadditions.blockBlackLotus.name=Black Lotus tile.actuallyadditions.blockBlackLotus.name=Black Lotus
tile.actuallyadditions.blockTestifiBucksWhiteFence.name=Ethetic Quartz Wall tile.actuallyadditions.blockTestifiBucksWhiteFence.name=Ethetic Quartz Wall

View file

@ -0,0 +1,880 @@
{
"__createdBy": "canitzp",
"ambientocclusion": false,
"textures": {
"particle": "actuallyadditions:blocks/models/modelLaserRelayFluids",
"laserRelay": "actuallyadditions:blocks/models/modelLaserRelayFluids"
},
"elements": [
{
"from": [4,0,4],
"to": [12,1,12],
"faces": {
"up": {
"uv": [0,0,8,8],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,8,8],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
}
}
},
{
"from": [4,1,3],
"to": [12,4,4],
"faces": {
"up": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
}
}
},
{
"from": [4,1,12],
"to": [12,4,13],
"faces": {
"up": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
}
}
},
{
"from": [4,11,12],
"to": [12,14,13],
"faces": {
"up": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
}
}
},
{
"from": [4,11,3],
"to": [12,14,4],
"faces": {
"up": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
}
}
},
{
"from": [4,4,2],
"to": [12,5,3],
"faces": {
"up": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
}
}
},
{
"from": [4,10,2],
"to": [12,11,3],
"faces": {
"up": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
}
}
},
{
"from": [4,10,13],
"to": [12,11,14],
"faces": {
"up": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
}
}
},
{
"from": [4,4,13],
"to": [12,5,14],
"faces": {
"up": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
}
}
},
{
"from": [5.5,1,5.5],
"to": [10.5,3,10.5],
"faces": {
"up": {
"uv": [13.5,13.5,16,16],
"texture": "#laserRelay"
},
"down": {
"uv": [0.0,0.0,5.0,5.0],
"texture": "missingtexture"
},
"west": {
"uv": [0,0,5,2],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,5,2],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,5,2],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,5,2],
"texture": "#laserRelay"
}
}
},
{
"from": [7,3,7],
"to": [9,14,9],
"faces": {
"up": {
"uv": [0.0,0.0,2.0,2.0],
"texture": "missingtexture"
},
"down": {
"uv": [0.0,0.0,2.0,2.0],
"texture": "missingtexture"
},
"west": {
"uv": [14,2,16,7.5],
"texture": "#laserRelay"
},
"east": {
"uv": [14,2,16,7.5],
"texture": "#laserRelay"
},
"north": {
"uv": [14,2,16,7.5],
"texture": "#laserRelay"
},
"south": {
"uv": [14,2,16,7.5],
"texture": "#laserRelay"
}
}
},
{
"from": [4,14,4],
"to": [12,15,12],
"faces": {
"up": {
"uv": [1,12,5,15],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,8,8],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
}
}
},
{
"from": [6.5,6.5,6.5],
"to": [9.5,9.5,9.5],
"faces": {
"up": {
"uv": [14,0,16,2],
"texture": "#laserRelay"
},
"down": {
"uv": [14,0,16,2],
"texture": "#laserRelay"
},
"west": {
"uv": [14,0,16,2],
"texture": "#laserRelay"
},
"east": {
"uv": [14,0,16,2],
"texture": "#laserRelay"
},
"north": {
"uv": [14,0,16,2],
"texture": "#laserRelay"
},
"south": {
"uv": [14,0,16,2],
"texture": "#laserRelay"
}
}
},
{
"from": [4,5,2],
"to": [5,10,3],
"faces": {
"up": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"down": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"west": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
}
}
},
{
"from": [11,5,2],
"to": [12,10,3],
"faces": {
"up": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"down": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"west": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
}
}
},
{
"from": [11,5,13],
"to": [12,10,14],
"faces": {
"up": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"down": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"west": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
}
}
},
{
"from": [4,5,13],
"to": [5,10,14],
"faces": {
"up": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"down": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"west": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
}
}
},
{
"from": [3,1,4],
"to": [4,4,12],
"faces": {
"up": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
}
}
},
{
"from": [12,1,4],
"to": [13,4,12],
"faces": {
"up": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
}
}
},
{
"from": [12,11,4],
"to": [13,14,12],
"faces": {
"up": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
}
}
},
{
"from": [3,11,4],
"to": [4,14,12],
"faces": {
"up": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,8,3],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,3],
"texture": "#laserRelay"
}
}
},
{
"from": [2,4,4],
"to": [3,5,12],
"faces": {
"up": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
}
}
},
{
"from": [2,10,4],
"to": [3,11,12],
"faces": {
"up": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
}
}
},
{
"from": [13,10,4],
"to": [14,11,12],
"faces": {
"up": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
}
}
},
{
"from": [13,4,4],
"to": [14,5,12],
"faces": {
"up": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"down": {
"uv": [0,0,1,8],
"texture": "#laserRelay"
},
"west": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,8,1],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,1],
"texture": "#laserRelay"
}
}
},
{
"from": [2,5,4],
"to": [3,10,5],
"faces": {
"up": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"down": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"west": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
}
}
},
{
"from": [2,5,11],
"to": [3,10,12],
"faces": {
"up": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"down": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"west": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
}
}
},
{
"from": [13,5,11],
"to": [14,10,12],
"faces": {
"up": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"down": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"west": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
}
}
},
{
"from": [13,5,4],
"to": [14,10,5],
"faces": {
"up": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"down": {
"uv": [0.0,0.0,1.0,1.0],
"texture": "missingtexture"
},
"west": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"east": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"north": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
},
"south": {
"uv": [0,0,1,5],
"texture": "#laserRelay"
}
}
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 B