Skip to content

Commit

Permalink
Merge pull request #664 from thatsIch/b-663-disabled-facades
Browse files Browse the repository at this point in the history
Fixes #663 NPE on disabled Facades
  • Loading branch information
thatsIch committed Dec 30, 2014
2 parents 97dabc4 + ada69b9 commit 305fc6c
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 18 deletions.
6 changes: 3 additions & 3 deletions src/main/java/appeng/facade/FacadeContainer.java
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ public void writeToStream(ByteBuf out) throws IOException
for (int x = 0; x < this.facades; x++)
{
if ( this.getFacade( ForgeDirection.getOrientation( x ) ) != null )
facadeSides = facadeSides | (1 << x);
facadeSides |= ( 1 << x );
}
out.writeByte( (byte) facadeSides );

Expand All @@ -79,7 +79,7 @@ public boolean readFromStream(ByteBuf out) throws IOException

boolean changed = false;

int ids[] = new int[2];
int[] ids = new int[2];
for (int x = 0; x < this.facades; x++)
{
ForgeDirection side = ForgeDirection.getOrientation( x );
Expand Down Expand Up @@ -205,7 +205,7 @@ public boolean isEmpty()
@Override
public void rotateLeft()
{
IFacadePart newFacades[] = new FacadePart[6];
IFacadePart[] newFacades = new FacadePart[6];

newFacades[ForgeDirection.UP.ordinal()] = this.storage.getFacade( ForgeDirection.UP.ordinal() );
newFacades[ForgeDirection.DOWN.ordinal()] = this.storage.getFacade( ForgeDirection.DOWN.ordinal() );
Expand Down
46 changes: 31 additions & 15 deletions src/main/java/appeng/recipes/game/FacadeRecipe.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,29 +18,52 @@

package appeng.recipes.game;


import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.world.World;

import com.google.common.base.Optional;

import appeng.api.AEApi;
import appeng.api.util.AEItemDefinition;
import appeng.items.parts.ItemFacade;


public class FacadeRecipe implements IRecipe
{

private final AEItemDefinition anchor = AEApi.instance().parts().partCableAnchor;
private final ItemFacade facade = (ItemFacade) AEApi.instance().items().itemFacade.item();
private final Optional<AEItemDefinition> maybeAnchor;
private final Optional<AEItemDefinition> maybeFacade;

public FacadeRecipe()
{
this.maybeFacade = Optional.fromNullable( AEApi.instance().items().itemFacade );
this.maybeAnchor = Optional.fromNullable( AEApi.instance().parts().partCableAnchor );
}

private ItemStack getOutput(InventoryCrafting inv, boolean createFacade)
@Override
public boolean matches( InventoryCrafting inv, World w )
{
if ( inv.getStackInSlot( 0 ) == null && inv.getStackInSlot( 2 ) == null && inv.getStackInSlot( 6 ) == null && inv.getStackInSlot( 8 ) == null )
return this.getOutput( inv, false ) != null;
}

private ItemStack getOutput( IInventory inv, boolean createFacade )
{
if ( this.maybeAnchor.isPresent() && this.maybeFacade.isPresent() && inv.getStackInSlot( 0 ) == null && inv.getStackInSlot( 2 ) == null && inv.getStackInSlot( 6 ) == null && inv.getStackInSlot( 8 ) == null )
{
if ( this.anchor.sameAsStack( inv.getStackInSlot( 1 ) ) && this.anchor.sameAsStack( inv.getStackInSlot( 3 ) ) && this.anchor.sameAsStack( inv.getStackInSlot( 5 ) )
&& this.anchor.sameAsStack( inv.getStackInSlot( 7 ) ) )
final AEItemDefinition anchorDefinition = this.maybeAnchor.get();
final AEItemDefinition facadeDefinition = this.maybeFacade.get();

if ( anchorDefinition.sameAsStack( inv.getStackInSlot( 1 ) ) && anchorDefinition.sameAsStack( inv.getStackInSlot( 3 ) ) && anchorDefinition.sameAsStack( inv.getStackInSlot( 5 ) ) && anchorDefinition.sameAsStack( inv.getStackInSlot( 7 ) ) )
{
ItemStack facades = this.facade.createFacadeForItem( inv.getStackInSlot( 4 ), !createFacade );
final Item itemDefinition = facadeDefinition.item();
final ItemFacade facade = (ItemFacade) itemDefinition;

ItemStack facades = facade.createFacadeForItem( inv.getStackInSlot( 4 ), !createFacade );
if ( facades != null && createFacade )
facades.stackSize = 4;
return facades;
Expand All @@ -50,13 +73,7 @@ private ItemStack getOutput(InventoryCrafting inv, boolean createFacade)
}

@Override
public boolean matches(InventoryCrafting inv, World w)
{
return this.getOutput( inv, false ) != null;
}

@Override
public ItemStack getCraftingResult(InventoryCrafting inv)
public ItemStack getCraftingResult( InventoryCrafting inv )
{
return this.getOutput( inv, true );
}
Expand All @@ -72,5 +89,4 @@ public ItemStack getRecipeOutput() // no default output..
{
return null;
}

}

0 comments on commit 305fc6c

Please sign in to comment.