Compare commits
32 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| bcba2329b7 | |||
| 597e17b52b | |||
| 4b055a7f21 | |||
| 759b6daa59 | |||
| e1f03db7b3 | |||
| 72518ad977 | |||
| 21fa2718f8 | |||
| 777bec184a | |||
| b9d615c4ba | |||
| 40d339e173 | |||
| 20c1c4529a | |||
| 72399e5789 | |||
| f303c17ae0 | |||
| 26f13d4109 | |||
| 0df445c6a8 | |||
| 8c817b2f85 | |||
| 7bd8cf3f59 | |||
| 3ab6758e6c | |||
| 3dd948e4a4 | |||
| 3bb9e4df97 | |||
| d17f045339 | |||
| 5817cde56b | |||
| 45d94d4c2c | |||
| d893e52eb0 | |||
| 464a56ffc5 | |||
| 40dcf711f6 | |||
| 5dfca5eb93 | |||
| 26daaf2232 | |||
| c2022a7208 | |||
| 74c2e1fab9 | |||
| 0de7a2d83a | |||
| 517a832ac1 |
+29
-16
@@ -11,20 +11,32 @@ top of things.
|
||||
|
||||
Applied Energistics 2 crashing, have a suggestion, found a bug? Create an issue now!
|
||||
|
||||
1. Make sure your issue hasn't already been answered or fixed. Also think about whether your issue is a valid one before submitting it.
|
||||
2. Go to [the issues page](https://github.com/AppliedEnergistics/Applied-Energistics-2/issues)
|
||||
3. Click new issue
|
||||
4. Enter your Issue's title (something that summarizes your issue), and then create a detailed description of the issue.
|
||||
* To help in resolving your issues please try to include the follow if applicable:
|
||||
* The problem that is happening?
|
||||
* What was expected?
|
||||
* How to reproduce the problem?
|
||||
* Server or Single Player?
|
||||
* Mod Pack using and version?
|
||||
* Crash log (Please make sure to use [pastebin](http://pastebin.com/) for the log file)
|
||||
* Screen shots or Pictures of the problem
|
||||
1. Make sure your issue has not already been answered or fixed and you are using the latest version. Also think about whether your issue is a valid one before submitting it.
|
||||
2. Go to [the issues page](https://github.com/AppliedEnergistics/Applied-Energistics-2/issues) and click [new issue](https://github.com/AppliedEnergistics/Applied-Energistics-2/issues/new)
|
||||
3. Enter your a title of your issue (something that summarizes your issue), and then create a detailed description of the issue.
|
||||
* Do not tag it with something like `[Feature]` or `[Bug]`. When it is applicable, we will take care of it.
|
||||
* The following details are required. Not including them can cause the issue to be closed.
|
||||
* Forge version
|
||||
* AE2 version
|
||||
* Crash log, when reporting a crash (Please make sure to use [pastebin](http://pastebin.com/))
|
||||
* Do not post an excerpt of what you consider important, instead:
|
||||
* Post the full log
|
||||
* Other mods and their version, when reporting an issue between AE and another mod
|
||||
* Also consider updating these before submitting a new issue, it might be already fixed
|
||||
* A detailed description of the bug or feature
|
||||
* To further help in resolving your issues please try to include the follow if applicable:
|
||||
* What was expected?
|
||||
* How to reproduce the problem?
|
||||
* This is usually a great detail and allows us to fix it way faster
|
||||
* Server or Single Player?
|
||||
* Screen shots or Pictures of the problem
|
||||
* Mod Pack using and version?
|
||||
* Keep in mind that some mods might use an outdated version of AE2
|
||||
* If so you should report it to your modpack
|
||||
5. Click `Submit New Issue`, and wait for feedback!
|
||||
|
||||
Providing as many details as possible does help us to find and resolve the issue faster and also you getting a fixed version as fast as possible.
|
||||
|
||||
### Submitting Changes
|
||||
|
||||
* Submit an issue to the github project, assuming one does not already exist.
|
||||
@@ -55,10 +67,8 @@ Applied Energistics 2 crashing, have a suggestion, found a bug? Create an issue
|
||||
from our issue tracker. The body describes the behavior without the patch,
|
||||
why this is a problem, and how the patch fixes the problem when applied.
|
||||
````
|
||||
* Always fully test your changes. If they are large engouh in scope, then fully
|
||||
test AE2.
|
||||
* Describing the process you used to test your changes in detail will help speed
|
||||
up this process.
|
||||
* Always fully test your changes. If they are large engouh in scope, then fully test AE2.
|
||||
* Describing the process you used to test your changes in detail will help speed up this process.
|
||||
|
||||
## Making Trivial Changes
|
||||
|
||||
@@ -97,6 +107,9 @@ the styling guidelines used by AE.
|
||||
|
||||
PRs that do not conform to these standards will be rejected.
|
||||
|
||||
You can find presets for Eclipse and IntelliJ IDEA in the `codeformat` folder.
|
||||
We try to keep them up to date, but in case you find them not formatting it correctly, then please report it
|
||||
|
||||
### Whitespace
|
||||
|
||||
#### Tabs or spaces
|
||||
|
||||
@@ -54,20 +54,32 @@ You install this mod by putting it into the `minecraft/mods/` folder. It has no
|
||||
|
||||
Applied Energistics 2 crashing, have a suggestion, found a bug? Create an issue now!
|
||||
|
||||
1. Make sure your issue hasn't already been answered or fixed. Also think about whether your issue is a valid one before submitting it.
|
||||
2. Go to [the issues page](https://github.com/AppliedEnergistics/Applied-Energistics-2/issues)
|
||||
3. Click new issue
|
||||
4. Enter your Issue's title (something that summarizes your issue), and then create a detailed description of the issue.
|
||||
* To help in resolving your issues please try to include the follow if applicable:
|
||||
* The problem that is happening?
|
||||
* What was expected?
|
||||
* How to reproduce the problem?
|
||||
* Server or Single Player?
|
||||
* Mod Pack using and version?
|
||||
* Crash log (Please make sure to use [pastebin](http://pastebin.com/) for the log file)
|
||||
* Screen shots or Pictures of the problem
|
||||
1. Make sure your issue has not already been answered or fixed and you are using the latest version. Also think about whether your issue is a valid one before submitting it.
|
||||
2. Go to [the issues page](https://github.com/AppliedEnergistics/Applied-Energistics-2/issues) and click [new issue](https://github.com/AppliedEnergistics/Applied-Energistics-2/issues/new)
|
||||
3. Enter your a title of your issue (something that summarizes your issue), and then create a detailed description of the issue.
|
||||
* Do not tag it with something like `[Feature]` or `[Bug]`. When it is applicable, we will take care of it.
|
||||
* The following details are required. Not including them can cause the issue to be closed.
|
||||
* Forge version
|
||||
* AE2 version
|
||||
* Crash log, when reporting a crash (Please make sure to use [pastebin](http://pastebin.com/))
|
||||
* Do not post an excerpt of what you consider important, instead:
|
||||
* Post the full log
|
||||
* Other mods and their version, when reporting an issue between AE and another mod
|
||||
* Also consider updating these before submitting a new issue, it might be already fixed
|
||||
* A detailed description of the bug or feature
|
||||
* To further help in resolving your issues please try to include the follow if applicable:
|
||||
* What was expected?
|
||||
* How to reproduce the problem?
|
||||
* This is usually a great detail and allows us to fix it way faster
|
||||
* Server or Single Player?
|
||||
* Screen shots or Pictures of the problem
|
||||
* Mod Pack using and version?
|
||||
* Keep in mind that some mods might use an outdated version of AE2
|
||||
* If so you should report it to your modpack
|
||||
5. Click `Submit New Issue`, and wait for feedback!
|
||||
|
||||
Providing as many details as possible does help us to find and resolve the issue faster and also you getting a fixed version as fast as possible.
|
||||
|
||||
## Building
|
||||
|
||||
1. Clone this repository via
|
||||
@@ -90,6 +102,8 @@ Applied Energistics 2 crashing, have a suggestion, found a bug? Create an issue
|
||||
Before you want to add major changes, you might want to discuss them with us first, before wasting your time.
|
||||
If you are still willing to contribute to this project, you can contribute via [Pull-Request](https://help.github.com/articles/creating-a-pull-request).
|
||||
|
||||
The [guidelines for contributing](https://github.com/AppliedEnergistics/Applied-Energistics-2/blob/master/CONTRIBUTING.md) contain more detailed information about topics like the used code style and should also be considered.
|
||||
|
||||
Here are a few things to keep in mind that will help get your PR approved.
|
||||
|
||||
* A PR should be focused on content. Any PRs where the changes are only syntax will be rejected.
|
||||
@@ -127,7 +141,7 @@ Development and standard builds can be obtained [Here](http://ae2.ae-mod.info/Do
|
||||
When compiling against the AE2 API you can use gradle dependencies, just add
|
||||
|
||||
dependencies {
|
||||
compile "appeng:appliedenergistics2:rv_-_____-__:dev"
|
||||
compile "appeng:appliedenergistics2:rv_-_____-__:dev"
|
||||
}
|
||||
|
||||
or add the compile line to your existing dependencies task to your build.gradle
|
||||
|
||||
+1
-2
@@ -98,9 +98,8 @@ sourceSets {
|
||||
|
||||
resources {
|
||||
srcDir "src/main/resources/"
|
||||
include "assets/appliedenergistics2/recipes/*.recipe",
|
||||
include "assets/appliedenergistics2/recipes/**/*.recipe",
|
||||
"assets/appliedenergistics2/recipes/README.html",
|
||||
"assets/appliedenergistics2/oredict/*.oredict",
|
||||
"assets/appliedenergistics2/lang/*.lang",
|
||||
"assets/appliedenergistics2/textures/blocks/*",
|
||||
"assets/appliedenergistics2/textures/guis/*",
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
#Sat May 16 13:19:14 CEST 2015
|
||||
#Mon Aug 31 16:41:19 CEST 2015
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-all.zip
|
||||
|
||||
@@ -77,7 +77,7 @@ import appeng.transformer.annotations.Integration.Method;
|
||||
import appeng.util.Platform;
|
||||
|
||||
|
||||
@Interface( iface = "powercrystals.minefactoryreloaded.api.rednet.connectivity.IRedNetConnection", iname = "MFR" )
|
||||
@Interface( iface = "powercrystals.minefactoryreloaded.api.rednet.connectivity.IRedNetConnection", iname = IntegrationType.MFR )
|
||||
public class BlockCableBus extends AEBaseTileBlock implements IRedNetConnection
|
||||
{
|
||||
|
||||
@@ -506,7 +506,7 @@ public class BlockCableBus extends AEBaseTileBlock implements IRedNetConnection
|
||||
}
|
||||
|
||||
@Override
|
||||
@Method( iname = "MFR" )
|
||||
@Method( iname = IntegrationType.MFR )
|
||||
public RedNetConnectionType getConnectionType( World world, int x, int y, int z, ForgeDirection side )
|
||||
{
|
||||
return this.cb( world, x, y, z ).canConnectRedstone( EnumSet.allOf( ForgeDirection.class ) ) ? RedNetConnectionType.CableSingle : RedNetConnectionType.None;
|
||||
|
||||
@@ -50,19 +50,19 @@ public class ContainerInterface extends ContainerUpgradeable
|
||||
|
||||
this.myDuality = te.getInterfaceDuality();
|
||||
|
||||
for( int x = 0; x < 9; x++ )
|
||||
for( int x = 0; x < DualityInterface.NUMBER_OF_PATTERN_SLOTS; x++ )
|
||||
{
|
||||
this.addSlotToContainer( new SlotRestrictedInput( SlotRestrictedInput.PlacableItemType.ENCODED_PATTERN, this.myDuality.getPatterns(), x, 8 + 18 * x, 90 + 7, this.invPlayer ) );
|
||||
}
|
||||
|
||||
for( int x = 0; x < 8; x++ )
|
||||
for( int x = 0; x < DualityInterface.NUMBER_OF_CONFIG_SLOTS; x++ )
|
||||
{
|
||||
this.addSlotToContainer( new SlotFake( this.myDuality.getConfig(), x, 17 + 18 * x, 35 ) );
|
||||
this.addSlotToContainer( new SlotFake( this.myDuality.getConfig(), x, 8 + 18 * x, 35 ) );
|
||||
}
|
||||
|
||||
for( int x = 0; x < 8; x++ )
|
||||
for( int x = 0; x < DualityInterface.NUMBER_OF_STORAGE_SLOTS; x++ )
|
||||
{
|
||||
this.addSlotToContainer( new SlotNormal( this.myDuality.getStorage(), x, 17 + 18 * x, 35 + 18 ) );
|
||||
this.addSlotToContainer( new SlotNormal( this.myDuality.getStorage(), x, 8 + 18 * x, 35 + 18 ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ package appeng.core;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.URISyntaxException;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
@@ -29,7 +30,6 @@ import com.google.common.base.Preconditions;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
|
||||
import appeng.api.recipes.IRecipeHandler;
|
||||
import appeng.api.recipes.IRecipeLoader;
|
||||
import appeng.recipes.loader.ConfigLoader;
|
||||
import appeng.recipes.loader.JarLoader;
|
||||
import appeng.recipes.loader.RecipeResourceCopier;
|
||||
@@ -69,11 +69,7 @@ public class RecipeLoader implements Runnable
|
||||
final File readmeGenDest = new File( generatedRecipesDir, "README.html" );
|
||||
final File readmeUserDest = new File( userRecipesDir, "README.html" );
|
||||
|
||||
final IRecipeLoader oreDictLoader = new JarLoader( "/assets/appliedenergistics2/oredict/" );
|
||||
this.handler.parseRecipes( oreDictLoader, "vanilla.oredict" );
|
||||
this.handler.parseRecipes( oreDictLoader, "ae2.oredict" );
|
||||
|
||||
// generates generated and user recipes dir
|
||||
// generates generated and user recipes dir
|
||||
// will clean the generated every time to keep it up to date
|
||||
// copies over the recipes in the jar over to the generated folder
|
||||
// copies over the readmes
|
||||
|
||||
@@ -521,22 +521,6 @@ public final class Registration
|
||||
partHelper.registerNewLayer( "appeng.parts.layers.LayerIFluidHandler", "net.minecraftforge.fluids.IFluidHandler" );
|
||||
partHelper.registerNewLayer( "appeng.parts.layers.LayerITileStorageMonitorable", "appeng.api.implementations.tiles.ITileStorageMonitorable" );
|
||||
|
||||
if( IntegrationRegistry.INSTANCE.isEnabled( IntegrationType.IC2 ) )
|
||||
{
|
||||
partHelper.registerNewLayer( "appeng.parts.layers.LayerIEnergySink", "ic2.api.energy.tile.IEnergySink" );
|
||||
partHelper.registerNewLayer( "appeng.parts.layers.LayerIEnergySource", "ic2.api.energy.tile.IEnergySource" );
|
||||
}
|
||||
|
||||
if( IntegrationRegistry.INSTANCE.isEnabled( IntegrationType.RF ) )
|
||||
{
|
||||
partHelper.registerNewLayer( "appeng.parts.layers.LayerIEnergyHandler", "cofh.api.energy.IEnergyReceiver" );
|
||||
}
|
||||
|
||||
if( IntegrationRegistry.INSTANCE.isEnabled( IntegrationType.OpenComputers ) )
|
||||
{
|
||||
partHelper.registerNewLayer( "appeng.parts.layers.LayerSidedEnvironment", "li.cil.oc.api.network.SidedEnvironment" );
|
||||
}
|
||||
|
||||
FMLCommonHandler.instance().bus().register( TickHandler.INSTANCE );
|
||||
MinecraftForge.EVENT_BUS.register( TickHandler.INSTANCE );
|
||||
|
||||
|
||||
@@ -118,7 +118,7 @@ public final class GrinderRecipeManager implements IGrinderRegistry, IOreListene
|
||||
}
|
||||
|
||||
this.log( "Allow Grinding of " + Platform.getItemDisplayName( in ) + " to " + Platform.getItemDisplayName( out ) + " with optional " + Platform.getItemDisplayName( optional ) + " for " + cost );
|
||||
this.injectRecipe( new AppEngGrinderRecipe( this.copy( in ), this.copy( out ), this.copy( optional ), chance, cost ) );
|
||||
this.injectRecipe( new AppEngGrinderRecipe( this.copy( in ), this.copy( out ), this.copy( optional ), this.copy( optional2 ), chance, chance2, cost ) );
|
||||
}
|
||||
|
||||
private void injectRecipe( AppEngGrinderRecipe appEngGrinderRecipe )
|
||||
|
||||
@@ -55,9 +55,13 @@ public enum GuiText
|
||||
|
||||
inWorldFluix, inWorldPurificationCertus, inWorldPurificationNether,
|
||||
|
||||
inWorldPurificationFluix, inWorldSingularity, ChargedQuartz, OfSecondOutput,
|
||||
inWorldPurificationFluix, inWorldSingularity, ChargedQuartz,
|
||||
|
||||
NoSecondOutput, Stores, Next, SelectAmount, Lumen, Empty,
|
||||
NoSecondOutput,
|
||||
OfSecondOutput,
|
||||
MultipleOutputs,
|
||||
|
||||
Stores, Next, SelectAmount, Lumen, Empty,
|
||||
|
||||
ConfirmCrafting, Stored, Crafting, Scheduled, CraftingStatus, Cancel, ETA, ETAFormat,
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
package appeng.core.worlddata;
|
||||
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
@@ -64,13 +63,11 @@ final class DimensionData implements IWorldDimensionData, IOnWorldStartable, IOn
|
||||
private final Configuration config;
|
||||
private final List<Integer> storageCellDimensionIDs;
|
||||
|
||||
DimensionData( @Nonnull final File parentFile, @Nonnull final String configVersion )
|
||||
DimensionData( @Nonnull final Configuration parentFile )
|
||||
{
|
||||
Preconditions.checkNotNull( parentFile );
|
||||
Preconditions.checkNotNull( configVersion );
|
||||
Preconditions.checkArgument( !configVersion.isEmpty() );
|
||||
|
||||
this.config = new Configuration( parentFile, configVersion );
|
||||
this.config = parentFile;
|
||||
|
||||
final int[] storageCellIDs = this.storageCellIDsProperty().getIntList();
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
package appeng.core.worlddata;
|
||||
|
||||
|
||||
import java.io.File;
|
||||
import java.util.UUID;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
@@ -58,13 +57,11 @@ final class PlayerData implements IWorldPlayerData, IOnWorldStartable, IOnWorldS
|
||||
|
||||
private int lastPlayerID;
|
||||
|
||||
public PlayerData( @Nonnull final File configFile, @Nonnull final String configVersion )
|
||||
public PlayerData( @Nonnull final Configuration configFile )
|
||||
{
|
||||
Preconditions.checkNotNull( configFile );
|
||||
Preconditions.checkNotNull( configVersion );
|
||||
Preconditions.checkArgument( !configVersion.isEmpty() );
|
||||
|
||||
this.config = new Configuration( configFile, configVersion );
|
||||
this.config = configFile;
|
||||
|
||||
final ConfigCategory playerList = this.config.getCategory( "players" );
|
||||
this.playerMapping = new PlayerMapping( playerList, AELog.INSTANCE );
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
package appeng.core.worlddata;
|
||||
|
||||
|
||||
import java.io.File;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.util.Map;
|
||||
import java.util.WeakHashMap;
|
||||
@@ -55,13 +54,11 @@ final class StorageData implements IWorldGridStorageData, IOnWorldStartable, IOn
|
||||
|
||||
private long lastGridStorage;
|
||||
|
||||
public StorageData( @Nonnull final File settingsFile, @Nonnull final String version )
|
||||
public StorageData( @Nonnull final Configuration settingsFile )
|
||||
{
|
||||
Preconditions.checkNotNull( settingsFile );
|
||||
Preconditions.checkNotNull( version );
|
||||
Preconditions.checkArgument( !version.isEmpty() );
|
||||
|
||||
this.config = new Configuration( settingsFile, version );
|
||||
this.config = settingsFile;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -30,6 +30,7 @@ import com.google.common.base.Preconditions;
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import net.minecraftforge.common.DimensionManager;
|
||||
import net.minecraftforge.common.config.Configuration;
|
||||
|
||||
import appeng.core.AEConfig;
|
||||
import appeng.services.CompassService;
|
||||
@@ -39,7 +40,8 @@ import appeng.services.compass.CompassThreadFactory;
|
||||
/**
|
||||
* Singleton access to anything related to world-based data.
|
||||
*
|
||||
* Data will change depending which world is loaded. Will probably not affect SMP at all since only one world is loaded, but SSP more, cause they play on
|
||||
* Data will change depending which world is loaded. Will probably not affect SMP at all since only one world is loaded,
|
||||
* but SSP more, cause they play on
|
||||
* different worlds.
|
||||
*
|
||||
* @author thatsIch
|
||||
@@ -69,6 +71,8 @@ public final class WorldData implements IWorldData
|
||||
private final File spawnDirectory;
|
||||
private final File compassDirectory;
|
||||
|
||||
private final Configuration sharedConfig;
|
||||
|
||||
private WorldData( @Nonnull final File worldDirectory )
|
||||
{
|
||||
Preconditions.checkNotNull( worldDirectory );
|
||||
@@ -79,10 +83,11 @@ public final class WorldData implements IWorldData
|
||||
this.compassDirectory = new File( this.ae2directory, COMPASS_DIR_NAME );
|
||||
|
||||
final File settingsFile = new File( this.ae2directory, SETTING_FILE_NAME );
|
||||
this.sharedConfig = new Configuration( settingsFile, AEConfig.VERSION );
|
||||
|
||||
final PlayerData playerData = new PlayerData( settingsFile, AEConfig.VERSION );
|
||||
final DimensionData dimensionData = new DimensionData( settingsFile, AEConfig.VERSION );
|
||||
final StorageData storageData = new StorageData( settingsFile, AEConfig.VERSION );
|
||||
final PlayerData playerData = new PlayerData( this.sharedConfig );
|
||||
final DimensionData dimensionData = new DimensionData( this.sharedConfig );
|
||||
final StorageData storageData = new StorageData( this.sharedConfig );
|
||||
|
||||
final ThreadFactory compassThreadFactory = new CompassThreadFactory();
|
||||
final CompassService compassService = new CompassService( this.compassDirectory, compassThreadFactory );
|
||||
|
||||
@@ -100,18 +100,22 @@ import appeng.util.item.AEItemStack;
|
||||
public class DualityInterface implements IGridTickable, IStorageMonitorable, IInventoryDestination, IAEAppEngInventory, IConfigManagerHost, ICraftingProvider, IUpgradeableHost, IPriorityHost
|
||||
{
|
||||
|
||||
public static final int NUMBER_OF_STORAGE_SLOTS = 9;
|
||||
public static final int NUMBER_OF_CONFIG_SLOTS = 9;
|
||||
public static final int NUMBER_OF_PATTERN_SLOTS = 9;
|
||||
|
||||
private static final Collection<Block> BAD_BLOCKS = new HashSet<Block>( 100 );
|
||||
final int[] sides = new int[] { 0, 1, 2, 3, 4, 5, 6, 7 };
|
||||
final IAEItemStack[] requireWork = new IAEItemStack[] { null, null, null, null, null, null, null, null };
|
||||
final int[] sides = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8 };
|
||||
final IAEItemStack[] requireWork = new IAEItemStack[] { null, null, null, null, null, null, null, null, null };
|
||||
final MultiCraftingTracker craftingTracker;
|
||||
final AENetworkProxy gridProxy;
|
||||
final IInterfaceHost iHost;
|
||||
final BaseActionSource mySource;
|
||||
final BaseActionSource interfaceRequestSource;
|
||||
final ConfigManager cm = new ConfigManager( this );
|
||||
final AppEngInternalAEInventory config = new AppEngInternalAEInventory( this, 8 );
|
||||
final AppEngInternalInventory storage = new AppEngInternalInventory( this, 8 );
|
||||
final AppEngInternalInventory patterns = new AppEngInternalInventory( this, 9 );
|
||||
final AppEngInternalAEInventory config = new AppEngInternalAEInventory( this, NUMBER_OF_CONFIG_SLOTS );
|
||||
final AppEngInternalInventory storage = new AppEngInternalInventory( this, NUMBER_OF_STORAGE_SLOTS );
|
||||
final AppEngInternalInventory patterns = new AppEngInternalInventory( this, NUMBER_OF_PATTERN_SLOTS );
|
||||
final WrapperInvSlot slotInv = new WrapperInvSlot( this.storage );
|
||||
final MEMonitorPassThrough<IAEItemStack> items = new MEMonitorPassThrough<IAEItemStack>( new NullInventory<IAEItemStack>(), StorageChannel.ITEMS );
|
||||
final MEMonitorPassThrough<IAEFluidStack> fluids = new MEMonitorPassThrough<IAEFluidStack>( new NullInventory<IAEFluidStack>(), StorageChannel.FLUIDS );
|
||||
@@ -279,7 +283,7 @@ public class DualityInterface implements IGridTickable, IStorageMonitorable, IIn
|
||||
|
||||
boolean had = this.hasWorkToDo();
|
||||
|
||||
for( int x = 0; x < 8; x++ )
|
||||
for( int x = 0; x < NUMBER_OF_CONFIG_SLOTS; x++ )
|
||||
{
|
||||
this.updatePlan( x );
|
||||
}
|
||||
@@ -616,7 +620,7 @@ public class DualityInterface implements IGridTickable, IStorageMonitorable, IIn
|
||||
{
|
||||
boolean didSomething = false;
|
||||
|
||||
for( int x = 0; x < 8; x++ )
|
||||
for( int x = 0; x < NUMBER_OF_STORAGE_SLOTS; x++ )
|
||||
{
|
||||
if( this.requireWork[x] != null )
|
||||
{
|
||||
|
||||
@@ -25,7 +25,6 @@ import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.Queue;
|
||||
import java.util.WeakHashMap;
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import com.google.common.base.Stopwatch;
|
||||
@@ -55,6 +54,7 @@ import appeng.entity.EntityFloatingItem;
|
||||
import appeng.me.Grid;
|
||||
import appeng.me.NetworkList;
|
||||
import appeng.tile.AEBaseTile;
|
||||
import appeng.util.IWorldCallable;
|
||||
import appeng.util.Platform;
|
||||
|
||||
|
||||
@@ -62,9 +62,9 @@ public class TickHandler
|
||||
{
|
||||
|
||||
public static final TickHandler INSTANCE = new TickHandler();
|
||||
final Queue<Callable> serverQueue = new LinkedList<Callable>();
|
||||
final Queue<IWorldCallable<?>> serverQueue = new LinkedList<IWorldCallable<?>>();
|
||||
final Multimap<World, CraftingJob> craftingJobs = LinkedListMultimap.create();
|
||||
private final WeakHashMap<World, Queue<Callable>> callQueue = new WeakHashMap<World, Queue<Callable>>();
|
||||
private final WeakHashMap<World, Queue<IWorldCallable<?>>> callQueue = new WeakHashMap<World, Queue<IWorldCallable<?>>>();
|
||||
private final HandlerRep server = new HandlerRep();
|
||||
private final HandlerRep client = new HandlerRep();
|
||||
private final HashMap<Integer, PlayerColor> cliPlayerColors = new HashMap<Integer, PlayerColor>();
|
||||
@@ -80,7 +80,7 @@ public class TickHandler
|
||||
return this.cliPlayerColors;
|
||||
}
|
||||
|
||||
public void addCallable( World w, Callable c )
|
||||
public void addCallable( World w, IWorldCallable<?> c )
|
||||
{
|
||||
if( w == null )
|
||||
{
|
||||
@@ -88,11 +88,12 @@ public class TickHandler
|
||||
}
|
||||
else
|
||||
{
|
||||
Queue<Callable> queue = this.callQueue.get( w );
|
||||
Queue<IWorldCallable<?>> queue = this.callQueue.get( w );
|
||||
|
||||
if( queue == null )
|
||||
{
|
||||
this.callQueue.put( w, queue = new LinkedList<Callable>() );
|
||||
queue = new LinkedList<IWorldCallable<?>>();
|
||||
this.callQueue.put( w, queue );
|
||||
}
|
||||
|
||||
queue.add( c );
|
||||
@@ -239,13 +240,15 @@ public class TickHandler
|
||||
}
|
||||
|
||||
// cross world queue.
|
||||
this.processQueue( this.serverQueue );
|
||||
this.processQueue( this.serverQueue, null );
|
||||
}
|
||||
|
||||
// world synced queue(s)
|
||||
if( ev.type == Type.WORLD && ev.phase == Phase.START )
|
||||
{
|
||||
this.processQueue( this.callQueue.get( ( (WorldTickEvent) ev ).world ) );
|
||||
final World world = ( (WorldTickEvent) ev ).world;
|
||||
final Queue<IWorldCallable<?>> queue = this.callQueue.get( world );
|
||||
this.processQueue( queue, world );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -263,7 +266,7 @@ public class TickHandler
|
||||
}
|
||||
}
|
||||
|
||||
private void processQueue( Queue<Callable> queue )
|
||||
private void processQueue( Queue<IWorldCallable<?>> queue, World world )
|
||||
{
|
||||
if( queue == null )
|
||||
{
|
||||
@@ -272,12 +275,12 @@ public class TickHandler
|
||||
|
||||
Stopwatch sw = Stopwatch.createStarted();
|
||||
|
||||
Callable c = null;
|
||||
IWorldCallable<?> c = null;
|
||||
while( ( c = queue.poll() ) != null )
|
||||
{
|
||||
try
|
||||
{
|
||||
c.call();
|
||||
c.call( world );
|
||||
|
||||
if( sw.elapsed( TimeUnit.MILLISECONDS ) > 50 )
|
||||
{
|
||||
|
||||
@@ -21,12 +21,6 @@ package appeng.integration;
|
||||
|
||||
public abstract class BaseModule implements IIntegrationModule
|
||||
{
|
||||
|
||||
protected void testClassExistence( Class<?> clz )
|
||||
{
|
||||
clz.isInstance( this );
|
||||
}
|
||||
|
||||
@Override
|
||||
public abstract void init() throws Throwable;
|
||||
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* This file is part of Applied Energistics 2.
|
||||
* Copyright (c) 2013 - 2015, AlgorithmX2, All rights reserved.
|
||||
*
|
||||
* Applied Energistics 2 is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Applied Energistics 2 is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>.
|
||||
*/
|
||||
|
||||
package appeng.integration;
|
||||
|
||||
|
||||
public class IntegrationHelper
|
||||
{
|
||||
|
||||
public static void testClassExistence( Object o, Class<?> clz )
|
||||
{
|
||||
clz.isInstance( o );
|
||||
}
|
||||
}
|
||||
@@ -39,7 +39,7 @@ public final class IntegrationNode
|
||||
IntegrationStage failedStage = IntegrationStage.PRE_INIT;
|
||||
Throwable exception = null;
|
||||
String name = null;
|
||||
Class classValue = null;
|
||||
Class<?> classValue = null;
|
||||
Object instance;
|
||||
IIntegrationModule mod = null;
|
||||
|
||||
|
||||
@@ -32,6 +32,8 @@ public enum IntegrationRegistry
|
||||
{
|
||||
INSTANCE;
|
||||
|
||||
private static final String PACKAGE_PREFIX = "appeng.integration.modules.";
|
||||
|
||||
private final Collection<IntegrationNode> modules = new LinkedList<IntegrationNode>();
|
||||
|
||||
public void add( IntegrationType type )
|
||||
@@ -46,7 +48,7 @@ public enum IntegrationRegistry
|
||||
return;
|
||||
}
|
||||
|
||||
this.modules.add( new IntegrationNode( type.dspName, type.modID, type, "appeng.integration.modules." + type.name() ) );
|
||||
this.modules.add( new IntegrationNode( type.dspName, type.modID, type, PACKAGE_PREFIX + type.name() ) );
|
||||
}
|
||||
|
||||
public void init()
|
||||
|
||||
@@ -23,8 +23,10 @@ import net.mcft.copy.betterstorage.api.crate.ICrateStorage;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
import appeng.api.AEApi;
|
||||
import appeng.helpers.Reflected;
|
||||
import appeng.integration.BaseModule;
|
||||
import appeng.integration.IIntegrationModule;
|
||||
import appeng.integration.IntegrationHelper;
|
||||
import appeng.integration.abstraction.IBetterStorage;
|
||||
import appeng.integration.modules.helpers.BSCrateHandler;
|
||||
import appeng.integration.modules.helpers.BSCrateStorageAdaptor;
|
||||
@@ -33,12 +35,13 @@ import appeng.util.InventoryAdaptor;
|
||||
|
||||
public class BetterStorage extends BaseModule implements IIntegrationModule, IBetterStorage
|
||||
{
|
||||
|
||||
@Reflected
|
||||
public static BetterStorage instance;
|
||||
|
||||
@Reflected
|
||||
public BetterStorage()
|
||||
{
|
||||
this.testClassExistence( net.mcft.copy.betterstorage.api.crate.ICrateStorage.class );
|
||||
IntegrationHelper.testClassExistence( this, net.mcft.copy.betterstorage.api.crate.ICrateStorage.class );
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -60,7 +63,6 @@ public class BetterStorage extends BaseModule implements IIntegrationModule, IBe
|
||||
@Override
|
||||
public void init()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -28,10 +28,7 @@ import net.minecraft.block.Block;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import buildcraft.api.blueprints.BuilderAPI;
|
||||
import buildcraft.api.blueprints.IBuilderContext;
|
||||
import buildcraft.api.blueprints.ISchematicRegistry;
|
||||
import buildcraft.api.blueprints.SchematicBlock;
|
||||
import buildcraft.api.blueprints.SchematicTile;
|
||||
|
||||
import appeng.api.AEApi;
|
||||
import appeng.api.definitions.IBlockDefinition;
|
||||
@@ -41,6 +38,7 @@ import appeng.api.util.IOrientableBlock;
|
||||
import appeng.core.AELog;
|
||||
import appeng.helpers.Reflected;
|
||||
import appeng.integration.BaseModule;
|
||||
import appeng.integration.IntegrationHelper;
|
||||
import appeng.integration.modules.BCHelpers.AECableSchematicTile;
|
||||
import appeng.integration.modules.BCHelpers.AEGenericSchematicTile;
|
||||
import appeng.integration.modules.BCHelpers.AERotatableBlockSchematic;
|
||||
@@ -62,11 +60,11 @@ public class BuildCraftBuilder extends BaseModule
|
||||
@Reflected
|
||||
public BuildCraftBuilder()
|
||||
{
|
||||
this.testClassExistence( BuilderAPI.class );
|
||||
this.testClassExistence( IBuilderContext.class );
|
||||
this.testClassExistence( ISchematicRegistry.class );
|
||||
this.testClassExistence( SchematicTile.class );
|
||||
this.testClassExistence( SchematicBlock.class );
|
||||
IntegrationHelper.testClassExistence( this, buildcraft.api.blueprints.BuilderAPI.class );
|
||||
IntegrationHelper.testClassExistence( this, buildcraft.api.blueprints.IBuilderContext.class );
|
||||
IntegrationHelper.testClassExistence( this, buildcraft.api.blueprints.ISchematicRegistry.class );
|
||||
IntegrationHelper.testClassExistence( this, buildcraft.api.blueprints.SchematicTile.class );
|
||||
IntegrationHelper.testClassExistence( this, buildcraft.api.blueprints.SchematicBlock.class );
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -85,7 +83,6 @@ public class BuildCraftBuilder extends BaseModule
|
||||
@Override
|
||||
public void postInit()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private void initBuilderSupport()
|
||||
|
||||
@@ -25,7 +25,6 @@ import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
import buildcraft.BuildCraftTransport;
|
||||
import buildcraft.api.tools.IToolWrench;
|
||||
|
||||
import appeng.api.AEApi;
|
||||
@@ -33,6 +32,7 @@ import appeng.api.config.TunnelType;
|
||||
import appeng.api.features.IP2PTunnelRegistry;
|
||||
import appeng.helpers.Reflected;
|
||||
import appeng.integration.BaseModule;
|
||||
import appeng.integration.IntegrationHelper;
|
||||
import appeng.integration.abstraction.IBuildCraftCore;
|
||||
|
||||
|
||||
@@ -45,9 +45,9 @@ public final class BuildCraftCore extends BaseModule implements IBuildCraftCore
|
||||
@Reflected
|
||||
public BuildCraftCore()
|
||||
{
|
||||
this.testClassExistence( buildcraft.BuildCraftCore.class );
|
||||
this.testClassExistence( BuildCraftTransport.class );
|
||||
this.testClassExistence( IToolWrench.class );
|
||||
IntegrationHelper.testClassExistence( this, buildcraft.BuildCraftCore.class );
|
||||
IntegrationHelper.testClassExistence( this, buildcraft.BuildCraftTransport.class );
|
||||
IntegrationHelper.testClassExistence( this, buildcraft.api.tools.IToolWrench.class );
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -71,7 +71,6 @@ public final class BuildCraftCore extends BaseModule implements IBuildCraftCore
|
||||
@Override
|
||||
public void init()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -33,7 +33,6 @@ import cpw.mods.fml.common.event.FMLInterModComms;
|
||||
|
||||
import buildcraft.api.facades.IFacadeItem;
|
||||
import buildcraft.api.transport.IInjectable;
|
||||
import buildcraft.api.transport.IPipeConnection;
|
||||
import buildcraft.api.transport.IPipeTile;
|
||||
import buildcraft.transport.ItemFacade;
|
||||
import buildcraft.transport.PipeIconProvider;
|
||||
@@ -48,6 +47,7 @@ import appeng.api.parts.IFacadePart;
|
||||
import appeng.facade.FacadePart;
|
||||
import appeng.helpers.Reflected;
|
||||
import appeng.integration.BaseModule;
|
||||
import appeng.integration.IntegrationHelper;
|
||||
import appeng.integration.abstraction.IBuildCraftTransport;
|
||||
import appeng.integration.modules.BCHelpers.BCPipeHandler;
|
||||
|
||||
@@ -66,14 +66,14 @@ public class BuildCraftTransport extends BaseModule implements IBuildCraftTransp
|
||||
@Reflected
|
||||
public BuildCraftTransport()
|
||||
{
|
||||
this.testClassExistence( buildcraft.BuildCraftTransport.class );
|
||||
this.testClassExistence( IFacadeItem.class );
|
||||
this.testClassExistence( IInjectable.class );
|
||||
this.testClassExistence( IPipeConnection.class );
|
||||
this.testClassExistence( IPipeTile.class );
|
||||
this.testClassExistence( ItemFacade.class );
|
||||
this.testClassExistence( PipeIconProvider.class );
|
||||
this.testClassExistence( IPipeTile.PipeType.class );
|
||||
IntegrationHelper.testClassExistence( this, buildcraft.BuildCraftTransport.class );
|
||||
IntegrationHelper.testClassExistence( this, buildcraft.api.facades.IFacadeItem.class );
|
||||
IntegrationHelper.testClassExistence( this, buildcraft.api.transport.IInjectable.class );
|
||||
IntegrationHelper.testClassExistence( this, buildcraft.api.transport.IPipeConnection.class );
|
||||
IntegrationHelper.testClassExistence( this, buildcraft.api.transport.IPipeTile.class );
|
||||
IntegrationHelper.testClassExistence( this, buildcraft.api.transport.IPipeTile.PipeType.class );
|
||||
IntegrationHelper.testClassExistence( this, buildcraft.transport.ItemFacade.class );
|
||||
IntegrationHelper.testClassExistence( this, buildcraft.transport.PipeIconProvider.class );
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -20,19 +20,26 @@ package appeng.integration.modules;
|
||||
|
||||
|
||||
import appeng.api.util.AEColor;
|
||||
import appeng.helpers.Reflected;
|
||||
import appeng.integration.BaseModule;
|
||||
import appeng.integration.IntegrationHelper;
|
||||
import appeng.integration.abstraction.ICLApi;
|
||||
|
||||
|
||||
public class CLApi extends BaseModule implements ICLApi
|
||||
{
|
||||
|
||||
@Reflected
|
||||
public static CLApi instance;
|
||||
|
||||
@Reflected
|
||||
public CLApi()
|
||||
{
|
||||
IntegrationHelper.testClassExistence( this, coloredlightscore.src.api.CLApi.class );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init() throws Throwable
|
||||
{
|
||||
this.testClassExistence( coloredlightscore.src.api.CLApi.class );
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -56,6 +56,7 @@ import appeng.api.features.IInscriberRecipe;
|
||||
import appeng.api.recipes.IIngredient;
|
||||
import appeng.helpers.Reflected;
|
||||
import appeng.integration.IIntegrationModule;
|
||||
import appeng.integration.IntegrationHelper;
|
||||
import appeng.recipes.game.ShapedRecipe;
|
||||
import appeng.recipes.game.ShapelessRecipe;
|
||||
|
||||
@@ -136,6 +137,33 @@ public final class CraftGuide extends CraftGuideAPIObject implements IIntegratio
|
||||
@Reflected
|
||||
public static CraftGuide instance;
|
||||
|
||||
public CraftGuide()
|
||||
{
|
||||
IntegrationHelper.testClassExistence( this, uristqwerty.CraftGuide.CraftGuideLog.class );
|
||||
IntegrationHelper.testClassExistence( this, uristqwerty.CraftGuide.DefaultRecipeTemplate.class );
|
||||
IntegrationHelper.testClassExistence( this, uristqwerty.CraftGuide.RecipeGeneratorImplementation.class );
|
||||
IntegrationHelper.testClassExistence( this, uristqwerty.CraftGuide.api.ChanceSlot.class );
|
||||
IntegrationHelper.testClassExistence( this, uristqwerty.CraftGuide.api.CraftGuideAPIObject.class );
|
||||
IntegrationHelper.testClassExistence( this, uristqwerty.CraftGuide.api.ItemSlot.class );
|
||||
IntegrationHelper.testClassExistence( this, uristqwerty.CraftGuide.api.RecipeGenerator.class );
|
||||
IntegrationHelper.testClassExistence( this, uristqwerty.CraftGuide.api.RecipeProvider.class );
|
||||
IntegrationHelper.testClassExistence( this, uristqwerty.CraftGuide.api.RecipeTemplate.class );
|
||||
IntegrationHelper.testClassExistence( this, uristqwerty.CraftGuide.api.Slot.class );
|
||||
IntegrationHelper.testClassExistence( this, uristqwerty.CraftGuide.api.SlotType.class );
|
||||
IntegrationHelper.testClassExistence( this, uristqwerty.gui_craftguide.texture.DynamicTexture.class );
|
||||
IntegrationHelper.testClassExistence( this, uristqwerty.gui_craftguide.texture.TextureClip.class );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init() throws Throwable
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postInit()
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void generateRecipes( RecipeGenerator generator )
|
||||
{
|
||||
@@ -428,15 +456,4 @@ public final class CraftGuide extends CraftGuideAPIObject implements IIntegratio
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init() throws Throwable
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postInit()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,7 +25,9 @@ import powercrystals.minefactoryreloaded.api.IDeepStorageUnit;
|
||||
|
||||
import appeng.api.AEApi;
|
||||
import appeng.api.storage.IMEInventory;
|
||||
import appeng.helpers.Reflected;
|
||||
import appeng.integration.BaseModule;
|
||||
import appeng.integration.IntegrationHelper;
|
||||
import appeng.integration.abstraction.IDSU;
|
||||
import appeng.integration.modules.helpers.MFRDSUHandler;
|
||||
import appeng.integration.modules.helpers.MinefactoryReloadedDeepStorageUnit;
|
||||
@@ -33,8 +35,15 @@ import appeng.integration.modules.helpers.MinefactoryReloadedDeepStorageUnit;
|
||||
|
||||
public class DSU extends BaseModule implements IDSU
|
||||
{
|
||||
@Reflected
|
||||
public static DSU instance;
|
||||
|
||||
@Reflected
|
||||
public DSU()
|
||||
{
|
||||
IntegrationHelper.testClassExistence( this, powercrystals.minefactoryreloaded.api.IDeepStorageUnit.class );
|
||||
}
|
||||
|
||||
@Override
|
||||
public IMEInventory getDSU( TileEntity te )
|
||||
{
|
||||
@@ -50,7 +59,6 @@ public class DSU extends BaseModule implements IDSU
|
||||
@Override
|
||||
public void init()
|
||||
{
|
||||
this.testClassExistence( IDeepStorageUnit.class );
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -50,6 +50,7 @@ import appeng.fmp.CableBusPart;
|
||||
import appeng.fmp.FMPEvent;
|
||||
import appeng.fmp.FMPPlacementHelper;
|
||||
import appeng.fmp.PartRegistry;
|
||||
import appeng.helpers.Reflected;
|
||||
import appeng.integration.IIntegrationModule;
|
||||
import appeng.integration.abstraction.IFMP;
|
||||
import appeng.integration.modules.helpers.FMPPacketEvent;
|
||||
@@ -58,7 +59,7 @@ import appeng.parts.CableBusContainer;
|
||||
|
||||
public class FMP implements IIntegrationModule, IPartFactory, IPartConverter, IFMP
|
||||
{
|
||||
|
||||
@Reflected
|
||||
public static FMP instance;
|
||||
|
||||
@Override
|
||||
|
||||
@@ -28,6 +28,8 @@ import net.minecraft.tileentity.TileEntity;
|
||||
|
||||
import appeng.api.AEApi;
|
||||
import appeng.api.storage.IMEInventory;
|
||||
import appeng.helpers.Reflected;
|
||||
import appeng.integration.BaseModule;
|
||||
import appeng.integration.IIntegrationModule;
|
||||
import appeng.integration.abstraction.IFZ;
|
||||
import appeng.integration.modules.helpers.FactorizationBarrel;
|
||||
@@ -38,9 +40,9 @@ import appeng.util.Platform;
|
||||
/**
|
||||
* 100% Hacks.
|
||||
*/
|
||||
public class FZ implements IFZ, IIntegrationModule
|
||||
public class FZ extends BaseModule implements IFZ, IIntegrationModule
|
||||
{
|
||||
|
||||
@Reflected
|
||||
public static FZ instance;
|
||||
|
||||
private static Class<?> day_BarrelClass;
|
||||
|
||||
@@ -27,25 +27,41 @@ import ic2.api.energy.tile.IEnergyTile;
|
||||
import ic2.api.recipe.RecipeInputItemStack;
|
||||
|
||||
import appeng.api.AEApi;
|
||||
import appeng.api.IAppEngApi;
|
||||
import appeng.api.config.TunnelType;
|
||||
import appeng.api.features.IP2PTunnelRegistry;
|
||||
import appeng.api.parts.IPartHelper;
|
||||
import appeng.helpers.Reflected;
|
||||
import appeng.integration.BaseModule;
|
||||
import appeng.integration.IntegrationHelper;
|
||||
import appeng.integration.IntegrationRegistry;
|
||||
import appeng.integration.IntegrationType;
|
||||
import appeng.integration.abstraction.IIC2;
|
||||
|
||||
|
||||
public class IC2 extends BaseModule implements IIC2
|
||||
{
|
||||
|
||||
@Reflected
|
||||
public static IC2 instance;
|
||||
|
||||
@Reflected
|
||||
public IC2()
|
||||
{
|
||||
this.testClassExistence( IEnergyTile.class );
|
||||
IntegrationHelper.testClassExistence( this, ic2.api.energy.tile.IEnergyTile.class );
|
||||
IntegrationHelper.testClassExistence( this, ic2.api.recipe.RecipeInputItemStack.class );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init()
|
||||
{
|
||||
final IAppEngApi api = AEApi.instance();
|
||||
final IPartHelper partHelper = api.partHelper();
|
||||
|
||||
if( IntegrationRegistry.INSTANCE.isEnabled( IntegrationType.IC2 ) )
|
||||
{
|
||||
partHelper.registerNewLayer( "appeng.parts.layers.LayerIEnergySink", "ic2.api.energy.tile.IEnergySink" );
|
||||
partHelper.registerNewLayer( "appeng.parts.layers.LayerIEnergySource", "ic2.api.energy.tile.IEnergySource" );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -31,7 +31,6 @@ import net.minecraft.world.World;
|
||||
|
||||
import mods.immibis.core.api.multipart.ICoverSystem;
|
||||
import mods.immibis.core.api.multipart.IMultipartTile;
|
||||
import mods.immibis.core.api.multipart.IPartContainer;
|
||||
|
||||
import appeng.api.AEApi;
|
||||
import appeng.api.definitions.IBlockDefinition;
|
||||
@@ -40,6 +39,7 @@ import appeng.api.parts.IPartItem;
|
||||
import appeng.core.AELog;
|
||||
import appeng.helpers.Reflected;
|
||||
import appeng.integration.BaseModule;
|
||||
import appeng.integration.IntegrationHelper;
|
||||
import appeng.integration.abstraction.IImmibisMicroblocks;
|
||||
|
||||
|
||||
@@ -53,13 +53,17 @@ public class ImmibisMicroblocks extends BaseModule implements IImmibisMicroblock
|
||||
private Class<?> MicroblockAPIUtils;
|
||||
private Method mergeIntoMicroblockContainer;
|
||||
|
||||
@Reflected
|
||||
public ImmibisMicroblocks()
|
||||
{
|
||||
IntegrationHelper.testClassExistence( this, mods.immibis.core.api.multipart.IMultipartTile.class );
|
||||
IntegrationHelper.testClassExistence( this, mods.immibis.core.api.multipart.ICoverSystem.class );
|
||||
IntegrationHelper.testClassExistence( this, mods.immibis.core.api.multipart.IPartContainer.class );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init() throws Throwable
|
||||
{
|
||||
this.testClassExistence( IMultipartTile.class );
|
||||
this.testClassExistence( ICoverSystem.class );
|
||||
this.testClassExistence( IPartContainer.class );
|
||||
|
||||
try
|
||||
{
|
||||
this.MicroblockAPIUtils = Class.forName( "mods.immibis.microblocks.api.MicroblockAPIUtils" );
|
||||
|
||||
@@ -25,17 +25,25 @@ import cpw.mods.fml.common.Loader;
|
||||
|
||||
import invtweaks.api.InvTweaksAPI;
|
||||
|
||||
import appeng.helpers.Reflected;
|
||||
import appeng.integration.BaseModule;
|
||||
import appeng.integration.IntegrationHelper;
|
||||
import appeng.integration.abstraction.IInvTweaks;
|
||||
|
||||
|
||||
public class InvTweaks extends BaseModule implements IInvTweaks
|
||||
{
|
||||
|
||||
@Reflected
|
||||
public static InvTweaks instance;
|
||||
|
||||
static InvTweaksAPI api;
|
||||
|
||||
@Reflected
|
||||
public InvTweaks()
|
||||
{
|
||||
IntegrationHelper.testClassExistence( this, invtweaks.api.InvTweaksAPI.class );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init()
|
||||
{
|
||||
|
||||
@@ -19,30 +19,29 @@
|
||||
package appeng.integration.modules;
|
||||
|
||||
|
||||
import powercrystals.minefactoryreloaded.api.rednet.connectivity.IRedNetConnection;
|
||||
|
||||
import appeng.helpers.Reflected;
|
||||
import appeng.integration.BaseModule;
|
||||
import appeng.integration.IntegrationHelper;
|
||||
|
||||
|
||||
public class MFR extends BaseModule
|
||||
{
|
||||
|
||||
@Reflected
|
||||
public static MFR instance;
|
||||
|
||||
@Reflected
|
||||
public MFR()
|
||||
{
|
||||
this.testClassExistence( IRedNetConnection.class );
|
||||
IntegrationHelper.testClassExistence( this, powercrystals.minefactoryreloaded.api.rednet.connectivity.IRedNetConnection.class );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init() throws Throwable
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postInit()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,25 +24,31 @@ import net.minecraft.nbt.NBTTagCompound;
|
||||
|
||||
import cpw.mods.fml.common.event.FMLInterModComms;
|
||||
|
||||
import appeng.helpers.Reflected;
|
||||
import appeng.integration.BaseModule;
|
||||
import appeng.integration.IntegrationHelper;
|
||||
import appeng.integration.abstraction.IMekanism;
|
||||
|
||||
|
||||
public final class Mekanism extends BaseModule implements IMekanism
|
||||
{
|
||||
|
||||
@Reflected
|
||||
public static Mekanism instance;
|
||||
|
||||
@Reflected
|
||||
public Mekanism()
|
||||
{
|
||||
IntegrationHelper.testClassExistence( this, mekanism.api.energy.IStrictEnergyAcceptor.class );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init() throws Throwable
|
||||
{
|
||||
this.testClassExistence( mekanism.api.energy.IStrictEnergyAcceptor.class );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postInit()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -42,6 +42,7 @@ import appeng.core.AEConfig;
|
||||
import appeng.core.features.AEFeature;
|
||||
import appeng.helpers.Reflected;
|
||||
import appeng.integration.BaseModule;
|
||||
import appeng.integration.IntegrationHelper;
|
||||
import appeng.integration.abstraction.INEI;
|
||||
import appeng.integration.modules.NEIHelpers.NEIAEShapedRecipeHandler;
|
||||
import appeng.integration.modules.NEIHelpers.NEIAEShapelessRecipeHandler;
|
||||
@@ -61,15 +62,19 @@ public class NEI extends BaseModule implements INEI, IContainerTooltipHandler
|
||||
private final Class<?> apiClass;
|
||||
|
||||
// recipe handler...
|
||||
Method registerRecipeHandler;
|
||||
Method registerUsageHandler;
|
||||
private Method registerRecipeHandler;
|
||||
private Method registerUsageHandler;
|
||||
|
||||
@Reflected
|
||||
public NEI() throws ClassNotFoundException
|
||||
{
|
||||
this.testClassExistence( GuiContainerManager.class );
|
||||
this.testClassExistence( codechicken.nei.recipe.ICraftingHandler.class );
|
||||
this.testClassExistence( codechicken.nei.recipe.IUsageHandler.class );
|
||||
IntegrationHelper.testClassExistence( this, codechicken.nei.api.API.class );
|
||||
IntegrationHelper.testClassExistence( this, codechicken.nei.api.IStackPositioner.class );
|
||||
IntegrationHelper.testClassExistence( this, codechicken.nei.guihook.GuiContainerManager.class );
|
||||
IntegrationHelper.testClassExistence( this, codechicken.nei.guihook.IContainerTooltipHandler.class );
|
||||
IntegrationHelper.testClassExistence( this, codechicken.nei.recipe.ICraftingHandler.class );
|
||||
IntegrationHelper.testClassExistence( this, codechicken.nei.recipe.IUsageHandler.class );
|
||||
|
||||
this.apiClass = Class.forName( "codechicken.nei.api.API" );
|
||||
}
|
||||
|
||||
@@ -96,7 +101,7 @@ public class NEI extends BaseModule implements INEI, IContainerTooltipHandler
|
||||
// crafting terminal...
|
||||
Method registerGuiOverlay = this.apiClass.getDeclaredMethod( "registerGuiOverlay", Class.class, String.class, IStackPositioner.class );
|
||||
Class overlayHandler = Class.forName( "codechicken.nei.api.IOverlayHandler" );
|
||||
Class defaultHandler = NEICraftingHandler.class;
|
||||
Class<NEICraftingHandler> defaultHandler = NEICraftingHandler.class;
|
||||
|
||||
Method registrar = this.apiClass.getDeclaredMethod( "registerGuiOverlayHandler", Class.class, overlayHandler, String.class );
|
||||
registerGuiOverlay.invoke( this.apiClass, GuiCraftingTerm.class, "crafting", new TerminalCraftingSlotFinder() );
|
||||
|
||||
@@ -109,6 +109,7 @@ public class NEIGrinderRecipeHandler extends TemplateRecipeHandler
|
||||
public String getGuiTexture()
|
||||
{
|
||||
ResourceLocation loc = new ResourceLocation( "appliedenergistics2", "textures/guis/grinder.png" );
|
||||
|
||||
return loc.toString();
|
||||
}
|
||||
|
||||
@@ -194,13 +195,22 @@ public class NEIGrinderRecipeHandler extends TemplateRecipeHandler
|
||||
this.result = new PositionedStack( recipe.getOutput(), -30 + 107, 47 );
|
||||
this.ingredients = new ArrayList<PositionedStack>();
|
||||
|
||||
if( recipe.getOptionalOutput() != null )
|
||||
final ItemStack optionalOutput = recipe.getOptionalOutput();
|
||||
final int optionalChancePercent = (int) ( recipe.getOptionalChance() * 100 );
|
||||
if( optionalOutput != null )
|
||||
{
|
||||
final int chancePercent = (int) ( recipe.getOptionalChance() * 100 );
|
||||
|
||||
this.hasOptional = true;
|
||||
this.displayChance = String.format( GuiText.OfSecondOutput.getLocal(), chancePercent );
|
||||
this.ingredients.add( new PositionedStack( recipe.getOptionalOutput(), -30 + 107 + 18, 47 ) );
|
||||
this.displayChance = String.format( GuiText.OfSecondOutput.getLocal(), optionalChancePercent );
|
||||
this.ingredients.add( new PositionedStack( optionalOutput, -30 + 107 + 18, 47 ) );
|
||||
}
|
||||
|
||||
final ItemStack secondOptionalOutput = recipe.getSecondOptionalOutput();
|
||||
final int secondOptionalChancePercent = (int) ( recipe.getSecondOptionalChance() * 100 );
|
||||
if( secondOptionalOutput != null )
|
||||
{
|
||||
this.hasOptional = true;
|
||||
this.displayChance = String.format( GuiText.MultipleOutputs.getLocal(), optionalChancePercent, secondOptionalChancePercent );
|
||||
this.ingredients.add( new PositionedStack( secondOptionalOutput, -30 + 107 + 18 + 18, 47 ) );
|
||||
}
|
||||
|
||||
if( recipe.getInput() != null )
|
||||
|
||||
@@ -22,28 +22,44 @@ package appeng.integration.modules;
|
||||
import li.cil.oc.api.Items;
|
||||
|
||||
import appeng.api.AEApi;
|
||||
import appeng.api.IAppEngApi;
|
||||
import appeng.api.config.TunnelType;
|
||||
import appeng.api.features.IP2PTunnelRegistry;
|
||||
import appeng.api.parts.IPartHelper;
|
||||
import appeng.helpers.Reflected;
|
||||
import appeng.integration.BaseModule;
|
||||
import appeng.integration.IntegrationHelper;
|
||||
import appeng.integration.IntegrationRegistry;
|
||||
import appeng.integration.IntegrationType;
|
||||
|
||||
|
||||
|
||||
public class OpenComputers extends BaseModule
|
||||
{
|
||||
@Reflected
|
||||
public static OpenComputers instance;
|
||||
|
||||
@Reflected
|
||||
public OpenComputers()
|
||||
{
|
||||
this.testClassExistence( li.cil.oc.api.Items.class );
|
||||
this.testClassExistence( li.cil.oc.api.Network.class );
|
||||
this.testClassExistence( li.cil.oc.api.network.Environment.class );
|
||||
this.testClassExistence( li.cil.oc.api.network.SidedEnvironment.class );
|
||||
this.testClassExistence( li.cil.oc.api.network.Node.class );
|
||||
this.testClassExistence( li.cil.oc.api.network.Message.class );
|
||||
IntegrationHelper.testClassExistence( this, li.cil.oc.api.Items.class );
|
||||
IntegrationHelper.testClassExistence( this, li.cil.oc.api.Network.class );
|
||||
IntegrationHelper.testClassExistence( this, li.cil.oc.api.network.Environment.class );
|
||||
IntegrationHelper.testClassExistence( this, li.cil.oc.api.network.SidedEnvironment.class );
|
||||
IntegrationHelper.testClassExistence( this, li.cil.oc.api.network.Node.class );
|
||||
IntegrationHelper.testClassExistence( this, li.cil.oc.api.network.Message.class );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init()
|
||||
{
|
||||
final IAppEngApi api = AEApi.instance();
|
||||
final IPartHelper partHelper = api.partHelper();
|
||||
|
||||
if( IntegrationRegistry.INSTANCE.isEnabled( IntegrationType.OpenComputers ) )
|
||||
{
|
||||
partHelper.registerNewLayer( "appeng.parts.layers.LayerSidedEnvironment", "li.cil.oc.api.network.SidedEnvironment" );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -31,6 +31,7 @@ import appeng.api.features.IP2PTunnelRegistry;
|
||||
import appeng.api.parts.IPartHelper;
|
||||
import appeng.helpers.Reflected;
|
||||
import appeng.integration.BaseModule;
|
||||
import appeng.integration.IntegrationHelper;
|
||||
import appeng.integration.IntegrationRegistry;
|
||||
import appeng.integration.IntegrationType;
|
||||
|
||||
@@ -45,10 +46,10 @@ public class PneumaticCraft extends BaseModule
|
||||
@Reflected
|
||||
public PneumaticCraft()
|
||||
{
|
||||
this.testClassExistence( pneumaticCraft.api.block.BlockSupplier.class );
|
||||
this.testClassExistence( pneumaticCraft.api.tileentity.ISidedPneumaticMachine.class );
|
||||
this.testClassExistence( pneumaticCraft.api.tileentity.AirHandlerSupplier.class );
|
||||
this.testClassExistence( pneumaticCraft.api.tileentity.IAirHandler.class );
|
||||
IntegrationHelper.testClassExistence( this, pneumaticCraft.api.block.BlockSupplier.class );
|
||||
IntegrationHelper.testClassExistence( this, pneumaticCraft.api.tileentity.ISidedPneumaticMachine.class );
|
||||
IntegrationHelper.testClassExistence( this, pneumaticCraft.api.tileentity.AirHandlerSupplier.class );
|
||||
IntegrationHelper.testClassExistence( this, pneumaticCraft.api.tileentity.IAirHandler.class );
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -24,19 +24,22 @@ import net.minecraft.item.ItemStack;
|
||||
import mods.railcraft.api.crafting.IRockCrusherRecipe;
|
||||
import mods.railcraft.api.crafting.RailcraftCraftingManager;
|
||||
|
||||
import appeng.helpers.Reflected;
|
||||
import appeng.integration.BaseModule;
|
||||
import appeng.integration.IntegrationHelper;
|
||||
import appeng.integration.abstraction.IRC;
|
||||
|
||||
|
||||
public class RC extends BaseModule implements IRC
|
||||
{
|
||||
|
||||
@Reflected
|
||||
public static RC instance;
|
||||
|
||||
@Reflected
|
||||
public RC()
|
||||
{
|
||||
this.testClassExistence( RailcraftCraftingManager.class );
|
||||
this.testClassExistence( IRockCrusherRecipe.class );
|
||||
IntegrationHelper.testClassExistence( this, mods.railcraft.api.crafting.RailcraftCraftingManager.class );
|
||||
IntegrationHelper.testClassExistence( this, mods.railcraft.api.crafting.IRockCrusherRecipe.class );
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -49,13 +52,10 @@ public class RC extends BaseModule implements IRC
|
||||
@Override
|
||||
public void init()
|
||||
{
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postInit()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,9 +25,14 @@ import net.minecraftforge.oredict.OreDictionary;
|
||||
import cpw.mods.fml.common.registry.GameRegistry;
|
||||
|
||||
import appeng.api.AEApi;
|
||||
import appeng.api.IAppEngApi;
|
||||
import appeng.api.config.TunnelType;
|
||||
import appeng.api.parts.IPartHelper;
|
||||
import appeng.helpers.Reflected;
|
||||
import appeng.integration.BaseModule;
|
||||
import appeng.integration.IntegrationHelper;
|
||||
import appeng.integration.IntegrationRegistry;
|
||||
import appeng.integration.IntegrationType;
|
||||
|
||||
|
||||
public final class RF extends BaseModule
|
||||
@@ -35,17 +40,25 @@ public final class RF extends BaseModule
|
||||
@Reflected
|
||||
public static RF instance;
|
||||
|
||||
@Reflected
|
||||
public RF()
|
||||
{
|
||||
this.testClassExistence( cofh.api.energy.IEnergyReceiver.class );
|
||||
this.testClassExistence( cofh.api.energy.IEnergyProvider.class );
|
||||
this.testClassExistence( cofh.api.energy.IEnergyHandler.class );
|
||||
this.testClassExistence( cofh.api.energy.IEnergyConnection.class );
|
||||
IntegrationHelper.testClassExistence( this, cofh.api.energy.IEnergyReceiver.class );
|
||||
IntegrationHelper.testClassExistence( this, cofh.api.energy.IEnergyProvider.class );
|
||||
IntegrationHelper.testClassExistence( this, cofh.api.energy.IEnergyHandler.class );
|
||||
IntegrationHelper.testClassExistence( this, cofh.api.energy.IEnergyConnection.class );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init()
|
||||
{
|
||||
final IAppEngApi api = AEApi.instance();
|
||||
final IPartHelper partHelper = api.partHelper();
|
||||
|
||||
if( IntegrationRegistry.INSTANCE.isEnabled( IntegrationType.RF ) )
|
||||
{
|
||||
partHelper.registerNewLayer( "appeng.parts.layers.LayerIEnergyHandler", "cofh.api.energy.IEnergyReceiver" );
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -19,28 +19,29 @@
|
||||
package appeng.integration.modules;
|
||||
|
||||
|
||||
import appeng.helpers.Reflected;
|
||||
import appeng.integration.BaseModule;
|
||||
import appeng.integration.IntegrationHelper;
|
||||
|
||||
|
||||
public class RFItem extends BaseModule
|
||||
{
|
||||
|
||||
@Reflected
|
||||
public static RFItem instance;
|
||||
|
||||
@Reflected
|
||||
public RFItem()
|
||||
{
|
||||
this.testClassExistence( cofh.api.energy.IEnergyContainerItem.class );
|
||||
IntegrationHelper.testClassExistence( this, cofh.api.energy.IEnergyContainerItem.class );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postInit()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,28 +19,30 @@
|
||||
package appeng.integration.modules;
|
||||
|
||||
|
||||
import appeng.helpers.Reflected;
|
||||
import appeng.integration.BaseModule;
|
||||
import appeng.integration.IntegrationHelper;
|
||||
|
||||
|
||||
public class RotaryCraft extends BaseModule
|
||||
{
|
||||
@Reflected
|
||||
public static RotaryCraft instance;
|
||||
|
||||
@Reflected
|
||||
public RotaryCraft()
|
||||
{
|
||||
this.testClassExistence( Reika.RotaryCraft.API.Power.AdvancedShaftPowerReceiver.class );
|
||||
this.testClassExistence( Reika.RotaryCraft.API.Interfaces.Transducerable.class );
|
||||
IntegrationHelper.testClassExistence( this, Reika.RotaryCraft.API.Power.AdvancedShaftPowerReceiver.class );
|
||||
IntegrationHelper.testClassExistence( this, Reika.RotaryCraft.API.Interfaces.Transducerable.class );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init() throws Throwable
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postInit()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,7 +24,9 @@ import cpw.mods.fml.common.event.FMLInterModComms;
|
||||
import mcp.mobius.waila.api.IWailaDataProvider;
|
||||
import mcp.mobius.waila.api.IWailaRegistrar;
|
||||
|
||||
import appeng.helpers.Reflected;
|
||||
import appeng.integration.BaseModule;
|
||||
import appeng.integration.IntegrationHelper;
|
||||
import appeng.integration.modules.waila.PartWailaDataProvider;
|
||||
import appeng.integration.modules.waila.TileWailaDataProvider;
|
||||
import appeng.tile.AEBaseTile;
|
||||
@@ -32,8 +34,19 @@ import appeng.tile.AEBaseTile;
|
||||
|
||||
public class Waila extends BaseModule
|
||||
{
|
||||
@Reflected
|
||||
public static Waila instance;
|
||||
|
||||
@Reflected
|
||||
public Waila()
|
||||
{
|
||||
IntegrationHelper.testClassExistence( this, mcp.mobius.waila.api.IWailaDataProvider.class );
|
||||
IntegrationHelper.testClassExistence( this, mcp.mobius.waila.api.IWailaRegistrar.class );
|
||||
IntegrationHelper.testClassExistence( this, mcp.mobius.waila.api.IWailaConfigHandler.class );
|
||||
IntegrationHelper.testClassExistence( this, mcp.mobius.waila.api.IWailaDataAccessor.class );
|
||||
IntegrationHelper.testClassExistence( this, mcp.mobius.waila.api.ITaggedList.class );
|
||||
}
|
||||
|
||||
public static void register( IWailaRegistrar registrar )
|
||||
{
|
||||
final IWailaDataProvider partHost = new PartWailaDataProvider();
|
||||
@@ -51,15 +64,11 @@ public class Waila extends BaseModule
|
||||
@Override
|
||||
public void init() throws Throwable
|
||||
{
|
||||
this.testClassExistence( IWailaDataProvider.class );
|
||||
this.testClassExistence( IWailaRegistrar.class );
|
||||
|
||||
FMLInterModComms.sendMessage( "Waila", "register", this.getClass().getName() + ".register" );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postInit()
|
||||
{
|
||||
// :P
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,13 +48,14 @@ import appeng.core.features.AEFeature;
|
||||
import appeng.core.sync.GuiBridge;
|
||||
import appeng.core.sync.network.NetworkHandler;
|
||||
import appeng.core.sync.packets.PacketClick;
|
||||
import appeng.integration.IntegrationType;
|
||||
import appeng.items.AEBaseItem;
|
||||
import appeng.items.contents.NetworkToolViewer;
|
||||
import appeng.transformer.annotations.Integration.Interface;
|
||||
import appeng.util.Platform;
|
||||
|
||||
|
||||
@Interface( iface = "buildcraft.api.tools.IToolWrench", iname = "BuildCraftCore" )
|
||||
@Interface( iface = "buildcraft.api.tools.IToolWrench", iname = IntegrationType.BuildCraftCore )
|
||||
public class ToolNetworkTool extends AEBaseItem implements IGuiItem, IAEWrench, IToolWrench
|
||||
{
|
||||
|
||||
|
||||
@@ -29,12 +29,13 @@ import ic2.api.item.IElectricItemManager;
|
||||
import ic2.api.item.ISpecialElectricItem;
|
||||
|
||||
import appeng.api.config.PowerUnits;
|
||||
import appeng.integration.IntegrationType;
|
||||
import appeng.transformer.annotations.Integration.Interface;
|
||||
import appeng.transformer.annotations.Integration.InterfaceList;
|
||||
import appeng.transformer.annotations.Integration.Method;
|
||||
|
||||
|
||||
@InterfaceList( value = { @Interface( iface = "ic2.api.item.ISpecialElectricItem", iname = "IC2" ), @Interface( iface = "ic2.api.item.IElectricItemManager", iname = "IC2" ) } )
|
||||
@InterfaceList( value = { @Interface( iface = "ic2.api.item.ISpecialElectricItem", iname = IntegrationType.IC2 ), @Interface( iface = "ic2.api.item.IElectricItemManager", iname = IntegrationType.IC2 ) } )
|
||||
public abstract class IC2 extends AERootPoweredItem implements IElectricItemManager, ISpecialElectricItem
|
||||
{
|
||||
public IC2( double powerCapacity, Optional<String> subName )
|
||||
@@ -135,7 +136,7 @@ public abstract class IC2 extends AERootPoweredItem implements IElectricItemMana
|
||||
}
|
||||
|
||||
@Override
|
||||
@Method( iname = "IC2" )
|
||||
@Method( iname = IntegrationType.IC2 )
|
||||
public IElectricItemManager getManager( ItemStack itemStack )
|
||||
{
|
||||
return this;
|
||||
|
||||
@@ -26,10 +26,11 @@ import net.minecraft.item.ItemStack;
|
||||
import cofh.api.energy.IEnergyContainerItem;
|
||||
|
||||
import appeng.api.config.PowerUnits;
|
||||
import appeng.integration.IntegrationType;
|
||||
import appeng.transformer.annotations.Integration.Interface;
|
||||
|
||||
|
||||
@Interface( iface = "cofh.api.energy.IEnergyContainerItem", iname = "RFItem" )
|
||||
@Interface( iface = "cofh.api.energy.IEnergyContainerItem", iname = IntegrationType.RFItem )
|
||||
public abstract class RedstoneFlux extends IC2 implements IEnergyContainerItem
|
||||
{
|
||||
public RedstoneFlux( double powerCapacity, Optional<String> subName )
|
||||
|
||||
@@ -34,12 +34,13 @@ import buildcraft.api.tools.IToolWrench;
|
||||
import appeng.api.implementations.items.IAEWrench;
|
||||
import appeng.api.util.DimensionalCoord;
|
||||
import appeng.core.features.AEFeature;
|
||||
import appeng.integration.IntegrationType;
|
||||
import appeng.items.AEBaseItem;
|
||||
import appeng.transformer.annotations.Integration.Interface;
|
||||
import appeng.util.Platform;
|
||||
|
||||
|
||||
@Interface( iface = "buildcraft.api.tools.IToolWrench", iname = "BuildCraftCore" )
|
||||
@Interface( iface = "buildcraft.api.tools.IToolWrench", iname = IntegrationType.BuildCraftCore )
|
||||
public class ToolQuartzWrench extends AEBaseItem implements IAEWrench, IToolWrench
|
||||
{
|
||||
|
||||
|
||||
@@ -25,7 +25,6 @@ import java.util.Deque;
|
||||
import java.util.EnumSet;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
@@ -52,6 +51,7 @@ import appeng.api.util.IReadOnlyCollection;
|
||||
import appeng.core.worlddata.WorldData;
|
||||
import appeng.hooks.TickHandler;
|
||||
import appeng.me.pathfinding.IPathItem;
|
||||
import appeng.util.IWorldCallable;
|
||||
import appeng.util.ReadOnlyCollection;
|
||||
|
||||
|
||||
@@ -669,7 +669,7 @@ public class GridNode implements IGridNode, IPathItem
|
||||
return this.lastUsedChannels;
|
||||
}
|
||||
|
||||
private static class MachineSecurityBreak implements Callable<Void>
|
||||
private static class MachineSecurityBreak implements IWorldCallable<Void>
|
||||
{
|
||||
private final GridNode node;
|
||||
|
||||
@@ -679,7 +679,7 @@ public class GridNode implements IGridNode, IPathItem
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void call() throws Exception
|
||||
public Void call(World world) throws Exception
|
||||
{
|
||||
this.node.getMachine().securityBreak();
|
||||
|
||||
|
||||
+3
-3
@@ -314,9 +314,9 @@ public class CraftingGridCache implements ICraftingGrid, ICraftingProviderHelper
|
||||
{
|
||||
this.craftingCPUClusters.add( cluster );
|
||||
|
||||
if( cluster.myLastLink != null )
|
||||
if( cluster.getLastCraftingLink() != null )
|
||||
{
|
||||
this.addLink( (CraftingLink) cluster.myLastLink );
|
||||
this.addLink( (CraftingLink) cluster.getLastCraftingLink() );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -641,7 +641,7 @@ public class CraftingGridCache implements ICraftingGrid, ICraftingProviderHelper
|
||||
while( this.iterator.hasNext() && this.cpuCluster == null )
|
||||
{
|
||||
this.cpuCluster = this.iterator.next();
|
||||
if( !this.cpuCluster.isActive() || this.cpuCluster.isDestroyed )
|
||||
if( !this.cpuCluster.isActive() || this.cpuCluster.isDestroyed() )
|
||||
{
|
||||
this.cpuCluster = null;
|
||||
}
|
||||
|
||||
+5
-3
@@ -20,13 +20,15 @@ package appeng.me.cache.helpers;
|
||||
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import appeng.api.networking.IGridNode;
|
||||
import appeng.parts.p2p.PartP2PTunnelME;
|
||||
import appeng.util.IWorldCallable;
|
||||
|
||||
|
||||
public class Connections implements Callable
|
||||
public class Connections implements IWorldCallable<Void>
|
||||
{
|
||||
|
||||
public final HashMap<IGridNode, TunnelConnection> connections = new HashMap<IGridNode, TunnelConnection>();
|
||||
@@ -40,7 +42,7 @@ public class Connections implements Callable
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object call() throws Exception
|
||||
public Void call( World world ) throws Exception
|
||||
{
|
||||
this.me.updateConnections( this );
|
||||
|
||||
|
||||
@@ -80,31 +80,31 @@ import appeng.util.Platform;
|
||||
import appeng.util.item.AEItemStack;
|
||||
|
||||
|
||||
public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
public final class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
{
|
||||
|
||||
public final WorldCoord min;
|
||||
public final WorldCoord max;
|
||||
final int[] usedOps = new int[3];
|
||||
final Map<ICraftingPatternDetails, TaskProgress> tasks = new HashMap<ICraftingPatternDetails, TaskProgress>();
|
||||
private final WorldCoord min;
|
||||
private final WorldCoord max;
|
||||
private final int[] usedOps = new int[3];
|
||||
private final Map<ICraftingPatternDetails, TaskProgress> tasks = new HashMap<ICraftingPatternDetails, TaskProgress>();
|
||||
// INSTANCE sate
|
||||
private final LinkedList<TileCraftingTile> tiles = new LinkedList<TileCraftingTile>();
|
||||
private final LinkedList<TileCraftingTile> storage = new LinkedList<TileCraftingTile>();
|
||||
private final LinkedList<TileCraftingMonitorTile> status = new LinkedList<TileCraftingMonitorTile>();
|
||||
private final HashMap<IMEMonitorHandlerReceiver<IAEItemStack>, Object> listeners = new HashMap<IMEMonitorHandlerReceiver<IAEItemStack>, Object>();
|
||||
public ICraftingLink myLastLink;
|
||||
public String myName = "";
|
||||
public boolean isDestroyed = false;
|
||||
private ICraftingLink myLastLink;
|
||||
private String myName = "";
|
||||
private boolean isDestroyed = false;
|
||||
/**
|
||||
* crafting job info
|
||||
*/
|
||||
MECraftingInventory inventory = new MECraftingInventory();
|
||||
IAEItemStack finalOutput;
|
||||
boolean waiting = false;
|
||||
IItemList<IAEItemStack> waitingFor = AEApi.instance().storage().createItemList();
|
||||
long availableStorage = 0;
|
||||
MachineSource machineSrc = null;
|
||||
int accelerator = 0;
|
||||
private MECraftingInventory inventory = new MECraftingInventory();
|
||||
private IAEItemStack finalOutput;
|
||||
private boolean waiting = false;
|
||||
private IItemList<IAEItemStack> waitingFor = AEApi.instance().storage().createItemList();
|
||||
private long availableStorage = 0;
|
||||
private MachineSource machineSrc = null;
|
||||
private int accelerator = 0;
|
||||
private boolean isComplete = true;
|
||||
private int remainingOperations;
|
||||
private boolean somethingChanged;
|
||||
@@ -120,6 +120,16 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
this.max = max;
|
||||
}
|
||||
|
||||
public boolean isDestroyed()
|
||||
{
|
||||
return this.isDestroyed;
|
||||
}
|
||||
|
||||
public ICraftingLink getLastCraftingLink()
|
||||
{
|
||||
return this.myLastLink;
|
||||
}
|
||||
|
||||
/**
|
||||
* add a new Listener to the monitor, be sure to properly remove yourself when your done.
|
||||
*/
|
||||
@@ -165,10 +175,10 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
|
||||
for( TileCraftingTile r : this.tiles )
|
||||
{
|
||||
IGridNode n = r.getActionableNode();
|
||||
final IGridNode n = r.getActionableNode();
|
||||
if( n != null && !posted )
|
||||
{
|
||||
IGrid g = n.getGrid();
|
||||
final IGrid g = n.getGrid();
|
||||
if( g != null )
|
||||
{
|
||||
g.postEvent( new MENetworkCraftingCpuChange( n ) );
|
||||
@@ -216,7 +226,7 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
{
|
||||
if( input instanceof IAEItemStack )
|
||||
{
|
||||
IAEItemStack is = this.waitingFor.findPrecise( (IAEItemStack) input );
|
||||
final IAEItemStack is = this.waitingFor.findPrecise( (IAEItemStack) input );
|
||||
if( is != null && is.getStackSize() > 0 )
|
||||
{
|
||||
return true;
|
||||
@@ -227,11 +237,16 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
|
||||
public IAEStack injectItems( IAEStack input, Actionable type, BaseActionSource src )
|
||||
{
|
||||
if( input instanceof IAEItemStack && type == Actionable.SIMULATE )// causes crafting to lock up?
|
||||
if( !( input instanceof IAEItemStack ) )
|
||||
{
|
||||
IAEItemStack what = (IAEItemStack) input.copy();
|
||||
IAEItemStack is = this.waitingFor.findPrecise( what );
|
||||
return input;
|
||||
}
|
||||
|
||||
final IAEItemStack what = (IAEItemStack) input.copy();
|
||||
final IAEItemStack is = this.waitingFor.findPrecise( what );
|
||||
|
||||
if( type == Actionable.SIMULATE )// causes crafting to lock up?
|
||||
{
|
||||
if( is != null && is.getStackSize() > 0 )
|
||||
{
|
||||
if( is.getStackSize() >= what.getStackSize() )
|
||||
@@ -249,10 +264,10 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
return null;
|
||||
}
|
||||
|
||||
IAEItemStack leftOver = what.copy();
|
||||
final IAEItemStack leftOver = what.copy();
|
||||
leftOver.decStackSize( is.getStackSize() );
|
||||
|
||||
IAEItemStack used = what.copy();
|
||||
final IAEItemStack used = what.copy();
|
||||
used.setStackSize( is.getStackSize() );
|
||||
|
||||
if( this.finalOutput.equals( what ) )
|
||||
@@ -269,27 +284,33 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
return leftOver;
|
||||
}
|
||||
}
|
||||
else if( input instanceof IAEItemStack && type == Actionable.MODULATE )
|
||||
else if( type == Actionable.MODULATE )
|
||||
{
|
||||
IAEItemStack what = (IAEItemStack) input;
|
||||
IAEItemStack is = this.waitingFor.findPrecise( what );
|
||||
|
||||
if( is != null && is.getStackSize() > 0 )
|
||||
{
|
||||
this.waiting = false;
|
||||
|
||||
this.postChange( (IAEItemStack) input, src );
|
||||
this.postChange( what, src );
|
||||
|
||||
if( is.getStackSize() >= input.getStackSize() )
|
||||
if( is.getStackSize() >= what.getStackSize() )
|
||||
{
|
||||
is.decStackSize( input.getStackSize() );
|
||||
this.updateElapsedTime( (IAEItemStack) input );
|
||||
is.decStackSize( what.getStackSize() );
|
||||
|
||||
this.updateElapsedTime( what );
|
||||
this.markDirty();
|
||||
this.postCraftingStatusChange( is );
|
||||
|
||||
if( this.finalOutput.equals( input ) )
|
||||
if( this.finalOutput.equals( what ) )
|
||||
{
|
||||
this.finalOutput.decStackSize( input.getStackSize() );
|
||||
IAEStack leftover = what;
|
||||
|
||||
this.finalOutput.decStackSize( what.getStackSize() );
|
||||
|
||||
if( this.myLastLink != null )
|
||||
{
|
||||
leftover = ( (CraftingLink) this.myLastLink ).injectItems( what, type );
|
||||
}
|
||||
|
||||
if( this.finalOutput.getStackSize() <= 0 )
|
||||
{
|
||||
this.completeJob();
|
||||
@@ -297,19 +318,14 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
|
||||
this.updateCPU();
|
||||
|
||||
if( this.myLastLink != null )
|
||||
{
|
||||
return ( (CraftingLink) this.myLastLink ).injectItems( (IAEItemStack) input, type );
|
||||
}
|
||||
|
||||
return input; // ignore it.
|
||||
return leftover; // ignore it.
|
||||
}
|
||||
|
||||
// 2000
|
||||
return this.inventory.injectItems( what, type, src );
|
||||
}
|
||||
|
||||
IAEItemStack insert = what.copy();
|
||||
final IAEItemStack insert = what.copy();
|
||||
insert.setStackSize( is.getStackSize() );
|
||||
what.decStackSize( is.getStackSize() );
|
||||
|
||||
@@ -317,26 +333,25 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
|
||||
if( this.finalOutput.equals( insert ) )
|
||||
{
|
||||
IAEStack leftover = input;
|
||||
|
||||
this.finalOutput.decStackSize( insert.getStackSize() );
|
||||
|
||||
if( this.myLastLink != null )
|
||||
{
|
||||
what.add( ( (CraftingLink) this.myLastLink ).injectItems( insert.copy(), type ) );
|
||||
leftover = what;
|
||||
}
|
||||
|
||||
if( this.finalOutput.getStackSize() <= 0 )
|
||||
{
|
||||
this.completeJob();
|
||||
}
|
||||
|
||||
this.updateCPU();
|
||||
this.markDirty();
|
||||
|
||||
if( this.myLastLink != null )
|
||||
{
|
||||
what.add( ( (CraftingLink) this.myLastLink ).injectItems( insert.copy(), type ) );
|
||||
return what;
|
||||
}
|
||||
|
||||
if( this.myLastLink != null )
|
||||
{
|
||||
return ( (CraftingLink) this.myLastLink ).injectItems( (IAEItemStack) input, type );
|
||||
}
|
||||
|
||||
return input; // ignore it.
|
||||
return leftover; // ignore it.
|
||||
}
|
||||
|
||||
this.inventory.injectItems( insert, type, src );
|
||||
@@ -351,29 +366,29 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
|
||||
protected void postChange( IAEItemStack diff, BaseActionSource src )
|
||||
{
|
||||
Iterator<Entry<IMEMonitorHandlerReceiver<IAEItemStack>, Object>> i = this.getListeners();
|
||||
|
||||
ImmutableList<IAEItemStack> single = null;
|
||||
final Iterator<Entry<IMEMonitorHandlerReceiver<IAEItemStack>, Object>> i = this.getListeners();
|
||||
|
||||
// protect integrity
|
||||
if( i.hasNext() )
|
||||
{
|
||||
single = ImmutableList.of( diff.copy() );
|
||||
final ImmutableList<IAEItemStack> single = ImmutableList.of( diff.copy() );
|
||||
|
||||
while( i.hasNext() )
|
||||
{
|
||||
final Entry<IMEMonitorHandlerReceiver<IAEItemStack>, Object> o = i.next();
|
||||
final IMEMonitorHandlerReceiver<IAEItemStack> receiver = o.getKey();
|
||||
|
||||
if( receiver.isValid( o.getValue() ) )
|
||||
{
|
||||
receiver.postChange( null, single, src );
|
||||
}
|
||||
else
|
||||
{
|
||||
i.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
while( i.hasNext() )
|
||||
{
|
||||
Entry<IMEMonitorHandlerReceiver<IAEItemStack>, Object> o = i.next();
|
||||
IMEMonitorHandlerReceiver<IAEItemStack> receiver = o.getKey();
|
||||
if( receiver.isValid( o.getValue() ) )
|
||||
{
|
||||
receiver.postChange( null, single, src );
|
||||
}
|
||||
else
|
||||
{
|
||||
i.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void markDirty()
|
||||
@@ -388,11 +403,11 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
return;
|
||||
}
|
||||
|
||||
CraftingGridCache sg = this.getGrid().getCache( ICraftingGrid.class );
|
||||
final CraftingGridCache sg = this.getGrid().getCache( ICraftingGrid.class );
|
||||
|
||||
if( sg.interestManager.containsKey( diff ) )
|
||||
{
|
||||
Collection<CraftingWatcher> list = sg.interestManager.get( diff );
|
||||
final Collection<CraftingWatcher> list = sg.interestManager.get( diff );
|
||||
|
||||
if( !list.isEmpty() )
|
||||
{
|
||||
@@ -449,10 +464,10 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
{
|
||||
for( TileCraftingTile r : this.tiles )
|
||||
{
|
||||
IGridNode gn = r.getActionableNode();
|
||||
final IGridNode gn = r.getActionableNode();
|
||||
if( gn != null )
|
||||
{
|
||||
IGrid g = gn.getGrid();
|
||||
final IGrid g = gn.getGrid();
|
||||
if( g != null )
|
||||
{
|
||||
return r.getActionableNode().getGrid();
|
||||
@@ -476,8 +491,8 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
{
|
||||
fuzz = fuzz.copy();
|
||||
fuzz.setStackSize( g.getStackSize() );
|
||||
IAEItemStack ais = this.inventory.extractItems( fuzz, Actionable.SIMULATE, this.machineSrc );
|
||||
ItemStack is = ais == null ? null : ais.getItemStack();
|
||||
final IAEItemStack ais = this.inventory.extractItems( fuzz, Actionable.SIMULATE, this.machineSrc );
|
||||
final ItemStack is = ais == null ? null : ais.getItemStack();
|
||||
|
||||
if( is != null && is.stackSize == g.getStackSize() )
|
||||
{
|
||||
@@ -498,8 +513,8 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
}
|
||||
else
|
||||
{
|
||||
IAEItemStack ais = this.inventory.extractItems( g.copy(), Actionable.SIMULATE, this.machineSrc );
|
||||
ItemStack is = ais == null ? null : ais.getItemStack();
|
||||
final IAEItemStack ais = this.inventory.extractItems( g.copy(), Actionable.SIMULATE, this.machineSrc );
|
||||
final ItemStack is = ais == null ? null : ais.getItemStack();
|
||||
|
||||
if( is == null || is.stackSize < g.getStackSize() )
|
||||
{
|
||||
@@ -529,7 +544,7 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
this.myLastLink = null;
|
||||
this.tasks.clear();
|
||||
|
||||
ImmutableSet<IAEItemStack> items = ImmutableSet.copyOf( this.waitingFor );
|
||||
final ImmutableSet<IAEItemStack> items = ImmutableSet.copyOf( this.waitingFor );
|
||||
|
||||
this.waitingFor.resetStatus();
|
||||
|
||||
@@ -578,7 +593,7 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
}
|
||||
|
||||
this.remainingOperations = this.accelerator + 1 - ( this.usedOps[0] + this.usedOps[1] + this.usedOps[2] );
|
||||
int started = this.remainingOperations;
|
||||
final int started = this.remainingOperations;
|
||||
|
||||
if( this.remainingOperations > 0 )
|
||||
{
|
||||
@@ -601,17 +616,20 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
|
||||
private void executeCrafting( IEnergyGrid eg, CraftingGridCache cc )
|
||||
{
|
||||
Iterator<Entry<ICraftingPatternDetails, TaskProgress>> i = this.tasks.entrySet().iterator();
|
||||
final Iterator<Entry<ICraftingPatternDetails, TaskProgress>> i = this.tasks.entrySet().iterator();
|
||||
|
||||
while( i.hasNext() )
|
||||
{
|
||||
Entry<ICraftingPatternDetails, TaskProgress> e = i.next();
|
||||
final Entry<ICraftingPatternDetails, TaskProgress> e = i.next();
|
||||
|
||||
if( e.getValue().value <= 0 )
|
||||
{
|
||||
i.remove();
|
||||
continue;
|
||||
}
|
||||
|
||||
ICraftingPatternDetails details = e.getKey();
|
||||
final ICraftingPatternDetails details = e.getKey();
|
||||
|
||||
if( this.canCraft( details, details.getCondensedInputs() ) )
|
||||
{
|
||||
InventoryCrafting ic = null;
|
||||
@@ -627,9 +645,9 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
{
|
||||
if( ic == null )
|
||||
{
|
||||
IAEItemStack[] input = details.getInputs();
|
||||
|
||||
final IAEItemStack[] input = details.getInputs();
|
||||
double sum = 0;
|
||||
|
||||
for( IAEItemStack anInput : input )
|
||||
{
|
||||
if( anInput != null )
|
||||
@@ -649,10 +667,10 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
|
||||
for( int x = 0; x < input.length; x++ )
|
||||
{
|
||||
|
||||
if( input[x] != null )
|
||||
{
|
||||
found = false;
|
||||
|
||||
if( details.isCraftable() )
|
||||
{
|
||||
for( IAEItemStack fuzz : this.inventory.getItemList().findFuzzy( input[x], FuzzyMode.IGNORE_ALL ) )
|
||||
@@ -662,8 +680,8 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
|
||||
if( details.isValidItemForSlot( x, fuzz.getItemStack(), this.getWorld() ) )
|
||||
{
|
||||
IAEItemStack ais = this.inventory.extractItems( fuzz, Actionable.MODULATE, this.machineSrc );
|
||||
ItemStack is = ais == null ? null : ais.getItemStack();
|
||||
final IAEItemStack ais = this.inventory.extractItems( fuzz, Actionable.MODULATE, this.machineSrc );
|
||||
final ItemStack is = ais == null ? null : ais.getItemStack();
|
||||
|
||||
if( is != null )
|
||||
{
|
||||
@@ -677,8 +695,8 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
}
|
||||
else
|
||||
{
|
||||
IAEItemStack ais = this.inventory.extractItems( input[x].copy(), Actionable.MODULATE, this.machineSrc );
|
||||
ItemStack is = ais == null ? null : ais.getItemStack();
|
||||
final IAEItemStack ais = this.inventory.extractItems( input[x].copy(), Actionable.MODULATE, this.machineSrc );
|
||||
final ItemStack is = ais == null ? null : ais.getItemStack();
|
||||
|
||||
if( is != null )
|
||||
{
|
||||
@@ -704,7 +722,7 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
// put stuff back..
|
||||
for( int x = 0; x < ic.getSizeInventory(); x++ )
|
||||
{
|
||||
ItemStack is = ic.getStackInSlot( x );
|
||||
final ItemStack is = ic.getStackInSlot( x );
|
||||
if( is != null )
|
||||
{
|
||||
this.inventory.injectItems( AEItemStack.create( is ), Actionable.MODULATE, this.machineSrc );
|
||||
@@ -733,10 +751,10 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
|
||||
for( int x = 0; x < ic.getSizeInventory(); x++ )
|
||||
{
|
||||
ItemStack output = Platform.getContainerItem( ic.getStackInSlot( x ) );
|
||||
final ItemStack output = Platform.getContainerItem( ic.getStackInSlot( x ) );
|
||||
if( output != null )
|
||||
{
|
||||
IAEItemStack cItem = AEItemStack.create( output );
|
||||
final IAEItemStack cItem = AEItemStack.create( output );
|
||||
this.postChange( cItem, this.machineSrc );
|
||||
this.waitingFor.add( cItem );
|
||||
this.postCraftingStatusChange( cItem );
|
||||
@@ -766,7 +784,7 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
// put stuff back..
|
||||
for( int x = 0; x < ic.getSizeInventory(); x++ )
|
||||
{
|
||||
ItemStack is = ic.getStackInSlot( x );
|
||||
final ItemStack is = ic.getStackInSlot( x );
|
||||
if( is != null )
|
||||
{
|
||||
this.inventory.injectItems( AEItemStack.create( is ), Actionable.MODULATE, this.machineSrc );
|
||||
@@ -779,14 +797,15 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
|
||||
private void storeItems()
|
||||
{
|
||||
IGrid g = this.getGrid();
|
||||
final IGrid g = this.getGrid();
|
||||
|
||||
if( g == null )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
IStorageGrid sg = g.getCache( IStorageGrid.class );
|
||||
IMEInventory<IAEItemStack> ii = sg.getItemInventory();
|
||||
final IStorageGrid sg = g.getCache( IStorageGrid.class );
|
||||
final IMEInventory<IAEItemStack> ii = sg.getItemInventory();
|
||||
|
||||
for( IAEItemStack is : this.inventory.getItemList() )
|
||||
{
|
||||
@@ -829,9 +848,9 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
return null;
|
||||
}
|
||||
|
||||
IStorageGrid sg = g.getCache( IStorageGrid.class );
|
||||
IMEInventory<IAEItemStack> storage = sg.getItemInventory();
|
||||
MECraftingInventory ci = new MECraftingInventory( storage, true, false, false );
|
||||
final IStorageGrid sg = g.getCache( IStorageGrid.class );
|
||||
final IMEInventory<IAEItemStack> storage = sg.getItemInventory();
|
||||
final MECraftingInventory ci = new MECraftingInventory( storage, true, false, false );
|
||||
|
||||
try
|
||||
{
|
||||
@@ -845,7 +864,7 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
this.markDirty();
|
||||
|
||||
this.updateCPU();
|
||||
String craftID = this.generateCraftingID();
|
||||
final String craftID = this.generateCraftingID();
|
||||
|
||||
this.myLastLink = new CraftingLink( this.generateLinkData( craftID, requestingMachine == null, false ), this );
|
||||
|
||||
@@ -856,12 +875,12 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
return this.myLastLink;
|
||||
}
|
||||
|
||||
ICraftingLink whatLink = new CraftingLink( this.generateLinkData( craftID, false, true ), requestingMachine );
|
||||
final ICraftingLink whatLink = new CraftingLink( this.generateLinkData( craftID, false, true ), requestingMachine );
|
||||
|
||||
this.submitLink( this.myLastLink );
|
||||
this.submitLink( whatLink );
|
||||
|
||||
IItemList<IAEItemStack> list = AEApi.instance().storage().createItemList();
|
||||
final IItemList<IAEItemStack> list = AEApi.instance().storage().createItemList();
|
||||
this.getListOfItem( list, CraftingItemList.ALL );
|
||||
for( IAEItemStack ge : list )
|
||||
{
|
||||
@@ -889,7 +908,8 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
@Override
|
||||
public boolean isBusy()
|
||||
{
|
||||
Iterator<Entry<ICraftingPatternDetails, TaskProgress>> i = this.tasks.entrySet().iterator();
|
||||
final Iterator<Entry<ICraftingPatternDetails, TaskProgress>> i = this.tasks.entrySet().iterator();
|
||||
|
||||
while( i.hasNext() )
|
||||
{
|
||||
if( i.next().getValue().value <= 0 )
|
||||
@@ -927,13 +947,14 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
|
||||
public boolean isActive()
|
||||
{
|
||||
TileCraftingTile core = this.getCore();
|
||||
final TileCraftingTile core = this.getCore();
|
||||
|
||||
if( core == null )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
IGridNode node = core.getActionableNode();
|
||||
final IGridNode node = core.getActionableNode();
|
||||
if( node == null )
|
||||
{
|
||||
return false;
|
||||
@@ -944,16 +965,16 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
|
||||
private String generateCraftingID()
|
||||
{
|
||||
long now = System.currentTimeMillis();
|
||||
int hash = System.identityHashCode( this );
|
||||
int hmm = this.finalOutput == null ? 0 : this.finalOutput.hashCode();
|
||||
final long now = System.currentTimeMillis();
|
||||
final int hash = System.identityHashCode( this );
|
||||
final int hmm = this.finalOutput == null ? 0 : this.finalOutput.hashCode();
|
||||
|
||||
return Long.toString( now, Character.MAX_RADIX ) + '-' + Integer.toString( hash, Character.MAX_RADIX ) + '-' + Integer.toString( hmm, Character.MAX_RADIX );
|
||||
}
|
||||
|
||||
private NBTTagCompound generateLinkData( String craftingID, boolean standalone, boolean req )
|
||||
{
|
||||
NBTTagCompound tag = new NBTTagCompound();
|
||||
final NBTTagCompound tag = new NBTTagCompound();
|
||||
|
||||
tag.setString( "CraftID", craftingID );
|
||||
tag.setBoolean( "canceled", false );
|
||||
@@ -968,7 +989,7 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
{
|
||||
if( this.getGrid() != null )
|
||||
{
|
||||
CraftingGridCache cc = this.getGrid().getCache( ICraftingGrid.class );
|
||||
final CraftingGridCache cc = this.getGrid().getCache( ICraftingGrid.class );
|
||||
cc.addLink( (CraftingLink) myLastLink2 );
|
||||
}
|
||||
}
|
||||
@@ -1045,6 +1066,7 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
public IAEItemStack getItemStack( IAEItemStack what, CraftingItemList storage2 )
|
||||
{
|
||||
IAEItemStack is;
|
||||
|
||||
switch( storage2 )
|
||||
{
|
||||
case STORAGE:
|
||||
@@ -1094,15 +1116,15 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
|
||||
if( this.myLastLink != null )
|
||||
{
|
||||
NBTTagCompound link = new NBTTagCompound();
|
||||
final NBTTagCompound link = new NBTTagCompound();
|
||||
this.myLastLink.writeToNBT( link );
|
||||
data.setTag( "link", link );
|
||||
}
|
||||
|
||||
NBTTagList list = new NBTTagList();
|
||||
final NBTTagList list = new NBTTagList();
|
||||
for( Entry<ICraftingPatternDetails, TaskProgress> e : this.tasks.entrySet() )
|
||||
{
|
||||
NBTTagCompound item = this.writeItem( AEItemStack.create( e.getKey().getPattern() ) );
|
||||
final NBTTagCompound item = this.writeItem( AEItemStack.create( e.getKey().getPattern() ) );
|
||||
item.setLong( "craftingProgress", e.getValue().value );
|
||||
list.appendTag( item );
|
||||
}
|
||||
@@ -1117,7 +1139,7 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
|
||||
private NBTTagCompound writeItem( IAEItemStack finalOutput2 )
|
||||
{
|
||||
NBTTagCompound out = new NBTTagCompound();
|
||||
final NBTTagCompound out = new NBTTagCompound();
|
||||
|
||||
if( finalOutput2 != null )
|
||||
{
|
||||
@@ -1129,7 +1151,7 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
|
||||
private NBTTagList writeList( IItemList<IAEItemStack> myList )
|
||||
{
|
||||
NBTTagList out = new NBTTagList();
|
||||
final NBTTagList out = new NBTTagList();
|
||||
|
||||
for( IAEItemStack ais : myList )
|
||||
{
|
||||
@@ -1141,7 +1163,7 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
|
||||
public void done()
|
||||
{
|
||||
TileCraftingTile core = this.getCore();
|
||||
final TileCraftingTile core = this.getCore();
|
||||
|
||||
core.isCoreBlock = true;
|
||||
|
||||
@@ -1168,23 +1190,23 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
|
||||
if( data.hasKey( "link" ) )
|
||||
{
|
||||
NBTTagCompound link = data.getCompoundTag( "link" );
|
||||
final NBTTagCompound link = data.getCompoundTag( "link" );
|
||||
this.myLastLink = new CraftingLink( link, this );
|
||||
this.submitLink( this.myLastLink );
|
||||
}
|
||||
|
||||
NBTTagList list = data.getTagList( "tasks", 10 );
|
||||
final NBTTagList list = data.getTagList( "tasks", 10 );
|
||||
for( int x = 0; x < list.tagCount(); x++ )
|
||||
{
|
||||
NBTTagCompound item = list.getCompoundTagAt( x );
|
||||
IAEItemStack pattern = AEItemStack.loadItemStackFromNBT( item );
|
||||
final NBTTagCompound item = list.getCompoundTagAt( x );
|
||||
final IAEItemStack pattern = AEItemStack.loadItemStackFromNBT( item );
|
||||
if( pattern != null && pattern.getItem() instanceof ICraftingPatternItem )
|
||||
{
|
||||
ICraftingPatternItem cpi = (ICraftingPatternItem) pattern.getItem();
|
||||
ICraftingPatternDetails details = cpi.getPatternForItem( pattern.getItemStack(), this.getWorld() );
|
||||
final ICraftingPatternItem cpi = (ICraftingPatternItem) pattern.getItem();
|
||||
final ICraftingPatternDetails details = cpi.getPatternForItem( pattern.getItemStack(), this.getWorld() );
|
||||
if( details != null )
|
||||
{
|
||||
TaskProgress tp = new TaskProgress();
|
||||
final TaskProgress tp = new TaskProgress();
|
||||
tp.value = item.getLong( "craftingProgress" );
|
||||
this.tasks.put( details, tp );
|
||||
}
|
||||
@@ -1225,7 +1247,8 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
|
||||
private IItemList<IAEItemStack> readList( NBTTagList tag )
|
||||
{
|
||||
IItemList<IAEItemStack> out = AEApi.instance().storage().createItemList();
|
||||
final IItemList<IAEItemStack> out = AEApi.instance().storage().createItemList();
|
||||
|
||||
if( tag == null )
|
||||
{
|
||||
return out;
|
||||
@@ -1233,7 +1256,7 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
|
||||
for( int x = 0; x < tag.tagCount(); x++ )
|
||||
{
|
||||
IAEItemStack ais = AEItemStack.loadItemStackFromNBT( tag.getCompoundTagAt( x ) );
|
||||
final IAEItemStack ais = AEItemStack.loadItemStackFromNBT( tag.getCompoundTagAt( x ) );
|
||||
if( ais != null )
|
||||
{
|
||||
out.add( ais );
|
||||
@@ -1250,13 +1273,14 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
|
||||
public boolean isMaking( IAEItemStack what )
|
||||
{
|
||||
IAEItemStack wat = this.waitingFor.findPrecise( what );
|
||||
final IAEItemStack wat = this.waitingFor.findPrecise( what );
|
||||
return wat != null && wat.getStackSize() > 0;
|
||||
}
|
||||
|
||||
public void breakCluster()
|
||||
{
|
||||
TileCraftingTile t = this.getCore();
|
||||
final TileCraftingTile t = this.getCore();
|
||||
|
||||
if( t != null )
|
||||
{
|
||||
t.breakCluster();
|
||||
@@ -1267,9 +1291,10 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
{
|
||||
this.lastTime = System.nanoTime();
|
||||
this.elapsedTime = 0;
|
||||
int itemCount = 0;
|
||||
|
||||
IItemList<IAEItemStack> list = AEApi.instance().storage().createItemList();
|
||||
int itemCount = 0;
|
||||
final IItemList<IAEItemStack> list = AEApi.instance().storage().createItemList();
|
||||
|
||||
this.getListOfItem( list, CraftingItemList.ACTIVE );
|
||||
this.getListOfItem( list, CraftingItemList.PENDING );
|
||||
|
||||
@@ -1307,7 +1332,6 @@ public class CraftingCPUCluster implements IAECluster, ICraftingCPU
|
||||
|
||||
static class TaskProgress
|
||||
{
|
||||
|
||||
long value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -113,11 +113,16 @@ public class NetworkInventoryHandler<T extends IAEStack<T>> implements IMEInvent
|
||||
}
|
||||
}
|
||||
|
||||
// We need to ignore prioritized inventories in the second pass. If they were not able to store everything
|
||||
// during the first pass, they will do so in the second, but as this is stateless we will just report twice
|
||||
// the amount of storable items.
|
||||
// ignores craftingcache on the second pass.
|
||||
ii = invList.iterator();
|
||||
while( ii.hasNext() && input != null )
|
||||
{
|
||||
IMEInventoryHandler<T> inv = ii.next();
|
||||
if( inv.validForPass( 2 ) && inv.canAccept( input ) )// ignore crafting on the second pass.
|
||||
|
||||
if( inv.validForPass( 2 ) && inv.canAccept( input ) && !inv.isPrioritized( input ) )
|
||||
{
|
||||
input = inv.injectItems( input, type, src );
|
||||
}
|
||||
|
||||
@@ -20,7 +20,6 @@ package appeng.parts.automation;
|
||||
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
@@ -34,6 +33,7 @@ import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.WorldServer;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
@@ -65,11 +65,12 @@ import appeng.hooks.TickHandler;
|
||||
import appeng.me.GridAccessException;
|
||||
import appeng.parts.PartBasicState;
|
||||
import appeng.server.ServerHelper;
|
||||
import appeng.util.IWorldCallable;
|
||||
import appeng.util.Platform;
|
||||
import appeng.util.item.AEItemStack;
|
||||
|
||||
|
||||
public class PartAnnihilationPlane extends PartBasicState implements IGridTickable, Callable<TickRateModulation>
|
||||
public class PartAnnihilationPlane extends PartBasicState implements IGridTickable, IWorldCallable<TickRateModulation>
|
||||
{
|
||||
private final static IIcon SIDE_ICON = CableBusTextures.PartPlaneSides.getIcon();
|
||||
private final static IIcon BACK_ICON = CableBusTextures.PartTransitionPlaneBack.getIcon();
|
||||
@@ -86,7 +87,7 @@ public class PartAnnihilationPlane extends PartBasicState implements IGridTickab
|
||||
}
|
||||
|
||||
@Override
|
||||
public TickRateModulation call() throws Exception
|
||||
public TickRateModulation call( World world ) throws Exception
|
||||
{
|
||||
this.breaking = false;
|
||||
return this.breakBlock( true );
|
||||
@@ -358,7 +359,36 @@ public class PartAnnihilationPlane extends PartBasicState implements IGridTickab
|
||||
entityItem.getEntityItem().stackSize = newStackSize;
|
||||
|
||||
return changed;
|
||||
}
|
||||
|
||||
/**
|
||||
* Spawns an overflow item as new {@link EntityItem} into the {@link World}
|
||||
*
|
||||
* @param w the world to spawn it
|
||||
* @param x x coordinate
|
||||
* @param y y coordinate
|
||||
* @param z coordinate
|
||||
* @param overflow the item to spawn
|
||||
*/
|
||||
private void spawnOverflow( IAEItemStack overflow )
|
||||
{
|
||||
if( overflow == null )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final TileEntity te = this.getTile();
|
||||
final WorldServer w = (WorldServer) te.getWorldObj();
|
||||
final double x = te.xCoord + this.side.offsetX + .5d;
|
||||
final double y = te.yCoord + this.side.offsetY + .5d;
|
||||
final double z = te.zCoord + this.side.offsetZ + .5d;
|
||||
|
||||
final EntityItem overflowEntity = new EntityItem( w, x, y, z, overflow.getItemStack() );
|
||||
overflowEntity.motionX = 0;
|
||||
overflowEntity.motionY = 0;
|
||||
overflowEntity.motionZ = 0;
|
||||
|
||||
w.spawnEntityInWorld( overflowEntity );
|
||||
}
|
||||
|
||||
protected boolean isAnnihilationPlane( TileEntity blockTileEntity, ForgeDirection side )
|
||||
@@ -544,7 +574,8 @@ public class PartAnnihilationPlane extends PartBasicState implements IGridTickab
|
||||
|
||||
for( final ItemStack snaggedItem : items )
|
||||
{
|
||||
this.storeItemStack( snaggedItem );
|
||||
final IAEItemStack overflow = this.storeItemStack( snaggedItem );
|
||||
this.spawnOverflow( overflow );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,6 +54,7 @@ import appeng.me.GridAccessException;
|
||||
import appeng.util.InventoryAdaptor;
|
||||
import appeng.util.Platform;
|
||||
import appeng.util.inv.IInventoryDestination;
|
||||
import appeng.util.item.AEItemStack;
|
||||
|
||||
|
||||
public class PartImportBus extends PartSharedItemBus implements IInventoryDestination
|
||||
@@ -238,8 +239,8 @@ public class PartImportBus extends PartSharedItemBus implements IInventoryDestin
|
||||
|
||||
private boolean importStuff( InventoryAdaptor myAdaptor, IAEItemStack whatToImport, IMEMonitor<IAEItemStack> inv, IEnergySource energy, FuzzyMode fzMode )
|
||||
{
|
||||
final int toSend = Math.min( this.itemToSend, 64 );
|
||||
ItemStack newItems;
|
||||
final int toSend = this.calculateMaximumAmountToImport( myAdaptor, whatToImport, inv, fzMode );
|
||||
final ItemStack newItems;
|
||||
|
||||
if( this.getInstalledUpgrades( Upgrades.FUZZY ) > 0 )
|
||||
{
|
||||
@@ -264,8 +265,8 @@ public class PartImportBus extends PartSharedItemBus implements IInventoryDestin
|
||||
this.lastItemChecked.setStackSize( newItems.stackSize );
|
||||
}
|
||||
|
||||
IAEItemStack failed = Platform.poweredInsert( energy, this.destination, this.lastItemChecked, this.source );
|
||||
// destination.injectItems( lastItemChecked, Actionable.MODULATE );
|
||||
final IAEItemStack failed = Platform.poweredInsert( energy, this.destination, this.lastItemChecked, this.source );
|
||||
|
||||
if( failed != null )
|
||||
{
|
||||
myAdaptor.addItems( failed.getItemStack() );
|
||||
@@ -284,6 +285,41 @@ public class PartImportBus extends PartSharedItemBus implements IInventoryDestin
|
||||
return false;
|
||||
}
|
||||
|
||||
private int calculateMaximumAmountToImport( InventoryAdaptor myAdaptor, IAEItemStack whatToImport, IMEMonitor<IAEItemStack> inv, FuzzyMode fzMode )
|
||||
{
|
||||
final int toSend = Math.min( this.itemToSend, 64 );
|
||||
final ItemStack simResult;
|
||||
final IAEItemStack itemAmountNotStorable;
|
||||
final ItemStack itemStackToImport;
|
||||
|
||||
if( whatToImport == null )
|
||||
{
|
||||
itemStackToImport = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
itemStackToImport = whatToImport.getItemStack();
|
||||
}
|
||||
|
||||
if( this.getInstalledUpgrades( Upgrades.FUZZY ) > 0 )
|
||||
{
|
||||
simResult = myAdaptor.simulateSimilarRemove( toSend, itemStackToImport, fzMode, this.configDestination( inv ) );
|
||||
itemAmountNotStorable = this.destination.injectItems( AEItemStack.create( simResult ), Actionable.SIMULATE, this.source );
|
||||
}
|
||||
else
|
||||
{
|
||||
simResult = myAdaptor.simulateRemove( toSend, itemStackToImport, this.configDestination( inv ) );
|
||||
itemAmountNotStorable = this.destination.injectItems( AEItemStack.create( simResult ), Actionable.SIMULATE, this.source );
|
||||
}
|
||||
|
||||
if( itemAmountNotStorable != null )
|
||||
{
|
||||
return (int) Math.min( simResult.stackSize - itemAmountNotStorable.getStackSize(), toSend );
|
||||
}
|
||||
|
||||
return toSend;
|
||||
}
|
||||
|
||||
private IInventoryDestination configDestination( IMEMonitor<IAEItemStack> itemInventory )
|
||||
{
|
||||
this.destination = itemInventory;
|
||||
|
||||
@@ -77,6 +77,7 @@ import appeng.core.sync.GuiBridge;
|
||||
import appeng.helpers.IInterfaceHost;
|
||||
import appeng.helpers.IPriorityHost;
|
||||
import appeng.helpers.Reflected;
|
||||
import appeng.integration.IntegrationType;
|
||||
import appeng.me.GridAccessException;
|
||||
import appeng.me.storage.MEInventoryHandler;
|
||||
import appeng.me.storage.MEMonitorIInventory;
|
||||
@@ -90,7 +91,7 @@ import appeng.util.prioitylist.FuzzyPriorityList;
|
||||
import appeng.util.prioitylist.PrecisePriorityList;
|
||||
|
||||
|
||||
@Interface( iname = "BuildCraftTransport", iface = "buildcraft.api.transport.IPipeConnection" )
|
||||
@Interface( iname = IntegrationType.BuildCraftTransport, iface = "buildcraft.api.transport.IPipeConnection" )
|
||||
public class PartStorageBus extends PartUpgradeable implements IGridTickable, ICellContainer, IMEMonitorHandlerReceiver<IAEItemStack>, IPipeConnection, IPriorityHost
|
||||
{
|
||||
final BaseActionSource mySrc;
|
||||
@@ -565,7 +566,7 @@ public class PartStorageBus extends PartUpgradeable implements IGridTickable, IC
|
||||
}
|
||||
|
||||
@Override
|
||||
@Method( iname = "BuildCraftTransport" )
|
||||
@Method( iname = IntegrationType.BuildCraftTransport )
|
||||
public ConnectOverride overridePipeConnection( PipeType type, ForgeDirection with )
|
||||
{
|
||||
return type == PipeType.ITEM && with == this.side ? ConnectOverride.CONNECT : ConnectOverride.DISCONNECT;
|
||||
|
||||
@@ -32,6 +32,7 @@ import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
|
||||
import appeng.api.config.PowerUnits;
|
||||
import appeng.integration.IntegrationType;
|
||||
import appeng.me.GridAccessException;
|
||||
import appeng.me.cache.helpers.TunnelCollection;
|
||||
import appeng.transformer.annotations.Integration.Interface;
|
||||
@@ -39,7 +40,7 @@ import appeng.transformer.annotations.Integration.InterfaceList;
|
||||
import appeng.util.Platform;
|
||||
|
||||
|
||||
@InterfaceList( value = { @Interface( iface = "ic2.api.energy.tile.IEnergySink", iname = "IC2" ), @Interface( iface = "ic2.api.energy.tile.IEnergySource", iname = "IC2" ) } )
|
||||
@InterfaceList( value = { @Interface( iface = "ic2.api.energy.tile.IEnergySink", iname = IntegrationType.IC2 ), @Interface( iface = "ic2.api.energy.tile.IEnergySource", iname = IntegrationType.IC2 ) } )
|
||||
public class PartP2PIC2Power extends PartP2PTunnel<PartP2PIC2Power> implements ic2.api.energy.tile.IEnergySink, ic2.api.energy.tile.IEnergySource
|
||||
{
|
||||
|
||||
|
||||
@@ -61,7 +61,7 @@ import appeng.util.inv.WrapperChainedInventory;
|
||||
import appeng.util.inv.WrapperMCISidedInventory;
|
||||
|
||||
|
||||
@Interface( iface = "buildcraft.api.transport.IPipeConnection", iname = "BuildCraftTransport" )
|
||||
@Interface( iface = "buildcraft.api.transport.IPipeConnection", iname = IntegrationType.BuildCraftTransport )
|
||||
public class PartP2PItems extends PartP2PTunnel<PartP2PItems> implements IPipeConnection, ISidedInventory, IGridTickable
|
||||
{
|
||||
|
||||
@@ -384,7 +384,7 @@ public class PartP2PItems extends PartP2PTunnel<PartP2PItems> implements IPipeCo
|
||||
}
|
||||
|
||||
@Override
|
||||
@Method( iname = "BuildCraftTransport" )
|
||||
@Method( iname = IntegrationType.BuildCraftTransport )
|
||||
public ConnectOverride overridePipeConnection( PipeType type, ForgeDirection with )
|
||||
{
|
||||
return this.side == with && type == PipeType.ITEM ? ConnectOverride.CONNECT : ConnectOverride.DEFAULT;
|
||||
|
||||
@@ -19,13 +19,12 @@
|
||||
package appeng.parts.p2p;
|
||||
|
||||
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
@@ -52,15 +51,16 @@ import appeng.integration.IntegrationType;
|
||||
import appeng.me.GridAccessException;
|
||||
import appeng.transformer.annotations.Integration.Interface;
|
||||
import appeng.transformer.annotations.Integration.InterfaceList;
|
||||
import appeng.util.IWorldCallable;
|
||||
|
||||
|
||||
@InterfaceList( value = { @Interface( iface = "li.cil.oc.api.network.Environment", iname = "OpenComputers" ), @Interface( iface = "li.cil.oc.api.network.SidedEnvironment", iname = "OpenComputers" ) } )
|
||||
@InterfaceList( value = { @Interface( iface = "li.cil.oc.api.network.Environment", iname = IntegrationType.OpenComputers ), @Interface( iface = "li.cil.oc.api.network.SidedEnvironment", iname = IntegrationType.OpenComputers ) } )
|
||||
public final class PartP2POpenComputers extends PartP2PTunnel<PartP2POpenComputers> implements IGridTickable, Environment, SidedEnvironment
|
||||
{
|
||||
@Nullable
|
||||
private final Node node;
|
||||
|
||||
private final Callable<Void> updateCallback;
|
||||
private final IWorldCallable<Void> updateCallback;
|
||||
|
||||
public PartP2POpenComputers( ItemStack is )
|
||||
{
|
||||
@@ -239,11 +239,11 @@ public final class PartP2POpenComputers extends PartP2PTunnel<PartP2POpenCompute
|
||||
return side == this.side;
|
||||
}
|
||||
|
||||
private final class UpdateCallback implements Callable<Void>
|
||||
private final class UpdateCallback implements IWorldCallable<Void>
|
||||
{
|
||||
@Nullable
|
||||
@Override
|
||||
public Void call() throws Exception
|
||||
public Void call( World world ) throws Exception
|
||||
{
|
||||
PartP2POpenComputers.this.updateConnections();
|
||||
|
||||
|
||||
@@ -38,11 +38,12 @@ import appeng.api.networking.ticking.IGridTickable;
|
||||
import appeng.api.networking.ticking.TickRateModulation;
|
||||
import appeng.api.networking.ticking.TickingRequest;
|
||||
import appeng.core.settings.TickRates;
|
||||
import appeng.integration.IntegrationType;
|
||||
import appeng.transformer.annotations.Integration.Interface;
|
||||
import appeng.util.Platform;
|
||||
|
||||
|
||||
@Interface( iface = "pneumaticCraft.api.tileentity.ISidedPneumaticMachine", iname = "PneumaticCraft" )
|
||||
@Interface( iface = "pneumaticCraft.api.tileentity.ISidedPneumaticMachine", iname = IntegrationType.PneumaticCraft )
|
||||
public final class PartP2PPressure extends PartP2PTunnel<PartP2PPressure> implements ISidedPneumaticMachine, IGridTickable
|
||||
{
|
||||
private static final String PRESSURE_NBT_TAG = "pneumaticCraft";
|
||||
|
||||
@@ -33,6 +33,7 @@ import cpw.mods.fml.relauncher.SideOnly;
|
||||
import cofh.api.energy.IEnergyReceiver;
|
||||
|
||||
import appeng.api.config.PowerUnits;
|
||||
import appeng.integration.IntegrationType;
|
||||
import appeng.integration.modules.helpers.NullRFHandler;
|
||||
import appeng.me.GridAccessException;
|
||||
import appeng.transformer.annotations.Integration.Interface;
|
||||
@@ -40,7 +41,7 @@ import appeng.transformer.annotations.Integration.InterfaceList;
|
||||
import appeng.util.Platform;
|
||||
|
||||
|
||||
@InterfaceList( value = { @Interface( iface = "cofh.api.energy.IEnergyReceiver", iname = "RF" ) } )
|
||||
@InterfaceList( value = { @Interface( iface = "cofh.api.energy.IEnergyReceiver", iname = IntegrationType.RF ) } )
|
||||
public final class PartP2PRFPower extends PartP2PTunnel<PartP2PRFPower> implements IEnergyReceiver
|
||||
{
|
||||
private static final ThreadLocal<Stack<PartP2PRFPower>> THREAD_STACK = new ThreadLocal<Stack<PartP2PRFPower>>();
|
||||
|
||||
@@ -79,6 +79,7 @@ public abstract class AbstractPartMonitor extends AbstractPartDisplay implements
|
||||
{
|
||||
private static final IWideReadableNumberConverter NUMBER_CONVERTER = ReadableNumberConverter.INSTANCE;
|
||||
private IAEItemStack configuredItem;
|
||||
private String lastHumanReadableText;
|
||||
private boolean isLocked;
|
||||
private IStackWatcher myWatcher;
|
||||
@SideOnly( Side.CLIENT )
|
||||
@@ -177,6 +178,7 @@ public abstract class AbstractPartMonitor extends AbstractPartDisplay implements
|
||||
|
||||
final TileEntity te = this.tile;
|
||||
final ItemStack eq = player.getCurrentEquippedItem();
|
||||
|
||||
if( Platform.isWrench( player, eq, te.xCoord, te.yCoord, te.zCoord ) )
|
||||
{
|
||||
this.isLocked = !this.isLocked;
|
||||
@@ -249,6 +251,7 @@ public abstract class AbstractPartMonitor extends AbstractPartDisplay implements
|
||||
protected void finalize() throws Throwable
|
||||
{
|
||||
super.finalize();
|
||||
|
||||
if( this.dspList != null )
|
||||
{
|
||||
GLAllocation.deleteDisplayLists( this.dspList );
|
||||
@@ -272,6 +275,7 @@ public abstract class AbstractPartMonitor extends AbstractPartDisplay implements
|
||||
}
|
||||
|
||||
final IAEItemStack ais = (IAEItemStack) this.getDisplayed();
|
||||
|
||||
if( ais != null )
|
||||
{
|
||||
GL11.glPushMatrix();
|
||||
@@ -310,46 +314,41 @@ public abstract class AbstractPartMonitor extends AbstractPartDisplay implements
|
||||
// GL11.glPushAttrib( GL11.GL_ALL_ATTRIB_BITS );
|
||||
|
||||
final ForgeDirection d = this.side;
|
||||
|
||||
GL11.glTranslated( d.offsetX * 0.77, d.offsetY * 0.77, d.offsetZ * 0.77 );
|
||||
|
||||
if( d == ForgeDirection.UP )
|
||||
switch( d )
|
||||
{
|
||||
GL11.glScalef( 1.0f, -1.0f, 1.0f );
|
||||
GL11.glRotatef( 90.0f, 1.0f, 0.0f, 0.0f );
|
||||
GL11.glRotatef( this.getSpin() * 90.0F, 0, 0, 1 );
|
||||
case UP:
|
||||
GL11.glScalef( 1.0f, -1.0f, 1.0f );
|
||||
GL11.glRotatef( 90.0f, 1.0f, 0.0f, 0.0f );
|
||||
GL11.glRotatef( this.getSpin() * 90.0F, 0, 0, 1 );
|
||||
break;
|
||||
case DOWN:
|
||||
GL11.glScalef( 1.0f, -1.0f, 1.0f );
|
||||
GL11.glRotatef( -90.0f, 1.0f, 0.0f, 0.0f );
|
||||
GL11.glRotatef( this.getSpin() * -90.0F, 0, 0, 1 );
|
||||
break;
|
||||
case EAST:
|
||||
GL11.glScalef( -1.0f, -1.0f, -1.0f );
|
||||
GL11.glRotatef( -90.0f, 0.0f, 1.0f, 0.0f );
|
||||
break;
|
||||
case WEST:
|
||||
GL11.glScalef( -1.0f, -1.0f, -1.0f );
|
||||
GL11.glRotatef( 90.0f, 0.0f, 1.0f, 0.0f );
|
||||
break;
|
||||
case NORTH:
|
||||
GL11.glScalef( -1.0f, -1.0f, -1.0f );
|
||||
break;
|
||||
case SOUTH:
|
||||
GL11.glScalef( -1.0f, -1.0f, -1.0f );
|
||||
GL11.glRotatef( 180.0f, 0.0f, 1.0f, 0.0f );
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if( d == ForgeDirection.DOWN )
|
||||
{
|
||||
GL11.glScalef( 1.0f, -1.0f, 1.0f );
|
||||
GL11.glRotatef( -90.0f, 1.0f, 0.0f, 0.0f );
|
||||
GL11.glRotatef( this.getSpin() * -90.0F, 0, 0, 1 );
|
||||
}
|
||||
|
||||
if( d == ForgeDirection.EAST )
|
||||
{
|
||||
GL11.glScalef( -1.0f, -1.0f, -1.0f );
|
||||
GL11.glRotatef( -90.0f, 0.0f, 1.0f, 0.0f );
|
||||
}
|
||||
|
||||
if( d == ForgeDirection.WEST )
|
||||
{
|
||||
GL11.glScalef( -1.0f, -1.0f, -1.0f );
|
||||
GL11.glRotatef( 90.0f, 0.0f, 1.0f, 0.0f );
|
||||
}
|
||||
|
||||
if( d == ForgeDirection.NORTH )
|
||||
{
|
||||
GL11.glScalef( -1.0f, -1.0f, -1.0f );
|
||||
}
|
||||
|
||||
if( d == ForgeDirection.SOUTH )
|
||||
{
|
||||
GL11.glScalef( -1.0f, -1.0f, -1.0f );
|
||||
GL11.glRotatef( 180.0f, 0.0f, 1.0f, 0.0f );
|
||||
}
|
||||
|
||||
// GL11.glPushMatrix();
|
||||
try
|
||||
{
|
||||
final ItemStack sis = ais.getItemStack();
|
||||
@@ -379,8 +378,6 @@ public abstract class AbstractPartMonitor extends AbstractPartDisplay implements
|
||||
GL11.glEnable( GL12.GL_RESCALE_NORMAL );
|
||||
}
|
||||
|
||||
// GL11.glPopMatrix();
|
||||
|
||||
GL11.glTranslatef( 0.0f, 0.14f, -0.24f );
|
||||
GL11.glScalef( 1.0f / 62.0f, 1.0f / 62.0f, 1.0f / 62.0f );
|
||||
|
||||
@@ -422,7 +419,14 @@ public abstract class AbstractPartMonitor extends AbstractPartDisplay implements
|
||||
this.configuredItem.setStackSize( fullStack.getStackSize() );
|
||||
}
|
||||
|
||||
this.getHost().markForUpdate();
|
||||
final long stackSize = this.configuredItem.getStackSize();
|
||||
final String humanReadableText = NUMBER_CONVERTER.toWideReadableForm( stackSize );
|
||||
|
||||
if( !humanReadableText.equals( this.lastHumanReadableText ) )
|
||||
{
|
||||
this.lastHumanReadableText = humanReadableText;
|
||||
this.getHost().markForUpdate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -88,22 +88,60 @@ public class RecipeResourceCopier
|
||||
Preconditions.checkNotNull( destination );
|
||||
Preconditions.checkArgument( destination.isDirectory() );
|
||||
|
||||
final String[] listing = this.getResourceListing( this.getClass(), this.root );
|
||||
this.copyTo( destination, this.root );
|
||||
}
|
||||
|
||||
/**
|
||||
* @see {RecipeResourceCopier#copyTo(File)}
|
||||
*
|
||||
* @param destination destination folder to which the recipes are copied to
|
||||
* @param directory the folder to copy.
|
||||
*
|
||||
* @throws URISyntaxException {@see #getResourceListing}
|
||||
* @throws IOException {@see #getResourceListing} and if copying the detected resource to file is not possible
|
||||
*/
|
||||
private void copyTo( File destination, String directory ) throws URISyntaxException, IOException
|
||||
{
|
||||
assert destination != null;
|
||||
assert directory != null;
|
||||
|
||||
final String[] listing = this.getResourceListing( this.getClass(), directory );
|
||||
for( String list : listing )
|
||||
{
|
||||
if( list.endsWith( ".recipe" ) || list.endsWith( ".html" ) )
|
||||
{
|
||||
final InputStream inStream = this.getClass().getResourceAsStream( '/' + this.root + list );
|
||||
final File outFile = new File( destination, list );
|
||||
if( !outFile.exists() )
|
||||
{
|
||||
if( inStream != null )
|
||||
{
|
||||
FileUtils.copyInputStreamToFile( inStream, outFile );
|
||||
inStream.close();
|
||||
}
|
||||
}
|
||||
this.copyFile( destination, directory, list );
|
||||
}
|
||||
else if( !list.contains( "." ) )
|
||||
{
|
||||
final File subDirectory = new File( destination, list );
|
||||
FileUtils.forceMkdir( subDirectory );
|
||||
this.copyTo( subDirectory, directory + list + "/" );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Copies a single file inside a folder to the destination.
|
||||
*
|
||||
* @param destination folder to which the file is copied to
|
||||
* @param directory the directory containing the file
|
||||
* @param fileName the fily to copy
|
||||
*
|
||||
* @throws IOException if copying the file is not possible
|
||||
*/
|
||||
private void copyFile( File destination, String directory, String fileName ) throws IOException
|
||||
{
|
||||
assert destination != null;
|
||||
assert fileName != null;
|
||||
|
||||
final InputStream inStream = this.getClass().getResourceAsStream( '/' + directory + fileName );
|
||||
final File outFile = new File( destination, fileName );
|
||||
|
||||
if( !outFile.exists() && inStream != null )
|
||||
{
|
||||
FileUtils.copyInputStreamToFile( inStream, outFile );
|
||||
inStream.close();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -35,11 +35,15 @@ import com.google.common.base.Preconditions;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.chunk.Chunk;
|
||||
import net.minecraftforge.event.world.WorldEvent;
|
||||
|
||||
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
|
||||
import appeng.api.AEApi;
|
||||
import appeng.api.util.DimensionalCoord;
|
||||
import appeng.services.compass.CompassReader;
|
||||
import appeng.services.compass.ICompassCallback;
|
||||
import appeng.util.Platform;
|
||||
|
||||
|
||||
public final class CompassService
|
||||
@@ -71,6 +75,22 @@ public final class CompassService
|
||||
return this.executor.submit( new CMDirectionRequest( coord, maxRange, cc ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensure the a compass service is removed once a world gets unloaded by forge.
|
||||
*
|
||||
* @param event the event containing the unloaded world.
|
||||
*/
|
||||
@SubscribeEvent
|
||||
public void unloadWorld( WorldEvent.Unload event )
|
||||
{
|
||||
if( Platform.isServer() && this.worldSet.containsKey( event.world ) )
|
||||
{
|
||||
final CompassReader compassReader = this.worldSet.remove( event.world );
|
||||
|
||||
compassReader.close();
|
||||
}
|
||||
}
|
||||
|
||||
public int jobSize()
|
||||
{
|
||||
return this.jobSize;
|
||||
@@ -78,7 +98,7 @@ public final class CompassService
|
||||
|
||||
public void cleanUp()
|
||||
{
|
||||
for( CompassReader cr : this.worldSet.values() )
|
||||
for( final CompassReader cr : this.worldSet.values() )
|
||||
{
|
||||
cr.close();
|
||||
}
|
||||
@@ -86,8 +106,8 @@ public final class CompassService
|
||||
|
||||
public void updateArea( World w, int chunkX, int chunkZ )
|
||||
{
|
||||
int x = chunkX << 4;
|
||||
int z = chunkZ << 4;
|
||||
final int x = chunkX << 4;
|
||||
final int z = chunkZ << 4;
|
||||
|
||||
this.updateArea( w, x, CHUNK_SIZE, z );
|
||||
this.updateArea( w, x, CHUNK_SIZE + 32, z );
|
||||
@@ -104,17 +124,17 @@ public final class CompassService
|
||||
{
|
||||
this.jobSize++;
|
||||
|
||||
int cx = x >> 4;
|
||||
int cdy = y >> 5;
|
||||
int cz = z >> 4;
|
||||
final int cx = x >> 4;
|
||||
final int cdy = y >> 5;
|
||||
final int cz = z >> 4;
|
||||
|
||||
int low_y = cdy << 5;
|
||||
int hi_y = low_y + 32;
|
||||
final int low_y = cdy << 5;
|
||||
final int hi_y = low_y + 32;
|
||||
|
||||
// lower level...
|
||||
Chunk c = w.getChunkFromBlockCoords( x, z );
|
||||
final Chunk c = w.getChunkFromBlockCoords( x, z );
|
||||
|
||||
for( Block skyStoneBlock : AEApi.instance().definitions().blocks().skyStone().maybeBlock().asSet() )
|
||||
for( final Block skyStoneBlock : AEApi.instance().definitions().blocks().skyStone().maybeBlock().asSet() )
|
||||
{
|
||||
for( int i = 0; i < CHUNK_SIZE; i++ )
|
||||
{
|
||||
@@ -122,7 +142,7 @@ public final class CompassService
|
||||
{
|
||||
for( int k = low_y; k < hi_y; k++ )
|
||||
{
|
||||
Block blk = c.getBlock( i, k, j );
|
||||
final Block blk = c.getBlock( i, k, j );
|
||||
if( blk == skyStoneBlock && c.getBlockMetadata( i, k, j ) == 0 )
|
||||
{
|
||||
return this.executor.submit( new CMUpdatePost( w, cx, cz, cdy, true ) );
|
||||
@@ -135,6 +155,28 @@ public final class CompassService
|
||||
return this.executor.submit( new CMUpdatePost( w, cx, cz, cdy, false ) );
|
||||
}
|
||||
|
||||
public void kill()
|
||||
{
|
||||
this.executor.shutdown();
|
||||
|
||||
try
|
||||
{
|
||||
this.executor.awaitTermination( 6, TimeUnit.MINUTES );
|
||||
this.jobSize = 0;
|
||||
|
||||
for( final CompassReader cr : this.worldSet.values() )
|
||||
{
|
||||
cr.close();
|
||||
}
|
||||
|
||||
this.worldSet.clear();
|
||||
}
|
||||
catch( final InterruptedException e )
|
||||
{
|
||||
// wrap this up..
|
||||
}
|
||||
}
|
||||
|
||||
private CompassReader getReader( World w )
|
||||
{
|
||||
CompassReader cr = this.worldSet.get( w );
|
||||
@@ -150,42 +192,20 @@ public final class CompassService
|
||||
|
||||
private int dist( int ax, int az, int bx, int bz )
|
||||
{
|
||||
int up = ( bz - az ) * CHUNK_SIZE;
|
||||
int side = ( bx - ax ) * CHUNK_SIZE;
|
||||
final int up = ( bz - az ) * CHUNK_SIZE;
|
||||
final int side = ( bx - ax ) * CHUNK_SIZE;
|
||||
|
||||
return up * up + side * side;
|
||||
}
|
||||
|
||||
private double rad( int ax, int az, int bx, int bz )
|
||||
{
|
||||
int up = bz - az;
|
||||
int side = bx - ax;
|
||||
final int up = bz - az;
|
||||
final int side = bx - ax;
|
||||
|
||||
return Math.atan2( -up, side ) - Math.PI / 2.0;
|
||||
}
|
||||
|
||||
public void kill()
|
||||
{
|
||||
this.executor.shutdown();
|
||||
|
||||
try
|
||||
{
|
||||
this.executor.awaitTermination( 6, TimeUnit.MINUTES );
|
||||
this.jobSize = 0;
|
||||
|
||||
for( CompassReader cr : this.worldSet.values() )
|
||||
{
|
||||
cr.close();
|
||||
}
|
||||
|
||||
this.worldSet.clear();
|
||||
}
|
||||
catch( InterruptedException e )
|
||||
{
|
||||
// wrap this up..
|
||||
}
|
||||
}
|
||||
|
||||
private class CMUpdatePost implements Runnable
|
||||
{
|
||||
|
||||
@@ -210,7 +230,7 @@ public final class CompassService
|
||||
{
|
||||
CompassService.this.jobSize--;
|
||||
|
||||
CompassReader cr = CompassService.this.getReader( this.world );
|
||||
final CompassReader cr = CompassService.this.getReader( this.world );
|
||||
cr.setHasBeacon( this.chunkX, this.chunkZ, this.doubleChunkY, this.value );
|
||||
|
||||
if( CompassService.this.jobSize() < 2 )
|
||||
@@ -239,10 +259,10 @@ public final class CompassService
|
||||
{
|
||||
CompassService.this.jobSize--;
|
||||
|
||||
int cx = this.coord.x >> 4;
|
||||
int cz = this.coord.z >> 4;
|
||||
final int cx = this.coord.x >> 4;
|
||||
final int cz = this.coord.z >> 4;
|
||||
|
||||
CompassReader cr = CompassService.this.getReader( this.coord.getWorld() );
|
||||
final CompassReader cr = CompassService.this.getReader( this.coord.getWorld() );
|
||||
|
||||
// Am I standing on it?
|
||||
if( cr.hasBeacon( cx, cz ) )
|
||||
@@ -260,10 +280,10 @@ public final class CompassService
|
||||
// spiral outward...
|
||||
for( int offset = 1; offset < this.maxRange; offset++ )
|
||||
{
|
||||
int minX = cx - offset;
|
||||
int minZ = cz - offset;
|
||||
int maxX = cx + offset;
|
||||
int maxZ = cz + offset;
|
||||
final int minX = cx - offset;
|
||||
final int minZ = cz - offset;
|
||||
final int maxX = cx + offset;
|
||||
final int maxZ = cz + offset;
|
||||
|
||||
int closest = Integer.MAX_VALUE;
|
||||
int chosen_x = cx;
|
||||
@@ -273,7 +293,7 @@ public final class CompassService
|
||||
{
|
||||
if( cr.hasBeacon( minX, z ) )
|
||||
{
|
||||
int closeness = CompassService.this.dist( cx, cz, minX, z );
|
||||
final int closeness = CompassService.this.dist( cx, cz, minX, z );
|
||||
if( closeness < closest )
|
||||
{
|
||||
closest = closeness;
|
||||
@@ -284,7 +304,7 @@ public final class CompassService
|
||||
|
||||
if( cr.hasBeacon( maxX, z ) )
|
||||
{
|
||||
int closeness = CompassService.this.dist( cx, cz, maxX, z );
|
||||
final int closeness = CompassService.this.dist( cx, cz, maxX, z );
|
||||
if( closeness < closest )
|
||||
{
|
||||
closest = closeness;
|
||||
@@ -298,7 +318,7 @@ public final class CompassService
|
||||
{
|
||||
if( cr.hasBeacon( x, minZ ) )
|
||||
{
|
||||
int closeness = CompassService.this.dist( cx, cz, x, minZ );
|
||||
final int closeness = CompassService.this.dist( cx, cz, x, minZ );
|
||||
if( closeness < closest )
|
||||
{
|
||||
closest = closeness;
|
||||
@@ -309,7 +329,7 @@ public final class CompassService
|
||||
|
||||
if( cr.hasBeacon( x, maxZ ) )
|
||||
{
|
||||
int closeness = CompassService.this.dist( cx, cz, x, maxZ );
|
||||
final int closeness = CompassService.this.dist( cx, cz, x, maxZ );
|
||||
if( closeness < closest )
|
||||
{
|
||||
closest = closeness;
|
||||
|
||||
@@ -55,10 +55,18 @@ public final class CompassReader
|
||||
|
||||
public void setHasBeacon( int cx, int cz, int cdy, boolean hasBeacon )
|
||||
{
|
||||
CompassRegion r = this.getRegion( cx, cz );
|
||||
final CompassRegion r = this.getRegion( cx, cz );
|
||||
|
||||
r.setHasBeacon( cx, cz, cdy, hasBeacon );
|
||||
}
|
||||
|
||||
public boolean hasBeacon( int cx, int cz )
|
||||
{
|
||||
final CompassRegion r = this.getRegion( cx, cz );
|
||||
|
||||
return r.hasBeacon( cx, cz );
|
||||
}
|
||||
|
||||
private CompassRegion getRegion( int cx, int cz )
|
||||
{
|
||||
long pos = cx >> 10;
|
||||
@@ -66,6 +74,7 @@ public final class CompassReader
|
||||
pos |= ( cz >> 10 );
|
||||
|
||||
CompassRegion cr = this.regions.get( pos );
|
||||
|
||||
if( cr == null )
|
||||
{
|
||||
cr = new CompassRegion( cx, cz, this.dimensionId, this.worldCompassFolder );
|
||||
@@ -74,10 +83,4 @@ public final class CompassReader
|
||||
|
||||
return cr;
|
||||
}
|
||||
|
||||
public boolean hasBeacon( int cx, int cz )
|
||||
{
|
||||
CompassRegion r = this.getRegion( cx, cz );
|
||||
return r.hasBeacon( cx, cz );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,8 +52,8 @@ public final class CompassRegion
|
||||
this.worldCompassFolder = worldCompassFolder;
|
||||
this.encoder = new MeteorDataNameEncoder( 0 );
|
||||
|
||||
int region_x = cx >> 10;
|
||||
int region_z = cz >> 10;
|
||||
final int region_x = cx >> 10;
|
||||
final int region_z = cz >> 10;
|
||||
|
||||
this.lowX = region_x << 10;
|
||||
this.lowZ = region_z << 10;
|
||||
@@ -61,42 +61,6 @@ public final class CompassRegion
|
||||
this.openFile( false );
|
||||
}
|
||||
|
||||
private void openFile( boolean create )
|
||||
{
|
||||
if( this.hasFile )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final File file = this.getFile();
|
||||
if( create || this.isFileExistent( file ) )
|
||||
{
|
||||
try
|
||||
{
|
||||
this.raf = new RandomAccessFile( file, "rw" );
|
||||
FileChannel fc = this.raf.getChannel();
|
||||
this.buffer = fc.map( FileChannel.MapMode.READ_WRITE, 0, 0x400 * 0x400 );// fc.size() );
|
||||
this.hasFile = true;
|
||||
}
|
||||
catch( Throwable t )
|
||||
{
|
||||
throw new CompassException( t );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private File getFile()
|
||||
{
|
||||
final String fileName = this.encoder.encode( this.world, this.lowX, this.lowZ );
|
||||
|
||||
return new File( this.worldCompassFolder, fileName );
|
||||
}
|
||||
|
||||
private boolean isFileExistent( File file )
|
||||
{
|
||||
return file.exists() && file.isFile();
|
||||
}
|
||||
|
||||
public void close()
|
||||
{
|
||||
try
|
||||
@@ -122,7 +86,7 @@ public final class CompassRegion
|
||||
cx &= 0x3FF;
|
||||
cz &= 0x3FF;
|
||||
|
||||
int val = this.read( cx, cz );
|
||||
final int val = this.read( cx, cz );
|
||||
if( val != 0 )
|
||||
{
|
||||
return true;
|
||||
@@ -132,6 +96,87 @@ public final class CompassRegion
|
||||
return false;
|
||||
}
|
||||
|
||||
public void setHasBeacon( int cx, int cz, int cdy, boolean hasBeacon )
|
||||
{
|
||||
cx &= 0x3FF;
|
||||
cz &= 0x3FF;
|
||||
|
||||
this.openFile( hasBeacon );
|
||||
|
||||
if( this.hasFile )
|
||||
{
|
||||
int val = this.read( cx, cz );
|
||||
final int originalVal = val;
|
||||
|
||||
if( hasBeacon )
|
||||
{
|
||||
val |= 1 << cdy;
|
||||
}
|
||||
else
|
||||
{
|
||||
val &= ~( 1 << cdy );
|
||||
}
|
||||
|
||||
if( originalVal != val )
|
||||
{
|
||||
this.write( cx, cz, val );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void finalize() throws Throwable
|
||||
{
|
||||
try
|
||||
{
|
||||
if( this.raf != null )
|
||||
{
|
||||
this.raf.close();
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
super.finalize();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void openFile( boolean create )
|
||||
{
|
||||
if( this.hasFile )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final File file = this.getFile();
|
||||
if( create || this.isFileExistent( file ) )
|
||||
{
|
||||
try
|
||||
{
|
||||
this.raf = new RandomAccessFile( file, "rw" );
|
||||
final FileChannel fc = this.raf.getChannel();
|
||||
this.buffer = fc.map( FileChannel.MapMode.READ_WRITE, 0, 0x400 * 0x400 );// fc.size() );
|
||||
this.hasFile = true;
|
||||
}
|
||||
catch( final Throwable t )
|
||||
{
|
||||
throw new CompassException( t );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private File getFile()
|
||||
{
|
||||
final String fileName = this.encoder.encode( this.world, this.lowX, this.lowZ );
|
||||
|
||||
return new File( this.worldCompassFolder, fileName );
|
||||
}
|
||||
|
||||
private boolean isFileExistent( File file )
|
||||
{
|
||||
return file.exists() && file.isFile();
|
||||
}
|
||||
|
||||
private int read( int cx, int cz )
|
||||
{
|
||||
try
|
||||
@@ -150,34 +195,6 @@ public final class CompassRegion
|
||||
}
|
||||
}
|
||||
|
||||
public void setHasBeacon( int cx, int cz, int cdy, boolean hasBeacon )
|
||||
{
|
||||
cx &= 0x3FF;
|
||||
cz &= 0x3FF;
|
||||
|
||||
this.openFile( hasBeacon );
|
||||
|
||||
if( this.hasFile )
|
||||
{
|
||||
int val = this.read( cx, cz );
|
||||
int originalVal = val;
|
||||
|
||||
if( hasBeacon )
|
||||
{
|
||||
val |= 1 << cdy;
|
||||
}
|
||||
else
|
||||
{
|
||||
val &= ~( 1 << cdy );
|
||||
}
|
||||
|
||||
if( originalVal != val )
|
||||
{
|
||||
this.write( cx, cz, val );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void write( int cx, int cz, int val )
|
||||
{
|
||||
try
|
||||
|
||||
@@ -34,7 +34,7 @@ import appeng.transformer.annotations.Integration.Interface;
|
||||
import appeng.util.Platform;
|
||||
|
||||
|
||||
@Interface( iname = "IC2", iface = "ic2.api.energy.tile.IEnergySink" )
|
||||
@Interface( iname = IntegrationType.IC2, iface = "ic2.api.energy.tile.IEnergySink" )
|
||||
public abstract class IC2 extends AERootPoweredTile implements IEnergySink
|
||||
{
|
||||
|
||||
|
||||
@@ -24,10 +24,11 @@ import net.minecraftforge.common.util.ForgeDirection;
|
||||
import mekanism.api.energy.IStrictEnergyAcceptor;
|
||||
|
||||
import appeng.api.config.PowerUnits;
|
||||
import appeng.integration.IntegrationType;
|
||||
import appeng.transformer.annotations.Integration.Interface;
|
||||
|
||||
|
||||
@Interface( iname = "Mekanism", iface = "mekanism.api.energy.IStrictEnergyAcceptor" )
|
||||
@Interface( iname = IntegrationType.Mekanism, iface = "mekanism.api.energy.IStrictEnergyAcceptor" )
|
||||
public abstract class MekJoules extends RedstoneFlux implements IStrictEnergyAcceptor
|
||||
{
|
||||
|
||||
|
||||
@@ -24,10 +24,11 @@ import net.minecraftforge.common.util.ForgeDirection;
|
||||
import cofh.api.energy.IEnergyReceiver;
|
||||
|
||||
import appeng.api.config.PowerUnits;
|
||||
import appeng.integration.IntegrationType;
|
||||
import appeng.transformer.annotations.Integration.Interface;
|
||||
|
||||
|
||||
@Interface( iname = "RF", iface = "cofh.api.energy.IEnergyReceiver" )
|
||||
@Interface( iname = IntegrationType.RF, iface = "cofh.api.energy.IEnergyReceiver" )
|
||||
public abstract class RedstoneFlux extends RotaryCraft implements IEnergyReceiver
|
||||
{
|
||||
@Override
|
||||
|
||||
@@ -28,6 +28,7 @@ import Reika.RotaryCraft.API.Interfaces.Transducerable;
|
||||
import Reika.RotaryCraft.API.Power.AdvancedShaftPowerReceiver;
|
||||
|
||||
import appeng.api.config.PowerUnits;
|
||||
import appeng.integration.IntegrationType;
|
||||
import appeng.tile.TileEvent;
|
||||
import appeng.tile.events.TileEventType;
|
||||
import appeng.transformer.annotations.Integration.Interface;
|
||||
@@ -35,7 +36,7 @@ import appeng.transformer.annotations.Integration.InterfaceList;
|
||||
import appeng.transformer.annotations.Integration.Method;
|
||||
|
||||
|
||||
@InterfaceList( value = { @Interface( iname = "RotaryCraft", iface = "Reika.RotaryCraft.API.Power.AdvancedShaftPowerReceiver" ), @Interface( iname = "RotaryCraft", iface = "Reika.RotaryCraft.API.Interfaces.Transducerable" ) } )
|
||||
@InterfaceList( value = { @Interface( iname = IntegrationType.RotaryCraft, iface = "Reika.RotaryCraft.API.Power.AdvancedShaftPowerReceiver" ), @Interface( iname = IntegrationType.RotaryCraft, iface = "Reika.RotaryCraft.API.Interfaces.Transducerable" ) } )
|
||||
public abstract class RotaryCraft extends IC2 implements AdvancedShaftPowerReceiver, Transducerable
|
||||
{
|
||||
|
||||
@@ -47,7 +48,7 @@ public abstract class RotaryCraft extends IC2 implements AdvancedShaftPowerRecei
|
||||
private long currentPower = 0;
|
||||
|
||||
@TileEvent( TileEventType.TICK )
|
||||
@Method( iname = "RotaryCraft" )
|
||||
@Method( iname = IntegrationType.RotaryCraft )
|
||||
public void Tick_RotaryCraft()
|
||||
{
|
||||
if( this.worldObj != null && !this.worldObj.isRemote && this.currentPower > 0 )
|
||||
|
||||
@@ -19,11 +19,10 @@
|
||||
package appeng.tile.spatial;
|
||||
|
||||
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
import net.minecraft.inventory.IInventory;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
import appeng.api.config.Actionable;
|
||||
@@ -46,10 +45,11 @@ import appeng.tile.events.TileEventType;
|
||||
import appeng.tile.grid.AENetworkInvTile;
|
||||
import appeng.tile.inventory.AppEngInternalInventory;
|
||||
import appeng.tile.inventory.InvOperation;
|
||||
import appeng.util.IWorldCallable;
|
||||
import appeng.util.Platform;
|
||||
|
||||
|
||||
public class TileSpatialIOPort extends AENetworkInvTile implements Callable
|
||||
public class TileSpatialIOPort extends AENetworkInvTile implements IWorldCallable<Void>
|
||||
{
|
||||
|
||||
final int[] sides = { 0, 1 };
|
||||
@@ -122,9 +122,8 @@ public class TileSpatialIOPort extends AENetworkInvTile implements Callable
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object call() throws Exception
|
||||
public Void call( World world ) throws Exception
|
||||
{
|
||||
|
||||
ItemStack cell = this.getStackInSlot( 0 );
|
||||
if( this.isSpatialCell( cell ) && this.getStackInSlot( 1 ) == null )
|
||||
{
|
||||
|
||||
@@ -24,6 +24,8 @@ import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
import appeng.integration.IntegrationType;
|
||||
|
||||
|
||||
public @interface Integration
|
||||
{
|
||||
@@ -40,13 +42,13 @@ public @interface Integration
|
||||
{
|
||||
String iface();
|
||||
|
||||
String iname();
|
||||
IntegrationType iname();
|
||||
}
|
||||
|
||||
@Retention( RetentionPolicy.RUNTIME )
|
||||
@Target( ElementType.METHOD )
|
||||
@interface Method
|
||||
{
|
||||
String iname();
|
||||
IntegrationType iname();
|
||||
}
|
||||
}
|
||||
@@ -184,11 +184,11 @@ public final class ASMIntegration implements IClassTransformer
|
||||
|
||||
if( an.values.get( 0 ).equals( "iname" ) )
|
||||
{
|
||||
iName = (String) an.values.get( 1 );
|
||||
iName = ( (String[]) an.values.get( 1 ) )[1];
|
||||
}
|
||||
else if( an.values.get( 2 ).equals( "iname" ) )
|
||||
{
|
||||
iName = (String) an.values.get( 3 );
|
||||
iName = ( (String[]) an.values.get( 3 ) )[1];
|
||||
}
|
||||
|
||||
if( iName != null && iFace != null )
|
||||
@@ -224,7 +224,7 @@ public final class ASMIntegration implements IClassTransformer
|
||||
|
||||
if( an.values.get( 0 ).equals( "iname" ) )
|
||||
{
|
||||
iName = (String) an.values.get( 1 );
|
||||
iName = ( (String[]) an.values.get( 1 ) )[1];
|
||||
}
|
||||
|
||||
if( iName != null )
|
||||
|
||||
@@ -19,33 +19,29 @@
|
||||
package appeng.util;
|
||||
|
||||
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
import net.minecraft.world.World;
|
||||
|
||||
|
||||
public class BlockUpdate implements Callable
|
||||
public class BlockUpdate implements IWorldCallable<Boolean>
|
||||
{
|
||||
|
||||
final World w;
|
||||
final int x;
|
||||
final int y;
|
||||
final int z;
|
||||
|
||||
public BlockUpdate( World w, int x, int y, int z )
|
||||
public BlockUpdate( int x, int y, int z )
|
||||
{
|
||||
this.w = w;
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.z = z;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object call() throws Exception
|
||||
public Boolean call( World world ) throws Exception
|
||||
{
|
||||
if( this.w.blockExists( this.x, this.y, this.z ) )
|
||||
if( world.blockExists( this.x, this.y, this.z ) )
|
||||
{
|
||||
this.w.notifyBlocksOfNeighborChange( this.x, this.y, this.z, Platform.AIR_BLOCK );
|
||||
world.notifyBlocksOfNeighborChange( this.x, this.y, this.z, Platform.AIR_BLOCK );
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
* This file is part of Applied Energistics 2.
|
||||
* Copyright (c) 2013 - 2015, AlgorithmX2, All rights reserved.
|
||||
*
|
||||
* Applied Energistics 2 is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Applied Energistics 2 is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Applied Energistics 2. If not, see <http://www.gnu.org/licenses/lgpl>.
|
||||
*/
|
||||
|
||||
package appeng.util;
|
||||
|
||||
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import net.minecraft.world.World;
|
||||
|
||||
|
||||
/**
|
||||
* An interface similar to {@link Callable}, but allowing to pass the {@link World} when calling.
|
||||
*
|
||||
* @see Callable
|
||||
* @author yueh
|
||||
* @version rv3
|
||||
* @since rv3
|
||||
*/
|
||||
public interface IWorldCallable<T>
|
||||
{
|
||||
/**
|
||||
* Similar to {@link Callable#call()}
|
||||
*
|
||||
* @see Callable#call()
|
||||
* @param world
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
@Nullable
|
||||
T call( @Nullable World world ) throws Exception;
|
||||
}
|
||||
@@ -1911,7 +1911,7 @@ public class Platform
|
||||
{
|
||||
if( !worldObj.isRemote )
|
||||
{
|
||||
TickHandler.INSTANCE.addCallable( worldObj, new BlockUpdate( worldObj, xCoord, yCoord, zCoord ) );
|
||||
TickHandler.INSTANCE.addCallable( worldObj, new BlockUpdate( xCoord, yCoord, zCoord ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -20,7 +20,6 @@ package appeng.worldgen;
|
||||
|
||||
|
||||
import java.util.Random;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.world.World;
|
||||
@@ -33,6 +32,7 @@ import appeng.core.AEConfig;
|
||||
import appeng.core.features.registries.WorldGenRegistry;
|
||||
import appeng.core.worlddata.WorldData;
|
||||
import appeng.hooks.TickHandler;
|
||||
import appeng.util.IWorldCallable;
|
||||
import appeng.util.Platform;
|
||||
import appeng.worldgen.meteorite.ChunkOnly;
|
||||
|
||||
@@ -51,11 +51,11 @@ public final class MeteoriteWorldGen implements IWorldGenerator
|
||||
int z = r.nextInt( 16 ) + ( chunkZ << 4 );
|
||||
|
||||
int depth = 180 + r.nextInt( 20 );
|
||||
TickHandler.INSTANCE.addCallable( w, new MeteoriteSpawn( x, depth, z, w ) );
|
||||
TickHandler.INSTANCE.addCallable( w, new MeteoriteSpawn( x, depth, z ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
TickHandler.INSTANCE.addCallable( w, new MeteoriteSpawn( chunkX << 4, 128, chunkZ << 4, w ) );
|
||||
TickHandler.INSTANCE.addCallable( w, new MeteoriteSpawn( chunkX << 4, 128, chunkZ << 4 ) );
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -113,24 +113,22 @@ public final class MeteoriteWorldGen implements IWorldGenerator
|
||||
return WorldData.instance().spawnData().getNearByMeteorites( w.provider.dimensionId, chunkX, chunkZ );
|
||||
}
|
||||
|
||||
class MeteoriteSpawn implements Callable
|
||||
class MeteoriteSpawn implements IWorldCallable<Object>
|
||||
{
|
||||
|
||||
final int x;
|
||||
final int z;
|
||||
final World w;
|
||||
final int depth;
|
||||
|
||||
public MeteoriteSpawn( int x, int depth, int z, World w )
|
||||
public MeteoriteSpawn( int x, int depth, int z )
|
||||
{
|
||||
this.x = x;
|
||||
this.z = z;
|
||||
this.w = w;
|
||||
this.depth = depth;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object call() throws Exception
|
||||
public Object call( World world ) throws Exception
|
||||
{
|
||||
int chunkX = this.x >> 4;
|
||||
int chunkZ = this.z >> 4;
|
||||
@@ -138,10 +136,10 @@ public final class MeteoriteWorldGen implements IWorldGenerator
|
||||
double minSqDist = Double.MAX_VALUE;
|
||||
|
||||
// near by meteorites!
|
||||
for( NBTTagCompound data : MeteoriteWorldGen.this.getNearByMeteorites( this.w, chunkX, chunkZ ) )
|
||||
for( NBTTagCompound data : MeteoriteWorldGen.this.getNearByMeteorites( world, chunkX, chunkZ ) )
|
||||
{
|
||||
MeteoritePlacer mp = new MeteoritePlacer();
|
||||
mp.spawnMeteorite( new ChunkOnly( this.w, chunkX, chunkZ ), data );
|
||||
mp.spawnMeteorite( new ChunkOnly( world, chunkX, chunkZ ), data );
|
||||
|
||||
minSqDist = Math.min( minSqDist, mp.getSqDistance( this.x, this.z ) );
|
||||
}
|
||||
@@ -150,11 +148,11 @@ public final class MeteoriteWorldGen implements IWorldGenerator
|
||||
|
||||
if( minSqDist > AEConfig.instance.minMeteoriteDistanceSq || isCluster )
|
||||
{
|
||||
MeteoriteWorldGen.this.tryMeteorite( this.w, this.depth, this.x, this.z );
|
||||
MeteoriteWorldGen.this.tryMeteorite( world, this.depth, this.x, this.z );
|
||||
}
|
||||
|
||||
WorldData.instance().spawnData().setGenerated( this.w.provider.dimensionId, chunkX, chunkZ );
|
||||
WorldData.instance().compassData().service().updateArea( this.w, chunkX, chunkZ );
|
||||
WorldData.instance().spawnData().setGenerated( world.provider.dimensionId, chunkX, chunkZ );
|
||||
WorldData.instance().compassData().service().updateArea( world, chunkX, chunkZ );
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -185,8 +185,9 @@ gui.appliedenergistics2.inWorldPurificationFluix=Drop a Fluix Seed made from Flu
|
||||
gui.appliedenergistics2.inWorldSingularity=To create drop 1 Singularity and 1 Ender Dust and cause an explosion within range of the items.
|
||||
gui.appliedenergistics2.ChargedQuartz=Charged Certus Quartz is crafted by inserting an uncharged Certus Quartz Crystal into the Charger, and powering it.
|
||||
gui.appliedenergistics2.ChargedQuartzFind=Charged Certus Quartz can be found in world semi rarely, it appears similar to normal Certus Quartz, except it sparkles.
|
||||
gui.appliedenergistics2.OfSecondOutput=%1$d%% Chance for second output.
|
||||
gui.appliedenergistics2.NoSecondOutput=No Secondary Output
|
||||
gui.appliedenergistics2.OfSecondOutput=%1$d%% Chance for second output.
|
||||
gui.appliedenergistics2.MultipleOutputs=%1$d%% second, %2$d%% third output.
|
||||
gui.appliedenergistics2.SelectAmount=Select Amount
|
||||
gui.appliedenergistics2.CopyMode=Copy Mode
|
||||
gui.appliedenergistics2.CopyModeDesc=Controls if the contents of the configuration pane are cleared when you remove the cell.
|
||||
|
||||
@@ -42,13 +42,13 @@ tile.appliedenergistics2.BlockSkyStone.SmallBrick.name=Briquettes de pierre de c
|
||||
tile.appliedenergistics2.BlockSkyChest.name=Coffre de pierre de ciel
|
||||
tile.appliedenergistics2.BlockSkyChest.Block.name=Coffre de bloc de pierre de ciel
|
||||
tile.appliedenergistics2.BlockSkyCompass.name=Boussole à météorite
|
||||
tile.appliedenergistics2.BlockCraftingMonitor.name=Moniteur de craft
|
||||
tile.appliedenergistics2.BlockCraftingStorage.name=Disque 1k pour le craft
|
||||
tile.appliedenergistics2.BlockCraftingStorage4k.name=Disque 4k pour le craft
|
||||
tile.appliedenergistics2.BlockCraftingStorage16k.name=Disque 16k pour le craft
|
||||
tile.appliedenergistics2.BlockCraftingStorage64k.name=Disque 64k pour le craft
|
||||
tile.appliedenergistics2.BlockCraftingMonitor.name=Moniteur de fabrication
|
||||
tile.appliedenergistics2.BlockCraftingStorage.name=Disque 1k pour la fabrication
|
||||
tile.appliedenergistics2.BlockCraftingStorage4k.name=Disque 4k pour la fabrication
|
||||
tile.appliedenergistics2.BlockCraftingStorage16k.name=Disque 16k pour la fabrication
|
||||
tile.appliedenergistics2.BlockCraftingStorage64k.name=Disque 64k pour la fabrication
|
||||
tile.appliedenergistics2.BlockCraftingAccelerator.name=Unité de co-traitement
|
||||
tile.appliedenergistics2.BlockCraftingUnit.name=Unité de craft
|
||||
tile.appliedenergistics2.BlockCraftingUnit.name=Unité de fabrication
|
||||
tile.appliedenergistics2.BlockMolecularAssembler.name=Assembleur moléculaire
|
||||
|
||||
// Stairs
|
||||
@@ -61,6 +61,16 @@ tile.appliedenergistics2.SkyStoneBrickStairBlock.name=Escaliers de briques de pi
|
||||
tile.appliedenergistics2.SkyStoneSmallBrickStairBlock.name=Escaliers de petites briques de pierre de ciel
|
||||
tile.appliedenergistics2.SkyStoneStairBlock.name=Escaliers de pierre de ciel
|
||||
|
||||
// Slabs
|
||||
tile.appliedenergistics2.ChiseledQuartzSlabBlock.name=Dalle de Quartz Certus ciselé
|
||||
tile.appliedenergistics2.FluixSlabBlock.name=Dalle de Fluix
|
||||
tile.appliedenergistics2.QuartzPillarSlabBlock.name=Dalle de pilier de Quartz Certus
|
||||
tile.appliedenergistics2.QuartzSlabBlock.name=Dalle de Quartz Certus
|
||||
tile.appliedenergistics2.SkyStoneBlockSlabBlock.name=Dalle de bloc de pierre de ciel
|
||||
tile.appliedenergistics2.SkyStoneBrickSlabBlock.name=Dalle de briques de pierre de ciel
|
||||
tile.appliedenergistics2.SkyStoneSmallBrickSlabBlock.name=Dalle de petites briques de pierre de ciel
|
||||
tile.appliedenergistics2.SkyStoneSlabBlock.name=Dalle de pierre de ciel
|
||||
|
||||
// Chat Messages
|
||||
chat.appliedenergistics2.ChestCannotReadStorageCell=Le coffre ME Chest ne peut pas lire la cellule de stockage.
|
||||
chat.appliedenergistics2.SettingCleared=Paramètres effacés.
|
||||
@@ -83,7 +93,7 @@ itemGroup.appliedenergistics2=Applied Energistics 2
|
||||
itemGroup.appliedenergistics2.facades=Façades Applied Energistics 2
|
||||
|
||||
// GUI
|
||||
gui.appliedenergistics2.CraftingTerminal=Terminal de craft
|
||||
gui.appliedenergistics2.CraftingTerminal=Terminal de fabrication
|
||||
gui.appliedenergistics2.METunnel=ME
|
||||
gui.appliedenergistics2.ItemTunnel=Objet
|
||||
gui.appliedenergistics2.FluidTunnel=Fluide
|
||||
@@ -91,16 +101,18 @@ gui.appliedenergistics2.RedstoneTunnel=Redstone
|
||||
gui.appliedenergistics2.EUTunnel=EU
|
||||
gui.appliedenergistics2.RFTunnel=RF
|
||||
gui.appliedenergistics2.LightTunnel=Lumière
|
||||
gui.appliedenergistics2.OCTunnel=OpenComputers
|
||||
gui.appliedenergistics2.PressureTunnel=Pression
|
||||
|
||||
gui.appliedenergistics2.security.extract.name=Retrait
|
||||
gui.appliedenergistics2.security.inject.name=Dépôt
|
||||
gui.appliedenergistics2.security.craft.name=Craft
|
||||
gui.appliedenergistics2.security.craft.name=Fabrication
|
||||
gui.appliedenergistics2.security.build.name=Construction
|
||||
gui.appliedenergistics2.security.security.name=Sécurité
|
||||
|
||||
gui.appliedenergistics2.security.extract.tip=L'utilisateur est autorisé à retirer un élément du stockage.
|
||||
gui.appliedenergistics2.security.inject.tip=L'utilisateur est autorisé à déposer un élément dans le stockage.
|
||||
gui.appliedenergistics2.security.craft.tip=L'utilisateur peut lancer de nouveaux crafts.
|
||||
gui.appliedenergistics2.security.craft.tip=L'utilisateur peut lancer de nouvelles fabrications.
|
||||
gui.appliedenergistics2.security.build.tip=L'utilisateur peut modifier la structure physique du réseau et faire des changement de configuration.
|
||||
gui.appliedenergistics2.security.security.tip=L'utilisateur peut accéder et modifier le terminal de sécurité du réseau.
|
||||
|
||||
@@ -149,7 +161,7 @@ gui.appliedenergistics2.VibrationChamber=Chambre de vibration
|
||||
gui.appliedenergistics2.NetworkDetails=Détails du réseau
|
||||
gui.appliedenergistics2.StorageCells=Cellules de stockage ME
|
||||
gui.appliedenergistics2.IOBuses=Bus d'import/export ME
|
||||
gui.appliedenergistics2.Stores=Stocke
|
||||
gui.appliedenergistics2.Stores=Stocks
|
||||
gui.appliedenergistics2.BytesUsed=Octets utilisés
|
||||
gui.appliedenergistics2.Types=Types
|
||||
gui.appliedenergistics2.Blank=Vide
|
||||
@@ -158,10 +170,10 @@ gui.appliedenergistics2.Linked=Lié
|
||||
gui.appliedenergistics2.StoredSize=Quantité stockée
|
||||
gui.appliedenergistics2.SkyChest=Coffre de pierre du ciel
|
||||
gui.appliedenergistics2.PatternTerminal=Terminal des modèles
|
||||
gui.appliedenergistics2.CraftingPattern=Modèle de craft
|
||||
gui.appliedenergistics2.CraftingPattern=Modèle de fabrication
|
||||
gui.appliedenergistics2.MolecularAssembler=Assembleur moléculaire
|
||||
gui.appliedenergistics2.ProcessingPattern=Modèle de traitement
|
||||
gui.appliedenergistics2.Crafts=Crafts
|
||||
gui.appliedenergistics2.Crafts=Fabrications
|
||||
gui.appliedenergistics2.And=et
|
||||
gui.appliedenergistics2.Creates=Crée
|
||||
gui.appliedenergistics2.With=avec
|
||||
@@ -183,20 +195,21 @@ gui.appliedenergistics2.Lumen=Lumen
|
||||
gui.appliedenergistics2.Empty=Vide
|
||||
gui.appliedenergistics2.Stored=Stocké
|
||||
gui.appliedenergistics2.Cancel=Annuler
|
||||
gui.appliedenergistics2.Crafting=Craft
|
||||
gui.appliedenergistics2.ETAFormat=HH:mm:ss
|
||||
gui.appliedenergistics2.Crafting=Fabrication
|
||||
gui.appliedenergistics2.Scheduled=Prévu
|
||||
gui.appliedenergistics2.CraftingStatus=Etat du craft
|
||||
gui.appliedenergistics2.CraftingStatus=Etat de fabrication
|
||||
gui.appliedenergistics2.FromStorage=Disponible
|
||||
gui.appliedenergistics2.ToCraft=A crafter
|
||||
gui.appliedenergistics2.CraftingPlan=Plan de craft
|
||||
gui.appliedenergistics2.ToCraft=A fabriquer
|
||||
gui.appliedenergistics2.CraftingPlan=Plan de fabrication
|
||||
gui.appliedenergistics2.Automatic=Automatique
|
||||
gui.appliedenergistics2.Start=Départ
|
||||
gui.appliedenergistics2.Missing=Manquant
|
||||
gui.appliedenergistics2.Bytes=Stockage
|
||||
gui.appliedenergistics2.Simulation=Simulation
|
||||
gui.appliedenergistics2.CoProcessors=Co-traitements
|
||||
gui.appliedenergistics2.CraftingCPU=Unité de craft
|
||||
gui.appliedenergistics2.NoCraftingCPUs=Aucune unité de craft n'est disponible
|
||||
gui.appliedenergistics2.CraftingCPU=Unité de fabrication
|
||||
gui.appliedenergistics2.NoCraftingCPUs=Aucune unité de fabrication n'est disponible
|
||||
gui.appliedenergistics2.CalculatingWait=En cours de calcul, veuillez patienter...
|
||||
gui.appliedenergistics2.Clean=Effacer
|
||||
gui.appliedenergistics2.InvalidPattern=Modèle non valide
|
||||
@@ -204,21 +217,21 @@ gui.appliedenergistics2.Range=Portée
|
||||
gui.appliedenergistics2.TransparentFacades=Façades transparentes
|
||||
gui.appliedenergistics2.TransparentFacadesHint=Contrôle la visibilité des façades avec l'outil réseau dans votre main.
|
||||
gui.appliedenergistics2.CPUs=Unités
|
||||
gui.appliedenergistics2.NoCraftingJobs=Aucun craft actif
|
||||
gui.appliedenergistics2.FacadeCrafting=Craft de façade
|
||||
gui.appliedenergistics2.NoCraftingJobs=Aucune fabrication d'active
|
||||
gui.appliedenergistics2.FacadeCrafting=Fabrication de façade
|
||||
gui.appliedenergistics2.inWorldCraftingPresses=Les plaques de gravure se trouvent au centre des météorites qui peuvent être trouvées dans le monde, elles peuvent être localisées en utilisant une boussole à météorite.
|
||||
gui.appliedenergistics2.Included=Inclus
|
||||
gui.appliedenergistics2.Excluded=Exclus
|
||||
gui.appliedenergistics2.Partitioned=Partitionné
|
||||
gui.appliedenergistics2.Precise=Précis
|
||||
gui.appliedenergistics2.Fuzzy=Brouillon
|
||||
gui.appliedenergistics2.SmallFontCraft=Craft
|
||||
gui.appliedenergistics2.SmallFontCraft=Fabrication
|
||||
gui.appliedenergistics2.LargeFontCraft=+
|
||||
gui.appliedenergistics2.Nothing=Rien
|
||||
|
||||
// GUI Tooltips
|
||||
gui.tooltips.appliedenergistics2.Stash=Stocke des objets
|
||||
gui.tooltips.appliedenergistics2.StashDesc=Renvoie les objets de la grille de craft dans le réseau.
|
||||
gui.tooltips.appliedenergistics2.StashDesc=Renvoie les objets de la grille de fabrication dans le réseau.
|
||||
gui.tooltips.appliedenergistics2.Substitutions=Remplacements du Ore-Dictionnary
|
||||
gui.tooltips.appliedenergistics2.SubstitutionsDesc=Editez les options de remplacement pour les composants en entrée.
|
||||
gui.tooltips.appliedenergistics2.SubstitutionsOn=Remplacements activés
|
||||
@@ -238,7 +251,7 @@ gui.tooltips.appliedenergistics2.TransferToNetwork=Transférer les données au r
|
||||
gui.tooltips.appliedenergistics2.TransferToStorageCell=Transférer les données à la cellule de stockage
|
||||
gui.tooltips.appliedenergistics2.ToggleSortDirection=Basculer la direction de tri
|
||||
gui.tooltips.appliedenergistics2.StoredItems=Objets stockés
|
||||
gui.tooltips.appliedenergistics2.StoredCraftable=Stock / Craft
|
||||
gui.tooltips.appliedenergistics2.StoredCraftable=Stock / Fabriquer
|
||||
gui.tooltips.appliedenergistics2.View=Vue
|
||||
gui.tooltips.appliedenergistics2.RedstoneMode=Mode redstone
|
||||
gui.tooltips.appliedenergistics2.OperationMode=Mode opération
|
||||
@@ -251,7 +264,7 @@ gui.tooltips.appliedenergistics2.PartitionStorage=Partionner le stockage
|
||||
gui.tooltips.appliedenergistics2.Clear=Effacer
|
||||
gui.tooltips.appliedenergistics2.TrashController=Effacement par Maj. / Espace-Clic.
|
||||
gui.tooltips.appliedenergistics2.InterfaceBlockingMode=Mode bloquant
|
||||
gui.tooltips.appliedenergistics2.InterfaceCraftingMode=Mode craft
|
||||
gui.tooltips.appliedenergistics2.InterfaceCraftingMode=Mode fabrication
|
||||
gui.tooltips.appliedenergistics2.Trash=Détruire les éléments
|
||||
gui.tooltips.appliedenergistics2.MatterBalls=Condenser en billes de matière\n%s par élément
|
||||
gui.tooltips.appliedenergistics2.Singularity=Condenser en singularités\n%s par élément
|
||||
@@ -271,17 +284,17 @@ gui.tooltips.appliedenergistics2.SearchMode_NEIStandard=Synchronisation NEI stan
|
||||
gui.tooltips.appliedenergistics2.SearchMode=Mode de la boite de recherche
|
||||
gui.tooltips.appliedenergistics2.PartitionStorageHint=Configure la partition par rapport aux objets actuellement stockés.
|
||||
gui.tooltips.appliedenergistics2.ClearSettings=Efface les paramètres
|
||||
gui.tooltips.appliedenergistics2.Craftable=Craftable
|
||||
gui.tooltips.appliedenergistics2.Craftable=Fabricable
|
||||
gui.tooltips.appliedenergistics2.MoveWhenEmpty=Déplace vers la sortie dès que c'est vide.
|
||||
gui.tooltips.appliedenergistics2.MoveWhenWorkIsDone=Déplace vers la sortie quand le travail est fini.
|
||||
gui.tooltips.appliedenergistics2.MoveWhenFull=Déplace vers la sortie quand c'est plein.
|
||||
gui.tooltips.appliedenergistics2.Disabled=Désactivé
|
||||
gui.tooltips.appliedenergistics2.Enable=Activé
|
||||
gui.tooltips.appliedenergistics2.Blocking=Ne pas insérer d'objets de craft si l'inventaire contient des objets.
|
||||
gui.tooltips.appliedenergistics2.Blocking=Ne pas fabriquer d'objets si l'inventaire contient ces objets.
|
||||
gui.tooltips.appliedenergistics2.NonBlocking=Ignorer le contenu de l'inventaire cible.
|
||||
gui.tooltips.appliedenergistics2.Craft=Comportement de craft
|
||||
gui.tooltips.appliedenergistics2.CraftOnly=Ne pas utiliser les objets stockés; préférer le craft pour l'export.
|
||||
gui.tooltips.appliedenergistics2.CraftEither=Utiliser les éléments stockés, ou les crafter lors de l'export.
|
||||
gui.tooltips.appliedenergistics2.Craft=Comportement de fabrication
|
||||
gui.tooltips.appliedenergistics2.CraftOnly=Ne pas utiliser les objets stockés; préférer les fabriquer pour l'export.
|
||||
gui.tooltips.appliedenergistics2.CraftEither=Utiliser les éléments stockés, ou les fabriquer lors de l'export.
|
||||
gui.tooltips.appliedenergistics2.LevelType=Type de niveau
|
||||
gui.tooltips.appliedenergistics2.LevelType_Energy=Energie
|
||||
gui.tooltips.appliedenergistics2.LevelType_Item=Objet
|
||||
@@ -292,15 +305,19 @@ gui.tooltips.appliedenergistics2.TerminalStyle_Full=Terminal plein écran
|
||||
gui.tooltips.appliedenergistics2.TerminalStyle_Tall=Grand terminal centré
|
||||
gui.tooltips.appliedenergistics2.TerminalStyle_Small=Petit terminal centré
|
||||
gui.tooltips.appliedenergistics2.DoesntDespawn=Cet élément ne disparaitra pas.
|
||||
gui.tooltips.appliedenergistics2.EmitterMode=Mode d'émission du craft
|
||||
gui.tooltips.appliedenergistics2.CraftViaRedstone=Emettre un signal Redstone pour crafter l'objet.
|
||||
gui.tooltips.appliedenergistics2.EmitWhenCrafting=Emettre un signal Redstone quand l'objet est en cours de craft.
|
||||
gui.tooltips.appliedenergistics2.EmitterMode=Mode d'émission de la fabrication
|
||||
gui.tooltips.appliedenergistics2.CraftViaRedstone=Emettre un signal Redstone pour fabriquer l'objet.
|
||||
gui.tooltips.appliedenergistics2.EmitWhenCrafting=Emettre un signal Redstone quand l'objet est en cours de fabrication.
|
||||
gui.tooltips.appliedenergistics2.ReportInaccessibleItems=Rapport d'éléments inaccessibles
|
||||
gui.tooltips.appliedenergistics2.ReportInaccessibleItemsYes=Oui: Les éléments ne pouvant pas être extraits seront visibles.
|
||||
gui.tooltips.appliedenergistics2.ReportInaccessibleItemsNo=Non: Seuls les éléments extractibles seront visibles.
|
||||
gui.tooltips.appliedenergistics2.BlockPlacement=Placement de bloc
|
||||
gui.tooltips.appliedenergistics2.BlockPlacementYes=Les blocs seront placés comme un bloc.
|
||||
gui.tooltips.appliedenergistics2.BlockPlacementNo=Les blocs seront jettés comme un élément.
|
||||
gui.tooltips.appliedenergistics2.SchedulingMode=Mode de planification
|
||||
gui.tooltips.appliedenergistics2.SchedulingModeDefault=Exporte le premier élément jusqu'à ce que le réseau soit vide, puis essaye les suivants.
|
||||
gui.tooltips.appliedenergistics2.SchedulingModeRoundRobin=Exporte les éléments l'un après l'autre.
|
||||
gui.tooltips.appliedenergistics2.SchedulingModeRandom=Exporte les éléments aléatoirement.
|
||||
gui.tooltips.appliedenergistics2.ItemsStored=Eléments stockés: %s
|
||||
gui.tooltips.appliedenergistics2.ItemsRequestable=Eléments recherchable: %s
|
||||
|
||||
@@ -412,6 +429,7 @@ item.appliedenergistics2.ItemMaterial.SkyDust.name=Poussière de pierre du ciel
|
||||
item.appliedenergistics2.ItemMaterial.CardCrafting.name=Carte de fabrication
|
||||
|
||||
item.appliedenergistics2.ItemPart.AnnihilationPlane.name=Plan de dématérialisation ME
|
||||
item.appliedenergistics2.ItemPart.IdentityAnnihilationPlane.name=Plan de dématérialisation d'identité ME
|
||||
item.appliedenergistics2.ItemPart.CableAnchor.name=Ancre de câble
|
||||
item.appliedenergistics2.ItemPart.CableCovered.name=Câble couvert ME
|
||||
item.appliedenergistics2.ItemPart.CableGlass.name=Câble de verre ME
|
||||
@@ -419,7 +437,7 @@ item.appliedenergistics2.ItemPart.CableSmart.name=Câble intelligent ME
|
||||
item.appliedenergistics2.ItemPart.CableDense.name=Câble dense ME
|
||||
item.appliedenergistics2.ItemPart.StorageMonitor.name=Moniteur de stockage ME
|
||||
item.appliedenergistics2.ItemPart.ConversionMonitor.name=Moniteur de conversion ME
|
||||
item.appliedenergistics2.ItemPart.CraftingTerminal.name=Terminal de craft ME
|
||||
item.appliedenergistics2.ItemPart.CraftingTerminal.name=Terminal de fabrication ME
|
||||
item.appliedenergistics2.ItemPart.SemiDarkMonitor.name=Panneau illuminé
|
||||
item.appliedenergistics2.ItemPart.Monitor.name=Panneau illuminé éclairé
|
||||
item.appliedenergistics2.ItemPart.DarkMonitor.name=Panneau illuminé sombre
|
||||
@@ -435,8 +453,9 @@ item.appliedenergistics2.ItemPart.StorageBus.name=Bus de stockage ME
|
||||
item.appliedenergistics2.ItemPart.Terminal.name=Terminal ME
|
||||
item.appliedenergistics2.ItemPart.InvertedToggleBus.name=Bus levier inversé ME
|
||||
item.appliedenergistics2.ItemPart.ToggleBus.name=Bus levier ME
|
||||
item.appliedenergistics2.ItemPart.CraftingMonitor.name=Moniteur des crafts ME
|
||||
item.appliedenergistics2.ItemPart.CraftingMonitor.name=Moniteur des fabrications ME
|
||||
item.appliedenergistics2.ItemPart.InterfaceTerminal.name=Terminal d'interface ME
|
||||
item.appliedenergistics2.ItemPart.InvalidType.name=Éléments désactivés
|
||||
|
||||
item.appliedenergistics2.ItemSpatialStorageCell.128Cubed.name=Disque spatiale de 128³
|
||||
item.appliedenergistics2.ItemSpatialStorageCell.16Cubed.name=Disque spatiale de 16³
|
||||
@@ -482,55 +501,55 @@ commands.ae2.Supporters=Affiche une liste des supporters de AE2
|
||||
|
||||
// Achievements
|
||||
achievement.ae2.Compass=Chasseur de météorites
|
||||
achievement.ae2.Compass.desc=Crafter une boussole à météorite.
|
||||
achievement.ae2.Compass.desc=Fabriquer une boussole à météorite.
|
||||
achievement.ae2.Presses=Technologie inconnue
|
||||
achievement.ae2.Presses.desc=Trouver une matrice de presse à processeur.
|
||||
achievement.ae2.SpatialIO=Coordination spatiale
|
||||
achievement.ae2.SpatialIO.desc=Crafter un port d'E/S spatial.
|
||||
achievement.ae2.SpatialIO.desc=Fabriquer un port d'E/S spatial.
|
||||
achievement.ae2.SpatialIOExplorer=A coeur vaillant...
|
||||
achievement.ae2.SpatialIOExplorer.desc=Etre stocké dans un disque spatial.
|
||||
achievement.ae2.StorageCell=Mieux que des coffres
|
||||
achievement.ae2.StorageCell.desc=Crafter une cellule de stockage.
|
||||
achievement.ae2.StorageCell.desc=Fabriquer une cellule de stockage.
|
||||
achievement.ae2.IOPort=Mélange de disque
|
||||
achievement.ae2.IOPort.desc=Crafter un port d'E/S.
|
||||
achievement.ae2.IOPort.desc=Fabriquer un port d'E/S.
|
||||
achievement.ae2.CraftingTerminal=Une table (bien) plus grande
|
||||
achievement.ae2.CraftingTerminal.desc=Crafter un terminal de craft.
|
||||
achievement.ae2.PatternTerminal=Maitre crafteur
|
||||
achievement.ae2.PatternTerminal.desc=Crafter un terminal de modèles.
|
||||
achievement.ae2.CraftingTerminal.desc=Fabriquer un terminal de fabrication.
|
||||
achievement.ae2.PatternTerminal=Maitre fabricateur
|
||||
achievement.ae2.PatternTerminal.desc=Fabriquer un terminal de modèles.
|
||||
achievement.ae2.ChargedQuartz=Electrifiant
|
||||
achievement.ae2.ChargedQuartz.desc=Trouver du Quartz chargé.
|
||||
achievement.ae2.Fluix=Artificiel
|
||||
achievement.ae2.Fluix.desc=Créer des critaux de Fluix.
|
||||
achievement.ae2.Charger=Production de Fluix
|
||||
achievement.ae2.Charger.desc=Crafter un chargeur.
|
||||
achievement.ae2.Charger.desc=Fabriquer un chargeur.
|
||||
achievement.ae2.CrystalGrowthAccelerator=Accélérateur est un euphémisme
|
||||
achievement.ae2.CrystalGrowthAccelerator.desc=Crafter un accélérateur de croissance de cristal.
|
||||
achievement.ae2.CrystalGrowthAccelerator.desc=Fabriquer un accélérateur de croissance de cristal.
|
||||
achievement.ae2.GlassCable=Connexion d'énergie Fluix
|
||||
achievement.ae2.GlassCable.desc=Crafter un câble de verre ME.
|
||||
achievement.ae2.GlassCable.desc=Fabriquer un câble de verre ME.
|
||||
achievement.ae2.Networking1=Apprenti réseau
|
||||
achievement.ae2.Networking1.desc=Atteindre 8 canaux en utilisant des dispositifs sur un réseau.
|
||||
achievement.ae2.Controller=Tableau de distribution du réseau
|
||||
achievement.ae2.Controller.desc=Crafter un contrôleur.
|
||||
achievement.ae2.Controller.desc=Fabriquer un contrôleur.
|
||||
achievement.ae2.Networking2=Ingénieur réseau
|
||||
achievement.ae2.Networking2.desc=Atteindre 128 canaux en utilisant des dispositifs sur un réseau.
|
||||
achievement.ae2.Networking3=Administrateur réseau
|
||||
achievement.ae2.Networking3.desc=Atteindre 2048 canaux en utilisant des dispositifs sur un réseau.
|
||||
achievement.ae2.P2P=Réseau point à point
|
||||
achievement.ae2.P2P.desc=Crafter un tunnel P2P.
|
||||
achievement.ae2.P2P.desc=Fabriquer un tunnel P2P.
|
||||
achievement.ae2.Recursive=Réseau récursif
|
||||
achievement.ae2.Recursive.desc=Placer une interface sur un bus de stockage.
|
||||
achievement.ae2.CraftingCPU=Crafting nouvelle génération
|
||||
achievement.ae2.CraftingCPU.desc=Crafter une unité de craft.
|
||||
achievement.ae2.CraftingCPU=Fabrication de nouvelle génération
|
||||
achievement.ae2.CraftingCPU.desc=Fabriquer une unité de fabrication.
|
||||
achievement.ae2.Facade=Esthétique du réseau
|
||||
achievement.ae2.Facade.desc=Crafter des façades de câbles.
|
||||
achievement.ae2.Facade.desc=Fabriquer des façades de câbles.
|
||||
achievement.ae2.NetworkTool=Diagnostics réseau
|
||||
achievement.ae2.NetworkTool.desc=Crafter un outil réseau.
|
||||
achievement.ae2.NetworkTool.desc=Fabriquer un outil réseau.
|
||||
achievement.ae2.PortableCell=Stockage nomade
|
||||
achievement.ae2.PortableCell.desc=Crafter un disque portable.
|
||||
achievement.ae2.PortableCell.desc=Fabriquer un disque portable.
|
||||
achievement.ae2.StorageBus=Potentiel illimité
|
||||
achievement.ae2.StorageBus.desc=Crafter un bus de stockage.
|
||||
achievement.ae2.StorageBus.desc=Fabriquer un bus de stockage.
|
||||
achievement.ae2.QNB=Ouvrir un tunnel quantique
|
||||
achievement.ae2.QNB.desc=Crafter un lien quantique.
|
||||
achievement.ae2.QNB.desc=Fabriquer un lien quantique.
|
||||
|
||||
// Stats
|
||||
stat.ae2.ItemsInserted=Eléments ajoutés aux disques ME
|
||||
|
||||
@@ -417,3 +417,54 @@ item.appliedenergistics2.ToolBiometricCard.name=身份卡
|
||||
|
||||
item.appliedenergistics2.ToolDebugCard.name=Dev.調試卡
|
||||
item.appliedenergistics2.ToolReplicatorCard.name=Dev.復制卡
|
||||
|
||||
achievement.ae2.Compass=隕石追跡者
|
||||
achievement.ae2.Compass.desc=合成一個隕石羅盤
|
||||
achievement.ae2.Presses=這是什麼東西啊!?
|
||||
achievement.ae2.Presses.desc=找到一塊壓印模板
|
||||
achievement.ae2.SpatialIO=空間操弄者
|
||||
achievement.ae2.SpatialIO.desc=合成一個空間IO端口
|
||||
achievement.ae2.SpatialIOExplorer=大膽地去吧!
|
||||
achievement.ae2.SpatialIOExplorer.desc=被儲存在空間硬碟裡
|
||||
achievement.ae2.StorageCell=勝過箱子
|
||||
achievement.ae2.StorageCell.desc=合成一個存儲元件
|
||||
achievement.ae2.IOPort=物品操弄者
|
||||
achievement.ae2.IOPort.desc=合成一個ME-IO端口
|
||||
achievement.ae2.CraftingTerminal=好一個"大"桌子
|
||||
achievement.ae2.CraftingTerminal.desc=合成一個ME合成終端
|
||||
achievement.ae2.PatternTerminal=合成大師
|
||||
achievement.ae2.PatternTerminal.desc=合成一個ME樣板終端
|
||||
achievement.ae2.ChargedQuartz=哇!閃耀!!
|
||||
achievement.ae2.ChargedQuartz.desc=找到充能賽特斯石英水晶
|
||||
achievement.ae2.Fluix=這不是天然的!
|
||||
achievement.ae2.Fluix.desc=製作福魯伊克斯水晶
|
||||
achievement.ae2.Charger=水晶量產者
|
||||
achievement.ae2.Charger.desc=合成一個充能器
|
||||
achievement.ae2.CrystalGrowthAccelerator=時間只是浮雲
|
||||
achievement.ae2.CrystalGrowthAccelerator.desc=合成一個晶體催生器
|
||||
achievement.ae2.GlassCable=能量連接
|
||||
achievement.ae2.GlassCable.desc=合成ME玻璃線纜
|
||||
achievement.ae2.Networking1=初學者
|
||||
achievement.ae2.Networking1.desc=在你的網路中連接8台可互聯機器
|
||||
achievement.ae2.Controller=交通樞紐
|
||||
achievement.ae2.Controller.desc=合成一個控制器
|
||||
achievement.ae2.Networking2=工程師
|
||||
achievement.ae2.Networking2.desc=在你的網路中連接128台可互聯機器
|
||||
achievement.ae2.Networking3=萬里長"程"
|
||||
achievement.ae2.Networking3.desc=在你的網路中連接2048台可互聯機器
|
||||
achievement.ae2.P2P=雙向溝通
|
||||
achievement.ae2.P2P.desc=合成一個P2P通道
|
||||
achievement.ae2.Recursive=遞廻線路
|
||||
achievement.ae2.Recursive.desc=在儲存總線上放置一個接口
|
||||
achievement.ae2.CraftingCPU=近代科技
|
||||
achievement.ae2.CraftingCPU.desc=合成一個合成處理器
|
||||
achievement.ae2.Facade=線路美學
|
||||
achievement.ae2.Facade.desc=合成線路偽裝版
|
||||
achievement.ae2.NetworkTool=診斷線路
|
||||
achievement.ae2.NetworkTool.desc=合成一個網路工具
|
||||
achievement.ae2.PortableCell=百寶袋
|
||||
achievement.ae2.PortableCell.desc=合成一個便攜元件
|
||||
achievement.ae2.StorageBus=無窮潛力
|
||||
achievement.ae2.StorageBus.desc=合成一個存儲總線
|
||||
achievement.ae2.QNB=看!牛郎和織女牽手了!
|
||||
achievement.ae2.QNB.desc=合成一個量子環
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
# AE2 Ore Dictionary
|
||||
# Materials for processing in other machines
|
||||
ore=ae2:ItemMaterial.CertusQuartzCrystal -> crystalCertusQuartz
|
||||
ore=ae2:ItemMaterial.FluixCrystal -> crystalFluix
|
||||
ore=ae2:ItemMaterial.PurifiedFluixCrystal -> crystalPureFluix
|
||||
ore=ae2:ItemMaterial.NetherQuartzDust -> dustNetherQuartz
|
||||
ore=ae2:ItemMaterial.CertusQuartzDust -> dustCertusQuartz
|
||||
ore=ae2:ItemMaterial.FluixDust -> dustFluix
|
||||
|
||||
# Ores of AE2
|
||||
ore=ae2:tile.OreQuartz -> oreCertusQuartz
|
||||
ore=ae2:tile.OreQuartzCharged -> oreCertusQuartz
|
||||
|
||||
# Parts to be used
|
||||
ore= ae2:ItemPart.SemiDarkMonitor -> itemIlluminatedPanel
|
||||
ore= ae2:ItemPart.Monitor -> itemIlluminatedPanel
|
||||
ore= ae2:ItemPart.DarkMonitor -> itemIlluminatedPanel
|
||||
@@ -1,11 +0,0 @@
|
||||
# Forge Ore Dictionary
|
||||
# logWood, slabWood, stairWood, treeSapling, treeLeaves,
|
||||
# oreGold, oreIron, oreLapis, oreDiamond, oreRedstone, oreEmerald, oreQuartz, oreCoal,
|
||||
# stone, cobblestone, record, stickWood, plankWood,
|
||||
# dyeBlack, dyeRed, dyeGreen, dyeBrown, dyeBlue, dyePurple, dyeCyan, dyeLightGray, dyeGray, dyePink, dyeLime, dyeYellow, dyeLightBlue, dyeMagenta, dyeOrange, dyeWhite
|
||||
|
||||
# Minecraft Ore Dict Entries
|
||||
# Renamed for less clashing
|
||||
ore=mc:quartz -> crystalNetherQuartz
|
||||
ore=mc:wool:* -> blockWool
|
||||
ore=mc:stained_hardened_clay:* -> blockStainedHardenedClay
|
||||
@@ -328,6 +328,7 @@
|
||||
<h4 id="import">Import</h4>
|
||||
<ul>
|
||||
<li>lets you load an additional recipe file</li>
|
||||
<li>this works with subdirectories, but the path needs to be always a relative path to the root recipe directory</li>
|
||||
<li>
|
||||
AE2: import all recipes for stairs<br />
|
||||
<code>import = stairs.recipe</code>
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
alias=mc -> minecraft
|
||||
alias=ae2 -> appliedenergistics2
|
||||
@@ -1,69 +0,0 @@
|
||||
|
||||
shaped=
|
||||
ae2:BlockQuartzGlass mc:glowstone_dust ae2:BlockQuartzGlass,
|
||||
mc:glowstone_dust certusCrystal mc:glowstone_dust,
|
||||
mc:iron_ingot mc:iron_ingot mc:iron_ingot
|
||||
-> ae2:ItemMaterial.BlankPattern
|
||||
|
||||
shapeless=
|
||||
ae2:ItemMaterial.BasicCard mc:crafting_table
|
||||
-> ae2:ItemMaterial.CardCrafting
|
||||
|
||||
shaped=
|
||||
ae2:ItemMaterial.FormationCore mc:iron_ingot _,
|
||||
mc:iron_ingot ae2:ItemMaterial.Cell4kPart _,
|
||||
_ _ ae2:BlockEnergyCell
|
||||
-> ae2:ToolColorApplicator
|
||||
|
||||
shapeless=
|
||||
monitor interface ae2:ItemMaterial.EngProcessor
|
||||
-> ae2:ItemPart.InterfaceTerminal
|
||||
|
||||
shapeless=
|
||||
ae2:ItemPart.CraftingTerminal ae2:ItemMaterial.EngProcessor
|
||||
-> ae2:ItemPart.PatternTerminal
|
||||
|
||||
shaped=
|
||||
mc:iron_ingot ae2:BlockQuartzGlass mc:iron_ingot,
|
||||
ae2:ItemMaterial.AnnihilationCore mc:crafting_table ae2:ItemMaterial.FormationCore,
|
||||
mc:iron_ingot ae2:BlockQuartzGlass mc:iron_ingot
|
||||
-> ae2:BlockMolecularAssembler
|
||||
|
||||
shaped=
|
||||
mc:iron_ingot ae2:ItemMaterial.CalcProcessor mc:iron_ingot,
|
||||
cable ae2:ItemMaterial.LogicProcessor cable,
|
||||
mc:iron_ingot ae2:ItemMaterial.CalcProcessor mc:iron_ingot
|
||||
-> ae2:BlockCraftingUnit:0
|
||||
|
||||
# co processor
|
||||
shapeless=
|
||||
ae2:BlockCraftingUnit:0
|
||||
ae2:ItemMaterial.EngProcessor
|
||||
-> ae2:BlockCraftingUnit:1
|
||||
|
||||
shapeless=
|
||||
ae2:BlockCraftingUnit:0
|
||||
ae2:ItemPart.StorageMonitor
|
||||
-> ae2:BlockCraftingMonitor
|
||||
|
||||
# various storage sizes
|
||||
|
||||
shapeless=
|
||||
ae2:BlockCraftingUnit:0
|
||||
ae2:ItemMaterial.Cell1kPart
|
||||
-> ae2:BlockCraftingStorage:0
|
||||
|
||||
shapeless=
|
||||
ae2:BlockCraftingUnit:0
|
||||
ae2:ItemMaterial.Cell4kPart
|
||||
-> ae2:BlockCraftingStorage:1
|
||||
|
||||
shapeless=
|
||||
ae2:BlockCraftingUnit:0
|
||||
ae2:ItemMaterial.Cell16kPart
|
||||
-> ae2:BlockCraftingStorage:2
|
||||
|
||||
shapeless=
|
||||
ae2:BlockCraftingUnit:0
|
||||
ae2:ItemMaterial.Cell64kPart
|
||||
-> ae2:BlockCraftingStorage:3
|
||||
@@ -0,0 +1,8 @@
|
||||
shaped=
|
||||
ae2:BlockQuartz,
|
||||
ae2:BlockQuartz
|
||||
-> 2 ae2:BlockQuartzPillar
|
||||
|
||||
shaped=
|
||||
ae2:BlockQuartz ae2:BlockQuartz
|
||||
-> 2 ae2:BlockQuartzChiseled
|
||||
@@ -0,0 +1,30 @@
|
||||
# Raw Storage Blocks
|
||||
shaped=
|
||||
oredictionary:crystalCertusQuartz oredictionary:crystalCertusQuartz,
|
||||
oredictionary:crystalCertusQuartz oredictionary:crystalCertusQuartz
|
||||
-> ae2:BlockQuartz
|
||||
|
||||
shaped=
|
||||
oredictionary:crystalFluix oredictionary:crystalFluix,
|
||||
oredictionary:crystalFluix oredictionary:crystalFluix
|
||||
-> ae2:BlockFluix
|
||||
|
||||
|
||||
# Pure Storage Blocks
|
||||
shaped=
|
||||
ae2:ItemMaterial.PurifiedNetherQuartzCrystal ae2:ItemMaterial.PurifiedNetherQuartzCrystal ae2:ItemMaterial.PurifiedNetherQuartzCrystal,
|
||||
ae2:ItemMaterial.PurifiedNetherQuartzCrystal _ ae2:ItemMaterial.PurifiedNetherQuartzCrystal,
|
||||
ae2:ItemMaterial.PurifiedNetherQuartzCrystal ae2:ItemMaterial.PurifiedNetherQuartzCrystal ae2:ItemMaterial.PurifiedNetherQuartzCrystal
|
||||
-> mc:quartz_block
|
||||
|
||||
shaped=
|
||||
ae2:ItemMaterial.PurifiedCertusQuartzCrystal ae2:ItemMaterial.PurifiedCertusQuartzCrystal ae2:ItemMaterial.PurifiedCertusQuartzCrystal,
|
||||
ae2:ItemMaterial.PurifiedCertusQuartzCrystal _ ae2:ItemMaterial.PurifiedCertusQuartzCrystal,
|
||||
ae2:ItemMaterial.PurifiedCertusQuartzCrystal ae2:ItemMaterial.PurifiedCertusQuartzCrystal ae2:ItemMaterial.PurifiedCertusQuartzCrystal
|
||||
-> ae2:BlockQuartz
|
||||
|
||||
shaped=
|
||||
ae2:ItemMaterial.PurifiedFluixCrystal ae2:ItemMaterial.PurifiedFluixCrystal ae2:ItemMaterial.PurifiedFluixCrystal,
|
||||
ae2:ItemMaterial.PurifiedFluixCrystal _ ae2:ItemMaterial.PurifiedFluixCrystal,
|
||||
ae2:ItemMaterial.PurifiedFluixCrystal ae2:ItemMaterial.PurifiedFluixCrystal ae2:ItemMaterial.PurifiedFluixCrystal
|
||||
-> ae2:BlockFluix
|
||||
@@ -0,0 +1,7 @@
|
||||
shaped=
|
||||
ae2:ItemMaterial.CertusQuartzCrystalCharged mc:iron_ingot
|
||||
-> 2 ae2:BlockQuartzTorch
|
||||
|
||||
shaped=
|
||||
netherCrystal mc:iron_ingot
|
||||
-> ae2:BlockLightDetector
|
||||
@@ -0,0 +1,7 @@
|
||||
import=decorative/certus.recipe
|
||||
import=decorative/crystals.recipe
|
||||
import=decorative/fixtures.recipe
|
||||
import=decorative/quartzglass.recipe
|
||||
import=decorative/skystone.recipe
|
||||
import=decorative/slabs.recipe
|
||||
import=decorative/stairs.recipe
|
||||
@@ -0,0 +1,9 @@
|
||||
shaped=
|
||||
dustQuartz glass dustQuartz,
|
||||
glass dustQuartz glass,
|
||||
dustQuartz glass dustQuartz
|
||||
-> 4 ae2:BlockQuartzGlass
|
||||
|
||||
shaped=
|
||||
mc:glowstone_dust ae2:BlockQuartzGlass mc:glowstone_dust
|
||||
-> ae2:BlockQuartzLamp
|
||||
@@ -0,0 +1,11 @@
|
||||
smelt=
|
||||
ae2:BlockSkyStone -> ae2:BlockSkyStone:1
|
||||
|
||||
shapeless=
|
||||
ae2:BlockSkyStone:1 -> ae2:BlockSkyStone:2
|
||||
|
||||
shapeless=
|
||||
ae2:BlockSkyStone:2 -> ae2:BlockSkyStone:3
|
||||
|
||||
shapeless=
|
||||
ae2:BlockSkyStone:3 -> ae2:BlockSkyStone:1
|
||||
+8
-8
@@ -1,47 +1,47 @@
|
||||
shaped=
|
||||
ae2:BlockQuartzChiseled _ _,
|
||||
ae2:BlockQuartzChiseled _ _,
|
||||
ae2:BlockQuartzChiseled ae2:BlockQuartzChiseled _,
|
||||
ae2:BlockQuartzChiseled ae2:BlockQuartzChiseled ae2:BlockQuartzChiseled
|
||||
-> 4 ae2:ChiseledQuartzStairBlock
|
||||
|
||||
shaped=
|
||||
ae2:BlockFluix _ _,
|
||||
ae2:BlockFluix _ _,
|
||||
ae2:BlockFluix ae2:BlockFluix _,
|
||||
ae2:BlockFluix ae2:BlockFluix ae2:BlockFluix
|
||||
-> 4 ae2:FluixStairBlock
|
||||
|
||||
shaped=
|
||||
ae2:BlockQuartzPillar _ _,
|
||||
ae2:BlockQuartzPillar _ _,
|
||||
ae2:BlockQuartzPillar ae2:BlockQuartzPillar _,
|
||||
ae2:BlockQuartzPillar ae2:BlockQuartzPillar ae2:BlockQuartzPillar
|
||||
-> 4 ae2:QuartzPillarStairBlock
|
||||
|
||||
shaped=
|
||||
ae2:BlockQuartz _ _,
|
||||
ae2:BlockQuartz _ _,
|
||||
ae2:BlockQuartz ae2:BlockQuartz _,
|
||||
ae2:BlockQuartz ae2:BlockQuartz ae2:BlockQuartz
|
||||
-> 4 ae2:QuartzStairBlock
|
||||
|
||||
shaped=
|
||||
ae2:BlockSkyStone _ _,
|
||||
ae2:BlockSkyStone _ _,
|
||||
ae2:BlockSkyStone ae2:BlockSkyStone _,
|
||||
ae2:BlockSkyStone ae2:BlockSkyStone ae2:BlockSkyStone
|
||||
-> 4 ae2:SkyStoneStairBlock
|
||||
|
||||
shaped=
|
||||
ae2:BlockSkyStone:1 _ _,
|
||||
ae2:BlockSkyStone:1 _ _,
|
||||
ae2:BlockSkyStone:1 ae2:BlockSkyStone:1 _,
|
||||
ae2:BlockSkyStone:1 ae2:BlockSkyStone:1 ae2:BlockSkyStone:1
|
||||
-> 4 ae2:SkyStoneBlockStairBlock
|
||||
|
||||
shaped=
|
||||
ae2:BlockSkyStone:2 _ _,
|
||||
ae2:BlockSkyStone:2 _ _,
|
||||
ae2:BlockSkyStone:2 ae2:BlockSkyStone:2 _,
|
||||
ae2:BlockSkyStone:2 ae2:BlockSkyStone:2 ae2:BlockSkyStone:2
|
||||
-> 4 ae2:SkyStoneBrickStairBlock
|
||||
|
||||
shaped=
|
||||
ae2:BlockSkyStone:3 _ _,
|
||||
ae2:BlockSkyStone:3 _ _,
|
||||
ae2:BlockSkyStone:3 ae2:BlockSkyStone:3 _,
|
||||
ae2:BlockSkyStone:3 ae2:BlockSkyStone:3 ae2:BlockSkyStone:3
|
||||
-> 4 ae2:SkyStoneSmallBrickStairBlock
|
||||
@@ -1,96 +0,0 @@
|
||||
|
||||
shaped=
|
||||
ae2:CableCovered ae2:CableCovered ae2:CableCovered,
|
||||
ae2:CableCovered oredictionary:dyeWhite ae2:CableCovered,
|
||||
ae2:CableCovered ae2:CableCovered ae2:CableCovered
|
||||
-> 8 ae2:CableCovered.White
|
||||
|
||||
shaped=
|
||||
ae2:CableCovered ae2:CableCovered ae2:CableCovered,
|
||||
ae2:CableCovered oredictionary:dyeBlack ae2:CableCovered,
|
||||
ae2:CableCovered ae2:CableCovered ae2:CableCovered
|
||||
-> 8 ae2:CableCovered.Black
|
||||
|
||||
shaped=
|
||||
ae2:CableCovered ae2:CableCovered ae2:CableCovered,
|
||||
ae2:CableCovered oredictionary:dyeRed ae2:CableCovered,
|
||||
ae2:CableCovered ae2:CableCovered ae2:CableCovered
|
||||
-> 8 ae2:CableCovered.Red
|
||||
|
||||
shaped=
|
||||
ae2:CableCovered ae2:CableCovered ae2:CableCovered,
|
||||
ae2:CableCovered oredictionary:dyeGreen ae2:CableCovered,
|
||||
ae2:CableCovered ae2:CableCovered ae2:CableCovered
|
||||
-> 8 ae2:CableCovered.Green
|
||||
|
||||
shaped=
|
||||
ae2:CableCovered ae2:CableCovered ae2:CableCovered,
|
||||
ae2:CableCovered oredictionary:dyeBrown ae2:CableCovered,
|
||||
ae2:CableCovered ae2:CableCovered ae2:CableCovered
|
||||
-> 8 ae2:CableCovered.Brown
|
||||
|
||||
shaped=
|
||||
ae2:CableCovered ae2:CableCovered ae2:CableCovered,
|
||||
ae2:CableCovered oredictionary:dyeBlue ae2:CableCovered,
|
||||
ae2:CableCovered ae2:CableCovered ae2:CableCovered
|
||||
-> 8 ae2:CableCovered.Blue
|
||||
|
||||
shaped=
|
||||
ae2:CableCovered ae2:CableCovered ae2:CableCovered,
|
||||
ae2:CableCovered oredictionary:dyePurple ae2:CableCovered,
|
||||
ae2:CableCovered ae2:CableCovered ae2:CableCovered
|
||||
-> 8 ae2:CableCovered.Purple
|
||||
|
||||
shaped=
|
||||
ae2:CableCovered ae2:CableCovered ae2:CableCovered,
|
||||
ae2:CableCovered oredictionary:dyeCyan ae2:CableCovered,
|
||||
ae2:CableCovered ae2:CableCovered ae2:CableCovered
|
||||
-> 8 ae2:CableCovered.Cyan
|
||||
|
||||
shaped=
|
||||
ae2:CableCovered ae2:CableCovered ae2:CableCovered,
|
||||
ae2:CableCovered oredictionary:dyeLightGray ae2:CableCovered,
|
||||
ae2:CableCovered ae2:CableCovered ae2:CableCovered
|
||||
-> 8 ae2:CableCovered.LightGray
|
||||
|
||||
shaped=
|
||||
ae2:CableCovered ae2:CableCovered ae2:CableCovered,
|
||||
ae2:CableCovered oredictionary:dyeGray ae2:CableCovered,
|
||||
ae2:CableCovered ae2:CableCovered ae2:CableCovered
|
||||
-> 8 ae2:CableCovered.Gray
|
||||
|
||||
shaped=
|
||||
ae2:CableCovered ae2:CableCovered ae2:CableCovered,
|
||||
ae2:CableCovered oredictionary:dyePink ae2:CableCovered,
|
||||
ae2:CableCovered ae2:CableCovered ae2:CableCovered
|
||||
-> 8 ae2:CableCovered.Pink
|
||||
|
||||
shaped=
|
||||
ae2:CableCovered ae2:CableCovered ae2:CableCovered,
|
||||
ae2:CableCovered oredictionary:dyeLime ae2:CableCovered,
|
||||
ae2:CableCovered ae2:CableCovered ae2:CableCovered
|
||||
-> 8 ae2:CableCovered.Lime
|
||||
|
||||
shaped=
|
||||
ae2:CableCovered ae2:CableCovered ae2:CableCovered,
|
||||
ae2:CableCovered oredictionary:dyeYellow ae2:CableCovered,
|
||||
ae2:CableCovered ae2:CableCovered ae2:CableCovered
|
||||
-> 8 ae2:CableCovered.Yellow
|
||||
|
||||
shaped=
|
||||
ae2:CableCovered ae2:CableCovered ae2:CableCovered,
|
||||
ae2:CableCovered oredictionary:dyeLightBlue ae2:CableCovered,
|
||||
ae2:CableCovered ae2:CableCovered ae2:CableCovered
|
||||
-> 8 ae2:CableCovered.LightBlue
|
||||
|
||||
shaped=
|
||||
ae2:CableCovered ae2:CableCovered ae2:CableCovered,
|
||||
ae2:CableCovered oredictionary:dyeMagenta ae2:CableCovered,
|
||||
ae2:CableCovered ae2:CableCovered ae2:CableCovered
|
||||
-> 8 ae2:CableCovered.Magenta
|
||||
|
||||
shaped=
|
||||
ae2:CableCovered ae2:CableCovered ae2:CableCovered,
|
||||
ae2:CableCovered oredictionary:dyeOrange ae2:CableCovered,
|
||||
ae2:CableCovered ae2:CableCovered ae2:CableCovered
|
||||
-> 8 ae2:CableCovered.Orange
|
||||
@@ -1,96 +0,0 @@
|
||||
|
||||
shaped=
|
||||
ae2:CableDense ae2:CableDense ae2:CableDense,
|
||||
ae2:CableDense oredictionary:dyeWhite ae2:CableDense,
|
||||
ae2:CableDense ae2:CableDense ae2:CableDense
|
||||
-> 8 ae2:CableDense.White
|
||||
|
||||
shaped=
|
||||
ae2:CableDense ae2:CableDense ae2:CableDense,
|
||||
ae2:CableDense oredictionary:dyeBlack ae2:CableDense,
|
||||
ae2:CableDense ae2:CableDense ae2:CableDense
|
||||
-> 8 ae2:CableDense.Black
|
||||
|
||||
shaped=
|
||||
ae2:CableDense ae2:CableDense ae2:CableDense,
|
||||
ae2:CableDense oredictionary:dyeRed ae2:CableDense,
|
||||
ae2:CableDense ae2:CableDense ae2:CableDense
|
||||
-> 8 ae2:CableDense.Red
|
||||
|
||||
shaped=
|
||||
ae2:CableDense ae2:CableDense ae2:CableDense,
|
||||
ae2:CableDense oredictionary:dyeGreen ae2:CableDense,
|
||||
ae2:CableDense ae2:CableDense ae2:CableDense
|
||||
-> 8 ae2:CableDense.Green
|
||||
|
||||
shaped=
|
||||
ae2:CableDense ae2:CableDense ae2:CableDense,
|
||||
ae2:CableDense oredictionary:dyeBrown ae2:CableDense,
|
||||
ae2:CableDense ae2:CableDense ae2:CableDense
|
||||
-> 8 ae2:CableDense.Brown
|
||||
|
||||
shaped=
|
||||
ae2:CableDense ae2:CableDense ae2:CableDense,
|
||||
ae2:CableDense oredictionary:dyeBlue ae2:CableDense,
|
||||
ae2:CableDense ae2:CableDense ae2:CableDense
|
||||
-> 8 ae2:CableDense.Blue
|
||||
|
||||
shaped=
|
||||
ae2:CableDense ae2:CableDense ae2:CableDense,
|
||||
ae2:CableDense oredictionary:dyePurple ae2:CableDense,
|
||||
ae2:CableDense ae2:CableDense ae2:CableDense
|
||||
-> 8 ae2:CableDense.Purple
|
||||
|
||||
shaped=
|
||||
ae2:CableDense ae2:CableDense ae2:CableDense,
|
||||
ae2:CableDense oredictionary:dyeCyan ae2:CableDense,
|
||||
ae2:CableDense ae2:CableDense ae2:CableDense
|
||||
-> 8 ae2:CableDense.Cyan
|
||||
|
||||
shaped=
|
||||
ae2:CableDense ae2:CableDense ae2:CableDense,
|
||||
ae2:CableDense oredictionary:dyeLightGray ae2:CableDense,
|
||||
ae2:CableDense ae2:CableDense ae2:CableDense
|
||||
-> 8 ae2:CableDense.LightGray
|
||||
|
||||
shaped=
|
||||
ae2:CableDense ae2:CableDense ae2:CableDense,
|
||||
ae2:CableDense oredictionary:dyeGray ae2:CableDense,
|
||||
ae2:CableDense ae2:CableDense ae2:CableDense
|
||||
-> 8 ae2:CableDense.Gray
|
||||
|
||||
shaped=
|
||||
ae2:CableDense ae2:CableDense ae2:CableDense,
|
||||
ae2:CableDense oredictionary:dyePink ae2:CableDense,
|
||||
ae2:CableDense ae2:CableDense ae2:CableDense
|
||||
-> 8 ae2:CableDense.Pink
|
||||
|
||||
shaped=
|
||||
ae2:CableDense ae2:CableDense ae2:CableDense,
|
||||
ae2:CableDense oredictionary:dyeLime ae2:CableDense,
|
||||
ae2:CableDense ae2:CableDense ae2:CableDense
|
||||
-> 8 ae2:CableDense.Lime
|
||||
|
||||
shaped=
|
||||
ae2:CableDense ae2:CableDense ae2:CableDense,
|
||||
ae2:CableDense oredictionary:dyeYellow ae2:CableDense,
|
||||
ae2:CableDense ae2:CableDense ae2:CableDense
|
||||
-> 8 ae2:CableDense.Yellow
|
||||
|
||||
shaped=
|
||||
ae2:CableDense ae2:CableDense ae2:CableDense,
|
||||
ae2:CableDense oredictionary:dyeLightBlue ae2:CableDense,
|
||||
ae2:CableDense ae2:CableDense ae2:CableDense
|
||||
-> 8 ae2:CableDense.LightBlue
|
||||
|
||||
shaped=
|
||||
ae2:CableDense ae2:CableDense ae2:CableDense,
|
||||
ae2:CableDense oredictionary:dyeMagenta ae2:CableDense,
|
||||
ae2:CableDense ae2:CableDense ae2:CableDense
|
||||
-> 8 ae2:CableDense.Magenta
|
||||
|
||||
shaped=
|
||||
ae2:CableDense ae2:CableDense ae2:CableDense,
|
||||
ae2:CableDense oredictionary:dyeOrange ae2:CableDense,
|
||||
ae2:CableDense ae2:CableDense ae2:CableDense
|
||||
-> 8 ae2:CableDense.Orange
|
||||
@@ -1,96 +0,0 @@
|
||||
|
||||
shaped=
|
||||
ae2:CableGlass ae2:CableGlass ae2:CableGlass,
|
||||
ae2:CableGlass oredictionary:dyeWhite ae2:CableGlass,
|
||||
ae2:CableGlass ae2:CableGlass ae2:CableGlass
|
||||
-> 8 ae2:CableGlass.White
|
||||
|
||||
shaped=
|
||||
ae2:CableGlass ae2:CableGlass ae2:CableGlass,
|
||||
ae2:CableGlass oredictionary:dyeBlack ae2:CableGlass,
|
||||
ae2:CableGlass ae2:CableGlass ae2:CableGlass
|
||||
-> 8 ae2:CableGlass.Black
|
||||
|
||||
shaped=
|
||||
ae2:CableGlass ae2:CableGlass ae2:CableGlass,
|
||||
ae2:CableGlass oredictionary:dyeRed ae2:CableGlass,
|
||||
ae2:CableGlass ae2:CableGlass ae2:CableGlass
|
||||
-> 8 ae2:CableGlass.Red
|
||||
|
||||
shaped=
|
||||
ae2:CableGlass ae2:CableGlass ae2:CableGlass,
|
||||
ae2:CableGlass oredictionary:dyeGreen ae2:CableGlass,
|
||||
ae2:CableGlass ae2:CableGlass ae2:CableGlass
|
||||
-> 8 ae2:CableGlass.Green
|
||||
|
||||
shaped=
|
||||
ae2:CableGlass ae2:CableGlass ae2:CableGlass,
|
||||
ae2:CableGlass oredictionary:dyeBrown ae2:CableGlass,
|
||||
ae2:CableGlass ae2:CableGlass ae2:CableGlass
|
||||
-> 8 ae2:CableGlass.Brown
|
||||
|
||||
shaped=
|
||||
ae2:CableGlass ae2:CableGlass ae2:CableGlass,
|
||||
ae2:CableGlass oredictionary:dyeBlue ae2:CableGlass,
|
||||
ae2:CableGlass ae2:CableGlass ae2:CableGlass
|
||||
-> 8 ae2:CableGlass.Blue
|
||||
|
||||
shaped=
|
||||
ae2:CableGlass ae2:CableGlass ae2:CableGlass,
|
||||
ae2:CableGlass oredictionary:dyePurple ae2:CableGlass,
|
||||
ae2:CableGlass ae2:CableGlass ae2:CableGlass
|
||||
-> 8 ae2:CableGlass.Purple
|
||||
|
||||
shaped=
|
||||
ae2:CableGlass ae2:CableGlass ae2:CableGlass,
|
||||
ae2:CableGlass oredictionary:dyeCyan ae2:CableGlass,
|
||||
ae2:CableGlass ae2:CableGlass ae2:CableGlass
|
||||
-> 8 ae2:CableGlass.Cyan
|
||||
|
||||
shaped=
|
||||
ae2:CableGlass ae2:CableGlass ae2:CableGlass,
|
||||
ae2:CableGlass oredictionary:dyeLightGray ae2:CableGlass,
|
||||
ae2:CableGlass ae2:CableGlass ae2:CableGlass
|
||||
-> 8 ae2:CableGlass.LightGray
|
||||
|
||||
shaped=
|
||||
ae2:CableGlass ae2:CableGlass ae2:CableGlass,
|
||||
ae2:CableGlass oredictionary:dyeGray ae2:CableGlass,
|
||||
ae2:CableGlass ae2:CableGlass ae2:CableGlass
|
||||
-> 8 ae2:CableGlass.Gray
|
||||
|
||||
shaped=
|
||||
ae2:CableGlass ae2:CableGlass ae2:CableGlass,
|
||||
ae2:CableGlass oredictionary:dyePink ae2:CableGlass,
|
||||
ae2:CableGlass ae2:CableGlass ae2:CableGlass
|
||||
-> 8 ae2:CableGlass.Pink
|
||||
|
||||
shaped=
|
||||
ae2:CableGlass ae2:CableGlass ae2:CableGlass,
|
||||
ae2:CableGlass oredictionary:dyeLime ae2:CableGlass,
|
||||
ae2:CableGlass ae2:CableGlass ae2:CableGlass
|
||||
-> 8 ae2:CableGlass.Lime
|
||||
|
||||
shaped=
|
||||
ae2:CableGlass ae2:CableGlass ae2:CableGlass,
|
||||
ae2:CableGlass oredictionary:dyeYellow ae2:CableGlass,
|
||||
ae2:CableGlass ae2:CableGlass ae2:CableGlass
|
||||
-> 8 ae2:CableGlass.Yellow
|
||||
|
||||
shaped=
|
||||
ae2:CableGlass ae2:CableGlass ae2:CableGlass,
|
||||
ae2:CableGlass oredictionary:dyeLightBlue ae2:CableGlass,
|
||||
ae2:CableGlass ae2:CableGlass ae2:CableGlass
|
||||
-> 8 ae2:CableGlass.LightBlue
|
||||
|
||||
shaped=
|
||||
ae2:CableGlass ae2:CableGlass ae2:CableGlass,
|
||||
ae2:CableGlass oredictionary:dyeMagenta ae2:CableGlass,
|
||||
ae2:CableGlass ae2:CableGlass ae2:CableGlass
|
||||
-> 8 ae2:CableGlass.Magenta
|
||||
|
||||
shaped=
|
||||
ae2:CableGlass ae2:CableGlass ae2:CableGlass,
|
||||
ae2:CableGlass oredictionary:dyeOrange ae2:CableGlass,
|
||||
ae2:CableGlass ae2:CableGlass ae2:CableGlass
|
||||
-> 8 ae2:CableGlass.Orange
|
||||
@@ -1,96 +0,0 @@
|
||||
|
||||
shaped=
|
||||
ae2:CableSmart ae2:CableSmart ae2:CableSmart,
|
||||
ae2:CableSmart oredictionary:dyeWhite ae2:CableSmart,
|
||||
ae2:CableSmart ae2:CableSmart ae2:CableSmart
|
||||
-> 8 ae2:CableSmart.White
|
||||
|
||||
shaped=
|
||||
ae2:CableSmart ae2:CableSmart ae2:CableSmart,
|
||||
ae2:CableSmart oredictionary:dyeBlack ae2:CableSmart,
|
||||
ae2:CableSmart ae2:CableSmart ae2:CableSmart
|
||||
-> 8 ae2:CableSmart.Black
|
||||
|
||||
shaped=
|
||||
ae2:CableSmart ae2:CableSmart ae2:CableSmart,
|
||||
ae2:CableSmart oredictionary:dyeRed ae2:CableSmart,
|
||||
ae2:CableSmart ae2:CableSmart ae2:CableSmart
|
||||
-> 8 ae2:CableSmart.Red
|
||||
|
||||
shaped=
|
||||
ae2:CableSmart ae2:CableSmart ae2:CableSmart,
|
||||
ae2:CableSmart oredictionary:dyeGreen ae2:CableSmart,
|
||||
ae2:CableSmart ae2:CableSmart ae2:CableSmart
|
||||
-> 8 ae2:CableSmart.Green
|
||||
|
||||
shaped=
|
||||
ae2:CableSmart ae2:CableSmart ae2:CableSmart,
|
||||
ae2:CableSmart oredictionary:dyeBrown ae2:CableSmart,
|
||||
ae2:CableSmart ae2:CableSmart ae2:CableSmart
|
||||
-> 8 ae2:CableSmart.Brown
|
||||
|
||||
shaped=
|
||||
ae2:CableSmart ae2:CableSmart ae2:CableSmart,
|
||||
ae2:CableSmart oredictionary:dyeBlue ae2:CableSmart,
|
||||
ae2:CableSmart ae2:CableSmart ae2:CableSmart
|
||||
-> 8 ae2:CableSmart.Blue
|
||||
|
||||
shaped=
|
||||
ae2:CableSmart ae2:CableSmart ae2:CableSmart,
|
||||
ae2:CableSmart oredictionary:dyePurple ae2:CableSmart,
|
||||
ae2:CableSmart ae2:CableSmart ae2:CableSmart
|
||||
-> 8 ae2:CableSmart.Purple
|
||||
|
||||
shaped=
|
||||
ae2:CableSmart ae2:CableSmart ae2:CableSmart,
|
||||
ae2:CableSmart oredictionary:dyeCyan ae2:CableSmart,
|
||||
ae2:CableSmart ae2:CableSmart ae2:CableSmart
|
||||
-> 8 ae2:CableSmart.Cyan
|
||||
|
||||
shaped=
|
||||
ae2:CableSmart ae2:CableSmart ae2:CableSmart,
|
||||
ae2:CableSmart oredictionary:dyeLightGray ae2:CableSmart,
|
||||
ae2:CableSmart ae2:CableSmart ae2:CableSmart
|
||||
-> 8 ae2:CableSmart.LightGray
|
||||
|
||||
shaped=
|
||||
ae2:CableSmart ae2:CableSmart ae2:CableSmart,
|
||||
ae2:CableSmart oredictionary:dyeGray ae2:CableSmart,
|
||||
ae2:CableSmart ae2:CableSmart ae2:CableSmart
|
||||
-> 8 ae2:CableSmart.Gray
|
||||
|
||||
shaped=
|
||||
ae2:CableSmart ae2:CableSmart ae2:CableSmart,
|
||||
ae2:CableSmart oredictionary:dyePink ae2:CableSmart,
|
||||
ae2:CableSmart ae2:CableSmart ae2:CableSmart
|
||||
-> 8 ae2:CableSmart.Pink
|
||||
|
||||
shaped=
|
||||
ae2:CableSmart ae2:CableSmart ae2:CableSmart,
|
||||
ae2:CableSmart oredictionary:dyeLime ae2:CableSmart,
|
||||
ae2:CableSmart ae2:CableSmart ae2:CableSmart
|
||||
-> 8 ae2:CableSmart.Lime
|
||||
|
||||
shaped=
|
||||
ae2:CableSmart ae2:CableSmart ae2:CableSmart,
|
||||
ae2:CableSmart oredictionary:dyeYellow ae2:CableSmart,
|
||||
ae2:CableSmart ae2:CableSmart ae2:CableSmart
|
||||
-> 8 ae2:CableSmart.Yellow
|
||||
|
||||
shaped=
|
||||
ae2:CableSmart ae2:CableSmart ae2:CableSmart,
|
||||
ae2:CableSmart oredictionary:dyeLightBlue ae2:CableSmart,
|
||||
ae2:CableSmart ae2:CableSmart ae2:CableSmart
|
||||
-> 8 ae2:CableSmart.LightBlue
|
||||
|
||||
shaped=
|
||||
ae2:CableSmart ae2:CableSmart ae2:CableSmart,
|
||||
ae2:CableSmart oredictionary:dyeMagenta ae2:CableSmart,
|
||||
ae2:CableSmart ae2:CableSmart ae2:CableSmart
|
||||
-> 8 ae2:CableSmart.Magenta
|
||||
|
||||
shaped=
|
||||
ae2:CableSmart ae2:CableSmart ae2:CableSmart,
|
||||
ae2:CableSmart oredictionary:dyeOrange ae2:CableSmart,
|
||||
ae2:CableSmart ae2:CableSmart ae2:CableSmart
|
||||
-> 8 ae2:CableSmart.Orange
|
||||
@@ -0,0 +1,21 @@
|
||||
group= oredictionary:itemIlluminatedPanel -> monitor
|
||||
group= ae2:BlockInterface ae2:ItemPart.Interface -> interface
|
||||
|
||||
group= ae2:ToolCertusQuartzCuttingKnife:* ae2:ToolNetherQuartzCuttingKnife:* -> knife
|
||||
group= ae2:ToolCertusQuartzWrench ae2:ToolNetherQuartzWrench -> wrench
|
||||
|
||||
group= ae2:CableGlass ae2:CableCovered ae2:CableSmart -> cable
|
||||
group= ae2:CableDense -> densecable
|
||||
|
||||
group= mc:iron_ingot oredictionary:ingotCopper oredictionary:ingotTin oredictionary:ingotSilver oredictionary:ingotLead oredictionary:ingotBronze oredictionary:ingotBrass oredictionary:ingotNickel oredictionary:ingotInvar oredictionary:ingotAluminium -> metalIngots
|
||||
group= oredictionary:dustEnder oredictionary:dustEnderPearl -> dustEnder
|
||||
|
||||
group=oredictionary:blockGlass oredictionary:glass mc:glass -> glass
|
||||
group=oredictionary:wool mc:wool:* -> wool
|
||||
|
||||
group=oredictionary:crystalCertusQuartz oredictionary:crystalNetherQuartz ae2:ItemMaterial.CertusQuartzCrystalCharged -> crystalQuartz
|
||||
group=oredictionary:dustCertusQuartz oredictionary:dustNetherQuartz -> dustQuartz
|
||||
|
||||
group=oredictionary:crystalCertusQuartz ae2:ItemMaterial.CertusQuartzCrystalCharged ae2:ItemMaterial.PurifiedCertusQuartzCrystal -> certusCrystal
|
||||
group=oredictionary:crystalNetherQuartz ae2:ItemMaterial.PurifiedNetherQuartzCrystal -> netherCrystal
|
||||
group=oredictionary:crystalFluix ae2:ItemMaterial.PurifiedFluixCrystal -> fluixCrystal
|
||||
@@ -1,14 +0,0 @@
|
||||
|
||||
# Quantum Link Chamber
|
||||
shaped=
|
||||
ae2:BlockQuartzGlass ae2:ItemMaterial.FluixPearl ae2:BlockQuartzGlass,
|
||||
ae2:ItemMaterial.FluixPearl _ ae2:ItemMaterial.FluixPearl,
|
||||
ae2:BlockQuartzGlass ae2:ItemMaterial.FluixPearl ae2:BlockQuartzGlass,
|
||||
-> ae2:BlockQuantumLinkChamber
|
||||
|
||||
# Quantum Ring
|
||||
shaped=
|
||||
mc:iron_ingot ae2:ItemMaterial.LogicProcessor mc:iron_ingot,
|
||||
ae2:ItemMaterial.EngProcessor ae2:BlockEnergyCell densecable,
|
||||
mc:iron_ingot ae2:ItemMaterial.LogicProcessor mc:iron_ingot,
|
||||
-> ae2:BlockQuantumRing
|
||||
@@ -1,20 +1,3 @@
|
||||
|
||||
alias=mc -> minecraft
|
||||
alias=ae2 -> appliedenergistics2
|
||||
|
||||
group= mc:iron_ingot oredictionary:ingotCopper oredictionary:ingotTin oredictionary:ingotSilver oredictionary:ingotLead oredictionary:ingotBronze oredictionary:ingotBrass oredictionary:ingotNickel oredictionary:ingotInvar oredictionary:ingotAluminium -> metalIngots
|
||||
group= oredictionary:dustEnder oredictionary:dustEnderPearl -> dustEnder
|
||||
|
||||
group=oredictionary:blockGlass oredictionary:glass mc:glass -> glass
|
||||
group=oredictionary:wool mc:wool:* -> wool
|
||||
|
||||
group=oredictionary:crystalCertusQuartz oredictionary:crystalNetherQuartz ae2:ItemMaterial.CertusQuartzCrystalCharged -> crystalQuartz
|
||||
group=oredictionary:dustCertusQuartz oredictionary:dustNetherQuartz -> dustQuartz
|
||||
|
||||
group=oredictionary:crystalCertusQuartz ae2:ItemMaterial.CertusQuartzCrystalCharged ae2:ItemMaterial.PurifiedCertusQuartzCrystal -> certusCrystal
|
||||
group=oredictionary:crystalNetherQuartz ae2:ItemMaterial.PurifiedNetherQuartzCrystal -> netherCrystal
|
||||
group=oredictionary:crystalFluix ae2:ItemMaterial.PurifiedFluixCrystal -> fluixCrystal
|
||||
|
||||
# Crash on Issues
|
||||
crash=false
|
||||
|
||||
@@ -24,26 +7,15 @@ exceptions=false
|
||||
# Error on Missing Items ( default is no because AE2 allows you to enable/disable items without modifying recipes. )
|
||||
erroronmissing=true
|
||||
|
||||
group= oredictionary:itemIlluminatedPanel -> monitor
|
||||
group= ae2:BlockInterface ae2:ItemPart.Interface -> interface
|
||||
# Important, keep in this order
|
||||
import=aliases.recipe
|
||||
import=oredict.recipe
|
||||
import=groups.recipe
|
||||
|
||||
group= ae2:ToolCertusQuartzCuttingKnife:* ae2:ToolNetherQuartzCuttingKnife:* -> knife
|
||||
group= ae2:ToolCertusQuartzWrench ae2:ToolNetherQuartzWrench -> wrench
|
||||
|
||||
group= ae2:CableGlass ae2:CableCovered ae2:CableSmart -> cable
|
||||
group= ae2:CableDense -> densecable
|
||||
|
||||
import=tools.recipe
|
||||
import=process.recipe
|
||||
import=storagecells.recipe
|
||||
import=port.recipe
|
||||
import=new.recipe
|
||||
import=dyes_glass.recipe
|
||||
import=dyes_covered.recipe
|
||||
import=dyes_smart.recipe
|
||||
import=dyes_dense.recipe
|
||||
import=paint_balls.recipe
|
||||
import=crafting.recipe
|
||||
import=vanilla_enhance.recipe
|
||||
import=stairs.recipe
|
||||
import=slabs.recipe
|
||||
# All actual recipes
|
||||
import=decorative/index.recipe
|
||||
import=materials/index.recipe
|
||||
import=misc/index.recipe
|
||||
import=network/index.recipe
|
||||
import=processing/index.recipe
|
||||
import=tools/index.recipe
|
||||
@@ -0,0 +1,35 @@
|
||||
shaped=
|
||||
mc:gold_ingot mc:iron_ingot _,
|
||||
mc:redstone ae2:ItemMaterial.CalcProcessor mc:iron_ingot,
|
||||
mc:gold_ingot mc:iron_ingot _
|
||||
-> 2 ae2:ItemMaterial.BasicCard
|
||||
|
||||
shaped=
|
||||
oredictionary:gemDiamond mc:iron_ingot _,
|
||||
mc:redstone ae2:ItemMaterial.CalcProcessor mc:iron_ingot,
|
||||
oredictionary:gemDiamond mc:iron_ingot _
|
||||
-> 2 ae2:ItemMaterial.AdvCard
|
||||
|
||||
shapeless=
|
||||
ae2:ItemMaterial.BasicCard certusCrystal
|
||||
-> ae2:ItemMaterial.CardCapacity
|
||||
|
||||
shapeless=
|
||||
ae2:ItemMaterial.BasicCard mc:redstone_torch
|
||||
-> ae2:ItemMaterial.CardRedstone
|
||||
|
||||
shapeless=
|
||||
ae2:ItemMaterial.AdvCard wool
|
||||
-> ae2:ItemMaterial.CardFuzzy
|
||||
|
||||
shapeless=
|
||||
ae2:ItemMaterial.AdvCard mc:redstone_torch
|
||||
-> ae2:ItemMaterial.CardInverter
|
||||
|
||||
shapeless=
|
||||
ae2:ItemMaterial.AdvCard fluixCrystal
|
||||
-> ae2:ItemMaterial.CardSpeed
|
||||
|
||||
shapeless=
|
||||
ae2:ItemMaterial.BasicCard mc:crafting_table
|
||||
-> ae2:ItemMaterial.CardCrafting
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user