Compare commits

...

53 Commits

Author SHA1 Message Date
yueh d11d6e754f Fixes #2655, #2276: Two dupe bugs related to network storage handling
* Fixes #2655: Actually remove an ICellContainer before updating the list.
* Fixes #2276: Apply tracker changes in the correct order.
2016-11-26 14:09:30 +01:00
yueh 887339f7b8 Removed ASMTweaker and replaced it with AT. (#2636)
Added appeng_at.cfg and updated build.gradle to correctly include the AT when building.
Deleted the now useless ASMTweaker.
Moved the coremod from package transformer to coremod as a better matching name.
Updated the old 1.7.10 code using reflection to drop it where forge or vanilla now exposes that functionality directly.
2016-11-26 14:08:10 +01:00
yueh a665200c31 Refactored AEConfig (#2633)
Added a singleton getter instead the public field.
Reduced all fields to private.
Replaced field access with getters.
Added setters where necessary (Dimension/Biome Registration)
Added config options to disable more features.
Splitted Enum name from the config key.
Changed FacadeConfig and Networkhandler similar to AEConfig.init().
2016-11-26 14:07:34 +01:00
yueh 6554e295d5 Updated dependencies.
Updated Forge and MCP Mappings.
Updated JEI, Tesla and IC2 APIs.
2016-11-17 10:50:06 +01:00
yueh 4eeb554dcb Fixes #2623: Network Tool not removing facades with shift rightlick. 2016-11-15 22:48:16 +01:00
yueh 3eae4a7d19 Fixes #2626: Subtract the correct amount from the remaining amount. 2016-11-15 22:14:17 +01:00
yueh 6c91e852ec Fixes #2608: Handle scrollbar on mouseclicks not during rendering. 2016-11-13 13:16:08 +01:00
yueh 52f516299b Fixes #2605: Formation plane now using the correct offset position. 2016-11-13 12:41:39 +01:00
yueh c74166b02a Restrict ItemHandlerAdaptor to not exceed the stacksize of a slot. (#2595) 2016-11-13 11:33:31 +01:00
yueh 26e86a114c Added an explicit ignore section to .gitignore
Current intention is to maintain a single blacklist for common OS
dependent files without having to define each and every folder and their
allowed filetypes to avoid commiting these.
2016-11-13 11:30:27 +01:00
yueh fc834036a0 Prevent hard to reproducable stacktraces from being swallowed. 2016-11-10 12:16:39 +01:00
yueh f96f7d82c5 Fixes #2544: NetworkTool now returns PASS for shift+right click on parts. 2016-11-10 11:55:13 +01:00
yueh c592f54a77 Fixes #2599: Missing instanceof EntityPlayerMP test. 2016-11-09 15:46:10 +01:00
yueh 89609a83ea Fixes #2593: Subtract the extracted not already gathered amount. 2016-11-07 13:33:11 +01:00
Sebastian Hartte e67969f52f Fixes #2566: Update packet deserialization was broken when parts were present that were not a grid host. 2016-11-07 00:44:53 +01:00
Sebastian Hartte 32a0496bc2 Fixes facade stilts sometimes being rendered using the facade texture's tint. 2016-11-07 00:17:24 +01:00
Sebastian Hartte 6df311c11a AE now accepts power via the legacy RF API (i.e. from Immersive Engineering). 2016-11-06 23:02:22 +01:00
Sebastian Hartte 2e23b92763 Added charging items via IC2 API. 2016-11-06 22:43:30 +01:00
Sebastian Hartte 41a029ffb4 Added item charging via legacy RF API. 2016-11-06 22:22:49 +01:00
Sebastian Hartte 9c8f914f42 Added CoFH Energy API. 2016-11-06 22:22:34 +01:00
shartte d75cdc9696 Gradle Source Set Changes (#2588)
Introduced separate source sets for "api" and "apis" (in preparation for source only 3rd party APIs).
2016-11-06 21:55:58 +01:00
yueh 77bb28ded6 Fixes #2585: Hide WAILA data when it cannot be retrieved. (#2586) 2016-11-06 20:28:36 +01:00
shartte 0e7981d717 Cleaning Up Mod Integrations (#2581)
* Cleaned up unused Mod integrations other than for mods that are likely to be integrated soon.
* Introduced an easier Facade class to access mod integration abstractions (called Integrations).
* Removed the link between IntegrationType and integration abstraction. Integrations are now explicitly instantiated inside of IntegrationNode.
2016-11-06 20:23:14 +01:00
Sebastian Hartte fbb0c05c7f Fixes #2577: Use the item stacks color handler to color tinted quads of the block model. 2016-11-06 03:35:56 +01:00
Sebastian Hartte efa0ab7e4e Fixes #2582: Right-Clicking with a Storage Cell would prevent further interaction even if the storage cell wasn't being disassembled. 2016-11-06 02:17:25 +01:00
yueh 70fe5189e0 Followup #2556, #2579: Prevent negative stacksizes. 2016-11-05 23:38:57 +01:00
Sebastian Hartte 3a8d6d0bcd Simplified handling of rotations inside getCapability() for TileInscriber. 2016-11-05 23:33:24 +01:00
yueh 7ac817e9ae Fixes #2556, #2579: Restore old click behaviour. 2016-11-05 23:28:27 +01:00
Sebastian Hartte 0ceb4765a2 Fixes #2580: The inscriber's rotation is not taken into account when returning the IItemHandler capability. 2016-11-05 23:27:52 +01:00
yueh 7ce9654402 Merge pull request #2576 from AppliedEnergistics/fix-2575
Fixes #2575: Removed ITickable from AEBaseTile
2016-11-05 22:07:59 +01:00
yueh 5328627d7a Fixes #2575: Removed ITickable from AEBaseTile
Removed TileEventType.TICK, use ITickable when really needed.
The few tiles needing to tick and are not a grid tile now implement ITickable.
Charger is no longer implementing ITickable.
2016-11-05 21:43:49 +01:00
yueh fe1a67ffaa Reduced drive update rate. (#2574)
Limits drive updates to modulate.
Code cleanup of the TileDrive.
2016-11-05 19:28:09 +01:00
shartte 4253d659f1 Add Config to Remove Crashing Items from Storage Cells (#2573)
Added a configuration option to enable players to recover their world if any of their items in storage cause crashes on load.
2016-11-05 13:50:54 +01:00
Sebastian Hartte b3560aaa00 Fixes #2571: Only call getDurabilityForDisplay if the item is damageable. 2016-11-05 12:58:15 +01:00
yueh 005392911d Fixed DriverWatcher constantly calling blinkCell instead when changed. 2016-11-05 00:11:02 +01:00
Sebastian Hartte 7f02562e0c Fixes sidedness issues when starting up the server. 2016-11-04 21:02:10 +01:00
yueh 84bc00fa20 Fixes #2567: Use heightmap for very low sea levels. 2016-11-04 16:13:27 +01:00
Sebastian Hartte c1483d87c7 Fixes #2549: A block being rendered in the translucent layer will cause the item renderer to completely disable depth-writing causing silly looking models when held in hand. 2016-11-04 11:51:24 +01:00
shartte f5e4a202cb Layers and IC2 Tunnel (#2565)
* Re-Activated the IC2 layers to implement an IC2 P2P tunnel.
2016-11-04 11:20:56 +01:00
yueh 6f15c2921a Fixes #2561: Do not use unchecked casts for IContainerListener. 2016-11-04 09:40:21 +01:00
DeadSix27 d891e5da15 Made memory card messages more clearly. (#2511)
* Made Memory card messages more clearly and easier to understand for newcomers.
2016-11-04 09:31:52 +01:00
Alexey Krainev 6607c8cd2f Updated russion translation (#2552)
* Added "P2P Waila Text"
* Changed "NEI to JEI"
2016-11-04 09:29:25 +01:00
yueh 1e20086799 Extracts item comparison from Platform into their own helper. (#2555)
* Extracts item comparison from Platform into their own helper.

Renamed methods to be more more fitting for the actual comparison.
Added documentation about each methods behaviour.
2016-11-04 09:27:52 +01:00
Sebastian Hartte f85ab7ddc2 Fixes Macerator recipes when IC2 integration is enabled. 2016-11-02 23:45:22 +01:00
Sebastian Hartte c3700737c3 Re-enables this IF-branch for ore dictionary tokens in the recipe files, which was inactive due to the recipe files all using lower-case verbs. 2016-11-02 23:34:04 +01:00
Sebastian Hartte 2f8013a49b Fixes registration of recipes when one of the recipes throws an unexpected unchecked exception during registration. Before, the registration would simply cancel and not log any errors in this case. Fixes issues with outdated IC2 integration (Macerator recipes) causing certain recipes to become non-functional. 2016-11-02 23:32:20 +01:00
Sebastian Hartte af54883fd3 Fixes #2558: Make Sky Stone Chest TESR more robust against odd world state, as Vanilla also does. 2016-11-02 20:44:50 +01:00
thatsIch 223a210d49 Replaced reference to FMLCommonHandler EventBus through MinecraftForge.EVENT_BUS due to deprecation notice 2016-11-02 14:22:00 +01:00
thatsIch c133e4f0ef Removed tickhandler registration from FMLCommonHandler EventBus since they same to MinecraftForge.EVENT_BUS 2016-11-02 14:14:51 +01:00
thatsIch 424d27b71c Removed github tag badge because this only works with SemVer in release format v1.0.0 for example and without any trailing information like "-alpha" 2016-11-02 13:42:24 +01:00
Sebastian Hartte 2fe5a3cef8 Fixes #2557: Made facades much more robust when rendering. Facades now use string ids for the base item in NBT again to avoid issues when loading worlds with a different Item ID registry mapping. In addition, we don't store the Block metadata instead of the Item Damage anymore, since when reading a facade back in, we were using that block metadata as the item damage, which is technically incorrect. 2016-11-02 01:43:01 +01:00
yueh a3c33d5323 Fixed typo in prioritylist. 2016-11-01 16:15:05 +01:00
yueh e927c27b85 Fixes #2554: Extract identical item not any equal one. 2016-11-01 15:51:38 +01:00
298 changed files with 4884 additions and 4749 deletions
+4 -1
View File
@@ -25,4 +25,7 @@
!codeformat/
# Github specific files and directories
!.github/
!.github/
# Explicit ignores
Thumbs.db
+1 -2
View File
@@ -1,5 +1,4 @@
[![Travis](https://img.shields.io/travis/AppliedEnergistics/Applied-Energistics-2.svg?maxAge=2592000&style=flat-square)](https://travis-ci.org/AppliedEnergistics/Applied-Energistics-2)
[![Latest Tag](https://img.shields.io/github/tag/AppliedEnergistics/Applied-Energistics-2.svg?label=Latest Tag&style=flat-square)](https://github.com/AppliedEnergistics/Applied-Energistics-2/tags)
[![Latest Release](https://img.shields.io/github/release/AppliedEnergistics/Applied-Energistics-2.svg?label=Latest Release&style=flat-square)](https://github.com/AppliedEnergistics/Applied-Energistics-2/releases)
# Applied Energistics 2
@@ -104,7 +103,7 @@ Providing as many details as possible does help us to find and resolve the issue
- Eclipse: execute `gradlew eclipse`
5. For add-on developer: Core-Mod Detection
- In order to have FML detect AE from your dev environment, add the following VM Option to your run profile
- `-Dfml.coreMods.load=appeng.transformer.AppEngCore`
- `-Dfml.coreMods.load=appeng.coremod.AppEngCore`
## Contribution
+22 -20
View File
@@ -40,7 +40,6 @@ repositories {
apply from: 'gradle/scripts/dependencies.gradle'
apply from: 'gradle/scripts/artifacts.gradle'
apply from: 'gradle/scripts/integration.gradle'
apply from: 'gradle/scripts/optional.gradle'
sourceCompatibility = JavaVersion.VERSION_1_8
@@ -54,17 +53,22 @@ archivesBaseName = aebasename
jar {
manifest {
attributes 'FMLCorePluginContainsFMLMod': 'true'
attributes 'FMLAT': 'appeng_at.cfg'
}
from sourceSets.api.output
dependsOn apiClasses
// specify which files are really included, can control which APIs should be in
include "appeng/**"
include "assets/**"
include "mcmod.info"
include "pack.mcmeta"
include "META-INF/appeng_at.cfg"
}
minecraft {
coreMod = "appeng.transformer.AppEngCore"
coreMod = "appeng.coremod.AppEngCore"
version = minecraft_version + "-" + forge_version
@@ -82,26 +86,21 @@ minecraft {
}
sourceSets {
main {
java {
srcDirs += 'src/api/java'
srcDirs += 'src/main/java/'
}
resources {
srcDir "src/main/resources/"
include "assets/appliedenergistics2/recipes/**/*.recipe",
"assets/appliedenergistics2/recipes/README.html",
"assets/appliedenergistics2/lang/*.lang",
"assets/appliedenergistics2/blockstates/**/*.json",
"assets/appliedenergistics2/models/**/*.json",
"assets/appliedenergistics2/textures/**/*.png",
"assets/appliedenergistics2/textures/**/*.mcmeta",
"assets/appliedenergistics2/meta/*",
"mcmod.info",
"pack.mcmeta"
}
api
// This source set will contain third party API code that we need to compile, but which is not shipped with the jar
thirdparty {
// Third Party APIs often need access to Minecraft classes (i.e. EnumFacing), so set this up here
compileClasspath += configurations.forgeGradleMc + configurations.forgeGradleMcDeps
}
main
}
dependencies {
compile sourceSets.thirdparty.output
}
processResources
@@ -120,4 +119,7 @@ processResources
from(sourceSets.main.resources.srcDirs) {
exclude 'mcmod.info'
}
// move access transformer to META-INF
rename '(.+_at.cfg)', 'META-INF/$1'
}
+5 -5
View File
@@ -8,8 +8,8 @@ aebasename=appliedenergistics2
# Versions #
#########################################################
minecraft_version=1.10.2
mcp_mappings=snapshot_20161018
forge_version=12.18.2.2104
mcp_mappings=snapshot_20161111
forge_version=12.18.2.2139
#########################################################
# Installable #
@@ -19,6 +19,6 @@ waila_version=1.7.0-B3_1.9.4
#########################################################
# Provided APIs #
#########################################################
jei_version=3.12.7.312
tesla_version=1.10.2-1.2.1.49
ic2_version=2.6.96-ex110
jei_version=3.13.3.373
tesla_version=1.10.2-1.2.1.50
ic2_version=2.6.99-ex110
+1 -1
View File
@@ -46,7 +46,7 @@ task apiJar(type: Jar) {
from sourceSets.api.java
include "appeng/api/**"
from sourceSets.main.output
from sourceSets.api.output
include "appeng/api/**"
classifier = 'api'
-29
View File
@@ -1,29 +0,0 @@
/*
* This file is part of Applied Energistics 2.
* Copyright (c) 2013 - 2014, 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>.
*/
// Should be provided by ForgeGradle, some idea user should confirm it.
apply plugin: 'idea'
idea {
module {
inheritOutputDirs = true
// excludes integration due to not being available upon port
excludeDirs += file('src/main/java/appeng/parts/layers/')
}
}
@@ -78,7 +78,7 @@ public interface IParts
IItemDefinition p2PTunnelLiquids();
// IItemDefinition p2PTunnelEU();
IItemDefinition p2PTunnelEU();
// IItemDefinition p2PTunnelRF();
@@ -300,7 +300,7 @@ public abstract class AEBaseTileBlock extends AEBaseBlock implements ITileEntity
for( final ItemStack ol : itemDropCandidates )
{
if( Platform.isSameItemType( ol, op ) )
if( Platform.itemComparisons().isEqualItemType( ol, op ) )
{
final NBTTagCompound tag = tile.downloadSettings( SettingsFrom.DISMANTLE_ITEM );
if( tag != null )
@@ -75,10 +75,22 @@ public class BlockMolecularAssembler extends AEBaseTileBlock
return super.getActualState( state, worldIn, pos ).withProperty( POWERED, powered );
}
@SideOnly( Side.CLIENT)
/**
* NOTE: This is only used to determine how to render an item being held in hand.
* For determining block rendering, the method below is used (canRenderInLayer).
*/
@SideOnly( Side.CLIENT )
@Override
public BlockRenderLayer getBlockLayer()
{
return BlockRenderLayer.TRANSLUCENT;
return BlockRenderLayer.CUTOUT;
}
@SideOnly( Side.CLIENT )
@Override
public boolean canRenderInLayer( BlockRenderLayer layer )
{
return layer == BlockRenderLayer.TRANSLUCENT;
}
public boolean isFullCube(IBlockState state)
@@ -45,6 +45,6 @@ public class ItemCraftingStorage extends AEBaseItemBlock
@Override
public boolean hasContainerItem( final ItemStack stack )
{
return AEConfig.instance.isFeatureEnabled( AEFeature.EnableDisassemblyCrafting );
return AEConfig.instance().isFeatureEnabled( AEFeature.ENABLE_DISASSEMBLY_CRAFTING );
}
}
@@ -94,7 +94,7 @@ public class BlockCharger extends AEBaseTileBlock implements ICustomCollision
@SideOnly( Side.CLIENT )
public void randomDisplayTick( final IBlockState state, final World w, final BlockPos pos, final Random r )
{
if( !AEConfig.instance.enableEffects )
if( !AEConfig.instance().isEnableEffects() )
{
return;
}
@@ -135,7 +135,7 @@ public class BlockQuartzFixture extends AEBaseBlock implements IOrientableBlock,
@SideOnly( Side.CLIENT )
public void randomDisplayTick( final IBlockState state, final World w, final BlockPos pos, final Random r )
{
if( !AEConfig.instance.enableEffects )
if( !AEConfig.instance().isEnableEffects() )
{
return;
}
@@ -76,7 +76,7 @@ public class BlockQuartzGrowthAccelerator extends AEBaseTileBlock implements IOr
@Override
public void randomDisplayTick( final IBlockState state, final World w, final BlockPos pos, final Random r )
{
if( !AEConfig.instance.enableEffects )
if( !AEConfig.instance().isEnableEffects() )
{
return;
}
@@ -98,7 +98,7 @@ public final class BlockVibrationChamber extends AEBaseTileBlock
@Override
public void randomDisplayTick( final IBlockState state, final World w, final BlockPos pos, final Random r )
{
if( !AEConfig.instance.enableEffects )
if( !AEConfig.instance().isEnableEffects() )
{
return;
}
@@ -69,9 +69,6 @@ import appeng.client.render.cablebus.CableBusRenderState;
import appeng.core.Api;
import appeng.core.AppEng;
import appeng.helpers.AEGlassMaterial;
import appeng.integration.IntegrationRegistry;
import appeng.integration.IntegrationType;
import appeng.integration.abstraction.IFMP;
import appeng.parts.ICableBusContainer;
import appeng.parts.NullCableBusContainer;
import appeng.tile.AEBaseTile;
@@ -349,10 +346,6 @@ public class BlockCableBus extends AEBaseTileBlock
{
out = ( (TileCableBus) te ).getCableBus();
}
else if( IntegrationRegistry.INSTANCE.isEnabled( IntegrationType.FMP ) )
{
out = ( (IFMP) IntegrationRegistry.INSTANCE.getInstance( IntegrationType.FMP ) ).getCableContainer( te );
}
return out == null ? NULL_CABLE_BUS : out;
}
@@ -184,7 +184,7 @@ class BlockDefinitionBuilder implements IBlockBuilder
@Override
public <T extends IBlockDefinition> T build()
{
if( !AEConfig.instance.areFeaturesEnabled( features ) )
if( !AEConfig.instance().areFeaturesEnabled( features ) )
{
return (T) new TileDefinition( registryName, null, null );
}
@@ -59,7 +59,7 @@ public class FeatureFactory
public FeatureFactory()
{
this.defaultFeatures = new AEFeature[] { AEFeature.Core };
this.defaultFeatures = new AEFeature[] { AEFeature.CORE };
this.bootstrapComponents = new ArrayList<>();
if( Platform.isClient() )
@@ -147,7 +147,7 @@ class ItemDefinitionBuilder implements IItemBuilder
@Override
public ItemDefinition build()
{
if( !AEConfig.instance.areFeaturesEnabled( features ) )
if( !AEConfig.instance().areFeaturesEnabled( features ) )
{
return new ItemDefinition( registryName, null );
}
@@ -62,6 +62,7 @@ import appeng.core.CommonHelper;
import appeng.core.sync.network.NetworkHandler;
import appeng.core.sync.packets.PacketAssemblerAnimation;
import appeng.core.sync.packets.PacketValueConfig;
import appeng.coremod.MissingCoreMod;
import appeng.entity.EntityFloatingItem;
import appeng.entity.EntityTinyTNTPrimed;
import appeng.entity.RenderFloatingItem;
@@ -70,7 +71,6 @@ import appeng.helpers.IMouseWheelItem;
import appeng.hooks.TickHandler;
import appeng.hooks.TickHandler.PlayerColor;
import appeng.server.ServerHelper;
import appeng.transformer.MissingCoreMod;
import appeng.util.Platform;
@@ -149,7 +149,7 @@ public class ClientHelper extends ServerHelper
@Override
public void spawnEffect( final EffectType effect, final World worldObj, final double posX, final double posY, final double posZ, final Object o )
{
if( AEConfig.instance.enableEffects )
if( AEConfig.instance().isEnableEffects() )
{
switch( effect )
{
@@ -354,7 +354,7 @@ public class ClientHelper extends ServerHelper
final ItemStack is = player.getHeldItem( hand );
try
{
NetworkHandler.instance.sendToServer( new PacketValueConfig( "Item", me.getDwheel() > 0 ? "WheelUp" : "WheelDown" ) );
NetworkHandler.instance().sendToServer( new PacketValueConfig( "Item", me.getDwheel() > 0 ? "WheelUp" : "WheelDown" ) );
me.setCanceled( true );
}
catch( final IOException e )
+52 -57
View File
@@ -161,12 +161,6 @@ public abstract class AEBaseGui extends GuiContainer
{
super.drawScreen( mouseX, mouseY, btn );
final boolean hasClicked = Mouse.isButtonDown( 0 );
if( hasClicked && this.getScrollBar() != null )
{
this.getScrollBar().click( this, mouseX - this.guiLeft, mouseY - this.guiTop );
}
for( final Object c : this.buttonList )
{
if( c instanceof ITooltip )
@@ -217,7 +211,7 @@ public abstract class AEBaseGui extends GuiContainer
// All lines after the first are colored gray
for( int i = 1; i < lines.size(); i++ )
{
lines.set(i, TextFormatting.GRAY + lines.get(i));
lines.set( i, TextFormatting.GRAY + lines.get( i ) );
}
this.drawHoveringText( lines, x, y, fontRendererObj );
@@ -258,13 +252,15 @@ public abstract class AEBaseGui extends GuiContainer
{
if( fs.isEnabled() )
{
this.drawTexturedModalRect( ox + fs.xDisplayPosition - 1, oy + fs.yDisplayPosition - 1, fs.getSourceX() - 1, fs.getSourceY() - 1, 18, 18 );
this.drawTexturedModalRect( ox + fs.xDisplayPosition - 1, oy + fs.yDisplayPosition - 1, fs.getSourceX() - 1, fs.getSourceY() - 1, 18,
18 );
}
else
{
GlStateManager.color( 1.0F, 1.0F, 1.0F, 0.4F );
GlStateManager.enableBlend();
this.drawTexturedModalRect( ox + fs.xDisplayPosition - 1, oy + fs.yDisplayPosition - 1, fs.getSourceX() - 1, fs.getSourceY() - 1, 18, 18 );
this.drawTexturedModalRect( ox + fs.xDisplayPosition - 1, oy + fs.yDisplayPosition - 1, fs.getSourceX() - 1, fs.getSourceY() - 1, 18,
18 );
GlStateManager.color( 1.0F, 1.0F, 1.0F, 1.0F );
}
}
@@ -290,6 +286,11 @@ public abstract class AEBaseGui extends GuiContainer
}
}
if( this.getScrollBar() != null )
{
this.getScrollBar().click( this, xCoord - this.guiLeft, yCoord - this.guiTop );
}
super.mouseClicked( xCoord, yCoord, btn );
}
@@ -299,6 +300,11 @@ public abstract class AEBaseGui extends GuiContainer
final Slot slot = this.getSlot( x, y );
final ItemStack itemstack = this.mc.thePlayer.inventory.getItemStack();
if( this.getScrollBar() != null )
{
this.getScrollBar().click( this, x - this.guiLeft, y - this.guiTop );
}
if( slot instanceof SlotFake && itemstack != null )
{
this.drag_click.add( slot );
@@ -307,7 +313,7 @@ public abstract class AEBaseGui extends GuiContainer
for( final Slot dr : this.drag_click )
{
final PacketInventoryAction p = new PacketInventoryAction( c == 0 ? InventoryAction.PICKUP_OR_SET_DOWN : InventoryAction.PLACE_SINGLE, dr.slotNumber, 0 );
NetworkHandler.instance.sendToServer( p );
NetworkHandler.instance().sendToServer( p );
}
}
}
@@ -317,7 +323,7 @@ public abstract class AEBaseGui extends GuiContainer
}
}
//TODO 1.9.4 aftermath - Whole ClickType thing, to be checked.
// TODO 1.9.4 aftermath - Whole ClickType thing, to be checked.
@Override
protected void handleMouseClick( final Slot slot, final int slotIdx, final int mouseButton, final ClickType clickType )
{
@@ -325,7 +331,7 @@ public abstract class AEBaseGui extends GuiContainer
if( slot instanceof SlotFake )
{
final InventoryAction action = isCtrlKeyDown() ? InventoryAction.SPLIT_OR_PLACE_SINGLE : InventoryAction.PICKUP_OR_SET_DOWN;
final InventoryAction action = mouseButton == 1 ? InventoryAction.SPLIT_OR_PLACE_SINGLE : InventoryAction.PICKUP_OR_SET_DOWN;
if( this.drag_click.size() > 1 )
{
@@ -333,7 +339,7 @@ public abstract class AEBaseGui extends GuiContainer
}
final PacketInventoryAction p = new PacketInventoryAction( action, slotIdx, 0 );
NetworkHandler.instance.sendToServer( p );
NetworkHandler.instance().sendToServer( p );
return;
}
@@ -347,7 +353,7 @@ public abstract class AEBaseGui extends GuiContainer
try
{
NetworkHandler.instance.sendToServer( ( (SlotPatternTerm) slot ).getRequest( isShiftKeyDown() ) );
NetworkHandler.instance().sendToServer( ( (SlotPatternTerm) slot ).getRequest( isShiftKeyDown() ) );
}
catch( final IOException e )
{
@@ -369,11 +375,11 @@ public abstract class AEBaseGui extends GuiContainer
else
{
// Craft stack on right-click, craft single on left-click
action = (mouseButton == 1) ? InventoryAction.CRAFT_STACK : InventoryAction.CRAFT_ITEM;
action = ( mouseButton == 1 ) ? InventoryAction.CRAFT_STACK : InventoryAction.CRAFT_ITEM;
}
final PacketInventoryAction p = new PacketInventoryAction( action, slotIdx, 0 );
NetworkHandler.instance.sendToServer( p );
NetworkHandler.instance().sendToServer( p );
return;
}
@@ -397,7 +403,7 @@ public abstract class AEBaseGui extends GuiContainer
( (AEBaseContainer) this.inventorySlots ).setTargetStack( stack );
final PacketInventoryAction p = new PacketInventoryAction( InventoryAction.MOVE_REGION, slotNum, 0 );
NetworkHandler.instance.sendToServer( p );
NetworkHandler.instance().sendToServer( p );
return;
}
}
@@ -409,10 +415,10 @@ public abstract class AEBaseGui extends GuiContainer
switch( clickType )
{
case PICKUP: // pickup / set-down.
action = (mouseButton == 1) ? InventoryAction.SPLIT_OR_PLACE_SINGLE : InventoryAction.PICKUP_OR_SET_DOWN;
action = ( mouseButton == 1 ) ? InventoryAction.SPLIT_OR_PLACE_SINGLE : InventoryAction.PICKUP_OR_SET_DOWN;
break;
case QUICK_MOVE:
action = isCtrlKeyDown() ? InventoryAction.PICKUP_SINGLE : InventoryAction.SHIFT_CLICK;
action = ( mouseButton == 1 ) ? InventoryAction.PICKUP_SINGLE : InventoryAction.SHIFT_CLICK;
break;
case CLONE: // creative dupe:
@@ -431,7 +437,7 @@ public abstract class AEBaseGui extends GuiContainer
if( action != null )
{
final PacketInventoryAction p = new PacketInventoryAction( action, slot.getSlotIndex(), ( (SlotDisconnected) slot ).getSlot().getId() );
NetworkHandler.instance.sendToServer( p );
NetworkHandler.instance().sendToServer( p );
}
return;
@@ -445,7 +451,7 @@ public abstract class AEBaseGui extends GuiContainer
switch( clickType )
{
case PICKUP: // pickup / set-down.
action = (mouseButton == 1) ? InventoryAction.SPLIT_OR_PLACE_SINGLE : InventoryAction.PICKUP_OR_SET_DOWN;
action = ( mouseButton == 1 ) ? InventoryAction.SPLIT_OR_PLACE_SINGLE : InventoryAction.PICKUP_OR_SET_DOWN;
stack = ( (SlotME) slot ).getAEStack();
if( stack != null && action == InventoryAction.PICKUP_OR_SET_DOWN && stack.getStackSize() == 0 && player.inventory.getItemStack() == null )
@@ -455,7 +461,7 @@ public abstract class AEBaseGui extends GuiContainer
break;
case QUICK_MOVE:
action = isCtrlKeyDown() ? InventoryAction.PICKUP_SINGLE : InventoryAction.SHIFT_CLICK;
action = ( mouseButton == 1 ) ? InventoryAction.PICKUP_SINGLE : InventoryAction.SHIFT_CLICK;
stack = ( (SlotME) slot ).getAEStack();
break;
@@ -484,7 +490,7 @@ public abstract class AEBaseGui extends GuiContainer
{
( (AEBaseContainer) this.inventorySlots ).setTargetStack( stack );
final PacketInventoryAction p = new PacketInventoryAction( action, this.getInventorySlots().size(), 0 );
NetworkHandler.instance.sendToServer( p );
NetworkHandler.instance().sendToServer( p );
}
return;
@@ -515,7 +521,9 @@ public abstract class AEBaseGui extends GuiContainer
final List<Slot> slots = this.getInventorySlots();
for( final Slot inventorySlot : slots )
{
if( inventorySlot != null && inventorySlot.canTakeStack( this.mc.thePlayer ) && inventorySlot.getHasStack() && inventorySlot.inventory == slot.inventory && Container.canAddItemToSlot( inventorySlot, this.dbl_whichItem, true ) )
if( inventorySlot != null && inventorySlot.canTakeStack(
this.mc.thePlayer ) && inventorySlot.getHasStack() && inventorySlot.inventory == slot.inventory && Container.canAddItemToSlot(
inventorySlot, this.dbl_whichItem, true ) )
{
this.handleMouseClick( inventorySlot, inventorySlot.slotNumber, 1, clickType );
}
@@ -531,16 +539,7 @@ public abstract class AEBaseGui extends GuiContainer
@Override
protected boolean checkHotbarKeys( final int keyCode )
{
final Slot theSlot;
try
{
theSlot = ObfuscationReflectionHelper.getPrivateValue( GuiContainer.class, this, "theSlot", "field_147006_u", "f" );
}
catch( final Throwable t )
{
return false;
}
final Slot theSlot = this.getSlotUnderMouse();
if( this.mc.thePlayer.inventory.getItemStack() == null && theSlot != null )
{
@@ -571,7 +570,7 @@ public abstract class AEBaseGui extends GuiContainer
{
if( s.getSlotIndex() == j && s.inventory == ( (AEBaseContainer) this.inventorySlots ).getPlayerInv() )
{
NetworkHandler.instance.sendToServer( new PacketSwapSlots( s.slotNumber, theSlot.slotNumber ) );
NetworkHandler.instance().sendToServer( new PacketSwapSlots( s.slotNumber, theSlot.slotNumber ) );
return true;
}
}
@@ -640,7 +639,7 @@ public abstract class AEBaseGui extends GuiContainer
for( int h = 0; h < times; h++ )
{
final PacketInventoryAction p = new PacketInventoryAction( direction, inventorySize, 0 );
NetworkHandler.instance.sendToServer( p );
NetworkHandler.instance().sendToServer( p );
}
}
}
@@ -693,7 +692,8 @@ public abstract class AEBaseGui extends GuiContainer
/**
* This overrides the base-class method through some access transformer hackery...
*/
public void drawSlot( final Slot s )
@Override
public void drawSlot( Slot s )
{
if( s instanceof SlotME )
{
@@ -712,7 +712,7 @@ public abstract class AEBaseGui extends GuiContainer
this.itemRender.zLevel = 0.0F;
// Annoying but easier than trying to splice into render item
this.safeDrawSlot( new Size1Slot( s ) );
super.drawSlot( new Size1Slot( s ) );
stackSizeRenderer.renderStackSize( fontRendererObj, ( (SlotME) s ).getAEStack(), s.getStack(), s.xDisplayPosition, s.yDisplayPosition );
@@ -759,11 +759,15 @@ public abstract class AEBaseGui extends GuiContainer
final float f1 = 0.00390625F;
final float f = 0.00390625F;
final float par6 = 16;
vb.pos( par1 + 0, par2 + par6, this.zLevel ).tex( ( par3 + 0 ) * f, ( par4 + par6 ) * f1 ).color( 1.0f, 1.0f, 1.0f, aes.getOpacityOfIcon() ).endVertex();
vb.pos( par1 + 0, par2 + par6, this.zLevel ).tex( ( par3 + 0 ) * f, ( par4 + par6 ) * f1 ).color( 1.0f, 1.0f, 1.0f,
aes.getOpacityOfIcon() ).endVertex();
final float par5 = 16;
vb.pos( par1 + par5, par2 + par6, this.zLevel ).tex( ( par3 + par5 ) * f, ( par4 + par6 ) * f1 ).color( 1.0f, 1.0f, 1.0f, aes.getOpacityOfIcon() ).endVertex();
vb.pos( par1 + par5, par2 + 0, this.zLevel ).tex( ( par3 + par5 ) * f, ( par4 + 0 ) * f1 ).color( 1.0f, 1.0f, 1.0f, aes.getOpacityOfIcon() ).endVertex();
vb.pos( par1 + 0, par2 + 0, this.zLevel ).tex( ( par3 + 0 ) * f, ( par4 + 0 ) * f1 ).color( 1.0f, 1.0f, 1.0f, aes.getOpacityOfIcon() ).endVertex();
vb.pos( par1 + par5, par2 + par6, this.zLevel ).tex( ( par3 + par5 ) * f, ( par4 + par6 ) * f1 ).color( 1.0f, 1.0f, 1.0f,
aes.getOpacityOfIcon() ).endVertex();
vb.pos( par1 + par5, par2 + 0, this.zLevel ).tex( ( par3 + par5 ) * f, ( par4 + 0 ) * f1 ).color( 1.0f, 1.0f, 1.0f,
aes.getOpacityOfIcon() ).endVertex();
vb.pos( par1 + 0, par2 + 0, this.zLevel ).tex( ( par3 + 0 ) * f, ( par4 + 0 ) * f1 ).color( 1.0f, 1.0f, 1.0f,
aes.getOpacityOfIcon() ).endVertex();
tessellator.draw();
}
@@ -777,7 +781,8 @@ public abstract class AEBaseGui extends GuiContainer
{
if( ( (AppEngSlot) s ).getIsValid() == hasCalculatedValidness.NotAvailable )
{
boolean isValid = s.isItemValid( is ) || s instanceof SlotOutput || s instanceof AppEngCraftingSlot || s instanceof SlotDisabled || s instanceof SlotInaccessible || s instanceof SlotFake || s instanceof SlotRestrictedInput || s instanceof SlotDisconnected;
boolean isValid = s.isItemValid(
is ) || s instanceof SlotOutput || s instanceof AppEngCraftingSlot || s instanceof SlotDisabled || s instanceof SlotInaccessible || s instanceof SlotFake || s instanceof SlotRestrictedInput || s instanceof SlotDisconnected;
if( isValid && s instanceof SlotRestrictedInput )
{
try
@@ -809,11 +814,11 @@ public abstract class AEBaseGui extends GuiContainer
if( s instanceof AppEngSlot )
{
( (AppEngSlot) s ).setDisplay( true );
this.safeDrawSlot( s );
super.drawSlot( s );
}
else
{
this.safeDrawSlot( s );
super.drawSlot( s );
}
return;
@@ -824,7 +829,7 @@ public abstract class AEBaseGui extends GuiContainer
}
}
// do the usual for non-ME Slots.
this.safeDrawSlot( s );
super.drawSlot( s );
}
protected boolean isPowered()
@@ -832,22 +837,12 @@ public abstract class AEBaseGui extends GuiContainer
return true;
}
private void safeDrawSlot( final Slot s )
{
try
{
GuiContainer.class.getDeclaredMethod( "func_146977_a_original", Slot.class ).invoke( this, s );
}
catch( final Exception err )
{
}
}
public void bindTexture( final String file )
{
final ResourceLocation loc = new ResourceLocation( AppEng.MOD_ID, "textures/" + file );
this.mc.getTextureManager().bindTexture( loc );
}
protected GuiScrollbar getScrollBar()
{
return this.myScrollBar;
@@ -49,7 +49,7 @@ public abstract class AEBaseMEGui extends AEBaseGui
final Slot s = this.getSlot( mouseX, mouseY );
if( s instanceof SlotME )
{
final int BigNumber = AEConfig.instance.useTerminalUseLargeFont() ? 999 : 9999;
final int BigNumber = AEConfig.instance().useTerminalUseLargeFont() ? 999 : 9999;
IAEItemStack myStack = null;
@@ -103,7 +103,7 @@ public abstract class AEBaseMEGui extends AEBaseGui
final Slot s = this.getSlot( x, y );
if( s instanceof SlotME && stack != null )
{
final int BigNumber = AEConfig.instance.useTerminalUseLargeFont() ? 999 : 9999;
final int BigNumber = AEConfig.instance().useTerminalUseLargeFont() ? 999 : 9999;
IAEItemStack myStack = null;
@@ -37,14 +37,14 @@ public class AEConfigGui extends GuiConfig
public AEConfigGui( final GuiScreen parent )
{
super( parent, getConfigElements(), AppEng.MOD_ID, false, false, GuiConfig.getAbridgedConfigPath( AEConfig.instance.getFilePath() ) );
super( parent, getConfigElements(), AppEng.MOD_ID, false, false, GuiConfig.getAbridgedConfigPath( AEConfig.instance().getFilePath() ) );
}
private static List<IConfigElement> getConfigElements()
{
final List<IConfigElement> list = new ArrayList<IConfigElement>();
for( final String cat : AEConfig.instance.getCategoryNames() )
for( final String cat : AEConfig.instance().getCategoryNames() )
{
if( cat.equals( "versionchecker" ) )
{
@@ -56,7 +56,7 @@ public class AEConfigGui extends GuiConfig
continue;
}
final ConfigCategory cc = AEConfig.instance.getCategory( cat );
final ConfigCategory cc = AEConfig.instance().getCategory( cat );
if( cc.isChild() )
{
@@ -176,15 +176,15 @@ public class GuiCellWorkbench extends GuiUpgradeable
{
if( btn == this.copyMode )
{
NetworkHandler.instance.sendToServer( new PacketValueConfig( "CellWorkbench.Action", "CopyMode" ) );
NetworkHandler.instance().sendToServer( new PacketValueConfig( "CellWorkbench.Action", "CopyMode" ) );
}
else if( btn == this.partition )
{
NetworkHandler.instance.sendToServer( new PacketValueConfig( "CellWorkbench.Action", "Partition" ) );
NetworkHandler.instance().sendToServer( new PacketValueConfig( "CellWorkbench.Action", "Partition" ) );
}
else if( btn == this.clear )
{
NetworkHandler.instance.sendToServer( new PacketValueConfig( "CellWorkbench.Action", "Clear" ) );
NetworkHandler.instance().sendToServer( new PacketValueConfig( "CellWorkbench.Action", "Clear" ) );
}
else if( btn == this.fuzzyMode )
{
@@ -193,7 +193,7 @@ public class GuiCellWorkbench extends GuiUpgradeable
FuzzyMode fz = (FuzzyMode) this.fuzzyMode.getCurrentValue();
fz = Platform.rotateEnum( fz, backwards, Settings.FUZZY_MODE.getPossibleValues() );
NetworkHandler.instance.sendToServer( new PacketValueConfig( "CellWorkbench.Fuzzy", fz.name() ) );
NetworkHandler.instance().sendToServer( new PacketValueConfig( "CellWorkbench.Fuzzy", fz.name() ) );
}
else
{
@@ -52,7 +52,7 @@ public class GuiChest extends AEBaseGui
if( par1GuiButton == this.priority )
{
NetworkHandler.instance.sendToServer( new PacketSwitchGuis( GuiBridge.GUI_PRIORITY ) );
NetworkHandler.instance().sendToServer( new PacketSwitchGuis( GuiBridge.GUI_PRIORITY ) );
}
}
@@ -61,7 +61,7 @@ public class GuiCondenser extends AEBaseGui
if( this.mode == btn )
{
NetworkHandler.instance.sendToServer( new PacketConfigButton( Settings.CONDENSER_OUTPUT, backwards ) );
NetworkHandler.instance().sendToServer( new PacketConfigButton( Settings.CONDENSER_OUTPUT, backwards ) );
}
}
@@ -76,10 +76,10 @@ public class GuiCraftAmount extends AEBaseGui
{
super.initGui();
final int a = AEConfig.instance.craftItemsByStackAmounts( 0 );
final int b = AEConfig.instance.craftItemsByStackAmounts( 1 );
final int c = AEConfig.instance.craftItemsByStackAmounts( 2 );
final int d = AEConfig.instance.craftItemsByStackAmounts( 3 );
final int a = AEConfig.instance().craftItemsByStackAmounts( 0 );
final int b = AEConfig.instance().craftItemsByStackAmounts( 1 );
final int c = AEConfig.instance().craftItemsByStackAmounts( 2 );
final int d = AEConfig.instance().craftItemsByStackAmounts( 3 );
this.buttonList.add( this.plus1 = new GuiButton( 0, this.guiLeft + 20, this.guiTop + 26, 22, 20, "+" + a ) );
this.buttonList.add( this.plus10 = new GuiButton( 0, this.guiLeft + 48, this.guiTop + 26, 28, 20, "+" + b ) );
@@ -224,12 +224,12 @@ public class GuiCraftAmount extends AEBaseGui
if( btn == this.originalGuiBtn )
{
NetworkHandler.instance.sendToServer( new PacketSwitchGuis( this.originalGui ) );
NetworkHandler.instance().sendToServer( new PacketSwitchGuis( this.originalGui ) );
}
if( btn == this.next )
{
NetworkHandler.instance.sendToServer( new PacketCraftRequest( Integer.parseInt( this.amountToCraft.getText() ), isShiftKeyDown() ) );
NetworkHandler.instance().sendToServer( new PacketCraftRequest( Integer.parseInt( this.amountToCraft.getText() ), isShiftKeyDown() ) );
}
}
catch( final NumberFormatException e )
@@ -552,7 +552,7 @@ public class GuiCraftConfirm extends AEBaseGui
{
try
{
NetworkHandler.instance.sendToServer( new PacketValueConfig( "Terminal.Cpu", backwards ? "Prev" : "Next" ) );
NetworkHandler.instance().sendToServer( new PacketValueConfig( "Terminal.Cpu", backwards ? "Prev" : "Next" ) );
}
catch( final IOException e )
{
@@ -562,14 +562,14 @@ public class GuiCraftConfirm extends AEBaseGui
if( btn == this.cancel )
{
NetworkHandler.instance.sendToServer( new PacketSwitchGuis( this.OriginalGui ) );
NetworkHandler.instance().sendToServer( new PacketSwitchGuis( this.OriginalGui ) );
}
if( btn == this.start )
{
try
{
NetworkHandler.instance.sendToServer( new PacketValueConfig( "Terminal.Start", "Start" ) );
NetworkHandler.instance().sendToServer( new PacketValueConfig( "Terminal.Start", "Start" ) );
}
catch( final Throwable e )
{
@@ -125,7 +125,7 @@ public class GuiCraftingCPU extends AEBaseGui implements ISortSource
{
try
{
NetworkHandler.instance.sendToServer( new PacketValueConfig( "TileCrafting.Cancel", "Cancel" ) );
NetworkHandler.instance().sendToServer( new PacketValueConfig( "TileCrafting.Cancel", "Cancel" ) );
}
catch( final IOException e )
{
@@ -248,7 +248,7 @@ public class GuiCraftingCPU extends AEBaseGui implements ISortSource
scheduled = true;
}
if( AEConfig.instance.useColoredCraftingStatus && ( active || scheduled ) )
if( AEConfig.instance().isUseColoredCraftingStatus() && ( active || scheduled ) )
{
final int bgColor = ( active ? AEColor.GREEN.blackVariant : AEColor.YELLOW.blackVariant ) | BACKGROUND_ALPHA;
final int startX = ( x * ( 1 + SECTION_LENGTH ) + ITEMSTACK_LEFT_OFFSET ) * 2;
@@ -108,7 +108,7 @@ public class GuiCraftingStatus extends GuiCraftingCPU
{
try
{
NetworkHandler.instance.sendToServer( new PacketValueConfig( "Terminal.Cpu", backwards ? "Prev" : "Next" ) );
NetworkHandler.instance().sendToServer( new PacketValueConfig( "Terminal.Cpu", backwards ? "Prev" : "Next" ) );
}
catch( final IOException e )
{
@@ -118,7 +118,7 @@ public class GuiCraftingStatus extends GuiCraftingCPU
if( btn == this.originalGuiBtn )
{
NetworkHandler.instance.sendToServer( new PacketSwitchGuis( this.originalGui ) );
NetworkHandler.instance().sendToServer( new PacketSwitchGuis( this.originalGui ) );
}
}
@@ -67,7 +67,7 @@ public class GuiCraftingTerm extends GuiMEMonitorable
if( s != null )
{
final PacketInventoryAction p = new PacketInventoryAction( InventoryAction.MOVE_REGION, s.slotNumber, 0 );
NetworkHandler.instance.sendToServer( p );
NetworkHandler.instance().sendToServer( p );
}
}
}
@@ -52,7 +52,7 @@ public class GuiDrive extends AEBaseGui
if( par1GuiButton == this.priority )
{
NetworkHandler.instance.sendToServer( new PacketSwitchGuis( GuiBridge.GUI_PRIORITY ) );
NetworkHandler.instance().sendToServer( new PacketSwitchGuis( GuiBridge.GUI_PRIORITY ) );
}
}
@@ -96,11 +96,11 @@ public class GuiFormationPlane extends GuiUpgradeable
if( btn == this.priority )
{
NetworkHandler.instance.sendToServer( new PacketSwitchGuis( GuiBridge.GUI_PRIORITY ) );
NetworkHandler.instance().sendToServer( new PacketSwitchGuis( GuiBridge.GUI_PRIORITY ) );
}
else if( btn == this.placeMode )
{
NetworkHandler.instance.sendToServer( new PacketConfigButton( this.placeMode.getSetting(), backwards ) );
NetworkHandler.instance().sendToServer( new PacketConfigButton( this.placeMode.getSetting(), backwards ) );
}
}
}
@@ -113,12 +113,12 @@ public class GuiIOPort extends GuiUpgradeable
if( btn == this.fullMode )
{
NetworkHandler.instance.sendToServer( new PacketConfigButton( this.fullMode.getSetting(), backwards ) );
NetworkHandler.instance().sendToServer( new PacketConfigButton( this.fullMode.getSetting(), backwards ) );
}
if( btn == this.operationMode )
{
NetworkHandler.instance.sendToServer( new PacketConfigButton( this.operationMode.getSetting(), backwards ) );
NetworkHandler.instance().sendToServer( new PacketConfigButton( this.operationMode.getSetting(), backwards ) );
}
}
}
@@ -103,17 +103,17 @@ public class GuiInterface extends GuiUpgradeable
if( btn == this.priority )
{
NetworkHandler.instance.sendToServer( new PacketSwitchGuis( GuiBridge.GUI_PRIORITY ) );
NetworkHandler.instance().sendToServer( new PacketSwitchGuis( GuiBridge.GUI_PRIORITY ) );
}
if( btn == this.interfaceMode )
{
NetworkHandler.instance.sendToServer( new PacketConfigButton( Settings.INTERFACE_TERMINAL, backwards ) );
NetworkHandler.instance().sendToServer( new PacketConfigButton( Settings.INTERFACE_TERMINAL, backwards ) );
}
if( btn == this.BlockMode )
{
NetworkHandler.instance.sendToServer( new PacketConfigButton( this.BlockMode.getSetting(), backwards ) );
NetworkHandler.instance().sendToServer( new PacketConfigButton( this.BlockMode.getSetting(), backwards ) );
}
}
}
@@ -88,10 +88,10 @@ public class GuiLevelEmitter extends GuiUpgradeable
this.fuzzyMode = new GuiImgButton( this.guiLeft - 18, this.guiTop + 48, Settings.FUZZY_MODE, FuzzyMode.IGNORE_ALL );
this.craftingMode = new GuiImgButton( this.guiLeft - 18, this.guiTop + 48, Settings.CRAFT_VIA_REDSTONE, YesNo.NO );
final int a = AEConfig.instance.levelByStackAmounts( 0 );
final int b = AEConfig.instance.levelByStackAmounts( 1 );
final int c = AEConfig.instance.levelByStackAmounts( 2 );
final int d = AEConfig.instance.levelByStackAmounts( 3 );
final int a = AEConfig.instance().levelByStackAmounts( 0 );
final int b = AEConfig.instance().levelByStackAmounts( 1 );
final int c = AEConfig.instance().levelByStackAmounts( 2 );
final int d = AEConfig.instance().levelByStackAmounts( 3 );
this.buttonList.add( this.plus1 = new GuiButton( 0, this.guiLeft + 20, this.guiTop + 17, 22, 20, "+" + a ) );
this.buttonList.add( this.plus10 = new GuiButton( 0, this.guiLeft + 48, this.guiTop + 17, 28, 20, "+" + b ) );
@@ -175,12 +175,12 @@ public class GuiLevelEmitter extends GuiUpgradeable
if( btn == this.craftingMode )
{
NetworkHandler.instance.sendToServer( new PacketConfigButton( this.craftingMode.getSetting(), backwards ) );
NetworkHandler.instance().sendToServer( new PacketConfigButton( this.craftingMode.getSetting(), backwards ) );
}
if( btn == this.levelMode )
{
NetworkHandler.instance.sendToServer( new PacketConfigButton( this.levelMode.getSetting(), backwards ) );
NetworkHandler.instance().sendToServer( new PacketConfigButton( this.levelMode.getSetting(), backwards ) );
}
final boolean isPlus = btn == this.plus1 || btn == this.plus10 || btn == this.plus100 || btn == this.plus1000;
@@ -224,7 +224,7 @@ public class GuiLevelEmitter extends GuiUpgradeable
this.level.setText( Out = Long.toString( result ) );
NetworkHandler.instance.sendToServer( new PacketValueConfig( "LevelEmitter.Value", Out ) );
NetworkHandler.instance().sendToServer( new PacketValueConfig( "LevelEmitter.Value", Out ) );
}
catch( final NumberFormatException e )
{
@@ -265,7 +265,7 @@ public class GuiLevelEmitter extends GuiUpgradeable
Out = "0";
}
NetworkHandler.instance.sendToServer( new PacketValueConfig( "LevelEmitter.Value", Out ) );
NetworkHandler.instance().sendToServer( new PacketValueConfig( "LevelEmitter.Value", Out ) );
}
catch( final IOException e )
{
@@ -168,7 +168,7 @@ public class GuiMEMonitorable extends AEBaseMEGui implements ISortSource, IConfi
{
if( btn == this.craftingStatusBtn )
{
NetworkHandler.instance.sendToServer( new PacketSwitchGuis( GuiBridge.GUI_CRAFTING_STATUS ) );
NetworkHandler.instance().sendToServer( new PacketSwitchGuis( GuiBridge.GUI_CRAFTING_STATUS ) );
}
if( btn instanceof GuiImgButton )
@@ -183,17 +183,17 @@ public class GuiMEMonitorable extends AEBaseMEGui implements ISortSource, IConfi
if( btn == this.terminalStyleBox )
{
AEConfig.instance.settings.putSetting( iBtn.getSetting(), next );
AEConfig.instance().getConfigManager().putSetting( iBtn.getSetting(), next );
}
else if( btn == this.searchBoxSettings )
{
AEConfig.instance.settings.putSetting( iBtn.getSetting(), next );
AEConfig.instance().getConfigManager().putSetting( iBtn.getSetting(), next );
}
else
{
try
{
NetworkHandler.instance.sendToServer( new PacketValueConfig( iBtn.getSetting().name(), next.name() ) );
NetworkHandler.instance().sendToServer( new PacketValueConfig( iBtn.getSetting().name(), next.name() ) );
}
catch( final IOException e )
{
@@ -223,7 +223,7 @@ public class GuiMEMonitorable extends AEBaseMEGui implements ISortSource, IConfi
Keyboard.enableRepeatEvents( true );
this.maxRows = this.getMaxRows();
this.perRow = AEConfig.instance.getConfigManager().getSetting( Settings.TERMINAL_STYLE ) != TerminalStyle.FULL ? 9 : 9 + ( ( this.width - this.standardSize ) / 18 );
this.perRow = AEConfig.instance().getConfigManager().getSetting( Settings.TERMINAL_STYLE ) != TerminalStyle.FULL ? 9 : 9 + ( ( this.width - this.standardSize ) / 18 );
final int magicNumber = 114 + 1;
final int extraSpace = this.height - magicNumber - this.reservedSpace;
@@ -248,7 +248,7 @@ public class GuiMEMonitorable extends AEBaseMEGui implements ISortSource, IConfi
}
}
if( AEConfig.instance.getConfigManager().getSetting( Settings.TERMINAL_STYLE ) != TerminalStyle.FULL )
if( AEConfig.instance().getConfigManager().getSetting( Settings.TERMINAL_STYLE ) != TerminalStyle.FULL )
{
this.xSize = this.standardSize + ( ( this.perRow - 9 ) * 18 );
}
@@ -284,12 +284,12 @@ public class GuiMEMonitorable extends AEBaseMEGui implements ISortSource, IConfi
this.buttonList.add( this.SortDirBox = new GuiImgButton( this.guiLeft - 18, offset, Settings.SORT_DIRECTION, this.configSrc.getSetting( Settings.SORT_DIRECTION ) ) );
offset += 20;
this.buttonList.add( this.searchBoxSettings = new GuiImgButton( this.guiLeft - 18, offset, Settings.SEARCH_MODE, AEConfig.instance.settings.getSetting( Settings.SEARCH_MODE ) ) );
this.buttonList.add( this.searchBoxSettings = new GuiImgButton( this.guiLeft - 18, offset, Settings.SEARCH_MODE, AEConfig.instance().getConfigManager().getSetting( Settings.SEARCH_MODE ) ) );
offset += 20;
if( !( this instanceof GuiMEPortableCell ) || this instanceof GuiWirelessTerm )
{
this.buttonList.add( this.terminalStyleBox = new GuiImgButton( this.guiLeft - 18, offset, Settings.TERMINAL_STYLE, AEConfig.instance.settings.getSetting( Settings.TERMINAL_STYLE ) ) );
this.buttonList.add( this.terminalStyleBox = new GuiImgButton( this.guiLeft - 18, offset, Settings.TERMINAL_STYLE, AEConfig.instance().getConfigManager().getSetting( Settings.TERMINAL_STYLE ) ) );
}
this.searchField = new MEGuiTextField( this.fontRendererObj, this.guiLeft + Math.max( 80, this.offsetX ), this.guiTop + 4, 90, 12 );
@@ -304,8 +304,8 @@ public class GuiMEMonitorable extends AEBaseMEGui implements ISortSource, IConfi
this.craftingStatusBtn.setHideEdge( 13 );
}
// Enum setting = AEConfig.INSTANCE.getSetting( "Terminal", SearchBoxMode.class, SearchBoxMode.AUTOSEARCH );
final Enum setting = AEConfig.instance.settings.getSetting( Settings.SEARCH_MODE );
// Enum setting = AEConfig.instance().getSetting( "Terminal", SearchBoxMode.class, SearchBoxMode.AUTOSEARCH );
final Enum setting = AEConfig.instance().getConfigManager().getSetting( Settings.SEARCH_MODE );
this.searchField.setFocused( SearchBoxMode.AUTOSEARCH == setting || SearchBoxMode.JEI_AUTOSEARCH == setting );
if( this.isSubGui() )
@@ -354,7 +354,7 @@ public class GuiMEMonitorable extends AEBaseMEGui implements ISortSource, IConfi
@Override
protected void mouseClicked( final int xCoord, final int yCoord, final int btn ) throws IOException
{
final Enum searchMode = AEConfig.instance.settings.getSetting( Settings.SEARCH_MODE );
final Enum searchMode = AEConfig.instance().getConfigManager().getSetting( Settings.SEARCH_MODE );
if( searchMode != SearchBoxMode.AUTOSEARCH && searchMode != SearchBoxMode.JEI_AUTOSEARCH )
{
@@ -438,7 +438,7 @@ public class GuiMEMonitorable extends AEBaseMEGui implements ISortSource, IConfi
int getMaxRows()
{
return AEConfig.instance.getConfigManager().getSetting( Settings.TERMINAL_STYLE ) == TerminalStyle.SMALL ? 6 : Integer.MAX_VALUE;
return AEConfig.instance().getConfigManager().getSetting( Settings.TERMINAL_STYLE ) == TerminalStyle.SMALL ? 6 : Integer.MAX_VALUE;
}
protected void repositionSlot( final AppEngSlot s )
@@ -77,8 +77,8 @@ public class GuiNetworkStatus extends AEBaseGui implements ISortSource
if( btn == this.units )
{
AEConfig.instance.nextPowerUnit( backwards );
this.units.set( AEConfig.instance.selectedPowerUnit() );
AEConfig.instance().nextPowerUnit( backwards );
this.units.set( AEConfig.instance().selectedPowerUnit() );
}
}
@@ -87,7 +87,7 @@ public class GuiNetworkStatus extends AEBaseGui implements ISortSource
{
super.initGui();
this.units = new GuiImgButton( this.guiLeft - 18, this.guiTop + 8, Settings.POWER_UNITS, AEConfig.instance.selectedPowerUnit() );
this.units = new GuiImgButton( this.guiLeft - 18, this.guiTop + 8, Settings.POWER_UNITS, AEConfig.instance().selectedPowerUnit() );
this.buttonList.add( this.units );
}
@@ -54,7 +54,7 @@ public class GuiNetworkTool extends AEBaseGui
{
if( btn == this.tFacades )
{
NetworkHandler.instance.sendToServer( new PacketValueConfig( "NetworkTool", "Toggle" ) );
NetworkHandler.instance().sendToServer( new PacketValueConfig( "NetworkTool", "Toggle" ) );
}
}
catch( final IOException e )
@@ -78,22 +78,22 @@ public class GuiPatternTerm extends GuiMEMonitorable
if( this.tabCraftButton == btn || this.tabProcessButton == btn )
{
NetworkHandler.instance.sendToServer( new PacketValueConfig( "PatternTerminal.CraftMode", this.tabProcessButton == btn ? CRAFTMODE_CRFTING : CRAFTMODE_PROCESSING ) );
NetworkHandler.instance().sendToServer( new PacketValueConfig( "PatternTerminal.CraftMode", this.tabProcessButton == btn ? CRAFTMODE_CRFTING : CRAFTMODE_PROCESSING ) );
}
if( this.encodeBtn == btn )
{
NetworkHandler.instance.sendToServer( new PacketValueConfig( "PatternTerminal.Encode", "1" ) );
NetworkHandler.instance().sendToServer( new PacketValueConfig( "PatternTerminal.Encode", "1" ) );
}
if( this.clearBtn == btn )
{
NetworkHandler.instance.sendToServer( new PacketValueConfig( "PatternTerminal.Clear", "1" ) );
NetworkHandler.instance().sendToServer( new PacketValueConfig( "PatternTerminal.Clear", "1" ) );
}
if( this.substitutionsEnabledBtn == btn || this.substitutionsDisabledBtn == btn )
{
NetworkHandler.instance.sendToServer( new PacketValueConfig( "PatternTerminal.Substitute", this.substitutionsEnabledBtn == btn ? SUBSITUTION_DISABLE : SUBSITUTION_ENABLE ) );
NetworkHandler.instance().sendToServer( new PacketValueConfig( "PatternTerminal.Substitute", this.substitutionsEnabledBtn == btn ? SUBSITUTION_DISABLE : SUBSITUTION_ENABLE ) );
}
}
catch( final IOException e )
@@ -77,10 +77,10 @@ public class GuiPriority extends AEBaseGui
{
super.initGui();
final int a = AEConfig.instance.priorityByStacksAmounts( 0 );
final int b = AEConfig.instance.priorityByStacksAmounts( 1 );
final int c = AEConfig.instance.priorityByStacksAmounts( 2 );
final int d = AEConfig.instance.priorityByStacksAmounts( 3 );
final int a = AEConfig.instance().priorityByStacksAmounts( 0 );
final int b = AEConfig.instance().priorityByStacksAmounts( 1 );
final int c = AEConfig.instance().priorityByStacksAmounts( 2 );
final int d = AEConfig.instance().priorityByStacksAmounts( 3 );
this.buttonList.add( this.plus1 = new GuiButton( 0, this.guiLeft + 20, this.guiTop + 32, 22, 20, "+" + a ) );
this.buttonList.add( this.plus10 = new GuiButton( 0, this.guiLeft + 48, this.guiTop + 32, 28, 20, "+" + b ) );
@@ -170,7 +170,7 @@ public class GuiPriority extends AEBaseGui
if( btn == this.originalGuiBtn )
{
NetworkHandler.instance.sendToServer( new PacketSwitchGuis( this.OriginalGui ) );
NetworkHandler.instance().sendToServer( new PacketSwitchGuis( this.OriginalGui ) );
}
final boolean isPlus = btn == this.plus1 || btn == this.plus10 || btn == this.plus100 || btn == this.plus1000;
@@ -210,7 +210,7 @@ public class GuiPriority extends AEBaseGui
this.priority.setText( out = Long.toString( result ) );
NetworkHandler.instance.sendToServer( new PacketValueConfig( "PriorityHost.Priority", out ) );
NetworkHandler.instance().sendToServer( new PacketValueConfig( "PriorityHost.Priority", out ) );
}
catch( final NumberFormatException e )
{
@@ -251,7 +251,7 @@ public class GuiPriority extends AEBaseGui
out = "0";
}
NetworkHandler.instance.sendToServer( new PacketValueConfig( "PriorityHost.Priority", out ) );
NetworkHandler.instance().sendToServer( new PacketValueConfig( "PriorityHost.Priority", out ) );
}
catch( final IOException e )
{
@@ -81,7 +81,7 @@ public class GuiQuartzKnife extends AEBaseGui
{
final String Out = this.name.getText();
( (ContainerQuartzKnife) this.inventorySlots ).setName( Out );
NetworkHandler.instance.sendToServer( new PacketValueConfig( "QuartzKnife.Name", Out ) );
NetworkHandler.instance().sendToServer( new PacketValueConfig( "QuartzKnife.Name", Out ) );
}
catch( final IOException e )
{
@@ -86,7 +86,7 @@ public class GuiSecurityStation extends GuiMEMonitorable
{
try
{
NetworkHandler.instance.sendToServer( new PacketValueConfig( "TileSecurityStation.ToggleOption", toggleSetting.name() ) );
NetworkHandler.instance().sendToServer( new PacketValueConfig( "TileSecurityStation.ToggleOption", toggleSetting.name() ) );
}
catch( final IOException e )
{
@@ -24,8 +24,7 @@ import net.minecraft.entity.player.InventoryPlayer;
import appeng.client.gui.AEBaseGui;
import appeng.container.implementations.ContainerSkyChest;
import appeng.core.localization.GuiText;
import appeng.integration.IntegrationRegistry;
import appeng.integration.IntegrationType;
import appeng.integration.Integrations;
import appeng.tile.storage.TileSkyChest;
@@ -55,6 +54,6 @@ public class GuiSkyChest extends AEBaseGui
@Override
protected boolean enableSpaceClicking()
{
return !IntegrationRegistry.INSTANCE.isEnabled( IntegrationType.InvTweaks );
return !Integrations.invTweaks().isEnabled();
}
}
@@ -58,8 +58,8 @@ public class GuiSpatialIOPort extends AEBaseGui
if( btn == this.units )
{
AEConfig.instance.nextPowerUnit( backwards );
this.units.set( AEConfig.instance.selectedPowerUnit() );
AEConfig.instance().nextPowerUnit( backwards );
this.units.set( AEConfig.instance().selectedPowerUnit() );
}
}
@@ -68,7 +68,7 @@ public class GuiSpatialIOPort extends AEBaseGui
{
super.initGui();
this.units = new GuiImgButton( this.guiLeft - 18, this.guiTop + 8, Settings.POWER_UNITS, AEConfig.instance.selectedPowerUnit() );
this.units = new GuiImgButton( this.guiLeft - 18, this.guiTop + 8, Settings.POWER_UNITS, AEConfig.instance().selectedPowerUnit() );
this.buttonList.add( this.units );
}
@@ -116,23 +116,23 @@ public class GuiStorageBus extends GuiUpgradeable
{
if( btn == this.partition )
{
NetworkHandler.instance.sendToServer( new PacketValueConfig( "StorageBus.Action", "Partition" ) );
NetworkHandler.instance().sendToServer( new PacketValueConfig( "StorageBus.Action", "Partition" ) );
}
else if( btn == this.clear )
{
NetworkHandler.instance.sendToServer( new PacketValueConfig( "StorageBus.Action", "Clear" ) );
NetworkHandler.instance().sendToServer( new PacketValueConfig( "StorageBus.Action", "Clear" ) );
}
else if( btn == this.priority )
{
NetworkHandler.instance.sendToServer( new PacketSwitchGuis( GuiBridge.GUI_PRIORITY ) );
NetworkHandler.instance().sendToServer( new PacketSwitchGuis( GuiBridge.GUI_PRIORITY ) );
}
else if( btn == this.rwMode )
{
NetworkHandler.instance.sendToServer( new PacketConfigButton( this.rwMode.getSetting(), backwards ) );
NetworkHandler.instance().sendToServer( new PacketConfigButton( this.rwMode.getSetting(), backwards ) );
}
else if( btn == this.storageFilter )
{
NetworkHandler.instance.sendToServer( new PacketConfigButton( this.storageFilter.getSetting(), backwards ) );
NetworkHandler.instance().sendToServer( new PacketConfigButton( this.storageFilter.getSetting(), backwards ) );
}
}
catch( final IOException e )
@@ -182,22 +182,22 @@ public class GuiUpgradeable extends AEBaseGui
if( btn == this.redstoneMode )
{
NetworkHandler.instance.sendToServer( new PacketConfigButton( this.redstoneMode.getSetting(), backwards ) );
NetworkHandler.instance().sendToServer( new PacketConfigButton( this.redstoneMode.getSetting(), backwards ) );
}
if( btn == this.craftMode )
{
NetworkHandler.instance.sendToServer( new PacketConfigButton( this.craftMode.getSetting(), backwards ) );
NetworkHandler.instance().sendToServer( new PacketConfigButton( this.craftMode.getSetting(), backwards ) );
}
if( btn == this.fuzzyMode )
{
NetworkHandler.instance.sendToServer( new PacketConfigButton( this.fuzzyMode.getSetting(), backwards ) );
NetworkHandler.instance().sendToServer( new PacketConfigButton( this.fuzzyMode.getSetting(), backwards ) );
}
if( btn == this.schedulingMode )
{
NetworkHandler.instance.sendToServer( new PacketConfigButton( this.schedulingMode.getSetting(), backwards ) );
NetworkHandler.instance().sendToServer( new PacketConfigButton( this.schedulingMode.getSetting(), backwards ) );
}
}
}
@@ -56,8 +56,8 @@ public class GuiWireless extends AEBaseGui
if( btn == this.units )
{
AEConfig.instance.nextPowerUnit( backwards );
this.units.set( AEConfig.instance.selectedPowerUnit() );
AEConfig.instance().nextPowerUnit( backwards );
this.units.set( AEConfig.instance().selectedPowerUnit() );
}
}
@@ -66,7 +66,7 @@ public class GuiWireless extends AEBaseGui
{
super.initGui();
this.units = new GuiImgButton( this.guiLeft - 18, this.guiTop + 8, Settings.POWER_UNITS, AEConfig.instance.selectedPowerUnit() );
this.units = new GuiImgButton( this.guiLeft - 18, this.guiTop + 8, Settings.POWER_UNITS, AEConfig.instance().selectedPowerUnit() );
this.buttonList.add( this.units );
}
+5 -6
View File
@@ -37,11 +37,11 @@ import appeng.api.storage.data.IItemList;
import appeng.client.gui.widgets.IScrollSource;
import appeng.client.gui.widgets.ISortSource;
import appeng.core.AEConfig;
import appeng.integration.modules.JEI;
import appeng.integration.Integrations;
import appeng.items.storage.ItemViewCell;
import appeng.util.ItemSorters;
import appeng.util.Platform;
import appeng.util.prioitylist.IPartitionList;
import appeng.util.prioritylist.IPartitionList;
public class ItemRepo
@@ -58,7 +58,6 @@ public class ItemRepo
private String searchString = "";
private IPartitionList<IAEItemStack> myPartitionList;
private String innerSearch = "";
private String jeiSearch = null;
private boolean hasPower;
public ItemRepo( final IScrollSource src, final ISortSource sortSrc )
@@ -124,14 +123,14 @@ public class ItemRepo
this.dsp.ensureCapacity( this.list.size() );
final Enum viewMode = this.sortSrc.getSortDisplay();
final Enum searchMode = AEConfig.instance.settings.getSetting( Settings.SEARCH_MODE );
final Enum searchMode = AEConfig.instance().getConfigManager().getSetting( Settings.SEARCH_MODE );
if( searchMode == SearchBoxMode.JEI_AUTOSEARCH || searchMode == SearchBoxMode.JEI_MANUAL_SEARCH )
{
this.updateJEI( this.searchString );
}
this.innerSearch = this.searchString;
final boolean terminalSearchToolTips = AEConfig.instance.settings.getSetting( Settings.SEARCH_TOOLTIPS ) != YesNo.NO;
final boolean terminalSearchToolTips = AEConfig.instance().getConfigManager().getSetting( Settings.SEARCH_TOOLTIPS ) != YesNo.NO;
// boolean terminalSearchMods = Configuration.INSTANCE.settings.getSetting( Settings.SEARCH_MODS ) != YesNo.NO;
boolean searchMod = false;
@@ -244,7 +243,7 @@ public class ItemRepo
private void updateJEI( String filter )
{
JEI.instance.getJei().setSearchText( filter );
Integrations.jei().setSearchText( filter );
}
public int size()
@@ -108,8 +108,9 @@ public class FacadeDispatcherBakedModel implements IBakedModel
ItemFacade itemFacade = (ItemFacade) stack.getItem();
IBlockState state = itemFacade.getTextureBlockState( stack );
ItemStack textureItem = itemFacade.getTextureItem( stack );
return new FacadeWithBlockBakedModel( baseModel, state, format );
return new FacadeWithBlockBakedModel( baseModel, state, textureItem, format );
}
};
}
@@ -32,6 +32,7 @@ import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
import net.minecraft.client.renderer.block.model.ItemOverrideList;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.vertex.VertexFormat;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import appeng.client.render.cablebus.CubeBuilder;
@@ -53,10 +54,13 @@ public class FacadeWithBlockBakedModel implements IBakedModel
private final VertexFormat format;
public FacadeWithBlockBakedModel( IBakedModel baseModel, IBlockState blockState, VertexFormat format )
private final ItemStack textureItem;
public FacadeWithBlockBakedModel( IBakedModel baseModel, IBlockState blockState, ItemStack textureItem, VertexFormat format )
{
this.baseModel = baseModel;
this.blockState = blockState;
this.textureItem = textureItem;
this.textureModel = Minecraft.getMinecraft().getBlockRendererDispatcher().getModelForState( blockState );
this.format = format;
}
@@ -69,10 +73,14 @@ public class FacadeWithBlockBakedModel implements IBakedModel
{
List<BakedQuad> quads = new ArrayList<>( 1 );
CubeBuilder builder = new CubeBuilder( format, quads );
TextureAtlasSprite sprite = FacadeBuilder.getSprite( textureModel, blockState, side, rand );
if ( sprite != null )
FacadeBuilder.TextureAtlasAndTint sprite = FacadeBuilder.getSprite( textureModel, blockState, side, rand );
if ( sprite != null && sprite.getSprite() != null )
{
builder.setTexture( sprite );
if( sprite.getTint() != -1 )
{
builder.setColor( Minecraft.getMinecraft().getItemColors().getColorFromItemstack( textureItem, sprite.getTint() ) );
}
builder.setTexture( sprite.getSprite() );
builder.setDrawFaces( EnumSet.of( EnumFacing.NORTH ) );
builder.addCube( 0, 0, 0, 16, 16, 16 );
return quads;
@@ -46,16 +46,16 @@ public class StackSizeRenderer
{
if( is != null )
{
final float scaleFactor = AEConfig.instance.useTerminalUseLargeFont() ? 0.85f : 0.5f;
final float scaleFactor = AEConfig.instance().useTerminalUseLargeFont() ? 0.85f : 0.5f;
final float inverseScaleFactor = 1.0f / scaleFactor;
final int offset = AEConfig.instance.useTerminalUseLargeFont() ? 0 : -1;
final int offset = AEConfig.instance().useTerminalUseLargeFont() ? 0 : -1;
final boolean unicodeFlag = fontRenderer.getUnicodeFlag();
fontRenderer.setUnicodeFlag( false );
if( is.stackSize == 0 )
{
final String craftLabelText = AEConfig.instance.useTerminalUseLargeFont() ? GuiText.LargeFontCraft.getLocal() : GuiText.SmallFontCraft.getLocal();
final String craftLabelText = AEConfig.instance().useTerminalUseLargeFont() ? GuiText.LargeFontCraft.getLocal() : GuiText.SmallFontCraft.getLocal();
GlStateManager.disableLighting();
GlStateManager.disableDepth();
GlStateManager.disableBlend();
@@ -95,7 +95,7 @@ public class StackSizeRenderer
private String getToBeRenderedStackSize( final long originalSize )
{
if( AEConfig.instance.useTerminalUseLargeFont() )
if( AEConfig.instance().useTerminalUseLargeFont() )
{
return SLIM_CONVERTER.toSlimReadableForm( originalSize );
}
@@ -22,6 +22,7 @@ package appeng.client.render.cablebus;
import java.util.Collection;
import java.util.Collections;
import java.util.EnumSet;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -35,7 +36,6 @@ import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.BlockRendererDispatcher;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.renderer.block.model.IBakedModel;
import net.minecraft.client.renderer.color.BlockColors;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.vertex.VertexFormat;
import net.minecraft.util.BlockRenderLayer;
@@ -59,13 +59,14 @@ public class FacadeBuilder
private static final ResourceLocation TEXTURE_FACADE = new ResourceLocation( AppEng.MOD_ID, "parts/cable_anchor" );
private final BlockColors blockColors = Minecraft.getMinecraft().getBlockColors();
private final VertexFormat format;
private final TextureAtlasSprite facadeTexture;
private final BlockRendererDispatcher blockRendererDispatcher = Minecraft.getMinecraft().getBlockRendererDispatcher();
private static final Set<ResourceLocation> warnedFor = new HashSet<>();
FacadeBuilder( VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter )
{
this.format = format;
@@ -83,7 +84,7 @@ public class FacadeBuilder
CubeBuilder builder = new CubeBuilder( format, quads );
facadesState.forEach( ( side, textureItem ) ->
facadesState.forEach( ( side, state ) ->
{
AxisAlignedBB facadeBox = getFacadeBox( side, thinFacades );
AEAxisAlignedBB cutOutBox = getCutOutBox( facadeBox, partBoxes );
@@ -100,10 +101,10 @@ public class FacadeBuilder
} );
}
public static TextureAtlasSprite getSprite( IBakedModel blockModel, IBlockState state, EnumFacing facing, long rand)
public static TextureAtlasAndTint getSprite( IBakedModel blockModel, IBlockState state, EnumFacing facing, long rand)
{
TextureAtlasSprite firstFound = null;
TextureAtlasAndTint firstFound = null;
BlockRenderLayer orgLayer = MinecraftForgeClient.getRenderLayer();
try
@@ -116,27 +117,52 @@ public class FacadeBuilder
for( BakedQuad bakedQuad : blockModel.getQuads( state, facing, rand ) )
{
return bakedQuad.getSprite();
return new TextureAtlasAndTint( bakedQuad );
}
for( BakedQuad bakedQuad : blockModel.getQuads( state, null, rand ) )
{
if( firstFound == null )
{
firstFound = bakedQuad.getSprite();
firstFound = new TextureAtlasAndTint( bakedQuad );
}
if( bakedQuad.getFace() == facing )
{
return bakedQuad.getSprite();
return new TextureAtlasAndTint( bakedQuad );
}
}
}
}
catch( Exception e )
{
if( warnedFor.add( state.getBlock().getRegistryName() ) )
{
AELog.warn( "Unable to get facade sprite for blockstate %s. Supressing further warnings for this block.", state );
AELog.debug( e );
}
}
finally
{
ForgeHooksClient.setRenderLayer( orgLayer );
}
// Fall back to the particle texture, if we havent found anything else so far.
if( firstFound == null )
{
try
{
return new TextureAtlasAndTint( blockModel.getParticleTexture(), -1 );
}
catch( Exception e )
{
if( warnedFor.add( state.getBlock().getRegistryName() ) )
{
AELog.warn( "Unable to get facade sprite particle texture fallback for blockstate %s. Supressing further warnings for this block.", state );
AELog.debug( e );
}
}
}
return firstFound;
}
@@ -148,6 +174,9 @@ public class FacadeBuilder
builder.setDrawFaces( EnumSet.allOf( EnumFacing.class ) );
// Reset to no color multiplicator
builder.setColorRGB( 0xFFFFFF );
// We only render the stilt if we don't intersect with any part directly, and if there's no part on our side
if( renderStilt && busBounds == null && layer == BlockRenderLayer.CUTOUT )
{
@@ -186,36 +215,42 @@ public class FacadeBuilder
IBakedModel blockModel = blockRendererDispatcher.getModelForState( blockState );
int color = 0xffffff;
try
{
blockColors.getColor( blockState );
}
catch( final Throwable ignored )
{
}
final int color;
if( translucent )
{
color &= 0xFFFFFF;
color |= 0x4C000000;
builder.setColor( color );
color = 0x4CFFFFFF;
}
else
{
builder.setColorRGB( color );
color = 0xFFFFFFFF;
}
// TODO: Cache this
for( EnumFacing facing : facadeState.getOpenFaces() )
{
TextureAtlasSprite sprite = getSprite( blockModel, blockState, facing, rand );
if( sprite != null )
TextureAtlasAndTint spriteAndTint = getSprite( blockModel, blockState, facing, rand );
if( spriteAndTint != null && spriteAndTint.sprite != null )
{
builder.setTexture( facing, sprite );
// Use the tint color from the item stack here, which is based upon the assumption that the
// model used for the block will use the same meaning for tint indices as the item model does
if( spriteAndTint.tint != -1 )
{
int tintColor = facadeState.resolveTintColor( spriteAndTint.tint );
// Still apply the transparency color
tintColor &= 0xFFFFFF;
tintColor |= color & 0xFF000000;
builder.setColor( tintColor );
}
else
{
builder.setColor( color );
}
builder.setTexture( facing, spriteAndTint.sprite );
}
else
{
builder.setColor( color );
builder.setTexture( facing, facadeTexture );
}
}
@@ -431,4 +466,34 @@ public class FacadeBuilder
throw new IllegalArgumentException( "Unsupported face: " + side );
}
}
public static class TextureAtlasAndTint
{
private final TextureAtlasSprite sprite;
private final int tint;
private TextureAtlasAndTint( BakedQuad quad )
{
this.sprite = quad.getSprite();
this.tint = quad.getTintIndex();
}
private TextureAtlasAndTint( TextureAtlasSprite sprite, int tint )
{
this.sprite = sprite;
this.tint = tint;
}
public TextureAtlasSprite getSprite()
{
return sprite;
}
public int getTint()
{
return tint;
}
}
}
@@ -4,6 +4,8 @@ package appeng.client.render.cablebus;
import java.util.EnumSet;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
@@ -19,10 +21,14 @@ public class FacadeRenderState
// Which faces of the cube should be rendered for this particular facade
private final EnumSet<EnumFacing> openFaces;
public FacadeRenderState( IBlockState sourceBlock, EnumSet<EnumFacing> openFaces )
// For resolving the tint indices of a facade
private final ItemStack textureItem;
public FacadeRenderState( IBlockState sourceBlock, EnumSet<EnumFacing> openFaces, ItemStack textureItem )
{
this.sourceBlock = sourceBlock;
this.openFaces = openFaces;
this.textureItem = textureItem;
}
public IBlockState getSourceBlock()
@@ -35,4 +41,9 @@ public class FacadeRenderState
return openFaces;
}
public int resolveTintColor( int tintIndex )
{
return Minecraft.getMinecraft().getItemColors().getColorFromItemstack( textureItem, tintIndex );
}
}
@@ -19,6 +19,7 @@
package appeng.client.render.tesr;
import net.minecraft.block.Block;
import net.minecraft.client.model.ModelChest;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
@@ -70,14 +71,8 @@ public class SkyChestTESR extends TileEntitySpecialRenderer<TileSkyChest>
}
else
{
if( te != null )
{
this.bindTexture( ( (BlockSkyChest) te.getBlockType() ).type == SkyChestType.STONE ? TEXTURE_STONE : TEXTURE_BLOCK );
}
else
{
this.bindTexture( TEXTURE_BLOCK );
}
SkyChestType chestType = getChestType( te );
this.bindTexture( chestType == SkyChestType.STONE ? TEXTURE_STONE : TEXTURE_BLOCK );
}
GlStateManager.pushMatrix();
@@ -128,4 +123,20 @@ public class SkyChestTESR extends TileEntitySpecialRenderer<TileSkyChest>
}
}
// Defensively determine the sky chest type
private static SkyChestType getChestType( TileSkyChest te )
{
if( te == null )
{
return SkyChestType.BLOCK;
}
Block blockType = te.getBlockType();
if( blockType instanceof BlockSkyChest )
{
return ( (BlockSkyChest) blockType ).type;
}
return SkyChestType.BLOCK;
}
}
@@ -227,7 +227,7 @@ public abstract class AEBaseContainer extends Container
final ItemStack a = stack == null ? null : stack.getItemStack();
final ItemStack b = this.clientRequestedTargetItem == null ? null : this.clientRequestedTargetItem.getItemStack();
if( Platform.isSameItemPrecise( a, b ) )
if( Platform.itemComparisons().isSameItem( a, b ) )
{
return;
}
@@ -265,7 +265,7 @@ public abstract class AEBaseContainer extends Container
{
final PacketPartialItem ppi = new PacketPartialItem( page, miniPackets.size(), packet );
page++;
NetworkHandler.instance.sendToServer( ppi );
NetworkHandler.instance().sendToServer( ppi );
}
}
catch( final IOException e )
@@ -438,13 +438,11 @@ public abstract class AEBaseContainer extends Container
if( Platform.isServer() )
{
for( final Object crafter : this.listeners )
for( final IContainerListener listener : this.listeners )
{
final IContainerListener IContainerListener = (IContainerListener) crafter;
for( final SyncData sd : this.syncData.values() )
{
sd.tick( IContainerListener );
sd.tick( listener );
}
}
}
@@ -545,7 +543,7 @@ public abstract class AEBaseContainer extends Container
if( !( cs.isPlayerSide() ) && cs instanceof SlotFake )
{
if( Platform.isSameItemPrecise( destination, tis ) )
if( Platform.itemComparisons().isSameItem( destination, tis ) )
{
break;
}
@@ -577,7 +575,7 @@ public abstract class AEBaseContainer extends Container
{
final ItemStack t = d.getStack();
if( Platform.isSameItemPrecise( tis, t ) ) // t.isItemEqual(tis))
if( Platform.itemComparisons().isSameItem( tis, t ) ) // t.isItemEqual(tis))
{
int maxSize = t.getMaxStackSize();
if( maxSize > d.getSlotStackLimit() )
@@ -629,7 +627,7 @@ public abstract class AEBaseContainer extends Container
{
final ItemStack t = d.getStack();
if( Platform.isSameItemPrecise( t, tis ) )
if( Platform.itemComparisons().isSameItem( t, tis ) )
{
int maxSize = t.getMaxStackSize();
if( d.getSlotStackLimit() < maxSize )
@@ -795,7 +793,7 @@ public abstract class AEBaseContainer extends Container
{
if( hand == null )
{
is.stackSize--;
is.stackSize = Math.max( 1, is.stackSize - 1 );
}
else if( hand.isItemEqual( is ) )
{
@@ -929,7 +927,7 @@ public abstract class AEBaseContainer extends Container
{
liftQty = 0;
}
if( !Platform.isSameItemPrecise( slotItem.getItemStack(), item ) )
if( !Platform.itemComparisons().isSameItem( slotItem.getItemStack(), item ) )
{
liftQty = 0;
}
@@ -1105,7 +1103,7 @@ public abstract class AEBaseContainer extends Container
{
try
{
NetworkHandler.instance.sendTo( new PacketInventoryAction( InventoryAction.UPDATE_HAND, 0, AEItemStack.create( p.inventory.getItemStack() ) ), p );
NetworkHandler.instance().sendTo( new PacketInventoryAction( InventoryAction.UPDATE_HAND, 0, AEItemStack.create( p.inventory.getItemStack() ) ), p );
}
catch( final IOException e )
{
@@ -1174,7 +1172,7 @@ public abstract class AEBaseContainer extends Container
{
try
{
NetworkHandler.instance.sendTo( new PacketValueConfig( "CustomName", this.getCustomName() ), (EntityPlayerMP) this.getInventoryPlayer().player );
NetworkHandler.instance().sendTo( new PacketValueConfig( "CustomName", this.getCustomName() ), (EntityPlayerMP) this.getInventoryPlayer().player );
}
catch( final IOException e )
{
@@ -88,7 +88,7 @@ public class SyncData
{
if( o instanceof EntityPlayerMP )
{
NetworkHandler.instance.sendTo( new PacketValueConfig( "SyncDat." + this.channel, (String) val ), (EntityPlayerMP) o );
NetworkHandler.instance().sendTo( new PacketValueConfig( "SyncDat." + this.channel, (String) val ), (EntityPlayerMP) o );
}
}
else if( this.field.getType().isEnum() )
@@ -97,7 +97,10 @@ public class SyncData
}
else if( val instanceof Long || val.getClass() == long.class )
{
NetworkHandler.instance.sendTo( new PacketProgressBar( this.channel, (Long) val ), (EntityPlayerMP) o );
if( o instanceof EntityPlayerMP )
{
NetworkHandler.instance().sendTo( new PacketProgressBar( this.channel, (Long) val ), (EntityPlayerMP) o );
}
}
else if( val instanceof Boolean || val.getClass() == boolean.class )
{
@@ -26,6 +26,7 @@ import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.IContainerListener;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.util.text.ITextComponent;
@@ -151,22 +152,24 @@ public class ContainerCellWorkbench extends ContainerUpgradeable
this.setValidContainer( false );
}
for( final Object crafter : this.listeners )
for( final IContainerListener listener : this.listeners )
{
final IContainerListener IContainerListener = (IContainerListener) crafter;
if( this.prevStack != is )
{
// if the bars changed an item was probably made, so just send shit!
for( final Object s : this.inventorySlots )
for( final Slot s : this.inventorySlots )
{
if( s instanceof OptionalSlotRestrictedInput )
{
final OptionalSlotRestrictedInput sri = (OptionalSlotRestrictedInput) s;
IContainerListener.sendSlotContents( this, sri.slotNumber, sri.getStack() );
listener.sendSlotContents( this, sri.slotNumber, sri.getStack() );
}
}
( (EntityPlayerMP) IContainerListener ).isChangingQuantityOnly = false;
if( listener instanceof EntityPlayerMP )
{
( (EntityPlayerMP) listener ).isChangingQuantityOnly = false;
}
}
}
@@ -263,11 +263,11 @@ public class ContainerCraftConfirm extends AEBaseContainer
{
if( g instanceof EntityPlayer )
{
NetworkHandler.instance.sendTo( a, (EntityPlayerMP) g );
NetworkHandler.instance.sendTo( b, (EntityPlayerMP) g );
NetworkHandler.instance().sendTo( a, (EntityPlayerMP) g );
NetworkHandler.instance().sendTo( b, (EntityPlayerMP) g );
if( c != null )
{
NetworkHandler.instance.sendTo( c, (EntityPlayerMP) g );
NetworkHandler.instance().sendTo( c, (EntityPlayerMP) g );
}
}
}
@@ -352,7 +352,7 @@ public class ContainerCraftConfirm extends AEBaseContainer
this.setAutoStart( false );
if( g != null && originalGui != null && this.getOpenContext() != null )
{
NetworkHandler.instance.sendTo( new PacketSwitchGuis( originalGui ), (EntityPlayerMP) this.getInventoryPlayer().player );
NetworkHandler.instance().sendTo( new PacketSwitchGuis( originalGui ), (EntityPlayerMP) this.getInventoryPlayer().player );
final TileEntity te = this.getOpenContext().getTile();
Platform.openGUI( this.getInventoryPlayer().player, te, this.getOpenContext().getSide(), originalGui );
@@ -117,7 +117,7 @@ public class ContainerCraftingCPU extends AEBaseContainer implements IMEMonitorH
{
try
{
NetworkHandler.instance.sendTo( new PacketValueConfig( "CraftingStatus", "Clear" ), (EntityPlayerMP) g );
NetworkHandler.instance().sendTo( new PacketValueConfig( "CraftingStatus", "Clear" ), (EntityPlayerMP) g );
}
catch( final IOException e )
{
@@ -208,17 +208,17 @@ public class ContainerCraftingCPU extends AEBaseContainer implements IMEMonitorH
{
if( !a.isEmpty() )
{
NetworkHandler.instance.sendTo( a, (EntityPlayerMP) g );
NetworkHandler.instance().sendTo( a, (EntityPlayerMP) g );
}
if( !b.isEmpty() )
{
NetworkHandler.instance.sendTo( b, (EntityPlayerMP) g );
NetworkHandler.instance().sendTo( b, (EntityPlayerMP) g );
}
if( !c.isEmpty() )
{
NetworkHandler.instance.sendTo( c, (EntityPlayerMP) g );
NetworkHandler.instance().sendTo( c, (EntityPlayerMP) g );
}
}
}
@@ -115,7 +115,7 @@ public class ContainerInscriber extends ContainerUpgradeable implements IProgres
{
for( final ItemStack optional : AEApi.instance().registries().inscriber().getOptionals() )
{
if( Platform.isSameItemPrecise( optional, is ) )
if( Platform.itemComparisons().isSameItem( optional, is ) )
{
return false;
}
@@ -126,18 +126,18 @@ public class ContainerInscriber extends ContainerUpgradeable implements IProgres
for( final IInscriberRecipe recipe : AEApi.instance().registries().inscriber().getRecipes() )
{
final boolean matchA = ( top == null && !recipe.getTopOptional().isPresent() ) || ( Platform.isSameItemPrecise( top, recipe.getTopOptional().orElse( null ) ) ) && // and...
( bot == null && !recipe.getBottomOptional().isPresent() ) | ( Platform.isSameItemPrecise( bot, recipe.getBottomOptional().orElse( null ) ) );
final boolean matchA = ( top == null && !recipe.getTopOptional().isPresent() ) || ( Platform.itemComparisons().isSameItem( top, recipe.getTopOptional().orElse( null ) ) ) && // and...
( bot == null && !recipe.getBottomOptional().isPresent() ) | ( Platform.itemComparisons().isSameItem( bot, recipe.getBottomOptional().orElse( null ) ) );
final boolean matchB = ( bot == null && !recipe.getTopOptional().isPresent() ) || ( Platform.isSameItemPrecise( bot, recipe.getTopOptional().orElse( null ) ) ) && // and...
( top == null && !recipe.getBottomOptional().isPresent() ) | ( Platform.isSameItemPrecise( top, recipe.getBottomOptional().orElse( null ) ) );
final boolean matchB = ( bot == null && !recipe.getTopOptional().isPresent() ) || ( Platform.itemComparisons().isSameItem( bot, recipe.getTopOptional().orElse( null ) ) ) && // and...
( top == null && !recipe.getBottomOptional().isPresent() ) | ( Platform.itemComparisons().isSameItem( top, recipe.getBottomOptional().orElse( null ) ) );
if( matchA || matchB )
{
matches = true;
for( final ItemStack option : recipe.getInputs() )
{
if( Platform.isSameItemPrecise( is, option ) )
if( Platform.itemComparisons().isSameItem( is, option ) )
{
found = true;
}
@@ -174,13 +174,13 @@ public class ContainerInscriber extends ContainerUpgradeable implements IProgres
boolean isValid = false;
for( final IInscriberRecipe recipe : AEApi.instance().registries().inscriber().getRecipes() )
{
if( Platform.isSameItemPrecise( recipe.getTopOptional().orElse( null ), otherSlot ) )
if( Platform.itemComparisons().isSameItem( recipe.getTopOptional().orElse( null ), otherSlot ) )
{
isValid = Platform.isSameItemPrecise( is, recipe.getBottomOptional().orElse( null ) );
isValid = Platform.itemComparisons().isSameItem( is, recipe.getBottomOptional().orElse( null ) );
}
else if( Platform.isSameItemPrecise( recipe.getBottomOptional().orElse( null ), otherSlot ) )
else if( Platform.itemComparisons().isSameItem( recipe.getBottomOptional().orElse( null ), otherSlot ) )
{
isValid = Platform.isSameItemPrecise( is, recipe.getTopOptional().orElse( null ) );
isValid = Platform.itemComparisons().isSameItem( is, recipe.getTopOptional().orElse( null ) );
}
if( isValid )
@@ -186,7 +186,7 @@ public final class ContainerInterfaceTerminal extends AEBaseContainer
{
try
{
NetworkHandler.instance.sendTo( new PacketCompressedNBT( this.data ), (EntityPlayerMP) this.getPlayerInv().player );
NetworkHandler.instance().sendTo( new PacketCompressedNBT( this.data ), (EntityPlayerMP) this.getPlayerInv().player );
}
catch( final IOException e )
{
@@ -186,15 +186,18 @@ public class ContainerMEMonitorable extends AEBaseContainer implements IConfigMa
if( sideLocal != sideRemote )
{
this.clientCM.putSetting( set, sideLocal );
for( final Object crafter : this.listeners )
for( final IContainerListener crafter : this.listeners )
{
try
if( crafter instanceof EntityPlayerMP )
{
NetworkHandler.instance.sendTo( new PacketValueConfig( set.name(), sideLocal.name() ), (EntityPlayerMP) crafter );
}
catch( final IOException e )
{
AELog.debug( e );
try
{
NetworkHandler.instance().sendTo( new PacketValueConfig( set.name(), sideLocal.name() ), (EntityPlayerMP) crafter );
}
catch( final IOException e )
{
AELog.debug( e );
}
}
}
}
@@ -230,7 +233,7 @@ public class ContainerMEMonitorable extends AEBaseContainer implements IConfigMa
{
if( c instanceof EntityPlayer )
{
NetworkHandler.instance.sendTo( piu, (EntityPlayerMP) c );
NetworkHandler.instance().sendTo( piu, (EntityPlayerMP) c );
}
}
}
@@ -258,6 +261,7 @@ public class ContainerMEMonitorable extends AEBaseContainer implements IConfigMa
super.detectAndSendChanges();
}
}
protected void updatePowerStatus()
@@ -325,14 +329,14 @@ public class ContainerMEMonitorable extends AEBaseContainer implements IConfigMa
}
catch( final BufferOverflowException boe )
{
NetworkHandler.instance.sendTo( piu, (EntityPlayerMP) c );
NetworkHandler.instance().sendTo( piu, (EntityPlayerMP) c );
piu = new PacketMEInventoryUpdate();
piu.appendItem( send );
}
}
NetworkHandler.instance.sendTo( piu, (EntityPlayerMP) c );
NetworkHandler.instance().sendTo( piu, (EntityPlayerMP) c );
}
catch( final IOException e )
{
@@ -340,7 +344,7 @@ public class ContainerMEMonitorable extends AEBaseContainer implements IConfigMa
}
}
}
@Override
public void removeListener( final IContainerListener c )
{
@@ -67,7 +67,7 @@ public class ContainerMEPortableCell extends ContainerMEMonitorable
{
if( currentItem != null )
{
if( Platform.isSameItem( this.civ.getItemStack(), currentItem ) )
if( Platform.itemComparisons().isEqualItem( this.civ.getItemStack(), currentItem ) )
{
this.getPlayerInv().setInventorySlotContents( this.getPlayerInv().currentItem, this.civ.getItemStack() );
}
@@ -137,7 +137,7 @@ public class ContainerNetworkStatus extends AEBaseContainer
{
if( c instanceof EntityPlayer )
{
NetworkHandler.instance.sendTo( piu, (EntityPlayerMP) c );
NetworkHandler.instance().sendTo( piu, (EntityPlayerMP) c );
}
}
}
@@ -72,7 +72,7 @@ public class ContainerNetworkTool extends AEBaseContainer
{
if( currentItem != null )
{
if( Platform.isSameItem( this.toolInv.getItemStack(), currentItem ) )
if( Platform.itemComparisons().isEqualItem( this.toolInv.getItemStack(), currentItem ) )
{
this.getPlayerInv().setInventorySlotContents( this.getPlayerInv().currentItem, this.toolInv.getItemStack() );
}
@@ -200,7 +200,7 @@ public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEA
if( output != null && !this.isPattern( output ) )
{
return;
}// if nothing is there we should snag a new pattern.
} // if nothing is there we should snag a new pattern.
else if( output == null )
{
output = this.patternSlotIN.getStack();
@@ -414,7 +414,7 @@ public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEA
final IRecipe rr = Platform.findMatchingRecipe( real, p.worldObj );
if( rr == r && Platform.isSameItemPrecise( rr.getCraftingResult( real ), is ) )
if( rr == r && Platform.itemComparisons().isSameItem( rr.getCraftingResult( real ), is ) )
{
final SlotCrafting sc = new SlotCrafting( p, real, this.cOut, 0, 0, 0 );
sc.onPickupFromSlot( p, is );
@@ -483,19 +483,19 @@ public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEA
{
if( s == this.patternSlotOUT && Platform.isServer() )
{
for( final Object crafter : this.listeners )
for( final IContainerListener listener : this.listeners )
{
final IContainerListener IContainerListener = (IContainerListener) crafter;
for( final Object g : this.inventorySlots )
for( final Slot slot : this.inventorySlots )
{
if( g instanceof OptionalSlotFake || g instanceof SlotFakeCraftingMatrix )
if( slot instanceof OptionalSlotFake || slot instanceof SlotFakeCraftingMatrix )
{
final Slot sri = (Slot) g;
IContainerListener.sendSlotContents( this, sri.slotNumber, sri.getStack() );
listener.sendSlotContents( this, slot.slotNumber, slot.getStack() );
}
}
( (EntityPlayerMP) IContainerListener ).isChangingQuantityOnly = false;
if( listener instanceof EntityPlayerMP )
{
( (EntityPlayerMP) listener ).isChangingQuantityOnly = false;
}
}
this.detectAndSendChanges();
}
@@ -79,7 +79,7 @@ public class ContainerQuartzKnife extends AEBaseContainer implements IAEAppEngIn
{
if( currentItem != null )
{
if( Platform.isSameItem( this.toolInv.getItemStack(), currentItem ) )
if( Platform.itemComparisons().isEqualItem( this.toolInv.getItemStack(), currentItem ) )
{
this.getPlayerInv().setInventorySlotContents( this.getPlayerInv().currentItem, this.toolInv.getItemStack() );
}
@@ -168,11 +168,10 @@ public class ContainerSecurityStation extends ContainerMEMonitorable implements
this.wirelessOut.putStack( term );
// update the two slots in question...
for( final Object crafter : this.listeners )
for( final IContainerListener listener : this.listeners )
{
final IContainerListener IContainerListener = (IContainerListener) crafter;
IContainerListener.sendSlotContents( this, this.wirelessIn.slotNumber, this.wirelessIn.getStack() );
IContainerListener.sendSlotContents( this, this.wirelessOut.slotNumber, this.wirelessOut.getStack() );
listener.sendSlotContents( this, this.wirelessIn.slotNumber, this.wirelessIn.getStack() );
listener.sendSlotContents( this, this.wirelessOut.slotNumber, this.wirelessOut.getStack() );
}
}
}
@@ -235,7 +235,7 @@ public class ContainerUpgradeable extends AEBaseContainer implements IOptionalSl
{
if( currentItem != null )
{
if( Platform.isSameItem( this.tbInventory.getItemStack(), currentItem ) )
if( Platform.itemComparisons().isEqualItem( this.tbInventory.getItemStack(), currentItem ) )
{
this.getPlayerInv().setInventorySlotContents( this.tbSlot, this.tbInventory.getItemStack() );
}
@@ -53,8 +53,8 @@ public class ContainerWireless extends AEBaseContainer
{
final int boosters = this.boosterSlot.getStack() == null ? 0 : this.boosterSlot.getStack().stackSize;
this.setRange( (long) ( 10 * AEConfig.instance.wireless_getMaxRange( boosters ) ) );
this.setDrain( (long) ( 100 * AEConfig.instance.wireless_getPowerDrain( boosters ) ) );
this.setRange( (long) ( 10 * AEConfig.instance().wireless_getMaxRange( boosters ) ) );
this.setDrain( (long) ( 100 * AEConfig.instance().wireless_getPowerDrain( boosters ) ) );
super.detectAndSendChanges();
}
@@ -54,7 +54,7 @@ public class ContainerWirelessTerm extends ContainerMEPortableCell
}
else
{
this.setPowerMultiplier( AEConfig.instance.wireless_getDrainRate( this.wirelessTerminalGUIObject.getRange() ) );
this.setPowerMultiplier( AEConfig.instance().wireless_getDrainRate( this.wirelessTerminalGUIObject.getRange() ) );
}
}
}
@@ -158,7 +158,7 @@ public class SlotCraftingTerm extends AppEngCraftingSlot
// update crafting matrix...
ItemStack is = this.getStack();
if( is != null && Platform.isSameItem( request, is ) )
if( is != null && Platform.itemComparisons().isEqualItem( request, is ) )
{
final ItemStack[] set = new ItemStack[this.getPattern().getSizeInventory()];
@@ -170,7 +170,7 @@ public class SlotRestrictedInput extends AppEngSlot
for( final ItemStack optional : AEApi.instance().registries().inscriber().getOptionals() )
{
if( Platform.isSameItemPrecise( optional, i ) )
if( Platform.itemComparisons().isSameItem( optional, i ) )
{
return true;
}
@@ -258,7 +258,7 @@ public class SlotRestrictedInput extends AppEngSlot
public static boolean isMetalIngot( final ItemStack i )
{
if( Platform.isSameItemPrecise( i, new ItemStack( Items.IRON_INGOT ) ) )
if( Platform.itemComparisons().isSameItem( i, new ItemStack( Items.IRON_INGOT ) ) )
{
return true;
}
@@ -267,7 +267,7 @@ public class SlotRestrictedInput extends AppEngSlot
{
for( final ItemStack ingot : OreDictionary.getOres( "ingot" + name ) )
{
if( Platform.isSameItemPrecise( i, ingot ) )
if( Platform.itemComparisons().isSameItem( i, ingot ) )
{
return true;
}
+335 -80
View File
@@ -24,11 +24,12 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.EnumSet;
import java.util.List;
import java.util.stream.Stream;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.config.Configuration;
import net.minecraftforge.common.config.Property;
import net.minecraftforge.fml.client.event.ConfigChangedEvent;
import net.minecraftforge.fml.common.FMLCommonHandler;
import net.minecraftforge.fml.common.ModContainer;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
@@ -52,72 +53,95 @@ import appeng.util.Platform;
public final class AEConfig extends Configuration implements IConfigurableObject, IConfigManagerHost
{
public static final double TUNNEL_POWER_LOSS = 0.05;
public static final String VERSION = "@version@";
public static final String CHANNEL = "@aechannel@";
public static final String PACKET_CHANNEL = "AE";
public static AEConfig instance;
public final IConfigManager settings = new ConfigManager( this );
public final EnumSet<AEFeature> featureFlags = EnumSet.noneOf( AEFeature.class );
public final int[] craftByStacks = { 1, 10, 100, 1000 };
public final int[] priorityByStacks = { 1, 10, 100, 1000 };
public final int[] levelByStacks = { 1, 10, 100, 1000 };
private final double WirelessHighWirelessCount = 64;
private final File configFile;
public int storageBiomeID = -1;
public int storageProviderID = -1;
public int formationPlaneEntityLimit = 128;
public float spawnChargedChance = 0.92f;
public int quartzOresPerCluster = 4;
public int quartzOresClusterAmount = 15;
public final int chargedChange = 4;
public int minMeteoriteDistance = 707;
public int minMeteoriteDistanceSq = this.minMeteoriteDistance * this.minMeteoriteDistance;
public double spatialPowerExponent = 1.35;
public double spatialPowerMultiplier = 1250.0;
public String[] grinderOres = {
// Vanilla Items
"Obsidian", "Ender", "EnderPearl", "Coal", "Iron", "Gold", "Charcoal", "NetherQuartz",
// Common Mod Ores
"Copper", "Tin", "Silver", "Lead", "Bronze",
// AE
"CertusQuartz", "Wheat", "Fluix",
// Other Mod Ores
"Brass", "Platinum", "Nickel", "Invar", "Aluminium", "Electrum", "Osmium", "Zinc" };
public double oreDoublePercentage = 90.0;
public boolean enableEffects = true;
public boolean useLargeFonts = false;
public boolean useColoredCraftingStatus;
public int wirelessTerminalBattery = 1600000;
public int entropyManipulatorBattery = 200000;
public int matterCannonBattery = 200000;
public int portableCellBattery = 20000;
public int colorApplicatorBattery = 20000;
public int chargedStaffBattery = 8000;
public boolean disableColoredCableRecipesInJEI = true;
public boolean updatable = false;
public double meteoriteClusterChance = 0.1;
public double meteoriteSpawnChance = 0.3;
public int[] meteoriteDimensionWhitelist = { 0 };
public int craftingCalculationTimePerTick = 5;
PowerUnits selectedPowerUnit = PowerUnits.AE;
private double WirelessBaseCost = 8;
private double WirelessCostMultiplier = 1;
private double WirelessTerminalDrainMultiplier = 1;
private double WirelessBaseRange = 16;
private double WirelessBoosterRangeMultiplier = 1;
private double WirelessBoosterExp = 1.5;
public AEConfig( final File configFile )
// Config instance
private static AEConfig instance;
// Default Grindstone ores
private static final String[] ORES_VANILLA = { "Obsidian", "Ender", "EnderPearl", "Coal", "Iron", "Gold", "Charcoal", "NetherQuartz" };
private static final String[] ORES_AE = { "CertusQuartz", "Wheat", "Fluix" };
private static final String[] ORES_COMMON = { "Copper", "Tin", "Silver", "Lead", "Bronze" };
private static final String[] ORES_MISC = { "Brass", "Platinum", "Nickel", "Invar", "Aluminium", "Electrum", "Osmium", "Zinc" };
// Default Energy Conversion Rates
private static final double DEFAULT_IC2_EXCHANGE = 2.0;
private static final double DEFAULT_RF_EXCHANGE = 0.5;
private final IConfigManager settings = new ConfigManager( this );
private final EnumSet<AEFeature> featureFlags = EnumSet.noneOf( AEFeature.class );
private final File configFile;
private boolean updatable = false;
// Misc
private boolean removeCrashingItemsOnLoad = false;
private int formationPlaneEntityLimit = 128;
private boolean enableEffects = true;
private boolean useLargeFonts = false;
private boolean useColoredCraftingStatus;
private boolean disableColoredCableRecipesInJEI = true;
private int craftingCalculationTimePerTick = 5;
private PowerUnits selectedPowerUnit = PowerUnits.AE;
// GUI Buttons
private final int[] craftByStacks = { 1, 10, 100, 1000 };
private final int[] priorityByStacks = { 1, 10, 100, 1000 };
private final int[] levelByStacks = { 1, 10, 100, 1000 };
// Spatial IO/Dimension
private int storageBiomeID = -1;
private int storageProviderID = -1;
private double spatialPowerExponent = 1.35;
private double spatialPowerMultiplier = 1250.0;
// Grindstone
private String[] grinderOres = Stream.of( ORES_VANILLA, ORES_AE, ORES_COMMON, ORES_MISC ).flatMap( Stream::of ).toArray( String[]::new );
private double oreDoublePercentage = 90.0;
// Batteries
private int wirelessTerminalBattery = 1600000;
private int entropyManipulatorBattery = 200000;
private int matterCannonBattery = 200000;
private int portableCellBattery = 20000;
private int colorApplicatorBattery = 20000;
private int chargedStaffBattery = 8000;
// Certus quartz
private float spawnChargedChance = 0.92f;
private int quartzOresPerCluster = 4;
private int quartzOresClusterAmount = 15;
private int chargedChange = 4;
// Meteors
private int minMeteoriteDistance = 707;
private int minMeteoriteDistanceSq = this.minMeteoriteDistance * this.minMeteoriteDistance;
private double meteoriteClusterChance = 0.1;
private int meteoriteMaximumSpawnHeight = 180;
private int[] meteoriteDimensionWhitelist = { 0 };
// Wireless
private double wirelessBaseCost = 8;
private double wirelessCostMultiplier = 1;
private double wirelessTerminalDrainMultiplier = 1;
private double wirelessBaseRange = 16;
private double wirelessBoosterRangeMultiplier = 1;
private double wirelessBoosterExp = 1.5;
private double wirelessHighWirelessCount = 64;
// Tunnels
public static final double TUNNEL_POWER_LOSS = 0.05;
private AEConfig( final File configFile )
{
super( configFile );
this.configFile = configFile;
FMLCommonHandler.instance().bus().register( this );
MinecraftForge.EVENT_BUS.register( this );
final double DEFAULT_IC2_EXCHANGE = 2.0;
PowerUnits.EU.conversionRatio = this.get( "PowerRatios", "IC2", DEFAULT_IC2_EXCHANGE ).getDouble( DEFAULT_IC2_EXCHANGE );
final double DEFAULT_RF_EXCHANGE = 0.5;
PowerUnits.RF.conversionRatio = this.get( "PowerRatios", "Forge Energy", DEFAULT_RF_EXCHANGE ).getDouble( DEFAULT_RF_EXCHANGE );
final double usageEffective = this.get( "PowerRatios", "UsageMultiplier", 1.0 ).getDouble( 1.0 );
@@ -126,6 +150,9 @@ public final class AEConfig extends Configuration implements IConfigurableObject
CondenserOutput.MATTER_BALLS.requiredPower = this.get( "Condenser", "MatterBalls", 256 ).getInt( 256 );
CondenserOutput.SINGULARITY.requiredPower = this.get( "Condenser", "Singularity", 256000 ).getInt( 256000 );
this.removeCrashingItemsOnLoad = this.get( "general", "removeCrashingItemsOnLoad", false,
"Will auto-remove items that crash when being loaded from storage. This will destroy those items instead of crashing the game!" ).getBoolean();
this.grinderOres = this.get( "GrindStone", "grinderOres", this.grinderOres ).getStringList();
this.oreDoublePercentage = this.get( "GrindStone", "oreDoublePercentage", this.oreDoublePercentage ).getDouble( this.oreDoublePercentage );
@@ -133,10 +160,12 @@ public final class AEConfig extends Configuration implements IConfigurableObject
this.settings.registerSetting( Settings.TERMINAL_STYLE, TerminalStyle.TALL );
this.settings.registerSetting( Settings.SEARCH_MODE, SearchBoxMode.AUTOSEARCH );
this.spawnChargedChance = (float) ( 1.0 - this.get( "worldGen", "spawnChargedChance", 1.0 - this.spawnChargedChance ).getDouble( 1.0 - this.spawnChargedChance ) );
this.spawnChargedChance = (float) ( 1.0 - this.get( "worldGen", "spawnChargedChance", 1.0 - this.spawnChargedChance ).getDouble(
1.0 - this.spawnChargedChance ) );
this.minMeteoriteDistance = this.get( "worldGen", "minMeteoriteDistance", this.minMeteoriteDistance ).getInt( this.minMeteoriteDistance );
this.meteoriteClusterChance = this.get( "worldGen", "meteoriteClusterChance", this.meteoriteClusterChance ).getDouble( this.meteoriteClusterChance );
this.meteoriteSpawnChance = this.get( "worldGen", "meteoriteSpawnChance", this.meteoriteSpawnChance ).getDouble( this.meteoriteSpawnChance );
this.meteoriteMaximumSpawnHeight = this.get( "worldGen", "meteoriteMaximumSpawnHeight", this.meteoriteMaximumSpawnHeight ).getInt(
this.meteoriteMaximumSpawnHeight );
this.meteoriteDimensionWhitelist = this.get( "worldGen", "meteoriteDimensionWhitelist", this.meteoriteDimensionWhitelist ).getIntList();
this.quartzOresPerCluster = this.get( "worldGen", "quartzOresPerCluster", this.quartzOresPerCluster ).getInt( this.quartzOresPerCluster );
@@ -144,16 +173,20 @@ public final class AEConfig extends Configuration implements IConfigurableObject
this.minMeteoriteDistanceSq = this.minMeteoriteDistance * this.minMeteoriteDistance;
this.addCustomCategoryComment( "wireless", "Range= WirelessBaseRange + WirelessBoosterRangeMultiplier * Math.pow( boosters, WirelessBoosterExp )\nPowerDrain= WirelessBaseCost + WirelessCostMultiplier * Math.pow( boosters, 1 + boosters / WirelessHighWirelessCount )" );
this.addCustomCategoryComment( "wireless",
"Range= wirelessBaseRange + wirelessBoosterRangeMultiplier * Math.pow( boosters, wirelessBoosterExp )\nPowerDrain= wirelessBaseCost + wirelessCostMultiplier * Math.pow( boosters, 1 + boosters / wirelessHighWirelessCount )" );
this.WirelessBaseCost = this.get( "wireless", "WirelessBaseCost", this.WirelessBaseCost ).getDouble( this.WirelessBaseCost );
this.WirelessCostMultiplier = this.get( "wireless", "WirelessCostMultiplier", this.WirelessCostMultiplier ).getDouble( this.WirelessCostMultiplier );
this.WirelessBaseRange = this.get( "wireless", "WirelessBaseRange", this.WirelessBaseRange ).getDouble( this.WirelessBaseRange );
this.WirelessBoosterRangeMultiplier = this.get( "wireless", "WirelessBoosterRangeMultiplier", this.WirelessBoosterRangeMultiplier ).getDouble( this.WirelessBoosterRangeMultiplier );
this.WirelessBoosterExp = this.get( "wireless", "WirelessBoosterExp", this.WirelessBoosterExp ).getDouble( this.WirelessBoosterExp );
this.WirelessTerminalDrainMultiplier = this.get( "wireless", "WirelessTerminalDrainMultiplier", this.WirelessTerminalDrainMultiplier ).getDouble( this.WirelessTerminalDrainMultiplier );
this.wirelessBaseCost = this.get( "wireless", "wirelessBaseCost", this.wirelessBaseCost ).getDouble( this.wirelessBaseCost );
this.wirelessCostMultiplier = this.get( "wireless", "wirelessCostMultiplier", this.wirelessCostMultiplier ).getDouble( this.wirelessCostMultiplier );
this.wirelessBaseRange = this.get( "wireless", "wirelessBaseRange", this.wirelessBaseRange ).getDouble( this.wirelessBaseRange );
this.wirelessBoosterRangeMultiplier = this.get( "wireless", "wirelessBoosterRangeMultiplier", this.wirelessBoosterRangeMultiplier ).getDouble(
this.wirelessBoosterRangeMultiplier );
this.wirelessBoosterExp = this.get( "wireless", "wirelessBoosterExp", this.wirelessBoosterExp ).getDouble( this.wirelessBoosterExp );
this.wirelessTerminalDrainMultiplier = this.get( "wireless", "wirelessTerminalDrainMultiplier", this.wirelessTerminalDrainMultiplier ).getDouble(
this.wirelessTerminalDrainMultiplier );
this.formationPlaneEntityLimit = this.get( "automation", "formationPlaneEntityLimit", this.formationPlaneEntityLimit ).getInt( this.formationPlaneEntityLimit );
this.formationPlaneEntityLimit = this.get( "automation", "formationPlaneEntityLimit", this.formationPlaneEntityLimit ).getInt(
this.formationPlaneEntityLimit );
this.wirelessTerminalBattery = this.get( "battery", "wirelessTerminal", this.wirelessTerminalBattery ).getInt( this.wirelessTerminalBattery );
this.chargedStaffBattery = this.get( "battery", "chargedStaff", this.chargedStaffBattery ).getInt( this.chargedStaffBattery );
@@ -168,7 +201,7 @@ public final class AEConfig extends Configuration implements IConfigurableObject
{
if( feature.isVisible() )
{
if( this.get( "Features." + feature.category, feature.name(), feature.defaultValue ).getBoolean( feature.defaultValue ) )
if( this.get( "Features." + feature.category(), feature.key(), feature.isEnabled() ).getBoolean( feature.isEnabled() ) )
{
this.featureFlags.add( feature );
}
@@ -185,13 +218,14 @@ public final class AEConfig extends Configuration implements IConfigurableObject
final List<String> version = Arrays.asList( "59.0.0", "59.0.1", "59.0.2" );
if( version.contains( imb.getVersion() ) )
{
this.featureFlags.remove( AEFeature.AlphaPass );
this.featureFlags.remove( AEFeature.ALPHA_PASS );
}
}
try
{
this.selectedPowerUnit = PowerUnits.valueOf( this.get( "Client", "PowerUnit", this.selectedPowerUnit.name(), this.getListComment( this.selectedPowerUnit ) ).getString() );
this.selectedPowerUnit = PowerUnits.valueOf(
this.get( "Client", "PowerUnit", this.selectedPowerUnit.name(), this.getListComment( this.selectedPowerUnit ) ).getString() );
}
catch( final Throwable t )
{
@@ -203,22 +237,34 @@ public final class AEConfig extends Configuration implements IConfigurableObject
tr.Load( this );
}
if( this.isFeatureEnabled( AEFeature.SpatialIO ) )
if( this.isFeatureEnabled( AEFeature.SPATIAL_IO ) )
{
this.storageBiomeID = this.get( "spatialio", "storageBiomeID", this.storageBiomeID ).getInt( this.storageBiomeID );
this.storageProviderID = this.get( "spatialio", "storageProviderID", this.storageProviderID ).getInt( this.storageProviderID );
this.spatialPowerMultiplier = this.get( "spatialio", "spatialPowerMultiplier", this.spatialPowerMultiplier ).getDouble( this.spatialPowerMultiplier );
this.spatialPowerMultiplier = this.get( "spatialio", "spatialPowerMultiplier", this.spatialPowerMultiplier ).getDouble(
this.spatialPowerMultiplier );
this.spatialPowerExponent = this.get( "spatialio", "spatialPowerExponent", this.spatialPowerExponent ).getDouble( this.spatialPowerExponent );
}
if( this.isFeatureEnabled( AEFeature.CraftingCPU ) )
if( this.isFeatureEnabled( AEFeature.CRAFTING_CPU ) )
{
this.craftingCalculationTimePerTick = this.get( "craftingCPU", "craftingCalculationTimePerTick", this.craftingCalculationTimePerTick ).getInt( this.craftingCalculationTimePerTick );
this.craftingCalculationTimePerTick = this.get( "craftingCPU", "craftingCalculationTimePerTick", this.craftingCalculationTimePerTick ).getInt(
this.craftingCalculationTimePerTick );
}
this.updatable = true;
}
public static void init( final File configFile )
{
instance = new AEConfig( configFile );
}
public static AEConfig instance()
{
return instance;
}
private void clientSync()
{
this.disableColoredCableRecipesInJEI = this.get( "Client", "disableColoredCableRecipesInJEI", true ).getBoolean( true );
@@ -305,17 +351,17 @@ public final class AEConfig extends Configuration implements IConfigurableObject
public double wireless_getDrainRate( final double range )
{
return this.WirelessTerminalDrainMultiplier * range;
return this.wirelessTerminalDrainMultiplier * range;
}
public double wireless_getMaxRange( final int boosters )
{
return this.WirelessBaseRange + this.WirelessBoosterRangeMultiplier * Math.pow( boosters, this.WirelessBoosterExp );
return this.wirelessBaseRange + this.wirelessBoosterRangeMultiplier * Math.pow( boosters, this.wirelessBoosterExp );
}
public double wireless_getPowerDrain( final int boosters )
{
return this.WirelessBaseCost + this.WirelessCostMultiplier * Math.pow( boosters, 1 + boosters / this.WirelessHighWirelessCount );
return this.wirelessBaseCost + this.wirelessCostMultiplier * Math.pow( boosters, 1 + boosters / this.wirelessHighWirelessCount );
}
@Override
@@ -337,7 +383,7 @@ public final class AEConfig extends Configuration implements IConfigurableObject
@Override
public void save()
{
if( this.isFeatureEnabled( AEFeature.SpatialIO ) )
if( this.isFeatureEnabled( AEFeature.SPATIAL_IO ) )
{
this.get( "spatialio", "storageBiomeID", this.storageBiomeID ).set( this.storageBiomeID );
this.get( "spatialio", "storageProviderID", this.storageProviderID ).set( this.storageProviderID );
@@ -372,12 +418,13 @@ public final class AEConfig extends Configuration implements IConfigurableObject
public boolean useAEVersion( final MaterialType mt )
{
if( this.isFeatureEnabled( AEFeature.WebsiteRecipes ) )
if( this.isFeatureEnabled( AEFeature.WEBSITE_RECIPES ) )
{
return true;
}
this.setCategoryComment( "OreCamouflage", "AE2 Automatically uses alternative ores present in your instance of MC to blend better with its surroundings, if you prefer you can disable this selectively using these flags; Its important to note, that some if these items even if enabled may not be craftable in game because other items are overriding their recipes." );
this.setCategoryComment( "OreCamouflage",
"AE2 Automatically uses alternative ores present in your instance of MC to blend better with its surroundings, if you prefer you can disable this selectively using these flags; Its important to note, that some if these items even if enabled may not be craftable in game because other items are overriding their recipes." );
final Property p = this.get( "OreCamouflage", mt.name(), true );
p.setComment( "OreDictionary Names: " + mt.getOreName() );
@@ -503,4 +550,212 @@ public final class AEConfig extends Configuration implements IConfigurableObject
this.selectedPowerUnit = Platform.rotateEnum( this.selectedPowerUnit, backwards, Settings.POWER_UNITS.getPossibleValues() );
this.save();
}
// Getters
public boolean isRemoveCrashingItemsOnLoad()
{
return removeCrashingItemsOnLoad;
}
public int getFormationPlaneEntityLimit()
{
return formationPlaneEntityLimit;
}
public boolean isEnableEffects()
{
return enableEffects;
}
public boolean isUseLargeFonts()
{
return useLargeFonts;
}
public boolean isUseColoredCraftingStatus()
{
return useColoredCraftingStatus;
}
public boolean isDisableColoredCableRecipesInJEI()
{
return disableColoredCableRecipesInJEI;
}
public int getCraftingCalculationTimePerTick()
{
return craftingCalculationTimePerTick;
}
public PowerUnits getSelectedPowerUnit()
{
return selectedPowerUnit;
}
public int[] getCraftByStacks()
{
return craftByStacks;
}
public int[] getPriorityByStacks()
{
return priorityByStacks;
}
public int[] getLevelByStacks()
{
return levelByStacks;
}
public int getStorageBiomeID()
{
return storageBiomeID;
}
public int getStorageProviderID()
{
return storageProviderID;
}
public double getSpatialPowerExponent()
{
return spatialPowerExponent;
}
public double getSpatialPowerMultiplier()
{
return spatialPowerMultiplier;
}
public String[] getGrinderOres()
{
return grinderOres;
}
public double getOreDoublePercentage()
{
return oreDoublePercentage;
}
public int getWirelessTerminalBattery()
{
return wirelessTerminalBattery;
}
public int getEntropyManipulatorBattery()
{
return entropyManipulatorBattery;
}
public int getMatterCannonBattery()
{
return matterCannonBattery;
}
public int getPortableCellBattery()
{
return portableCellBattery;
}
public int getColorApplicatorBattery()
{
return colorApplicatorBattery;
}
public int getChargedStaffBattery()
{
return chargedStaffBattery;
}
public float getSpawnChargedChance()
{
return spawnChargedChance;
}
public int getQuartzOresPerCluster()
{
return quartzOresPerCluster;
}
public int getQuartzOresClusterAmount()
{
return quartzOresClusterAmount;
}
public int getChargedChange()
{
return chargedChange;
}
public int getMinMeteoriteDistance()
{
return minMeteoriteDistance;
}
public int getMinMeteoriteDistanceSq()
{
return minMeteoriteDistanceSq;
}
public double getMeteoriteClusterChance()
{
return meteoriteClusterChance;
}
public int getMeteoriteMaximumSpawnHeight()
{
return meteoriteMaximumSpawnHeight;
}
public int[] getMeteoriteDimensionWhitelist()
{
return meteoriteDimensionWhitelist;
}
public double getWirelessBaseCost()
{
return wirelessBaseCost;
}
public double getWirelessCostMultiplier()
{
return wirelessCostMultiplier;
}
public double getWirelessTerminalDrainMultiplier()
{
return wirelessTerminalDrainMultiplier;
}
public double getWirelessBaseRange()
{
return wirelessBaseRange;
}
public double getWirelessBoosterRangeMultiplier()
{
return wirelessBoosterRangeMultiplier;
}
public double getWirelessBoosterExp()
{
return wirelessBoosterExp;
}
public double getWirelessHighWirelessCount()
{
return wirelessHighWirelessCount;
}
// Setters keep visibility as low as possible.
void setStorageBiomeID( int id )
{
this.storageBiomeID = id;
}
void setStorageProviderID( int id )
{
this.storageProviderID = id;
}
}
+7 -7
View File
@@ -69,7 +69,7 @@ public final class AELog
*/
public static boolean isLogEnabled()
{
return AEConfig.instance == null || AEConfig.instance.isFeatureEnabled( AEFeature.Logging );
return AEConfig.instance() == null || AEConfig.instance().isFeatureEnabled( AEFeature.LOGGING );
}
/**
@@ -278,7 +278,7 @@ public final class AELog
*/
public static boolean isDebugLogEnabled()
{
return AEConfig.instance.isFeatureEnabled( AEFeature.DebugLogging );
return AEConfig.instance().isFeatureEnabled( AEFeature.DEBUG_LOGGING );
}
//
@@ -292,7 +292,7 @@ public final class AELog
*/
public static void grinder( @Nonnull final String message )
{
if( AEConfig.instance.isFeatureEnabled( AEFeature.GrinderLogging ) )
if( AEConfig.instance().isFeatureEnabled( AEFeature.GRINDER_LOGGING ) )
{
log( Level.DEBUG, "grinder: " + message );
}
@@ -305,7 +305,7 @@ public final class AELog
*/
public static void integration( @Nonnull final Throwable exception )
{
if( AEConfig.instance.isFeatureEnabled( AEFeature.IntegrationLogging ) )
if( AEConfig.instance().isFeatureEnabled( AEFeature.INTEGRATION_LOGGING ) )
{
debug( exception );
}
@@ -322,7 +322,7 @@ public final class AELog
*/
public static void blockUpdate( @Nonnull final BlockPos pos, @Nonnull final AEBaseTile aeBaseTile )
{
if( AEConfig.instance.isFeatureEnabled( AEFeature.UpdateLogging ) )
if( AEConfig.instance().isFeatureEnabled( AEFeature.UPDATE_LOGGING ) )
{
info( BLOCK_UPDATE, aeBaseTile.getClass().getName(), pos );
}
@@ -337,7 +337,7 @@ public final class AELog
*/
public static boolean isCraftingLogEnabled()
{
return AEConfig.instance.isFeatureEnabled( AEFeature.CraftingLog );
return AEConfig.instance().isFeatureEnabled( AEFeature.CRAFTING_LOG );
}
/**
@@ -366,7 +366,7 @@ public final class AELog
*/
public static boolean isCraftingDebugLogEnabled()
{
return AEConfig.instance.isFeatureEnabled( AEFeature.CraftingLog ) && AEConfig.instance.isFeatureEnabled( AEFeature.DebugLogging );
return AEConfig.instance().isFeatureEnabled( AEFeature.CRAFTING_LOG ) && AEConfig.instance().isFeatureEnabled( AEFeature.DEBUG_LOGGING );
}
/**
+11 -11
View File
@@ -78,10 +78,10 @@ public final class AppEng
// depend on version of forge used for build.
"after:appliedenergistics2-core;" + "required-after:Forge@[" // require forge.
+ net.minecraftforge.common.ForgeVersion.majorVersion + '.' // majorVersion
+ net.minecraftforge.common.ForgeVersion.minorVersion + '.' // minorVersion
+ net.minecraftforge.common.ForgeVersion.revisionVersion + '.' // revisionVersion
+ net.minecraftforge.common.ForgeVersion.buildVersion + ",)"; // buildVersion
+ net.minecraftforge.common.ForgeVersion.majorVersion + '.' // majorVersion
+ net.minecraftforge.common.ForgeVersion.minorVersion + '.' // minorVersion
+ net.minecraftforge.common.ForgeVersion.revisionVersion + '.' // revisionVersion
+ net.minecraftforge.common.ForgeVersion.buildVersion + ",)"; // buildVersion
@Nonnull
private static final AppEng INSTANCE = new AppEng();
@@ -141,8 +141,9 @@ public final class AppEng
final File recipeFile = new File( this.configDirectory, "CustomRecipes.cfg" );
final Configuration recipeConfiguration = new Configuration( recipeFile );
AEConfig.instance = new AEConfig( configFile );
FacadeConfig.instance = new FacadeConfig( facadeFile );
AEConfig.init( configFile );
FacadeConfig.init( facadeFile );
final VersionCheckerConfig versionCheckerConfig = new VersionCheckerConfig( versionFile );
this.customRecipeConfig = new CustomRecipeForgeConfiguration( recipeConfiguration );
this.exportConfig = new ForgeExportConfig( recipeConfiguration );
@@ -150,7 +151,7 @@ public final class AppEng
AELog.info( "Pre Initialization ( started )" );
CreativeTab.init();
if( AEConfig.instance.isFeatureEnabled( AEFeature.Facades ) )
if( AEConfig.instance().isFeatureEnabled( AEFeature.FACADES ) )
{
CreativeTabFacade.init();
}
@@ -174,8 +175,7 @@ public final class AppEng
// Instantiate all Plugins
List<Object> injectables = Lists.newArrayList(
AEApi.instance()
);
AEApi.instance() );
new PluginLoader().loadPlugins( injectables, event.getAsmData() );
}
@@ -226,10 +226,10 @@ public final class AppEng
FMLCommonHandler.instance().registerCrashCallable( new IntegrationCrashEnhancement() );
CommonHelper.proxy.postInit();
AEConfig.instance.save();
AEConfig.instance().save();
NetworkRegistry.INSTANCE.registerGuiHandler( this, GuiBridge.GUI_Handler );
NetworkHandler.instance = new NetworkHandler( "AE2" );
NetworkHandler.init( "AE2" );
AELog.info( "Post Initialization ( ended after " + start.elapsed( TimeUnit.MILLISECONDS ) + "ms )" );
}
+1 -1
View File
@@ -62,7 +62,7 @@ public final class CreativeTab extends CreativeTabs
final IItems items = definitions.items();
final IMaterials materials = definitions.materials();
return this.findFirst( blocks.controller(), blocks.chest(), blocks.cellWorkbench(), blocks.fluixBlock(), items.cell1k(), items.networkTool(), materials.fluixCrystal(), materials.certusQuartzCrystal() );
return this.findFirst( blocks.controller(), blocks.chest(), blocks.cellWorkbench(), blocks.fluixBlock(), items.cell1k(), items.networkTool(), materials.fluixCrystal(), materials.certusQuartzCrystal(), materials.skyDust() );
}
private ItemStack findFirst( final IItemDefinition... choices )
+12 -1
View File
@@ -33,7 +33,8 @@ import net.minecraftforge.common.config.Configuration;
public class FacadeConfig extends Configuration
{
public static FacadeConfig instance;
private static FacadeConfig instance;
private final Pattern replacementPattern;
public FacadeConfig( final File facadeFile )
@@ -42,6 +43,16 @@ public class FacadeConfig extends Configuration
this.replacementPattern = Pattern.compile( "[^a-zA-Z0-9]" );
}
public static void init( final File configFile )
{
instance = new FacadeConfig( configFile );
}
public static FacadeConfig instance()
{
return instance;
}
public boolean checkEnabled( final Block id, final int metadata, final boolean automatic )
{
if( id == null )
+31 -42
View File
@@ -22,7 +22,6 @@ package appeng.core;
import java.io.File;
import java.util.HashSet;
import java.util.Set;
import javax.annotation.Nonnull;
import com.google.common.base.Preconditions;
@@ -30,7 +29,6 @@ import com.google.common.base.Preconditions;
import net.minecraft.world.DimensionType;
import net.minecraft.world.biome.Biome;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.FMLCommonHandler;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
@@ -65,6 +63,7 @@ import appeng.core.localization.GuiText;
import appeng.core.localization.PlayerMessages;
import appeng.core.stats.PlayerStatsRegistration;
import appeng.hooks.TickHandler;
import appeng.integration.Integrations;
import appeng.items.materials.ItemMaterial;
import appeng.items.parts.ItemFacade;
import appeng.loot.ChestLoot;
@@ -86,7 +85,6 @@ import appeng.recipes.game.ShapedRecipe;
import appeng.recipes.game.ShapelessRecipe;
import appeng.recipes.handlers.Crusher;
import appeng.recipes.handlers.Grind;
import appeng.recipes.handlers.GrindFZ;
import appeng.recipes.handlers.HCCrusher;
import appeng.recipes.handlers.Inscribe;
import appeng.recipes.handlers.Macerator;
@@ -151,42 +149,42 @@ public final class Registration
private void registerSpatial( final boolean force )
{
if( !AEConfig.instance.isFeatureEnabled( AEFeature.SpatialIO ) )
if( !AEConfig.instance().isFeatureEnabled( AEFeature.SPATIAL_IO ) )
{
return;
}
final AEConfig config = AEConfig.instance;
final AEConfig config = AEConfig.instance();
if( this.storageBiome == null )
{
if( force && config.storageBiomeID == -1 )
if( force && config.getStorageBiomeID() == -1 )
{
config.storageBiomeID = Platform.findEmpty( Biome.REGISTRY, 0, 256 );
if( config.storageBiomeID == -1 )
config.setStorageBiomeID( Platform.findEmpty( Biome.REGISTRY, 0, 256 ) );
if( config.getStorageBiomeID() == -1 )
{
throw new IllegalStateException( "Biome Array is full, please free up some Biome ID's or disable spatial." );
}
this.storageBiome = new BiomeGenStorage();
Biome.registerBiome( config.storageBiomeID, "appliedenergistics2:storage_biome", this.storageBiome );
Biome.registerBiome( config.getStorageBiomeID(), "appliedenergistics2:storage_biome", this.storageBiome );
config.save();
}
if( !force && config.storageBiomeID != -1 )
if( !force && config.getStorageBiomeID() != -1 )
{
this.storageBiome = new BiomeGenStorage();
Biome.registerBiome( config.storageBiomeID, "appliedenergistics2:storage_biome", this.storageBiome );
Biome.registerBiome( config.getStorageBiomeID(), "appliedenergistics2:storage_biome", this.storageBiome );
}
}
if( config.storageProviderID != -1 )
if( config.getStorageProviderID() != -1 )
{
storageDimensionType = DimensionType.register( "Storage Cell", "_cell", config.storageProviderID, StorageWorldProvider.class, false );
storageDimensionType = DimensionType.register( "Storage Cell", "_cell", config.getStorageProviderID(), StorageWorldProvider.class, false );
}
if( config.storageProviderID == -1 && force )
if( config.getStorageProviderID() == -1 && force )
{
final Set<Integer> ids = new HashSet<>();
for( DimensionType type : DimensionType.values() )
@@ -194,14 +192,14 @@ public final class Registration
ids.add( type.getId() );
}
config.storageProviderID = -11;
config.setStorageProviderID( -11 );
while( ids.contains( config.storageProviderID ) )
while( ids.contains( config.getStorageProviderID() ) )
{
config.storageProviderID--;
config.setStorageProviderID( config.getStorageProviderID() - 1 );
}
storageDimensionType = DimensionType.register( "Storage Cell", "_cell", config.storageProviderID, StorageWorldProvider.class, false );
storageDimensionType = DimensionType.register( "Storage Cell", "_cell", config.getStorageProviderID(), StorageWorldProvider.class, false );
config.save();
}
@@ -216,7 +214,6 @@ public final class Registration
registry.addNewCraftHandler( "mekechamber", MekEnrichment.class );
registry.addNewCraftHandler( "grind", Grind.class );
registry.addNewCraftHandler( "crusher", Crusher.class );
registry.addNewCraftHandler( "grindfz", GrindFZ.class );
registry.addNewCraftHandler( "pulverizer", Pulverizer.class );
registry.addNewCraftHandler( "macerator", Macerator.class );
@@ -248,13 +245,11 @@ public final class Registration
final Runnable recipeLoader = new RecipeLoader( recipeDirectory, customRecipeConfig, this.recipeHandler );
recipeLoader.run();
// TODO readd layers
// 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( Integrations.ic2().isEnabled() )
{
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 ) )
// {
@@ -267,13 +262,11 @@ public final class Registration
// "li.cil.oc.api.network.SidedEnvironment" );
// }
FMLCommonHandler.instance().bus().register( TickHandler.INSTANCE );
MinecraftForge.EVENT_BUS.register( TickHandler.INSTANCE );
MinecraftForge.EVENT_BUS.register( new PartPlacement() );
if( AEConfig.instance.isFeatureEnabled( AEFeature.ChestLoot ) )
if( AEConfig.instance().isFeatureEnabled( AEFeature.CHEST_LOOT ) )
{
MinecraftForge.EVENT_BUS.register( new ChestLoot() );
}
@@ -291,8 +284,7 @@ public final class Registration
registries.cell().addCellHandler( new BasicCellHandler() );
registries.cell().addCellHandler( new CreativeCellHandler() );
api.definitions().materials().matterBall().maybeStack( 1 ).ifPresent( ammoStack ->
{
api.definitions().materials().matterBall().maybeStack( 1 ).ifPresent( ammoStack -> {
final double weight = 32;
registries.matterCannon().registerAmmo( ammoStack, weight );
@@ -300,17 +292,17 @@ public final class Registration
this.recipeHandler.injectRecipes();
final PlayerStatsRegistration registration = new PlayerStatsRegistration( FMLCommonHandler.instance().bus(), AEConfig.instance );
final PlayerStatsRegistration registration = new PlayerStatsRegistration( MinecraftForge.EVENT_BUS, AEConfig.instance() );
registration.registerAchievementHandlers();
registration.registerAchievements();
if( AEConfig.instance.isFeatureEnabled( AEFeature.EnableDisassemblyCrafting ) )
if( AEConfig.instance().isFeatureEnabled( AEFeature.ENABLE_DISASSEMBLY_CRAFTING ) )
{
GameRegistry.addRecipe( new DisassembleRecipe() );
RecipeSorter.register( "appliedenergistics2:disassemble", DisassembleRecipe.class, Category.SHAPELESS, "after:minecraft:shapeless" );
}
if( AEConfig.instance.isFeatureEnabled( AEFeature.EnableFacadeCrafting ) )
if( AEConfig.instance().isFeatureEnabled( AEFeature.ENABLE_FACADE_CRAFTING ) )
{
definitions.items().facade().maybeItem().ifPresent( facadeItem -> {
GameRegistry.addRecipe( new FacadeRecipe( (ItemFacade) facadeItem ) );
@@ -337,8 +329,6 @@ public final class Registration
PlayerMessages.values();
GuiText.values();
Api.INSTANCE.partHelper().initFMPSupport();
definitions.getRegistry().getBootstrapComponents().forEach( b -> b.postInitialize( event.getSide() ) );
// Interface
@@ -406,24 +396,23 @@ public final class Registration
// Inscriber
Upgrades.SPEED.registerItem( blocks.inscriber(), 3 );
items.wirelessTerminal().maybeItem().ifPresent( terminal ->
{
items.wirelessTerminal().maybeItem().ifPresent( terminal -> {
registries.wireless().registerWirelessHandler( (IWirelessTermHandler) terminal );
} );
// add villager trading to black smiths for a few basic materials
if( AEConfig.instance.isFeatureEnabled( AEFeature.VillagerTrading ) )
if( AEConfig.instance().isFeatureEnabled( AEFeature.VILLAGER_TRADING ) )
{
// TODO: VILLAGER TRADING
// VillagerRegistry.instance().getRegisteredVillagers()..registerVillageTradeHandler( 3, new AETrading() );
}
if( AEConfig.instance.isFeatureEnabled( AEFeature.CertusQuartzWorldGen ) )
if( AEConfig.instance().isFeatureEnabled( AEFeature.CERTUS_QUARTZ_WORLD_GEN ) )
{
GameRegistry.registerWorldGenerator( new QuartzWorldGen(), 0 );
}
if( AEConfig.instance.isFeatureEnabled( AEFeature.MeteoriteWorldGen ) )
if( AEConfig.instance().isFeatureEnabled( AEFeature.METEORITE_WORLD_GEN ) )
{
GameRegistry.registerWorldGenerator( new MeteoriteWorldGen(), 0 );
}
@@ -478,7 +467,7 @@ public final class Registration
}
// whitelist from config
for( final int dimension : AEConfig.instance.meteoriteDimensionWhitelist )
for( final int dimension : AEConfig.instance().getMeteoriteDimensionWhitelist() )
{
registries.worldgen().enableWorldGenForDimension( WorldGenType.METEORITES, dimension );
}
+139 -75
View File
@@ -28,7 +28,10 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import com.google.common.base.Joiner;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.google.common.collect.ImmutableList;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassWriter;
@@ -53,9 +56,6 @@ import appeng.api.parts.IPartHelper;
import appeng.api.parts.LayerBase;
import appeng.core.AELog;
import appeng.core.CommonHelper;
import appeng.integration.IntegrationRegistry;
import appeng.integration.IntegrationType;
import appeng.integration.abstraction.IFMP;
import appeng.parts.PartPlacement;
import appeng.tile.AEBaseTile;
import appeng.tile.networking.TileCableBus;
@@ -64,80 +64,91 @@ import appeng.tile.networking.TileCableBus;
public class ApiPart implements IPartHelper
{
private final Map<String, Class<? extends AEBaseTile>> tileImplementations = new HashMap<>();
private final Map<Class<?>, String> interfaces2Layer = new HashMap<Class<?>, String>();
private final Map<String, Class> roots = new HashMap<String, Class>();
private final LoadingCache<CacheKey, Class<? extends AEBaseTile>> cache = CacheBuilder.newBuilder().build( new CacheLoader<CacheKey, Class<? extends AEBaseTile>>()
{
@Override
public Class<? extends AEBaseTile> load( CacheKey key ) throws Exception
{
return generateCombinedClass( key );
}
} );
private final Map<Class<?>, String> interfaces2Layer = new HashMap<>();
private final List<String> desc = new LinkedList<String>();
public void initFMPSupport()
{
for( final Class layerInterface : this.interfaces2Layer.keySet() )
{
if( IntegrationRegistry.INSTANCE.isEnabled( IntegrationType.FMP ) )
{
( (IFMP) IntegrationRegistry.INSTANCE.getInstance( IntegrationType.FMP ) ).registerPassThrough( layerInterface );
}
}
}
/**
* Conceptually this method will build a new class hierarchy that is rooted at the given base class, and includes a chain of all registered layers.
* <p/>
* To accomplish this, it takes the first registered layer, replaces it's inheritance from LayerBase with an inheritance from the given baseClass,
* and uses the resulting class as the parent class for the next registered layer, for which it repeats this process. This process is then repeated
* until a class hierarchy of all layers is formed. While janking out the inheritance from LayerBase, it'll make also sure that calls to that
* classes method will instead be forwarded to the superclass that was inserted as part of the described process.
* <p/>
* Example: If layers A and B are registered, and TileCableBus is passed in as the baseClass, a synthetic class A_B_TileCableBus should be returned,
* which has A_B_TileCableBus -extends-> B_TileCableBus -extends-> TileCableBus as it's class hierarchy, where A_B_TileCableBus has been generated
* from A, and B_TileCableBus has been generated from B.
*/
public Class<? extends AEBaseTile> getCombinedInstance( final Class<? extends AEBaseTile> baseClass )
{
String base = baseClass.getName();
if( this.desc.isEmpty() )
{
// No layers registered...
return baseClass;
}
final String description = base + ':' + Joiner.on( ";" ).skipNulls().join( this.desc.iterator() );
if( this.tileImplementations.get( description ) != null )
{
return this.tileImplementations.get( description );
}
String f = base;// TileCableBus.class.getName();
String Addendum = baseClass.getSimpleName();
Class<? extends AEBaseTile> myClass = baseClass;
String path = f;
for( final String name : this.desc )
{
try
{
final String newPath = path + ';' + name;
myClass = this.getClassByDesc( baseClass.getSimpleName(), newPath, f, this.interfaces2Layer.get( Class.forName( name ) ) );
path = newPath;
}
catch( final Throwable t )
{
AELog.warn( "Error loading " + name );
AELog.debug( t );
}
f = myClass.getName();
}
this.tileImplementations.put( description, myClass );
return myClass;
return cache.getUnchecked( new CacheKey( baseClass, this.desc ) );
}
private Class getClassByDesc( final String addendum, final String fullPath, final String root, final String next )
private Class<? extends AEBaseTile> generateCombinedClass( CacheKey cacheKey )
{
if( this.roots.get( fullPath ) != null )
final Class<? extends AEBaseTile> parentClass;
// Get the list of interfaces that still need to be implemented beyond the current one
List<String> remainingInterfaces = cacheKey.getInterfaces().subList( 1, cacheKey.getInterfaces().size() );
// We are not at the root of the class hierarchy yet
if( !remainingInterfaces.isEmpty() )
{
return this.roots.get( fullPath );
CacheKey parentKey = new CacheKey( cacheKey.getBaseClass(), remainingInterfaces );
parentClass = cache.getUnchecked( parentKey );
}
else
{
parentClass = cacheKey.getBaseClass();
}
// Which interface should be implemented in this layer?
String interfaceName = cacheKey.getInterfaces().get( 0 );
try
{
// This is the particular interface that this layer was registered for. Loading the class may fail if i.e. an API is broken or not present
// and in this case, the layer will be skipped!
Class<?> interfaceClass = Class.forName( interfaceName );
String layerImpl = this.interfaces2Layer.get( interfaceClass );
return this.getClassByDesc( parentClass, layerImpl );
}
catch( final Throwable t )
{
AELog.warn( "Error loading " + interfaceName );
AELog.debug( t );
return parentClass;
}
}
@SuppressWarnings( "unchecked" )
private Class<? extends AEBaseTile> getClassByDesc( Class<? extends AEBaseTile> baseClass, final String next )
{
final ClassWriter cw = new ClassWriter( ClassWriter.COMPUTE_MAXS );
final ClassNode n = this.getReader( next );
final String originalName = n.name;
try
{
n.name = n.name + '_' + addendum;
n.superName = Class.forName( root ).getName().replace( ".", "/" );
n.name = n.name + '_' + baseClass.getSimpleName();
n.superName = baseClass.getName().replace( '.', '/' );
}
catch( final Throwable t )
{
@@ -167,14 +178,13 @@ public class ApiPart implements IPartHelper
try
{
final Object fish = clazz.newInstance();
final Class rootC = Class.forName( root );
boolean hasError = false;
if( !rootC.isInstance( fish ) )
if( !baseClass.isInstance( fish ) )
{
hasError = true;
AELog.error( "Error, Expected layer to implement " + root + " did not." );
AELog.error( "Error, Expected layer to implement " + baseClass + " did not." );
}
if( fish instanceof LayerBase )
@@ -183,19 +193,16 @@ public class ApiPart implements IPartHelper
AELog.error( "Error, Expected layer to NOT implement LayerBase but it DID." );
}
if( !fullPath.contains( ".fmp." ) )
if( !( fish instanceof TileCableBus ) )
{
if( !( fish instanceof TileCableBus ) )
{
hasError = true;
AELog.error( "Error, Expected layer to implement TileCableBus did not." );
}
hasError = true;
AELog.error( "Error, Expected layer to implement TileCableBus did not." );
}
if( !( fish instanceof TileEntity ) )
{
hasError = true;
AELog.error( "Error, Expected layer to implement TileEntity did not." );
}
if( !( fish instanceof TileEntity ) )
{
hasError = true;
AELog.error( "Error, Expected layer to implement TileEntity did not." );
}
if( !hasError )
@@ -209,7 +216,6 @@ public class ApiPart implements IPartHelper
AELog.debug( t );
}
this.roots.put( fullPath, clazz );
return clazz;
}
@@ -260,10 +266,19 @@ public class ApiPart implements IPartHelper
defineClassMethod.setAccessible( true );
try
{
final Object[] argsA = { name, name, b };
final Object[] argsA = {
name,
name,
b
};
b = (byte[]) runTransformersMethod.invoke( loader, argsA );
final Object[] args = { name, b, 0, b.length };
final Object[] args = {
name,
b,
0,
b.length
};
clazz = (Class) defineClassMethod.invoke( loader, args );
}
finally
@@ -319,7 +334,7 @@ public class ApiPart implements IPartHelper
private static class DefaultPackageClassNameRemapper extends Remapper
{
private final HashMap<String, String> inputOutput = new HashMap<String, String>();
private final HashMap<String, String> inputOutput = new HashMap<>();
@Override
public String map( final String typeName )
@@ -332,4 +347,53 @@ public class ApiPart implements IPartHelper
return o;
}
}
private static class CacheKey
{
private final Class<? extends AEBaseTile> baseClass;
private final List<String> interfaces;
private CacheKey( Class<? extends AEBaseTile> baseClass, List<String> interfaces )
{
this.baseClass = baseClass;
this.interfaces = ImmutableList.copyOf( interfaces );
}
private Class<? extends AEBaseTile> getBaseClass()
{
return baseClass;
}
private List<String> getInterfaces()
{
return interfaces;
}
@Override
public boolean equals( Object o )
{
if( this == o )
{
return true;
}
if( o == null || getClass() != o.getClass() )
{
return false;
}
CacheKey cacheKey = (CacheKey) o;
return baseClass.equals( cacheKey.baseClass ) && interfaces.equals( cacheKey.interfaces );
}
@Override
public int hashCode()
{
int result = baseClass.hashCode();
result = 31 * result + interfaces.hashCode();
return result;
}
}
}
@@ -203,20 +203,22 @@ public final class ApiBlocks implements IBlocks
{
// this.quartzOre = new BlockDefinition( "ore.quartz", new OreQuartz() );
this.quartzOre = registry.block( "quartz_ore", BlockQuartzOre::new )
.features( AEFeature.CERTUS_ORE )
.postInit( ( block, item ) ->
{
OreDictionary.registerOre( "oreCertusQuartz", new ItemStack( block ) );
} )
.build();
this.quartzOreCharged = registry.block( "charged_quartz_ore", BlockChargedQuartzOre::new )
.features( AEFeature.CERTUS_ORE, AEFeature.CHARGED_CERTUS_ORE )
.postInit( ( block, item ) ->
{
OreDictionary.registerOre( "oreCertusQuartz", new ItemStack( block ) );
} )
.build();
this.matrixFrame = registry.block( "matrix_frame", BlockMatrixFrame::new ).features( AEFeature.SpatialIO ).build();
this.matrixFrame = registry.block( "matrix_frame", BlockMatrixFrame::new ).features( AEFeature.SPATIAL_IO ).build();
FeatureFactory deco = registry.features( AEFeature.DecorativeQuartzBlocks );
FeatureFactory deco = registry.features( AEFeature.DECORATIVE_QUARTZ_BLOCKS );
this.quartzBlock = deco.block( "quartz_block", BlockQuartz::new ).build();
this.quartzPillar = deco.block( "quartz_pillar", BlockQuartzPillar::new ).build();
this.chiseledQuartzBlock = deco.block( "chiseled_quartz_block", BlockChiseledQuartz::new ).build();
@@ -233,11 +235,11 @@ public final class ApiBlocks implements IBlocks
} )
.build();
this.quartzVibrantGlass = deco.block( "quartz_vibrant_glass", BlockQuartzLamp::new )
.addFeatures( AEFeature.DecorativeLights )
.addFeatures( AEFeature.DECORATIVE_LIGHTS )
.useCustomItemModel()
.build();
this.quartzFixture = registry.block( "quartz_fixture", BlockQuartzFixture::new )
.features( AEFeature.DecorativeLights )
.features( AEFeature.DECORATIVE_LIGHTS )
.useCustomItemModel()
.build();
@@ -248,32 +250,33 @@ public final class ApiBlocks implements IBlocks
this.skyStoneSmallBrick = deco.block( "sky_stone_small_brick", () -> new BlockSkyStone( SkystoneType.SMALL_BRICK ) ).build();
this.skyStoneChest = registry.block( "sky_stone_chest", () -> new BlockSkyChest( SkyChestType.STONE ) )
.features( AEFeature.SkyStoneChests )
.features( AEFeature.SKY_STONE_CHESTS )
.rendering( new SkyChestRenderingCustomizer( SkyChestType.STONE ) )
.build();
this.smoothSkyStoneChest = registry.block( "smooth_sky_stone_chest", () -> new BlockSkyChest( SkyChestType.BLOCK ) )
.features( AEFeature.SkyStoneChests )
.features( AEFeature.SKY_STONE_CHESTS )
.rendering( new SkyChestRenderingCustomizer( SkyChestType.BLOCK ) )
.build();
this.skyCompass = registry.block( "sky_compass", BlockSkyCompass::new )
.features( AEFeature.MeteoriteCompass )
.features( AEFeature.METEORITE_COMPASS )
.rendering( new SkyCompassRendering() )
.build();
this.grindstone = registry.block( "grindstone", BlockGrinder::new ).features( AEFeature.GrindStone ).build();
this.grindstone = registry.block( "grindstone", BlockGrinder::new ).features( AEFeature.GRIND_STONE ).build();
this.crank = registry.block( "crank", BlockCrank::new )
.features( AEFeature.GrindStone )
.features( AEFeature.GRIND_STONE )
.rendering( new CrankRendering() )
.build();
this.inscriber = registry.block( "inscriber", BlockInscriber::new )
.features( AEFeature.Inscriber )
.features( AEFeature.INSCRIBER )
.rendering( new InscriberRendering() )
.build();
this.wirelessAccessPoint = registry.block( "wireless_access_point", BlockWireless::new )
.features( AEFeature.WirelessAccessTerminal )
.features( AEFeature.WIRELESS_ACCESS_TERMINAL )
.rendering( new WirelessRendering() )
.build();
this.charger = registry.block( "charger", BlockCharger::new )
.features( AEFeature.CHARGER )
.rendering( new BlockRenderingCustomizer()
{
@Override
@@ -284,67 +287,71 @@ public final class ApiBlocks implements IBlocks
}
} )
.build();
this.tinyTNT = registry.block( "tiny_tnt", BlockTinyTNT::new ).features( AEFeature.TinyTNT )
this.tinyTNT = registry.block( "tiny_tnt", BlockTinyTNT::new )
.features( AEFeature.TINY_TNT )
.postInit( ( block, item ) ->
{
BlockDispenser.DISPENSE_BEHAVIOR_REGISTRY.putObject( item, new DispenserBehaviorTinyTNT() );
} )
.build();
this.securityStation = registry.block( "security_station", BlockSecurityStation::new )
.features( AEFeature.Security )
.features( AEFeature.SECURITY )
.rendering( new SecurityStationRendering() )
.build();
this.quantumRing = registry.block( "quantum_ring", BlockQuantumRing::new )
.features( AEFeature.QuantumNetworkBridge )
.features( AEFeature.QUANTUM_NETWORK_BRIDGE )
.rendering( new QuantumBridgeRendering() )
.build();
this.quantumLink = registry.block( "quantum_link", BlockQuantumLinkChamber::new )
.features( AEFeature.QuantumNetworkBridge )
.features( AEFeature.QUANTUM_NETWORK_BRIDGE )
.rendering( new QuantumBridgeRendering() )
.build();
this.spatialPylon = registry.block( "spatial_pylon", BlockSpatialPylon::new )
.features( AEFeature.SpatialIO )
.features( AEFeature.SPATIAL_IO )
.useCustomItemModel()
.rendering( new SpatialPylonRendering() )
.build();
this.spatialIOPort = registry.block( "spatial_io_port", BlockSpatialIOPort::new ).features( AEFeature.SpatialIO ).build();
this.spatialIOPort = registry.block( "spatial_io_port", BlockSpatialIOPort::new ).features( AEFeature.SPATIAL_IO ).build();
this.controller = registry.block( "controller", BlockController::new )
.features( AEFeature.Channels )
.features( AEFeature.CHANNELS )
.useCustomItemModel()
.rendering( new ControllerRendering() )
.build();
this.drive = registry.block( "drive", BlockDrive::new )
.features( AEFeature.StorageCells, AEFeature.MEDrive )
.features( AEFeature.STORAGE_CELLS, AEFeature.ME_DRIVE )
.useCustomItemModel()
.rendering( new DriveRendering() )
.build();
this.chest = registry.block( "chest", BlockChest::new )
.features( AEFeature.StorageCells, AEFeature.MEChest )
.features( AEFeature.STORAGE_CELLS, AEFeature.ME_CHEST )
.useCustomItemModel()
.rendering( new ChestRendering() )
.build();
this.iface = registry.block( "interface", BlockInterface::new ).build();
this.cellWorkbench = registry.block( "cell_workbench", BlockCellWorkbench::new ).features( AEFeature.StorageCells ).build();
this.iOPort = registry.block( "io_port", BlockIOPort::new ).features( AEFeature.StorageCells, AEFeature.IOPort ).build();
this.condenser = registry.block( "condenser", BlockCondenser::new ).build();
this.energyAcceptor = registry.block( "energy_acceptor", BlockEnergyAcceptor::new ).build();
this.vibrationChamber = registry.block( "vibration_chamber", BlockVibrationChamber::new ).features( AEFeature.PowerGen ).build();
this.quartzGrowthAccelerator = registry.block( "quartz_growth_accelerator", BlockQuartzGrowthAccelerator::new ).build();
this.iface = registry.block( "interface", BlockInterface::new ).features( AEFeature.INTERFACE ).build();
this.cellWorkbench = registry.block( "cell_workbench", BlockCellWorkbench::new ).features( AEFeature.STORAGE_CELLS ).build();
this.iOPort = registry.block( "io_port", BlockIOPort::new ).features( AEFeature.STORAGE_CELLS, AEFeature.IO_PORT ).build();
this.condenser = registry.block( "condenser", BlockCondenser::new ).features( AEFeature.CONDENSER ).build();
this.energyAcceptor = registry.block( "energy_acceptor", BlockEnergyAcceptor::new ).features( AEFeature.ENERGY_ACCEPTOR ).build();
this.vibrationChamber = registry.block( "vibration_chamber", BlockVibrationChamber::new ).features( AEFeature.POWER_GEN ).build();
this.quartzGrowthAccelerator = registry.block( "quartz_growth_accelerator", BlockQuartzGrowthAccelerator::new )
.features( AEFeature.CRYSTAL_GROWTH_ACCELERATOR )
.build();
this.energyCell = registry.block( "energy_cell", BlockEnergyCell::new )
.features( AEFeature.ENERGY_CELLS )
.item( AEBaseItemBlockChargeable::new )
.rendering( new BlockEnergyCellRendering( new ResourceLocation( AppEng.MOD_ID, "energy_cell" ) ) )
.build();
this.energyCellDense = registry.block( "dense_energy_cell", BlockDenseEnergyCell::new )
.features( AEFeature.DenseEnergyCells )
.features( AEFeature.ENERGY_CELLS, AEFeature.DENSE_ENERGY_CELLS )
.item( AEBaseItemBlockChargeable::new )
.rendering( new BlockEnergyCellRendering( new ResourceLocation( AppEng.MOD_ID, "dense_energy_cell" ) ) )
.build();
this.energyCellCreative = registry.block( "creative_energy_cell", BlockCreativeEnergyCell::new )
.features( AEFeature.Creative )
.features( AEFeature.CREATIVE )
.item( AEBaseItemBlockChargeable::new )
.build();
FeatureFactory crafting = registry.features( AEFeature.CraftingCPU );
FeatureFactory crafting = registry.features( AEFeature.CRAFTING_CPU );
this.craftingUnit = crafting.block( "crafting_unit", () -> new BlockCraftingUnit( CraftingUnitType.UNIT ) )
.rendering( new CraftingCubeRendering( "crafting_unit", CraftingUnitType.UNIT ) )
.useCustomItemModel()
@@ -378,12 +385,13 @@ public final class ApiBlocks implements IBlocks
.useCustomItemModel()
.build();
this.molecularAssembler = registry.block( "molecular_assembler", BlockMolecularAssembler::new ).features( AEFeature.MolecularAssembler ).build();
this.lightDetector = registry.block( "light_detector", BlockLightDetector::new ).features( AEFeature.LightDetector )
this.molecularAssembler = registry.block( "molecular_assembler", BlockMolecularAssembler::new ).features( AEFeature.MOLECULAR_ASSEMBLER ).build();
this.lightDetector = registry.block( "light_detector", BlockLightDetector::new )
.features( AEFeature.LIGHT_DETECTOR )
.useCustomItemModel()
.build();
this.paint = registry.block( "paint", BlockPaint::new )
.features( AEFeature.PaintBalls )
.features( AEFeature.PAINT_BALLS )
.rendering( new PaintRendering() )
.build();
@@ -398,7 +406,8 @@ public final class ApiBlocks implements IBlocks
this.multiPart = registry.block( "cable_bus", BlockCableBus::new )
.rendering( new CableBusRendering( partModels ) )
.postInit( (block, item) -> {
.postInit( ( block, item ) ->
{
( (BlockCableBus) block ).setupTile();
} )
.build();
@@ -413,19 +422,19 @@ public final class ApiBlocks implements IBlocks
this.quartzPillarSlab = makeSlab( "quartz_pillar_slab", "quartz_pillar_double_slab", registry, this.quartzPillar() );
this.itemGen = registry.block( "debug_item_gen", BlockItemGen::new )
.features( AEFeature.UnsupportedDeveloperTools, AEFeature.Creative )
.features( AEFeature.UNSUPPORTED_DEVELOPER_TOOLS, AEFeature.CREATIVE )
.useCustomItemModel()
.build();
this.chunkLoader = registry.block( "debug_chunk_loader", BlockChunkloader::new )
.features( AEFeature.UnsupportedDeveloperTools, AEFeature.Creative )
.features( AEFeature.UNSUPPORTED_DEVELOPER_TOOLS, AEFeature.CREATIVE )
.useCustomItemModel()
.build();
this.phantomNode = registry.block( "debug_phantom_node", BlockPhantomNode::new )
.features( AEFeature.UnsupportedDeveloperTools, AEFeature.Creative )
.features( AEFeature.UNSUPPORTED_DEVELOPER_TOOLS, AEFeature.CREATIVE )
.useCustomItemModel()
.build();
this.cubeGenerator = registry.block( "debug_cube_gen", BlockCubeGenerator::new )
.features( AEFeature.UnsupportedDeveloperTools, AEFeature.Creative )
.features( AEFeature.UNSUPPORTED_DEVELOPER_TOOLS, AEFeature.CREATIVE )
.useCustomItemModel()
.build();
}
@@ -440,7 +449,7 @@ public final class ApiBlocks implements IBlocks
Block block = blockDef.maybeBlock().get();
IBlockDefinition slabDef = registry.block( slabId, () -> new BlockSlabCommon.Half( block ) )
.features( AEFeature.DecorativeQuartzBlocks )
.features( AEFeature.DECORATIVE_QUARTZ_BLOCKS )
.disableItem()
.build();
@@ -453,7 +462,7 @@ public final class ApiBlocks implements IBlocks
// Reigster the double slab variant as well
IBlockDefinition doubleSlabDef = registry.block( doubleSlabId, () -> new BlockSlabCommon.Double( slabBlock, block ) )
.features( AEFeature.DecorativeQuartzBlocks )
.features( AEFeature.DECORATIVE_QUARTZ_BLOCKS )
.disableItem()
.build();
@@ -463,7 +472,7 @@ public final class ApiBlocks implements IBlocks
// Make the slab item
IItemDefinition itemDef = registry.item( slabId, () -> new ItemSlab( slabBlock, slabBlock, doubleSlabBlock ) )
.features( AEFeature.DecorativeQuartzBlocks )
.features( AEFeature.DECORATIVE_QUARTZ_BLOCKS )
.build();
Verify.verify( itemDef.maybeItem().isPresent() );
@@ -475,7 +484,7 @@ public final class ApiBlocks implements IBlocks
private static IBlockDefinition makeStairs( String registryName, FeatureFactory registry, IBlockDefinition block )
{
return registry.block( registryName, () -> new BlockStairCommon( block.maybeBlock().get(), block.identifier() ) )
.features( AEFeature.DecorativeQuartzBlocks )
.features( AEFeature.DECORATIVE_QUARTZ_BLOCKS )
.rendering( new BlockRenderingCustomizer()
{
@Override
@@ -125,85 +125,113 @@ public final class ApiItems implements IItems
public ApiItems( FeatureFactory registry )
{
FeatureFactory certusTools = registry.features( AEFeature.CertusQuartzTools );
this.certusQuartzAxe = certusTools.item( "certus_quartz_axe", () -> new ToolQuartzAxe( AEFeature.CertusQuartzTools ) ).addFeatures( AEFeature.QuartzAxe ).build();
this.certusQuartzHoe = certusTools.item( "certus_quartz_hoe", () -> new ToolQuartzHoe( AEFeature.CertusQuartzTools ) ).addFeatures( AEFeature.QuartzHoe ).build();
this.certusQuartzShovel = certusTools.item( "certus_quartz_spade", () -> new ToolQuartzSpade( AEFeature.CertusQuartzTools ) ).addFeatures( AEFeature.QuartzSpade ).build();
this.certusQuartzPick = certusTools.item( "certus_quartz_pickaxe", () -> new ToolQuartzPickaxe( AEFeature.CertusQuartzTools ) ).addFeatures( AEFeature.QuartzPickaxe ).build();
this.certusQuartzSword = certusTools.item( "certus_quartz_sword", () -> new ToolQuartzSword( AEFeature.CertusQuartzTools ) ).addFeatures( AEFeature.QuartzSword ).build();
this.certusQuartzWrench = certusTools.item( "certus_quartz_wrench", ToolQuartzWrench::new ).addFeatures( AEFeature.QuartzWrench ).build();
this.certusQuartzKnife = certusTools.item( "certus_quartz_cutting_knife", () -> new ToolQuartzCuttingKnife( AEFeature.CertusQuartzTools ) ).addFeatures( AEFeature.QuartzKnife ).build();
FeatureFactory certusTools = registry.features( AEFeature.CERTUS_QUARTZ_TOOLS );
this.certusQuartzAxe = certusTools.item( "certus_quartz_axe", () -> new ToolQuartzAxe( AEFeature.CERTUS_QUARTZ_TOOLS ) )
.addFeatures( AEFeature.QUARTZ_AXE )
.build();
this.certusQuartzHoe = certusTools.item( "certus_quartz_hoe", () -> new ToolQuartzHoe( AEFeature.CERTUS_QUARTZ_TOOLS ) )
.addFeatures( AEFeature.QUARTZ_HOE )
.build();
this.certusQuartzShovel = certusTools.item( "certus_quartz_spade", () -> new ToolQuartzSpade( AEFeature.CERTUS_QUARTZ_TOOLS ) )
.addFeatures( AEFeature.QUARTZ_SPADE )
.build();
this.certusQuartzPick = certusTools.item( "certus_quartz_pickaxe", () -> new ToolQuartzPickaxe( AEFeature.CERTUS_QUARTZ_TOOLS ) )
.addFeatures( AEFeature.QUARTZ_PICKAXE )
.build();
this.certusQuartzSword = certusTools.item( "certus_quartz_sword", () -> new ToolQuartzSword( AEFeature.CERTUS_QUARTZ_TOOLS ) )
.addFeatures( AEFeature.QUARTZ_SWORD )
.build();
this.certusQuartzWrench = certusTools.item( "certus_quartz_wrench", ToolQuartzWrench::new ).addFeatures( AEFeature.QUARTZ_WRENCH ).build();
this.certusQuartzKnife = certusTools.item( "certus_quartz_cutting_knife", () -> new ToolQuartzCuttingKnife( AEFeature.CERTUS_QUARTZ_TOOLS ) )
.addFeatures( AEFeature.QUARTZ_KNIFE )
.build();
FeatureFactory netherTools = registry.features( AEFeature.NetherQuartzTools );
this.netherQuartzAxe = netherTools.item( "nether_quartz_axe", () -> new ToolQuartzAxe( AEFeature.NetherQuartzTools ) ).addFeatures( AEFeature.QuartzAxe ).build();
this.netherQuartzHoe = netherTools.item( "nether_quartz_hoe", () -> new ToolQuartzHoe( AEFeature.NetherQuartzTools ) ).addFeatures( AEFeature.QuartzHoe ).build();
this.netherQuartzShovel = netherTools.item( "nether_quartz_spade", () -> new ToolQuartzSpade( AEFeature.NetherQuartzTools ) ).addFeatures( AEFeature.QuartzSpade ).build();
this.netherQuartzPick = netherTools.item( "nether_quartz_pickaxe", () -> new ToolQuartzPickaxe( AEFeature.NetherQuartzTools ) ).addFeatures( AEFeature.QuartzPickaxe ).build();
this.netherQuartzSword = netherTools.item( "nether_quartz_sword", () -> new ToolQuartzSword( AEFeature.NetherQuartzTools ) ).addFeatures( AEFeature.QuartzSword ).build();
this.netherQuartzWrench = netherTools.item( "nether_quartz_wrench", ToolQuartzWrench::new ).addFeatures( AEFeature.QuartzWrench ).build();
this.netherQuartzKnife = netherTools.item( "nether_quartz_cutting_knife", () -> new ToolQuartzCuttingKnife( AEFeature.NetherQuartzTools ) ).addFeatures( AEFeature.QuartzKnife ).build();
FeatureFactory netherTools = registry.features( AEFeature.NETHER_QUARTZ_TOOLS );
this.netherQuartzAxe = netherTools.item( "nether_quartz_axe", () -> new ToolQuartzAxe( AEFeature.NETHER_QUARTZ_TOOLS ) )
.addFeatures( AEFeature.QUARTZ_AXE )
.build();
this.netherQuartzHoe = netherTools.item( "nether_quartz_hoe", () -> new ToolQuartzHoe( AEFeature.NETHER_QUARTZ_TOOLS ) )
.addFeatures( AEFeature.QUARTZ_HOE )
.build();
this.netherQuartzShovel = netherTools.item( "nether_quartz_spade", () -> new ToolQuartzSpade( AEFeature.NETHER_QUARTZ_TOOLS ) )
.addFeatures( AEFeature.QUARTZ_SPADE )
.build();
this.netherQuartzPick = netherTools.item( "nether_quartz_pickaxe", () -> new ToolQuartzPickaxe( AEFeature.NETHER_QUARTZ_TOOLS ) )
.addFeatures( AEFeature.QUARTZ_PICKAXE )
.build();
this.netherQuartzSword = netherTools.item( "nether_quartz_sword", () -> new ToolQuartzSword( AEFeature.NETHER_QUARTZ_TOOLS ) )
.addFeatures( AEFeature.QUARTZ_SWORD )
.build();
this.netherQuartzWrench = netherTools.item( "nether_quartz_wrench", ToolQuartzWrench::new ).addFeatures( AEFeature.QUARTZ_WRENCH ).build();
this.netherQuartzKnife = netherTools.item( "nether_quartz_cutting_knife", () -> new ToolQuartzCuttingKnife( AEFeature.NETHER_QUARTZ_TOOLS ) )
.addFeatures( AEFeature.QUARTZ_KNIFE )
.build();
FeatureFactory powerTools = registry.features( AEFeature.PoweredTools );
FeatureFactory powerTools = registry.features( AEFeature.POWERED_TOOLS );
this.entropyManipulator = powerTools.item( "entropy_manipulator", ToolEntropyManipulator::new )
.addFeatures( AEFeature.EntropyManipulator )
.addFeatures( AEFeature.ENTROPY_MANIPULATOR )
.dispenserBehavior( DispenserBlockTool::new )
.build();
this.wirelessTerminal = powerTools.item( "wireless_terminal", ToolWirelessTerminal::new ).addFeatures( AEFeature.WirelessAccessTerminal ).build();
this.chargedStaff = powerTools.item( "charged_staff", ToolChargedStaff::new ).addFeatures( AEFeature.ChargedStaff ).build();
this.wirelessTerminal = powerTools.item( "wireless_terminal", ToolWirelessTerminal::new ).addFeatures( AEFeature.WIRELESS_ACCESS_TERMINAL ).build();
this.chargedStaff = powerTools.item( "charged_staff", ToolChargedStaff::new ).addFeatures( AEFeature.CHARGED_STAFF ).build();
this.massCannon = powerTools.item( "matter_cannon", ToolMatterCannon::new )
.addFeatures( AEFeature.MatterCannon )
.addFeatures( AEFeature.MATTER_CANNON )
.dispenserBehavior( DispenserMatterCannon::new )
.build();
this.portableCell = powerTools.item( "portable_cell", ToolPortableCell::new ).addFeatures( AEFeature.PortableCell, AEFeature.StorageCells ).build();
this.portableCell = powerTools.item( "portable_cell", ToolPortableCell::new ).addFeatures( AEFeature.PORTABLE_CELL, AEFeature.STORAGE_CELLS ).build();
this.colorApplicator = powerTools.item( "color_applicator", ToolColorApplicator::new )
.addFeatures( AEFeature.ColorApplicator )
.addFeatures( AEFeature.COLOR_APPLICATOR )
.dispenserBehavior( DispenserBlockTool::new )
.rendering( new ToolColorApplicatorRendering() )
.build();
this.biometricCard = registry.item( "biometric_card", ToolBiometricCard::new )
.rendering( new ToolBiometricCardRendering() )
.features( AEFeature.Security ).build();
this.memoryCard = registry.item( "memory_card", ToolMemoryCard::new ).build();
this.networkTool = registry.item( "network_tool", ToolNetworkTool::new ).features( AEFeature.NetworkTool ).build();
.features( AEFeature.SECURITY )
.build();
this.memoryCard = registry.item( "memory_card", ToolMemoryCard::new ).features( AEFeature.MEMORY_CARD ).build();
this.networkTool = registry.item( "network_tool", ToolNetworkTool::new ).features( AEFeature.NETWORK_TOOL ).build();
this.cellCreative = registry.item( "creative_storage_cell", ItemCreativeStorageCell::new ).features( AEFeature.StorageCells, AEFeature.Creative ).build();
this.viewCell = registry.item( "view_cell", ItemViewCell::new ).build();
this.cellCreative = registry.item( "creative_storage_cell", ItemCreativeStorageCell::new )
.features( AEFeature.STORAGE_CELLS, AEFeature.CREATIVE )
.build();
this.viewCell = registry.item( "view_cell", ItemViewCell::new ).features( AEFeature.VIEW_CELL ).build();
FeatureFactory storageCells = registry.features( AEFeature.StorageCells );
FeatureFactory storageCells = registry.features( AEFeature.STORAGE_CELLS );
this.cell1k = storageCells.item( "storage_cell_1k", () -> new ItemBasicStorageCell( MaterialType.Cell1kPart, 1 ) ).build();
this.cell4k = storageCells.item( "storage_cell_4k", () -> new ItemBasicStorageCell( MaterialType.Cell4kPart, 4 ) ).build();
this.cell16k = storageCells.item( "storage_cell_16k", () -> new ItemBasicStorageCell( MaterialType.Cell16kPart, 16 ) ).build();
this.cell64k = storageCells.item( "storage_cell_64k", () -> new ItemBasicStorageCell( MaterialType.Cell64kPart, 64 ) ).build();
FeatureFactory spatialCells = registry.features( AEFeature.SpatialIO );
FeatureFactory spatialCells = registry.features( AEFeature.SPATIAL_IO );
this.spatialCell2 = spatialCells.item( "spatial_storage_cell_2_cubed", () -> new ItemSpatialStorageCell( 2 ) ).build();
this.spatialCell16 = spatialCells.item( "spatial_storage_cell_16_cubed", () -> new ItemSpatialStorageCell( 16 ) ).build();
this.spatialCell128 = spatialCells.item( "spatial_storage_cell_128_cubed", () -> new ItemSpatialStorageCell( 128 ) ).build();
this.facade = registry.item( "facade", ItemFacade::new )
.features( AEFeature.Facades )
.features( AEFeature.FACADES )
.creativeTab( CreativeTabFacade.instance )
.rendering( new FacadeRendering() )
.build();
this.crystalSeed = registry.item( "crystal_seed", ItemCrystalSeed::new )
.features( AEFeature.CRYSTAL_SEEDS )
.rendering( new ItemCrystalSeedRendering() )
.build();
// rv1
this.encodedPattern = registry.item( "encoded_pattern", ItemEncodedPattern::new )
.features( AEFeature.Patterns )
.features( AEFeature.PATTERNS )
.rendering( new ItemEncodedPatternRendering() )
.build();
this.paintBall = registry.item( "paint_ball", ItemPaintBall::new )
.features( AEFeature.PaintBalls )
.features( AEFeature.PAINT_BALLS )
.rendering( new ItemPaintBallRendering() )
.build();
this.coloredPaintBall = registry.colored( this.paintBall, 0 );
this.coloredLumenPaintBall = registry.colored( this.paintBall, 20 );
FeatureFactory debugTools = registry.features( AEFeature.UnsupportedDeveloperTools, AEFeature.Creative );
FeatureFactory debugTools = registry.features( AEFeature.UNSUPPORTED_DEVELOPER_TOOLS, AEFeature.CREATIVE );
this.toolEraser = debugTools.item( "debug_eraser", ToolEraser::new ).build();
this.toolMeteoritePlacer = debugTools.item( "debug_meteorite_placer", ToolMeteoritePlacer::new ).build();
this.toolDebugCard = debugTools.item( "debug_card", ToolDebugCard::new ).build();
@@ -62,7 +62,7 @@ public final class ApiParts implements IParts
private final IItemDefinition p2PTunnelRedstone;
private final IItemDefinition p2PTunnelItems;
private final IItemDefinition p2PTunnelLiquids;
// private final IItemDefinition p2PTunnelEU;
private final IItemDefinition p2PTunnelEU;
// private final IItemDefinition p2PTunnelRF;
private final IItemDefinition p2PTunnelLight;
// private final IItemDefinition p2PTunnelOpenComputers;
@@ -113,7 +113,7 @@ public final class ApiParts implements IParts
this.p2PTunnelRedstone = new DamagedItemDefinition( "part.tunnel.redstone", itemPart.createPart( PartType.P2PTunnelRedstone ) );
this.p2PTunnelItems = new DamagedItemDefinition( "part.tunnel.item", itemPart.createPart( PartType.P2PTunnelItems ) );
this.p2PTunnelLiquids = new DamagedItemDefinition( "part.tunnel.fluid", itemPart.createPart( PartType.P2PTunnelLiquids ) );
// this.p2PTunnelEU = new DamagedItemDefinition( itemMultiPart.createPart( PartType.P2PTunnelEU ) );
this.p2PTunnelEU = new DamagedItemDefinition( "part.tunnel.eu", itemPart.createPart( PartType.P2PTunnelEU ) );
// this.p2PTunnelRF = new DamagedItemDefinition( itemMultiPart.createPart( PartType.P2PTunnelRF ) );
this.p2PTunnelLight = new DamagedItemDefinition( "part.tunnel.light", itemPart.createPart( PartType.P2PTunnelLight ) );
// this.p2PTunnelOpenComputers = new DamagedItemDefinition( itemMultiPart.createPart(
@@ -286,13 +286,13 @@ public final class ApiParts implements IParts
return this.p2PTunnelLiquids;
}
/*
* @Override
* public IItemDefinition p2PTunnelEU()
* {
* return this.p2PTunnelEU;
* }
* @Override
@Override
public IItemDefinition p2PTunnelEU()
{
return this.p2PTunnelEU;
}
/* @Override
* public IItemDefinition p2PTunnelRF()
* {
* return this.p2PTunnelRF;
+153 -96
View File
@@ -24,7 +24,7 @@ public enum AEFeature
// stuff that has no reason for ever being turned off, or that
// is just flat out required by tons of
// important stuff.
Core( null )
CORE( "Core", null )
{
@Override
public boolean isVisible()
@@ -33,124 +33,162 @@ public enum AEFeature
}
},
CertusQuartzWorldGen( Constants.CATEGORY_WORLD ),
MeteoriteWorldGen( Constants.CATEGORY_WORLD ),
DecorativeLights( Constants.CATEGORY_WORLD ),
DecorativeQuartzBlocks( Constants.CATEGORY_WORLD ),
SkyStoneChests( Constants.CATEGORY_WORLD ),
SpawnPressesInMeteorites( Constants.CATEGORY_WORLD ),
GrindStone( Constants.CATEGORY_WORLD ),
Flour( Constants.CATEGORY_WORLD ),
Inscriber( Constants.CATEGORY_WORLD ),
ChestLoot( Constants.CATEGORY_WORLD ),
VillagerTrading( Constants.CATEGORY_WORLD ),
TinyTNT( Constants.CATEGORY_WORLD ),
CERTUS_QUARTZ_WORLD_GEN( "CertusQuartzWorldGen", Constants.CATEGORY_WORLD ),
METEORITE_WORLD_GEN( "MeteoriteWorldGen", Constants.CATEGORY_WORLD ),
DECORATIVE_LIGHTS( "DecorativeLights", Constants.CATEGORY_WORLD ),
DECORATIVE_QUARTZ_BLOCKS( "DecorativeQuartzBlocks", Constants.CATEGORY_WORLD ),
SKY_STONE_CHESTS( "SkyStoneChests", Constants.CATEGORY_WORLD ),
SPAWN_PRESSES_IN_METEORITES( "SpawnPressesInMeteorites", Constants.CATEGORY_WORLD ),
GRIND_STONE( "GrindStone", Constants.CATEGORY_WORLD ),
FLOUR( "Flour", Constants.CATEGORY_WORLD ),
INSCRIBER( "Inscriber", Constants.CATEGORY_WORLD ),
CHARGER( "Charger", Constants.CATEGORY_WORLD ),
CRYSTAL_GROWTH_ACCELERATOR( "CrystalGrowthAccelerator", Constants.CATEGORY_WORLD ),
CHEST_LOOT( "ChestLoot", Constants.CATEGORY_WORLD ),
VILLAGER_TRADING( "VillagerTrading", Constants.CATEGORY_WORLD ),
TINY_TNT( "TinyTNT", Constants.CATEGORY_WORLD ),
CERTUS_ORE( "CertusOre", Constants.CATEGORY_WORLD ),
CHARGED_CERTUS_ORE( "ChargedCertusOre", Constants.CATEGORY_WORLD ),
PoweredTools( Constants.CATEGORY_TOOLS_CLASSIFICATIONS ),
CertusQuartzTools( Constants.CATEGORY_TOOLS_CLASSIFICATIONS ),
NetherQuartzTools( Constants.CATEGORY_TOOLS_CLASSIFICATIONS ),
POWERED_TOOLS( "PoweredTools", Constants.CATEGORY_TOOLS_CLASSIFICATIONS ),
CERTUS_QUARTZ_TOOLS( "CertusQuartzTools", Constants.CATEGORY_TOOLS_CLASSIFICATIONS ),
NETHER_QUARTZ_TOOLS( "NetherQuartzTools", Constants.CATEGORY_TOOLS_CLASSIFICATIONS ),
QuartzHoe( Constants.CATEGORY_TOOLS ),
QuartzSpade( Constants.CATEGORY_TOOLS ),
QuartzSword( Constants.CATEGORY_TOOLS ),
QuartzPickaxe( Constants.CATEGORY_TOOLS ),
QuartzAxe( Constants.CATEGORY_TOOLS ),
QuartzKnife( Constants.CATEGORY_TOOLS ),
QuartzWrench( Constants.CATEGORY_TOOLS ),
ChargedStaff( Constants.CATEGORY_TOOLS ),
EntropyManipulator( Constants.CATEGORY_TOOLS ),
MatterCannon( Constants.CATEGORY_TOOLS ),
WirelessAccessTerminal( Constants.CATEGORY_TOOLS ),
ColorApplicator( Constants.CATEGORY_TOOLS ),
MeteoriteCompass( Constants.CATEGORY_TOOLS ),
QUARTZ_HOE( "QuartzHoe", Constants.CATEGORY_TOOLS ),
QUARTZ_SPADE( "QuartzSpade", Constants.CATEGORY_TOOLS ),
QUARTZ_SWORD( "QuartzSword", Constants.CATEGORY_TOOLS ),
QUARTZ_PICKAXE( "QuartzPickaxe", Constants.CATEGORY_TOOLS ),
QUARTZ_AXE( "QuartzAxe", Constants.CATEGORY_TOOLS ),
QUARTZ_KNIFE( "QuartzKnife", Constants.CATEGORY_TOOLS ),
QUARTZ_WRENCH( "QuartzWrench", Constants.CATEGORY_TOOLS ),
CHARGED_STAFF( "ChargedStaff", Constants.CATEGORY_TOOLS ),
ENTROPY_MANIPULATOR( "EntropyManipulator", Constants.CATEGORY_TOOLS ),
MATTER_CANNON( "MatterCannon", Constants.CATEGORY_TOOLS ),
WIRELESS_ACCESS_TERMINAL( "WirelessAccessTerminal", Constants.CATEGORY_TOOLS ),
COLOR_APPLICATOR( "ColorApplicator", Constants.CATEGORY_TOOLS ),
METEORITE_COMPASS( "MeteoriteCompass", Constants.CATEGORY_TOOLS ),
PowerGen( Constants.CATEGORY_NETWORK_FEATURES ),
Security( Constants.CATEGORY_NETWORK_FEATURES ),
SpatialIO( Constants.CATEGORY_NETWORK_FEATURES ),
QuantumNetworkBridge( Constants.CATEGORY_NETWORK_FEATURES ),
Channels( Constants.CATEGORY_NETWORK_FEATURES ),
POWER_GEN( "PowerGen", Constants.CATEGORY_NETWORK_FEATURES ),
SECURITY( "Security", Constants.CATEGORY_NETWORK_FEATURES ),
SPATIAL_IO( "SpatialIO", Constants.CATEGORY_NETWORK_FEATURES ),
QUANTUM_NETWORK_BRIDGE( "QuantumNetworkBridge", Constants.CATEGORY_NETWORK_FEATURES ),
CHANNELS( "Channels", Constants.CATEGORY_NETWORK_FEATURES ),
LevelEmitter( Constants.CATEGORY_NETWORK_BUSES ),
CraftingTerminal( Constants.CATEGORY_NETWORK_BUSES ),
StorageMonitor( Constants.CATEGORY_NETWORK_BUSES ),
P2PTunnel( Constants.CATEGORY_NETWORK_BUSES ),
FormationPlane( Constants.CATEGORY_NETWORK_BUSES ),
AnnihilationPlane( Constants.CATEGORY_NETWORK_BUSES ),
IdentityAnnihilationPlane( Constants.CATEGORY_NETWORK_BUSES ),
ImportBus( Constants.CATEGORY_NETWORK_BUSES ),
ExportBus( Constants.CATEGORY_NETWORK_BUSES ),
StorageBus( Constants.CATEGORY_NETWORK_BUSES ),
PartConversionMonitor( Constants.CATEGORY_NETWORK_BUSES ),
INTERFACE( "Interface", Constants.CATEGORY_NETWORK_BUSES ),
LEVEL_EMITTER( "LevelEmitter", Constants.CATEGORY_NETWORK_BUSES ),
CRAFTING_TERMINAL( "CraftingTerminal", Constants.CATEGORY_NETWORK_BUSES ),
TERMINAL( "Terminal", Constants.CATEGORY_NETWORK_BUSES ),
STORAGE_MONITOR( "StorageMonitor", Constants.CATEGORY_NETWORK_BUSES ),
P2P_TUNNEL( "P2PTunnel", Constants.CATEGORY_NETWORK_BUSES ),
FORMATION_PLANE( "FormationPlane", Constants.CATEGORY_NETWORK_BUSES ),
ANNIHILATION_PLANE( "AnnihilationPlane", Constants.CATEGORY_NETWORK_BUSES ),
IDENTITY_ANNIHILATION_PLANE( "IdentityAnnihilationPlane", Constants.CATEGORY_NETWORK_BUSES ),
IMPORT_BUS( "ImportBus", Constants.CATEGORY_NETWORK_BUSES ),
EXPORT_BUS( "ExportBus", Constants.CATEGORY_NETWORK_BUSES ),
STORAGE_BUS( "StorageBus", Constants.CATEGORY_NETWORK_BUSES ),
PART_CONVERSION_MONITOR( "PartConversionMonitor", Constants.CATEGORY_NETWORK_BUSES ),
TOGGLE_BUS( "ToggleBus", Constants.CATEGORY_NETWORK_BUSES ),
PANELS( "Panels", Constants.CATEGORY_NETWORK_BUSES ),
QUARTZ_FIBER( "QuartzFiber", Constants.CATEGORY_NETWORK_BUSES ),
CABLE_ANCHOR( "CableAnchor", Constants.CATEGORY_NETWORK_BUSES ),
PortableCell( Constants.CATEGORY_PORTABLE_CELL ),
PORTABLE_CELL( "PortableCell", Constants.CATEGORY_PORTABLE_CELL ),
StorageCells( Constants.CATEGORY_STORAGE ),
MEChest( Constants.CATEGORY_STORAGE ),
MEDrive( Constants.CATEGORY_STORAGE ),
IOPort( Constants.CATEGORY_STORAGE ),
STORAGE_CELLS( "StorageCells", Constants.CATEGORY_STORAGE ),
ME_CHEST( "MEChest", Constants.CATEGORY_STORAGE ),
ME_DRIVE( "MEDrive", Constants.CATEGORY_STORAGE ),
IO_PORT( "IOPort", Constants.CATEGORY_STORAGE ),
CONDENSER( "Condenser", Constants.CATEGORY_STORAGE ),
NetworkTool( Constants.CATEGORY_NETWORK_TOOL ),
NETWORK_TOOL( "NetworkTool", Constants.CATEGORY_NETWORK_TOOL ),
MEMORY_CARD( "MemoryCard", Constants.CATEGORY_NETWORK_TOOL ),
DenseEnergyCells( Constants.CATEGORY_HIGHER_CAPACITY ),
DenseCables( Constants.CATEGORY_HIGHER_CAPACITY ),
GLASS_CABLES( "GlassCables", Constants.CATEGORY_CABLES ),
COVERED_CABLES( "CoveredCables", Constants.CATEGORY_CABLES ),
SMART_CABLES( "SmartCables", Constants.CATEGORY_CABLES ),
P2PTunnelRF( Constants.CATEGORY_P2P_TUNNELS ),
P2PTunnelME( Constants.CATEGORY_P2P_TUNNELS ),
P2PTunnelItems( Constants.CATEGORY_P2P_TUNNELS ),
P2PTunnelRedstone( Constants.CATEGORY_P2P_TUNNELS ),
P2PTunnelEU( Constants.CATEGORY_P2P_TUNNELS ),
P2PTunnelLiquids( Constants.CATEGORY_P2P_TUNNELS ),
P2PTunnelLight( Constants.CATEGORY_P2P_TUNNELS ),
P2PTunnelOpenComputers( Constants.CATEGORY_P2P_TUNNELS ),
P2PTunnelPressure( Constants.CATEGORY_P2P_TUNNELS ),
ENERGY_CELLS( "EnergyCells", Constants.CATEGORY_ENERGY ),
ENERGY_ACCEPTOR( "EnergyAcceptor", Constants.CATEGORY_ENERGY ),
MassCannonBlockDamage( Constants.CATEGORY_BLOCK_FEATURES ),
TinyTNTBlockDamage( Constants.CATEGORY_BLOCK_FEATURES ),
DENSE_ENERGY_CELLS( "DenseEnergyCells", Constants.CATEGORY_HIGHER_CAPACITY ),
DENSE_CABLES( "DenseCables", Constants.CATEGORY_HIGHER_CAPACITY ),
Facades( Constants.CATEGORY_FACADES ),
P2P_TUNNEL_RF( "P2PTunnelRF", Constants.CATEGORY_P2P_TUNNELS ),
P2P_TUNNEL_ME( "P2PTunnelME", Constants.CATEGORY_P2P_TUNNELS ),
P2P_TUNNEL_ITEMS( "P2PTunnelItems", Constants.CATEGORY_P2P_TUNNELS ),
P2P_TUNNEL_REDSTONE( "P2PTunnelRedstone", Constants.CATEGORY_P2P_TUNNELS ),
P2P_TUNNEL_EU( "P2PTunnelEU", Constants.CATEGORY_P2P_TUNNELS ),
P2P_TUNNEL_LIQUIDS( "P2PTunnelLiquids", Constants.CATEGORY_P2P_TUNNELS ),
P2P_TUNNEL_LIGHT( "P2PTunnelLight", Constants.CATEGORY_P2P_TUNNELS ),
P2P_TUNNEL_OPEN_COMPUTERS( "P2PTunnelOpenComputers", Constants.CATEGORY_P2P_TUNNELS ),
P2P_TUNNEL_PRESSURE( "P2PTunnelPressure", Constants.CATEGORY_P2P_TUNNELS ),
UnsupportedDeveloperTools( Constants.CATEGORY_MISC, false ),
Creative( Constants.CATEGORY_MISC ),
GrinderLogging( Constants.CATEGORY_MISC, false ),
Logging( Constants.CATEGORY_MISC ),
IntegrationLogging( Constants.CATEGORY_MISC, false ),
WebsiteRecipes( Constants.CATEGORY_MISC, false ),
LogSecurityAudits( Constants.CATEGORY_MISC, false ),
Achievements( Constants.CATEGORY_MISC ),
UpdateLogging( Constants.CATEGORY_MISC, false ),
PacketLogging( Constants.CATEGORY_MISC, false ),
CraftingLog( Constants.CATEGORY_MISC, false ),
LightDetector( Constants.CATEGORY_MISC ),
DebugLogging( Constants.CATEGORY_MISC, false ),
MASS_CANNON_BLOCK_DAMAGE( "MassCannonBlockDamage", Constants.CATEGORY_BLOCK_FEATURES ),
TINY_TNT_BLOCK_DAMAGE( "TinyTNTBlockDamage", Constants.CATEGORY_BLOCK_FEATURES ),
EnableFacadeCrafting( Constants.CATEGORY_CRAFTING ),
InWorldSingularity( Constants.CATEGORY_CRAFTING ),
InWorldFluix( Constants.CATEGORY_CRAFTING ),
InWorldPurification( Constants.CATEGORY_CRAFTING ),
InterfaceTerminal( Constants.CATEGORY_CRAFTING ),
EnableDisassemblyCrafting( Constants.CATEGORY_CRAFTING ),
FACADES( "Facades", Constants.CATEGORY_FACADES ),
AlphaPass( Constants.CATEGORY_RENDERING ),
PaintBalls( Constants.CATEGORY_TOOLS ),
UNSUPPORTED_DEVELOPER_TOOLS( "UnsupportedDeveloperTools", Constants.CATEGORY_MISC, false ),
CREATIVE( "Creative", Constants.CATEGORY_MISC ),
GRINDER_LOGGING( "GrinderLogging", Constants.CATEGORY_MISC, false ),
LOGGING( "Logging", Constants.CATEGORY_MISC ),
INTEGRATION_LOGGING( "IntegrationLogging", Constants.CATEGORY_MISC, false ),
WEBSITE_RECIPES( "WebsiteRecipes", Constants.CATEGORY_MISC, false ),
LOG_SECURITY_AUDITS( "LogSecurityAudits", Constants.CATEGORY_MISC, false ),
ACHIEVEMENTS( "Achievements", Constants.CATEGORY_MISC ),
UPDATE_LOGGING( "UpdateLogging", Constants.CATEGORY_MISC, false ),
PACKET_LOGGING( "PacketLogging", Constants.CATEGORY_MISC, false ),
CRAFTING_LOG( "CraftingLog", Constants.CATEGORY_MISC, false ),
LIGHT_DETECTOR( "LightDetector", Constants.CATEGORY_MISC ),
DEBUG_LOGGING( "DebugLogging", Constants.CATEGORY_MISC, false ),
MolecularAssembler( Constants.CATEGORY_CRAFTING_FEATURES ),
Patterns( Constants.CATEGORY_CRAFTING_FEATURES ),
CraftingCPU( Constants.CATEGORY_CRAFTING_FEATURES ),
ENABLE_FACADE_CRAFTING( "EnableFacadeCrafting", Constants.CATEGORY_CRAFTING ),
IN_WORLD_SINGULARITY( "InWorldSingularity", Constants.CATEGORY_CRAFTING ),
IN_WORLD_FLUIX( "InWorldFluix", Constants.CATEGORY_CRAFTING ),
IN_WORLD_PURIFICATION( "InWorldPurification", Constants.CATEGORY_CRAFTING ),
INTERFACE_TERMINAL( "InterfaceTerminal", Constants.CATEGORY_CRAFTING ),
ENABLE_DISASSEMBLY_CRAFTING( "EnableDisassemblyCrafting", Constants.CATEGORY_CRAFTING ),
ChunkLoggerTrace( Constants.CATEGORY_COMMANDS, false );
ALPHA_PASS( "AlphaPass", Constants.CATEGORY_RENDERING ),
PAINT_BALLS( "PaintBalls", Constants.CATEGORY_TOOLS ),
public final String category;
public final boolean defaultValue;
MOLECULAR_ASSEMBLER( "MolecularAssembler", Constants.CATEGORY_CRAFTING_FEATURES ),
PATTERNS( "Patterns", Constants.CATEGORY_CRAFTING_FEATURES ),
CRAFTING_CPU( "CraftingCPU", Constants.CATEGORY_CRAFTING_FEATURES ),
AEFeature( final String cat )
BASIC_CARDS( "BasicCards", Constants.CATEGORY_UPGRADES ),
ADVANCED_CARDS( "AdvancedCards", Constants.CATEGORY_UPGRADES ),
VIEW_CELL( "ViewCell", Constants.CATEGORY_UPGRADES ),
PROCESSORS( "Processors", Constants.CATEGORY_MATERIALS ),
PRINTED_CIRCUITS( "PrintedCircuits", Constants.CATEGORY_MATERIALS ),
PRESSES( "Presses", Constants.CATEGORY_MATERIALS ),
CRYSTAL_SEEDS( "CrystalSeeds", Constants.CATEGORY_MATERIALS ),
PURE_CRYSTALS( "PureCrystals", Constants.CATEGORY_MATERIALS ),
CERTUS( "Certus", Constants.CATEGORY_MATERIALS ),
FLUIX( "Fluix", Constants.CATEGORY_MATERIALS ),
SILICON( "Silicon", Constants.CATEGORY_MATERIALS ),
DUSTS( "Dusts", Constants.CATEGORY_MATERIALS ),
NUGGETS( "Nuggets", Constants.CATEGORY_MATERIALS ),
MATTER_BALL( "MatterBall", Constants.CATEGORY_MATERIALS ),
CORES( "Cores", Constants.CATEGORY_MATERIALS ),
CHUNK_LOGGER_TRACE( "ChunkLoggerTrace", Constants.CATEGORY_COMMANDS, false );
private final String key;
private final String category;
private final boolean enabled;
AEFeature( final String key, final String cat )
{
this( cat, true );
this( key, cat, true );
}
AEFeature( final String cat, final boolean defaultValue )
AEFeature( final String key, final String cat, final boolean enabled )
{
this.key = key;
this.category = cat;
this.defaultValue = defaultValue;
this.enabled = enabled;
}
/**
@@ -163,6 +201,21 @@ public enum AEFeature
return true;
}
public String key()
{
return key;
}
public String category()
{
return category;
}
public boolean isEnabled()
{
return enabled;
}
private enum Constants
{
;
@@ -177,6 +230,7 @@ public enum AEFeature
private static final String CATEGORY_BLOCK_FEATURES = "BlockFeatures";
private static final String CATEGORY_CRAFTING_FEATURES = "CraftingFeatures";
private static final String CATEGORY_STORAGE = "Storage";
private static final String CATEGORY_CABLES = "Cables";
private static final String CATEGORY_HIGHER_CAPACITY = "HigherCapacity";
private static final String CATEGORY_NETWORK_FEATURES = "NetworkFeatures";
private static final String CATEGORY_COMMANDS = "Commands";
@@ -184,5 +238,8 @@ public enum AEFeature
private static final String CATEGORY_FACADES = "Facades";
private static final String CATEGORY_NETWORK_TOOL = "NetworkTool";
private static final String CATEGORY_PORTABLE_CELL = "PortableCell";
private static final String CATEGORY_ENERGY = "Energy";
private static final String CATEGORY_UPGRADES = "Upgrades";
private static final String CATEGORY_MATERIALS = "Materials";
}
}
@@ -73,7 +73,7 @@ public class ItemDefinition implements IItemDefinition
@Override
public final boolean isSameAs( final ItemStack comparableStack )
{
return isEnabled() && Platform.isSameItemType( comparableStack, this.maybeStack( 1 ).get() );
return isEnabled() && Platform.itemComparisons().isEqualItemType( comparableStack, this.maybeStack( 1 ).get() );
}
}
@@ -30,12 +30,14 @@ import appeng.items.materials.MaterialType;
public class MaterialStackSrc implements IStackSrc
{
private final MaterialType src;
private final boolean enabled;
public MaterialStackSrc( final MaterialType src )
public MaterialStackSrc( final MaterialType src, boolean enabled )
{
Preconditions.checkNotNull( src );
this.src = src;
this.enabled = enabled;
}
@Override
@@ -59,6 +61,6 @@ public class MaterialStackSrc implements IStackSrc
@Override
public boolean isEnabled()
{
return true;
return this.enabled;
}
}
@@ -125,7 +125,7 @@ public final class GrinderRecipeManager implements IGrinderRegistry, IOreListene
{
for( final IGrinderEntry gr : this.recipes )
{
if( Platform.isSameItemPrecise( gr.getInput(), appEngGrinderRecipe.getInput() ) )
if( Platform.itemComparisons().isSameItem( gr.getInput(), appEngGrinderRecipe.getInput() ) )
{
return;
}
@@ -151,7 +151,7 @@ public final class GrinderRecipeManager implements IGrinderRegistry, IOreListene
{
for( final IGrinderEntry r : this.recipes )
{
if( Platform.isSameItem( input, r.getInput() ) )
if( Platform.itemComparisons().isEqualItem( input, r.getInput() ) )
{
this.log( "Recipe for " + input.getUnlocalizedName() + " found " + Platform.getItemDisplayName( r.getOutput() ) );
return r;
@@ -204,7 +204,7 @@ public final class GrinderRecipeManager implements IGrinderRegistry, IOreListene
{
final ItemStack extra = is.copy();
extra.stackSize = ratio - 1;
this.addRecipe( item, is, extra, (float) ( AEConfig.instance.oreDoublePercentage / 100.0 ), 8 );
this.addRecipe( item, is, extra, (float) ( AEConfig.instance().getOreDoublePercentage() / 100.0 ), 8 );
}
else
{
@@ -256,7 +256,7 @@ public final class GrinderRecipeManager implements IGrinderRegistry, IOreListene
{
final ItemStack extra = is.copy();
extra.stackSize = ratio - 1;
this.addRecipe( d.getKey(), is, extra, (float) ( AEConfig.instance.oreDoublePercentage / 100.0 ), 8 );
this.addRecipe( d.getKey(), is, extra, (float) ( AEConfig.instance().getOreDoublePercentage() / 100.0 ), 8 );
}
else
{
@@ -279,7 +279,7 @@ public final class GrinderRecipeManager implements IGrinderRegistry, IOreListene
{
if( name.startsWith( "ore" ) || name.startsWith( "crystal" ) || name.startsWith( "gem" ) || name.startsWith( "ingot" ) || name.startsWith( "dust" ) )
{
for( final String ore : AEConfig.instance.grinderOres )
for( final String ore : AEConfig.instance().getGrinderOres() )
{
if( name.equals( "ore" + ore ) )
{
@@ -52,7 +52,7 @@ public class MatterCannonAmmoRegistry implements IOreListener, IMatterCannonAmmo
{
for( final ItemStack o : this.DamageModifiers.keySet() )
{
if( Platform.isSameItem( o, is ) )
if( Platform.itemComparisons().isEqualItem( o, is ) )
{
return this.DamageModifiers.get( o ).floatValue();
}
@@ -87,7 +87,7 @@ public class MatterCannonAmmoRegistry implements IOreListener, IMatterCannonAmmo
this.considerItem( name, item, "Sodium", 22.9897 );
this.considerItem( name, item, "Magnesium", 24.305 );
this.considerItem( name, item, "Aluminum", 26.9815 );
this.considerItem( name, item, "Silicon", 28.0855 );
this.considerItem( name, item, "SILICON", 28.0855 );
this.considerItem( name, item, "Phosphorus", 30.9738 );
this.considerItem( name, item, "Sulfur", 32.065 );
this.considerItem( name, item, "Potassium", 39.0983 );
@@ -146,7 +146,7 @@ public final class P2PTunnelRegistry implements IP2PTunnelRegistry
return this.tunnels.get( is );
}
if( Platform.isSameItem( is, trigger ) )
if( Platform.itemComparisons().isEqualItem( is, trigger ) )
{
return this.tunnels.get( is );
}
@@ -37,6 +37,8 @@ public enum TickRates
Inscriber( 1, 1 ),
Charger( 10, 120 ),
IOPort( 1, 5 ),
VibrationChamber( 10, 40 ),
@@ -54,7 +54,7 @@ public class AchievementCraftingHandler
switch( achievement.getType() )
{
case Craft:
if( Platform.isSameItemPrecise( achievement.getStack(), event.crafting ) )
if( Platform.itemComparisons().isSameItem( achievement.getStack(), event.crafting ) )
{
achievement.addToPlayer( event.player );
return;
@@ -54,7 +54,7 @@ public class AchievementPickupHandler
for( final Achievements achievement : Achievements.values() )
{
if( achievement.getType() == AchievementType.Pickup && Platform.isSameItemPrecise( achievement.getStack(), is ) )
if( achievement.getType() == AchievementType.Pickup && Platform.itemComparisons().isSameItem( achievement.getStack(), is ) )
{
achievement.addToPlayer( event.player );
return;
@@ -32,7 +32,7 @@ import appeng.core.features.AEFeature;
/**
* Registers any items a player is picking up or is crafting.
* Registered items are added to the player stats.
* This will only happen if the {@link AEFeature#Achievements} feature is enabled.
* This will only happen if the {@link AEFeature#ACHIEVEMENTS} feature is enabled.
*/
public class PlayerStatsRegistration
{
@@ -43,7 +43,7 @@ public class PlayerStatsRegistration
private final EventBus bus;
/**
* is true if the {@link appeng.core.features.AEFeature#Achievements} is enabled in the
* is true if the {@link appeng.core.features.AEFeature#ACHIEVEMENTS} is enabled in the
*
* @param config
*/
@@ -55,12 +55,12 @@ public class PlayerStatsRegistration
*
* @param bus {@see #bus}
* @param config {@link appeng.core.AEConfig} which is used to determine if the
* {@link appeng.core.features.AEFeature#Achievements} is enabled
* {@link appeng.core.features.AEFeature#ACHIEVEMENTS} is enabled
*/
public PlayerStatsRegistration( final EventBus bus, final AEConfig config )
{
this.bus = bus;
this.isAchievementFeatureEnabled = config.isFeatureEnabled( AEFeature.Achievements );
this.isAchievementFeatureEnabled = config.isFeatureEnabled( AEFeature.ACHIEVEMENTS );
}
/**
@@ -71,9 +71,9 @@ public abstract class AppEngPacket implements Packet
throw new IllegalArgumentException( "Sorry AE2 made a " + this.p.array().length + " byte packet by accident!" );
}
final FMLProxyPacket pp = new FMLProxyPacket( this.p, NetworkHandler.instance.getChannel() );
final FMLProxyPacket pp = new FMLProxyPacket( this.p, NetworkHandler.instance().getChannel() );
if( AEConfig.instance.isFeatureEnabled( AEFeature.PacketLogging ) )
if( AEConfig.instance().isFeatureEnabled( AEFeature.PACKET_LOGGING ) )
{
AELog.info( this.getClass().getName() + " : " + pp.payload().readableBytes() );
}
@@ -38,7 +38,6 @@ import appeng.core.sync.packets.PacketLightning;
import appeng.core.sync.packets.PacketMEInventoryUpdate;
import appeng.core.sync.packets.PacketMatterCannon;
import appeng.core.sync.packets.PacketMockExplosion;
import appeng.core.sync.packets.PacketMultiPart;
import appeng.core.sync.packets.PacketJEIRecipe;
import appeng.core.sync.packets.PacketNewStorageDimension;
import appeng.core.sync.packets.PacketPaintedEntity;
@@ -68,8 +67,6 @@ public class AppEngPacketHandlerBase
PACKET_CONFIG_BUTTON( PacketConfigButton.class ),
PACKET_MULTIPART( PacketMultiPart.class ),
PACKET_PART_PLACEMENT( PacketPartPlacement.class ),
PACKET_LIGHTNING( PacketLightning.class ),
@@ -37,7 +37,7 @@ import appeng.core.worlddata.WorldData;
public class NetworkHandler
{
public static NetworkHandler instance;
private static NetworkHandler instance;
private final FMLEventChannel ec;
private final String myChannelName;
@@ -55,6 +55,16 @@ public class NetworkHandler
this.serveHandler = this.createServerSide();
}
public static void init( final String channelName )
{
instance = new NetworkHandler( channelName );
}
public static NetworkHandler instance()
{
return instance;
}
private IPacketHandler createClientSide()
{
try
@@ -70,7 +70,7 @@ public class PacketCompassRequest extends AppEngPacket implements ICompassCallba
@Override
public void calculatedDirection( final boolean hasResult, final boolean spin, final double radians, final double dist )
{
NetworkHandler.instance.sendTo( new PacketCompassResponse( this, hasResult, spin, radians ), (EntityPlayerMP) this.talkBackTo );
NetworkHandler.instance().sendTo( new PacketCompassResponse( this, hasResult, spin, radians ), (EntityPlayerMP) this.talkBackTo );
}
@Override
@@ -59,7 +59,7 @@ import appeng.items.storage.ItemViewCell;
import appeng.util.InventoryAdaptor;
import appeng.util.Platform;
import appeng.util.item.AEItemStack;
import appeng.util.prioitylist.IPartitionList;
import appeng.util.prioritylist.IPartitionList;
public class PacketJEIRecipe extends AppEngPacket
@@ -167,7 +167,7 @@ public class PacketJEIRecipe extends AppEngPacket
final ItemStack newItemStack = r.matches( testInv, pmp.worldObj ) ? r.getCraftingResult( testInv ) : null;
testInv.setInventorySlotContents( x, patternItem );
if( newItemStack == null || !Platform.isSameItemPrecise( newItemStack, is ) )
if( newItemStack == null || !Platform.itemComparisons().isSameItem( newItemStack, is ) )
{
final IAEItemStack in = AEItemStack.create( currentItem );
if( in != null )
@@ -73,7 +73,7 @@ public class PacketLightning extends AppEngPacket
{
try
{
if( Platform.isClient() && AEConfig.instance.enableEffects )
if( Platform.isClient() && AEConfig.instance().isEnableEffects() )
{
final LightningFX fx = new LightningFX( ClientHelper.proxy.getWorld(), this.x, this.y, this.z, 0.0f, 0.0f, 0.0f );
Minecraft.getMinecraft().effectRenderer.addEffect( fx );
@@ -1,64 +0,0 @@
/*
* 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.core.sync.packets;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraftforge.common.MinecraftForge;
import appeng.core.sync.AppEngPacket;
import appeng.core.sync.network.INetworkInfo;
import appeng.integration.IntegrationRegistry;
import appeng.integration.IntegrationType;
import appeng.integration.abstraction.IFMP;
public class PacketMultiPart extends AppEngPacket
{
// automatic.
public PacketMultiPart( final ByteBuf stream )
{
}
// api
public PacketMultiPart()
{
final ByteBuf data = Unpooled.buffer();
data.writeInt( this.getPacketID() );
this.configureWrite( data );
}
@Override
public void serverPacketData( final INetworkInfo manager, final AppEngPacket packet, final EntityPlayer player )
{
final IFMP fmp = (IFMP) IntegrationRegistry.INSTANCE.getInstance( IntegrationType.FMP );
if( fmp != null )
{
final EntityPlayerMP sender = (EntityPlayerMP) player;
MinecraftForge.EVENT_BUS.post( fmp.newFMPPacketEvent( sender ) ); // when received it just posts this event.
}
}
}

Some files were not shown because too many files have changed in this diff Show More