Compare commits

...

5 Commits

Author SHA1 Message Date
Salomão 6ca3e6e696 add tooltip to fluid level emitter number box 2021-04-05 00:11:30 -03:00
Salomão a4b5cfc3b9 fix lightning issue while tooltip is showing on interface terminal 2021-04-04 22:17:14 -03:00
Salomão 38b0a7a153 handle interface slots serverside 2021-04-04 01:29:27 -03:00
Salomão aa4863a979 Added Fluid support for the Storage Monitor and Conversion Monitor
Highlighted interfaces is turned off after switching dimensions
2021-04-02 08:31:14 -03:00
Salomão 44c7a46315 fix advancements not triggering 2021-04-02 08:29:32 -03:00
35 changed files with 762 additions and 349 deletions
+9 -36
View File
@@ -387,29 +387,13 @@ public abstract class AEBaseGui extends GuiContainer implements IMTModGuiContain
{ {
if( !itemstack.isEmpty() ) if( !itemstack.isEmpty() )
{ {
Set<IItemHandler> visitedInterfaces = new HashSet<>();
for( final Slot dr : this.drag_click ) for( final Slot dr : this.drag_click )
{ {
IItemHandler interfaceHandler = ( (SlotDisconnected) slot ).getSlot().getInventory(); if( slot.getStack().isEmpty() )
if (visitedInterfaces.contains( interfaceHandler )) break;
visitedInterfaces.add( interfaceHandler );
boolean canInsert = true;
for( int s = 0; s < interfaceHandler.getSlots(); s++ )
{ {
if( ItemStack.areItemStacksEqual( interfaceHandler.getStackInSlot( s ), itemstack ) ) InventoryAction action = InventoryAction.SPLIT_OR_PLACE_SINGLE;
{ final PacketInventoryAction p = new PacketInventoryAction( action, dr.getSlotIndex(), ( (SlotDisconnected) slot ).getSlot().getId() );
canInsert = false; NetworkHandler.instance().sendToServer( p );
break;
}
}
if( canInsert )
{
if( slot.getStack().isEmpty() )
{
InventoryAction action = InventoryAction.SPLIT_OR_PLACE_SINGLE;
final PacketInventoryAction p = new PacketInventoryAction( action, dr.getSlotIndex(), ( (SlotDisconnected) slot ).getSlot().getId() );
NetworkHandler.instance().sendToServer( p );
}
} }
} }
} }
@@ -538,23 +522,12 @@ public abstract class AEBaseGui extends GuiContainer implements IMTModGuiContain
case PICKUP: // pickup / set-down. case PICKUP: // pickup / set-down.
if( slot.getStack().isEmpty() && !player.inventory.getItemStack().isEmpty() ) if( slot.getStack().isEmpty() && !player.inventory.getItemStack().isEmpty() )
{ {
boolean canInsert = true; action = InventoryAction.SPLIT_OR_PLACE_SINGLE;
IItemHandler interfaceHandler = ( (SlotDisconnected) slot ).getSlot().getInventory(); }
for( int s = 0; s < interfaceHandler.getSlots(); s++ ) if( !slot.getStack().isEmpty() && player.inventory.getItemStack().getCount() <= 1 )
{ {
if( ItemStack.areItemStacksEqual( interfaceHandler.getStackInSlot( s ), player.inventory.getItemStack() ) ) action = InventoryAction.PICKUP_OR_SET_DOWN;
{
canInsert = false;
break;
}
}
if( canInsert )
{
action = InventoryAction.SPLIT_OR_PLACE_SINGLE;
}
break;
} }
if( !slot.getStack().isEmpty() && player.inventory.getItemStack().getCount() <= 1 ) action = InventoryAction.PICKUP_OR_SET_DOWN;
break; break;
case QUICK_MOVE: case QUICK_MOVE:
action = ( mouseButton == 1 ) ? InventoryAction.PICKUP_SINGLE : InventoryAction.SHIFT_CLICK; action = ( mouseButton == 1 ) ? InventoryAction.PICKUP_SINGLE : InventoryAction.SHIFT_CLICK;
@@ -123,14 +123,6 @@ public class GuiInterfaceTerminal extends AEBaseGui
super.onGuiClosed(); super.onGuiClosed();
} }
@Override
protected boolean isPointInRegion( int rectX, int rectY, int rectWidth, int rectHeight, int pointX, int pointY )
{
if( searchFieldInputs.isMouseIn( pointX, pointY ) ) drawTooltip( pointX - guiLeft - offsetX, pointY - guiTop , "Inputs OR names" );
else if( searchFieldOutputs.isMouseIn( pointX, pointY ) ) drawTooltip( pointX - guiLeft - offsetX, pointY - guiTop, "Outputs OR names" );
return super.isPointInRegion( rectX, rectY, rectWidth, rectHeight, pointX, pointY );
}
@Override @Override
public void drawFG( final int offsetX, final int offsetY, final int mouseX, final int mouseY ) public void drawFG( final int offsetX, final int offsetY, final int mouseX, final int mouseY )
{ {
@@ -186,6 +178,10 @@ public class GuiInterfaceTerminal extends AEBaseGui
} }
offset += 18; offset += 18;
} }
if( searchFieldInputs.isMouseIn( mouseX, mouseY ) ) drawTooltip( mouseX - guiLeft - offsetX, mouseY - guiTop, "Inputs OR names" );
else if( searchFieldOutputs.isMouseIn( mouseX, mouseY ) ) drawTooltip( mouseX - guiLeft - offsetX, mouseY - guiTop, "Outputs OR names" );
} }
@Override @Override
@@ -217,7 +213,8 @@ public class GuiInterfaceTerminal extends AEBaseGui
{ {
BlockPos blockPos = blockPosHashMap.get( guiButtonHashMap.get( this.selectedButton ) ); BlockPos blockPos = blockPosHashMap.get( guiButtonHashMap.get( this.selectedButton ) );
BlockPos blockPos2 = mc.player.getPosition(); BlockPos blockPos2 = mc.player.getPosition();
hilightBlock( blockPos, System.currentTimeMillis() + 500 * BlockPosUtils.getDistance(blockPos, blockPos2) ); int dimension = mc.world.provider.getDimension();
hilightBlock( blockPos, System.currentTimeMillis() + 500 * BlockPosUtils.getDistance(blockPos, blockPos2), dimension );
mc.player.sendStatusMessage( new TextComponentString( "The interface is now highlighted at " + "X: " + blockPos.getX() + " Y: " + blockPos.getY() + " Z: " + blockPos.getZ() ), false ); mc.player.sendStatusMessage( new TextComponentString( "The interface is now highlighted at " + "X: " + blockPos.getX() + " Y: " + blockPos.getY() + " Z: " + blockPos.getZ() ), false );
mc.player.closeScreen(); mc.player.closeScreen();
} }
@@ -376,6 +373,7 @@ public class GuiInterfaceTerminal extends AEBaseGui
// Shortcut to skip any filter if search term is ""/empty // Shortcut to skip any filter if search term is ""/empty
boolean found = (searchFieldInputs.isEmpty() && searchFieldOutputs.isEmpty() && !partInterfaceTerminal.onlyInterfacesWithFreeSlots); boolean found = (searchFieldInputs.isEmpty() && searchFieldOutputs.isEmpty() && !partInterfaceTerminal.onlyInterfacesWithFreeSlots);
boolean interfaceHasFreeSlots = false;
// Search if the current inventory holds a pattern containing the search term. // Search if the current inventory holds a pattern containing the search term.
if( !found ) if( !found )
@@ -388,25 +386,15 @@ public class GuiInterfaceTerminal extends AEBaseGui
found = ( this.itemStackMatchesSearchTerm( itemStack, searchFieldInputs, 0 ) ); found = ( this.itemStackMatchesSearchTerm( itemStack, searchFieldInputs, 0 ) );
else if( !searchFieldOutputs.isEmpty() ) else if( !searchFieldOutputs.isEmpty() )
found = ( this.itemStackMatchesSearchTerm( itemStack, searchFieldOutputs, 1 ) ); found = ( this.itemStackMatchesSearchTerm( itemStack, searchFieldOutputs, 1 ) );
// If only Interfaces with empty slots should be shown, check that here
if(itemStack.isEmpty())
interfaceHasFreeSlots = true;
if( found ) if( found )
{ {
break; break;
} }
} }
}
// If only Interfaces with empty slots should be shown, check that here
boolean interfaceHasFreeSlots = false;
if (partInterfaceTerminal.onlyInterfacesWithFreeSlots) {
for( final ItemStack itemStack : entry.getInventory() )
{
if(itemStack.isEmpty()){
interfaceHasFreeSlots = true;
break;
}
}
} }
// if found, filter skipped or machine name matching the search term, add it // if found, filter skipped or machine name matching the search term, add it
if( found || (entry.getName().toLowerCase().contains( searchFieldInputs ) && entry.getName().toLowerCase().contains( searchFieldOutputs ))) if( found || (entry.getName().toLowerCase().contains( searchFieldInputs ) && entry.getName().toLowerCase().contains( searchFieldOutputs )))
{ {
@@ -8,9 +8,14 @@ public class BlockPosHighlighter
private static BlockPos hilightedBlock; private static BlockPos hilightedBlock;
private static long expireHilight; private static long expireHilight;
public static void hilightBlock( BlockPos c, long expireHilight ) {
private static int dimension;
public static void hilightBlock( BlockPos c, long expireHilight, int dimension ) {
hilightedBlock = c; hilightedBlock = c;
BlockPosHighlighter.expireHilight = expireHilight; BlockPosHighlighter.expireHilight = expireHilight;
BlockPosHighlighter.dimension = dimension;
} }
public static BlockPos getHilightedBlock() { public static BlockPos getHilightedBlock() {
@@ -21,5 +26,9 @@ public class BlockPosHighlighter
return expireHilight; return expireHilight;
} }
public static int getDimension()
{
return dimension;
}
} }
@@ -19,6 +19,7 @@
package appeng.client.render; package appeng.client.render;
import appeng.api.storage.data.IAEFluidStack;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.GlStateManager;
@@ -30,6 +31,7 @@ import net.minecraft.util.EnumFacing;
import appeng.api.storage.data.IAEItemStack; import appeng.api.storage.data.IAEItemStack;
import appeng.util.IWideReadableNumberConverter; import appeng.util.IWideReadableNumberConverter;
import appeng.util.ReadableNumberConverter; import appeng.util.ReadableNumberConverter;
import net.minecraftforge.fluids.FluidStack;
/** /**
@@ -143,4 +145,23 @@ public class TesrRenderHelper
} }
public static void renderFluid2dWithAmount( IAEFluidStack fluidStack, float scale, float spacing )
{
final ItemStack renderStack = fluidStack.asItemStackRepresentation();
TesrRenderHelper.renderItem2d( renderStack, scale );
final long stackSize = fluidStack.getStackSize() / 1000;
final String renderedStackSize = NUMBER_CONVERTER.toWideReadableForm( stackSize ) + "B";
// Render the item count
final FontRenderer fr = Minecraft.getMinecraft().fontRenderer;
final int width = fr.getStringWidth( renderedStackSize );
GlStateManager.translate( 0.0f, spacing, 0 );
GlStateManager.scale( 1.0f / 62.0f, 1.0f / 62.0f, 1.0f / 62.0f );
GlStateManager.translate( -0.5f * width, 0.0f, 0.5f );
fr.drawString( renderedStackSize, 0, 0, 0 );
}
} }
@@ -215,35 +215,48 @@ public final class ContainerInterfaceTerminal extends AEBaseContainer
final IItemHandler theSlot = new WrapperFilteredItemHandler( new WrapperRangeItemHandler( inv.server, slot, slot + 1 ), new PatternSlotFilter() ); final IItemHandler theSlot = new WrapperFilteredItemHandler( new WrapperRangeItemHandler( inv.server, slot, slot + 1 ), new PatternSlotFilter() );
final InventoryAdaptor interfaceSlot = new AdaptorItemHandler( theSlot ); final InventoryAdaptor interfaceSlot = new AdaptorItemHandler( theSlot );
switch( action ) IItemHandler interfaceHandler = inv.server;
boolean canInsert = true;
switch ( action )
{ {
case PICKUP_OR_SET_DOWN: case PICKUP_OR_SET_DOWN:
if( hasItemInHand ) if( hasItemInHand )
{ {
ItemStack inSlot = theSlot.getStackInSlot( 0 ); for( int s = 0; s < interfaceHandler.getSlots(); s++ )
if( inSlot.isEmpty() )
{ {
player.inventory.setItemStack( interfaceSlot.addItems( player.inventory.getItemStack() ) ); if( Platform.itemComparisons().isSameItem( interfaceHandler.getStackInSlot( s ), player.inventory.getItemStack() ) )
}
else
{
inSlot = inSlot.copy();
final ItemStack inHand = player.inventory.getItemStack().copy();
ItemHandlerUtil.setStackInSlot( theSlot, 0, ItemStack.EMPTY );
player.inventory.setItemStack( ItemStack.EMPTY );
player.inventory.setItemStack( interfaceSlot.addItems( inHand.copy() ) );
if( player.inventory.getItemStack().isEmpty() )
{ {
player.inventory.setItemStack( inSlot ); canInsert = false;
break;
}
}
if( canInsert )
{
ItemStack inSlot = theSlot.getStackInSlot( 0 );
if( inSlot.isEmpty() )
{
player.inventory.setItemStack( interfaceSlot.addItems( player.inventory.getItemStack() ) );
} }
else else
{ {
player.inventory.setItemStack( inHand ); inSlot = inSlot.copy();
ItemHandlerUtil.setStackInSlot( theSlot, 0, inSlot ); final ItemStack inHand = player.inventory.getItemStack().copy();
ItemHandlerUtil.setStackInSlot( theSlot, 0, ItemStack.EMPTY );
player.inventory.setItemStack( ItemStack.EMPTY );
player.inventory.setItemStack( interfaceSlot.addItems( inHand.copy() ) );
if( player.inventory.getItemStack().isEmpty() )
{
player.inventory.setItemStack( inSlot );
}
else
{
player.inventory.setItemStack( inHand );
ItemHandlerUtil.setStackInSlot( theSlot, 0, inSlot );
}
} }
} }
} }
@@ -254,17 +267,27 @@ public final class ContainerInterfaceTerminal extends AEBaseContainer
break; break;
case SPLIT_OR_PLACE_SINGLE: case SPLIT_OR_PLACE_SINGLE:
if( hasItemInHand ) if( hasItemInHand )
{ {
ItemStack extra = playerHand.removeItems( 1, ItemStack.EMPTY, null ); for( int s = 0; s < interfaceHandler.getSlots(); s++ )
if( !extra.isEmpty() && !interfaceSlot.containsItems())
{ {
extra = interfaceSlot.addItems( extra ); if( Platform.itemComparisons().isSameItem( interfaceHandler.getStackInSlot( s ), player.inventory.getItemStack() ) )
{
canInsert = false;
break;
}
} }
if( !extra.isEmpty() ) if( canInsert )
{ {
playerHand.addItems( extra ); ItemStack extra = playerHand.removeItems( 1, ItemStack.EMPTY, null );
if( !extra.isEmpty() && !interfaceSlot.containsItems() )
{
extra = interfaceSlot.addItems( extra );
}
if( !extra.isEmpty() )
{
playerHand.addItems( extra );
}
} }
} }
else if( !is.isEmpty() ) else if( !is.isEmpty() )
@@ -90,6 +90,13 @@ public class GuiFluidLevelEmitter extends GuiUpgradeable
this.level.drawTextBox(); this.level.drawTextBox();
} }
@Override
public void drawFG( int offsetX, int offsetY, int mouseX, int mouseY )
{
if( isPointInRegion( 24, 43,89,this.fontRenderer.FONT_HEIGHT,mouseX,mouseY ) ) drawTooltip( mouseX - guiLeft - 7, mouseY - guiTop + 25, "Amount in millibuckets" );
super.drawFG( offsetX, offsetY, mouseX, mouseY );
}
@Override @Override
protected boolean drawUpgrades() protected boolean drawUpgrades()
{ {
@@ -26,10 +26,11 @@ public class HighlighterHandler
return; return;
} }
Minecraft mc = Minecraft.getMinecraft(); Minecraft mc = Minecraft.getMinecraft();
int dimension = mc.world.provider.getDimension();
long time = System.currentTimeMillis(); long time = System.currentTimeMillis();
if (time > BlockPosHighlighter.getExpireHilight()) { if (time > BlockPosHighlighter.getExpireHilight() || dimension != BlockPosHighlighter.getDimension()) {
BlockPosHighlighter.hilightBlock(null, -1); BlockPosHighlighter.hilightBlock(null, -1, BlockPosHighlighter.getDimension() );
return; return;
} }
@@ -21,6 +21,10 @@ package appeng.parts.reporting;
import java.io.IOException; import java.io.IOException;
import appeng.api.storage.channels.IFluidStorageChannel;
import appeng.api.storage.data.IAEFluidStack;
import appeng.fluids.util.AEFluidStack;
import appeng.util.item.AEStack;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.GlStateManager;
@@ -31,6 +35,9 @@ import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand; import net.minecraft.util.EnumHand;
import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.math.RayTraceResult;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3d;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
import net.minecraftforge.fluids.capability.IFluidHandlerItem;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
@@ -70,7 +77,9 @@ import appeng.util.item.AEItemStack;
public abstract class AbstractPartMonitor extends AbstractPartDisplay implements IPartStorageMonitor, IStackWatcherHost public abstract class AbstractPartMonitor extends AbstractPartDisplay implements IPartStorageMonitor, IStackWatcherHost
{ {
private static final IWideReadableNumberConverter NUMBER_CONVERTER = ReadableNumberConverter.INSTANCE; private static final IWideReadableNumberConverter NUMBER_CONVERTER = ReadableNumberConverter.INSTANCE;
private IAEItemStack configuredItem; private IAEItemStack configuredItem;
private IAEFluidStack configuredFluid;
private String lastHumanReadableText; private String lastHumanReadableText;
private boolean isLocked; private boolean isLocked;
private IStackWatcher myWatcher; private IStackWatcher myWatcher;
@@ -90,6 +99,9 @@ public abstract class AbstractPartMonitor extends AbstractPartDisplay implements
final NBTTagCompound myItem = data.getCompoundTag( "configuredItem" ); final NBTTagCompound myItem = data.getCompoundTag( "configuredItem" );
this.configuredItem = AEItemStack.fromNBT( myItem ); this.configuredItem = AEItemStack.fromNBT( myItem );
final NBTTagCompound myFluid = data.getCompoundTag( "configuredFluid" );
this.configuredFluid = AEFluidStack.fromNBT( myFluid );
} }
@Override @Override
@@ -104,8 +116,15 @@ public abstract class AbstractPartMonitor extends AbstractPartDisplay implements
{ {
this.configuredItem.writeToNBT( myItem ); this.configuredItem.writeToNBT( myItem );
} }
final NBTTagCompound myFluid = new NBTTagCompound();
if( this.configuredFluid != null )
{
this.configuredFluid.writeToNBT( myFluid );
}
data.setTag( "configuredItem", myItem ); data.setTag( "configuredItem", myItem );
data.setTag( "configuredFluid", myFluid );
} }
@Override @Override
@@ -114,11 +133,17 @@ public abstract class AbstractPartMonitor extends AbstractPartDisplay implements
super.writeToStream( data ); super.writeToStream( data );
data.writeBoolean( this.isLocked ); data.writeBoolean( this.isLocked );
data.writeBoolean( this.configuredItem != null ); //is configured
data.writeBoolean( this.configuredItem != null);
data.writeBoolean( this.configuredFluid != null);
if( this.configuredItem != null ) if( this.configuredItem != null )
{ {
this.configuredItem.writeToPacket( data ); this.configuredItem.writeToPacket( data );
} }
else if( this.configuredFluid != null )
{
this.configuredFluid.writeToPacket( data );
}
} }
@Override @Override
@@ -131,14 +156,22 @@ public abstract class AbstractPartMonitor extends AbstractPartDisplay implements
this.isLocked = isLocked; this.isLocked = isLocked;
final boolean val = data.readBoolean(); final boolean isItem = data.readBoolean();
if( val ) final boolean isFluid = data.readBoolean();
if( isItem )
{ {
this.configuredItem = AEItemStack.fromPacket( data ); this.configuredItem = AEItemStack.fromPacket( data );
this.configuredFluid = null;
}
else if( isFluid )
{
this.configuredFluid = AEFluidStack.fromPacket( data );
this.configuredItem = null;
} }
else else
{ {
this.configuredItem = null; this.configuredItem = null;
this.configuredFluid = null;
} }
return needRedraw; return needRedraw;
@@ -165,7 +198,25 @@ public abstract class AbstractPartMonitor extends AbstractPartDisplay implements
if( !this.isLocked ) if( !this.isLocked )
{ {
final ItemStack eq = player.getHeldItem( hand ); final ItemStack eq = player.getHeldItem( hand );
this.configuredItem = AEItemStack.fromItemStack( eq ); FluidStack fluidInTank = null;
if( eq.hasCapability( CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null ) )
{
IFluidHandlerItem fluidHandlerItem = ( eq.getCapability( CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null ) );
fluidInTank = fluidHandlerItem.drain( Integer.MAX_VALUE, false );
}
if (fluidInTank == null)
{
this.configuredFluid = null;
this.configuredItem = AEItemStack.fromItemStack( eq );
}
else if( fluidInTank.amount > 0 )
{
this.configuredFluid = AEFluidStack.fromFluidStack( fluidInTank );
this.configuredItem = null;
}
this.configureWatchers(); this.configureWatchers();
this.getHost().markForSave(); this.getHost().markForSave();
this.getHost().markForUpdate(); this.getHost().markForUpdate();
@@ -227,6 +278,16 @@ public abstract class AbstractPartMonitor extends AbstractPartDisplay implements
this.updateReportingValue( this.updateReportingValue(
this.getProxy().getStorage().getInventory( AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ) ) ); this.getProxy().getStorage().getInventory( AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ) ) );
} }
else if ( this.configuredFluid != null )
{
if( this.myWatcher != null )
{
this.myWatcher.add( this.configuredFluid );
}
this.updateReportingValue(
this.getProxy().getStorage().getInventory( AEApi.instance().storage().getStorageChannel( IFluidStorageChannel.class ) ) );
}
} }
catch( final GridAccessException e ) catch( final GridAccessException e )
{ {
@@ -234,11 +295,12 @@ public abstract class AbstractPartMonitor extends AbstractPartDisplay implements
} }
} }
private void updateReportingValue( final IMEMonitor<IAEItemStack> itemInventory ) private <T extends IAEStack<T>> void updateReportingValue ( final IMEMonitor<T> monitor )
{ {
if( this.configuredItem != null )
if( this.configuredItem != null)
{ {
final IAEItemStack result = itemInventory.getStorageList().findPrecise( this.configuredItem ); final IAEItemStack result = (IAEItemStack) monitor.getStorageList().findPrecise( (T) this.configuredItem );
if( result == null ) if( result == null )
{ {
this.configuredItem.setStackSize( 0 ); this.configuredItem.setStackSize( 0 );
@@ -248,6 +310,18 @@ public abstract class AbstractPartMonitor extends AbstractPartDisplay implements
this.configuredItem.setStackSize( result.getStackSize() ); this.configuredItem.setStackSize( result.getStackSize() );
} }
} }
else if( this.configuredFluid != null)
{
final IAEFluidStack result = (IAEFluidStack) monitor.getStorageList().findPrecise( (T) this.configuredFluid );
if( result == null )
{
this.configuredFluid.setStackSize( 0 );
}
else
{
this.configuredFluid.setStackSize( result.getStackSize() );
}
}
} }
@Override @Override
@@ -260,7 +334,7 @@ public abstract class AbstractPartMonitor extends AbstractPartDisplay implements
return; return;
} }
final IAEItemStack ais = this.getDisplayed(); IAEStack<?> ais = this.getDisplayed();
if( ais == null ) if( ais == null )
{ {
@@ -274,8 +348,10 @@ public abstract class AbstractPartMonitor extends AbstractPartDisplay implements
TesrRenderHelper.moveToFace( facing ); TesrRenderHelper.moveToFace( facing );
TesrRenderHelper.rotateToFace( facing, this.getSpin() ); TesrRenderHelper.rotateToFace( facing, this.getSpin() );
TesrRenderHelper.renderItem2dWithAmount( ais, 0.8f, 0.17f ); if (ais instanceof IAEItemStack)
TesrRenderHelper.renderItem2dWithAmount( (IAEItemStack) ais, 0.8f, 0.17f );
if (ais instanceof IAEFluidStack)
TesrRenderHelper.renderFluid2dWithAmount( (IAEFluidStack) ais, 0.8f, 0.17f );
GlStateManager.popMatrix(); GlStateManager.popMatrix();
} }
@@ -287,9 +363,13 @@ public abstract class AbstractPartMonitor extends AbstractPartDisplay implements
} }
@Override @Override
public IAEItemStack getDisplayed() public IAEStack<?> getDisplayed()
{ {
if (this.configuredItem != null)
return this.configuredItem; return this.configuredItem;
else if (this.configuredFluid != null)
return this.configuredFluid;
return null;
} }
@Override @Override
@@ -322,6 +402,26 @@ public abstract class AbstractPartMonitor extends AbstractPartDisplay implements
final long stackSize = this.configuredItem.getStackSize(); final long stackSize = this.configuredItem.getStackSize();
final String humanReadableText = NUMBER_CONVERTER.toWideReadableForm( stackSize ); final String humanReadableText = NUMBER_CONVERTER.toWideReadableForm( stackSize );
if( !humanReadableText.equals( this.lastHumanReadableText ) )
{
this.lastHumanReadableText = humanReadableText;
this.getHost().markForUpdate();
}
}
else if( this.configuredFluid != null )
{
if( fullStack == null )
{
this.configuredFluid.setStackSize( 0 );
}
else
{
this.configuredFluid.setStackSize( fullStack.getStackSize() );
}
final long stackSize = this.configuredFluid.getStackSize() / 1000;
final String humanReadableText = NUMBER_CONVERTER.toWideReadableForm( stackSize ) + "B";
if( !humanReadableText.equals( this.lastHumanReadableText ) ) if( !humanReadableText.equals( this.lastHumanReadableText ) )
{ {
this.lastHumanReadableText = humanReadableText; this.lastHumanReadableText = humanReadableText;
@@ -19,15 +19,31 @@
package appeng.parts.reporting; package appeng.parts.reporting;
import java.io.IOException;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Objects;
import appeng.api.config.Actionable;
import appeng.api.storage.channels.IFluidStorageChannel;
import appeng.api.storage.data.IAEFluidStack;
import appeng.api.storage.data.IAEStack;
import appeng.core.AELog;
import appeng.core.sync.network.NetworkHandler;
import appeng.core.sync.packets.PacketInventoryAction;
import appeng.fluids.util.AEFluidStack;
import appeng.helpers.InventoryAction;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumHand; import net.minecraft.util.EnumHand;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3d;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidUtil;
import net.minecraftforge.fluids.capability.CapabilityFluidHandler;
import net.minecraftforge.fluids.capability.IFluidHandlerItem;
import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.wrapper.PlayerMainInvWrapper; import net.minecraftforge.items.wrapper.PlayerMainInvWrapper;
@@ -92,6 +108,13 @@ public class PartConversionMonitor extends AbstractPartMonitor
} }
final ItemStack eq = player.getHeldItem( hand ); final ItemStack eq = player.getHeldItem( hand );
FluidStack fluidInTank = null;
if( eq.hasCapability( CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null ) )
{
IFluidHandlerItem fluidHandlerItem = ( eq.getCapability( CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null ) );
fluidInTank = fluidHandlerItem.drain( Integer.MAX_VALUE, false );
}
if( this.isLocked() ) if( this.isLocked() )
{ {
if( eq.isEmpty() ) if( eq.isEmpty() )
@@ -103,18 +126,49 @@ public class PartConversionMonitor extends AbstractPartMonitor
// wrench it // wrench it
return super.onPartActivate( player, hand, pos ); return super.onPartActivate( player, hand, pos );
} }
else if( fluidInTank != null && fluidInTank.amount > 0 )
{
if( this.getDisplayed() != null && getDisplayed().equals( AEFluidStack.fromFluidStack( fluidInTank ) ) )
{
this.drainFluidContainer( player, hand );
}
}
else else
{ {
this.insertItem( player, hand, false ); this.insertItem( player, hand, false );
} }
} }
else if( this.getDisplayed() != null && this.getDisplayed().equals( eq ) )
//If its a fluid container, grab its fluidstack. if its empty pass its itemstack;
if (eq.isEmpty()){
return super.onPartActivate( player, hand, pos );
}
if( fluidInTank != null && fluidInTank.amount > 0 )
{ {
this.insertItem( player, hand, false ); if( getDisplayed() instanceof IAEItemStack || getDisplayed() == null )
{
return super.onPartActivate( player, hand, pos );
}
if( ( (IAEFluidStack) this.getDisplayed() ).equals( AEFluidStack.fromFluidStack( fluidInTank ) ) )
{
this.drainFluidContainer( player, hand );
}
else {
return super.onPartActivate( player, hand, pos );
}
} }
else else
{ {
return super.onPartActivate( player, hand, pos ); if( getDisplayed() instanceof IAEFluidStack || getDisplayed() == null )
{
return super.onPartActivate( player, hand, pos );
}
if( ( (IAEItemStack) this.getDisplayed() ).equals( eq ) )
{
this.insertItem( player, hand, false );
}
} }
return true; return true;
@@ -138,9 +192,14 @@ public class PartConversionMonitor extends AbstractPartMonitor
return false; return false;
} }
if( this.getDisplayed() != null ) ItemStack eq = player.getHeldItem( hand );
if( this.getDisplayed() != null && this.getDisplayed() instanceof IAEItemStack )
{ {
this.extractItem( player, this.getDisplayed().getDefinition().getMaxStackSize() ); this.extractItem( player, ( (IAEItemStack) this.getDisplayed() ).getDefinition().getMaxStackSize() );
}
else if( this.getDisplayed() != null && this.getDisplayed() instanceof IAEFluidStack )
{
this.fillFluidContainer( player,hand );
} }
return true; return true;
@@ -183,9 +242,9 @@ public class PartConversionMonitor extends AbstractPartMonitor
if( allItems ) if( allItems )
{ {
if( this.getDisplayed() != null ) if( this.getDisplayed() != null && this.getDisplayed() instanceof IAEItemStack)
{ {
final IAEItemStack input = this.getDisplayed().copy(); final IAEItemStack input = (IAEItemStack) this.getDisplayed().copy();
IItemHandler inv = new PlayerMainInvWrapper( player.inventory ); IItemHandler inv = new PlayerMainInvWrapper( player.inventory );
for( int x = 0; x < inv.getSlots(); x++ ) for( int x = 0; x < inv.getSlots(); x++ )
@@ -221,7 +280,9 @@ public class PartConversionMonitor extends AbstractPartMonitor
private void extractItem( final EntityPlayer player, int count ) private void extractItem( final EntityPlayer player, int count )
{ {
final IAEItemStack input = this.getDisplayed(); if (!(this.getDisplayed() instanceof IAEItemStack))
return;
final IAEItemStack input = (IAEItemStack) this.getDisplayed();
if( input != null ) if( input != null )
{ {
try try
@@ -265,6 +326,141 @@ public class PartConversionMonitor extends AbstractPartMonitor
} }
} }
private void drainFluidContainer( final EntityPlayer player, final EnumHand hand ) {
try
{
final ItemStack held = player.getHeldItem( hand );
if( held.getCount() != 1 )
{
// only support stacksize 1 for now
return;
}
final IFluidHandlerItem fh = FluidUtil.getFluidHandler( held );
if( fh == null )
{
// only fluid handlers items
return;
}
// See how much we can drain from the item
final FluidStack extract = fh.drain( Integer.MAX_VALUE, false );
if( extract == null || extract.amount < 1 )
{
return;
}
// Check if we can push into the system
final IEnergySource energy = this.getProxy().getEnergy();
final IMEMonitor<IAEFluidStack> cell = this.getProxy()
.getStorage()
.getInventory(
AEApi.instance().storage().getStorageChannel( IFluidStorageChannel.class ) );
final IAEFluidStack notStorable = Platform.poweredInsert( energy, cell, AEFluidStack.fromFluidStack( extract ), new PlayerSource( player, this ), Actionable.SIMULATE );
if( notStorable != null && notStorable.getStackSize() > 0 )
{
final int toStore = (int) ( extract.amount - notStorable.getStackSize() );
final FluidStack storable = fh.drain( toStore, false );
if( storable == null || storable.amount == 0 )
{
return;
}
else
{
extract.amount = storable.amount;
}
}
// Actually drain
final FluidStack drained = fh.drain( extract, true );
extract.amount = drained.amount;
final IAEFluidStack notInserted = Platform.poweredInsert( energy, cell, AEFluidStack.fromFluidStack( extract ), new PlayerSource( player, this ) );
if( notInserted != null && notInserted.getStackSize() > 0 )
{
AELog.error( "Fluid item [%s] reported a different possible amount to drain than it actually provided.", held.getDisplayName() );
}
player.setHeldItem( hand, fh.getContainer() );
}
catch( GridAccessException e )
{
e.printStackTrace();
}
}
private void fillFluidContainer( final EntityPlayer player, final EnumHand hand )
{
try
{
final ItemStack held = player.getHeldItem( hand );
if( held.getCount() != 1 )
{
// only support stacksize 1 for now
return;
}
final IFluidHandlerItem fh = FluidUtil.getFluidHandler( held );
if( fh == null )
{
// only fluid handlers items
return;
}
final IAEFluidStack stack = (IAEFluidStack) this.getDisplayed().copy();
// Check how much we can store in the item
stack.setStackSize( Integer.MAX_VALUE );
int amountAllowed = fh.fill( stack.getFluidStack(), false );
stack.setStackSize( amountAllowed );
// Check if we can pull out of the system
final IEnergySource energy = this.getProxy().getEnergy();
final IMEMonitor<IAEFluidStack> cell = this.getProxy()
.getStorage()
.getInventory(
AEApi.instance().storage().getStorageChannel( IFluidStorageChannel.class ) );
final IAEFluidStack canPull = Platform.poweredExtraction( energy, cell, stack, new PlayerSource( player, this ), Actionable.SIMULATE );
if( canPull == null || canPull.getStackSize() < 1 )
{
return;
}
// How much could fit into the container
final int canFill = fh.fill( canPull.getFluidStack(), false );
if( canFill == 0 )
{
return;
}
// Now actually pull out of the system
stack.setStackSize( canFill );
final IAEFluidStack pulled = Platform.poweredExtraction( energy, cell, stack, new PlayerSource( player, this ) );
if( pulled == null || pulled.getStackSize() < 1 )
{
// Something went wrong
AELog.error( "Unable to pull fluid out of the ME system even though the simulation said yes " );
return;
}
// Actually fill
final int used = fh.fill( pulled.getFluidStack(), true );
if( used != canFill )
{
AELog.error( "Fluid item [%s] reported a different possible amount than it actually accepted.", held.getDisplayName() );
}
player.setHeldItem( hand, fh.getContainer() );
}
catch( GridAccessException e )
{
e.printStackTrace();
}
}
@Override @Override
public IPartModel getStaticModels() public IPartModel getStaticModels()
{ {
@@ -9,11 +9,13 @@
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:7" "item": "appliedenergistics2:material",
"data": 7
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:part:16" "item": "appliedenergistics2:part",
"data": 16
} }
] ]
} }
@@ -44,4 +46,4 @@
} }
} }
} }
} }
@@ -2,7 +2,8 @@
"conditions": [ "conditions": [
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:1" "item": "appliedenergistics2:material",
"data": 1
} }
], ],
"display": { "display": {
@@ -31,4 +32,4 @@
} }
} }
} }
} }
@@ -9,7 +9,8 @@
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:1" "item": "appliedenergistics2:material",
"data": 1
} }
] ]
} }
@@ -38,4 +39,4 @@
} }
} }
} }
} }
@@ -29,4 +29,4 @@
} }
} }
} }
} }
@@ -5,19 +5,23 @@
"values": [ "values": [
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:13" "item": "appliedenergistics2:material",
"data": 13
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:14" "item": "appliedenergistics2:material",
"data": 14
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:15" "item": "appliedenergistics2:material",
"data": 15
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:19" "item": "appliedenergistics2:material",
"data": 19
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
@@ -50,4 +54,4 @@
} }
} }
} }
} }
@@ -21,19 +21,23 @@
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:13" "item": "appliedenergistics2:material",
"data": 13
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:14" "item": "appliedenergistics2:material",
"data": 14
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:15" "item": "appliedenergistics2:material",
"data": 15
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:19" "item": "appliedenergistics2:material",
"data": 19
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
@@ -41,11 +45,13 @@
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:part:360" "item": "appliedenergistics2:part",
"data": 360
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:part:340" "item": "appliedenergistics2:part",
"data": 340
} }
] ]
} }
@@ -112,4 +118,4 @@
"c64k" "c64k"
] ]
] ]
} }
@@ -5,19 +5,23 @@
"values": [ "values": [
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:13" "item": "appliedenergistics2:material",
"data": 13
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:14" "item": "appliedenergistics2:material",
"data": 14
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:15" "item": "appliedenergistics2:material",
"data": 15
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:19" "item": "appliedenergistics2:material",
"data": 19
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
@@ -25,7 +29,8 @@
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:part:360" "item": "appliedenergistics2:part",
"data": 360
} }
] ]
} }
@@ -56,4 +61,4 @@
} }
} }
} }
} }
@@ -9,11 +9,13 @@
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:7" "item": "appliedenergistics2:material",
"data": 7
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:part:16" "item": "appliedenergistics2:part",
"data": 16
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
@@ -24,7 +26,8 @@
], ],
"display": { "display": {
"icon": { "icon": {
"item": "appliedenergistics2:facade" "item": "appliedenergistics2:facade",
"nbt": "{item:\"minecraft:stone\"}"
}, },
"title": { "title": {
"translate": "achievement.ae2.Facade" "translate": "achievement.ae2.Facade"
@@ -46,4 +49,4 @@
} }
} }
} }
} }
@@ -9,7 +9,8 @@
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:7" "item": "appliedenergistics2:material",
"data": 7
} }
] ]
} }
@@ -40,4 +41,4 @@
} }
} }
} }
} }
@@ -9,7 +9,8 @@
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:7" "item": "appliedenergistics2:material",
"data": 7
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
@@ -42,4 +43,4 @@
} }
} }
} }
} }
@@ -9,11 +9,13 @@
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:7" "item": "appliedenergistics2:material",
"data": 7
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:part:16" "item": "appliedenergistics2:part",
"data": 16
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
@@ -46,4 +48,4 @@
} }
} }
} }
} }
@@ -18,19 +18,23 @@
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:13" "item": "appliedenergistics2:material",
"data": 13
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:14" "item": "appliedenergistics2:material",
"data": 14
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:15" "item": "appliedenergistics2:material",
"data": 15
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:19" "item": "appliedenergistics2:material",
"data": 19
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
@@ -65,4 +69,4 @@
} }
} }
} }
} }
@@ -9,11 +9,13 @@
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:7" "item": "appliedenergistics2:material",
"data": 7
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:part:16" "item": "appliedenergistics2:part",
"data": 16
} }
] ]
} }
@@ -36,4 +38,4 @@
"trigger": "appliedenergistics2:network_apprentice" "trigger": "appliedenergistics2:network_apprentice"
} }
} }
} }
@@ -9,11 +9,13 @@
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:7" "item": "appliedenergistics2:material",
"data": 7
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:part:16" "item": "appliedenergistics2:part",
"data": 16
} }
] ]
} }
@@ -36,4 +38,4 @@
"trigger": "appliedenergistics2:network_engineer" "trigger": "appliedenergistics2:network_engineer"
} }
} }
} }
@@ -9,11 +9,13 @@
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:7" "item": "appliedenergistics2:material",
"data": 7
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:part:16" "item": "appliedenergistics2:part",
"data": 16
} }
] ]
} }
@@ -36,4 +38,4 @@
"trigger": "appliedenergistics2:network_admin" "trigger": "appliedenergistics2:network_admin"
} }
} }
} }
@@ -5,19 +5,23 @@
"values": [ "values": [
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:13" "item": "appliedenergistics2:material",
"data": 13
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:14" "item": "appliedenergistics2:material",
"data": 14
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:15" "item": "appliedenergistics2:material",
"data": 15
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:19" "item": "appliedenergistics2:material",
"data": 19
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
@@ -54,4 +58,4 @@
} }
} }
} }
} }
@@ -9,15 +9,18 @@
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:7" "item": "appliedenergistics2:material",
"data": 7
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:part:16" "item": "appliedenergistics2:part",
"data": 16
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:part:460" "item": "appliedenergistics2:part",
"data": 460
} }
] ]
} }
@@ -41,11 +44,11 @@
"conditions": { "conditions": {
"items": [ "items": [
{ {
"type": "appliedenergistics2:part", "item": "appliedenergistics2:part",
"part": "P2P_TUNNEL_ME" "data": 460
} }
] ]
} }
} }
} }
} }
@@ -5,19 +5,23 @@
"values": [ "values": [
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:13" "item": "appliedenergistics2:material",
"data": 13
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:14" "item": "appliedenergistics2:material",
"data": 14
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:15" "item": "appliedenergistics2:material",
"data": 15
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:19" "item": "appliedenergistics2:material",
"data": 19
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
@@ -25,11 +29,13 @@
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:part:360" "item": "appliedenergistics2:part",
"data": 360
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:part:340" "item": "appliedenergistics2:part",
"data": 340
} }
] ]
} }
@@ -60,4 +66,4 @@
} }
} }
} }
} }
@@ -1,44 +1,53 @@
{ {
"conditions": [ "conditions": [
{ {
"type": "minecraft:item_exists", "type": "forge:and",
"item": "appliedenergistics2:storage_cell_1k" "values": [
}, {
{ "type": "minecraft:item_exists",
"type": "minecraft:item_exists", "item": "appliedenergistics2:storage_cell_1k"
"item": "appliedenergistics2:storage_cell_4k" },
}, {
{ "type": "minecraft:item_exists",
"type": "minecraft:item_exists", "item": "appliedenergistics2:storage_cell_4k"
"item": "appliedenergistics2:storage_cell_16k" },
}, {
{ "type": "minecraft:item_exists",
"type": "minecraft:item_exists", "item": "appliedenergistics2:storage_cell_16k"
"item": "appliedenergistics2:storage_cell_64k" },
}, {
{ "type": "minecraft:item_exists",
"type": "minecraft:item_exists", "item": "appliedenergistics2:storage_cell_64k"
"item": "appliedenergistics2:material:13" },
}, {
{ "type": "minecraft:item_exists",
"type": "minecraft:item_exists", "item": "appliedenergistics2:material",
"item": "appliedenergistics2:material:14" "data": 13
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:15" "item": "appliedenergistics2:material",
}, "data": 14
{ },
"type": "minecraft:item_exists", {
"item": "appliedenergistics2:material:19" "type": "minecraft:item_exists",
}, "item": "appliedenergistics2:material",
{ "data": 15
"type": "minecraft:item_exists", },
"item": "appliedenergistics2:controller" {
}, "type": "minecraft:item_exists",
{ "item": "appliedenergistics2:material",
"type": "minecraft:item_exists", "data": 19
"item": "appliedenergistics2:portable_cell" },
{
"type": "minecraft:item_exists",
"item": "appliedenergistics2:controller"
},
{
"type": "minecraft:item_exists",
"item": "appliedenergistics2:portable_cell"
}
]
} }
], ],
"display": { "display": {
@@ -65,4 +74,4 @@
} }
} }
} }
} }
@@ -5,19 +5,23 @@
"values": [ "values": [
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:13" "item": "appliedenergistics2:material",
"data": 13
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:14" "item": "appliedenergistics2:material",
"data": 14
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:15" "item": "appliedenergistics2:material",
"data": 15
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:19" "item": "appliedenergistics2:material",
"data": 19
} }
] ]
} }
@@ -89,4 +93,4 @@
"silicon" "silicon"
] ]
] ]
} }
@@ -9,15 +9,18 @@
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:7" "item": "appliedenergistics2:material",
"data": 7
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:part:16" "item": "appliedenergistics2:part",
"data": 16
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:part:460" "item": "appliedenergistics2:part",
"data": 460
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
@@ -50,4 +53,4 @@
} }
} }
} }
} }
@@ -27,4 +27,4 @@
} }
} }
} }
} }
@@ -1,48 +1,57 @@
{ {
"conditions": [ "conditions": [
{ {
"type": "minecraft:item_exists", "type": "forge:and",
"item": "appliedenergistics2:storage_cell_1k" "values": [
}, {
{ "type": "minecraft:item_exists",
"type": "minecraft:item_exists", "item": "appliedenergistics2:storage_cell_1k"
"item": "appliedenergistics2:storage_cell_4k" },
}, {
{ "type": "minecraft:item_exists",
"type": "minecraft:item_exists", "item": "appliedenergistics2:storage_cell_4k"
"item": "appliedenergistics2:storage_cell_16k" },
}, {
{ "type": "minecraft:item_exists",
"type": "minecraft:item_exists", "item": "appliedenergistics2:storage_cell_16k"
"item": "appliedenergistics2:storage_cell_64k" },
}, {
{ "type": "minecraft:item_exists",
"type": "minecraft:item_exists", "item": "appliedenergistics2:storage_cell_64k"
"item": "appliedenergistics2:material:13" },
}, {
{ "type": "minecraft:item_exists",
"type": "minecraft:item_exists", "item": "appliedenergistics2:material",
"item": "appliedenergistics2:material:14" "data": 13
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:15" "item": "appliedenergistics2:material",
}, "data": 14
{ },
"type": "minecraft:item_exists", {
"item": "appliedenergistics2:material:19" "type": "minecraft:item_exists",
}, "item": "appliedenergistics2:material",
{ "data": 15
"type": "minecraft:item_exists", },
"item": "appliedenergistics2:controller" {
}, "type": "minecraft:item_exists",
{ "item": "appliedenergistics2:material",
"type": "minecraft:item_exists", "data": 19
"item": "appliedenergistics2:io_port" },
}, {
{ "type": "minecraft:item_exists",
"type": "minecraft:item_exists", "item": "appliedenergistics2:controller"
"item": "appliedenergistics2:spatial_io_port" },
{
"type": "minecraft:item_exists",
"item": "appliedenergistics2:io_port"
},
{
"type": "minecraft:item_exists",
"item": "appliedenergistics2:spatial_io_port"
}
]
} }
], ],
"display": { "display": {
@@ -62,4 +71,4 @@
"trigger": "appliedenergistics2:spatial_explorer" "trigger": "appliedenergistics2:spatial_explorer"
} }
} }
} }
@@ -1,48 +1,57 @@
{ {
"conditions": [ "conditions": [
{ {
"type": "minecraft:item_exists", "type": "forge:and",
"item": "appliedenergistics2:storage_cell_1k" "values": [
}, {
{ "type": "minecraft:item_exists",
"type": "minecraft:item_exists", "item": "appliedenergistics2:storage_cell_1k"
"item": "appliedenergistics2:storage_cell_4k" },
}, {
{ "type": "minecraft:item_exists",
"type": "minecraft:item_exists", "item": "appliedenergistics2:storage_cell_4k"
"item": "appliedenergistics2:storage_cell_16k" },
}, {
{ "type": "minecraft:item_exists",
"type": "minecraft:item_exists", "item": "appliedenergistics2:storage_cell_16k"
"item": "appliedenergistics2:storage_cell_64k" },
}, {
{ "type": "minecraft:item_exists",
"type": "minecraft:item_exists", "item": "appliedenergistics2:storage_cell_64k"
"item": "appliedenergistics2:material:13" },
}, {
{ "type": "minecraft:item_exists",
"type": "minecraft:item_exists", "item": "appliedenergistics2:material",
"item": "appliedenergistics2:material:14" "data": 13
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:15" "item": "appliedenergistics2:material",
}, "data": 14
{ },
"type": "minecraft:item_exists", {
"item": "appliedenergistics2:material:19" "type": "minecraft:item_exists",
}, "item": "appliedenergistics2:material",
{ "data": 15
"type": "minecraft:item_exists", },
"item": "appliedenergistics2:controller" {
}, "type": "minecraft:item_exists",
{ "item": "appliedenergistics2:material",
"type": "minecraft:item_exists", "data": 19
"item": "appliedenergistics2:io_port" },
}, {
{ "type": "minecraft:item_exists",
"type": "minecraft:item_exists", "item": "appliedenergistics2:controller"
"item": "appliedenergistics2:spatial_io_port" },
{
"type": "minecraft:item_exists",
"item": "appliedenergistics2:io_port"
},
{
"type": "minecraft:item_exists",
"item": "appliedenergistics2:spatial_io_port"
}
]
} }
], ],
"display": { "display": {
@@ -69,4 +78,4 @@
} }
} }
} }
} }
@@ -9,11 +9,13 @@
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:7" "item": "appliedenergistics2:material",
"data": 7
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:part:16" "item": "appliedenergistics2:part",
"data": 16
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
@@ -21,7 +23,8 @@
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:part:220" "item": "appliedenergistics2:part",
"data": 220
} }
] ]
} }
@@ -52,4 +55,4 @@
} }
} }
} }
} }
@@ -1,40 +1,49 @@
{ {
"conditions": [ "conditions": [
{ {
"type": "minecraft:item_exists", "type": "forge:and",
"item": "appliedenergistics2:storage_cell_1k" "values": [
}, {
{ "type": "minecraft:item_exists",
"type": "minecraft:item_exists", "item": "appliedenergistics2:storage_cell_1k"
"item": "appliedenergistics2:storage_cell_4k" },
}, {
{ "type": "minecraft:item_exists",
"type": "minecraft:item_exists", "item": "appliedenergistics2:storage_cell_4k"
"item": "appliedenergistics2:storage_cell_16k" },
}, {
{ "type": "minecraft:item_exists",
"type": "minecraft:item_exists", "item": "appliedenergistics2:storage_cell_16k"
"item": "appliedenergistics2:storage_cell_64k" },
}, {
{ "type": "minecraft:item_exists",
"type": "minecraft:item_exists", "item": "appliedenergistics2:storage_cell_64k"
"item": "appliedenergistics2:material:13" },
}, {
{ "type": "minecraft:item_exists",
"type": "minecraft:item_exists", "item": "appliedenergistics2:material",
"item": "appliedenergistics2:material:14" "data": 13
}, },
{ {
"type": "minecraft:item_exists", "type": "minecraft:item_exists",
"item": "appliedenergistics2:material:15" "item": "appliedenergistics2:material",
}, "data": 14
{ },
"type": "minecraft:item_exists", {
"item": "appliedenergistics2:material:19" "type": "minecraft:item_exists",
}, "item": "appliedenergistics2:material",
{ "data": 15
"type": "minecraft:item_exists", },
"item": "appliedenergistics2:controller" {
"type": "minecraft:item_exists",
"item": "appliedenergistics2:material",
"data": 19
},
{
"type": "minecraft:item_exists",
"item": "appliedenergistics2:controller"
}
]
} }
], ],
"display": { "display": {
@@ -99,4 +108,4 @@
"c64k" "c64k"
] ]
] ]
} }