Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 33946438bd | |||
| 9372cb2f14 | |||
| 00037ace77 | |||
| e13af643ba | |||
| ffcfd809d8 | |||
| 7c10a6b883 | |||
| c2bddc30c4 | |||
| 024655f84d | |||
| 589e48ac01 | |||
| 43d3a2c1c0 | |||
| c432fa7200 | |||
| cc744ab8b9 | |||
| 8fe4229a8e | |||
| 3f86884965 | |||
| 1319ec79c9 |
+47
@@ -0,0 +1,47 @@
|
|||||||
|
Changes so far :
|
||||||
|
|
||||||
|
Design changes/breakages:
|
||||||
|
- Interfaces no longer spill items of one pattern on other faces
|
||||||
|
- Interfaces now push patterns in round-robin (Interfaces, then sides)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Fixes:
|
||||||
|
|
||||||
|
- Fix gregtech machines appearing with 'unnamed' or 'draconium lens' on the interface terminal on specific situations.
|
||||||
|
- Add memorycard support for fluid interfaces, import/export/storage busses and level emitters ( this fix was upstreamed to AE2 for MC 1.16)
|
||||||
|
- Storage busses now hide/show inaccessible items as configured.
|
||||||
|
- Exclusive Blocking mode for GTCE ( shapes, molds and configured circuits do not block GTCE machines )
|
||||||
|
- Blocking modes default to block on any item in the iventory the entity exposes
|
||||||
|
- Fuzzy includes items that report that they're damageable, but report a maxDamage of 0 ( auto-crafting of basic capacitors -> resonant capacitors is now possible ) <- Broken item implementation.
|
||||||
|
|
||||||
|
Performance:
|
||||||
|
|
||||||
|
- Added @talchas fixes for insane channelless AE networks.
|
||||||
|
- Implemented StorageDrawers slotless itemrepository.
|
||||||
|
- Removed CraftedEvent calls (really bad lag with craftweaker versions before CraftTweaker2-1.12-4.1.20.626)
|
||||||
|
- Count items set in interfaces before queuing crafting for them needlessly
|
||||||
|
- Backported b7ca98d ( Avoid copying items on simulated item extraction )
|
||||||
|
- Cache some level emitters functions
|
||||||
|
|
||||||
|
QOL:
|
||||||
|
|
||||||
|
- added highlight interface button to interface terminal ("?" button on the left of the interface slots)
|
||||||
|
- Added bar on the interface terminal that search by inputs ( The one on the LEFT, also searchs by interface name )
|
||||||
|
- Shortcut to molecular assemblers with free slots on the terminal interface by @Theisyat
|
||||||
|
- Toggle button on interface terminal to hide full interfaces
|
||||||
|
- JEI "U""R" and "A" (Usages/Recipes/Bookmark) now work on the Crafting Status GUI. ( the one that shows the total items to craft, and whats missing)
|
||||||
|
- Patterns can now be made with items currently showing on JEI. ( This is overriden by Just Enough Energistics. )
|
||||||
|
- Added multiplier buttons to processing pattern gui
|
||||||
|
- Switched crafting terminal JEI search to fuzzy mode. If the recipe uses a damageable item, AE will try to grab it ( damaged tools )
|
||||||
|
- Encoded patterns stack up to 64 ( holding shift and clicking the encode arrow will transfer the encoded pattern to the player inventory)
|
||||||
|
- Encoded patterns can be draggred on the interface terminal.
|
||||||
|
- Storage Monitor and Conversion Monitor now also ccepts fluids
|
||||||
|
- Draggable JEI ghost items (also works on bookmarked items. SHIFT + Click will move the hovered item into the first free target slot)
|
||||||
|
-JEI auto switches between crafting and processing patterns
|
||||||
|
|
||||||
|
HOTKEYS:
|
||||||
|
|
||||||
|
- Implemented mousetweaks API. AE2 custom keybinds now work. (Try right clicking and use the scroll-wheel on the terminals)
|
||||||
|
- Holding SHIFT and scrolling UP and DOWN will increase the items set on the configured slots of Interfaces and Pattern Terminal (Processing mode)
|
||||||
@@ -19,11 +19,6 @@
|
|||||||
repositories {
|
repositories {
|
||||||
mavenLocal()
|
mavenLocal()
|
||||||
|
|
||||||
maven {
|
|
||||||
name = "storagedrawers"
|
|
||||||
url = "https://dl.bintray.com/jaquadro/dev/"
|
|
||||||
}
|
|
||||||
|
|
||||||
maven {
|
maven {
|
||||||
name "Mobius"
|
name "Mobius"
|
||||||
url "http://mobiusstrip.eu/maven"
|
url "http://mobiusstrip.eu/maven"
|
||||||
@@ -39,6 +34,11 @@ repositories {
|
|||||||
url "http://maven.mcmoddev.com"
|
url "http://maven.mcmoddev.com"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
maven {
|
||||||
|
name "Ellpeck"
|
||||||
|
url "https://maven.ellpeck.de"
|
||||||
|
}
|
||||||
|
|
||||||
maven {
|
maven {
|
||||||
name = "IC2 repo"
|
name = "IC2 repo"
|
||||||
url = "http://maven.ic2.player.to"
|
url = "http://maven.ic2.player.to"
|
||||||
@@ -59,11 +59,6 @@ repositories {
|
|||||||
url "http://maven.k-4u.nl/"
|
url "http://maven.k-4u.nl/"
|
||||||
}
|
}
|
||||||
|
|
||||||
maven { // Hwyla
|
|
||||||
name 'tehnut'
|
|
||||||
url "http://tehnut.info/maven"
|
|
||||||
}
|
|
||||||
|
|
||||||
maven { // CraftTweaker
|
maven { // CraftTweaker
|
||||||
name 'jared maven'
|
name 'jared maven'
|
||||||
url "http://maven.blamejared.com/"
|
url "http://maven.blamejared.com/"
|
||||||
@@ -102,6 +97,7 @@ dependencies {
|
|||||||
compileOnly "CraftTweaker2:CraftTweaker2-API:${crafttweaker_version}"
|
compileOnly "CraftTweaker2:CraftTweaker2-API:${crafttweaker_version}"
|
||||||
compileOnly "inventory-tweaks:InventoryTweaks:${inventorytweaks_version}:api"
|
compileOnly "inventory-tweaks:InventoryTweaks:${inventorytweaks_version}:api"
|
||||||
compileOnly "team.chisel.ctm:CTM:${ctm_version}"
|
compileOnly "team.chisel.ctm:CTM:${ctm_version}"
|
||||||
|
compileOnly "de.ellpeck.actuallyadditions:ActuallyAdditions:1.12.2-r152.16:api"
|
||||||
|
|
||||||
// at runtime, use the full JEI jar
|
// at runtime, use the full JEI jar
|
||||||
runtime "mezz.jei:jei_${minecraft_version}:${jei_version}"
|
runtime "mezz.jei:jei_${minecraft_version}:${jei_version}"
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import java.util.*;
|
|||||||
import appeng.api.config.ActionItems;
|
import appeng.api.config.ActionItems;
|
||||||
import appeng.api.config.Settings;
|
import appeng.api.config.Settings;
|
||||||
import appeng.client.gui.widgets.GuiImgButton;
|
import appeng.client.gui.widgets.GuiImgButton;
|
||||||
|
import appeng.core.worlddata.IWorldPlayerMapping;
|
||||||
import appeng.util.BlockPosUtils;
|
import appeng.util.BlockPosUtils;
|
||||||
import com.google.common.collect.HashMultimap;
|
import com.google.common.collect.HashMultimap;
|
||||||
|
|
||||||
@@ -49,6 +50,7 @@ import appeng.util.Platform;
|
|||||||
import net.minecraft.nbt.NBTUtil;
|
import net.minecraft.nbt.NBTUtil;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.text.TextComponentString;
|
import net.minecraft.util.text.TextComponentString;
|
||||||
|
import net.minecraftforge.common.DimensionManager;
|
||||||
import org.lwjgl.input.Mouse;
|
import org.lwjgl.input.Mouse;
|
||||||
|
|
||||||
|
|
||||||
@@ -79,6 +81,7 @@ public class GuiInterfaceTerminal extends AEBaseGui
|
|||||||
private PartInterfaceTerminal partInterfaceTerminal;
|
private PartInterfaceTerminal partInterfaceTerminal;
|
||||||
private GuiButton guiButtonHide;
|
private GuiButton guiButtonHide;
|
||||||
private GuiButton guiButtonNextAssembler;
|
private GuiButton guiButtonNextAssembler;
|
||||||
|
private HashMap<ClientDCInternalInv,Integer> dimHashMap = new HashMap<>();
|
||||||
|
|
||||||
public GuiInterfaceTerminal( final InventoryPlayer inventoryPlayer, final PartInterfaceTerminal te )
|
public GuiInterfaceTerminal( final InventoryPlayer inventoryPlayer, final PartInterfaceTerminal te )
|
||||||
{
|
{
|
||||||
@@ -217,9 +220,17 @@ 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();
|
||||||
int dimension = mc.world.provider.getDimension();
|
int playerDim = mc.world.provider.getDimension();
|
||||||
hilightBlock( blockPos, System.currentTimeMillis() + 500 * BlockPosUtils.getDistance(blockPos, blockPos2), dimension );
|
int interfaceDim = dimHashMap.get( guiButtonHashMap.get( this.selectedButton ) );
|
||||||
|
if( playerDim != interfaceDim )
|
||||||
|
{
|
||||||
|
mc.player.sendStatusMessage( new TextComponentString( "Interface located at dimension: " + interfaceDim + " [" + DimensionManager.getWorld( interfaceDim ).provider.getDimensionType().getName() + "] and cant be highlighted" ), false );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
hilightBlock( blockPos, System.currentTimeMillis() + 500 * BlockPosUtils.getDistance( blockPos, blockPos2 ), playerDim );
|
||||||
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();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -325,6 +336,7 @@ public class GuiInterfaceTerminal extends AEBaseGui
|
|||||||
final NBTTagCompound invData = in.getCompoundTag( key );
|
final NBTTagCompound invData = in.getCompoundTag( key );
|
||||||
final ClientDCInternalInv current = this.getById( id, invData.getLong( "sortBy" ), invData.getString( "un" ) );
|
final ClientDCInternalInv current = this.getById( id, invData.getLong( "sortBy" ), invData.getString( "un" ) );
|
||||||
blockPosHashMap.put( current, NBTUtil.getPosFromTag( invData.getCompoundTag( "pos" )) );
|
blockPosHashMap.put( current, NBTUtil.getPosFromTag( invData.getCompoundTag( "pos" )) );
|
||||||
|
dimHashMap.put( current, invData.getInteger( "dim" ));
|
||||||
|
|
||||||
for( int x = 0; x < current.getInventory().getSlots(); x++ )
|
for( int x = 0; x < current.getInventory().getSlots(); x++ )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -404,6 +404,7 @@ public final class ContainerInterfaceTerminal extends AEBaseContainer
|
|||||||
tag.setLong( "sortBy", inv.sortBy );
|
tag.setLong( "sortBy", inv.sortBy );
|
||||||
tag.setString( "un", inv.unlocalizedName );
|
tag.setString( "un", inv.unlocalizedName );
|
||||||
tag.setTag( "pos", NBTUtil.createPosTag( inv.pos ) );
|
tag.setTag( "pos", NBTUtil.createPosTag( inv.pos ) );
|
||||||
|
tag.setInteger( "dim", inv.dim );
|
||||||
}
|
}
|
||||||
|
|
||||||
for( int x = 0; x < length; x++ )
|
for( int x = 0; x < length; x++ )
|
||||||
@@ -435,6 +436,7 @@ public final class ContainerInterfaceTerminal extends AEBaseContainer
|
|||||||
private final IItemHandler client;
|
private final IItemHandler client;
|
||||||
private final IItemHandler server;
|
private final IItemHandler server;
|
||||||
private final BlockPos pos;
|
private final BlockPos pos;
|
||||||
|
private final int dim;
|
||||||
|
|
||||||
public InvTracker( final DualityInterface dual, final IItemHandler patterns, final String unlocalizedName )
|
public InvTracker( final DualityInterface dual, final IItemHandler patterns, final String unlocalizedName )
|
||||||
{
|
{
|
||||||
@@ -443,6 +445,7 @@ public final class ContainerInterfaceTerminal extends AEBaseContainer
|
|||||||
this.unlocalizedName = unlocalizedName;
|
this.unlocalizedName = unlocalizedName;
|
||||||
this.sortBy = dual.getSortValue();
|
this.sortBy = dual.getSortValue();
|
||||||
this.pos = dual.getLocation().getPos();
|
this.pos = dual.getLocation().getPos();
|
||||||
|
this.dim = dual.getLocation().getWorld().provider.getDimension();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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.container.slot.*;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.entity.player.EntityPlayerMP;
|
import net.minecraft.entity.player.EntityPlayerMP;
|
||||||
import net.minecraft.entity.player.InventoryPlayer;
|
import net.minecraft.entity.player.InventoryPlayer;
|
||||||
@@ -51,12 +52,6 @@ import appeng.api.storage.data.IAEItemStack;
|
|||||||
import appeng.api.storage.data.IItemList;
|
import appeng.api.storage.data.IItemList;
|
||||||
import appeng.container.ContainerNull;
|
import appeng.container.ContainerNull;
|
||||||
import appeng.container.guisync.GuiSync;
|
import appeng.container.guisync.GuiSync;
|
||||||
import appeng.container.slot.IOptionalSlotHost;
|
|
||||||
import appeng.container.slot.OptionalSlotFake;
|
|
||||||
import appeng.container.slot.SlotFakeCraftingMatrix;
|
|
||||||
import appeng.container.slot.SlotPatternOutputs;
|
|
||||||
import appeng.container.slot.SlotPatternTerm;
|
|
||||||
import appeng.container.slot.SlotRestrictedInput;
|
|
||||||
import appeng.core.sync.packets.PacketPatternSlot;
|
import appeng.core.sync.packets.PacketPatternSlot;
|
||||||
import appeng.helpers.IContainerCraftingPacket;
|
import appeng.helpers.IContainerCraftingPacket;
|
||||||
import appeng.items.storage.ItemViewCell;
|
import appeng.items.storage.ItemViewCell;
|
||||||
@@ -132,6 +127,26 @@ public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEA
|
|||||||
this.updateOrderOfOutputSlots();
|
this.updateOrderOfOutputSlots();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemStack transferStackInSlot( final EntityPlayer p, final int idx )
|
||||||
|
{
|
||||||
|
if( Platform.isClient() )
|
||||||
|
{
|
||||||
|
return ItemStack.EMPTY;
|
||||||
|
}
|
||||||
|
|
||||||
|
final AppEngSlot clickSlot = ( AppEngSlot ) this.inventorySlots.get( idx ); // require AE SLots!
|
||||||
|
ItemStack itemStack = clickSlot.getStack();
|
||||||
|
if( AEApi.instance().definitions().materials().blankPattern().isSameAs( itemStack ) )
|
||||||
|
{
|
||||||
|
IItemHandler patternInv = this.getPatternTerminal().getInventoryByName( "pattern" );
|
||||||
|
ItemStack remainder = patternInv.insertItem( 0, itemStack, false );
|
||||||
|
clickSlot.putStack( remainder );
|
||||||
|
}
|
||||||
|
return super.transferStackInSlot( p, idx );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private void updateOrderOfOutputSlots()
|
private void updateOrderOfOutputSlots()
|
||||||
{
|
{
|
||||||
if( !this.isCraftingMode() )
|
if( !this.isCraftingMode() )
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ package appeng.core.sync.packets;
|
|||||||
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.Collections;
|
||||||
|
|
||||||
import appeng.api.storage.data.IAEFluidStack;
|
import appeng.api.storage.data.IAEFluidStack;
|
||||||
import appeng.container.slot.IJEITargetSlot;
|
import appeng.container.slot.IJEITargetSlot;
|
||||||
@@ -224,7 +225,9 @@ public class PacketInventoryAction extends AppEngPacket
|
|||||||
IAEFluidStack aefs = AEFluidStack.fromNBT( this.slotItem.getDefinition().getTagCompound() );
|
IAEFluidStack aefs = AEFluidStack.fromNBT( this.slotItem.getDefinition().getTagCompound() );
|
||||||
if( aefs != null )
|
if( aefs != null )
|
||||||
{
|
{
|
||||||
|
aefs.setStackSize( 1000 );
|
||||||
( (ContainerFluidConfigurable) sender.openContainer ).getFluidConfigInventory().setFluidInSlot( this.slot, aefs );
|
( (ContainerFluidConfigurable) sender.openContainer ).getFluidConfigInventory().setFluidInSlot( this.slot, aefs );
|
||||||
|
NetworkHandler.instance().sendToServer( new PacketFluidSlot( Collections.singletonMap( this.slot, aefs ) ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -215,7 +215,7 @@ public class PacketJEIRecipe extends AppEngPacket
|
|||||||
IAEItemStack mostDamaged = null;
|
IAEItemStack mostDamaged = null;
|
||||||
for( IAEItemStack is : outList )
|
for( IAEItemStack is : outList )
|
||||||
{
|
{
|
||||||
if( !is.isCraftable() && is.getItem().isDamageable() )
|
if( !is.isCraftable() )
|
||||||
{
|
{
|
||||||
if( mostDamaged == null || mostDamaged.getItemDamage() < is.getItemDamage() )
|
if( mostDamaged == null || mostDamaged.getItemDamage() < is.getItemDamage() )
|
||||||
{
|
{
|
||||||
@@ -285,6 +285,7 @@ public class PacketJEIRecipe extends AppEngPacket
|
|||||||
IItemHandler outputSlots = cct.getInventoryByName( "output" );
|
IItemHandler outputSlots = cct.getInventoryByName( "output" );
|
||||||
for( int i = 0; i < this.output.length; ++i )
|
for( int i = 0; i < this.output.length; ++i )
|
||||||
{
|
{
|
||||||
|
if( this.output[i] == null ) continue;
|
||||||
ItemHandlerUtil.setStackInSlot( outputSlots, i, this.output[i] );
|
ItemHandlerUtil.setStackInSlot( outputSlots, i, this.output[i] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,8 +29,12 @@ import appeng.util.*;
|
|||||||
import appeng.util.inv.*;
|
import appeng.util.inv.*;
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
|
|
||||||
|
import de.ellpeck.actuallyadditions.api.tile.IPhantomTile;
|
||||||
import gregtech.api.block.machines.BlockMachine;
|
import gregtech.api.block.machines.BlockMachine;
|
||||||
import gregtech.api.metatileentity.MetaTileEntity;
|
import gregtech.api.metatileentity.MetaTileEntity;
|
||||||
|
import gregtech.api.metatileentity.MetaTileEntityHolder;
|
||||||
|
import gregtech.api.metatileentity.TieredMetaTileEntity;
|
||||||
|
import gregtech.api.metatileentity.WorkableTieredMetaTileEntity;
|
||||||
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;
|
||||||
@@ -1095,15 +1099,30 @@ public class DualityInterface implements IGridTickable, IStorageMonitorable, IIn
|
|||||||
{
|
{
|
||||||
if( this.isBlocking() )
|
if( this.isBlocking() )
|
||||||
{
|
{
|
||||||
if( te.getBlockType().getRegistryName().getResourceDomain().equals( "gregtech" ) )
|
IPhantomTile phantomTE = null;
|
||||||
|
if( Loader.isModLoaded( "actuallyadditions" ) && Loader.isModLoaded( "gregtech" ) && te instanceof IPhantomTile )
|
||||||
{
|
{
|
||||||
GTad = GTCEInventoryAdaptor.getAdaptor( te, s.getOpposite() );
|
phantomTE = ( (IPhantomTile) te );
|
||||||
if( GTad != null && !invIsBlockedGTCE( GTad ) )
|
if( phantomTE.hasBoundPosition() )
|
||||||
|
{
|
||||||
|
TileEntity phantom = w.getTileEntity( phantomTE.getBoundPosition() );
|
||||||
|
if( phantom instanceof MetaTileEntityHolder && isGTCEblocked( phantom, s ) )
|
||||||
{
|
{
|
||||||
visitedFaces.remove( s );
|
visitedFaces.remove( s );
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
else if( Loader.isModLoaded( "gregtech" ) && te instanceof MetaTileEntityHolder )
|
||||||
|
{
|
||||||
|
if( isGTCEblocked( te, s ) )
|
||||||
|
{
|
||||||
|
visitedFaces.remove( s );
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
else if( invIsBlocked( ad ) )
|
else if( invIsBlocked( ad ) )
|
||||||
{
|
{
|
||||||
visitedFaces.remove( s );
|
visitedFaces.remove( s );
|
||||||
@@ -1152,19 +1171,34 @@ public class DualityInterface implements IGridTickable, IStorageMonitorable, IIn
|
|||||||
for( final EnumFacing s : possibleDirections )
|
for( final EnumFacing s : possibleDirections )
|
||||||
{
|
{
|
||||||
final TileEntity te = w.getTileEntity( tile.getPos().offset( s ) );
|
final TileEntity te = w.getTileEntity( tile.getPos().offset( s ) );
|
||||||
|
IPhantomTile phantomTE = null;
|
||||||
|
|
||||||
final InventoryAdaptor ad = InventoryAdaptor.getAdaptor( te, s.getOpposite() );
|
final InventoryAdaptor ad = InventoryAdaptor.getAdaptor( te, s.getOpposite() );
|
||||||
if( ad != null )
|
if( ad != null )
|
||||||
{
|
{
|
||||||
if( te.getBlockType().getRegistryName().getResourceDomain().equals( "gregtech" ) )
|
if( Loader.isModLoaded( "actuallyadditions") && Loader.isModLoaded( "gregtech" ) && te instanceof IPhantomTile )
|
||||||
{
|
{
|
||||||
GTad = GTCEInventoryAdaptor.getAdaptor( te, s.getOpposite() );
|
phantomTE = ( (IPhantomTile) te );
|
||||||
if( GTad != null && !invIsBlockedGTCE( GTad ) )
|
if( phantomTE.hasBoundPosition() )
|
||||||
|
{
|
||||||
|
TileEntity phantom = w.getTileEntity( phantomTE.getBoundPosition() );
|
||||||
|
if( phantom instanceof MetaTileEntityHolder && !isGTCEblocked( phantom, s ) )
|
||||||
{
|
{
|
||||||
allAreBusy = false;
|
allAreBusy = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
else if( Loader.isModLoaded( "gregtech" ) && te instanceof MetaTileEntityHolder )
|
||||||
|
{
|
||||||
|
if( !isGTCEblocked( te, s ) )
|
||||||
|
{
|
||||||
|
allAreBusy = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
else if( !invIsBlocked( ad ) )
|
else if( !invIsBlocked( ad ) )
|
||||||
{
|
{
|
||||||
allAreBusy = false;
|
allAreBusy = false;
|
||||||
@@ -1177,6 +1211,12 @@ public class DualityInterface implements IGridTickable, IStorageMonitorable, IIn
|
|||||||
return busy;
|
return busy;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean isGTCEblocked(TileEntity te, EnumFacing s)
|
||||||
|
{
|
||||||
|
GTad = GTCEInventoryAdaptor.getAdaptor( te, s.getOpposite() );
|
||||||
|
return invIsBlockedGTCE( GTad );
|
||||||
|
}
|
||||||
|
|
||||||
private boolean sameGrid( final IGrid grid ) throws GridAccessException
|
private boolean sameGrid( final IGrid grid ) throws GridAccessException
|
||||||
{
|
{
|
||||||
return grid == this.gridProxy.getGrid();
|
return grid == this.gridProxy.getGrid();
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ public class HighlighterHandler
|
|||||||
tessellator.draw();
|
tessellator.draw();
|
||||||
|
|
||||||
GlStateManager.enableTexture2D();
|
GlStateManager.enableTexture2D();
|
||||||
|
GlStateManager.enableDepth();
|
||||||
GlStateManager.popMatrix();
|
GlStateManager.popMatrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import java.util.Map;
|
|||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
import appeng.container.implementations.ContainerPatternTerm;
|
import appeng.container.implementations.ContainerPatternTerm;
|
||||||
|
import appeng.core.sync.packets.PacketValueConfig;
|
||||||
import mezz.jei.api.recipe.VanillaRecipeCategoryUid;
|
import mezz.jei.api.recipe.VanillaRecipeCategoryUid;
|
||||||
import mezz.jei.transfer.RecipeTransferErrorInternal;
|
import mezz.jei.transfer.RecipeTransferErrorInternal;
|
||||||
import mezz.jei.transfer.RecipeTransferErrorTooltip;
|
import mezz.jei.transfer.RecipeTransferErrorTooltip;
|
||||||
@@ -73,24 +74,7 @@ class RecipeTransferHandler<T extends Container> implements IRecipeTransferHandl
|
|||||||
{
|
{
|
||||||
final String recipeType = recipeLayout.getRecipeCategory().getUid();
|
final String recipeType = recipeLayout.getRecipeCategory().getUid();
|
||||||
|
|
||||||
if (!recipeType.equals( VanillaRecipeCategoryUid.INFORMATION) && !recipeType.equals(VanillaRecipeCategoryUid.FUEL))
|
if (recipeType.equals( VanillaRecipeCategoryUid.INFORMATION) || recipeType.equals(VanillaRecipeCategoryUid.FUEL))
|
||||||
{
|
|
||||||
if( container instanceof ContainerPatternTerm )
|
|
||||||
{
|
|
||||||
if( !( (ContainerPatternTerm) container ).isCraftingMode() )
|
|
||||||
{
|
|
||||||
if( recipeType.equals( VanillaRecipeCategoryUid.CRAFTING ) )
|
|
||||||
{
|
|
||||||
return new RecipeTransferErrorTooltip( I18n.format( "gui.appliedenergistics2.CraftingPattern" ) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if( !recipeType.equals( VanillaRecipeCategoryUid.CRAFTING ) )
|
|
||||||
{
|
|
||||||
return new RecipeTransferErrorTooltip( I18n.format( "gui.appliedenergistics2.ProcessingPattern" ) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
return RecipeTransferErrorInternal.INSTANCE;
|
return RecipeTransferErrorInternal.INSTANCE;
|
||||||
}
|
}
|
||||||
@@ -100,6 +84,30 @@ class RecipeTransferHandler<T extends Container> implements IRecipeTransferHandl
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( container instanceof ContainerPatternTerm )
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if( !( (ContainerPatternTerm) container ).isCraftingMode() )
|
||||||
|
{
|
||||||
|
if( recipeType.equals( VanillaRecipeCategoryUid.CRAFTING ) )
|
||||||
|
{
|
||||||
|
NetworkHandler.instance().sendToServer( new PacketValueConfig( "PatternTerminal.CraftMode", "1" ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if( !recipeType.equals( VanillaRecipeCategoryUid.CRAFTING ) )
|
||||||
|
{
|
||||||
|
|
||||||
|
NetworkHandler.instance().sendToServer( new PacketValueConfig( "PatternTerminal.CraftMode", "0" ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
catch( IOException e )
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Map<Integer, ? extends IGuiIngredient<ItemStack>> ingredients = recipeLayout.getItemStacks().getGuiIngredients();
|
Map<Integer, ? extends IGuiIngredient<ItemStack>> ingredients = recipeLayout.getItemStacks().getGuiIngredients();
|
||||||
|
|
||||||
final NBTTagCompound recipe = new NBTTagCompound();
|
final NBTTagCompound recipe = new NBTTagCompound();
|
||||||
|
|||||||
@@ -19,7 +19,6 @@
|
|||||||
package appeng.parts.automation;
|
package appeng.parts.automation;
|
||||||
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
import appeng.me.Grid;
|
import appeng.me.Grid;
|
||||||
@@ -27,7 +26,6 @@ import appeng.me.GridNode;
|
|||||||
import appeng.util.item.AEItemStack;
|
import appeng.util.item.AEItemStack;
|
||||||
import it.unimi.dsi.fastutil.objects.Object2LongMap;
|
import it.unimi.dsi.fastutil.objects.Object2LongMap;
|
||||||
import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap;
|
import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap;
|
||||||
import it.unimi.dsi.fastutil.objects.Object2ObjectMap;
|
|
||||||
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
|
import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.inventory.InventoryCrafting;
|
import net.minecraft.inventory.InventoryCrafting;
|
||||||
@@ -128,8 +126,6 @@ public class PartLevelEmitter extends PartUpgradeable implements IEnergyWatcherH
|
|||||||
static Object2LongMap<Grid> gridItemCount = new Object2LongOpenHashMap<>();
|
static Object2LongMap<Grid> gridItemCount = new Object2LongOpenHashMap<>();
|
||||||
static Object2ObjectOpenHashMap<Grid, Object2LongMap<AEItemStack>> fuzzyAEItemStackCount = new Object2ObjectOpenHashMap<>();
|
static Object2ObjectOpenHashMap<Grid, Object2LongMap<AEItemStack>> fuzzyAEItemStackCount = new Object2ObjectOpenHashMap<>();
|
||||||
static Object2ObjectOpenHashMap<Grid, Object2LongMap<AEItemStack>> preciseAEItemStackCount = new Object2ObjectOpenHashMap<>();
|
static Object2ObjectOpenHashMap<Grid, Object2LongMap<AEItemStack>> preciseAEItemStackCount = new Object2ObjectOpenHashMap<>();
|
||||||
static Object2ObjectMap<Grid,Iterable<IAEItemStack>> previousChange = new Object2ObjectOpenHashMap<>();
|
|
||||||
static Object2ObjectMap<Grid,IItemList<IAEItemStack>> cachedStorageList = new Object2ObjectOpenHashMap<>();
|
|
||||||
|
|
||||||
@Reflected
|
@Reflected
|
||||||
public PartLevelEmitter( final ItemStack is )
|
public PartLevelEmitter( final ItemStack is )
|
||||||
@@ -328,7 +324,7 @@ public class PartLevelEmitter extends PartUpgradeable implements IEnergyWatcherH
|
|||||||
|
|
||||||
private void updateReportingValue( final IMEMonitor<IAEItemStack> monitor )
|
private void updateReportingValue( final IMEMonitor<IAEItemStack> monitor )
|
||||||
{
|
{
|
||||||
updateReportingValue( monitor, new ArrayList<>() );
|
updateReportingValue( monitor,null );
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateReportingValue( final IMEMonitor<IAEItemStack> monitor, Iterable<IAEItemStack> change )
|
private void updateReportingValue( final IMEMonitor<IAEItemStack> monitor, Iterable<IAEItemStack> change )
|
||||||
@@ -339,79 +335,43 @@ public class PartLevelEmitter extends PartUpgradeable implements IEnergyWatcherH
|
|||||||
|
|
||||||
if( node != null )
|
if( node != null )
|
||||||
{
|
{
|
||||||
|
|
||||||
final Grid g = node.getInternalGrid();
|
final Grid g = node.getInternalGrid();
|
||||||
|
|
||||||
IItemList<IAEItemStack> l;
|
|
||||||
boolean alreadyEvaluated = false;
|
|
||||||
|
|
||||||
if( previousChange.containsKey( g ) )
|
|
||||||
{
|
|
||||||
if( change.iterator().hasNext() && previousChange.get( g ).iterator().hasNext() )
|
|
||||||
{
|
|
||||||
IAEItemStack a = change.iterator().next();
|
|
||||||
IAEItemStack b = previousChange.get( g ).iterator().next();
|
|
||||||
if( a == b )
|
|
||||||
{
|
|
||||||
alreadyEvaluated = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
alreadyEvaluated = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if( alreadyEvaluated )
|
|
||||||
{
|
|
||||||
l = cachedStorageList.get( g );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
l = monitor.getStorageList();
|
|
||||||
cachedStorageList.put( g, l );
|
|
||||||
if ( change.iterator().hasNext() )
|
|
||||||
{
|
|
||||||
previousChange.put( g, change );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
previousChange.put( g, new ArrayList<>() );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if( myStack == null )
|
if( myStack == null )
|
||||||
|
{
|
||||||
|
if( change != null )
|
||||||
{
|
{
|
||||||
if( gridItemCount.containsKey( g ) )
|
if( gridItemCount.containsKey( g ) )
|
||||||
{
|
{
|
||||||
change.forEach( iaeItemStack -> lastReportedValue += iaeItemStack.getStackSize() );
|
change.forEach( iaeItemStack -> lastReportedValue += iaeItemStack.getStackSize() );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
gridItemCount.computeIfAbsent( g, ( aLong ) -> {
|
gridItemCount.computeIfAbsent( g, ( aLong ) -> {
|
||||||
this.lastReportedValue = 0;
|
this.lastReportedValue = 0;
|
||||||
l.forEach( iaeItemStack -> lastReportedValue += iaeItemStack.getStackSize() );
|
monitor.getStorageList().forEach( iaeItemStack -> lastReportedValue += iaeItemStack.getStackSize() );
|
||||||
return ( lastReportedValue );
|
return ( lastReportedValue );
|
||||||
} );
|
} );
|
||||||
this.lastReportedValue = gridItemCount.get( g );
|
this.lastReportedValue = gridItemCount.get( g );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
else if( this.getInstalledUpgrades( Upgrades.FUZZY ) > 0 )
|
else if( this.getInstalledUpgrades( Upgrades.FUZZY ) > 0 )
|
||||||
{
|
{
|
||||||
final FuzzyMode fzMode = (FuzzyMode) this.getConfigManager().getSetting( Settings.FUZZY_MODE );
|
final FuzzyMode fzMode = (FuzzyMode) this.getConfigManager().getSetting( Settings.FUZZY_MODE );
|
||||||
|
if( change != null )
|
||||||
|
{
|
||||||
if( fuzzyAEItemStackCount.containsKey( g ) )
|
if( fuzzyAEItemStackCount.containsKey( g ) )
|
||||||
{
|
{
|
||||||
change.forEach( iaeItemStack -> {
|
change.forEach( iaeItemStack -> {
|
||||||
if( iaeItemStack.sameOre( myStack ) )
|
if( iaeItemStack.sameOre( myStack ) ) lastReportedValue += iaeItemStack.getStackSize();
|
||||||
{
|
|
||||||
lastReportedValue += iaeItemStack.getStackSize();
|
|
||||||
}
|
|
||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fuzzyAEItemStackCount.computeIfAbsent( g, ( grid -> new Object2LongOpenHashMap<>() ) );
|
fuzzyAEItemStackCount.computeIfAbsent( g, ( grid -> new Object2LongOpenHashMap<>() ) );
|
||||||
fuzzyAEItemStackCount.get( g ).computeIfAbsent( (AEItemStack) myStack, ( aLong -> {
|
fuzzyAEItemStackCount.get( g ).computeIfAbsent( (AEItemStack) myStack, ( aLong -> {
|
||||||
this.lastReportedValue = 0;
|
this.lastReportedValue = 0;
|
||||||
l.findFuzzy( myStack, fzMode ).forEach( iaeItemStack -> lastReportedValue += iaeItemStack.getStackSize() );
|
monitor.getStorageList().findFuzzy( myStack, fzMode ).forEach( iaeItemStack -> lastReportedValue += iaeItemStack.getStackSize() );
|
||||||
return ( lastReportedValue );
|
return ( lastReportedValue );
|
||||||
} ) );
|
} ) );
|
||||||
|
|
||||||
@@ -423,6 +383,8 @@ public class PartLevelEmitter extends PartUpgradeable implements IEnergyWatcherH
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
if( change != null )
|
||||||
{
|
{
|
||||||
if( preciseAEItemStackCount.containsKey( g ) )
|
if( preciseAEItemStackCount.containsKey( g ) )
|
||||||
{
|
{
|
||||||
@@ -430,11 +392,11 @@ public class PartLevelEmitter extends PartUpgradeable implements IEnergyWatcherH
|
|||||||
if( iaeItemStack.isSameType( myStack ) ) lastReportedValue += iaeItemStack.getStackSize();
|
if( iaeItemStack.isSameType( myStack ) ) lastReportedValue += iaeItemStack.getStackSize();
|
||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
preciseAEItemStackCount.computeIfAbsent( g, ( grid -> new Object2LongOpenHashMap<>() ) );
|
preciseAEItemStackCount.computeIfAbsent( g, ( grid -> new Object2LongOpenHashMap<>() ) );
|
||||||
preciseAEItemStackCount.get( g ).computeIfAbsent( (AEItemStack) myStack, ( aLong -> {
|
preciseAEItemStackCount.get( g ).computeIfAbsent( (AEItemStack) myStack, ( aLong -> {
|
||||||
this.lastReportedValue = 0;
|
this.lastReportedValue = 0;
|
||||||
IAEItemStack precise = l.findPrecise( myStack );
|
IAEItemStack precise = monitor.getStorageList().findPrecise( myStack );
|
||||||
if( precise != null ) lastReportedValue = precise.getStackSize();
|
if( precise != null ) lastReportedValue = precise.getStackSize();
|
||||||
return ( lastReportedValue );
|
return ( lastReportedValue );
|
||||||
} ) );
|
} ) );
|
||||||
|
|||||||
@@ -406,7 +406,7 @@ class ItemHandlerAdapter implements IMEInventory<IAEItemStack>, IBaseMonitor<IAE
|
|||||||
if( oldAeIS != null )
|
if( oldAeIS != null )
|
||||||
{
|
{
|
||||||
oldAeIS.setStackSize( -oldAeIS.getStackSize() );
|
oldAeIS.setStackSize( -oldAeIS.getStackSize() );
|
||||||
changes.add( oldAeIS.copy() );
|
changes.add( oldAeIS );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Notify the network about the new stack. Note that this is null if newIS was null
|
// Notify the network about the new stack. Note that this is null if newIS was null
|
||||||
|
|||||||
@@ -284,7 +284,7 @@ class ItemRepositoryAdapter implements IMEInventory<IAEItemStack>, IBaseMonitor<
|
|||||||
if( oldAeIS != null )
|
if( oldAeIS != null )
|
||||||
{
|
{
|
||||||
oldAeIS.setStackSize( -oldAeIS.getStackSize() );
|
oldAeIS.setStackSize( -oldAeIS.getStackSize() );
|
||||||
changes.add( oldAeIS.copy() );
|
changes.add( oldAeIS );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Notify the network about the new stack. Note that this is null if newIS was null
|
// Notify the network about the new stack. Note that this is null if newIS was null
|
||||||
|
|||||||
+2
-2
@@ -4,8 +4,8 @@
|
|||||||
"type": "forge:and",
|
"type": "forge:and",
|
||||||
"values": [
|
"values": [
|
||||||
{
|
{
|
||||||
"type": "minecraft:item_exists",
|
"type": "appliedenergistics2:part_exists",
|
||||||
"item": "appliedenergistics2:part:part.terminal"
|
"part": "part.terminal"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "appliedenergistics2:material_exists",
|
"type": "appliedenergistics2:material_exists",
|
||||||
|
|||||||
Reference in New Issue
Block a user