Compare commits

..

13 Commits

Author SHA1 Message Date
Salomão dbaaf495ee can now drag encoded patterns on the interface terminal 2021-03-28 21:10:58 -03:00
Salomão 77d615559f Add proper button and tooltips to interface terminal 2021-03-28 16:20:37 -03:00
Salomão 362b001cb4 level emitter dying fix 2021-03-25 22:48:42 -03:00
Salomão b6fd4b3c0f changed priority of JEI items on the 2021-03-23 22:23:58 -03:00
Salomão e364603a5a Changed level emitters to update only once when they tick 2021-03-17 21:35:26 -03:00
Salomão c58bebc346 Fix gregtech tileentities showing up as unnamed or draconium lens 2021-03-07 23:59:39 -03:00
Salomão 97f11f0c61 Fix storage drawers showing up as nothing on interface terminal 2021-03-07 23:56:52 -03:00
Salomão 5c2fa72f95 mix pattern terminal multiplying items above maxitemstack size 2021-03-07 00:01:01 -03:00
Salomão ebd8501301 fix inaccessible items setting in storage bus not being respected 2021-03-07 00:00:16 -03:00
Salomão fa07247bd7 Revert "also shrink the fluid skiplist if the tanks change sizes"
This reverts commit 892c919ee2.
2021-03-04 23:08:08 -03:00
Salomão 95d25ddf47 Revert "Skip un-extractable slots."
This reverts commit e2e6f6e83f.
2021-03-04 23:07:58 -03:00
Salomão 7a45e1faf4 Revert "rebuild skipslotlist if the the inventory grows or shrinks"
This reverts commit 7796c6d4b6.
2021-03-04 23:07:34 -03:00
Salomão 1f88494832 fix not being able to swap patterns on interface terminal 2021-03-03 09:57:02 -03:00
21 changed files with 287 additions and 121 deletions
+2 -1
View File
@@ -85,7 +85,8 @@ configurations {
} }
dependencies { dependencies {
deobfCompile "com.jaquadro.minecraft.storagedrawers:StorageDrawers:1.12.2-5.4.2:api" compileOnly "com.jaquadro.minecraft.storagedrawers:StorageDrawers:1.12.2-5.4.2:api"
compileOnly "gregtechce:gregtech:1.12.2:1.12.0.662"
// installable runtime dependencies // installable runtime dependencies
mods "mcp.mobius.waila:Hwyla:${hwyla_version}" mods "mcp.mobius.waila:Hwyla:${hwyla_version}"
@@ -26,5 +26,20 @@ package appeng.api.config;
public enum ActionItems public enum ActionItems
{ {
WRENCH, CLOSE, STASH, ENCODE, SUBSTITUTION, MULTIPLY_BY_TWO, MULTIPLY_BY_THREE, INCREASE_BY_ONE, DIVIDE_BY_TWO, DIVIDE_BY_THREE, DECREASE_BY_ONE, MAX_COUNT WRENCH,
CLOSE,
STASH,
ENCODE,
SUBSTITUTION,
MULTIPLY_BY_TWO,
MULTIPLY_BY_THREE,
INCREASE_BY_ONE,
DIVIDE_BY_TWO,
DIVIDE_BY_THREE,
DECREASE_BY_ONE,
MAX_COUNT,
FREE_MOLECULAR_SLOT_SHORTCUT,
TOGGLE_SHOW_FULL_INTERFACES_ON,
TOGGLE_SHOW_FULL_INTERFACES_OFF,
HIGHLIGHT_INTERFACE
} }
+80 -5
View File
@@ -31,11 +31,13 @@ import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import appeng.tile.inventory.AppEngInternalInventory;
import com.google.common.base.Joiner; import com.google.common.base.Joiner;
import com.google.common.base.Stopwatch; import com.google.common.base.Stopwatch;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import net.minecraftforge.fml.common.Optional; import net.minecraftforge.fml.common.Optional;
import net.minecraftforge.items.IItemHandler;
import org.lwjgl.input.Keyboard; import org.lwjgl.input.Keyboard;
import org.lwjgl.input.Mouse; import org.lwjgl.input.Mouse;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
@@ -378,6 +380,59 @@ public abstract class AEBaseGui extends GuiContainer implements IMTModGuiContain
} }
} }
} }
else if( slot instanceof SlotDisconnected )
{
this.drag_click.add( slot );
if( this.drag_click.size() > 1 )
{
if( !itemstack.isEmpty() )
{
Set<IItemHandler> visitedInterfaces = new HashSet<>();
for( final Slot dr : this.drag_click )
{
IItemHandler interfaceHandler = ( (SlotDisconnected) slot ).getSlot().getInventory();
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 ) )
{
canInsert = false;
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 );
}
}
}
}
else if( isShiftKeyDown() )
{
for( final Slot dr : this.drag_click )
{
InventoryAction action = null;
if( !slot.getStack().isEmpty() )
{
action = InventoryAction.SHIFT_CLICK;
}
if( action != null )
{
final PacketInventoryAction p = new PacketInventoryAction( action, dr.getSlotIndex(), ( (SlotDisconnected) slot ).getSlot().getId() );
NetworkHandler.instance().sendToServer( p );
}
}
}
}
}
else else
{ {
super.mouseClickMove( x, y, c, d ); super.mouseClickMove( x, y, c, d );
@@ -471,15 +526,35 @@ public abstract class AEBaseGui extends GuiContainer implements IMTModGuiContain
if( slot instanceof SlotDisconnected ) if( slot instanceof SlotDisconnected )
{ {
if( this.drag_click.size() > 0 )
{
return;
}
InventoryAction action = null; InventoryAction action = null;
switch( clickType ) switch ( clickType )
{ {
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() )
action = InventoryAction.SPLIT_OR_PLACE_SINGLE; {
if (!slot.getStack().isEmpty() && player.inventory.getItemStack().isEmpty()) boolean canInsert = true;
action = InventoryAction.PICKUP_OR_SET_DOWN; IItemHandler interfaceHandler = ( (SlotDisconnected) slot ).getSlot().getInventory();
for( int s = 0; s < interfaceHandler.getSlots(); s++ )
{
if( ItemStack.areItemStacksEqual( interfaceHandler.getStackInSlot( s ), player.inventory.getItemStack() ) )
{
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;
@@ -22,13 +22,15 @@ package appeng.client.gui.implementations;
import java.io.IOException; import java.io.IOException;
import java.util.*; import java.util.*;
import appeng.api.config.ActionItems;
import appeng.api.config.Settings;
import appeng.client.gui.widgets.GuiImgButton;
import appeng.util.BlockPosUtils; import appeng.util.BlockPosUtils;
import com.google.common.collect.HashMultimap; import com.google.common.collect.HashMultimap;
import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList; import net.minecraft.nbt.NBTTagList;
@@ -58,7 +60,7 @@ public class GuiInterfaceTerminal extends AEBaseGui
private static final int LINES_ON_PAGE = 6; private static final int LINES_ON_PAGE = 6;
// TODO: copied from GuiMEMonitorable. It looks not changed, maybe unneeded? // TODO: copied from GuiMEMonitorable. It looks not changed, maybe unneeded?
private final int offsetX = 9; private final int offsetX = 21;
private final HashMap<Long, ClientDCInternalInv> byId = new HashMap<>(); private final HashMap<Long, ClientDCInternalInv> byId = new HashMap<>();
private final HashMultimap<String, ClientDCInternalInv> byName = HashMultimap.create(); private final HashMultimap<String, ClientDCInternalInv> byName = HashMultimap.create();
@@ -83,8 +85,8 @@ public class GuiInterfaceTerminal extends AEBaseGui
this.partInterfaceTerminal = te; this.partInterfaceTerminal = te;
final GuiScrollbar scrollbar = new GuiScrollbar(); final GuiScrollbar scrollbar = new GuiScrollbar();
this.setScrollBar( scrollbar ); this.setScrollBar( scrollbar );
this.xSize = 195; this.xSize = 208;
this.ySize = 236; this.ySize = 256;
} }
@Override @Override
@@ -92,19 +94,18 @@ public class GuiInterfaceTerminal extends AEBaseGui
{ {
super.initGui(); super.initGui();
this.getScrollBar().setLeft( 175 ); this.getScrollBar().setLeft( 190 );
this.getScrollBar().setHeight( 106 ); this.getScrollBar().setHeight( 106 );
this.getScrollBar().setTop( 32 ); this.getScrollBar().setTop( 51 );
this.searchFieldInputs = new MEGuiTextField( this.fontRenderer, this.guiLeft + Math.max( 16, this.offsetX ), this.guiTop + 18, 65, 12 ); this.searchFieldInputs = new MEGuiTextField( this.fontRenderer, this.guiLeft + Math.max( 32, this.offsetX ), this.guiTop + 25, 65, 12 );
this.searchFieldInputs.setEnableBackgroundDrawing( false ); this.searchFieldInputs.setEnableBackgroundDrawing( false );
this.searchFieldInputs.setMaxStringLength( 25 ); this.searchFieldInputs.setMaxStringLength( 25 );
this.searchFieldInputs.setTextColor( 0xFFFFFF ); this.searchFieldInputs.setTextColor( 0xFFFFFF );
this.searchFieldInputs.setVisible( true ); this.searchFieldInputs.setVisible( true );
this.searchFieldInputs.setFocused( false ); this.searchFieldInputs.setFocused( false );
// this.searchFieldOutputs = new MEGuiTextField( this.fontRenderer, this.guiLeft + Math.max( 105, this.offsetX ), this.guiTop + 4, 65, 12 ); this.searchFieldOutputs = new MEGuiTextField( this.fontRenderer, this.guiLeft + Math.max( 32, this.offsetX ), this.guiTop + 38, 65, 12 );
this.searchFieldOutputs = new MEGuiTextField( this.fontRenderer, this.guiLeft + Math.max( 94, this.offsetX ), this.guiTop + 18, 65, 12 );
this.searchFieldOutputs.setEnableBackgroundDrawing( false ); this.searchFieldOutputs.setEnableBackgroundDrawing( false );
this.searchFieldOutputs.setMaxStringLength( 25 ); this.searchFieldOutputs.setMaxStringLength( 25 );
this.searchFieldOutputs.setTextColor( 0xFFFFFF ); this.searchFieldOutputs.setTextColor( 0xFFFFFF );
@@ -122,32 +123,35 @@ 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 )
{ {
this.buttonList.clear(); this.buttonList.clear();
this.fontRenderer.drawString( this.getGuiDisplayName( GuiText.InterfaceTerminal.getLocal() ), 8, 6, 4210752 ); this.fontRenderer.drawString( this.getGuiDisplayName( GuiText.InterfaceTerminal.getLocal() ), 8, 6, 4210752 );
this.fontRenderer.drawString( GuiText.inventory.getLocal(), 8, this.ySize - 96 + 3, 4210752 ); this.fontRenderer.drawString( GuiText.inventory.getLocal(), offsetX, this.ySize - 96 + 3, 4210752 );
final int ex = this.getScrollBar().getCurrentScroll(); final int ex = this.getScrollBar().getCurrentScroll();
this.guiButtonNextAssembler = new GuiButton( -1, guiLeft + 110, guiTop + 4, 12, 12, "M" ); this.guiButtonNextAssembler = new GuiImgButton(guiLeft + 123, guiTop + 25,Settings.ACTIONS, ActionItems.FREE_MOLECULAR_SLOT_SHORTCUT);
this.buttonList.add( guiButtonNextAssembler ); this.buttonList.add( guiButtonNextAssembler );
this.guiButtonHide = new GuiButton( -1, guiLeft + 128, guiTop + 4, 60, 12, "Hide Full" ); guiButtonHide = new GuiImgButton( guiLeft + 141, guiTop + 25,Settings.ACTIONS, this.partInterfaceTerminal.onlyInterfacesWithFreeSlots ?
ActionItems.TOGGLE_SHOW_FULL_INTERFACES_OFF :
ActionItems.TOGGLE_SHOW_FULL_INTERFACES_ON);
this.buttonList.add( guiButtonHide ); this.buttonList.add( guiButtonHide );
final Iterator<Slot> o = this.inventorySlots.inventorySlots.iterator(); this.inventorySlots.inventorySlots.removeIf( slot -> slot instanceof SlotDisconnected );
while( o.hasNext() )
{
if( o.next() instanceof SlotDisconnected )
{
o.remove();
}
}
int offset = 32; int offset = 51;
for( int x = 0; x < LINES_ON_PAGE && ex + x < this.lines.size(); x++ ) for( int x = 0; x < LINES_ON_PAGE && ex + x < this.lines.size(); x++ )
{ {
final Object lineObj = this.lines.get( ex + x ); final Object lineObj = this.lines.get( ex + x );
@@ -156,9 +160,10 @@ public class GuiInterfaceTerminal extends AEBaseGui
final ClientDCInternalInv inv = (ClientDCInternalInv) lineObj; final ClientDCInternalInv inv = (ClientDCInternalInv) lineObj;
for( int z = 0; z < inv.getInventory().getSlots(); z++ ) for( int z = 0; z < inv.getInventory().getSlots(); z++ )
{ {
this.inventorySlots.inventorySlots.add( new SlotDisconnected( inv, z, z * 18 + 8, 1 + offset ) ); this.inventorySlots.inventorySlots.add( new SlotDisconnected( inv, z, z * 18 + 22, 1 + offset ) );
} }
GuiButton guiButton = new GuiButton( x, guiLeft + 1, guiTop + offset + 3, 8, 10, "?" );
GuiButton guiButton = new GuiImgButton(guiLeft + 4, guiTop + offset + 1, Settings.ACTIONS, ActionItems.HIGHLIGHT_INTERFACE);
guiButtonHashMap.put( guiButton , inv); guiButtonHashMap.put( guiButton , inv);
this.buttonList.add( guiButton ); this.buttonList.add( guiButton );
@@ -177,7 +182,7 @@ public class GuiInterfaceTerminal extends AEBaseGui
name = name.substring( 0, name.length() - 1 ); name = name.substring( 0, name.length() - 1 );
} }
this.fontRenderer.drawString( name, 10, 6 + offset, 4210752 ); this.fontRenderer.drawString( name, 22, 6 + offset, 4210752 );
} }
offset += 18; offset += 18;
} }
@@ -213,7 +218,7 @@ 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) ); hilightBlock( blockPos, System.currentTimeMillis() + 500 * BlockPosUtils.getDistance(blockPos, blockPos2) );
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();
} }
@@ -245,7 +250,7 @@ public class GuiInterfaceTerminal extends AEBaseGui
this.bindTexture( "guis/newinterfaceterminal.png" ); this.bindTexture( "guis/newinterfaceterminal.png" );
this.drawTexturedModalRect( offsetX, offsetY, 0, 0, this.xSize, this.ySize ); this.drawTexturedModalRect( offsetX, offsetY, 0, 0, this.xSize, this.ySize );
int offset = 32; int offset = 51;
final int ex = this.getScrollBar().getCurrentScroll(); final int ex = this.getScrollBar().getCurrentScroll();
for( int x = 0; x < LINES_ON_PAGE && ex + x < this.lines.size(); x++ ) for( int x = 0; x < LINES_ON_PAGE && ex + x < this.lines.size(); x++ )
@@ -257,7 +262,7 @@ public class GuiInterfaceTerminal extends AEBaseGui
GlStateManager.color( 1, 1, 1, 1 ); GlStateManager.color( 1, 1, 1, 1 );
final int width = inv.getInventory().getSlots() * 18; final int width = inv.getInventory().getSlots() * 18;
this.drawTexturedModalRect( offsetX + 7, offsetY + offset, 7, 153, width, 18 ); this.drawTexturedModalRect( offsetX + 20, offsetY + offset, 20, 173, width, 18 );
} }
offset += 18; offset += 18;
} }
@@ -142,6 +142,11 @@ public class GuiImgButton extends GuiButton implements ITooltip
this.registerApp( 11 + 4 * 16, Settings.ACTIONS, ActionItems.DECREASE_BY_ONE, ButtonToolTips.DecreaseByOne, ButtonToolTips.DecreaseByOneDesc ); this.registerApp( 11 + 4 * 16, Settings.ACTIONS, ActionItems.DECREASE_BY_ONE, ButtonToolTips.DecreaseByOne, ButtonToolTips.DecreaseByOneDesc );
this.registerApp( 12 + 4 * 16, Settings.ACTIONS, ActionItems.MAX_COUNT, ButtonToolTips.MaxCount, ButtonToolTips.MaxCountDesc ); this.registerApp( 12 + 4 * 16, Settings.ACTIONS, ActionItems.MAX_COUNT, ButtonToolTips.MaxCount, ButtonToolTips.MaxCountDesc );
this.registerApp( 6 + 5 * 16, Settings.ACTIONS, ActionItems.FREE_MOLECULAR_SLOT_SHORTCUT, ButtonToolTips.FreeMolecularSlotShortcut, ButtonToolTips.FreeMolecularSlotShortcutDesc );
this.registerApp( 7 + 5 * 16, Settings.ACTIONS, ActionItems.TOGGLE_SHOW_FULL_INTERFACES_ON, ButtonToolTips.ToggleShowFullInterfaces, ButtonToolTips.ToggleShowFullInterfacesOnDesc );
this.registerApp( 8 + 5 * 16, Settings.ACTIONS, ActionItems.TOGGLE_SHOW_FULL_INTERFACES_OFF, ButtonToolTips.ToggleShowFullInterfaces, ButtonToolTips.ToggleShowFullInterfacesOffDesc );
this.registerApp( 6 + 6 * 16, Settings.ACTIONS, ActionItems.HIGHLIGHT_INTERFACE, ButtonToolTips.HighlightInterface, "" );
this.registerApp( 8, Settings.ACTIONS, ActionItems.ENCODE, ButtonToolTips.Encode, ButtonToolTips.EncodeDescription ); this.registerApp( 8, Settings.ACTIONS, ActionItems.ENCODE, ButtonToolTips.Encode, ButtonToolTips.EncodeDescription );
this.registerApp( 4 + 3 * 16, Settings.ACTIONS, ItemSubstitution.ENABLED, ButtonToolTips.Substitutions, ButtonToolTips.SubstitutionsDescEnabled ); this.registerApp( 4 + 3 * 16, Settings.ACTIONS, ItemSubstitution.ENABLED, ButtonToolTips.Substitutions, ButtonToolTips.SubstitutionsDescEnabled );
this.registerApp( 7 + 3 * 16, Settings.ACTIONS, ItemSubstitution.DISABLED, ButtonToolTips.Substitutions, ButtonToolTips.SubstitutionsDescDisabled ); this.registerApp( 7 + 3 * 16, Settings.ACTIONS, ItemSubstitution.DISABLED, ButtonToolTips.Substitutions, ButtonToolTips.SubstitutionsDescDisabled );
@@ -37,7 +37,7 @@ public class ClientDCInternalInv implements Comparable<ClientDCInternalInv>
public ClientDCInternalInv( final int size, final long id, final long sortBy, final String unlocalizedName ) public ClientDCInternalInv( final int size, final long id, final long sortBy, final String unlocalizedName )
{ {
this.inventory = new AppEngInternalInventory( null, size ); this.inventory = new AppEngInternalInventory( null, size, 1 );
this.unlocalizedName = unlocalizedName; this.unlocalizedName = unlocalizedName;
this.id = id; this.id = id;
this.sortBy = sortBy; this.sortBy = sortBy;
@@ -80,7 +80,7 @@ public final class ContainerInterfaceTerminal extends AEBaseContainer
this.grid = anchor.getActionableNode().getGrid(); this.grid = anchor.getActionableNode().getGrid();
} }
this.bindPlayerInventory( ip, 0, 236 - /* height of player inventory */82 ); this.bindPlayerInventory( ip, 14, 256 - /* height of player inventory */82 );
} }
@Override @Override
@@ -258,7 +258,7 @@ public final class ContainerInterfaceTerminal extends AEBaseContainer
if( hasItemInHand ) if( hasItemInHand )
{ {
ItemStack extra = playerHand.removeItems( 1, ItemStack.EMPTY, null ); ItemStack extra = playerHand.removeItems( 1, ItemStack.EMPTY, null );
if( !extra.isEmpty() ) if( !extra.isEmpty() && !interfaceSlot.containsItems())
{ {
extra = interfaceSlot.addItems( extra ); extra = interfaceSlot.addItems( extra );
} }
@@ -291,7 +291,7 @@ public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEA
for( int x = 0; x < this.craftingSlots.length; x++ ) for( int x = 0; x < this.craftingSlots.length; x++ )
{ {
input[x] = this.craftingSlots[x].getStack(); input[x] = this.craftingSlots[x].getStack();
if( !input[x].isEmpty() && input[x].getCount() * multiple > 64 ) if( !input[x].isEmpty() && input[x].getCount() * multiple > input[x].getMaxStackSize() )
{ {
canMultiplyInputs = false; canMultiplyInputs = false;
} }
@@ -299,7 +299,7 @@ public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEA
for( final OptionalSlotFake outputSlot : this.outputSlots ) for( final OptionalSlotFake outputSlot : this.outputSlots )
{ {
final ItemStack out = outputSlot.getStack(); final ItemStack out = outputSlot.getStack();
if( !out.isEmpty() && out.getCount() * multiple > 64 ) if( !out.isEmpty() && out.getCount() * multiple > out.getMaxStackSize() )
{ {
canMultiplyOutputs = false; canMultiplyOutputs = false;
} }
@@ -369,7 +369,7 @@ public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEA
for( int x = 0; x < this.craftingSlots.length; x++ ) for( int x = 0; x < this.craftingSlots.length; x++ )
{ {
input[x] = this.craftingSlots[x].getStack(); input[x] = this.craftingSlots[x].getStack();
if( !input[x].isEmpty() && input[x].getCount() + increase > 64 ) if( !input[x].isEmpty() && input[x].getCount() + increase > input[x].getMaxStackSize() )
{ {
canIncreaseInputs = false; canIncreaseInputs = false;
} }
@@ -377,7 +377,7 @@ public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEA
for( final OptionalSlotFake outputSlot : this.outputSlots ) for( final OptionalSlotFake outputSlot : this.outputSlots )
{ {
final ItemStack out = outputSlot.getStack(); final ItemStack out = outputSlot.getStack();
if( !out.isEmpty() && out.getCount() + increase > 64 ) if( !out.isEmpty() && out.getCount() + increase > out.getMaxStackSize() )
{ {
canIncreaseOutputs = false; canIncreaseOutputs = false;
} }
@@ -450,11 +450,11 @@ public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEA
for( int x = 0; x < this.craftingSlots.length; x++ ) for( int x = 0; x < this.craftingSlots.length; x++ )
{ {
input[x] = this.craftingSlots[x].getStack(); input[x] = this.craftingSlots[x].getStack();
if( !input[x].isEmpty() && 64 - input[x].getCount() > maxInputStackGrowth ) if( !input[x].isEmpty() && input[x].getMaxStackSize() - input[x].getCount() > maxInputStackGrowth )
{ {
maxInputStackGrowth = 64 - input[x].getCount(); maxInputStackGrowth = input[x].getMaxStackSize() - input[x].getCount();
} }
if( !input[x].isEmpty() && input[x].getCount() + maxInputStackGrowth > 64 ) if( !input[x].isEmpty() && input[x].getCount() + maxInputStackGrowth > input[x].getMaxStackSize() )
{ {
canGrowInputs = false; canGrowInputs = false;
} }
@@ -463,9 +463,9 @@ public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEA
{ {
final ItemStack out = outputSlot.getStack(); final ItemStack out = outputSlot.getStack();
{ {
maxOutputStackGrowth = 64 - out.getCount(); maxOutputStackGrowth = out.getMaxStackSize() - out.getCount();
} }
if( !out.isEmpty() && out.getCount() + maxOutputStackGrowth > 64 ) if( !out.isEmpty() && out.getCount() + maxOutputStackGrowth > out.getMaxStackSize() )
{ {
canGrowOutputs = false; canGrowOutputs = false;
} }
@@ -19,6 +19,7 @@
package appeng.core.localization; package appeng.core.localization;
import appeng.api.config.SchedulingMode;
import net.minecraft.util.text.translation.I18n; import net.minecraft.util.text.translation.I18n;
@@ -151,6 +152,13 @@ public enum ButtonToolTips
DecreaseByOneDesc, DecreaseByOneDesc,
MaxCount, MaxCount,
MaxCountDesc, MaxCountDesc,
FreeMolecularSlotShortcut,
FreeMolecularSlotShortcutDesc,
ToggleShowFullInterfaces,
ToggleShowFullInterfacesOnDesc,
ToggleShowFullInterfacesOffDesc,
HighlightInterface,
HighlightInterfaceDesc,
// Used in the tooltips of the items in the terminal, when moused over // Used in the tooltips of the items in the terminal, when moused over
ItemsStored, ItemsStored,
@@ -237,22 +237,6 @@ public class PacketJEIRecipe extends AppEngPacket
// Fall back using an existing item // Fall back using an existing item
out = storage.extractItems( request, Actionable.SIMULATE, cct.getActionSource() ); out = storage.extractItems( request, Actionable.SIMULATE, cct.getActionSource() );
} }
if( out == null )
{
IItemList<IAEItemStack> items = AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ).createList();
Iterator<IAEItemStack> iterator = inv.getInventory( AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ) ).getAvailableItems( items ).iterator();
while ( iterator.hasNext() )
{
final IAEItemStack o = iterator.next();
if( o.getDefinition().isItemEqual( request.getDefinition() ) && o.isCraftable() )
{
out = o;
break;
}
iterator.remove();
}
}
} }
if( out != null ) if( out != null )
@@ -274,14 +258,17 @@ public class PacketJEIRecipe extends AppEngPacket
else else
{ {
currentItem = ad.simulateSimilarRemove(recipe[x][y].getCount(), this.recipe[x][y],FuzzyMode.IGNORE_ALL, null ); currentItem = ad.simulateSimilarRemove(recipe[x][y].getCount(), this.recipe[x][y],FuzzyMode.IGNORE_ALL, null );
if( currentItem.isEmpty() )
{
currentItem = this.recipe[x][y].copy();
}
} }
} }
} }
} }
if (!cct.useRealItems())
{
if( currentItem.isEmpty() && this.recipe[x] != null )
{
currentItem = this.recipe[x][0].copy();
}
}
} }
ItemHandlerUtil.setStackInSlot( craftMatrix, x, currentItem ); ItemHandlerUtil.setStackInSlot( craftMatrix, x, currentItem );
} }
@@ -26,7 +26,9 @@ import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import net.minecraft.item.ItemStack; import appeng.api.config.Settings;
import appeng.api.config.StorageFilter;
import appeng.parts.misc.PartStorageBus;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandler;
import net.minecraftforge.fluids.capability.IFluidTankProperties; import net.minecraftforge.fluids.capability.IFluidTankProperties;
@@ -62,12 +64,18 @@ public class FluidHandlerAdapter implements IMEInventory<IAEFluidStack>, IBaseMo
private final IFluidHandler fluidHandler; private final IFluidHandler fluidHandler;
private final IGridProxyable proxyable; private final IGridProxyable proxyable;
private final FluidHandlerAdapter.InventoryCache cache; private final FluidHandlerAdapter.InventoryCache cache;
private StorageFilter mode;
FluidHandlerAdapter( IFluidHandler fluidHandler, IGridProxyable proxy ) FluidHandlerAdapter( IFluidHandler fluidHandler, IGridProxyable proxy )
{ {
this.fluidHandler = fluidHandler; this.fluidHandler = fluidHandler;
this.proxyable = proxy; this.proxyable = proxy;
this.cache = new FluidHandlerAdapter.InventoryCache( this.fluidHandler ); if( this.proxyable instanceof PartStorageBus )
{
PartStorageBus partStorageBus = (PartStorageBus) this.proxyable;
this.mode = ( (StorageFilter) partStorageBus.getConfigManager().getSetting( Settings.STORAGE_FILTER ) );
}
this.cache = new FluidHandlerAdapter.InventoryCache( this.fluidHandler, this.mode);
} }
@Override @Override
@@ -196,13 +204,12 @@ public class FluidHandlerAdapter implements IMEInventory<IAEFluidStack>, IBaseMo
{ {
private IAEFluidStack[] cachedAeStacks = new IAEFluidStack[0]; private IAEFluidStack[] cachedAeStacks = new IAEFluidStack[0];
private final IFluidHandler fluidHandler; private final IFluidHandler fluidHandler;
private ArrayList<Integer> skipSlots; private final StorageFilter mode;
public InventoryCache( IFluidHandler fluidHandler, StorageFilter mode )
public InventoryCache( IFluidHandler fluidHandler )
{ {
this.mode = mode;
this.fluidHandler = fluidHandler; this.fluidHandler = fluidHandler;
this.skipSlots = new ArrayList<>(this.fluidHandler.getTankProperties().length);
} }
public List<IAEFluidStack> update() public List<IAEFluidStack> update()
@@ -215,23 +222,20 @@ public class FluidHandlerAdapter implements IMEInventory<IAEFluidStack>, IBaseMo
if( slots > this.cachedAeStacks.length ) if( slots > this.cachedAeStacks.length )
{ {
this.cachedAeStacks = Arrays.copyOf( this.cachedAeStacks, slots ); this.cachedAeStacks = Arrays.copyOf( this.cachedAeStacks, slots );
this.skipSlots = new ArrayList<>(this.fluidHandler.getTankProperties().length);
} }
for( int slot = 0; slot < slots; slot++ ) for( int slot = 0; slot < slots; slot++ )
{ {
if (skipSlots.contains( slot ))
continue;
// Save the old stuff // Save the old stuff
final IAEFluidStack oldAEFS = this.cachedAeStacks[slot]; final IAEFluidStack oldAEFS = this.cachedAeStacks[slot];
FluidStack newFS = tankProperties[slot].getContents(); FluidStack newFS = tankProperties[slot].getContents();
if (newFS != null) { if( this.mode == StorageFilter.EXTRACTABLE_ONLY && newFS != null )
if (this.fluidHandler.drain( 1, false ) == null){ {
if( this.fluidHandler.drain( 1, false ) == null )
{
newFS = null; newFS = null;
skipSlots.add( slot );
} }
} }
this.handlePossibleSlotChanges( slot, oldAEFS, newFS, changes ); this.handlePossibleSlotChanges( slot, oldAEFS, newFS, changes );
} }
@@ -251,7 +255,6 @@ public class FluidHandlerAdapter implements IMEInventory<IAEFluidStack>, IBaseMo
} }
this.cachedAeStacks = Arrays.copyOf( this.cachedAeStacks, slots ); this.cachedAeStacks = Arrays.copyOf( this.cachedAeStacks, slots );
this.skipSlots = new ArrayList<>( this.fluidHandler.getTankProperties().length );
} }
return changes; return changes;
} }
@@ -33,6 +33,8 @@ import appeng.integration.modules.gregtech.GTCEInventoryAdaptor;
import appeng.util.*; import appeng.util.*;
import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet;
import gregtech.api.block.machines.BlockMachine;
import gregtech.api.metatileentity.MetaTileEntity;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
import net.minecraft.init.Items; import net.minecraft.init.Items;
@@ -48,6 +50,7 @@ import net.minecraft.util.math.RayTraceResult;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3d;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.fml.common.Loader;
import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandler;
import net.minecraftforge.items.wrapper.RangedWrapper; import net.minecraftforge.items.wrapper.RangedWrapper;
@@ -109,6 +112,8 @@ import appeng.util.inv.IInventoryDestination;
import appeng.util.inv.InvOperation; import appeng.util.inv.InvOperation;
import appeng.util.item.AEItemStack; import appeng.util.item.AEItemStack;
import static gregtech.api.block.machines.BlockMachine.getMetaTileEntity;
public class DualityInterface implements IGridTickable, IStorageMonitorable, IInventoryDestination, IAEAppEngInventory, IConfigManagerHost, ICraftingProvider, IUpgradeableHost public class DualityInterface implements IGridTickable, IStorageMonitorable, IInventoryDestination, IAEAppEngInventory, IConfigManagerHost, ICraftingProvider, IUpgradeableHost
{ {
@@ -1235,6 +1240,13 @@ public class DualityInterface implements IGridTickable, IStorageMonitorable, IIn
final IBlockState directedBlockState = hostWorld.getBlockState( targ ); final IBlockState directedBlockState = hostWorld.getBlockState( targ );
final Block directedBlock = directedBlockState.getBlock(); final Block directedBlock = directedBlockState.getBlock();
ItemStack what = new ItemStack( directedBlock, 1, directedBlock.getMetaFromState( directedBlockState ) ); ItemStack what = new ItemStack( directedBlock, 1, directedBlock.getMetaFromState( directedBlockState ) );
if ( Loader.isModLoaded("gregtech") && directedBlock instanceof BlockMachine )
{
MetaTileEntity metaTileEntity = getMetaTileEntity(hostWorld, targ);
return metaTileEntity.getMetaFullName();
}
try try
{ {
Vec3d from = new Vec3d( hostTile.getPos().getX() + 0.5, hostTile.getPos().getY() + 0.5, hostTile.getPos().getZ() + 0.5 ); Vec3d from = new Vec3d( hostTile.getPos().getX() + 0.5, hostTile.getPos().getY() + 0.5, hostTile.getPos().getZ() + 0.5 );
+40 -25
View File
@@ -19,9 +19,9 @@
package appeng.me.cache; package appeng.me.cache;
import java.util.HashMap; import java.util.*;
import java.util.PriorityQueue;
import appeng.parts.automation.PartLevelEmitter;
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
import net.minecraft.crash.CrashReport; import net.minecraft.crash.CrashReport;
@@ -46,6 +46,7 @@ public class TickManagerCache implements ITickManager
private final HashMap<IGridNode, TickTracker> alertable = new HashMap<>(); private final HashMap<IGridNode, TickTracker> alertable = new HashMap<>();
private final HashMap<IGridNode, TickTracker> sleeping = new HashMap<>(); private final HashMap<IGridNode, TickTracker> sleeping = new HashMap<>();
private final HashMap<IGridNode, TickTracker> awake = new HashMap<>(); private final HashMap<IGridNode, TickTracker> awake = new HashMap<>();
private final HashMap<IGridNode, TickTracker> laterTicker = new HashMap<>();
private final PriorityQueue<TickTracker> upcomingTicks = new PriorityQueue<>(); private final PriorityQueue<TickTracker> upcomingTicks = new PriorityQueue<>();
private long currentTick = 0; private long currentTick = 0;
@@ -86,7 +87,7 @@ public class TickManagerCache implements ITickManager
{ {
this.currentTick++; this.currentTick++;
while( !this.upcomingTicks.isEmpty() ) while ( !this.upcomingTicks.isEmpty() )
{ {
tt = this.upcomingTicks.peek(); tt = this.upcomingTicks.peek();
@@ -99,36 +100,50 @@ public class TickManagerCache implements ITickManager
this.upcomingTicks.poll(); this.upcomingTicks.poll();
final int diff = (int) ( this.currentTick - tt.getLastTick() ); final int diff = (int) ( this.currentTick - tt.getLastTick() );
final TickRateModulation mod = tt.getGridTickable().tickingRequest( tt.getNode(), diff );
switch( mod ) if( tt.getGridTickable() instanceof PartLevelEmitter )
{
laterTicker.put( tt.getNode(), tt );
} else
{ {
case FASTER:
tt.setCurrentRate( tt.getCurrentRate() - 2 );
break;
case IDLE:
tt.setCurrentRate( tt.getRequest().maxTickRate );
break;
case SAME:
break;
case SLEEP:
this.sleepDevice( tt.getNode() );
break;
case SLOWER:
tt.setCurrentRate( tt.getCurrentRate() + 1 );
break;
case URGENT:
tt.setCurrentRate( 0 );
break;
default:
break;
}
final TickRateModulation mod = tt.getGridTickable().tickingRequest( tt.getNode(), diff );
switch ( mod )
{
case FASTER:
tt.setCurrentRate( tt.getCurrentRate() - 2 );
break;
case IDLE:
tt.setCurrentRate( tt.getRequest().maxTickRate );
break;
case SAME:
break;
case SLEEP:
this.sleepDevice( tt.getNode() );
break;
case SLOWER:
tt.setCurrentRate( tt.getCurrentRate() + 1 );
break;
case URGENT:
tt.setCurrentRate( 0 );
break;
default:
break;
}
}
if( this.awake.containsKey( tt.getNode() ) ) if( this.awake.containsKey( tt.getNode() ) )
{ {
this.addToQueue( tt ); this.addToQueue( tt );
} }
} }
Iterator<Map.Entry<IGridNode, TickTracker>> ltIterator = laterTicker.entrySet().iterator();
while ( ltIterator.hasNext() )
{
Map.Entry<IGridNode, TickTracker> tickTracker = ltIterator.next();
tickTracker.getValue().getGridTickable().tickingRequest( tickTracker.getKey(), 1 );
ltIterator.remove();
}
} }
catch( final Throwable t ) catch( final Throwable t )
{ {
@@ -19,6 +19,7 @@
package appeng.me.storage; package appeng.me.storage;
import appeng.api.config.StorageFilter;
import appeng.api.networking.security.IActionSource; import appeng.api.networking.security.IActionSource;
import appeng.api.networking.ticking.TickRateModulation; import appeng.api.networking.ticking.TickRateModulation;
@@ -30,4 +31,8 @@ public interface ITickingMonitor
void setActionSource( IActionSource actionSource ); void setActionSource( IActionSource actionSource );
default void setMode( StorageFilter setting )
{
}
} }
@@ -19,9 +19,15 @@
package appeng.parts.automation; package appeng.parts.automation;
import javax.annotation.Nonnull;
import java.util.Collection; import java.util.Collection;
import java.util.Random; import java.util.Random;
import appeng.api.networking.IGridNode;
import appeng.api.networking.ticking.IGridTickable;
import appeng.api.networking.ticking.TickRateModulation;
import appeng.api.networking.ticking.TickingRequest;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.InventoryCrafting; import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@@ -82,7 +88,7 @@ import appeng.util.Platform;
import appeng.util.inv.InvOperation; import appeng.util.inv.InvOperation;
public class PartLevelEmitter extends PartUpgradeable implements IEnergyWatcherHost, IStackWatcherHost, ICraftingWatcherHost, IMEMonitorHandlerReceiver<IAEItemStack>, ICraftingProvider public class PartLevelEmitter extends PartUpgradeable implements IEnergyWatcherHost, IStackWatcherHost, ICraftingWatcherHost, IMEMonitorHandlerReceiver<IAEItemStack>, ICraftingProvider, IGridTickable
{ {
@PartModels @PartModels
@@ -118,6 +124,7 @@ public class PartLevelEmitter extends PartUpgradeable implements IEnergyWatcherH
private double centerX; private double centerX;
private double centerY; private double centerY;
private double centerZ; private double centerZ;
private IBaseMonitor<IAEItemStack> changedMonitor;
@Reflected @Reflected
public PartLevelEmitter( final ItemStack is ) public PartLevelEmitter( final ItemStack is )
@@ -400,7 +407,7 @@ public class PartLevelEmitter extends PartUpgradeable implements IEnergyWatcherH
@Override @Override
public void postChange( final IBaseMonitor<IAEItemStack> monitor, final Iterable<IAEItemStack> change, final IActionSource actionSource ) public void postChange( final IBaseMonitor<IAEItemStack> monitor, final Iterable<IAEItemStack> change, final IActionSource actionSource )
{ {
this.updateReportingValue( (IMEMonitor<IAEItemStack>) monitor ); this.changedMonitor = monitor;
} }
@Override @Override
@@ -576,4 +583,22 @@ public class PartLevelEmitter extends PartUpgradeable implements IEnergyWatcherH
return this.isLevelEmitterOn() ? MODEL_ON_OFF : MODEL_OFF_OFF; return this.isLevelEmitterOn() ? MODEL_ON_OFF : MODEL_OFF_OFF;
} }
} }
@Nonnull
@Override
public TickingRequest getTickingRequest( @Nonnull IGridNode node )
{
return new TickingRequest( 1,1,false,false );
}
@Nonnull
@Override
public TickRateModulation tickingRequest( @Nonnull IGridNode node, int ticksSinceLastCall )
{
if (this.changedMonitor != null)
{
this.updateReportingValue((IMEMonitor<IAEItemStack>) changedMonitor);
}
return TickRateModulation.URGENT;
}
} }
@@ -26,9 +26,9 @@ import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import it.unimi.dsi.fastutil.ints.IntList; import appeng.api.config.Settings;
import appeng.api.config.StorageFilter;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.NonNullList;
import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandler;
import appeng.api.AEApi; import appeng.api.AEApi;
@@ -59,12 +59,18 @@ class ItemHandlerAdapter implements IMEInventory<IAEItemStack>, IBaseMonitor<IAE
private final IItemHandler itemHandler; private final IItemHandler itemHandler;
private final IGridProxyable proxyable; private final IGridProxyable proxyable;
private final InventoryCache cache; private final InventoryCache cache;
private StorageFilter mode;
ItemHandlerAdapter( IItemHandler itemHandler, IGridProxyable proxy ) ItemHandlerAdapter( IItemHandler itemHandler, IGridProxyable proxy )
{ {
this.itemHandler = itemHandler; this.itemHandler = itemHandler;
this.proxyable = proxy; this.proxyable = proxy;
this.cache = new InventoryCache( this.itemHandler ); if( this.proxyable instanceof PartStorageBus )
{
PartStorageBus partStorageBus = (PartStorageBus) this.proxyable;
this.mode = ( (StorageFilter) partStorageBus.getConfigManager().getSetting( Settings.STORAGE_FILTER ) );
}
this.cache = new InventoryCache( this.itemHandler, this.mode );
} }
@Override @Override
@@ -270,12 +276,12 @@ class ItemHandlerAdapter implements IMEInventory<IAEItemStack>, IBaseMonitor<IAE
{ {
private IAEItemStack[] cachedAeStacks = new IAEItemStack[0]; private IAEItemStack[] cachedAeStacks = new IAEItemStack[0];
private final IItemHandler itemHandler; private final IItemHandler itemHandler;
private ArrayList<Integer> skipSlots; private final StorageFilter mode;
public InventoryCache( IItemHandler itemHandler ) public InventoryCache( IItemHandler itemHandler, StorageFilter mode )
{ {
this.mode = mode;
this.itemHandler = itemHandler; this.itemHandler = itemHandler;
this.skipSlots = new ArrayList<>(this.itemHandler.getSlots());
} }
public IItemList<IAEItemStack> getAvailableItems( IItemList<IAEItemStack> out ) public IItemList<IAEItemStack> getAvailableItems( IItemList<IAEItemStack> out )
@@ -293,20 +299,18 @@ class ItemHandlerAdapter implements IMEInventory<IAEItemStack>, IBaseMonitor<IAE
if( slots > this.cachedAeStacks.length ) if( slots > this.cachedAeStacks.length )
{ {
this.cachedAeStacks = Arrays.copyOf( this.cachedAeStacks, slots ); this.cachedAeStacks = Arrays.copyOf( this.cachedAeStacks, slots );
this.skipSlots = new ArrayList<>(this.itemHandler.getSlots());
} }
for( int slot = 0; slot < slots; slot++ ) for( int slot = 0; slot < slots; slot++ )
{ {
if (skipSlots.contains( slot ))
continue;
// Save the old stuff // Save the old stuff
final IAEItemStack oldAeIS = this.cachedAeStacks[slot]; final IAEItemStack oldAeIS = this.cachedAeStacks[slot];
ItemStack newIS = this.itemHandler.getStackInSlot( slot ); ItemStack newIS = this.itemHandler.getStackInSlot( slot );
if (!newIS.isEmpty()) { if( this.mode == StorageFilter.EXTRACTABLE_ONLY && !newIS.isEmpty() )
if (this.itemHandler.extractItem( slot,1,true ).isEmpty()){ {
if( this.itemHandler.extractItem( slot, 1, true ).isEmpty() )
{
newIS = ItemStack.EMPTY; newIS = ItemStack.EMPTY;
skipSlots.add( slot );
} }
} }
this.handlePossibleSlotChanges( slot, oldAeIS, newIS, changes ); this.handlePossibleSlotChanges( slot, oldAeIS, newIS, changes );
@@ -329,7 +333,6 @@ class ItemHandlerAdapter implements IMEInventory<IAEItemStack>, IBaseMonitor<IAE
// Reduce the cache size // Reduce the cache size
this.cachedAeStacks = Arrays.copyOf( this.cachedAeStacks, slots ); this.cachedAeStacks = Arrays.copyOf( this.cachedAeStacks, slots );
this.skipSlots = new ArrayList<>(this.itemHandler.getSlots());
} }
return changes; return changes;
@@ -484,6 +484,7 @@ public class PartStorageBus extends PartUpgradeable implements IGridTickable, IC
{ {
this.monitor = (ITickingMonitor) inv; this.monitor = (ITickingMonitor) inv;
this.monitor.setActionSource( new MachineSource( this ) ); this.monitor.setActionSource( new MachineSource( this ) );
this.monitor.setMode( (StorageFilter) this.getConfigManager().getSetting( Settings.STORAGE_FILTER ) );
} }
if( inv != null ) if( inv != null )
@@ -197,7 +197,7 @@ public class AdaptorItemRepository extends InventoryAdaptor
@Override @Override
public boolean hasSlots() public boolean hasSlots()
{ {
return false; return true;
} }
@Override @Override
@@ -363,6 +363,12 @@ gui.tooltips.appliedenergistics2.DecreaseByOne=Decrease one
gui.tooltips.appliedenergistics2.DecreaseByOneDesc=Will try to add decrease the items set in the crafting slots by one DOES NOT MAINTAIN INGREDIENT RATIO gui.tooltips.appliedenergistics2.DecreaseByOneDesc=Will try to add decrease the items set in the crafting slots by one DOES NOT MAINTAIN INGREDIENT RATIO
gui.tooltips.appliedenergistics2.MaxCount=Maximize slot count gui.tooltips.appliedenergistics2.MaxCount=Maximize slot count
gui.tooltips.appliedenergistics2.MaxCountDesc=Will maximize the output maintaing the input ratio of the items set in the crafting slots gui.tooltips.appliedenergistics2.MaxCountDesc=Will maximize the output maintaing the input ratio of the items set in the crafting slots
gui.tooltips.appliedenergistics2.FreeMolecularSlotShortcut=Show Crafting interfaces with free slots
gui.tooltips.appliedenergistics2.FreeMolecularSlotShortcutDesc=Shortcut that toggles interfaces with free slots and searches for molecular assemblers
gui.tooltips.appliedenergistics2.ToggleShowFullInterfaces=Toggles showing interfaces with full slots
gui.tooltips.appliedenergistics2.ToggleShowFullInterfacesOnDesc=Showing all interfaces
gui.tooltips.appliedenergistics2.ToggleShowFullInterfacesOffDesc=Showing only interfaces with free slots
gui.tooltips.appliedenergistics2.HighlightInterface=Highlight interface
// Units // Units
gui.appliedenergistics2.units.appliedenergstics=AE gui.appliedenergistics2.units.appliedenergstics=AE
Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 34 KiB