mirror of
https://github.com/GTNewHorizons/ThaumicEnergistics.git
synced 2026-10-25 20:32:27 +00:00
Terminal Fixes + Facades
Fixed name collision with "isUseableByPlayer". Fixed KnowledgeInscriber not being able to erase patterns. Fixed bug where Terminals would not properly update during certain AE-network changes. Fixed bug where craftable essentia was still present on the network when it should not be. Added config option to force some thaumcraft blocks to be turned into facades.
This commit is contained in:
1 parent
35dc131b2b
commit
73ef506cb8
41 files changed
+781
-542
No files matched your search
+8
-1
@@ -1,4 +1,11 @@
|
||||
01/02/2016 0.10.0.0
|
||||
01/10/2016 0.10.0.0 - Beta
|
||||
Fixed name collision with "isUseableByPlayer".
|
||||
Fixed KnowledgeInscriber not being able to erase patterns.
|
||||
Fixed bug where Terminals would not properly update during certain AE-network changes.
|
||||
Fixed bug where craftable essentia was still present on the network when it should not be.
|
||||
Added config option to force some thaumcraft blocks to be turned into facades.
|
||||
|
||||
01/09/2016 0.10.0.0
|
||||
Fixed crafting aspect item display name.
|
||||
More Multiplayer gui sync fixes.
|
||||
Slightly reduced size of all packets.
|
||||
|
||||
@@ -30,6 +30,14 @@ public interface IThEConfig
|
||||
*/
|
||||
public int conversionMultiplier();
|
||||
|
||||
/**
|
||||
* When enabled, overwrites the AE2 facade setting for certain Thaumcraft blocks,
|
||||
* allowing them to become facades.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public boolean forceTCFacades();
|
||||
|
||||
/**
|
||||
* If true the iron and thaumium gearbox's will be rendered as a standard
|
||||
* block.
|
||||
|
||||
@@ -6,6 +6,8 @@ public interface IMEEssentiaMonitorReceiver
|
||||
{
|
||||
/**
|
||||
* Verifies that the receiver is still valid.<br>
|
||||
* If returning false the receiver will be removed from the monitor
|
||||
* and the receiver should NOT call removeListener itself.
|
||||
*
|
||||
* @param verificationToken
|
||||
* @return False if the receiver should no longer get updates.
|
||||
|
||||
@@ -840,11 +840,11 @@ public class GuiEssentiaCellTerminal
|
||||
public void onReceiveAspectListChange( final IAspectStack change )
|
||||
{
|
||||
// Update the container
|
||||
if( this.baseContainer.onReceivedAspectListChange( change ) )
|
||||
{
|
||||
// Update the gui
|
||||
this.onListUpdate();
|
||||
}
|
||||
this.baseContainer.onReceivedAspectListChange( change );
|
||||
|
||||
// Update the gui
|
||||
this.onListUpdate();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -22,7 +22,8 @@ class ConfigurationHandler
|
||||
DEFAULT_INFUSIONPROVIDER = true,
|
||||
DEFAULT_QUARTZ = true,
|
||||
DEFAULT_GEARBOX_DISABLED = false,
|
||||
DEFAULT_EXTRACELLS_BLIST = true;
|
||||
DEFAULT_EXTRACELLS_BLIST = true,
|
||||
DEFAULT_FORCE_TC_FACADES = true;
|
||||
|
||||
/**
|
||||
* Mod configuration
|
||||
@@ -61,6 +62,11 @@ class ConfigurationHandler
|
||||
*/
|
||||
private boolean extracellsBlacklist = DEFAULT_EXTRACELLS_BLIST;
|
||||
|
||||
/**
|
||||
* Allows specific blocks from Thaumcraft to be turned into facades.
|
||||
*/
|
||||
private boolean forceTCFacades = DEFAULT_FORCE_TC_FACADES;
|
||||
|
||||
private ConfigurationHandler( final Configuration config )
|
||||
{
|
||||
this.configSettings = config;
|
||||
@@ -101,24 +107,28 @@ class ConfigurationHandler
|
||||
this.conversionMultiplier = (int)Math.pow( 2, Math.min( fluidPow, 11 ) );
|
||||
|
||||
// Sync essentia provider
|
||||
this.allowEssentiaProvider = this.configSettings.getBoolean( "Allow Crafting Essentia Provider", ConfigurationHandler.CATEGORY_CRAFTING,
|
||||
ConfigurationHandler.DEFAULT_ESSENTIAPROVIDER, "Controls if the Essentia Provider is allowed to be crafted." );
|
||||
this.allowEssentiaProvider = this.configSettings.getBoolean( "Allow Crafting Essentia Provider", CATEGORY_CRAFTING,
|
||||
DEFAULT_ESSENTIAPROVIDER, "Controls if the Essentia Provider is allowed to be crafted." );
|
||||
|
||||
// Sync essentia provider
|
||||
this.allowInfusionProvider = this.configSettings.getBoolean( "Allow Crafting Infusion Provider", ConfigurationHandler.CATEGORY_CRAFTING,
|
||||
ConfigurationHandler.DEFAULT_INFUSIONPROVIDER, "Controls if the Infusion Provider is allowed to be crafted." );
|
||||
this.allowInfusionProvider = this.configSettings.getBoolean( "Allow Crafting Infusion Provider", CATEGORY_CRAFTING,
|
||||
DEFAULT_INFUSIONPROVIDER, "Controls if the Infusion Provider is allowed to be crafted." );
|
||||
|
||||
// Sync certus dupe
|
||||
this.allowCertusDupe = this.configSettings.getBoolean( "Certus Quartz Duplication", ConfigurationHandler.CATEGORY_CRAFTING,
|
||||
ConfigurationHandler.DEFAULT_QUARTZ, "Controls if Certus Quartz can be duplicated in the crucible." );
|
||||
this.allowCertusDupe = this.configSettings.getBoolean( "Certus Quartz Duplication", CATEGORY_CRAFTING,
|
||||
DEFAULT_QUARTZ, "Controls if Certus Quartz can be duplicated in the crucible." );
|
||||
|
||||
// Gearbox model
|
||||
this.gearboxModelDisabled = this.configSettings.getBoolean( "Disable Gearbox Model", ConfigurationHandler.CATEGORY_CLIENT,
|
||||
ConfigurationHandler.DEFAULT_GEARBOX_DISABLED, "The iron and thaumium gearboxes will be rendered as a standard block." );
|
||||
this.gearboxModelDisabled = this.configSettings.getBoolean( "Disable Gearbox Model", CATEGORY_CLIENT,
|
||||
DEFAULT_GEARBOX_DISABLED, "The iron and thaumium gearboxes will be rendered as a standard block." );
|
||||
|
||||
// Extra cells blacklist
|
||||
this.extracellsBlacklist = this.configSettings.getBoolean( "ExtraCells Blacklist", ConfigurationHandler.CATEGORY_INTEGRATION,
|
||||
ConfigurationHandler.DEFAULT_EXTRACELLS_BLIST, "Prevents extra cells from interacting with essentia gas" );
|
||||
this.extracellsBlacklist = this.configSettings.getBoolean( "ExtraCells Blacklist", CATEGORY_INTEGRATION,
|
||||
DEFAULT_EXTRACELLS_BLIST, "Prevents extra cells from interacting with essentia gas" );
|
||||
|
||||
// Thaumcraft facades
|
||||
this.forceTCFacades = this.configSettings.getBoolean( "Force TC Facades", CATEGORY_CRAFTING, DEFAULT_FORCE_TC_FACADES,
|
||||
"When enabled, overwrites the AE2 facade setting for certain Thaumcraft blocks, allowing them to become facades." );
|
||||
|
||||
// Has the config file changed?
|
||||
if( this.configSettings.hasChanged() )
|
||||
@@ -158,6 +168,12 @@ class ConfigurationHandler
|
||||
return this.conversionMultiplier;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean forceTCFacades()
|
||||
{
|
||||
return this.forceTCFacades;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean gearboxModelDisabled()
|
||||
{
|
||||
|
||||
@@ -265,7 +265,7 @@ public class ThEGuiHandler
|
||||
public static void launchGui( final ThEPartBase part, final EntityPlayer player, final World world, final int x, final int y, final int z )
|
||||
{
|
||||
// Ensure the player is allowed to open the gui
|
||||
if( part.isUseableByPlayer( player ) )
|
||||
if( part.isPartUseableByPlayer( player ) )
|
||||
{
|
||||
player.openGui( ThaumicEnergistics.INSTANCE, part.getSide().ordinal(), world, x, y, z );
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.world.World;
|
||||
import thaumcraft.api.aspects.Aspect;
|
||||
import thaumicenergistics.api.grid.ICraftingIssuerHost;
|
||||
import thaumicenergistics.api.grid.IMEEssentiaMonitor;
|
||||
import thaumicenergistics.api.storage.IAspectStack;
|
||||
import thaumicenergistics.common.ThaumicEnergistics;
|
||||
import thaumicenergistics.common.grid.EssentiaMonitor;
|
||||
@@ -22,6 +23,7 @@ import thaumicenergistics.integration.tc.EssentiaItemContainerHelper;
|
||||
import thaumicenergistics.integration.tc.EssentiaItemContainerHelper.AspectItemType;
|
||||
import appeng.api.config.Settings;
|
||||
import appeng.api.config.ViewItems;
|
||||
import appeng.api.networking.IGrid;
|
||||
import appeng.api.networking.security.BaseActionSource;
|
||||
import appeng.api.networking.security.IActionHost;
|
||||
import appeng.api.networking.security.PlayerSource;
|
||||
@@ -45,7 +47,7 @@ public class ContainerEssentiaCell
|
||||
/**
|
||||
* The ME chest the cell is stored in.
|
||||
*/
|
||||
private TileChest hostChest;
|
||||
private final TileChest hostChest;
|
||||
|
||||
/**
|
||||
* Network source representing the player who is interacting with the
|
||||
@@ -96,12 +98,12 @@ public class ContainerEssentiaCell
|
||||
// Call the super-constructor
|
||||
super( player );
|
||||
|
||||
// Get the tile entity for the chest
|
||||
this.hostChest = (TileChest)world.getTileEntity( x, y, z );
|
||||
|
||||
// Is this server side?
|
||||
if( EffectiveSide.isServerSide() )
|
||||
{
|
||||
// Get the tile entity for the chest
|
||||
this.hostChest = (TileChest)world.getTileEntity( x, y, z );
|
||||
|
||||
/*
|
||||
* Note: Casting the hostChest to an object is required to prevent the compiler
|
||||
* from seeing the soft-dependencies of AE2, such a buildcraft, which it attempts
|
||||
@@ -112,38 +114,11 @@ public class ContainerEssentiaCell
|
||||
|
||||
// Create the action source
|
||||
this.playerSource = new PlayerSource( this.player, (IActionHost)hostObject );
|
||||
|
||||
try
|
||||
{
|
||||
IMEInventoryHandler<IAEFluidStack> handler = null;
|
||||
|
||||
// Get the chest handler
|
||||
List<IMEInventoryHandler> hostCellArray = this.hostChest.getCellArray( StorageChannel.FLUIDS );
|
||||
if( hostCellArray.size() > 0 )
|
||||
{
|
||||
handler = hostCellArray.get( 0 );
|
||||
}
|
||||
|
||||
// Get the monitor
|
||||
if( handler != null )
|
||||
{
|
||||
// Create the essentia monitor
|
||||
this.monitor = new EssentiaMonitor( (IMEMonitor<IAEFluidStack>)handler, this.hostChest.getProxy().getEnergy(), this );
|
||||
|
||||
// Attach to the monitor
|
||||
this.attachToMonitor();
|
||||
}
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Request a full update from the server
|
||||
Packet_S_EssentiaCellTerminal.sendFullUpdateRequest( player );
|
||||
this.hasRequested = true;
|
||||
}
|
||||
|
||||
// Bind our inventory
|
||||
@@ -183,12 +158,54 @@ public class ContainerEssentiaCell
|
||||
return this.playerSource;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IGrid getHostGrid()
|
||||
{
|
||||
try
|
||||
{
|
||||
return this.hostChest.getActionableNode().getGrid();
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Aspect getHostSelectedAspect()
|
||||
{
|
||||
return this.tmpSelectedAspect;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IMEEssentiaMonitor getNewMonitor()
|
||||
{
|
||||
try
|
||||
{
|
||||
IMEInventoryHandler<IAEFluidStack> handler = null;
|
||||
|
||||
// Get the chest handler
|
||||
List<IMEInventoryHandler> hostCellArray = this.hostChest.getCellArray( StorageChannel.FLUIDS );
|
||||
if( hostCellArray.size() > 0 )
|
||||
{
|
||||
handler = hostCellArray.get( 0 );
|
||||
}
|
||||
|
||||
// Get the monitor
|
||||
if( handler != null )
|
||||
{
|
||||
// Create the essentia monitor
|
||||
return new EssentiaMonitor( (IMEMonitor<IAEFluidStack>)handler, this.hostChest.getProxy().getEnergy(), this );
|
||||
}
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setHostSelectedAspect( final Aspect aspect )
|
||||
{
|
||||
@@ -246,7 +263,7 @@ public class ContainerEssentiaCell
|
||||
}
|
||||
|
||||
// Send the list
|
||||
if( ( this.monitor != null ) && ( this.hostChest.isPowered() ) )
|
||||
if( this.hostChest.isPowered() )
|
||||
{
|
||||
Packet_C_EssentiaCellTerminal.sendFullList( this.player, this.repo.getAll() );
|
||||
}
|
||||
@@ -303,22 +320,16 @@ public class ContainerEssentiaCell
|
||||
@Override
|
||||
public void onContainerClosed( final EntityPlayer player )
|
||||
{
|
||||
|
||||
// Drop anything in the work slots.
|
||||
if( EffectiveSide.isServerSide() )
|
||||
{
|
||||
// Is there a monitor
|
||||
if( this.monitor != null )
|
||||
{
|
||||
// Ensure it gets detached.
|
||||
( (EssentiaMonitor)this.monitor ).detach();
|
||||
}
|
||||
|
||||
for( int i = 0; i < 2; i++ )
|
||||
{
|
||||
this.player.dropPlayerItemWithRandomChoice( ( (Slot)this.inventorySlots.get( i ) ).getStack(), false );
|
||||
}
|
||||
}
|
||||
|
||||
// Call super
|
||||
super.onContainerClosed( player );
|
||||
}
|
||||
}
|
||||
+106
-92
@@ -1,8 +1,6 @@
|
||||
package thaumicenergistics.common.container;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import javax.annotation.Nullable;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
@@ -30,6 +28,7 @@ import thaumicenergistics.integration.tc.EssentiaItemContainerHelper;
|
||||
import thaumicenergistics.integration.tc.EssentiaItemContainerHelper.AspectItemType;
|
||||
import appeng.api.config.Actionable;
|
||||
import appeng.api.config.SecurityPermissions;
|
||||
import appeng.api.networking.IGrid;
|
||||
import appeng.api.networking.IGridNode;
|
||||
import appeng.api.networking.security.BaseActionSource;
|
||||
import appeng.api.networking.security.ISecurityGrid;
|
||||
@@ -134,12 +133,6 @@ public abstract class ContainerEssentiaCellTerminalBase
|
||||
*/
|
||||
private Slot outputSlot;
|
||||
|
||||
/**
|
||||
* Holds a list of changes sent to the gui before the
|
||||
* full list is sent.
|
||||
*/
|
||||
private List<IAspectStack> pendingChanges = new ArrayList<IAspectStack>();
|
||||
|
||||
/**
|
||||
* The aspect the user has selected.
|
||||
*/
|
||||
@@ -168,12 +161,7 @@ public abstract class ContainerEssentiaCellTerminalBase
|
||||
/**
|
||||
* Essentia network monitor
|
||||
*/
|
||||
protected IMEEssentiaMonitor monitor;
|
||||
|
||||
/**
|
||||
* Set to true once a full list request is sent to the server.
|
||||
*/
|
||||
protected boolean hasRequested = false;
|
||||
private IMEEssentiaMonitor essentiaMonitor;
|
||||
|
||||
/**
|
||||
* Create the container and register the owner
|
||||
@@ -189,15 +177,47 @@ public abstract class ContainerEssentiaCellTerminalBase
|
||||
// Set the sound time
|
||||
this.lastSoundPlaytime = System.currentTimeMillis();
|
||||
}
|
||||
else
|
||||
{
|
||||
this.hasRequested = true;
|
||||
}
|
||||
|
||||
// Create the reop
|
||||
this.repo = new EssentiaRepo();
|
||||
}
|
||||
|
||||
/**
|
||||
* Attach this container to the Essentia monitor
|
||||
*
|
||||
* @param essentiaMonitor
|
||||
*/
|
||||
private boolean attachToMonitor( final IMEEssentiaMonitor eMonitor )
|
||||
{
|
||||
if( ( EffectiveSide.isServerSide() ) && ( eMonitor != null ) )
|
||||
{
|
||||
// Get the grid
|
||||
IGrid grid = this.getHostGrid();
|
||||
if( grid == null )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Detach from any current monitor
|
||||
if( this.essentiaMonitor != null )
|
||||
{
|
||||
this.detachFromMonitor();
|
||||
}
|
||||
|
||||
// Set the monitor
|
||||
this.essentiaMonitor = eMonitor;
|
||||
|
||||
// Listen
|
||||
this.essentiaMonitor.addListener( this, grid.hashCode() );
|
||||
|
||||
// Update our cached list of aspects
|
||||
this.repo.copyFrom( this.essentiaMonitor.getEssentiaList() );
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the specified stack can be merged into the output slot.
|
||||
*
|
||||
@@ -319,7 +339,7 @@ public abstract class ContainerEssentiaCellTerminalBase
|
||||
int proposedDrainAmount = (int)containerEssentia.getStackSize();
|
||||
|
||||
// Do a network injection
|
||||
long rejectedAmount = this.monitor.injectEssentia( containerEssentia.getAspect(), proposedDrainAmount, mode, actionSource,
|
||||
long rejectedAmount = this.essentiaMonitor.injectEssentia( containerEssentia.getAspect(), proposedDrainAmount, mode, actionSource,
|
||||
true );
|
||||
|
||||
// Was any rejected?
|
||||
@@ -376,7 +396,7 @@ public abstract class ContainerEssentiaCellTerminalBase
|
||||
}
|
||||
|
||||
// Do an extraction from the network
|
||||
long extractedAmount = this.monitor.extractEssentia( withAspect, containerCapacity, mode, actionSource, true );
|
||||
long extractedAmount = this.essentiaMonitor.extractEssentia( withAspect, containerCapacity, mode, actionSource, true );
|
||||
|
||||
// Was anything extracted?
|
||||
if( extractedAmount <= 0 )
|
||||
@@ -400,21 +420,6 @@ public abstract class ContainerEssentiaCellTerminalBase
|
||||
new AspectStack( withAspect, proposedFillAmount ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Attach this container to the Essentia monitor
|
||||
*/
|
||||
protected void attachToMonitor()
|
||||
{
|
||||
if( ( EffectiveSide.isServerSide() ) && ( this.monitor != null ) )
|
||||
{
|
||||
this.monitor.addListener( this, this.monitor.hashCode() );
|
||||
|
||||
// Update our cached list of aspects
|
||||
this.repo.copyFrom( this.monitor.getEssentiaList() );
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Binds the container to the specified inventory and the players inventory.
|
||||
*
|
||||
@@ -448,13 +453,13 @@ public abstract class ContainerEssentiaCellTerminalBase
|
||||
{
|
||||
if( EffectiveSide.isServerSide() )
|
||||
{
|
||||
if( this.monitor != null )
|
||||
if( this.essentiaMonitor != null )
|
||||
{
|
||||
// Stop listening
|
||||
this.monitor.removeListener( this );
|
||||
this.essentiaMonitor.removeListener( this );
|
||||
|
||||
// Null the monitor
|
||||
this.monitor = null;
|
||||
this.essentiaMonitor = null;
|
||||
|
||||
// Clear the repo
|
||||
this.repo.clear();
|
||||
@@ -474,6 +479,14 @@ public abstract class ContainerEssentiaCellTerminalBase
|
||||
*/
|
||||
protected abstract BaseActionSource getActionSource();
|
||||
|
||||
/**
|
||||
* Gets the grid for the host.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Nullable
|
||||
protected abstract IGrid getHostGrid();
|
||||
|
||||
/**
|
||||
* Return the selected aspect stored in the host.
|
||||
*
|
||||
@@ -482,6 +495,14 @@ public abstract class ContainerEssentiaCellTerminalBase
|
||||
@Nullable
|
||||
protected abstract Aspect getHostSelectedAspect();
|
||||
|
||||
/**
|
||||
* Attempts to get a new essentia monitor.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Nullable
|
||||
protected abstract IMEEssentiaMonitor getNewMonitor();
|
||||
|
||||
/**
|
||||
* Sets the hosts selected aspect.
|
||||
*
|
||||
@@ -503,7 +524,7 @@ public abstract class ContainerEssentiaCellTerminalBase
|
||||
protected ItemStack transferEssentia( final ItemStack stack, final Aspect aspect, final BaseActionSource actionSource, final Actionable mode )
|
||||
{
|
||||
// Ensure the stack & monitor are not null
|
||||
if( ( stack == null ) || ( this.monitor == null ) )
|
||||
if( ( stack == null ) || ( this.essentiaMonitor == null ) )
|
||||
{
|
||||
return stack;
|
||||
}
|
||||
@@ -666,16 +687,35 @@ public abstract class ContainerEssentiaCellTerminalBase
|
||||
// Call super
|
||||
super.detectAndSendChanges();
|
||||
|
||||
// Inc tick tracker
|
||||
this.tickCounter += 1;
|
||||
|
||||
if( this.tickCounter > ContainerEssentiaCellTerminalBase.WORK_TICK_RATE )
|
||||
if( EffectiveSide.isClientSide() )
|
||||
{
|
||||
// Do work
|
||||
this.doWork( this.tickCounter );
|
||||
return;
|
||||
}
|
||||
|
||||
// Is there a monitor?
|
||||
if( this.essentiaMonitor != null )
|
||||
{
|
||||
// Inc tick tracker
|
||||
this.tickCounter += 1;
|
||||
|
||||
if( this.tickCounter > ContainerEssentiaCellTerminalBase.WORK_TICK_RATE )
|
||||
{
|
||||
// Do work
|
||||
this.doWork( this.tickCounter );
|
||||
|
||||
// Reset the tick counter
|
||||
this.tickCounter = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Attempt to attach to a monitor
|
||||
if( this.attachToMonitor( this.getNewMonitor() ) )
|
||||
{
|
||||
// Send update
|
||||
this.onClientRequestFullUpdate();
|
||||
}
|
||||
|
||||
// Reset the tick counter
|
||||
this.tickCounter = 0;
|
||||
}
|
||||
|
||||
// Compare selected aspects
|
||||
@@ -727,23 +767,26 @@ public abstract class ContainerEssentiaCellTerminalBase
|
||||
* from the AE monitor?
|
||||
*/
|
||||
@Override
|
||||
public boolean isValid( final Object verificationToken )
|
||||
public final boolean isValid( final Object verificationToken )
|
||||
{
|
||||
if( this.monitor == null )
|
||||
// Get the grid
|
||||
IGrid grid = this.getHostGrid();
|
||||
if( grid != null )
|
||||
{
|
||||
return false;
|
||||
// Do the hash codes match?
|
||||
if( grid.hashCode() == (Integer)verificationToken )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// Do the hash codes match?
|
||||
if( this.monitor.hashCode() == (Integer)verificationToken )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// No longer valid
|
||||
this.monitor = null;
|
||||
// No longer valid (Do not call detach, this will happen automatically)
|
||||
this.essentiaMonitor = null;
|
||||
this.repo.clear();
|
||||
|
||||
// Update the client
|
||||
this.onClientRequestFullUpdate();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -781,8 +824,10 @@ public abstract class ContainerEssentiaCellTerminalBase
|
||||
@Override
|
||||
public void onContainerClosed( final EntityPlayer player )
|
||||
{
|
||||
// Call super
|
||||
super.onContainerClosed( player );
|
||||
|
||||
// Detach from the monitor
|
||||
this.detachFromMonitor();
|
||||
}
|
||||
|
||||
@@ -865,60 +910,29 @@ public abstract class ContainerEssentiaCellTerminalBase
|
||||
{
|
||||
// Set the aspect list
|
||||
this.repo.copyFrom( aspectStackList );
|
||||
|
||||
// Check pending changes
|
||||
if( ( aspectStackList != null ) && ( !this.pendingChanges.isEmpty() ) )
|
||||
{
|
||||
// Update list with pending changes
|
||||
for( int index = 0; index < this.pendingChanges.size(); index++ )
|
||||
{
|
||||
this.onReceivedAspectListChange( this.pendingChanges.get( index ) );
|
||||
}
|
||||
|
||||
// Clear pending
|
||||
this.pendingChanges.clear();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by the gui when a change arrives.
|
||||
*
|
||||
* @param change
|
||||
* @return True if the repo is prepared to be displayed.
|
||||
*/
|
||||
public boolean onReceivedAspectListChange( final IAspectStack change )
|
||||
public void onReceivedAspectListChange( final IAspectStack change )
|
||||
{
|
||||
// Ignored server side
|
||||
if( EffectiveSide.isServerSide() )
|
||||
{
|
||||
return false;
|
||||
return;
|
||||
}
|
||||
|
||||
// Ensure the change is not null
|
||||
if( change == null )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Have we requested the full list yet?
|
||||
if( !this.hasRequested )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Has the full list been received?
|
||||
if( this.repo.isEmpty() )
|
||||
{
|
||||
// Not yet received full list, add to pending
|
||||
this.pendingChanges.add( change );
|
||||
return false;
|
||||
return;
|
||||
}
|
||||
|
||||
// Post the change
|
||||
this.repo.postChange( change );
|
||||
|
||||
// The GUI can update if there are no pending changes
|
||||
return this.pendingChanges.isEmpty();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -5,6 +5,7 @@ import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import thaumcraft.api.aspects.Aspect;
|
||||
import thaumicenergistics.api.grid.ICraftingIssuerHost;
|
||||
import thaumicenergistics.api.grid.IMEEssentiaMonitor;
|
||||
import thaumicenergistics.common.ThEGuiHandler;
|
||||
import thaumicenergistics.common.items.ItemCraftingAspect;
|
||||
import thaumicenergistics.common.network.packet.client.Packet_C_EssentiaCellTerminal;
|
||||
@@ -14,6 +15,7 @@ import thaumicenergistics.common.storage.AspectStackComparator.AspectStackCompar
|
||||
import thaumicenergistics.common.utils.EffectiveSide;
|
||||
import appeng.api.AEApi;
|
||||
import appeng.api.config.ViewItems;
|
||||
import appeng.api.networking.IGrid;
|
||||
import appeng.api.networking.security.BaseActionSource;
|
||||
import appeng.api.networking.security.PlayerSource;
|
||||
import appeng.api.storage.data.IAEItemStack;
|
||||
@@ -32,13 +34,14 @@ public class ContainerEssentiaTerminal
|
||||
/**
|
||||
* The terminal this is associated with.
|
||||
*/
|
||||
private PartEssentiaTerminal terminal = null;
|
||||
@Nonnull
|
||||
private final PartEssentiaTerminal terminal;
|
||||
|
||||
/**
|
||||
* Network source representing the player who is interacting with the
|
||||
* container.
|
||||
*/
|
||||
private PlayerSource playerSource = null;
|
||||
private final PlayerSource playerSource;
|
||||
|
||||
/**
|
||||
* Creates the container
|
||||
@@ -62,12 +65,6 @@ public class ContainerEssentiaTerminal
|
||||
// Is this server side?
|
||||
if( EffectiveSide.isServerSide() )
|
||||
{
|
||||
// Get the monitor
|
||||
this.monitor = terminal.getGridBlock().getEssentiaMonitor();
|
||||
|
||||
// Attach to the monitor
|
||||
this.attachToMonitor();
|
||||
|
||||
// Add this container to the terminal's list
|
||||
terminal.addListener( this );
|
||||
}
|
||||
@@ -75,7 +72,6 @@ public class ContainerEssentiaTerminal
|
||||
{
|
||||
// Ask for a list update
|
||||
Packet_S_EssentiaCellTerminal.sendFullUpdateRequest( this.player );
|
||||
this.hasRequested = true;
|
||||
}
|
||||
|
||||
// Bind our inventory
|
||||
@@ -88,12 +84,31 @@ public class ContainerEssentiaTerminal
|
||||
return this.playerSource;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IGrid getHostGrid()
|
||||
{
|
||||
try
|
||||
{
|
||||
return this.terminal.getGridBlock().getGrid();
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Aspect getHostSelectedAspect()
|
||||
{
|
||||
return this.terminal.selectedAspect;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IMEEssentiaMonitor getNewMonitor()
|
||||
{
|
||||
return this.terminal.getGridBlock().getEssentiaMonitor();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setHostSelectedAspect( final Aspect aspect )
|
||||
{
|
||||
@@ -103,7 +118,7 @@ public class ContainerEssentiaTerminal
|
||||
@Override
|
||||
public boolean canInteractWith( final EntityPlayer player )
|
||||
{
|
||||
return this.terminal.isUseableByPlayer( player );
|
||||
return this.terminal.isPartUseableByPlayer( player );
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -168,10 +183,7 @@ public class ContainerEssentiaTerminal
|
||||
this.onModeChanged( this.terminal.getSortingMode(), this.terminal.getViewMode() );
|
||||
|
||||
// Send the aspect list
|
||||
if( this.monitor != null )
|
||||
{
|
||||
Packet_C_EssentiaCellTerminal.sendFullList( this.player, this.repo.getAll() );
|
||||
}
|
||||
Packet_C_EssentiaCellTerminal.sendFullList( this.player, this.repo.getAll() );
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+79
-116
@@ -3,6 +3,7 @@ package thaumicenergistics.common.container;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
import net.minecraft.inventory.ICrafting;
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.inventory.Slot;
|
||||
@@ -72,24 +73,24 @@ public class ContainerKnowledgeInscriber
|
||||
CRAFTING_SLOT_Y = 90, CRAFTING_ROWS = 3, CRAFTING_COLS = 3,
|
||||
CRAFTING_SLOT_SPACING = 18, CRAFTING_RESULT_SLOT = CRAFTING_MATRIX_SLOT + ( CRAFTING_ROWS * CRAFTING_COLS );
|
||||
|
||||
/**
|
||||
* Handles interaction with the knowledge core.
|
||||
*/
|
||||
private final HandlerKnowledgeCore kCoreHandler;
|
||||
|
||||
/**
|
||||
* Slots
|
||||
*/
|
||||
private SlotRestrictive kCoreSlot;
|
||||
private final SlotRestrictive kCoreSlot;
|
||||
private final SlotFake resultSlot;
|
||||
private SlotInaccessible[] patternSlots = new SlotInaccessible[MAXIMUM_PATTERNS];
|
||||
private SlotFakeCraftingMatrix[] craftingSlots = new SlotFakeCraftingMatrix[CRAFTING_ROWS * CRAFTING_COLS];
|
||||
private SlotFake resultSlot;
|
||||
|
||||
/**
|
||||
* Slot index ranges.
|
||||
*/
|
||||
private int patternSlot_first, patternSlot_last, craftingSlot_first, craftingSlot_last;
|
||||
|
||||
/**
|
||||
* Handles interaction with the knowledge core.
|
||||
*/
|
||||
private HandlerKnowledgeCore kCoreHandler;
|
||||
|
||||
/**
|
||||
* Player using the inscriber
|
||||
*/
|
||||
@@ -100,11 +101,6 @@ public class ContainerKnowledgeInscriber
|
||||
*/
|
||||
private IArcaneRecipe activeRecipe = null;
|
||||
|
||||
/**
|
||||
* Tracks changes to the core slot.
|
||||
*/
|
||||
private boolean hadCoreLastCheck = false;
|
||||
|
||||
/**
|
||||
* Inscriber tile entity.
|
||||
*/
|
||||
@@ -145,26 +141,8 @@ public class ContainerKnowledgeInscriber
|
||||
this.resultSlot = new SlotFake( this.internalInventory, CRAFTING_RESULT_SLOT, 116, 108 );
|
||||
this.addSlotToContainer( this.resultSlot );
|
||||
|
||||
// Perform server side only setup
|
||||
if( EffectiveSide.isServerSide() )
|
||||
{
|
||||
// Check for a kcore
|
||||
if( this.kCoreSlot.getHasStack() )
|
||||
{
|
||||
// Mark the presence of the core
|
||||
this.hadCoreLastCheck = true;
|
||||
|
||||
// Create the handler
|
||||
this.kCoreHandler = new HandlerKnowledgeCore( this.kCoreSlot.getStack() );
|
||||
}
|
||||
|
||||
// Update the patterns
|
||||
this.updatePatternSlots();
|
||||
|
||||
// Update the result
|
||||
this.onCraftMatrixChanged( this.internalInventory );
|
||||
}
|
||||
|
||||
// Create the handler
|
||||
this.kCoreHandler = new HandlerKnowledgeCore();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -177,7 +155,7 @@ public class ContainerKnowledgeInscriber
|
||||
CoreSaveState saveState;
|
||||
|
||||
// Is there a core handler?
|
||||
if( this.kCoreHandler == null )
|
||||
if( !this.kCoreHandler.hasCore() )
|
||||
{
|
||||
saveState = CoreSaveState.Disabled_MissingCore;
|
||||
}
|
||||
@@ -349,7 +327,7 @@ public class ContainerKnowledgeInscriber
|
||||
Iterator<ItemStack> iterator = null;
|
||||
|
||||
// Get the list of stored pattern results
|
||||
if( this.kCoreHandler != null )
|
||||
if( this.kCoreHandler.hasCore() )
|
||||
{
|
||||
ArrayList<ItemStack> storedResults = this.kCoreHandler.getStoredOutputs();
|
||||
iterator = storedResults.iterator();
|
||||
@@ -400,45 +378,34 @@ public class ContainerKnowledgeInscriber
|
||||
@Override
|
||||
public void detectAndSendChanges()
|
||||
{
|
||||
if( this.player instanceof EntityPlayerMP )
|
||||
{
|
||||
// Has a core changed?
|
||||
if( !this.kCoreHandler.isHandlingCore( this.kCoreSlot.getStack() ) )
|
||||
{
|
||||
if( this.kCoreSlot.getHasStack() )
|
||||
{
|
||||
// Setup the handler
|
||||
this.kCoreHandler.open( this.kCoreSlot.getStack() );
|
||||
}
|
||||
else
|
||||
{
|
||||
// Close the handler
|
||||
this.kCoreHandler.close();
|
||||
}
|
||||
|
||||
// Update the slots
|
||||
this.updatePatternSlots();
|
||||
( (EntityPlayerMP)this.player ).isChangingQuantityOnly = false;
|
||||
|
||||
// Update the save state
|
||||
this.sendSaveState( false );
|
||||
}
|
||||
}
|
||||
|
||||
// Call super
|
||||
super.detectAndSendChanges();
|
||||
|
||||
// Ignore the rest of client side
|
||||
if( EffectiveSide.isClientSide() )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Check for a kcore
|
||||
boolean hasCore = this.kCoreSlot.getHasStack();
|
||||
|
||||
// Has a core been placed or removed?
|
||||
if( hasCore != this.hadCoreLastCheck )
|
||||
{
|
||||
if( hasCore )
|
||||
{
|
||||
// Get the handler
|
||||
this.kCoreHandler = new HandlerKnowledgeCore( this.kCoreSlot.getStack() );
|
||||
}
|
||||
else
|
||||
{
|
||||
// Remove the handler
|
||||
this.kCoreHandler = null;
|
||||
}
|
||||
|
||||
// Update the slots
|
||||
this.updatePatternSlots();
|
||||
|
||||
// Update the save state
|
||||
this.sendSaveState( false );
|
||||
|
||||
// Mark the inscriber as dirty
|
||||
this.inscriber.markDirty();
|
||||
}
|
||||
|
||||
// Mark the cores presence
|
||||
this.hadCoreLastCheck = hasCore;
|
||||
|
||||
}
|
||||
|
||||
public void onClientRequestClearGrid()
|
||||
@@ -601,58 +568,54 @@ public class ContainerKnowledgeInscriber
|
||||
@Override
|
||||
public ItemStack slotClick( final int slotID, final int buttonPressed, final int flag, final EntityPlayer player )
|
||||
{
|
||||
if( EffectiveSide.isServerSide() )
|
||||
if( EffectiveSide.isClientSide() )
|
||||
{
|
||||
try
|
||||
return null;
|
||||
}
|
||||
|
||||
// Get the clicked slot
|
||||
Slot clickedSlot = this.getSlot( slotID );
|
||||
|
||||
// Get the itemstack the player is holding with the mouse
|
||||
ItemStack draggingStack = player.inventory.getItemStack();
|
||||
|
||||
// Was the clicked slot a crafting slot?
|
||||
if( ( clickedSlot.slotNumber >= this.craftingSlot_first ) && ( clickedSlot.slotNumber <= this.craftingSlot_last ) )
|
||||
{
|
||||
// Is the player holding anything?
|
||||
if( draggingStack != null )
|
||||
{
|
||||
// Get the clicked slot
|
||||
Slot clickedSlot = this.getSlot( slotID );
|
||||
ItemStack copiedStack = draggingStack.copy();
|
||||
copiedStack.stackSize = 1;
|
||||
|
||||
// Get the itemstack the player is holding with the mouse
|
||||
ItemStack draggingStack = player.inventory.getItemStack();
|
||||
|
||||
// Was the clicked slot a crafting slot?
|
||||
if( ( clickedSlot.slotNumber >= this.craftingSlot_first ) && ( clickedSlot.slotNumber <= this.craftingSlot_last ) )
|
||||
{
|
||||
// Is the player holding anything?
|
||||
if( draggingStack != null )
|
||||
{
|
||||
ItemStack copiedStack = draggingStack.copy();
|
||||
copiedStack.stackSize = 1;
|
||||
|
||||
// Place a copy of the stack into the clicked slot
|
||||
clickedSlot.putStack( copiedStack );
|
||||
}
|
||||
else
|
||||
{
|
||||
// Clear the slot
|
||||
clickedSlot.putStack( null );
|
||||
}
|
||||
|
||||
// Update the matrix
|
||||
this.onCraftMatrixChanged( clickedSlot.inventory );
|
||||
|
||||
return draggingStack;
|
||||
}
|
||||
// Was the clicked slot a pattern slot?
|
||||
else if( ( clickedSlot.slotNumber >= this.patternSlot_first ) && ( clickedSlot.slotNumber <= this.patternSlot_last ) )
|
||||
{
|
||||
// Does the slot correspond to a stored pattern?
|
||||
if( clickedSlot.getHasStack() )
|
||||
{
|
||||
// Load the pattern
|
||||
this.loadPattern( this.kCoreHandler.getPatternForItem( clickedSlot.getStack() ) );
|
||||
|
||||
// Update the matrix
|
||||
this.onCraftMatrixChanged( clickedSlot.inventory );
|
||||
}
|
||||
|
||||
return draggingStack;
|
||||
}
|
||||
// Place a copy of the stack into the clicked slot
|
||||
clickedSlot.putStack( copiedStack );
|
||||
}
|
||||
catch( Exception e )
|
||||
else
|
||||
{
|
||||
// Clear the slot
|
||||
clickedSlot.putStack( null );
|
||||
}
|
||||
|
||||
// Update the matrix
|
||||
this.onCraftMatrixChanged( clickedSlot.inventory );
|
||||
|
||||
return draggingStack;
|
||||
}
|
||||
// Was the clicked slot a pattern slot?
|
||||
else if( ( clickedSlot.slotNumber >= this.patternSlot_first ) && ( clickedSlot.slotNumber <= this.patternSlot_last ) )
|
||||
{
|
||||
// Does the slot correspond to a stored pattern?
|
||||
if( clickedSlot.getHasStack() )
|
||||
{
|
||||
// Load the pattern
|
||||
this.loadPattern( this.kCoreHandler.getPatternForItem( clickedSlot.getStack() ) );
|
||||
|
||||
// Update the matrix
|
||||
this.onCraftMatrixChanged( clickedSlot.inventory );
|
||||
}
|
||||
|
||||
return draggingStack;
|
||||
}
|
||||
|
||||
// Pass to super
|
||||
|
||||
+99
-20
@@ -35,6 +35,7 @@ import appeng.api.config.Actionable;
|
||||
import appeng.api.config.SortDir;
|
||||
import appeng.api.config.SortOrder;
|
||||
import appeng.api.config.ViewItems;
|
||||
import appeng.api.networking.IGrid;
|
||||
import appeng.api.networking.security.BaseActionSource;
|
||||
import appeng.api.networking.security.PlayerSource;
|
||||
import appeng.api.networking.storage.IBaseMonitor;
|
||||
@@ -140,17 +141,17 @@ public class ContainerPartArcaneCraftingTerminal
|
||||
*/
|
||||
private final EntityPlayer player;
|
||||
|
||||
/**
|
||||
* The AE network item monitor we are attached to.
|
||||
*/
|
||||
private final IMEMonitor<IAEItemStack> monitor;
|
||||
|
||||
/**
|
||||
* Network source representing the player who is interacting with the
|
||||
* container.
|
||||
*/
|
||||
private final PlayerSource playerSource;
|
||||
|
||||
/**
|
||||
* The AE network item monitor we are attached to.
|
||||
*/
|
||||
private IMEMonitor<IAEItemStack> monitor;
|
||||
|
||||
/**
|
||||
* Slot number of the first and last crafting slots.
|
||||
*/
|
||||
@@ -328,26 +329,51 @@ public class ContainerPartArcaneCraftingTerminal
|
||||
|
||||
}
|
||||
|
||||
// Is this server side?
|
||||
if( EffectiveSide.isServerSide() )
|
||||
{
|
||||
// Register with part
|
||||
// Register with terminal
|
||||
this.registerForUpdates();
|
||||
}
|
||||
|
||||
// Attach to the monitor
|
||||
this.attachToMonitor();
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Attempts to attach to the item monitor.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
private boolean attachToMonitor()
|
||||
{
|
||||
// Is this server side?
|
||||
if( EffectiveSide.isClientSide() )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Clear any existing
|
||||
if( this.monitor != null )
|
||||
{
|
||||
this.monitor.removeListener( this );
|
||||
}
|
||||
|
||||
// Get the grid
|
||||
IGrid grid = this.terminal.getGridBlock().getGrid();
|
||||
if( grid != null )
|
||||
{
|
||||
// Get the AE monitor
|
||||
this.monitor = terminal.getItemInventory();
|
||||
|
||||
// Did we get a monitor?
|
||||
this.monitor = this.terminal.getItemInventory();
|
||||
if( this.monitor != null )
|
||||
{
|
||||
// Register with the monitor.
|
||||
this.monitor.addListener( this, null );
|
||||
this.monitor.addListener( this, grid.hashCode() );
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
this.monitor = null;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -906,6 +932,17 @@ public class ContainerPartArcaneCraftingTerminal
|
||||
Packet_C_ArcaneCraftingTerminal.sendModeChange( this.player,
|
||||
this.cachedSortOrder, this.cachedSortDirection, this.cachedViewMode );
|
||||
}
|
||||
|
||||
// Is the monitor null?
|
||||
if( this.monitor == null )
|
||||
{
|
||||
// Attempt to re-attach
|
||||
if( this.attachToMonitor() )
|
||||
{
|
||||
// Update the client
|
||||
this.onClientRequestFullUpdate( this.player );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -944,9 +981,36 @@ public class ContainerPartArcaneCraftingTerminal
|
||||
@Override
|
||||
public boolean isValid( final Object authToken )
|
||||
{
|
||||
return true;
|
||||
if( this.monitor == null )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Get the grid
|
||||
IGrid grid = this.terminal.getGridBlock().getGrid();
|
||||
if( grid != null )
|
||||
{
|
||||
if( grid.hashCode() == (Integer)authToken )
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// Monitor no longer valid
|
||||
this.monitor = null;
|
||||
|
||||
// Update client
|
||||
this.onClientRequestFullUpdate( this.player );
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when a client is setting up the crafting grid via NEI
|
||||
*
|
||||
* @param player
|
||||
* @param gridItems
|
||||
*/
|
||||
public void onClientNEIRequestSetCraftingGrid( final EntityPlayer player, final IAEItemStack[] gridItems )
|
||||
{
|
||||
// Attempt to clear the crafting grid
|
||||
@@ -1035,8 +1099,8 @@ public class ContainerPartArcaneCraftingTerminal
|
||||
*/
|
||||
public void onClientRequestDeposit( final EntityPlayer player, final int mouseButton )
|
||||
{
|
||||
// Ensure there is a player
|
||||
if( player == null )
|
||||
// Ensure there is a player & monitor
|
||||
if( ( player == null ) || ( this.monitor == null ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -1176,8 +1240,8 @@ public class ContainerPartArcaneCraftingTerminal
|
||||
*/
|
||||
public void onClientRequestExtract( final EntityPlayer player, final IAEItemStack requestedStack, final int mouseButton, final boolean isShiftHeld )
|
||||
{
|
||||
// Ensure there is a player
|
||||
if( player == null )
|
||||
// Ensure there is a player and monitor
|
||||
if( ( player == null ) || ( this.monitor == null ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -1326,6 +1390,11 @@ public class ContainerPartArcaneCraftingTerminal
|
||||
// Send to the client
|
||||
Packet_C_ArcaneCraftingTerminal.sendAllNetworkItems( player, fullList );
|
||||
}
|
||||
else
|
||||
{
|
||||
// Send empty list
|
||||
Packet_C_ArcaneCraftingTerminal.sendAllNetworkItems( player, AEApi.instance().storage().createItemList() );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1446,6 +1515,11 @@ public class ContainerPartArcaneCraftingTerminal
|
||||
@Override
|
||||
public void postChange( final IBaseMonitor<IAEItemStack> monitor, final Iterable<IAEItemStack> changes, final BaseActionSource actionSource )
|
||||
{
|
||||
if( this.monitor == null )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for( IAEItemStack change : changes )
|
||||
{
|
||||
// Get the total amount of the item in the network
|
||||
@@ -1484,6 +1558,11 @@ public class ContainerPartArcaneCraftingTerminal
|
||||
*/
|
||||
public ItemStack requestCraftingReplenishment( final ItemStack itemStack )
|
||||
{
|
||||
if( this.monitor == null )
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
// Create the request stack
|
||||
IAEItemStack requestStack = AEApi.instance().storage().createItemStack( itemStack );
|
||||
|
||||
|
||||
@@ -96,7 +96,7 @@ public class ContainerPartEssentiaIOBus
|
||||
{
|
||||
if( this.bus != null )
|
||||
{
|
||||
return this.bus.isUseableByPlayer( player );
|
||||
return this.bus.isPartUseableByPlayer( player );
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
+1
-1
@@ -79,7 +79,7 @@ public class ContainerPartEssentiaLevelEmitter
|
||||
{
|
||||
if( this.emitter != null )
|
||||
{
|
||||
return this.emitter.isUseableByPlayer( player );
|
||||
return this.emitter.isPartUseableByPlayer( player );
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
+1
-1
@@ -86,7 +86,7 @@ public class ContainerPartEssentiaStorageBus
|
||||
{
|
||||
if( this.storageBus != null )
|
||||
{
|
||||
return this.storageBus.isUseableByPlayer( player );
|
||||
return this.storageBus.isPartUseableByPlayer( player );
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -50,7 +50,7 @@ public class ContainerPriority
|
||||
}
|
||||
else if( this.host instanceof ThEPartBase )
|
||||
{
|
||||
return ( (ThEPartBase)this.host ).isUseableByPlayer( player );
|
||||
return ( (ThEPartBase)this.host ).isPartUseableByPlayer( player );
|
||||
}
|
||||
else if( this.host instanceof TileEntity )
|
||||
{
|
||||
|
||||
+26
-12
@@ -1,10 +1,12 @@
|
||||
package thaumicenergistics.common.container;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.inventory.Slot;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import thaumcraft.api.aspects.Aspect;
|
||||
import thaumicenergistics.api.grid.ICraftingIssuerHost;
|
||||
import thaumicenergistics.api.grid.IMEEssentiaMonitor;
|
||||
import thaumicenergistics.common.ThEGuiHandler;
|
||||
import thaumicenergistics.common.ThaumicEnergistics;
|
||||
import thaumicenergistics.common.inventory.HandlerWirelessEssentiaTerminal;
|
||||
@@ -20,6 +22,7 @@ import appeng.api.AEApi;
|
||||
import appeng.api.config.Actionable;
|
||||
import appeng.api.config.Settings;
|
||||
import appeng.api.config.ViewItems;
|
||||
import appeng.api.networking.IGrid;
|
||||
import appeng.api.networking.security.BaseActionSource;
|
||||
import appeng.api.storage.data.IAEItemStack;
|
||||
import appeng.container.ContainerOpenContext;
|
||||
@@ -39,6 +42,7 @@ public class ContainerWirelessEssentiaTerminal
|
||||
/**
|
||||
* Handler used to interact with the wireless terminal.
|
||||
*/
|
||||
@Nonnull
|
||||
private final HandlerWirelessEssentiaTerminal handler;
|
||||
|
||||
private Aspect tmpSelectedAspect;
|
||||
@@ -74,7 +78,7 @@ public class ContainerWirelessEssentiaTerminal
|
||||
* @param player
|
||||
* @param handler
|
||||
*/
|
||||
public ContainerWirelessEssentiaTerminal( final EntityPlayer player, final HandlerWirelessEssentiaTerminal handler )
|
||||
public ContainerWirelessEssentiaTerminal( final EntityPlayer player, final @Nonnull HandlerWirelessEssentiaTerminal handler )
|
||||
{
|
||||
// Call super
|
||||
super( player );
|
||||
@@ -88,20 +92,11 @@ public class ContainerWirelessEssentiaTerminal
|
||||
// Set the handler
|
||||
this.handler = handler;
|
||||
|
||||
// Server side?
|
||||
if( EffectiveSide.isServerSide() )
|
||||
{
|
||||
// Set the monitor
|
||||
this.monitor = this.handler.getEssentiaMonitor();
|
||||
|
||||
// Attach to the monitor
|
||||
this.attachToMonitor();
|
||||
}
|
||||
else
|
||||
// Client side?
|
||||
if( EffectiveSide.isClientSide() )
|
||||
{
|
||||
// Request a full update from the server
|
||||
Packet_S_EssentiaCellTerminal.sendFullUpdateRequest( player );
|
||||
this.hasRequested = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -111,12 +106,31 @@ public class ContainerWirelessEssentiaTerminal
|
||||
return this.handler.getActionHost();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IGrid getHostGrid()
|
||||
{
|
||||
try
|
||||
{
|
||||
return this.handler.getActionableNode().getGrid();
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Aspect getHostSelectedAspect()
|
||||
{
|
||||
return this.tmpSelectedAspect;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IMEEssentiaMonitor getNewMonitor()
|
||||
{
|
||||
return this.handler.getEssentiaMonitor();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void setHostSelectedAspect( final Aspect aspect )
|
||||
{
|
||||
|
||||
@@ -6,10 +6,7 @@ import thaumcraft.api.aspects.Aspect;
|
||||
import thaumcraft.api.aspects.AspectList;
|
||||
import thaumcraft.api.research.ResearchPage;
|
||||
import thaumicenergistics.api.ThEApi;
|
||||
import thaumicenergistics.common.registries.AEPartsEnum;
|
||||
import thaumicenergistics.common.registries.FeatureRegistry;
|
||||
import thaumicenergistics.common.registries.RecipeRegistry;
|
||||
import thaumicenergistics.common.registries.ResearchRegistry;
|
||||
import thaumicenergistics.common.registries.*;
|
||||
import thaumicenergistics.common.registries.ResearchRegistry.ResearchTypes;
|
||||
import appeng.core.AEConfig;
|
||||
import appeng.core.features.AEFeature;
|
||||
@@ -37,11 +34,8 @@ public class FeatureACT
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void registerCrafting()
|
||||
protected void registerCrafting( final CommonDependantItems cdi )
|
||||
{
|
||||
// Common items
|
||||
CommonDependantItems cdi = FeatureRegistry.instance().getCommonItems();
|
||||
|
||||
// My items
|
||||
ItemStack ArcaneCraftingTerminal = ThEApi.instance().parts().ArcaneCrafting_Terminal.getStack();
|
||||
|
||||
@@ -60,7 +54,8 @@ public class FeatureACT
|
||||
Object[] actRecipe = new Object[] { cdi.METerminal, cdi.ArcaneWorkTable, cdi.CalculationProcessor };
|
||||
|
||||
// Register
|
||||
RecipeRegistry.PART_ARCANE_TERMINAL = ThaumcraftApi.addShapelessArcaneCraftingRecipe( ResearchRegistry.ResearchTypes.ARCANE_TERMINAL.getKey(),
|
||||
RecipeRegistry.PART_ARCANE_TERMINAL = ThaumcraftApi.addShapelessArcaneCraftingRecipe(
|
||||
ResearchRegistry.ResearchTypes.ARCANE_TERMINAL.getKey(),
|
||||
ArcaneCraftingTerminal, actAspectList, actRecipe );
|
||||
}
|
||||
|
||||
|
||||
@@ -44,11 +44,8 @@ public class FeatureAutocrafting_Arcane
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void registerCrafting()
|
||||
protected void registerCrafting( final CommonDependantItems cdi )
|
||||
{
|
||||
// Common items
|
||||
CommonDependantItems cdi = FeatureRegistry.instance().getCommonItems();
|
||||
|
||||
// Thaumcraft items
|
||||
ItemStack CraftingScepter = VisCraftingHelper.INSTANCE.getCraftingScepter();
|
||||
|
||||
|
||||
@@ -36,11 +36,8 @@ public class FeatureAutocrafting_Essentia
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void registerCrafting()
|
||||
protected void registerCrafting( final CommonDependantItems cdi )
|
||||
{
|
||||
// Common items
|
||||
CommonDependantItems cdi = FeatureRegistry.instance().getCommonItems();
|
||||
|
||||
// My items
|
||||
ItemStack dpeStack = ThEApi.instance().blocks().DistillationPatternEncoder.getStack();
|
||||
|
||||
|
||||
@@ -15,9 +15,7 @@ import thaumcraft.api.research.ResearchPage;
|
||||
import thaumcraft.common.config.Config;
|
||||
import thaumicenergistics.api.IThEItems;
|
||||
import thaumicenergistics.api.ThEApi;
|
||||
import thaumicenergistics.common.registries.FeatureRegistry;
|
||||
import thaumicenergistics.common.registries.RecipeRegistry;
|
||||
import thaumicenergistics.common.registries.ResearchRegistry;
|
||||
import thaumicenergistics.common.registries.*;
|
||||
import thaumicenergistics.common.registries.ResearchRegistry.PseudoResearchTypes;
|
||||
import thaumicenergistics.common.registries.ResearchRegistry.ResearchTypes;
|
||||
import appeng.core.AEConfig;
|
||||
@@ -78,11 +76,8 @@ public class FeatureCells
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void registerCrafting()
|
||||
protected void registerCrafting( final CommonDependantItems cdi )
|
||||
{
|
||||
// Common items
|
||||
CommonDependantItems cdi = FeatureRegistry.instance().getCommonItems();
|
||||
|
||||
// My items
|
||||
IThEItems theItems = ThEApi.instance().items();
|
||||
ItemStack EssentiaStorageComponent_1k = theItems.EssentiaStorageComponent_1k.getStack();
|
||||
|
||||
@@ -8,9 +8,7 @@ import thaumcraft.api.aspects.AspectList;
|
||||
import thaumcraft.api.research.ResearchPage;
|
||||
import thaumicenergistics.api.ThEApi;
|
||||
import thaumicenergistics.common.items.ItemMaterial;
|
||||
import thaumicenergistics.common.registries.FeatureRegistry;
|
||||
import thaumicenergistics.common.registries.RecipeRegistry;
|
||||
import thaumicenergistics.common.registries.ResearchRegistry;
|
||||
import thaumicenergistics.common.registries.*;
|
||||
import thaumicenergistics.common.registries.ResearchRegistry.PseudoResearchTypes;
|
||||
import thaumicenergistics.common.registries.ResearchRegistry.ResearchTypes;
|
||||
|
||||
@@ -31,12 +29,8 @@ public class FeatureConversionCores
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void registerCrafting()
|
||||
protected void registerCrafting( final CommonDependantItems cdi )
|
||||
{
|
||||
|
||||
// Common items
|
||||
CommonDependantItems cdi = FeatureRegistry.instance().getCommonItems();
|
||||
|
||||
// My items
|
||||
ItemStack DiffusionCore = ThEApi.instance().items().DiffusionCore.getStack();
|
||||
ItemStack CoalescenceCore = ThEApi.instance().items().CoalescenceCore.getStack();
|
||||
|
||||
@@ -8,10 +8,7 @@ import thaumcraft.api.aspects.Aspect;
|
||||
import thaumcraft.api.aspects.AspectList;
|
||||
import thaumcraft.api.research.ResearchPage;
|
||||
import thaumicenergistics.api.ThEApi;
|
||||
import thaumicenergistics.common.registries.AEPartsEnum;
|
||||
import thaumicenergistics.common.registries.FeatureRegistry;
|
||||
import thaumicenergistics.common.registries.RecipeRegistry;
|
||||
import thaumicenergistics.common.registries.ResearchRegistry;
|
||||
import thaumicenergistics.common.registries.*;
|
||||
import thaumicenergistics.common.registries.ResearchRegistry.PseudoResearchTypes;
|
||||
import thaumicenergistics.common.registries.ResearchRegistry.ResearchTypes;
|
||||
import appeng.core.AEConfig;
|
||||
@@ -39,11 +36,8 @@ public class FeatureEssentiaIOBuses
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void registerCrafting()
|
||||
protected void registerCrafting( final CommonDependantItems cdi )
|
||||
{
|
||||
// Common items
|
||||
CommonDependantItems cdi = FeatureRegistry.instance().getCommonItems();
|
||||
|
||||
// My items
|
||||
ItemStack DiffusionCore = ThEApi.instance().items().DiffusionCore.getStack();
|
||||
ItemStack CoalescenceCore = ThEApi.instance().items().CoalescenceCore.getStack();
|
||||
|
||||
@@ -39,11 +39,8 @@ public class FeatureEssentiaMonitoring
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void registerCrafting()
|
||||
protected void registerCrafting( final CommonDependantItems cdi )
|
||||
{
|
||||
// Common items
|
||||
CommonDependantItems cdi = FeatureRegistry.instance().getCommonItems();
|
||||
|
||||
// My items
|
||||
IThEItems theItems = ThEApi.instance().items();
|
||||
IThEParts theParts = ThEApi.instance().parts();
|
||||
|
||||
@@ -6,10 +6,7 @@ import thaumcraft.api.aspects.Aspect;
|
||||
import thaumcraft.api.aspects.AspectList;
|
||||
import thaumcraft.api.research.ResearchPage;
|
||||
import thaumicenergistics.api.ThEApi;
|
||||
import thaumicenergistics.common.registries.BlockEnum;
|
||||
import thaumicenergistics.common.registries.FeatureRegistry;
|
||||
import thaumicenergistics.common.registries.RecipeRegistry;
|
||||
import thaumicenergistics.common.registries.ResearchRegistry;
|
||||
import thaumicenergistics.common.registries.*;
|
||||
import thaumicenergistics.common.registries.ResearchRegistry.ResearchTypes;
|
||||
|
||||
public class FeatureEssentiaProvider
|
||||
@@ -34,12 +31,8 @@ public class FeatureEssentiaProvider
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void registerCrafting()
|
||||
protected void registerCrafting( final CommonDependantItems cdi )
|
||||
{
|
||||
|
||||
// Common items
|
||||
CommonDependantItems cdi = FeatureRegistry.instance().getCommonItems();
|
||||
|
||||
// My items
|
||||
ItemStack DiffusionCore = ThEApi.instance().items().DiffusionCore.getStack();
|
||||
ItemStack CoalescenceCore = ThEApi.instance().items().CoalescenceCore.getStack();
|
||||
|
||||
+3
-5
@@ -36,11 +36,8 @@ public class FeatureEssentiaVibrationChamber
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void registerCrafting()
|
||||
protected void registerCrafting( final CommonDependantItems cdi )
|
||||
{
|
||||
// Common items
|
||||
CommonDependantItems cdi = FeatureRegistry.instance().getCommonItems();
|
||||
|
||||
// My Items
|
||||
ItemStack EssVibrationChamber = ThEApi.instance().blocks().EssentiaVibrationChamber.getStack();
|
||||
ItemStack DiffusionCore = ThEApi.instance().items().DiffusionCore.getStack();
|
||||
@@ -54,7 +51,8 @@ public class FeatureEssentiaVibrationChamber
|
||||
|
||||
// Register Chamber
|
||||
RecipeRegistry.BLOCK_ESSENTIA_VIBRATION_CHAMBER = ThaumcraftApi.addShapelessArcaneCraftingRecipe(
|
||||
ResearchTypes.ESSENTIA_VIBRATION_CHAMBER.getKey(), EssVibrationChamber, chamberAspects, cdi.VibrationChamber, DiffusionCore, cdi.WardedJar );
|
||||
ResearchTypes.ESSENTIA_VIBRATION_CHAMBER.getKey(), EssVibrationChamber, chamberAspects, cdi.VibrationChamber, DiffusionCore,
|
||||
cdi.WardedJar );
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -9,7 +9,6 @@ import thaumcraft.api.aspects.Aspect;
|
||||
import thaumcraft.api.aspects.AspectList;
|
||||
import thaumcraft.api.research.ResearchPage;
|
||||
import thaumicenergistics.api.ThEApi;
|
||||
import thaumicenergistics.common.registries.FeatureRegistry;
|
||||
import thaumicenergistics.common.registries.RecipeRegistry;
|
||||
import thaumicenergistics.common.registries.ResearchRegistry;
|
||||
import thaumicenergistics.common.registries.ResearchRegistry.PseudoResearchTypes;
|
||||
@@ -25,11 +24,8 @@ public class FeatureGearbox
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void registerCrafting()
|
||||
protected void registerCrafting( final CommonDependantItems cdi )
|
||||
{
|
||||
// Common items
|
||||
CommonDependantItems cdi = FeatureRegistry.instance().getCommonItems();
|
||||
|
||||
// Ore dictionary items
|
||||
Object WoodGear = "gearWood";
|
||||
String IronGear = "gearIron";
|
||||
|
||||
@@ -8,10 +8,7 @@ import thaumcraft.api.aspects.AspectList;
|
||||
import thaumcraft.api.research.ResearchPage;
|
||||
import thaumcraft.common.config.Config;
|
||||
import thaumicenergistics.api.ThEApi;
|
||||
import thaumicenergistics.common.registries.BlockEnum;
|
||||
import thaumicenergistics.common.registries.FeatureRegistry;
|
||||
import thaumicenergistics.common.registries.RecipeRegistry;
|
||||
import thaumicenergistics.common.registries.ResearchRegistry;
|
||||
import thaumicenergistics.common.registries.*;
|
||||
import thaumicenergistics.common.registries.ResearchRegistry.PseudoResearchTypes;
|
||||
import thaumicenergistics.common.registries.ResearchRegistry.ResearchTypes;
|
||||
|
||||
@@ -37,11 +34,8 @@ public class FeatureInfusionProvider
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void registerCrafting()
|
||||
protected void registerCrafting( final CommonDependantItems cdi )
|
||||
{
|
||||
// Common items
|
||||
CommonDependantItems cdi = FeatureRegistry.instance().getCommonItems();
|
||||
|
||||
// My items
|
||||
ItemStack CoalescenceCore = ThEApi.instance().items().CoalescenceCore.getStack();
|
||||
ItemStack InfusionProvider = ThEApi.instance().blocks().InfusionProvider.getStack();
|
||||
|
||||
@@ -8,9 +8,7 @@ import thaumcraft.api.aspects.Aspect;
|
||||
import thaumcraft.api.aspects.AspectList;
|
||||
import thaumcraft.api.research.ResearchPage;
|
||||
import thaumicenergistics.api.ThEApi;
|
||||
import thaumicenergistics.common.registries.FeatureRegistry;
|
||||
import thaumicenergistics.common.registries.RecipeRegistry;
|
||||
import thaumicenergistics.common.registries.ResearchRegistry;
|
||||
import thaumicenergistics.common.registries.*;
|
||||
import thaumicenergistics.common.registries.ResearchRegistry.PseudoResearchTypes;
|
||||
import thaumicenergistics.common.registries.ResearchRegistry.ResearchTypes;
|
||||
import appeng.api.AEApi;
|
||||
@@ -36,7 +34,7 @@ public class FeatureQuartzDupe
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void registerCrafting()
|
||||
protected void registerCrafting( final CommonDependantItems cdi )
|
||||
{
|
||||
// Certus
|
||||
String Certus1 = "crystalCertusQuartz";
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package thaumicenergistics.common.features;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import thaumcraft.api.aspects.AspectList;
|
||||
import thaumcraft.api.research.ResearchCategories;
|
||||
@@ -58,7 +59,7 @@ public class FeatureResearchSetup
|
||||
*
|
||||
* @param featureList
|
||||
*/
|
||||
public void finalizeRegistration( final ThEFeatureBase[] featureList )
|
||||
public void finalizeRegistration( final ArrayList<ThEFeatureBase> featureList )
|
||||
{
|
||||
if( this.hasFinalizedResearch )
|
||||
{
|
||||
|
||||
@@ -0,0 +1,125 @@
|
||||
package thaumicenergistics.common.features;
|
||||
|
||||
import java.util.regex.Pattern;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraftforge.common.config.Property;
|
||||
import thaumcraft.common.config.Config;
|
||||
import thaumcraft.common.config.ConfigBlocks;
|
||||
import thaumicenergistics.api.ThEApi;
|
||||
import appeng.core.FacadeConfig;
|
||||
import cpw.mods.fml.common.registry.GameRegistry;
|
||||
import cpw.mods.fml.common.registry.GameRegistry.UniqueIdentifier;
|
||||
|
||||
public class FeatureThaumcraftFacades
|
||||
extends ThEDependencyFeatureBase
|
||||
{
|
||||
|
||||
/**
|
||||
* Ensures the blocks name is clean
|
||||
*/
|
||||
private final Pattern sanitizer;
|
||||
|
||||
public FeatureThaumcraftFacades()
|
||||
{
|
||||
// Set the pattern
|
||||
this.sanitizer = Pattern.compile( "[^a-zA-Z0-9]" );
|
||||
}
|
||||
|
||||
/**
|
||||
* Forces the specified stack to have a facade if possible.
|
||||
*
|
||||
* @param block
|
||||
* @param meta
|
||||
*/
|
||||
private void forceEnabled( final Block block, final int meta )
|
||||
{
|
||||
// Sanity check
|
||||
if( block == null )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Get the uid for the block
|
||||
UniqueIdentifier uid = GameRegistry.findUniqueIdentifierFor( block );
|
||||
if( uid == null )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Get the mod and block names
|
||||
String modName = this.sanitizer.matcher( uid.modId ).replaceAll( "" );
|
||||
String blockName = this.sanitizer.matcher( uid.name ).replaceAll( "" );
|
||||
|
||||
// Get the property
|
||||
Property prop = FacadeConfig.instance.get( modName, blockName + ( meta == 0 ? "" : "." + meta ), true );
|
||||
|
||||
// Set it to true
|
||||
prop.set( true );
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean checkConfigs()
|
||||
{
|
||||
return ThEApi.instance().config().forceTCFacades();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Object[] getItemReqs( final CommonDependantItems cdi )
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void registerCrafting( final CommonDependantItems cdi )
|
||||
{
|
||||
// Amber block
|
||||
this.forceEnabled( ConfigBlocks.blockCosmeticOpaque, 0 );
|
||||
|
||||
// Amber brick
|
||||
this.forceEnabled( ConfigBlocks.blockCosmeticOpaque, 1 );
|
||||
|
||||
// Warded glass
|
||||
if( Config.allowMirrors )
|
||||
{
|
||||
this.forceEnabled( ConfigBlocks.blockCosmeticOpaque, 2 );
|
||||
}
|
||||
|
||||
// Obsidian tile
|
||||
this.forceEnabled( ConfigBlocks.blockCosmeticSolid, 1 );
|
||||
|
||||
// Thaumium block
|
||||
this.forceEnabled( ConfigBlocks.blockCosmeticSolid, 4 );
|
||||
|
||||
// Tallow block
|
||||
this.forceEnabled( ConfigBlocks.blockCosmeticSolid, 5 );
|
||||
|
||||
// Arcane stone block
|
||||
this.forceEnabled( ConfigBlocks.blockCosmeticSolid, 6 );
|
||||
|
||||
// Arcane stone brick
|
||||
this.forceEnabled( ConfigBlocks.blockCosmeticSolid, 7 );
|
||||
|
||||
// Ancient stone
|
||||
this.forceEnabled( ConfigBlocks.blockCosmeticSolid, 11 );
|
||||
|
||||
// Ancient rock
|
||||
this.forceEnabled( ConfigBlocks.blockCosmeticSolid, 12 );
|
||||
|
||||
// Crusted stone
|
||||
this.forceEnabled( ConfigBlocks.blockCosmeticSolid, 14 );
|
||||
|
||||
// Greatwood planks
|
||||
this.forceEnabled( ConfigBlocks.blockWoodenDevice, 6 );
|
||||
|
||||
// Silverwood planks
|
||||
this.forceEnabled( ConfigBlocks.blockWoodenDevice, 7 );
|
||||
|
||||
// Crusted taint
|
||||
this.forceEnabled( ConfigBlocks.blockTaint, 0 );
|
||||
|
||||
// Flesh block :<
|
||||
this.forceEnabled( ConfigBlocks.blockTaint, 2 );
|
||||
}
|
||||
|
||||
}
|
||||
@@ -7,10 +7,7 @@ import thaumcraft.api.aspects.Aspect;
|
||||
import thaumcraft.api.aspects.AspectList;
|
||||
import thaumcraft.api.research.ResearchPage;
|
||||
import thaumicenergistics.api.ThEApi;
|
||||
import thaumicenergistics.common.registries.AEPartsEnum;
|
||||
import thaumicenergistics.common.registries.FeatureRegistry;
|
||||
import thaumicenergistics.common.registries.RecipeRegistry;
|
||||
import thaumicenergistics.common.registries.ResearchRegistry;
|
||||
import thaumicenergistics.common.registries.*;
|
||||
import thaumicenergistics.common.registries.ResearchRegistry.PseudoResearchTypes;
|
||||
import thaumicenergistics.common.registries.ResearchRegistry.ResearchTypes;
|
||||
import appeng.core.AEConfig;
|
||||
@@ -38,11 +35,8 @@ public class FeatureVisRelayInterface
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void registerCrafting()
|
||||
protected void registerCrafting( final CommonDependantItems cdi )
|
||||
{
|
||||
// Common items
|
||||
CommonDependantItems cdi = FeatureRegistry.instance().getCommonItems();
|
||||
|
||||
// My items
|
||||
ItemStack VisInterface = ThEApi.instance().parts().VisRelay_Interface.getStack();
|
||||
|
||||
@@ -54,7 +48,8 @@ public class FeatureVisRelayInterface
|
||||
visInterfaceAspectList.add( Aspect.FIRE, 2 );
|
||||
visInterfaceAspectList.add( Aspect.ORDER, 2 );
|
||||
visInterfaceAspectList.add( Aspect.WATER, 2 );
|
||||
RecipeRegistry.PART_VIS_INTERFACE = ThaumcraftApi.addShapelessArcaneCraftingRecipe( ResearchRegistry.ResearchTypes.VIS_RELAY_INTERFACE.getKey(),
|
||||
RecipeRegistry.PART_VIS_INTERFACE = ThaumcraftApi.addShapelessArcaneCraftingRecipe(
|
||||
ResearchRegistry.ResearchTypes.VIS_RELAY_INTERFACE.getKey(),
|
||||
VisInterface, visInterfaceAspectList, cdi.BallanceShard, cdi.MEP2P );
|
||||
}
|
||||
|
||||
@@ -73,7 +68,8 @@ public class FeatureVisRelayInterface
|
||||
|
||||
// Set the pages
|
||||
ResearchPage[] vriPages = new ResearchPage[] { new ResearchPage( ResearchTypes.VIS_RELAY_INTERFACE.getPageName( 1 ) ),
|
||||
new ResearchPage( RecipeRegistry.PART_VIS_INTERFACE ), new ResearchPage( ResearchTypes.VIS_RELAY_INTERFACE.getPageName( 2 ) ),
|
||||
new ResearchPage( RecipeRegistry.PART_VIS_INTERFACE ),
|
||||
new ResearchPage( ResearchTypes.VIS_RELAY_INTERFACE.getPageName( 2 ) ),
|
||||
new ResearchPage( ResearchTypes.VIS_RELAY_INTERFACE.getPageName( 3 ) ) };
|
||||
|
||||
// Create the vis relay interface research
|
||||
|
||||
@@ -7,7 +7,6 @@ import thaumcraft.api.aspects.Aspect;
|
||||
import thaumcraft.api.aspects.AspectList;
|
||||
import thaumcraft.api.research.ResearchPage;
|
||||
import thaumicenergistics.api.ThEApi;
|
||||
import thaumicenergistics.common.registries.FeatureRegistry;
|
||||
import thaumicenergistics.common.registries.RecipeRegistry;
|
||||
import thaumicenergistics.common.registries.ResearchRegistry;
|
||||
import thaumicenergistics.common.registries.ResearchRegistry.PseudoResearchTypes;
|
||||
@@ -43,11 +42,8 @@ public class FeatureWrenchFocus
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void registerCrafting()
|
||||
protected void registerCrafting( final CommonDependantItems cdi )
|
||||
{
|
||||
// Common items
|
||||
CommonDependantItems cdi = FeatureRegistry.instance().getCommonItems();
|
||||
|
||||
// My items
|
||||
ItemStack WrenchFocus = ThEApi.instance().items().WandFocusAEWrench.getStack();
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package thaumicenergistics.common.features;
|
||||
|
||||
import thaumicenergistics.common.registries.FeatureRegistry;
|
||||
|
||||
/**
|
||||
* Defines a feature that depends on a configuration setting and/or specific
|
||||
@@ -60,12 +59,12 @@ public abstract class ThEDependencyFeatureBase
|
||||
/**
|
||||
* Evaluates the dependencies of the feature and enables it if possible.
|
||||
*
|
||||
* @param fr
|
||||
* @param cdi
|
||||
*/
|
||||
public final void evaluateDependencies( final FeatureRegistry fr )
|
||||
public final void evaluateDependencies( final CommonDependantItems cdi )
|
||||
{
|
||||
// Ask for the features config settings and required items
|
||||
this.setAvailable( this.checkConfigs() && this.checkItemReqs( this.getItemReqs( fr.getCommonItems() ) ) );
|
||||
this.setAvailable( this.checkConfigs() && this.checkItemReqs( this.getItemReqs( cdi ) ) );
|
||||
}
|
||||
|
||||
}
|
||||
@@ -34,8 +34,10 @@ public abstract class ThEFeatureBase
|
||||
|
||||
/**
|
||||
* Registers the features crafting recipes, if it has any.
|
||||
*
|
||||
* @param cdi
|
||||
*/
|
||||
protected void registerCrafting()
|
||||
protected void registerCrafting( final CommonDependantItems cdi )
|
||||
{
|
||||
}
|
||||
|
||||
@@ -94,14 +96,16 @@ public abstract class ThEFeatureBase
|
||||
|
||||
/**
|
||||
* Asks the feature to register itself.
|
||||
*
|
||||
* @param cdi
|
||||
*/
|
||||
public final void registerFeature()
|
||||
public final void registerFeature( final CommonDependantItems cdi )
|
||||
{
|
||||
// Is the feature enabled and has not yet been registered?
|
||||
if( this.isAvailable() && !this.hasRegistered )
|
||||
{
|
||||
// Register crafting recipe(s)
|
||||
this.registerCrafting();
|
||||
this.registerCrafting( cdi );
|
||||
|
||||
// Register Thaumcraft research.
|
||||
this.registerResearch();
|
||||
|
||||
@@ -276,16 +276,6 @@ public class EssentiaMonitor
|
||||
@SuppressWarnings("null")
|
||||
protected void updateCacheToMatchNetwork()
|
||||
{
|
||||
// Get the list of fluids in the network
|
||||
IItemList<IAEFluidStack> fluidStackList;
|
||||
|
||||
// Validate the list
|
||||
if( ( fluidStackList = this.fluidMonitor.getStorageList() ) == null )
|
||||
{
|
||||
// Invalid list
|
||||
return;
|
||||
}
|
||||
|
||||
// Changes made to the cache
|
||||
List<IAspectStack> aspectChanges = null;
|
||||
|
||||
@@ -307,38 +297,46 @@ public class EssentiaMonitor
|
||||
this.cache.clear();
|
||||
}
|
||||
|
||||
// Loop over all fluids
|
||||
for( IAEFluidStack fluidStack : fluidStackList )
|
||||
// Is the network powerd?
|
||||
if( this.energyGrid.isNetworkPowered() )
|
||||
{
|
||||
// Ensure the fluid is an essentia gas
|
||||
if( !( fluidStack.getFluid() instanceof GaseousEssentia ) )
|
||||
|
||||
// Get the list of fluids in the network
|
||||
IItemList<IAEFluidStack> fluidStackList = this.fluidMonitor.getStorageList();
|
||||
|
||||
// Loop over all fluids
|
||||
for( IAEFluidStack fluidStack : fluidStackList )
|
||||
{
|
||||
// Not an essentia gas.
|
||||
continue;
|
||||
}
|
||||
|
||||
// Get the gas aspect
|
||||
Aspect aspect = ( (GaseousEssentia)fluidStack.getFluid() ).getAspect();
|
||||
|
||||
// Calculate the new amount
|
||||
Long newAmount = EssentiaConversionHelper.INSTANCE.convertFluidAmountToEssentiaAmount( fluidStack.getStackSize() );
|
||||
|
||||
// Update the cache
|
||||
IAspectStack prevStack = this.cache.setAspect( aspect, newAmount, false );
|
||||
|
||||
// Are there any listeners?
|
||||
if( hasListeners )
|
||||
{
|
||||
// Remove from the previous mapping
|
||||
previousAspects.remove( aspect );
|
||||
|
||||
// Calculate the difference
|
||||
long diff = ( newAmount - ( prevStack != null ? prevStack.getStackSize() : 0 ) );
|
||||
|
||||
if( diff != 0 )
|
||||
// Ensure the fluid is an essentia gas
|
||||
if( !( fluidStack.getFluid() instanceof GaseousEssentia ) )
|
||||
{
|
||||
// Add to the changes
|
||||
aspectChanges.add( new AspectStack( aspect, diff ) );
|
||||
// Not an essentia gas.
|
||||
continue;
|
||||
}
|
||||
|
||||
// Get the gas aspect
|
||||
Aspect aspect = ( (GaseousEssentia)fluidStack.getFluid() ).getAspect();
|
||||
|
||||
// Calculate the new amount
|
||||
Long newAmount = EssentiaConversionHelper.INSTANCE.convertFluidAmountToEssentiaAmount( fluidStack.getStackSize() );
|
||||
|
||||
// Update the cache
|
||||
IAspectStack prevStack = this.cache.setAspect( aspect, newAmount, false );
|
||||
|
||||
// Are there any listeners?
|
||||
if( hasListeners )
|
||||
{
|
||||
// Remove from the previous mapping
|
||||
previousAspects.remove( aspect );
|
||||
|
||||
// Calculate the difference
|
||||
long diff = ( newAmount - ( prevStack != null ? prevStack.getStackSize() : 0 ) );
|
||||
|
||||
if( diff != 0 )
|
||||
{
|
||||
// Add to the changes
|
||||
aspectChanges.add( new AspectStack( aspect, diff ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -349,7 +347,7 @@ public class EssentiaMonitor
|
||||
// Anything left in the previous mapping is no longer present in the network
|
||||
for( Aspect aspect : previousAspects )
|
||||
{
|
||||
aspectChanges.add( new AspectStack( aspect, -this.cache.remove( aspect ).getStackSize() ) );
|
||||
aspectChanges.add( new AspectStack( aspect, -this.cache.remove( aspect ).getStackSize(), false ) );
|
||||
}
|
||||
|
||||
// Notify listeners
|
||||
|
||||
@@ -295,6 +295,12 @@ public class GridEssentiaCache
|
||||
// Call super
|
||||
super.updateCacheToMatchNetwork();
|
||||
|
||||
// Is the network powered?
|
||||
if( !this.energyGrid.isNetworkPowered() )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Get the item monitor
|
||||
IStorageGrid storage = (IStorageGrid)this.internalGrid.getCache( IStorageGrid.class );
|
||||
IMEMonitor<IAEItemStack> itemMonitor = storage.getItemInventory();
|
||||
|
||||
@@ -23,20 +23,29 @@ public class HandlerKnowledgeCore
|
||||
/**
|
||||
* Array of stored patterns.
|
||||
*/
|
||||
private ArrayList<ArcaneCraftingPattern> patterns = new ArrayList<ArcaneCraftingPattern>( HandlerKnowledgeCore.MAXIMUM_STORED_PATTERNS );
|
||||
private final ArrayList<ArcaneCraftingPattern> patterns = new ArrayList<ArcaneCraftingPattern>( MAXIMUM_STORED_PATTERNS );
|
||||
|
||||
/**
|
||||
* Knowledge core being handled.
|
||||
*/
|
||||
private ItemStack kCore;
|
||||
|
||||
/**
|
||||
* Creates a handler without a core.
|
||||
* Use open() to set the core in the future.
|
||||
*/
|
||||
public HandlerKnowledgeCore()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the handler with the specified core.
|
||||
*
|
||||
* @param kCore
|
||||
*/
|
||||
public HandlerKnowledgeCore( final ItemStack kCore )
|
||||
{
|
||||
// Set the kCore
|
||||
this.kCore = kCore;
|
||||
|
||||
// Load
|
||||
this.loadKCoreData();
|
||||
this.open( kCore );
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -66,10 +75,10 @@ public class HandlerKnowledgeCore
|
||||
NBTTagCompound data = this.getOrCreateNBT();
|
||||
|
||||
// Are there saved patterns?
|
||||
if( data.hasKey( HandlerKnowledgeCore.NBTKEY_PATTERNS ) )
|
||||
if( data.hasKey( NBTKEY_PATTERNS ) )
|
||||
{
|
||||
// Get the list
|
||||
NBTTagList plist = data.getTagList( HandlerKnowledgeCore.NBTKEY_PATTERNS, Constants.NBT.TAG_COMPOUND );
|
||||
NBTTagList plist = data.getTagList( NBTKEY_PATTERNS, Constants.NBT.TAG_COMPOUND );
|
||||
|
||||
// Read in each pattern
|
||||
for( int index = 0; index < plist.tagCount(); index++ )
|
||||
@@ -122,7 +131,7 @@ public class HandlerKnowledgeCore
|
||||
// Write the list to the data
|
||||
if( plist.tagCount() > 0 )
|
||||
{
|
||||
data.setTag( HandlerKnowledgeCore.NBTKEY_PATTERNS, plist );
|
||||
data.setTag( NBTKEY_PATTERNS, plist );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -226,6 +235,16 @@ public class HandlerKnowledgeCore
|
||||
return results;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the handler has a core.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public boolean hasCore()
|
||||
{
|
||||
return this.kCore != null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if there is a pattern stored that produces the specified
|
||||
* result.
|
||||
@@ -280,6 +299,23 @@ public class HandlerKnowledgeCore
|
||||
return( ItemStack.areItemStacksEqual( kCore, this.kCore ) && ( ItemStack.areItemStackTagsEqual( kCore, this.kCore ) ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Closes the previous core, and opens the new core.
|
||||
*
|
||||
* @param kCore
|
||||
*/
|
||||
public void open( final ItemStack kCore )
|
||||
{
|
||||
// Close any existing core
|
||||
this.close();
|
||||
|
||||
// Set the kCore
|
||||
this.kCore = kCore;
|
||||
|
||||
// Load
|
||||
this.loadKCoreData();
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes the specified pattern from the core.
|
||||
*
|
||||
|
||||
@@ -531,6 +531,12 @@ public class PartArcaneCraftingTerminal
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isUseableByPlayer( final EntityPlayer player )
|
||||
{
|
||||
return this.isPartUseableByPlayer( player );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void launchGUI( final EntityPlayer player )
|
||||
{
|
||||
|
||||
@@ -448,6 +448,56 @@ public abstract class ThEPartBase
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called the player interact with this part?
|
||||
*
|
||||
* @param player
|
||||
* @return
|
||||
*/
|
||||
public final boolean isPartUseableByPlayer( final EntityPlayer player )
|
||||
{
|
||||
// Null check host
|
||||
if( ( this.hostTile == null ) || ( this.host == null ) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Does the host still exist in the world and the player in range of it?
|
||||
if( !ThEUtils.canPlayerInteractWith( player, this.hostTile ) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Is the part still attached?
|
||||
if( this.host.getPart( this.cableSide ) != this )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Are there any permissions to check?
|
||||
if( this.interactionPermissions != null )
|
||||
{
|
||||
// Get the security grid
|
||||
ISecurityGrid sGrid = this.gridBlock.getSecurityGrid();
|
||||
if( sGrid == null )
|
||||
{
|
||||
// Security grid was unaccessible.
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check each permission
|
||||
for( SecurityPermissions perm : this.interactionPermissions )
|
||||
{
|
||||
if( !sGrid.hasPermission( player, perm ) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPowered()
|
||||
{
|
||||
@@ -497,56 +547,6 @@ public abstract class ThEPartBase
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called the player interact with this part?
|
||||
*
|
||||
* @param player
|
||||
* @return
|
||||
*/
|
||||
public final boolean isUseableByPlayer( final EntityPlayer player )
|
||||
{
|
||||
// Null check host
|
||||
if( ( this.hostTile == null ) || ( this.host == null ) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Does the host still exist in the world and the player in range of it?
|
||||
if( !ThEUtils.canPlayerInteractWith( player, this.hostTile ) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Is the part still attached?
|
||||
if( this.host.getPart( this.cableSide ) != this )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Are there any permissions to check?
|
||||
if( this.interactionPermissions != null )
|
||||
{
|
||||
// Get the security grid
|
||||
ISecurityGrid sGrid = this.gridBlock.getSecurityGrid();
|
||||
if( sGrid == null )
|
||||
{
|
||||
// Security grid was unaccessible.
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check each permission
|
||||
for( SecurityPermissions perm : this.interactionPermissions )
|
||||
{
|
||||
if( !sGrid.hasPermission( player, perm ) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Marks that the host tile needs to be saved to disk.
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package thaumicenergistics.common.registries;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import thaumicenergistics.common.features.*;
|
||||
|
||||
/**
|
||||
@@ -23,9 +24,9 @@ public class FeatureRegistry
|
||||
private final CommonDependantItems commonItems;
|
||||
|
||||
/**
|
||||
* All features in a nice compact array.
|
||||
* All features.
|
||||
*/
|
||||
private final ThEFeatureBase[] featuresList;
|
||||
private final ArrayList<ThEFeatureBase> featuresList = new ArrayList<ThEFeatureBase>( 20 );
|
||||
|
||||
/**
|
||||
* Set to true when registerFeatures() is called.
|
||||
@@ -107,6 +108,11 @@ public class FeatureRegistry
|
||||
*/
|
||||
public final FeatureAutocrafting_Essentia featureAutocrafting_Essentia;
|
||||
|
||||
/**
|
||||
* Thaumcraft facades.
|
||||
*/
|
||||
public final FeatureThaumcraftFacades featureTCFacades;
|
||||
|
||||
/**
|
||||
* Private constructor
|
||||
*/
|
||||
@@ -119,52 +125,49 @@ public class FeatureRegistry
|
||||
this.featureResearchSetup = new FeatureResearchSetup();
|
||||
|
||||
// Build autocrafting
|
||||
this.featureAutoCrafting_Arcane = new FeatureAutocrafting_Arcane();
|
||||
this.featuresList.add( this.featureAutoCrafting_Arcane = new FeatureAutocrafting_Arcane() );
|
||||
|
||||
// Build cells
|
||||
this.featureCells = new FeatureCells();
|
||||
this.featuresList.add( this.featureCells = new FeatureCells() );
|
||||
|
||||
// Build ACT
|
||||
this.featureACT = new FeatureACT();
|
||||
this.featuresList.add( this.featureACT = new FeatureACT() );
|
||||
|
||||
// Build VRI
|
||||
this.featureVRI = new FeatureVisRelayInterface();
|
||||
this.featuresList.add( this.featureVRI = new FeatureVisRelayInterface() );
|
||||
|
||||
// Build IO buses
|
||||
this.featureEssentiaIOBuses = new FeatureEssentiaIOBuses();
|
||||
this.featuresList.add( this.featureEssentiaIOBuses = new FeatureEssentiaIOBuses() );
|
||||
|
||||
// Build infusion provider
|
||||
this.featureInfusionProvider = new FeatureInfusionProvider();
|
||||
this.featuresList.add( this.featureInfusionProvider = new FeatureInfusionProvider() );
|
||||
|
||||
// Build essentia provider
|
||||
this.featureEssentiaProvider = new FeatureEssentiaProvider();
|
||||
this.featuresList.add( this.featureEssentiaProvider = new FeatureEssentiaProvider() );
|
||||
|
||||
// Build monitoring
|
||||
this.featureEssentiaMonitoring = new FeatureEssentiaMonitoring();
|
||||
this.featuresList.add( this.featureEssentiaMonitoring = new FeatureEssentiaMonitoring() );
|
||||
|
||||
// Build conversion cores
|
||||
this.featureConversionCores = new FeatureConversionCores();
|
||||
this.featuresList.add( this.featureConversionCores = new FeatureConversionCores() );
|
||||
|
||||
// Build gearboxes
|
||||
this.featureGearbox = new FeatureGearbox();
|
||||
this.featuresList.add( this.featureGearbox = new FeatureGearbox() );
|
||||
|
||||
// Build wrench focus
|
||||
this.featureWrenchFocus = new FeatureWrenchFocus();
|
||||
this.featuresList.add( this.featureWrenchFocus = new FeatureWrenchFocus() );
|
||||
|
||||
// Build quartz dupe
|
||||
this.featureQuartzDupe = new FeatureQuartzDupe();
|
||||
this.featuresList.add( this.featureQuartzDupe = new FeatureQuartzDupe() );
|
||||
|
||||
// Build essentia vibration chamber
|
||||
this.featureEssentiaVibrationChamber = new FeatureEssentiaVibrationChamber();
|
||||
this.featuresList.add( this.featureEssentiaVibrationChamber = new FeatureEssentiaVibrationChamber() );
|
||||
|
||||
// Build distillation pattern encoder
|
||||
this.featureAutocrafting_Essentia = new FeatureAutocrafting_Essentia();
|
||||
this.featuresList.add( this.featureAutocrafting_Essentia = new FeatureAutocrafting_Essentia() );
|
||||
|
||||
// Build array of features
|
||||
this.featuresList = new ThEFeatureBase[] { this.featureAutoCrafting_Arcane, this.featureCells, this.featureACT, this.featureVRI,
|
||||
this.featureEssentiaIOBuses, this.featureInfusionProvider, this.featureEssentiaProvider, this.featureEssentiaMonitoring,
|
||||
this.featureConversionCores, this.featureGearbox, this.featureWrenchFocus, this.featureQuartzDupe,
|
||||
this.featureEssentiaVibrationChamber, this.featureAutocrafting_Essentia };
|
||||
// Build TC facades
|
||||
this.featuresList.add( this.featureTCFacades = new FeatureThaumcraftFacades() );
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -214,18 +217,18 @@ public class FeatureRegistry
|
||||
if( feature instanceof ThEDependencyFeatureBase )
|
||||
{
|
||||
// Evaluate the dependencies
|
||||
( (ThEDependencyFeatureBase)feature ).evaluateDependencies( this );
|
||||
( (ThEDependencyFeatureBase)feature ).evaluateDependencies( this.commonItems );
|
||||
}
|
||||
}
|
||||
|
||||
// Start with the setup
|
||||
this.featureResearchSetup.registerFeature();
|
||||
this.featureResearchSetup.registerFeature( this.commonItems );
|
||||
|
||||
// Register each feature
|
||||
for( ThEFeatureBase feature : this.featuresList )
|
||||
{
|
||||
// Attempt to register the feature
|
||||
feature.registerFeature();
|
||||
feature.registerFeature( this.commonItems );
|
||||
}
|
||||
|
||||
// Finish the registration
|
||||
|
||||
@@ -9,11 +9,6 @@ public class TileKnowledgeInscriber
|
||||
extends ThETileInventory
|
||||
{
|
||||
public static final int KCORE_SLOT = 0;
|
||||
/*
|
||||
public static final int PATTERN_SLOT = KCORE_SLOT + 1;
|
||||
public static final int CRAFTING_MATRIX_SLOT = HandlerKnowledgeCore.MAXIMUM_STORED_PATTERNS + PATTERN_SLOT;
|
||||
public static final int CRAFTING_RESULT_SLOT = CRAFTING_MATRIX_SLOT + 9;
|
||||
*/
|
||||
|
||||
private static final String NBTKEY_KCORE = "kcore";
|
||||
|
||||
|
||||
Reference in new issue
Block a user