Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 892c919ee2 | |||
| a65b3d2ceb | |||
| c826a3e24f | |||
| fc98505f22 | |||
| ea54ccbcf5 | |||
| 7796c6d4b6 | |||
| e2e6f6e83f |
@@ -0,0 +1,97 @@
|
|||||||
|
package appeng.client.gui;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import appeng.api.storage.data.IAEItemStack;
|
||||||
|
import appeng.client.gui.implementations.GuiCraftAmount;
|
||||||
|
import appeng.client.gui.implementations.GuiCraftConfirm;
|
||||||
|
import appeng.client.gui.implementations.GuiCraftingCPU;
|
||||||
|
import appeng.client.gui.widgets.GuiCustomSlot;
|
||||||
|
import appeng.container.implementations.ContainerCraftAmount;
|
||||||
|
import mezz.jei.api.gui.IAdvancedGuiHandler;
|
||||||
|
import net.minecraft.client.renderer.RenderItem;
|
||||||
|
import net.minecraft.inventory.Slot;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
public class AEGuiHandler implements IAdvancedGuiHandler<AEBaseGui>
|
||||||
|
{
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<AEBaseGui> getGuiContainerClass()
|
||||||
|
{
|
||||||
|
return AEBaseGui.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public List<Rectangle> getGuiExtraAreas( AEBaseGui guiContainer )
|
||||||
|
{
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public Object getIngredientUnderMouse( AEBaseGui guiContainer, int mouseX, int mouseY )
|
||||||
|
{
|
||||||
|
List<IAEItemStack> visual = new ArrayList<>();
|
||||||
|
int guiSlotIdx = 0;
|
||||||
|
Object result = null;
|
||||||
|
if( guiContainer instanceof GuiCraftConfirm )
|
||||||
|
{
|
||||||
|
guiSlotIdx = getSlotidx( guiContainer, mouseX, mouseY, ( (GuiCraftConfirm) guiContainer ).getDisplayedRows() );
|
||||||
|
visual = ( (GuiCraftConfirm) guiContainer ).getVisual();
|
||||||
|
if( guiSlotIdx < visual.size() && guiSlotIdx != -1 )
|
||||||
|
{
|
||||||
|
result = visual.get( guiSlotIdx ).getDefinition();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( guiContainer instanceof GuiCraftingCPU )
|
||||||
|
{
|
||||||
|
guiSlotIdx = getSlotidx( guiContainer, mouseX, mouseY, ( (GuiCraftingCPU) guiContainer ).getDisplayedRows() );
|
||||||
|
visual = ( (GuiCraftingCPU) guiContainer ).getVisual();
|
||||||
|
if( guiSlotIdx < visual.size() && guiSlotIdx != -1 )
|
||||||
|
{
|
||||||
|
result = visual.get( guiSlotIdx ).getDefinition();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( guiContainer instanceof GuiCraftAmount )
|
||||||
|
{
|
||||||
|
if( guiContainer.getSlotUnderMouse() != null )
|
||||||
|
{
|
||||||
|
result = guiContainer.getSlotUnderMouse().getStack();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getSlotidx(AEBaseGui guiContainer, int mouseX, int mouseY, int rows)
|
||||||
|
{
|
||||||
|
int guileft = guiContainer.getGuiLeft();
|
||||||
|
int guitop = guiContainer.getGuiTop();
|
||||||
|
int currentScroll = guiContainer.getScrollBar().getCurrentScroll();
|
||||||
|
final int xo = 9;
|
||||||
|
final int yo = 19;
|
||||||
|
|
||||||
|
int guiSlotx = ( mouseX - guileft - xo ) / 67;
|
||||||
|
if( guiSlotx > 2 || mouseX < guileft + xo ) return -1;
|
||||||
|
int guiSloty = ( mouseY - guitop - yo ) / 23;
|
||||||
|
if( guiSloty > ( rows - 1 ) || mouseY < guitop + yo ) return -1;
|
||||||
|
return ( guiSloty * 3 ) + guiSlotx + ( currentScroll * 3 );
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -582,4 +582,14 @@ public class GuiCraftConfirm extends AEBaseGui
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<IAEItemStack> getVisual()
|
||||||
|
{
|
||||||
|
return visual;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getDisplayedRows()
|
||||||
|
{
|
||||||
|
return this.rows;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -493,4 +493,14 @@ public class GuiCraftingCPU extends AEBaseGui implements ISortSource
|
|||||||
{
|
{
|
||||||
return ViewItems.ALL;
|
return ViewItems.ALL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<IAEItemStack> getVisual()
|
||||||
|
{
|
||||||
|
return visual;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getDisplayedRows()
|
||||||
|
{
|
||||||
|
return DISPLAYED_ROWS;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
package appeng.client.gui.implementations;
|
package appeng.client.gui.implementations;
|
||||||
|
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@@ -67,7 +68,9 @@ public class GuiInterfaceTerminal extends AEBaseGui
|
|||||||
private final Map<String, Set<Object>> cachedSearches = new WeakHashMap<>();
|
private final Map<String, Set<Object>> cachedSearches = new WeakHashMap<>();
|
||||||
|
|
||||||
private boolean refreshList = false;
|
private boolean refreshList = false;
|
||||||
private MEGuiTextField searchField;
|
private MEGuiTextField searchFieldOutputs;
|
||||||
|
private MEGuiTextField searchFieldInputs;
|
||||||
|
|
||||||
|
|
||||||
public GuiInterfaceTerminal( final InventoryPlayer inventoryPlayer, final PartInterfaceTerminal te )
|
public GuiInterfaceTerminal( final InventoryPlayer inventoryPlayer, final PartInterfaceTerminal te )
|
||||||
{
|
{
|
||||||
@@ -76,7 +79,7 @@ public class GuiInterfaceTerminal extends AEBaseGui
|
|||||||
final GuiScrollbar scrollbar = new GuiScrollbar();
|
final GuiScrollbar scrollbar = new GuiScrollbar();
|
||||||
this.setScrollBar( scrollbar );
|
this.setScrollBar( scrollbar );
|
||||||
this.xSize = 195;
|
this.xSize = 195;
|
||||||
this.ySize = 222;
|
this.ySize = 236;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -86,14 +89,22 @@ public class GuiInterfaceTerminal extends AEBaseGui
|
|||||||
|
|
||||||
this.getScrollBar().setLeft( 175 );
|
this.getScrollBar().setLeft( 175 );
|
||||||
this.getScrollBar().setHeight( 106 );
|
this.getScrollBar().setHeight( 106 );
|
||||||
this.getScrollBar().setTop( 18 );
|
this.getScrollBar().setTop( 32 );
|
||||||
|
|
||||||
this.searchField = new MEGuiTextField( this.fontRenderer, this.guiLeft + Math.max( 104, this.offsetX ), this.guiTop + 4, 65, 12 );
|
this.searchFieldInputs = new MEGuiTextField( this.fontRenderer, this.guiLeft + Math.max( 16, this.offsetX ), this.guiTop + 18, 65, 12 );
|
||||||
this.searchField.setEnableBackgroundDrawing( false );
|
this.searchFieldInputs.setEnableBackgroundDrawing( false );
|
||||||
this.searchField.setMaxStringLength( 25 );
|
this.searchFieldInputs.setMaxStringLength( 25 );
|
||||||
this.searchField.setTextColor( 0xFFFFFF );
|
this.searchFieldInputs.setTextColor( 0xFFFFFF );
|
||||||
this.searchField.setVisible( true );
|
this.searchFieldInputs.setVisible( true );
|
||||||
this.searchField.setFocused( true );
|
this.searchFieldInputs.setFocused( false );
|
||||||
|
|
||||||
|
// this.searchFieldOutputs = new MEGuiTextField( this.fontRenderer, this.guiLeft + Math.max( 104, this.offsetX ), this.guiTop + 4, 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.setMaxStringLength( 25 );
|
||||||
|
this.searchFieldOutputs.setTextColor( 0xFFFFFF );
|
||||||
|
this.searchFieldOutputs.setVisible( true );
|
||||||
|
this.searchFieldOutputs.setFocused( true );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -113,7 +124,7 @@ public class GuiInterfaceTerminal extends AEBaseGui
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int offset = 17;
|
int offset = 32;
|
||||||
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 );
|
||||||
@@ -148,11 +159,19 @@ public class GuiInterfaceTerminal extends AEBaseGui
|
|||||||
@Override
|
@Override
|
||||||
protected void mouseClicked( final int xCoord, final int yCoord, final int btn ) throws IOException
|
protected void mouseClicked( final int xCoord, final int yCoord, final int btn ) throws IOException
|
||||||
{
|
{
|
||||||
this.searchField.mouseClicked( xCoord, yCoord, btn );
|
this.searchFieldInputs.mouseClicked( xCoord, yCoord, btn );
|
||||||
|
|
||||||
if( btn == 1 && this.searchField.isMouseIn( xCoord, yCoord ) )
|
if( btn == 1 && this.searchFieldInputs.isMouseIn( xCoord, yCoord ) )
|
||||||
{
|
{
|
||||||
this.searchField.setText( "" );
|
this.searchFieldInputs.setText( "" );
|
||||||
|
this.refreshList();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.searchFieldOutputs.mouseClicked( xCoord, yCoord, btn );
|
||||||
|
|
||||||
|
if( btn == 1 && this.searchFieldOutputs.isMouseIn( xCoord, yCoord ) )
|
||||||
|
{
|
||||||
|
this.searchFieldOutputs.setText( "" );
|
||||||
this.refreshList();
|
this.refreshList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -165,7 +184,7 @@ public class GuiInterfaceTerminal extends AEBaseGui
|
|||||||
this.bindTexture( "guis/interfaceterminal.png" );
|
this.bindTexture( "guis/interfaceterminal.png" );
|
||||||
this.drawTexturedModalRect( offsetX, offsetY, 0, 0, this.xSize, this.ySize );
|
this.drawTexturedModalRect( offsetX, offsetY, 0, 0, this.xSize, this.ySize );
|
||||||
|
|
||||||
int offset = 17;
|
int offset = 32;
|
||||||
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++ )
|
||||||
@@ -177,14 +196,19 @@ 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, 139, width, 18 );
|
this.drawTexturedModalRect( offsetX + 7, offsetY + offset, 7, 153, width, 18 );
|
||||||
}
|
}
|
||||||
offset += 18;
|
offset += 18;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( this.searchField != null )
|
if( this.searchFieldInputs != null )
|
||||||
{
|
{
|
||||||
this.searchField.drawTextBox();
|
this.searchFieldInputs.drawTextBox();
|
||||||
|
}
|
||||||
|
|
||||||
|
if( this.searchFieldOutputs != null )
|
||||||
|
{
|
||||||
|
this.searchFieldOutputs.drawTextBox();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -193,15 +217,21 @@ public class GuiInterfaceTerminal extends AEBaseGui
|
|||||||
{
|
{
|
||||||
if( !this.checkHotbarKeys( key ) )
|
if( !this.checkHotbarKeys( key ) )
|
||||||
{
|
{
|
||||||
if( character == ' ' && this.searchField.getText().isEmpty() )
|
if( character == ' ' && this.searchFieldInputs.getText().isEmpty() && this.searchFieldInputs.isFocused() )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( this.searchField.textboxKeyTyped( character, key ) )
|
if( character == ' ' && this.searchFieldOutputs.getText().isEmpty() && this.searchFieldOutputs.isFocused())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( this.searchFieldInputs.textboxKeyTyped( character, key ) || this.searchFieldOutputs.textboxKeyTyped( character, key ))
|
||||||
{
|
{
|
||||||
this.refreshList();
|
this.refreshList();
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
super.keyTyped( character, key );
|
super.keyTyped( character, key );
|
||||||
@@ -261,9 +291,10 @@ public class GuiInterfaceTerminal extends AEBaseGui
|
|||||||
{
|
{
|
||||||
this.byName.clear();
|
this.byName.clear();
|
||||||
|
|
||||||
final String searchFilterLowerCase = this.searchField.getText().toLowerCase();
|
final String searchFieldInputs = this.searchFieldInputs.getText().toLowerCase();
|
||||||
|
final String searchFieldOutputs = this.searchFieldOutputs.getText().toLowerCase();
|
||||||
|
|
||||||
final Set<Object> cachedSearch = this.getCacheForSearchTerm( searchFilterLowerCase );
|
final Set<Object> cachedSearch = this.getCacheForSearchTerm( searchFieldInputs + searchFieldOutputs );
|
||||||
final boolean rebuild = cachedSearch.isEmpty();
|
final boolean rebuild = cachedSearch.isEmpty();
|
||||||
|
|
||||||
for( final ClientDCInternalInv entry : this.byId.values() )
|
for( final ClientDCInternalInv entry : this.byId.values() )
|
||||||
@@ -275,14 +306,19 @@ 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 = searchFilterLowerCase.isEmpty();
|
boolean found = (searchFieldInputs.isEmpty() && searchFieldOutputs.isEmpty());
|
||||||
|
|
||||||
// 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 && !searchFilterLowerCase.isEmpty() )
|
if( !found )
|
||||||
{
|
{
|
||||||
for( final ItemStack itemStack : entry.getInventory() )
|
for( final ItemStack itemStack : entry.getInventory() )
|
||||||
{
|
{
|
||||||
found = this.itemStackMatchesSearchTerm( itemStack, searchFilterLowerCase );
|
if( !searchFieldInputs.isEmpty() && !searchFieldOutputs.isEmpty() )
|
||||||
|
found = ( this.itemStackMatchesSearchTerm( itemStack, searchFieldInputs, 0 ) || this.itemStackMatchesSearchTerm( itemStack, searchFieldOutputs, 1 ) );
|
||||||
|
else if( !searchFieldInputs.isEmpty() )
|
||||||
|
found = ( this.itemStackMatchesSearchTerm( itemStack, searchFieldInputs, 0 ) );
|
||||||
|
else if( !searchFieldOutputs.isEmpty() )
|
||||||
|
found = ( this.itemStackMatchesSearchTerm( itemStack, searchFieldOutputs, 1 ) );
|
||||||
if( found )
|
if( found )
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
@@ -291,7 +327,7 @@ public class GuiInterfaceTerminal extends AEBaseGui
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 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( searchFilterLowerCase ) )
|
if( found || (entry.getName().toLowerCase().contains( searchFieldInputs ) && entry.getName().toLowerCase().contains( searchFieldOutputs )))
|
||||||
{
|
{
|
||||||
this.byName.put( entry.getName(), entry );
|
this.byName.put( entry.getName(), entry );
|
||||||
cachedSearch.add( entry );
|
cachedSearch.add( entry );
|
||||||
@@ -324,7 +360,7 @@ public class GuiInterfaceTerminal extends AEBaseGui
|
|||||||
this.getScrollBar().setRange( 0, this.lines.size() - LINES_ON_PAGE, 2 );
|
this.getScrollBar().setRange( 0, this.lines.size() - LINES_ON_PAGE, 2 );
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean itemStackMatchesSearchTerm( final ItemStack itemStack, final String searchTerm )
|
private boolean itemStackMatchesSearchTerm( final ItemStack itemStack, final String searchTerm,int pass )
|
||||||
{
|
{
|
||||||
if( itemStack.isEmpty() )
|
if( itemStack.isEmpty() )
|
||||||
{
|
{
|
||||||
@@ -338,14 +374,21 @@ public class GuiInterfaceTerminal extends AEBaseGui
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Potential later use to filter by input
|
NBTTagList tag = new NBTTagList();
|
||||||
// NBTTagList inTag = encodedValue.getTagList( "in", 10 );
|
|
||||||
final NBTTagList outTag = encodedValue.getTagList( "out", 10 );
|
|
||||||
|
|
||||||
for( int i = 0; i < outTag.tagCount(); i++ )
|
if (pass == 0)
|
||||||
|
{
|
||||||
|
tag = encodedValue.getTagList( "in", 10 );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tag = encodedValue.getTagList( "out", 10 );
|
||||||
|
}
|
||||||
|
|
||||||
|
for( int i = 0; i < tag.tagCount(); i++ )
|
||||||
{
|
{
|
||||||
|
|
||||||
final ItemStack parsedItemStack = new ItemStack( outTag.getCompoundTagAt( i ) );
|
final ItemStack parsedItemStack = new ItemStack( tag.getCompoundTagAt( i ) );
|
||||||
if( !parsedItemStack.isEmpty() )
|
if( !parsedItemStack.isEmpty() )
|
||||||
{
|
{
|
||||||
final String displayName = Platform
|
final String displayName = Platform
|
||||||
|
|||||||
@@ -51,6 +51,12 @@ public class ContainerCraftAmount extends AEBaseContainer
|
|||||||
this.addSlotToContainer( this.getCraftingItem() );
|
this.addSlotToContainer( this.getCraftingItem() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Slot getSlot( int slotId )
|
||||||
|
{
|
||||||
|
return super.getSlot( 0 );
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void detectAndSendChanges()
|
public void detectAndSendChanges()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ public final class ContainerInterfaceTerminal extends AEBaseContainer
|
|||||||
this.grid = anchor.getActionableNode().getGrid();
|
this.grid = anchor.getActionableNode().getGrid();
|
||||||
}
|
}
|
||||||
|
|
||||||
this.bindPlayerInventory( ip, 0, 222 - /* height of player inventory */82 );
|
this.bindPlayerInventory( ip, 0, 236 - /* height of player inventory */82 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -24,8 +24,10 @@ import java.io.ByteArrayOutputStream;
|
|||||||
import java.io.DataOutputStream;
|
import java.io.DataOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
import appeng.api.config.FuzzyMode;
|
import appeng.api.config.FuzzyMode;
|
||||||
|
import appeng.api.storage.data.IItemList;
|
||||||
import appeng.container.implementations.ContainerPatternTerm;
|
import appeng.container.implementations.ContainerPatternTerm;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import io.netty.buffer.Unpooled;
|
import io.netty.buffer.Unpooled;
|
||||||
@@ -208,7 +210,7 @@ public class PacketJEIRecipe extends AppEngPacket
|
|||||||
IAEItemStack mostDamaged = null;
|
IAEItemStack mostDamaged = null;
|
||||||
for( IAEItemStack is : outList )
|
for( IAEItemStack is : outList )
|
||||||
{
|
{
|
||||||
if (!is.isCraftable())
|
if( !is.isCraftable() )
|
||||||
{
|
{
|
||||||
if( mostDamaged == null || mostDamaged.getItemDamage() < is.getItemDamage() )
|
if( mostDamaged == null || mostDamaged.getItemDamage() < is.getItemDamage() )
|
||||||
{
|
{
|
||||||
@@ -235,6 +237,22 @@ 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 )
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ 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 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;
|
||||||
@@ -195,10 +196,13 @@ 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;
|
||||||
|
|
||||||
|
|
||||||
public InventoryCache( IFluidHandler fluidHandler )
|
public InventoryCache( IFluidHandler fluidHandler )
|
||||||
{
|
{
|
||||||
this.fluidHandler = fluidHandler;
|
this.fluidHandler = fluidHandler;
|
||||||
|
this.skipSlots = new ArrayList<>(this.fluidHandler.getTankProperties().length);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<IAEFluidStack> update()
|
public List<IAEFluidStack> update()
|
||||||
@@ -211,13 +215,22 @@ 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];
|
||||||
final FluidStack newFS = tankProperties[slot].getContents();
|
FluidStack newFS = tankProperties[slot].getContents();
|
||||||
|
if (newFS != null) {
|
||||||
|
if (this.fluidHandler.drain( 1, false ) == null){
|
||||||
|
newFS = null;
|
||||||
|
skipSlots.add( slot );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this.handlePossibleSlotChanges( slot, oldAEFS, newFS, changes );
|
this.handlePossibleSlotChanges( slot, oldAEFS, newFS, changes );
|
||||||
}
|
}
|
||||||
@@ -238,6 +251,7 @@ 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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
|
import appeng.client.gui.AEGuiHandler;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
@@ -93,6 +94,9 @@ public class JEIPlugin implements IModPlugin
|
|||||||
registry.getRecipeTransferRegistry()
|
registry.getRecipeTransferRegistry()
|
||||||
.addRecipeTransferHandler( new RecipeTransferHandler<>( ContainerPatternTerm.class ),
|
.addRecipeTransferHandler( new RecipeTransferHandler<>( ContainerPatternTerm.class ),
|
||||||
Constants.UNIVERSAL_RECIPE_TRANSFER_UID );
|
Constants.UNIVERSAL_RECIPE_TRANSFER_UID );
|
||||||
|
|
||||||
|
AEGuiHandler aeGuiHandler = new AEGuiHandler();
|
||||||
|
registry.addAdvancedGuiHandlers(aeGuiHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void registerDescriptions( IDefinitions definitions, IModRegistry registry )
|
private void registerDescriptions( IDefinitions definitions, IModRegistry registry )
|
||||||
|
|||||||
@@ -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 it.unimi.dsi.fastutil.ints.IntList;
|
||||||
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;
|
||||||
@@ -268,10 +270,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;
|
||||||
|
|
||||||
public InventoryCache( IItemHandler itemHandler )
|
public InventoryCache( IItemHandler itemHandler )
|
||||||
{
|
{
|
||||||
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 )
|
||||||
@@ -289,14 +293,22 @@ 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];
|
||||||
final ItemStack newIS = this.itemHandler.getStackInSlot( slot );
|
ItemStack newIS = this.itemHandler.getStackInSlot( slot );
|
||||||
|
if (!newIS.isEmpty()) {
|
||||||
|
if (this.itemHandler.extractItem( slot,1,true ).isEmpty()){
|
||||||
|
newIS = ItemStack.EMPTY;
|
||||||
|
skipSlots.add( slot );
|
||||||
|
}
|
||||||
|
}
|
||||||
this.handlePossibleSlotChanges( slot, oldAeIS, newIS, changes );
|
this.handlePossibleSlotChanges( slot, oldAeIS, newIS, changes );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -317,6 +329,7 @@ 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;
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 11 KiB |
Reference in New Issue
Block a user