Compare commits

...

10 Commits

Author SHA1 Message Date
thatsIch d9f362270b Merge pull request #1454 from TheJulianJES/doublePlayerInvInscriber
Don't add the player inventory two times (rv2)
2015-05-14 12:43:21 +02:00
TheJulianJES 37aef15a02 Don't add the player inventory two times (rv2) 2015-05-14 12:38:44 +02:00
thatsIch 2d8728f0e1 Merge pull request #1437 from TheJulianJES/GermanLang
Changed things in de_DE.lang (rv2)
2015-05-10 12:12:08 +02:00
thatsIch 3498a0902b Merge pull request #1434 from plumpudding/errorEclipse
Error eclipse for rv2 branch
2015-05-10 12:11:58 +02:00
TheJulianJES bb4b6719fe Changed things in de_DE.lang 2015-05-10 10:34:54 +02:00
TheJulianJES 34f78a7ce4 Fix warnings in eclipse
Close scanner instead of doing it with a warning

Make the scanner final..
2015-05-10 00:14:56 +02:00
thatsIch 064acc21ee Fixes #1411: Adds recipes for stairs 2015-05-08 18:36:42 +02:00
Lorenzo Dalla Costa Cervelin deeb67f07d Update pt_BR.lang 2015-05-08 17:59:55 +02:00
thatsIch 2eeaa80b59 Merge pull request #1380 from thatsIch/e-fix-javadoc
Fixed missing Javadoc parameter
2015-05-03 21:48:53 +02:00
thatsIch 7cb485aa48 Fixed missing Javadoc parameter
Reworked the instantiation a bit
Added some additional checks due to the new nonnullability.
2015-05-03 16:45:27 +02:00
9 changed files with 116 additions and 46 deletions
@@ -65,8 +65,6 @@ public class ContainerInscriber extends ContainerUpgradeable implements IProgres
this.addSlotToContainer( this.middle = new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.INSCRIBER_INPUT, this.ti, 2, 63, 39, this.invPlayer ) ); this.addSlotToContainer( this.middle = new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.INSCRIBER_INPUT, this.ti, 2, 63, 39, this.invPlayer ) );
this.addSlotToContainer( new SlotOutput( this.ti, 3, 113, 40, -1 ) ); this.addSlotToContainer( new SlotOutput( this.ti, 3, 113, 40, -1 ) );
this.bindPlayerInventory( ip, 0, this.getHeight() - /* height of player inventory */82 );
} }
@Override @Override
@@ -20,6 +20,11 @@ package appeng.core.features;
import java.lang.reflect.Constructor; import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import javax.annotation.Nonnull;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.item.Item; import net.minecraft.item.Item;
@@ -27,10 +32,6 @@ import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.world.IBlockAccess; import net.minecraft.world.IBlockAccess;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
import com.google.common.collect.ObjectArrays;
import appeng.api.definitions.IBlockDefinition; import appeng.api.definitions.IBlockDefinition;
import appeng.block.AEBaseBlock; import appeng.block.AEBaseBlock;
@@ -92,13 +93,16 @@ public class BlockDefinition extends ItemDefinition implements IBlockDefinition
/** /**
* Create an {@link ItemBlock} from a {@link Block} to register it later as {@link Item} * Create an {@link ItemBlock} from a {@link Block} to register it later as {@link Item}
* *
* @param block * @param block to be constructed from
* @return *
* @return item from block
*/ */
@Nonnull
private static Item constructItemFromBlock( Block block ) private static Item constructItemFromBlock( Block block )
{ {
final Class<? extends ItemBlock> itemclass = getItemBlockConstructor( block ); final Class<? extends ItemBlock> itemClass = getItemBlockConstructor( block );
return constructItemBlock( block, itemclass );
return constructItemBlock( block, itemClass );
} }
/** /**
@@ -110,6 +114,7 @@ public class BlockDefinition extends ItemDefinition implements IBlockDefinition
* @param block the block used to determine the used constructor. * @param block the block used to determine the used constructor.
* @return a {@link Class} extending ItemBlock * @return a {@link Class} extending ItemBlock
*/ */
@Nonnull
private static Class<? extends ItemBlock> getItemBlockConstructor( Block block ) private static Class<? extends ItemBlock> getItemBlockConstructor( Block block )
{ {
if ( block instanceof AEBaseBlock ) if ( block instanceof AEBaseBlock )
@@ -124,32 +129,39 @@ public class BlockDefinition extends ItemDefinition implements IBlockDefinition
/** /**
* Actually construct an instance of {@link Item} with the block and earlier determined constructor. * Actually construct an instance of {@link Item} with the block and earlier determined constructor.
* *
* Shamelessly stolen from the forge magic.
*
* TODO: throw an exception instead of returning null? As this could cause issue later on.
*
* @param block the block to create the {@link ItemBlock} from * @param block the block to create the {@link ItemBlock} from
* @param itemclass the class used to construct it. * @param itemClass the class used to construct it.
* @return an {@link Item} for the block. Actually always a sub type of {@link ItemBlock} * @return an {@link Item} for the block. Actually always a sub type of {@link ItemBlock}
*/ */
private static Item constructItemBlock( Block block, Class<? extends ItemBlock> itemclass ) @Nonnull
private static Item constructItemBlock( Block block, Class<? extends ItemBlock> itemClass )
{ {
assert block != null;
assert itemClass != null;
try try
{ {
Object[] itemCtorArgs = new Object[] {}; final Constructor<? extends ItemBlock> itemConstructor = itemClass.getConstructor( Block.class );
Class<?>[] ctorArgClasses = new Class<?>[itemCtorArgs.length + 1];
ctorArgClasses[0] = Block.class;
for ( int idx = 1; idx < ctorArgClasses.length; idx++ )
{
ctorArgClasses[idx] = itemCtorArgs[idx - 1].getClass();
}
Constructor<? extends ItemBlock> itemCtor = itemclass.getConstructor( ctorArgClasses ); return itemConstructor.newInstance( block );
return itemCtor.newInstance( ObjectArrays.concat( block, itemCtorArgs ) );
} }
catch ( Throwable t ) catch( InstantiationException e )
{ {
return null; e.printStackTrace();
} }
catch( IllegalAccessException e )
{
e.printStackTrace();
}
catch( InvocationTargetException e )
{
e.printStackTrace();
}
catch( NoSuchMethodException e )
{
e.printStackTrace();
}
throw new IllegalStateException( "Tried to construct an ItemBlock from Block " + block.getUnlocalizedName() + " and Class<Item>" + itemClass );
} }
} }
@@ -19,23 +19,26 @@
package appeng.core.features; package appeng.core.features;
import net.minecraft.item.Item; import javax.annotation.Nonnull;
import net.minecraft.item.ItemStack;
import net.minecraft.world.IBlockAccess;
import com.google.common.base.Optional; import com.google.common.base.Optional;
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.IBlockAccess;
import appeng.api.definitions.IItemDefinition; import appeng.api.definitions.IItemDefinition;
import appeng.util.Platform; import appeng.util.Platform;
public class ItemDefinition implements IItemDefinition public class ItemDefinition implements IItemDefinition
{ {
@Nonnull
private final Item item; private final Item item;
private final boolean enabled; private final boolean enabled;
public ItemDefinition( Item item, ActivityState state ) public ItemDefinition( @Nonnull Item item, @Nonnull ActivityState state )
{ {
Preconditions.checkNotNull( item ); Preconditions.checkNotNull( item );
Preconditions.checkNotNull( state ); Preconditions.checkNotNull( state );
@@ -86,7 +86,11 @@ public final class VersionParser
{ {
assert PATTERN_VALID_REVISION.matcher( rawRevision ).matches(); assert PATTERN_VALID_REVISION.matcher( rawRevision ).matches();
final int revision = new Scanner( rawRevision ).useDelimiter( PATTERN_REVISION ).nextInt(); final Scanner scanner = new Scanner( rawRevision );
final int revision = scanner.useDelimiter( PATTERN_REVISION ).nextInt();
scanner.close();
return revision; return revision;
} }
@@ -124,7 +128,11 @@ public final class VersionParser
{ {
assert PATTERN_NATURAL.matcher( rawBuild ).matches(); assert PATTERN_NATURAL.matcher( rawBuild ).matches();
final int build = new Scanner( rawBuild ).useDelimiter( PATTERN_BUILD ).nextInt(); final Scanner scanner = new Scanner( rawBuild );
final int build = scanner.useDelimiter( PATTERN_BUILD ).nextInt();
scanner.close();
return build; return build;
} }
@@ -4,7 +4,7 @@ package appeng.services.version.github;
/** /**
* Template class for Gson to write values from the Json Object into an actual class * Template class for Gson to write values from the Json Object into an actual class
*/ */
@SuppressWarnings( "ALL" ) @SuppressWarnings( "all" )
public class Release public class Release
{ {
/** /**
@@ -1,5 +1,5 @@
tile.appliedenergistics2.BlockCableBus.name=AE2-Kabel und/oder Bus tile.appliedenergistics2.BlockCableBus.name=AE2-Kabel und/oder Bus
tile.appliedenergistics2.BlockCellWorkbench.name=Zellenwerkbank tile.appliedenergistics2.BlockCellWorkbench.name=Speicherzellenwerkbank
tile.appliedenergistics2.BlockCharger.name=Ladegerät tile.appliedenergistics2.BlockCharger.name=Ladegerät
tile.appliedenergistics2.BlockChest.name=ME-Truhe tile.appliedenergistics2.BlockChest.name=ME-Truhe
tile.appliedenergistics2.BlockCondenser.name=Materiekondensator tile.appliedenergistics2.BlockCondenser.name=Materiekondensator
@@ -17,7 +17,7 @@ tile.appliedenergistics2.BlockInscriber.name=Gravurmaschine
tile.appliedenergistics2.BlockInterface.name=ME-Schnittstelle tile.appliedenergistics2.BlockInterface.name=ME-Schnittstelle
tile.appliedenergistics2.BlockQuantumLinkChamber.name=ME-Quantentunnelkammer tile.appliedenergistics2.BlockQuantumLinkChamber.name=ME-Quantentunnelkammer
tile.appliedenergistics2.BlockQuantumRing.name=ME-Quantentunnelring tile.appliedenergistics2.BlockQuantumRing.name=ME-Quantentunnelring
tile.appliedenergistics2.BlockFluix.name=Fluix-Block tile.appliedenergistics2.BlockFluix.name=Fluixblock
tile.appliedenergistics2.BlockQuartz.name=Certusquarzblock tile.appliedenergistics2.BlockQuartz.name=Certusquarzblock
tile.appliedenergistics2.BlockQuartzChiseled.name=Gemeißelter Certusquarzblock tile.appliedenergistics2.BlockQuartzChiseled.name=Gemeißelter Certusquarzblock
tile.appliedenergistics2.BlockQuartzGlass.name=Quarzglas tile.appliedenergistics2.BlockQuartzGlass.name=Quarzglas
@@ -50,7 +50,7 @@ tile.appliedenergistics2.BlockCraftingAccelerator.name=Fertigungs-Prozessoreinhe
tile.appliedenergistics2.BlockCraftingUnit.name=Fertigungseinheit tile.appliedenergistics2.BlockCraftingUnit.name=Fertigungseinheit
tile.appliedenergistics2.BlockMolecularAssembler.name=Molekularassembler tile.appliedenergistics2.BlockMolecularAssembler.name=Molekularassembler
chat.appliedenergistics2.ChestCannotReadStorageCell=ME-Truhe kann Speicherzelle nicht einlesen. chat.appliedenergistics2.ChestCannotReadStorageCell=ME-Truhe kann die Speicherzelle nicht einlesen.
chat.appliedenergistics2.SettingCleared=Einstellung gelöscht. chat.appliedenergistics2.SettingCleared=Einstellung gelöscht.
chat.appliedenergistics2.OutOfRange=Drahtloser Zugangspunkt außer Reichweite. chat.appliedenergistics2.OutOfRange=Drahtloser Zugangspunkt außer Reichweite.
chat.appliedenergistics2.InvalidMachine=Ungültige Maschine. chat.appliedenergistics2.InvalidMachine=Ungültige Maschine.
@@ -148,11 +148,11 @@ gui.appliedenergistics2.Crafts=Fertigt
gui.appliedenergistics2.And=und gui.appliedenergistics2.And=und
gui.appliedenergistics2.Creates=Kreiert gui.appliedenergistics2.Creates=Kreiert
gui.appliedenergistics2.With=mit gui.appliedenergistics2.With=mit
gui.appliedenergistics2.InWorldCrafting=AE2 In-World-Fertigung gui.appliedenergistics2.InWorldCrafting=AE2 In-Welt-Fertigung
gui.appliedenergistics2.inWorldFluix=Wirf 1 Geladenes Certusquarzstück + 1 Netherquarz + Redstone-Staub nebeneinander in eine Pfütze und warte einen Moment. gui.appliedenergistics2.inWorldFluix=Wirf 1 Geladenes Certusquarzstück + 1 Netherquarz + Redstone-Staub nebeneinander in eine Pfütze und warte einen Moment.
gui.appliedenergistics2.inWorldPurificationCertus=Wirf einen Certusquarzkeim, gemacht aus Certusquarzstaub und Sand, in eine Pfütze Wasser; um den Prozess zu beschleunigen, füge Kristallwachstumsbeschleuniger hinzu. gui.appliedenergistics2.inWorldPurificationCertus=Wirf einen Certusquarzkeim, gemacht aus Certusquarzstaub und Sand, in eine Pfütze Wasser; um den Prozess zu beschleunigen, füge Kristallwachstumsbeschleuniger hinzu.
gui.appliedenergistics2.inWorldPurificationNether=Wirf einen Netherquarzkeim, gemacht aus Netherquarzstaub und Sand, in eine Pfütze Wasser; um den Prozess zu beschleunigen, füge Kristallwachstumsbeschleuniger hinzu. gui.appliedenergistics2.inWorldPurificationNether=Wirf einen Netherquarzkeim, gemacht aus Netherquarzstaub und Sand, in eine Pfütze Wasser; um den Prozess zu beschleunigen, füge Kristallwachstumsbeschleuniger hinzu.
gui.appliedenergistics2.inWorldPurificationFluix=Wirf einen Fluix-Keim, gemacht aus Fluix-Staub und Sand, in eine Pfütze Wasser; um den Prozess zu beschleunigen, füge Kristallwachstumsbeschleuniger hinzu. gui.appliedenergistics2.inWorldPurificationFluix=Wirf einen Fluixkeim, gemacht aus Fluixstaub und Sand, in eine Pfütze Wasser; um den Prozess zu beschleunigen, füge Kristallwachstumsbeschleuniger hinzu.
gui.appliedenergistics2.inWorldSingularity=Wirf zum Erschaffen 1 Singularität und 1 Enderstaub zusammen und erzeuge in Reichweite der Items eine Explosion. gui.appliedenergistics2.inWorldSingularity=Wirf zum Erschaffen 1 Singularität und 1 Enderstaub zusammen und erzeuge in Reichweite der Items eine Explosion.
gui.appliedenergistics2.ChargedQuartz=Geladener Certusquarz entsteht durch Einfügen eines Ungeladenen Certusquarzkristalls in ein Ladegerät, das Energie erhält. gui.appliedenergistics2.ChargedQuartz=Geladener Certusquarz entsteht durch Einfügen eines Ungeladenen Certusquarzkristalls in ein Ladegerät, das Energie erhält.
gui.appliedenergistics2.ChargedQuartzFind=Geladener Certusquarz kann relativ selten in der Welt gefunden werden, er sieht aus wie gewöhnlicher Certusquarz, aber er funkelt. gui.appliedenergistics2.ChargedQuartzFind=Geladener Certusquarz kann relativ selten in der Welt gefunden werden, er sieht aus wie gewöhnlicher Certusquarz, aber er funkelt.
@@ -309,7 +309,7 @@ waila.appliedenergistics2.Locked=Gesperrt
waila.appliedenergistics2.Unlocked=Entsperrt waila.appliedenergistics2.Unlocked=Entsperrt
waila.appliedenergistics2.Showing=Zeigt waila.appliedenergistics2.Showing=Zeigt
waila.appliedenergistics2.Contains=Enthält waila.appliedenergistics2.Contains=Enthält
waila.appliedenergistics2.Channels=%1$d of %2$d Kanäle waila.appliedenergistics2.Channels=%1$d von %2$d Kanälen
item.appliedenergistics2.ItemBasicStorageCell.1k.name=1k-ME-Speicherzelle item.appliedenergistics2.ItemBasicStorageCell.1k.name=1k-ME-Speicherzelle
item.appliedenergistics2.ItemBasicStorageCell.4k.name=4k-ME-Speicherzelle item.appliedenergistics2.ItemBasicStorageCell.4k.name=4k-ME-Speicherzelle
@@ -322,7 +322,7 @@ item.appliedenergistics2.ItemFacade.name=Kabelfassade
item.appliedenergistics2.ItemCrystalSeed.Certus.name=Certusquarzkeim item.appliedenergistics2.ItemCrystalSeed.Certus.name=Certusquarzkeim
item.appliedenergistics2.ItemCrystalSeed.Nether.name=Netherquarzkeim item.appliedenergistics2.ItemCrystalSeed.Nether.name=Netherquarzkeim
item.appliedenergistics2.ItemCrystalSeed.Fluix.name=Fluix-Keim item.appliedenergistics2.ItemCrystalSeed.Fluix.name=Fluixkeim
item.appliedenergistics2.ItemMaterial.InvalidType.name=Dieses Item ist deaktiviert. item.appliedenergistics2.ItemMaterial.InvalidType.name=Dieses Item ist deaktiviert.
item.appliedenergistics2.ItemMaterial.AdvCard.name=Fortgeschrittene Karte item.appliedenergistics2.ItemMaterial.AdvCard.name=Fortgeschrittene Karte
item.appliedenergistics2.ItemMaterial.AnnihilationCore.name=Annihilationskern item.appliedenergistics2.ItemMaterial.AnnihilationCore.name=Annihilationskern
@@ -1,3 +1,4 @@
//Blocos
tile.appliedenergistics2.BlockCableBus.name=Cabos e/ou Barramentos do AE2 tile.appliedenergistics2.BlockCableBus.name=Cabos e/ou Barramentos do AE2
tile.appliedenergistics2.BlockCellWorkbench.name=Bancada de Células tile.appliedenergistics2.BlockCellWorkbench.name=Bancada de Células
tile.appliedenergistics2.BlockCharger.name=Carregador tile.appliedenergistics2.BlockCharger.name=Carregador
@@ -19,7 +20,7 @@ tile.appliedenergistics2.BlockQuantumLinkChamber.name=Câmara de Ligação Quân
tile.appliedenergistics2.BlockQuantumRing.name=Anel Quântico ME tile.appliedenergistics2.BlockQuantumRing.name=Anel Quântico ME
tile.appliedenergistics2.BlockFluix.name=Bloco de Fluix tile.appliedenergistics2.BlockFluix.name=Bloco de Fluix
tile.appliedenergistics2.BlockQuartz.name=Bloco de Quartzo Certus tile.appliedenergistics2.BlockQuartz.name=Bloco de Quartzo Certus
tile.appliedenergistics2.BlockQuartzChiseled.name=Bloco de Quartzo Certus Cinzelado tile.appliedenergistics2.BlockQuartzChiseled.name=Bloco de Quartzo Certus Talhado
tile.appliedenergistics2.BlockQuartzGlass.name=Vidro de Quartzo tile.appliedenergistics2.BlockQuartzGlass.name=Vidro de Quartzo
tile.appliedenergistics2.BlockQuartzLamp.name=Vidro Vibrante de Quartzo tile.appliedenergistics2.BlockQuartzLamp.name=Vidro Vibrante de Quartzo
tile.appliedenergistics2.BlockQuartzPillar.name=Pilar de Quartzo Certus tile.appliedenergistics2.BlockQuartzPillar.name=Pilar de Quartzo Certus
@@ -50,8 +51,8 @@ tile.appliedenergistics2.BlockCraftingAccelerator.name=Unidade de Co-Processamen
tile.appliedenergistics2.BlockCraftingUnit.name=Unidade de Fabricação tile.appliedenergistics2.BlockCraftingUnit.name=Unidade de Fabricação
tile.appliedenergistics2.BlockMolecularAssembler.name=Montador Molecular tile.appliedenergistics2.BlockMolecularAssembler.name=Montador Molecular
// Stairs // Escadas
tile.appliedenergistics2.ChiseledQuartzStairBlock.name=Escadas de Quartzo Certus Cinzelado tile.appliedenergistics2.ChiseledQuartzStairBlock.name=Escadas de Quartzo Certus Talhadas
tile.appliedenergistics2.FluixStairBlock.name=Escadas de Fluix tile.appliedenergistics2.FluixStairBlock.name=Escadas de Fluix
tile.appliedenergistics2.QuartzPillarStairBlock.name=Escadas de Pilar de Quartzo Certus tile.appliedenergistics2.QuartzPillarStairBlock.name=Escadas de Pilar de Quartzo Certus
tile.appliedenergistics2.QuartzStairBlock.name=Escadas de Quartzo Certus tile.appliedenergistics2.QuartzStairBlock.name=Escadas de Quartzo Certus
@@ -472,7 +473,7 @@ achievement.ae2.IOPort=Embaralhamento de Células de Armazenamentos
achievement.ae2.IOPort.desc=Faça uma Porta de ES achievement.ae2.IOPort.desc=Faça uma Porta de ES
achievement.ae2.CraftingTerminal=Uma Bancada (Muito) Maior achievement.ae2.CraftingTerminal=Uma Bancada (Muito) Maior
achievement.ae2.CraftingTerminal.desc=Faça um Terminal de Fabricação achievement.ae2.CraftingTerminal.desc=Faça um Terminal de Fabricação
achievement.ae2.PatternTerminal=Maestro de Fabricação achievement.ae2.PatternTerminal=Maestro da Fabricação
achievement.ae2.PatternTerminal.desc=Faça um Terminal de Padrões achievement.ae2.PatternTerminal.desc=Faça um Terminal de Padrões
achievement.ae2.ChargedQuartz=Chocante achievement.ae2.ChargedQuartz=Chocante
achievement.ae2.ChargedQuartz.desc=Ache Quartzo Carregado achievement.ae2.ChargedQuartz.desc=Ache Quartzo Carregado
@@ -502,7 +503,7 @@ achievement.ae2.Facade=Estética de Rede
achievement.ae2.Facade.desc=Faça uma Fachada de Cabo achievement.ae2.Facade.desc=Faça uma Fachada de Cabo
achievement.ae2.NetworkTool=Diagnóstico de Rede achievement.ae2.NetworkTool=Diagnóstico de Rede
achievement.ae2.NetworkTool.desc=Faça uma Ferramenta de Rede achievement.ae2.NetworkTool.desc=Faça uma Ferramenta de Rede
achievement.ae2.PortableCell=Armazenamento Portátil achievement.ae2.PortableCell=Armazenamento Nômade
achievement.ae2.PortableCell.desc=Faça uma Célula Portátil achievement.ae2.PortableCell.desc=Faça uma Célula Portátil
achievement.ae2.StorageBus=Potencial Sem Limites achievement.ae2.StorageBus=Potencial Sem Limites
achievement.ae2.StorageBus.desc=Faça um Barramento de Armazenamento achievement.ae2.StorageBus.desc=Faça um Barramento de Armazenamento
@@ -66,3 +66,4 @@ import=dyes_dense.recipe
import=paint_balls.recipe import=paint_balls.recipe
import=crafting.recipe import=crafting.recipe
import=vanilla_enhance.recipe import=vanilla_enhance.recipe
import=stairs.recipe
@@ -0,0 +1,47 @@
shaped=
ae2:BlockQuartzChiseled _ _,
ae2:BlockQuartzChiseled ae2:BlockQuartzChiseled _,
ae2:BlockQuartzChiseled ae2:BlockQuartzChiseled ae2:BlockQuartzChiseled
-> 4 ae2:ChiseledQuartzStairBlock
shaped=
ae2:BlockFluix _ _,
ae2:BlockFluix ae2:BlockFluix _,
ae2:BlockFluix ae2:BlockFluix ae2:BlockFluix
-> 4 ae2:FluixStairBlock
shaped=
ae2:BlockQuartzPillar _ _,
ae2:BlockQuartzPillar ae2:BlockQuartzPillar _,
ae2:BlockQuartzPillar ae2:BlockQuartzPillar ae2:BlockQuartzPillar
-> 4 ae2:QuartzPillarStairBlock
shaped=
ae2:BlockQuartz _ _,
ae2:BlockQuartz ae2:BlockQuartz _,
ae2:BlockQuartz ae2:BlockQuartz ae2:BlockQuartz
-> 4 ae2:QuartzStairBlock
shaped=
ae2:BlockSkyStone _ _,
ae2:BlockSkyStone ae2:BlockSkyStone _,
ae2:BlockSkyStone ae2:BlockSkyStone ae2:BlockSkyStone
-> 4 ae2:SkyStoneStairBlock
shaped=
ae2:BlockSkyStone:1 _ _,
ae2:BlockSkyStone:1 ae2:BlockSkyStone:1 _,
ae2:BlockSkyStone:1 ae2:BlockSkyStone:1 ae2:BlockSkyStone:1
-> 4 ae2:SkyStoneBlockStairBlock
shaped=
ae2:BlockSkyStone:2 _ _,
ae2:BlockSkyStone:2 ae2:BlockSkyStone:2 _,
ae2:BlockSkyStone:2 ae2:BlockSkyStone:2 ae2:BlockSkyStone:2
-> 4 ae2:SkyStoneBrickStairBlock
shaped=
ae2:BlockSkyStone:3 _ _,
ae2:BlockSkyStone:3 ae2:BlockSkyStone:3 _,
ae2:BlockSkyStone:3 ae2:BlockSkyStone:3 ae2:BlockSkyStone:3
-> 4 ae2:SkyStoneSmallBrickStairBlock