Compare commits
60 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e0bf7223e0 | |||
| ba9af94228 | |||
| 122b6163dc | |||
| fab42ccc75 | |||
| f5dd2c8b0a | |||
| a126112a2d | |||
| 99cda5f5a3 | |||
| 56a5363528 | |||
| be65edbd5b | |||
| fe5d9251eb | |||
| 3cf48b2291 | |||
| cc4599b5fc | |||
| c1fa77df51 | |||
| 725fa491e6 | |||
| e2a6cd1d57 | |||
| 6ddf60fab8 | |||
| 2c07acfe81 | |||
| 3749742231 | |||
| 74b9610b45 | |||
| a725779ff6 | |||
| b82df25c75 | |||
| cc9b33b473 | |||
| 5496b746ea | |||
| f80f623ccf | |||
| cba6c5500f | |||
| bc8268af94 | |||
| 297cd16702 | |||
| 41711e50b9 | |||
| 2bfb8b75e8 | |||
| 58e96aa3de | |||
| 4f07b63b13 | |||
| 905dd6c888 | |||
| ab7f35a9ee | |||
| 6e81f698c0 | |||
| 8ad8ce68b5 | |||
| 644194d0d6 | |||
| 95b27f490c | |||
| 6032c0328e | |||
| e8d554d69d | |||
| 1e15b23506 | |||
| 2ed7a5598a | |||
| 1c05dd5834 | |||
| 632d124359 | |||
| 829c18e2bb | |||
| d3a5be7ed6 | |||
| 217cbf0982 | |||
| 4dd0a4cd96 | |||
| 54c0ce43ea | |||
| bd8f43acbf | |||
| 970630a90d | |||
| 771a944058 | |||
| db1cd8c312 | |||
| 375e1efb15 | |||
| 955fcac92a | |||
| 216e2cb1e3 | |||
| 53f5724657 | |||
| a3269826f9 | |||
| 1a918be658 | |||
| 90130e72aa | |||
| c8f10d92bb |
+10
-9
@@ -7,25 +7,26 @@ aebasename=appliedenergistics2
|
|||||||
#########################################################
|
#########################################################
|
||||||
# Versions #
|
# Versions #
|
||||||
#########################################################
|
#########################################################
|
||||||
minecraft_version=1.12
|
minecraft_version=1.12.2
|
||||||
mcp_mappings=snapshot_20170704
|
mcp_mappings=snapshot_20171003
|
||||||
forge_version=14.21.1.2412
|
forge_version=14.23.0.2491
|
||||||
|
|
||||||
#########################################################
|
#########################################################
|
||||||
# Installable #
|
# Installable #
|
||||||
#########################################################
|
#########################################################
|
||||||
hwyla_version=1.8.19-B33_1.12
|
hwyla_version=1.8.20-B35_1.12
|
||||||
|
|
||||||
#########################################################
|
#########################################################
|
||||||
# Provided APIs #
|
# Provided APIs #
|
||||||
#########################################################
|
#########################################################
|
||||||
jei_version=4.7.1.69
|
jei_version=4.8.0.105
|
||||||
tesla_version=1.0.61
|
tesla_version=1.0.61
|
||||||
ic2_version=2.8.9-ex112
|
ic2_version=2.8.19-ex112
|
||||||
top_version=1.12-1.4.8-2
|
top_version=1.12-1.4.18-10
|
||||||
|
cofhcore_version=1.12-4.+
|
||||||
|
|
||||||
#########################################################
|
#########################################################
|
||||||
# Deployment #
|
# Deployment #
|
||||||
#########################################################
|
#########################################################
|
||||||
website_version=1.12.x
|
website_version=1.12.2
|
||||||
curse_versions=1.12,1.12.1
|
curse_versions=1.12.2
|
||||||
|
|||||||
@@ -69,16 +69,14 @@ dependencies {
|
|||||||
mods "mcp.mobius.waila:Hwyla:${hwyla_version}"
|
mods "mcp.mobius.waila:Hwyla:${hwyla_version}"
|
||||||
mods "net.industrial-craft:industrialcraft-2:${ic2_version}:dev"
|
mods "net.industrial-craft:industrialcraft-2:${ic2_version}:dev"
|
||||||
mods "mcjty.theoneprobe:TheOneProbe-${minecraft_version}:${top_version}"
|
mods "mcjty.theoneprobe:TheOneProbe-${minecraft_version}:${top_version}"
|
||||||
// mods "com.github.mcjty:compatlayer:${compatlayer_version}"
|
|
||||||
|
|
||||||
// compile against provided APIs
|
// compile against provided APIs
|
||||||
compileOnly "mezz.jei:jei_${minecraft_version}:${jei_version}:api"
|
compileOnly "mezz.jei:jei_${minecraft_version}:${jei_version}:api"
|
||||||
compileOnly "mcp.mobius.waila:Hwyla:${hwyla_version}"
|
compileOnly "mcp.mobius.waila:Hwyla:${hwyla_version}"
|
||||||
compileOnly "net.darkhax.tesla:Tesla-${minecraft_version}:${tesla_version}"
|
compileOnly "net.darkhax.tesla:Tesla-1.12:${tesla_version}"
|
||||||
compileOnly "net.industrial-craft:industrialcraft-2:${ic2_version}:api"
|
compileOnly "net.industrial-craft:industrialcraft-2:${ic2_version}:api"
|
||||||
compileOnly "mcjty.theoneprobe:TheOneProbe-1.12:${top_version}:api"
|
compileOnly "mcjty.theoneprobe:TheOneProbe-1.12:${top_version}:api"
|
||||||
|
compileOnly "cofh:CoFHCore:${cofhcore_version}:deobf"
|
||||||
// deobfCompile "mcp.mobius.waila:Hwyla:${hwyla_version}"
|
|
||||||
|
|
||||||
// at runtime, use the full JEI jar
|
// at runtime, use the full JEI jar
|
||||||
runtime "mezz.jei:jei_${minecraft_version}:${jei_version}"
|
runtime "mezz.jei:jei_${minecraft_version}:${jei_version}"
|
||||||
|
|||||||
@@ -25,14 +25,13 @@ package appeng.api;
|
|||||||
|
|
||||||
|
|
||||||
import appeng.api.definitions.IDefinitions;
|
import appeng.api.definitions.IDefinitions;
|
||||||
import appeng.api.exceptions.FailedConnection;
|
|
||||||
import appeng.api.features.IRegistryContainer;
|
import appeng.api.features.IRegistryContainer;
|
||||||
import appeng.api.networking.IGridBlock;
|
import appeng.api.networking.IGridHelper;
|
||||||
import appeng.api.networking.IGridConnection;
|
|
||||||
import appeng.api.networking.IGridNode;
|
import appeng.api.networking.IGridNode;
|
||||||
import appeng.api.parts.IPartHelper;
|
import appeng.api.parts.IPartHelper;
|
||||||
import appeng.api.storage.IStorageHelper;
|
import appeng.api.storage.IStorageHelper;
|
||||||
|
|
||||||
|
|
||||||
@AEInjectable
|
@AEInjectable
|
||||||
public interface IAppEngApi
|
public interface IAppEngApi
|
||||||
{
|
{
|
||||||
@@ -42,36 +41,23 @@ public interface IAppEngApi
|
|||||||
IRegistryContainer registries();
|
IRegistryContainer registries();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return helper for working with storage data types.
|
* @return A helper for working with storage data types.
|
||||||
*/
|
*/
|
||||||
IStorageHelper storage();
|
IStorageHelper storage();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return helper for working with grids, and buses.
|
* @return A helper to create {@link IGridNode} and other grid related objects.
|
||||||
|
*/
|
||||||
|
IGridHelper grid();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return A helper for working with grids, and buses.
|
||||||
*/
|
*/
|
||||||
IPartHelper partHelper();
|
IPartHelper partHelper();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return an accessible list of all AE definitions
|
* @return An accessible list of all AE definitions
|
||||||
*/
|
*/
|
||||||
IDefinitions definitions();
|
IDefinitions definitions();
|
||||||
|
|
||||||
/**
|
|
||||||
* create a grid node for your {@link appeng.api.networking.IGridHost}
|
|
||||||
*
|
|
||||||
* @param block grid block
|
|
||||||
*
|
|
||||||
* @return grid node of block
|
|
||||||
*/
|
|
||||||
IGridNode createGridNode( IGridBlock block );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* create a connection between two {@link appeng.api.networking.IGridNode}
|
|
||||||
*
|
|
||||||
* @param a to be connected gridnode
|
|
||||||
* @param b to be connected gridnode
|
|
||||||
*
|
|
||||||
* @throws appeng.api.exceptions.FailedConnection
|
|
||||||
*/
|
|
||||||
IGridConnection createGridConnection( IGridNode a, IGridNode b ) throws FailedConnection;
|
|
||||||
}
|
}
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
/*
|
|
||||||
* The MIT License (MIT)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2013 AlgorithmX2
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
* this software and associated documentation files (the "Software"), to deal in
|
|
||||||
* the Software without restriction, including without limitation the rights to
|
|
||||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
||||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
|
||||||
* subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
||||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
||||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package appeng.api.client;
|
|
||||||
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
|
||||||
|
|
||||||
import net.minecraft.block.state.IBlockState;
|
|
||||||
import net.minecraft.client.renderer.block.model.IBakedModel;
|
|
||||||
import net.minecraft.util.EnumFacing;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: Needs to be moved to an internal class. API is only allowed to contain interfaces and/or data.
|
|
||||||
*
|
|
||||||
* @deprecated
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public class BakingPipeline<F, T> implements BakingPipelineElement<F, T>
|
|
||||||
{
|
|
||||||
|
|
||||||
private final ImmutableList<BakingPipelineElement<?, ?>> pipeline;
|
|
||||||
|
|
||||||
public BakingPipeline( BakingPipelineElement<?, ?>... pipeline )
|
|
||||||
{
|
|
||||||
this.pipeline = ImmutableList.copyOf( pipeline );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: fix generics
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public List pipe( List things, IBakedModel parent, IBlockState state, EnumFacing side, long rand )
|
|
||||||
{
|
|
||||||
for( BakingPipelineElement pipe : this.pipeline )
|
|
||||||
{
|
|
||||||
things = pipe.pipe( things, parent, state, side, rand );
|
|
||||||
}
|
|
||||||
return things;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
/*
|
|
||||||
* The MIT License (MIT)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2013 AlgorithmX2
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
* this software and associated documentation files (the "Software"), to deal in
|
|
||||||
* the Software without restriction, including without limitation the rights to
|
|
||||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
||||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
|
||||||
* subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
||||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
||||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package appeng.api.client;
|
|
||||||
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import net.minecraft.block.state.IBlockState;
|
|
||||||
import net.minecraft.client.renderer.block.model.IBakedModel;
|
|
||||||
import net.minecraft.util.EnumFacing;
|
|
||||||
|
|
||||||
|
|
||||||
public interface BakingPipelineElement<F, T>
|
|
||||||
{
|
|
||||||
|
|
||||||
public List<T> pipe( List<F> elements, IBakedModel parent, IBlockState state, EnumFacing side, long rand );
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -26,5 +26,5 @@ package appeng.api.config;
|
|||||||
|
|
||||||
public enum SearchBoxMode
|
public enum SearchBoxMode
|
||||||
{
|
{
|
||||||
AUTOSEARCH, MANUAL_SEARCH, JEI_AUTOSEARCH, JEI_MANUAL_SEARCH
|
AUTOSEARCH, AUTOSEARCH_KEEP, MANUAL_SEARCH, MANUAL_SEARCH_KEEP, JEI_AUTOSEARCH, JEI_AUTOSEARCH_KEEP, JEI_MANUAL_SEARCH, JEI_MANUAL_SEARCH_KEEP
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,29 +33,53 @@ public enum Settings
|
|||||||
{
|
{
|
||||||
LEVEL_EMITTER_MODE( EnumSet.allOf( LevelEmitterMode.class ) ),
|
LEVEL_EMITTER_MODE( EnumSet.allOf( LevelEmitterMode.class ) ),
|
||||||
|
|
||||||
REDSTONE_EMITTER( EnumSet.of( RedstoneMode.HIGH_SIGNAL, RedstoneMode.LOW_SIGNAL ) ), REDSTONE_CONTROLLED( EnumSet.allOf( RedstoneMode.class ) ),
|
REDSTONE_EMITTER( EnumSet.of( RedstoneMode.HIGH_SIGNAL, RedstoneMode.LOW_SIGNAL ) ),
|
||||||
|
|
||||||
|
REDSTONE_CONTROLLED( EnumSet.allOf( RedstoneMode.class ) ),
|
||||||
|
|
||||||
CONDENSER_OUTPUT( EnumSet.allOf( CondenserOutput.class ) ),
|
CONDENSER_OUTPUT( EnumSet.allOf( CondenserOutput.class ) ),
|
||||||
|
|
||||||
POWER_UNITS( EnumSet.allOf( PowerUnits.class ) ), ACCESS( EnumSet.of( AccessRestriction.READ_WRITE, AccessRestriction.READ, AccessRestriction.WRITE ) ),
|
POWER_UNITS( EnumSet.allOf( PowerUnits.class ) ),
|
||||||
|
|
||||||
SORT_DIRECTION( EnumSet.allOf( SortDir.class ) ), SORT_BY( EnumSet.allOf( SortOrder.class ) ),
|
ACCESS( EnumSet.of( AccessRestriction.READ_WRITE, AccessRestriction.READ, AccessRestriction.WRITE ) ),
|
||||||
|
|
||||||
SEARCH_TOOLTIPS( EnumSet.of( YesNo.YES, YesNo.NO ) ), VIEW_MODE( EnumSet.allOf( ViewItems.class ) ), SEARCH_MODE( EnumSet.allOf( SearchBoxMode.class ) ),
|
SORT_DIRECTION( EnumSet.allOf( SortDir.class ) ),
|
||||||
|
|
||||||
ACTIONS( EnumSet.allOf( ActionItems.class ) ), IO_DIRECTION( EnumSet.of( RelativeDirection.LEFT, RelativeDirection.RIGHT ) ),
|
SORT_BY( EnumSet.allOf( SortOrder.class ) ),
|
||||||
|
|
||||||
BLOCK( EnumSet.of( YesNo.YES, YesNo.NO ) ), OPERATION_MODE( EnumSet.allOf( OperationMode.class ) ),
|
SEARCH_TOOLTIPS( EnumSet.of( YesNo.YES, YesNo.NO ) ),
|
||||||
|
|
||||||
FULLNESS_MODE( EnumSet.allOf( FullnessMode.class ) ), CRAFT_ONLY( EnumSet.of( YesNo.YES, YesNo.NO ) ),
|
VIEW_MODE( EnumSet.allOf( ViewItems.class ) ),
|
||||||
|
|
||||||
FUZZY_MODE( EnumSet.allOf( FuzzyMode.class ) ), LEVEL_TYPE( EnumSet.allOf( LevelType.class ) ),
|
SEARCH_MODE( EnumSet.allOf( SearchBoxMode.class ) ),
|
||||||
|
|
||||||
TERMINAL_STYLE( EnumSet.of( TerminalStyle.TALL, TerminalStyle.SMALL ) ), COPY_MODE( EnumSet.allOf( CopyMode.class ) ),
|
ACTIONS( EnumSet.allOf( ActionItems.class ) ),
|
||||||
|
|
||||||
INTERFACE_TERMINAL( EnumSet.of( YesNo.YES, YesNo.NO ) ), CRAFT_VIA_REDSTONE( EnumSet.of( YesNo.YES, YesNo.NO ) ),
|
IO_DIRECTION( EnumSet.of( RelativeDirection.LEFT, RelativeDirection.RIGHT ) ),
|
||||||
|
|
||||||
STORAGE_FILTER( EnumSet.allOf( StorageFilter.class ) ), PLACE_BLOCK( EnumSet.of( YesNo.YES, YesNo.NO ) ),
|
BLOCK( EnumSet.of( YesNo.YES, YesNo.NO ) ),
|
||||||
|
|
||||||
|
OPERATION_MODE( EnumSet.allOf( OperationMode.class ) ),
|
||||||
|
|
||||||
|
FULLNESS_MODE( EnumSet.allOf( FullnessMode.class ) ),
|
||||||
|
|
||||||
|
CRAFT_ONLY( EnumSet.of( YesNo.YES, YesNo.NO ) ),
|
||||||
|
|
||||||
|
FUZZY_MODE( EnumSet.allOf( FuzzyMode.class ) ),
|
||||||
|
|
||||||
|
LEVEL_TYPE( EnumSet.allOf( LevelType.class ) ),
|
||||||
|
|
||||||
|
TERMINAL_STYLE( EnumSet.of( TerminalStyle.TALL, TerminalStyle.SMALL ) ),
|
||||||
|
|
||||||
|
COPY_MODE( EnumSet.allOf( CopyMode.class ) ),
|
||||||
|
|
||||||
|
INTERFACE_TERMINAL( EnumSet.of( YesNo.YES, YesNo.NO ) ),
|
||||||
|
|
||||||
|
CRAFT_VIA_REDSTONE( EnumSet.of( YesNo.YES, YesNo.NO ) ),
|
||||||
|
|
||||||
|
STORAGE_FILTER( EnumSet.allOf( StorageFilter.class ) ),
|
||||||
|
|
||||||
|
PLACE_BLOCK( EnumSet.of( YesNo.YES, YesNo.NO ) ),
|
||||||
|
|
||||||
SCHEDULING_MODE( EnumSet.allOf( SchedulingMode.class ) );
|
SCHEDULING_MODE( EnumSet.allOf( SchedulingMode.class ) );
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,8 @@ package appeng.api.exceptions;
|
|||||||
|
|
||||||
public class CoreInaccessibleException extends RuntimeException
|
public class CoreInaccessibleException extends RuntimeException
|
||||||
{
|
{
|
||||||
|
private static final long serialVersionUID = -7434641554655517242L;
|
||||||
|
|
||||||
public CoreInaccessibleException( final String message )
|
public CoreInaccessibleException( final String message )
|
||||||
{
|
{
|
||||||
super( message );
|
super( message );
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ import appeng.api.networking.IGridNode;
|
|||||||
* @version rv3
|
* @version rv3
|
||||||
* @since rv3
|
* @since rv3
|
||||||
*/
|
*/
|
||||||
public class ExistingConnectionException extends FailedConnection
|
public class ExistingConnectionException extends FailedConnectionException
|
||||||
{
|
{
|
||||||
|
|
||||||
private static final long serialVersionUID = 2975450379720353182L;
|
private static final long serialVersionUID = 2975450379720353182L;
|
||||||
|
|||||||
+3
-3
@@ -40,16 +40,16 @@ import appeng.api.networking.IGridNode;
|
|||||||
* @version rv3
|
* @version rv3
|
||||||
* @since rv0
|
* @since rv0
|
||||||
*/
|
*/
|
||||||
public class FailedConnection extends Exception
|
public class FailedConnectionException extends Exception
|
||||||
{
|
{
|
||||||
|
|
||||||
private static final long serialVersionUID = -2544208090248293753L;
|
private static final long serialVersionUID = -2544208090248293753L;
|
||||||
|
|
||||||
public FailedConnection()
|
public FailedConnectionException()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public FailedConnection( String message )
|
public FailedConnectionException( String message )
|
||||||
{
|
{
|
||||||
super( message );
|
super( message );
|
||||||
}
|
}
|
||||||
+4
-2
@@ -19,9 +19,11 @@
|
|||||||
package appeng.api.exceptions;
|
package appeng.api.exceptions;
|
||||||
|
|
||||||
|
|
||||||
public class MissingDefinition extends RuntimeException
|
public class MissingDefinitionException extends RuntimeException
|
||||||
{
|
{
|
||||||
public MissingDefinition( final String message )
|
private static final long serialVersionUID = -6547396584255825761L;
|
||||||
|
|
||||||
|
public MissingDefinitionException( final String message )
|
||||||
{
|
{
|
||||||
super( message );
|
super( message );
|
||||||
}
|
}
|
||||||
+2
-2
@@ -24,12 +24,12 @@
|
|||||||
package appeng.api.exceptions;
|
package appeng.api.exceptions;
|
||||||
|
|
||||||
|
|
||||||
public class MissingIngredientError extends Exception
|
public class MissingIngredientException extends Exception
|
||||||
{
|
{
|
||||||
|
|
||||||
private static final long serialVersionUID = -998858343831371697L;
|
private static final long serialVersionUID = -998858343831371697L;
|
||||||
|
|
||||||
public MissingIngredientError( final String n )
|
public MissingIngredientException( final String n )
|
||||||
{
|
{
|
||||||
super( n );
|
super( n );
|
||||||
}
|
}
|
||||||
+2
-2
@@ -24,12 +24,12 @@
|
|||||||
package appeng.api.exceptions;
|
package appeng.api.exceptions;
|
||||||
|
|
||||||
|
|
||||||
public class ModNotInstalled extends Exception
|
public class ModNotInstalledException extends Exception
|
||||||
{
|
{
|
||||||
|
|
||||||
private static final long serialVersionUID = -9052435206368425494L;
|
private static final long serialVersionUID = -9052435206368425494L;
|
||||||
|
|
||||||
public ModNotInstalled( final String t )
|
public ModNotInstalledException( final String t )
|
||||||
{
|
{
|
||||||
super( t );
|
super( t );
|
||||||
}
|
}
|
||||||
@@ -34,7 +34,7 @@ package appeng.api.exceptions;
|
|||||||
* @version rv3
|
* @version rv3
|
||||||
* @since rv3
|
* @since rv3
|
||||||
*/
|
*/
|
||||||
public class NullNodeConnectionException extends FailedConnection
|
public class NullNodeConnectionException extends FailedConnectionException
|
||||||
{
|
{
|
||||||
|
|
||||||
private static final long serialVersionUID = -2143719383495321764L;
|
private static final long serialVersionUID = -2143719383495321764L;
|
||||||
|
|||||||
+2
-2
@@ -24,12 +24,12 @@
|
|||||||
package appeng.api.exceptions;
|
package appeng.api.exceptions;
|
||||||
|
|
||||||
|
|
||||||
public class RecipeError extends Exception
|
public class RecipeException extends Exception
|
||||||
{
|
{
|
||||||
|
|
||||||
private static final long serialVersionUID = -6602870588617670262L;
|
private static final long serialVersionUID = -6602870588617670262L;
|
||||||
|
|
||||||
public RecipeError( final String n )
|
public RecipeException( final String n )
|
||||||
{
|
{
|
||||||
super( n );
|
super( n );
|
||||||
}
|
}
|
||||||
+2
-2
@@ -24,12 +24,12 @@
|
|||||||
package appeng.api.exceptions;
|
package appeng.api.exceptions;
|
||||||
|
|
||||||
|
|
||||||
public class RegistrationError extends Exception
|
public class RegistrationException extends Exception
|
||||||
{
|
{
|
||||||
|
|
||||||
private static final long serialVersionUID = -6602870588617670263L;
|
private static final long serialVersionUID = -6602870588617670263L;
|
||||||
|
|
||||||
public RegistrationError( final String n )
|
public RegistrationException( final String n )
|
||||||
{
|
{
|
||||||
super( n );
|
super( n );
|
||||||
}
|
}
|
||||||
@@ -34,7 +34,7 @@ package appeng.api.exceptions;
|
|||||||
* @version rv3
|
* @version rv3
|
||||||
* @since rv3
|
* @since rv3
|
||||||
*/
|
*/
|
||||||
public class SecurityConnectionException extends FailedConnection
|
public class SecurityConnectionException extends FailedConnectionException
|
||||||
{
|
{
|
||||||
private static final long serialVersionUID = 5048714900434215426L;
|
private static final long serialVersionUID = 5048714900434215426L;
|
||||||
private static final String DEFAULT_MESSAGE = "Connection failed due to different security realms.";
|
private static final String DEFAULT_MESSAGE = "Connection failed due to different security realms.";
|
||||||
|
|||||||
@@ -0,0 +1,84 @@
|
|||||||
|
/*
|
||||||
|
* The MIT License (MIT)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2017 AlgorithmX2
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
|
* the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
* subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package appeng.api.features;
|
||||||
|
|
||||||
|
|
||||||
|
import javax.annotation.Nonnegative;
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
|
import net.minecraft.item.Item;
|
||||||
|
|
||||||
|
import appeng.api.implementations.items.IAEItemPowerStorage;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A registry to allow mapping {@link Item}s to a specific charge rate when being placed inside a charger.
|
||||||
|
*
|
||||||
|
* The registry is used in favor of an additional method for {@link IAEItemPowerStorage} with a fixed value per item.
|
||||||
|
* This allows more flexibility for other charger like machines to choose their own values when needed.
|
||||||
|
*
|
||||||
|
* There is no guarantee that this is charged per tick, it only represents the value per operation.
|
||||||
|
* By default this is one charging operation every 10 ticks in case of an AE2 charger.
|
||||||
|
*
|
||||||
|
* @author yueh
|
||||||
|
* @version rv5
|
||||||
|
* @since rv5
|
||||||
|
*/
|
||||||
|
public interface IChargerRegistry
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetch a charge rate for a specific item.
|
||||||
|
*
|
||||||
|
* The specific item does not need to have a mapping registered at all.
|
||||||
|
* In this case it will use a default value of 160 AE.
|
||||||
|
*
|
||||||
|
* @param item A {@link Item} implementing {@link IAEItemPowerStorage}.
|
||||||
|
* @return custom rate or default of 160
|
||||||
|
*/
|
||||||
|
@Nonnegative
|
||||||
|
double getChargeRate( @Nonnull Item item );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register a custom charge rate for a specific item.
|
||||||
|
*
|
||||||
|
* Capped at 16000 to avoid extracting too much energy from a network for each operation.
|
||||||
|
* This is done silently without any feedback or exception.
|
||||||
|
* Further the cap is not fixed, it can change at any time in the future should power issues arise.
|
||||||
|
*
|
||||||
|
* @param item A {@link Item} implementing {@link IAEItemPowerStorage}.
|
||||||
|
* @param chargeRate the custom rate, must be > 0, capped to 16000d
|
||||||
|
*/
|
||||||
|
void addChargeRate( @Nonnull Item item, @Nonnegative double chargeRate );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the custom rate for a specific item.
|
||||||
|
*
|
||||||
|
* It will revert to the default value afterwards.
|
||||||
|
*
|
||||||
|
* @param item A {@link Item} implementing {@link IAEItemPowerStorage}.
|
||||||
|
*/
|
||||||
|
void removeChargeRate( @Nonnull Item item );
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,115 @@
|
|||||||
|
/*
|
||||||
|
* The MIT License (MIT)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2013 AlgorithmX2
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
|
* the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
* subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package appeng.api.features;
|
||||||
|
|
||||||
|
|
||||||
|
import javax.annotation.Nonnegative;
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builder for a grinder recipe.
|
||||||
|
*
|
||||||
|
* The only default value provided are turns at a value of 8.
|
||||||
|
*
|
||||||
|
* @author yueh
|
||||||
|
* @version rv5
|
||||||
|
* @since rv5
|
||||||
|
*/
|
||||||
|
public interface IGrinderRecipeBuilder
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an grinder recipe with inputs.
|
||||||
|
* Needs to be invoked.
|
||||||
|
*
|
||||||
|
* @param input new input for the recipe
|
||||||
|
*
|
||||||
|
* @return currently used builder
|
||||||
|
*/
|
||||||
|
@Nonnull
|
||||||
|
IGrinderRecipeBuilder withInput( @Nonnull ItemStack input );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an grinder recipe with output.
|
||||||
|
* Needs to be invoked.
|
||||||
|
*
|
||||||
|
* @param output new output for the recipe
|
||||||
|
*
|
||||||
|
* @return currently used builder
|
||||||
|
*/
|
||||||
|
@Nonnull
|
||||||
|
IGrinderRecipeBuilder withOutput( @Nonnull ItemStack output );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an grinder recipe with the first optional output and its chance.
|
||||||
|
*
|
||||||
|
* @param optional new first optional for the recipe
|
||||||
|
* @param chance chance for the first optional output, must be within 0.0 - 1.0
|
||||||
|
*
|
||||||
|
* @return currently used builder
|
||||||
|
*/
|
||||||
|
@Nonnull
|
||||||
|
IGrinderRecipeBuilder withFirstOptional( @Nonnull ItemStack optional, float chance );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an grinder recipe with the second optional output and its chance.
|
||||||
|
*
|
||||||
|
* @param optional new second optional for the recipe
|
||||||
|
* @param chance chance for the second optional output, must be within 0.0 - 1.0
|
||||||
|
*
|
||||||
|
* @return currently used builder
|
||||||
|
*/
|
||||||
|
@Nonnull
|
||||||
|
IGrinderRecipeBuilder withSecondOptional( @Nonnull ItemStack optional, float chance );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an grinder recipe with the amount of turns as cost.
|
||||||
|
*
|
||||||
|
* Defaults to 8 when not called.
|
||||||
|
*
|
||||||
|
* @param turns new turns for the recipe, must be > 0
|
||||||
|
*
|
||||||
|
* @return currently used builder
|
||||||
|
*/
|
||||||
|
@Nonnull
|
||||||
|
IGrinderRecipeBuilder withTurns( @Nonnegative int turns );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finalizes the process of making the recipe.
|
||||||
|
* Needs to be invoked to fetch grinder recipe.
|
||||||
|
*
|
||||||
|
* @return valid grinder recipe
|
||||||
|
*
|
||||||
|
* @throws IllegalStateException when input is not defined
|
||||||
|
* @throws IllegalStateException when input has no size
|
||||||
|
* @throws IllegalStateException when output is not defined
|
||||||
|
* @throws IllegalStateException when both optionals are not defined
|
||||||
|
* @throws IllegalStateException when process type is not defined
|
||||||
|
*/
|
||||||
|
@Nonnull
|
||||||
|
IGrinderRecipe build();
|
||||||
|
}
|
||||||
@@ -38,6 +38,14 @@ import net.minecraft.item.ItemStack;
|
|||||||
public interface IGrinderRegistry
|
public interface IGrinderRegistry
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extensible way to create a grinder recipe.
|
||||||
|
*
|
||||||
|
* @return builder for grinder recipes
|
||||||
|
*/
|
||||||
|
@Nonnull
|
||||||
|
IGrinderRecipeBuilder builder();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An immutable list of the currently registered recipes.
|
* An immutable list of the currently registered recipes.
|
||||||
*
|
*
|
||||||
@@ -47,48 +55,13 @@ public interface IGrinderRegistry
|
|||||||
Collection<IGrinderRecipe> getRecipes();
|
Collection<IGrinderRecipe> getRecipes();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a new recipe with a single input and output and how many turns it requires.
|
* Add a new recipe to the registry.
|
||||||
*
|
|
||||||
* Will ignore duplicate recipes with the same input item.
|
|
||||||
*
|
|
||||||
* @param in The {@link ItemStack} to grind.
|
|
||||||
* @param out The {@link ItemStack} to output.
|
|
||||||
* @param turns Amount of turns to turn the input into the output, with turns > 0.
|
|
||||||
*/
|
*/
|
||||||
void addRecipe( @Nonnull ItemStack in, @Nonnull ItemStack out, int turns );
|
boolean addRecipe( IGrinderRecipe recipe );
|
||||||
|
|
||||||
/**
|
|
||||||
* Add a new recipe with an input, output and a single optional output.
|
|
||||||
*
|
|
||||||
* Will ignore duplicate recipes with the same input item.
|
|
||||||
*
|
|
||||||
* @param in The {@link ItemStack} to grind.
|
|
||||||
* @param out The {@link ItemStack} to output.
|
|
||||||
* @param optional The optional {@link ItemStack} to output of a certain chance.
|
|
||||||
* @param chance Chance to get the optional output within 0.0 - 1.0
|
|
||||||
* @param turns Amount of turns to turn the input into the output, with turns > 0.
|
|
||||||
*/
|
|
||||||
void addRecipe( @Nonnull ItemStack in, @Nonnull ItemStack out, @Nonnull ItemStack optional, float chance, int turns );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* add a new recipe with optional outputs, duplicates will not be added.
|
|
||||||
*
|
|
||||||
* Will ignore duplicate recipes with the same input item.
|
|
||||||
*
|
|
||||||
* @param in The {@link ItemStack} to grind.
|
|
||||||
* @param out The {@link ItemStack} to output.
|
|
||||||
* @param optional The first optional {@link ItemStack} to output of a certain chance.
|
|
||||||
* @param chance Chance to get the first optional output within 0.0 - 1.0
|
|
||||||
* @param optional2 The second optional {@link ItemStack} to output of a certain chance.
|
|
||||||
* @param chance2 chance to get the second optional output within 0.0 - 1.0
|
|
||||||
* @param turns Amount of turns to turn the input into the output, with turns > 0.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void addRecipe( @Nonnull ItemStack in, @Nonnull ItemStack out, @Nonnull ItemStack optional, float chance, @Nonnull ItemStack optional2, float chance2, int turns );
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove the specific from the recipe list.
|
* Remove the specific from the recipe list.
|
||||||
*
|
*
|
||||||
* @param recipe The recipe to be removed.
|
* @param recipe The recipe to be removed.
|
||||||
* @return true, if it was removed
|
* @return true, if it was removed
|
||||||
*/
|
*/
|
||||||
@@ -106,11 +79,11 @@ public interface IGrinderRegistry
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Allows do add a custom ratio from an ore to dust when being grinded.
|
* Allows do add a custom ratio from an ore to dust when being grinded.
|
||||||
*
|
*
|
||||||
* The default ratio is 1 ore to 2 dusts.
|
* The default ratio is 1 ore to 2 dusts.
|
||||||
*
|
*
|
||||||
* These have to be added before any recipe is registered. Otherwise it will use the default value.
|
* These have to be added before any recipe is registered. Otherwise it will use the default value.
|
||||||
*
|
*
|
||||||
* @param oredictName The name of the ore;
|
* @param oredictName The name of the ore;
|
||||||
* @param ratio The amount, must be > 0;
|
* @param ratio The amount, must be > 0;
|
||||||
*/
|
*/
|
||||||
@@ -118,9 +91,9 @@ public interface IGrinderRegistry
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove a custom ratio for a specific ore name.
|
* Remove a custom ratio for a specific ore name.
|
||||||
*
|
*
|
||||||
* Will use the default of 2 value afterwards.
|
* Will use the default of 2 value afterwards.
|
||||||
*
|
*
|
||||||
* @param oredictName The name of the ore;
|
* @param oredictName The name of the ore;
|
||||||
*/
|
*/
|
||||||
boolean removeDustRatio( @Nonnull String oredictName );
|
boolean removeDustRatio( @Nonnull String oredictName );
|
||||||
|
|||||||
@@ -31,11 +31,19 @@ import net.minecraft.item.ItemStack;
|
|||||||
* Lets you manipulate Inscriber Recipes, by adding or editing existing ones.
|
* Lets you manipulate Inscriber Recipes, by adding or editing existing ones.
|
||||||
*
|
*
|
||||||
* @author thatsIch
|
* @author thatsIch
|
||||||
* @version rv3
|
* @version rv5
|
||||||
* @since rv2
|
* @since rv2
|
||||||
*/
|
*/
|
||||||
public interface IInscriberRegistry
|
public interface IInscriberRegistry
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Extensible way to create an inscriber recipe.
|
||||||
|
*
|
||||||
|
* @return builder for inscriber recipes
|
||||||
|
*/
|
||||||
|
@Nonnull
|
||||||
|
IInscriberRecipeBuilder builder();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An immutable copy of currently registered recipes.
|
* An immutable copy of currently registered recipes.
|
||||||
*
|
*
|
||||||
@@ -65,29 +73,25 @@ public interface IInscriberRegistry
|
|||||||
@Nonnull
|
@Nonnull
|
||||||
Set<ItemStack> getInputs();
|
Set<ItemStack> getInputs();
|
||||||
|
|
||||||
/**
|
|
||||||
* Extensible way to create an inscriber recipe.
|
|
||||||
*
|
|
||||||
* @return builder for inscriber recipes
|
|
||||||
*/
|
|
||||||
@Nonnull
|
|
||||||
IInscriberRecipeBuilder builder();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* add a new recipe the easy way, duplicates will not be added.
|
* add a new recipe the easy way, duplicates will not be added.
|
||||||
* Added recipes will be automatically added to the optionals and inputs.
|
* Added recipes will be automatically added to the optionals and inputs.
|
||||||
*
|
*
|
||||||
* @param recipe new recipe
|
* @param recipe new recipe
|
||||||
|
*
|
||||||
|
* @return true, when successfully added
|
||||||
*
|
*
|
||||||
* @throws IllegalArgumentException if null is added
|
* @throws IllegalArgumentException if null is added
|
||||||
*/
|
*/
|
||||||
void addRecipe( IInscriberRecipe recipe );
|
boolean addRecipe( IInscriberRecipe recipe );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes all equal recipes from the registry.
|
* Removes all equal recipes from the registry.
|
||||||
*
|
*
|
||||||
* @param toBeRemovedRecipe to be removed recipe, can be null, makes just no sense.
|
* @param toBeRemovedRecipe to be removed recipe, can be null, makes just no sense.
|
||||||
|
*
|
||||||
|
* @return true, when successfully removed
|
||||||
*/
|
*/
|
||||||
void removeRecipe( IInscriberRecipe toBeRemovedRecipe );
|
boolean removeRecipe( IInscriberRecipe toBeRemovedRecipe );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,7 +34,8 @@ import appeng.api.storage.ICellRegistry;
|
|||||||
/**
|
/**
|
||||||
* @author AlgorithmX2
|
* @author AlgorithmX2
|
||||||
* @author thatsIch
|
* @author thatsIch
|
||||||
* @version rv2
|
* @author yueh
|
||||||
|
* @version rv5
|
||||||
* @since rv0
|
* @since rv0
|
||||||
*/
|
*/
|
||||||
@AEInjectable
|
@AEInjectable
|
||||||
@@ -76,6 +77,11 @@ public interface IRegistryContainer
|
|||||||
*/
|
*/
|
||||||
IInscriberRegistry inscriber();
|
IInscriberRegistry inscriber();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Manage charger via API
|
||||||
|
*/
|
||||||
|
IChargerRegistry charger();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* get access to the locatable registry
|
* get access to the locatable registry
|
||||||
*/
|
*/
|
||||||
|
|||||||
+26
-21
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2013 AlgorithmX2
|
* Copyright (c) 2017 AlgorithmX2
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
* this software and associated documentation files (the "Software"), to deal in
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
@@ -21,39 +21,44 @@
|
|||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package appeng.api.storage.data;
|
package appeng.api.networking;
|
||||||
|
|
||||||
|
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import appeng.api.exceptions.FailedConnectionException;
|
||||||
|
|
||||||
import appeng.api.features.IItemComparison;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Don't cast this... either compare with it, or copy it.
|
* A helper responsible for creating new {@link IGridNode}, {@link IGridConnection} or potentially similar tasks.
|
||||||
*
|
*
|
||||||
* Don't Implement.
|
* @author yueh
|
||||||
|
* @version rv5
|
||||||
|
* @since rv5
|
||||||
*/
|
*/
|
||||||
public interface IAETagCompound
|
public interface IGridHelper
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return a copy ( the copy will not be a IAETagCompound, it will be a NBTTagCompound )
|
* Create a grid node for your {@link IGridHost}
|
||||||
|
*
|
||||||
|
* The passed {@link IGridBlock} represents the definition for properties like connectable sides.
|
||||||
|
* Refer to its documentation for further details.
|
||||||
|
*
|
||||||
|
* @param block grid block
|
||||||
|
*
|
||||||
|
* @return grid node of block
|
||||||
*/
|
*/
|
||||||
NBTTagCompound getNBTTagCompoundCopy();
|
IGridNode createGridNode( IGridBlock block );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* compare to other NBTTagCompounds or IAETagCompounds
|
* Create a direct connection between two {@link IGridNode}.
|
||||||
|
*
|
||||||
|
* This will be considered as having a distance of 1, regardless of the location of both nodes.
|
||||||
|
*
|
||||||
|
* @param a to be connected gridnode
|
||||||
|
* @param b to be connected gridnode
|
||||||
*
|
*
|
||||||
* @param a compared object
|
* @throws appeng.api.exceptions.FailedConnectionException
|
||||||
*
|
|
||||||
* @return true, if they are the same.
|
|
||||||
*/
|
*/
|
||||||
@Override
|
IGridConnection createGridConnection( IGridNode a, IGridNode b ) throws FailedConnectionException;
|
||||||
boolean equals( Object a );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the special comparison for this tag
|
|
||||||
*/
|
|
||||||
IItemComparison getSpecialComparison();
|
|
||||||
}
|
}
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
package appeng.api.networking.crafting;
|
package appeng.api.networking.crafting;
|
||||||
|
|
||||||
|
|
||||||
import appeng.api.networking.security.BaseActionSource;
|
import appeng.api.networking.security.IActionSource;
|
||||||
import appeng.api.networking.storage.IBaseMonitor;
|
import appeng.api.networking.storage.IBaseMonitor;
|
||||||
import appeng.api.storage.data.IAEItemStack;
|
import appeng.api.storage.data.IAEItemStack;
|
||||||
|
|
||||||
@@ -40,7 +40,7 @@ public interface ICraftingCPU extends IBaseMonitor<IAEItemStack>
|
|||||||
/**
|
/**
|
||||||
* @return the action source for the CPU.
|
* @return the action source for the CPU.
|
||||||
*/
|
*/
|
||||||
BaseActionSource getActionSource();
|
IActionSource getActionSource();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the available storage in bytes
|
* @return the available storage in bytes
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ import net.minecraft.world.World;
|
|||||||
|
|
||||||
import appeng.api.networking.IGrid;
|
import appeng.api.networking.IGrid;
|
||||||
import appeng.api.networking.IGridCache;
|
import appeng.api.networking.IGridCache;
|
||||||
import appeng.api.networking.security.BaseActionSource;
|
import appeng.api.networking.security.IActionSource;
|
||||||
import appeng.api.storage.data.IAEItemStack;
|
import appeng.api.storage.data.IAEItemStack;
|
||||||
|
|
||||||
|
|
||||||
@@ -63,7 +63,7 @@ public interface ICraftingGrid extends IGridCache
|
|||||||
* @return a future which will at an undetermined point in the future get you the {@link ICraftingJob} do not wait
|
* @return a future which will at an undetermined point in the future get you the {@link ICraftingJob} do not wait
|
||||||
* on this, your be waiting forever.
|
* on this, your be waiting forever.
|
||||||
*/
|
*/
|
||||||
Future<ICraftingJob> beginCraftingJob( World world, IGrid grid, BaseActionSource actionSrc, IAEItemStack craftWhat, ICraftingCallback callback );
|
Future<ICraftingJob> beginCraftingJob( World world, IGrid grid, IActionSource actionSrc, IAEItemStack craftWhat, ICraftingCallback callback );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Submit the job to the Crafting system for processing.
|
* Submit the job to the Crafting system for processing.
|
||||||
@@ -82,7 +82,7 @@ public interface ICraftingGrid extends IGridCache
|
|||||||
* {@link ICraftingRequester} methods. if you send null, this object should be discarded after verifying the
|
* {@link ICraftingRequester} methods. if you send null, this object should be discarded after verifying the
|
||||||
* return state.
|
* return state.
|
||||||
*/
|
*/
|
||||||
ICraftingLink submitJob( ICraftingJob job, ICraftingRequester requestingMachine, ICraftingCPU target, boolean prioritizePower, BaseActionSource src );
|
ICraftingLink submitJob( ICraftingJob job, ICraftingRequester requestingMachine, ICraftingCPU target, boolean prioritizePower, IActionSource src );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return list of all the crafting cpus on the grid
|
* @return list of all the crafting cpus on the grid
|
||||||
|
|||||||
@@ -25,7 +25,9 @@ package appeng.api.networking.energy;
|
|||||||
|
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Set;
|
|
||||||
|
import javax.annotation.Nonnegative;
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
import appeng.api.config.Actionable;
|
import appeng.api.config.Actionable;
|
||||||
|
|
||||||
@@ -36,32 +38,91 @@ import appeng.api.config.Actionable;
|
|||||||
public interface IEnergyGridProvider
|
public interface IEnergyGridProvider
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
|
* internal use only
|
||||||
|
*
|
||||||
|
* Can return a list of providers behind the current.
|
||||||
|
*
|
||||||
|
* An example would be something acting as proxy between different {@link IEnergyGrid}s.
|
||||||
|
*
|
||||||
|
* This can contain duplicate entries, AE will ensure that each provider is only visited once.
|
||||||
|
*
|
||||||
* internal use only
|
* internal use only
|
||||||
*/
|
*/
|
||||||
|
@Nonnull
|
||||||
Collection<IEnergyGridProvider> providers();
|
Collection<IEnergyGridProvider> providers();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* internal use only
|
* internal use only
|
||||||
|
*
|
||||||
|
* Extracts the requested amount from the provider.
|
||||||
|
*
|
||||||
|
* This should never forward a call to another {@link IEnergyGridProvider}, instead return them via
|
||||||
|
* {@link IEnergyGridProvider#providers()}
|
||||||
|
*
|
||||||
|
* @return the used amount
|
||||||
*/
|
*/
|
||||||
double extractProviderPower( double amt, Actionable mode, Set<IEnergyGridProvider> seen );
|
@Nonnegative
|
||||||
|
double extractProviderPower( @Nonnegative double amt, @Nonnull Actionable mode );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Injects the offered amount into the provider.
|
||||||
|
*
|
||||||
|
* This should never forward a call to another {@link IEnergyGridProvider}, instead return them via
|
||||||
|
* {@link IEnergyGridProvider#providers()}
|
||||||
|
*
|
||||||
|
* internal use only
|
||||||
|
*
|
||||||
|
* @return the leftover amount
|
||||||
|
*/
|
||||||
|
@Nonnegative
|
||||||
|
double injectProviderPower( @Nonnegative double amt, @Nonnull Actionable mode );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* internal use only
|
* internal use only
|
||||||
|
*
|
||||||
|
* Returns the current demand of an provider.
|
||||||
|
*
|
||||||
|
* This should never forward a call to another {@link IEnergyGridProvider}, instead return them via
|
||||||
|
* {@link IEnergyGridProvider#providers()}
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @param d the max amount offered, the demand should never exceed it.
|
||||||
|
* @return the total amount demanded
|
||||||
*/
|
*/
|
||||||
double injectProviderPower( double amt, Actionable mode, Set<IEnergyGridProvider> seen );
|
@Nonnegative
|
||||||
|
double getProviderEnergyDemand( @Nonnegative double d );
|
||||||
/**
|
|
||||||
* internal use only
|
|
||||||
*/
|
|
||||||
double getProviderEnergyDemand( double d, Set<IEnergyGridProvider> seen );
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* internal use only
|
* internal use only
|
||||||
|
*
|
||||||
|
* AE currently uses this to enqueue the next visited provider.
|
||||||
|
*
|
||||||
|
* There is no guarantee that this works on in a perfect way.
|
||||||
|
* It can be limited to the returns of the past {@link IEnergyGridProvider#providers()}, but not any future one
|
||||||
|
* discovered by visiting further providers.
|
||||||
|
*
|
||||||
|
* E.g. inject into the the lowest one first or extract from the highest one.
|
||||||
|
*
|
||||||
|
* @return the current stored amount.
|
||||||
|
*
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
|
@Nonnegative
|
||||||
double getProviderStoredEnergy();
|
double getProviderStoredEnergy();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* internal use only
|
* internal use only
|
||||||
|
*
|
||||||
|
* AE currently uses this to enqueue the next visited provider.
|
||||||
|
*
|
||||||
|
* There is no guarantee that this works on in a perfect way.
|
||||||
|
* It can be limited to the returns of the past {@link IEnergyGridProvider#providers()}, but not any future one
|
||||||
|
* discovered by visiting further providers.
|
||||||
|
*
|
||||||
|
* E.g. inject into the the lowest one first or extract from the highest one.
|
||||||
|
*
|
||||||
|
* @return the maximum amount stored.
|
||||||
*/
|
*/
|
||||||
|
@Nonnegative
|
||||||
double getProviderMaxEnergy();
|
double getProviderMaxEnergy();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ package appeng.api.networking.events;
|
|||||||
|
|
||||||
|
|
||||||
import appeng.api.storage.IMEMonitor;
|
import appeng.api.storage.IMEMonitor;
|
||||||
import appeng.api.storage.StorageChannel;
|
import appeng.api.storage.IStorageChannel;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -40,9 +40,9 @@ public class MENetworkStorageEvent extends MENetworkEvent
|
|||||||
{
|
{
|
||||||
|
|
||||||
public final IMEMonitor monitor;
|
public final IMEMonitor monitor;
|
||||||
public final StorageChannel channel;
|
public final IStorageChannel channel;
|
||||||
|
|
||||||
public MENetworkStorageEvent( final IMEMonitor o, final StorageChannel chan )
|
public MENetworkStorageEvent( final IMEMonitor o, final IStorageChannel chan )
|
||||||
{
|
{
|
||||||
this.monitor = o;
|
this.monitor = o;
|
||||||
this.channel = chan;
|
this.channel = chan;
|
||||||
|
|||||||
@@ -24,11 +24,10 @@
|
|||||||
package appeng.api.networking.security;
|
package appeng.api.networking.security;
|
||||||
|
|
||||||
|
|
||||||
import appeng.api.networking.IGridHost;
|
|
||||||
import appeng.api.networking.IGridNode;
|
import appeng.api.networking.IGridNode;
|
||||||
|
|
||||||
|
|
||||||
public interface IActionHost extends IGridHost
|
public interface IActionHost
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -0,0 +1,77 @@
|
|||||||
|
/*
|
||||||
|
* The MIT License (MIT)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2013 AlgorithmX2
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
|
* the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
* subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package appeng.api.networking.security;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The source of any action.
|
||||||
|
*
|
||||||
|
* This can either be a {@link EntityPlayer} or an {@link IActionHost}.
|
||||||
|
*
|
||||||
|
* In most cases this is used for security checks, but can be used to validate the source itself.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public interface IActionSource
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If present, AE will consider the player being the source for the action.
|
||||||
|
*
|
||||||
|
* This will take precedence over {@link IActionSource#machine()} in any case.
|
||||||
|
*
|
||||||
|
* @return An optional player issuing the action.
|
||||||
|
*/
|
||||||
|
@Nonnull
|
||||||
|
Optional<EntityPlayer> player();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If present, it indicates the {@link IActionHost} of the source.
|
||||||
|
*
|
||||||
|
* Should {@link IActionSource#player()} be absent, it will consider a machine as source.
|
||||||
|
*
|
||||||
|
* It is recommended to include the machine even when a player is present.
|
||||||
|
*
|
||||||
|
* @return An optional machine issuing the action or acting as proxy for a player.
|
||||||
|
*/
|
||||||
|
@Nonnull
|
||||||
|
Optional<IActionHost> machine();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An {@link IActionSource} can have multiple optional contexts.
|
||||||
|
*
|
||||||
|
* It is strongly recommended to limit the uses for absolutely necessary cases.
|
||||||
|
*
|
||||||
|
* Currently there are no public contexts made available by AE.
|
||||||
|
* An example would be the context interfaces use internally to avoid looping items between each other.
|
||||||
|
*/
|
||||||
|
@Nonnull
|
||||||
|
<T> Optional<T> context( @Nonnull Class<T> key );
|
||||||
|
}
|
||||||
@@ -1,44 +0,0 @@
|
|||||||
/*
|
|
||||||
* The MIT License (MIT)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2013 AlgorithmX2
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
* this software and associated documentation files (the "Software"), to deal in
|
|
||||||
* the Software without restriction, including without limitation the rights to
|
|
||||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
||||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
|
||||||
* subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
||||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
||||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package appeng.api.networking.security;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: Consider refactoring.
|
|
||||||
*/
|
|
||||||
public class MachineSource extends BaseActionSource
|
|
||||||
{
|
|
||||||
|
|
||||||
public final IActionHost via;
|
|
||||||
|
|
||||||
public MachineSource( final IActionHost v )
|
|
||||||
{
|
|
||||||
this.via = v;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isMachine()
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
/*
|
|
||||||
* The MIT License (MIT)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2013 AlgorithmX2
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
* this software and associated documentation files (the "Software"), to deal in
|
|
||||||
* the Software without restriction, including without limitation the rights to
|
|
||||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
||||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
|
||||||
* subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
||||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
||||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package appeng.api.networking.security;
|
|
||||||
|
|
||||||
|
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: Consider refactoring.
|
|
||||||
*/
|
|
||||||
public class PlayerSource extends BaseActionSource
|
|
||||||
{
|
|
||||||
|
|
||||||
public final EntityPlayer player;
|
|
||||||
public final IActionHost via;
|
|
||||||
|
|
||||||
public PlayerSource( final EntityPlayer p, final IActionHost v )
|
|
||||||
{
|
|
||||||
this.player = p;
|
|
||||||
this.via = v;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isPlayer()
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -28,7 +28,7 @@ import appeng.api.storage.IMEMonitorHandlerReceiver;
|
|||||||
import appeng.api.storage.data.IAEStack;
|
import appeng.api.storage.data.IAEStack;
|
||||||
|
|
||||||
|
|
||||||
public interface IBaseMonitor<T extends IAEStack>
|
public interface IBaseMonitor<T extends IAEStack<T>>
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -24,8 +24,8 @@
|
|||||||
package appeng.api.networking.storage;
|
package appeng.api.networking.storage;
|
||||||
|
|
||||||
|
|
||||||
import appeng.api.networking.security.BaseActionSource;
|
import appeng.api.networking.security.IActionSource;
|
||||||
import appeng.api.storage.StorageChannel;
|
import appeng.api.storage.IStorageChannel;
|
||||||
import appeng.api.storage.data.IAEStack;
|
import appeng.api.storage.data.IAEStack;
|
||||||
import appeng.api.storage.data.IItemList;
|
import appeng.api.storage.data.IItemList;
|
||||||
|
|
||||||
@@ -50,5 +50,5 @@ public interface IStackWatcherHost
|
|||||||
* @param src action source
|
* @param src action source
|
||||||
* @param chan storage channel
|
* @param chan storage channel
|
||||||
*/
|
*/
|
||||||
void onStackChange( IItemList o, IAEStack fullStack, IAEStack diffStack, BaseActionSource src, StorageChannel chan );
|
void onStackChange( IItemList<?> o, IAEStack<?> fullStack, IAEStack<?> diffStack, IActionSource src, IStorageChannel<?> chan );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,11 +26,11 @@ package appeng.api.networking.storage;
|
|||||||
|
|
||||||
import appeng.api.networking.IGridCache;
|
import appeng.api.networking.IGridCache;
|
||||||
import appeng.api.networking.IGridHost;
|
import appeng.api.networking.IGridHost;
|
||||||
import appeng.api.networking.security.BaseActionSource;
|
import appeng.api.networking.security.IActionSource;
|
||||||
import appeng.api.storage.ICellContainer;
|
import appeng.api.storage.ICellContainer;
|
||||||
import appeng.api.storage.ICellProvider;
|
import appeng.api.storage.ICellProvider;
|
||||||
|
import appeng.api.storage.IStorageChannel;
|
||||||
import appeng.api.storage.IStorageMonitorable;
|
import appeng.api.storage.IStorageMonitorable;
|
||||||
import appeng.api.storage.StorageChannel;
|
|
||||||
import appeng.api.storage.data.IAEStack;
|
import appeng.api.storage.data.IAEStack;
|
||||||
|
|
||||||
|
|
||||||
@@ -50,7 +50,7 @@ public interface IStorageGrid extends IGridCache, IStorageMonitorable
|
|||||||
*
|
*
|
||||||
* @param input injected items
|
* @param input injected items
|
||||||
*/
|
*/
|
||||||
void postAlterationOfStoredItems( StorageChannel chan, Iterable<? extends IAEStack> input, BaseActionSource src );
|
void postAlterationOfStoredItems( IStorageChannel<?> chan, Iterable<? extends IAEStack<?>> input, IActionSource src );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used to add a cell provider to the storage system
|
* Used to add a cell provider to the storage system
|
||||||
|
|||||||
@@ -26,9 +26,9 @@ package appeng.api.recipes;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import appeng.api.exceptions.MissingIngredientError;
|
import appeng.api.exceptions.MissingIngredientException;
|
||||||
import appeng.api.exceptions.RecipeError;
|
import appeng.api.exceptions.RecipeException;
|
||||||
import appeng.api.exceptions.RegistrationError;
|
import appeng.api.exceptions.RegistrationException;
|
||||||
|
|
||||||
|
|
||||||
public interface ICraftHandler
|
public interface ICraftHandler
|
||||||
@@ -40,15 +40,15 @@ public interface ICraftHandler
|
|||||||
* @param input parsed inputs
|
* @param input parsed inputs
|
||||||
* @param output parsed outputs
|
* @param output parsed outputs
|
||||||
*
|
*
|
||||||
* @throws RecipeError
|
* @throws RecipeException
|
||||||
*/
|
*/
|
||||||
void setup( List<List<IIngredient>> input, List<List<IIngredient>> output ) throws RecipeError;
|
void setup( List<List<IIngredient>> input, List<List<IIngredient>> output ) throws RecipeException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* called when all recipes are parsed, and your required to register your recipe.
|
* called when all recipes are parsed, and your required to register your recipe.
|
||||||
*
|
*
|
||||||
* @throws RegistrationError
|
* @throws RegistrationException
|
||||||
* @throws MissingIngredientError
|
* @throws MissingIngredientException
|
||||||
*/
|
*/
|
||||||
void register() throws RegistrationError, MissingIngredientError;
|
void register() throws RegistrationException, MissingIngredientException;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,8 +26,8 @@ package appeng.api.recipes;
|
|||||||
|
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
|
||||||
import appeng.api.exceptions.MissingIngredientError;
|
import appeng.api.exceptions.MissingIngredientException;
|
||||||
import appeng.api.exceptions.RegistrationError;
|
import appeng.api.exceptions.RegistrationException;
|
||||||
|
|
||||||
|
|
||||||
public interface IIngredient
|
public interface IIngredient
|
||||||
@@ -39,10 +39,10 @@ public interface IIngredient
|
|||||||
*
|
*
|
||||||
* @return a single ItemStack for the recipe handler.
|
* @return a single ItemStack for the recipe handler.
|
||||||
*
|
*
|
||||||
* @throws RegistrationError
|
* @throws RegistrationException
|
||||||
* @throws MissingIngredientError
|
* @throws MissingIngredientException
|
||||||
*/
|
*/
|
||||||
ItemStack getItemStack() throws RegistrationError, MissingIngredientError;
|
ItemStack getItemStack() throws RegistrationException, MissingIngredientException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Acquire a list of all the input stacks for the current recipe, this is for handlers that support
|
* Acquire a list of all the input stacks for the current recipe, this is for handlers that support
|
||||||
@@ -50,10 +50,10 @@ public interface IIngredient
|
|||||||
*
|
*
|
||||||
* @return an array of ItemStacks for the recipe handler.
|
* @return an array of ItemStacks for the recipe handler.
|
||||||
*
|
*
|
||||||
* @throws RegistrationError
|
* @throws RegistrationException
|
||||||
* @throws MissingIngredientError
|
* @throws MissingIngredientException
|
||||||
*/
|
*/
|
||||||
ItemStack[] getItemStackSet() throws RegistrationError, MissingIngredientError;
|
ItemStack[] getItemStackSet() throws RegistrationException, MissingIngredientException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If you wish to support air, you must test before getting the ItemStack, or ItemStackSet
|
* If you wish to support air, you must test before getting the ItemStack, or ItemStackSet
|
||||||
@@ -85,8 +85,8 @@ public interface IIngredient
|
|||||||
/**
|
/**
|
||||||
* Bakes the lists in for faster runtime look-ups.
|
* Bakes the lists in for faster runtime look-ups.
|
||||||
*
|
*
|
||||||
* @throws MissingIngredientError
|
* @throws MissingIngredientException
|
||||||
* @throws RegistrationError
|
* @throws RegistrationException
|
||||||
*/
|
*/
|
||||||
void bake() throws RegistrationError, MissingIngredientError;
|
void bake() throws RegistrationException, MissingIngredientException;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ import net.minecraft.entity.player.EntityPlayer;
|
|||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
|
||||||
import appeng.api.implementations.tiles.IChestOrDrive;
|
import appeng.api.implementations.tiles.IChestOrDrive;
|
||||||
|
import appeng.api.storage.data.IAEStack;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -56,7 +57,7 @@ public interface ICellHandler
|
|||||||
*
|
*
|
||||||
* @return a new IMEHandler for the provided item
|
* @return a new IMEHandler for the provided item
|
||||||
*/
|
*/
|
||||||
IMEInventoryHandler getCellInventory( ItemStack is, ISaveProvider host, StorageChannel channel );
|
<T extends IAEStack<T>> IMEInventoryHandler<T> getCellInventory( ItemStack is, ISaveProvider host, IStorageChannel<T> channel );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when the storage cell is planed in an ME Chest and the user tries to open the terminal side, if your item
|
* Called when the storage cell is planed in an ME Chest and the user tries to open the terminal side, if your item
|
||||||
@@ -70,7 +71,7 @@ public interface ICellHandler
|
|||||||
* @param is item
|
* @param is item
|
||||||
* @param chan storage channel
|
* @param chan storage channel
|
||||||
*/
|
*/
|
||||||
void openChestGui( EntityPlayer player, IChestOrDrive chest, ICellHandler cellHandler, IMEInventoryHandler inv, ItemStack is, StorageChannel chan );
|
<T extends IAEStack<T>> void openChestGui( EntityPlayer player, IChestOrDrive chest, ICellHandler cellHandler, IMEInventoryHandler<T> inv, ItemStack is, IStorageChannel<T> chan );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 0 - cell is missing.
|
* 0 - cell is missing.
|
||||||
@@ -86,10 +87,10 @@ public interface ICellHandler
|
|||||||
*
|
*
|
||||||
* @return get the status of the cell based on its contents.
|
* @return get the status of the cell based on its contents.
|
||||||
*/
|
*/
|
||||||
int getStatusForCell( ItemStack is, IMEInventory handler );
|
<T extends IAEStack<T>> int getStatusForCell( ItemStack is, IMEInventory<T> handler );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the ae/t to drain for this storage cell inside a chest/drive.
|
* @return the ae/t to drain for this storage cell inside a chest/drive.
|
||||||
*/
|
*/
|
||||||
double cellIdleDrain( ItemStack is, IMEInventory handler );
|
<T extends IAEStack<T>> double cellIdleDrain( ItemStack is, IMEInventory<T> handler );
|
||||||
}
|
}
|
||||||
@@ -42,7 +42,7 @@ public interface ICellProvider
|
|||||||
*
|
*
|
||||||
* @return a valid list of handlers, NEVER NULL
|
* @return a valid list of handlers, NEVER NULL
|
||||||
*/
|
*/
|
||||||
List<IMEInventoryHandler> getCellArray( StorageChannel channel );
|
List<IMEInventoryHandler> getCellArray( IStorageChannel<?> channel );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* the storage's priority.
|
* the storage's priority.
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ package appeng.api.storage;
|
|||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
|
||||||
import appeng.api.IAppEngApi;
|
import appeng.api.IAppEngApi;
|
||||||
|
import appeng.api.storage.data.IAEStack;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -73,5 +74,5 @@ public interface ICellRegistry
|
|||||||
*
|
*
|
||||||
* @return new IMEInventoryHandler, or null if there isn't one.
|
* @return new IMEInventoryHandler, or null if there isn't one.
|
||||||
*/
|
*/
|
||||||
IMEInventoryHandler getCellInventory( ItemStack is, ISaveProvider host, StorageChannel chan );
|
<T extends IAEStack<T>> IMEInventoryHandler<T> getCellInventory( ItemStack is, ISaveProvider host, IStorageChannel<T> chan );
|
||||||
}
|
}
|
||||||
@@ -25,7 +25,7 @@ package appeng.api.storage;
|
|||||||
|
|
||||||
|
|
||||||
import appeng.api.config.Actionable;
|
import appeng.api.config.Actionable;
|
||||||
import appeng.api.networking.security.BaseActionSource;
|
import appeng.api.networking.security.IActionSource;
|
||||||
import appeng.api.storage.data.IAEStack;
|
import appeng.api.storage.data.IAEStack;
|
||||||
import appeng.api.storage.data.IItemList;
|
import appeng.api.storage.data.IItemList;
|
||||||
|
|
||||||
@@ -40,7 +40,7 @@ import appeng.api.storage.data.IItemList;
|
|||||||
* If you want to request a stack of an item, you should should determine that prior to requesting the stack from the
|
* If you want to request a stack of an item, you should should determine that prior to requesting the stack from the
|
||||||
* inventory.
|
* inventory.
|
||||||
*/
|
*/
|
||||||
public interface IMEInventory<StackType extends IAEStack>
|
public interface IMEInventory<T extends IAEStack<T>>
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -52,7 +52,7 @@ public interface IMEInventory<StackType extends IAEStack>
|
|||||||
*
|
*
|
||||||
* @return returns the number of items not added.
|
* @return returns the number of items not added.
|
||||||
*/
|
*/
|
||||||
StackType injectItems( StackType input, Actionable type, BaseActionSource src );
|
T injectItems( T input, Actionable type, IActionSource src );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extract the specified item from the ME Inventory
|
* Extract the specified item from the ME Inventory
|
||||||
@@ -62,7 +62,7 @@ public interface IMEInventory<StackType extends IAEStack>
|
|||||||
*
|
*
|
||||||
* @return returns the number of items extracted, null
|
* @return returns the number of items extracted, null
|
||||||
*/
|
*/
|
||||||
StackType extractItems( StackType request, Actionable mode, BaseActionSource src );
|
T extractItems( T request, Actionable mode, IActionSource src );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* request a full report of all available items, storage.
|
* request a full report of all available items, storage.
|
||||||
@@ -71,10 +71,10 @@ public interface IMEInventory<StackType extends IAEStack>
|
|||||||
*
|
*
|
||||||
* @return returns same list that was passed in, is passed out
|
* @return returns same list that was passed in, is passed out
|
||||||
*/
|
*/
|
||||||
IItemList<StackType> getAvailableItems( IItemList<StackType> out );
|
IItemList<T> getAvailableItems( IItemList<T> out );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the type of channel your handler should be part of
|
* @return the type of channel your handler should be part of
|
||||||
*/
|
*/
|
||||||
StorageChannel getChannel();
|
IStorageChannel<T> getChannel();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,9 +32,9 @@ import appeng.api.storage.data.IAEStack;
|
|||||||
* Thin logic layer that can be swapped with different IMEInventory implementations, used to handle features related to
|
* Thin logic layer that can be swapped with different IMEInventory implementations, used to handle features related to
|
||||||
* storage, that are Separate from the storage medium itself.
|
* storage, that are Separate from the storage medium itself.
|
||||||
*
|
*
|
||||||
* @param <StackType>
|
* @param <T>
|
||||||
*/
|
*/
|
||||||
public interface IMEInventoryHandler<StackType extends IAEStack> extends IMEInventory<StackType>
|
public interface IMEInventoryHandler<T extends IAEStack<T>> extends IMEInventory<T>
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -52,7 +52,7 @@ public interface IMEInventoryHandler<StackType extends IAEStack> extends IMEInve
|
|||||||
*
|
*
|
||||||
* @return if its prioritized
|
* @return if its prioritized
|
||||||
*/
|
*/
|
||||||
boolean isPrioritized( StackType input );
|
boolean isPrioritized( T input );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* determine if an item can be accepted and stored.
|
* determine if an item can be accepted and stored.
|
||||||
@@ -61,7 +61,7 @@ public interface IMEInventoryHandler<StackType extends IAEStack> extends IMEInve
|
|||||||
*
|
*
|
||||||
* @return if the item can be added
|
* @return if the item can be added
|
||||||
*/
|
*/
|
||||||
boolean canAccept( StackType input );
|
boolean canAccept( T input );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* determine what the priority of the inventory is.
|
* determine what the priority of the inventory is.
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ import appeng.api.storage.data.IAEStack;
|
|||||||
import appeng.api.storage.data.IItemList;
|
import appeng.api.storage.data.IItemList;
|
||||||
|
|
||||||
|
|
||||||
public interface IMEMonitor<T extends IAEStack> extends IMEInventoryHandler<T>, IBaseMonitor<T>
|
public interface IMEMonitor<T extends IAEStack<T>> extends IMEInventoryHandler<T>, IBaseMonitor<T>
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -37,7 +37,7 @@ public interface IMEMonitor<T extends IAEStack> extends IMEInventoryHandler<T>,
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@Deprecated
|
@Deprecated
|
||||||
IItemList<T> getAvailableItems( IItemList out );
|
IItemList<T> getAvailableItems( IItemList<T> out );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get access to the full item list of the network, preferred over {@link IMEInventory} .getAvailableItems(...)
|
* Get access to the full item list of the network, preferred over {@link IMEInventory} .getAvailableItems(...)
|
||||||
|
|||||||
@@ -24,12 +24,12 @@
|
|||||||
package appeng.api.storage;
|
package appeng.api.storage;
|
||||||
|
|
||||||
|
|
||||||
import appeng.api.networking.security.BaseActionSource;
|
import appeng.api.networking.security.IActionSource;
|
||||||
import appeng.api.networking.storage.IBaseMonitor;
|
import appeng.api.networking.storage.IBaseMonitor;
|
||||||
import appeng.api.storage.data.IAEStack;
|
import appeng.api.storage.data.IAEStack;
|
||||||
|
|
||||||
|
|
||||||
public interface IMEMonitorHandlerReceiver<StackType extends IAEStack>
|
public interface IMEMonitorHandlerReceiver<T extends IAEStack<T>>
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -46,7 +46,7 @@ public interface IMEMonitorHandlerReceiver<StackType extends IAEStack>
|
|||||||
*
|
*
|
||||||
* @param change done change
|
* @param change done change
|
||||||
*/
|
*/
|
||||||
void postChange( IBaseMonitor<StackType> monitor, Iterable<StackType> change, BaseActionSource actionSource );
|
void postChange( IBaseMonitor<T> monitor, Iterable<T> change, IActionSource actionSource );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* called when the list updates its contents, this is mostly for handling power events.
|
* called when the list updates its contents, this is mostly for handling power events.
|
||||||
|
|||||||
@@ -27,5 +27,5 @@ package appeng.api.storage;
|
|||||||
public interface ISaveProvider
|
public interface ISaveProvider
|
||||||
{
|
{
|
||||||
|
|
||||||
void saveChanges( IMEInventory cellInventory );
|
void saveChanges( IMEInventory<?> cellInventory );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,103 @@
|
|||||||
|
/*
|
||||||
|
* The MIT License (MIT)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2013 AlgorithmX2
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
|
* the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
* subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package appeng.api.storage;
|
||||||
|
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
import io.netty.buffer.ByteBuf;
|
||||||
|
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
|
||||||
|
import appeng.api.networking.energy.IEnergySource;
|
||||||
|
import appeng.api.networking.security.IActionSource;
|
||||||
|
import appeng.api.storage.data.IAEItemStack;
|
||||||
|
import appeng.api.storage.data.IAEStack;
|
||||||
|
import appeng.api.storage.data.IItemList;
|
||||||
|
|
||||||
|
|
||||||
|
public interface IStorageChannel<T extends IAEStack<T>>
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new {@link IItemList} of the specific type.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Nonnull
|
||||||
|
IItemList<T> createList();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new {@link IAEStack} subtype of the specific object.
|
||||||
|
*
|
||||||
|
* The parameter is unbound to allow a slightly more flexible approach.
|
||||||
|
* But the general intention is about converting an {@link ItemStack} into the corresponding {@link IAEItemStack}.
|
||||||
|
* Another valid case might be to use it instead of {@link IAEStack#copy()}, but this might not be supported by all
|
||||||
|
* types.
|
||||||
|
*
|
||||||
|
* @param input The object to turn into an {@link IAEStack}
|
||||||
|
* @return The converted stack or null
|
||||||
|
*/
|
||||||
|
@Nullable
|
||||||
|
T createStack( @Nonnull Object input );
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param input
|
||||||
|
* @return
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
@Nullable
|
||||||
|
T readFromPacket( @Nonnull ByteBuf input ) throws IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* use energy from energy, to remove request items from cell, at the request of src.
|
||||||
|
*
|
||||||
|
* @param energy to be drained energy source
|
||||||
|
* @param cell cell of requested items
|
||||||
|
* @param request requested items
|
||||||
|
* @param src action source
|
||||||
|
*
|
||||||
|
* @return items that successfully extracted.
|
||||||
|
*/
|
||||||
|
@Nullable
|
||||||
|
T poweredExtraction( @Nonnull IEnergySource energy, @Nonnull IMEInventory<T> cell, @Nonnull T request, @Nonnull IActionSource src );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* use energy from energy, to inject input items into cell, at the request of src
|
||||||
|
*
|
||||||
|
* @param energy to be added energy source
|
||||||
|
* @param cell injected cell
|
||||||
|
* @param input to be injected items
|
||||||
|
* @param src action source
|
||||||
|
*
|
||||||
|
* @return items that failed to insert.
|
||||||
|
*/
|
||||||
|
@Nullable
|
||||||
|
T poweredInsert( @Nonnull IEnergySource energy, @Nonnull IMEInventory<T> cell, @Nonnull T input, @Nonnull IActionSource src );
|
||||||
|
|
||||||
|
}
|
||||||
@@ -24,26 +24,63 @@
|
|||||||
package appeng.api.storage;
|
package appeng.api.storage;
|
||||||
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.util.Collection;
|
||||||
|
|
||||||
import io.netty.buffer.ByteBuf;
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraftforge.fluids.FluidStack;
|
|
||||||
|
|
||||||
import appeng.api.networking.crafting.ICraftingLink;
|
import appeng.api.networking.crafting.ICraftingLink;
|
||||||
import appeng.api.networking.crafting.ICraftingRequester;
|
import appeng.api.networking.crafting.ICraftingRequester;
|
||||||
import appeng.api.networking.energy.IEnergySource;
|
|
||||||
import appeng.api.networking.security.BaseActionSource;
|
|
||||||
import appeng.api.storage.data.IAEFluidStack;
|
import appeng.api.storage.data.IAEFluidStack;
|
||||||
import appeng.api.storage.data.IAEItemStack;
|
import appeng.api.storage.data.IAEItemStack;
|
||||||
import appeng.api.storage.data.IItemList;
|
import appeng.api.storage.data.IAEStack;
|
||||||
|
|
||||||
|
|
||||||
public interface IStorageHelper
|
public interface IStorageHelper
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register a new storage channel.
|
||||||
|
*
|
||||||
|
* AE2 already provides native channels for {@link IAEItemStack} and {@link IAEFluidStack}.
|
||||||
|
*
|
||||||
|
* Each {@link IAEStack} subtype can only have a single factory instance. Overwriting is not intended.
|
||||||
|
* Each subtype should be a direct one, this might be enforced at any time.
|
||||||
|
*
|
||||||
|
* Channel class and factory instance can be used interchangeable as identifier. In most cases the factory instance
|
||||||
|
* is used as key as having direct access the methods is more beneficial compared to being forced to query the
|
||||||
|
* registry each time.
|
||||||
|
*
|
||||||
|
* Caching the factory instance in a field or local variable is perfectly for performance reasons. But do not use
|
||||||
|
* any AE2 internal field as they can change randomly between releases.
|
||||||
|
*
|
||||||
|
* @param channel The channel type, must be a subtype of {@link IStorageChannel}
|
||||||
|
* @param factory An instance implementing the channel, must be be an instance of channel
|
||||||
|
*/
|
||||||
|
@Nonnull
|
||||||
|
<T extends IAEStack<T>, C extends IStorageChannel<T>> void registerStorageChannel( @Nonnull Class<C> channel, @Nonnull C factory );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetch the factory instance for a specific storage channel.
|
||||||
|
*
|
||||||
|
* Channel must be a direct subtype of {@link IStorageChannel}.
|
||||||
|
*
|
||||||
|
* @throws NullPointerException when fetching an unregistered channel.
|
||||||
|
* @param channel The channel type
|
||||||
|
* @return the factory instance
|
||||||
|
*/
|
||||||
|
@Nonnull
|
||||||
|
<T extends IAEStack<T>, C extends IStorageChannel<T>> C getStorageChannel( @Nonnull Class<C> channel );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An unmodifiable collection of all registered factory instance.
|
||||||
|
*
|
||||||
|
* This is mainly used as helper to let storage grids construct their internal storage for each type.
|
||||||
|
*/
|
||||||
|
@Nonnull
|
||||||
|
Collection<IStorageChannel<? extends IAEStack<?>>> storageChannels();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* load a crafting link from nbt data.
|
* load a crafting link from nbt data.
|
||||||
*
|
*
|
||||||
@@ -53,73 +90,4 @@ public interface IStorageHelper
|
|||||||
*/
|
*/
|
||||||
ICraftingLink loadCraftingLink( NBTTagCompound data, ICraftingRequester req );
|
ICraftingLink loadCraftingLink( NBTTagCompound data, ICraftingRequester req );
|
||||||
|
|
||||||
/**
|
|
||||||
* @param is An ItemStack
|
|
||||||
*
|
|
||||||
* @return a new INSTANCE of {@link IAEItemStack} from a MC {@link ItemStack}
|
|
||||||
*/
|
|
||||||
IAEItemStack createItemStack( ItemStack is );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param is A FluidStack
|
|
||||||
*
|
|
||||||
* @return a new INSTANCE of {@link IAEFluidStack} from a Forge {@link FluidStack}
|
|
||||||
*/
|
|
||||||
IAEFluidStack createFluidStack( FluidStack is );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return a new INSTANCE of {@link IItemList} for items
|
|
||||||
*/
|
|
||||||
IItemList<IAEItemStack> createItemList();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return a new INSTANCE of {@link IItemList} for fluids
|
|
||||||
*/
|
|
||||||
IItemList<IAEFluidStack> createFluidList();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Read a AE Item Stack from a byte stream, returns a AE item stack or null.
|
|
||||||
*
|
|
||||||
* @param input to be loaded data
|
|
||||||
*
|
|
||||||
* @return item based of data
|
|
||||||
*
|
|
||||||
* @throws IOException if file could not be read
|
|
||||||
*/
|
|
||||||
IAEItemStack readItemFromPacket( ByteBuf input ) throws IOException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Read a AE Fluid Stack from a byte stream, returns a AE fluid stack or null.
|
|
||||||
*
|
|
||||||
* @param input to be loaded data
|
|
||||||
*
|
|
||||||
* @return fluid based on data
|
|
||||||
*
|
|
||||||
* @throws IOException if file could not be written
|
|
||||||
*/
|
|
||||||
IAEFluidStack readFluidFromPacket( ByteBuf input ) throws IOException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* use energy from energy, to remove request items from cell, at the request of src.
|
|
||||||
*
|
|
||||||
* @param energy to be drained energy source
|
|
||||||
* @param cell cell of requested items
|
|
||||||
* @param request requested items
|
|
||||||
* @param src action source
|
|
||||||
*
|
|
||||||
* @return items that successfully extracted.
|
|
||||||
*/
|
|
||||||
IAEItemStack poweredExtraction( IEnergySource energy, IMEInventory<IAEItemStack> cell, IAEItemStack request, BaseActionSource src );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* use energy from energy, to inject input items into cell, at the request of src
|
|
||||||
*
|
|
||||||
* @param energy to be added energy source
|
|
||||||
* @param cell injected cell
|
|
||||||
* @param input to be injected items
|
|
||||||
* @param src action source
|
|
||||||
*
|
|
||||||
* @return items that failed to insert.
|
|
||||||
*/
|
|
||||||
IAEItemStack poweredInsert( IEnergySource energy, IMEInventory<IAEItemStack> cell, IAEItemStack input, BaseActionSource src );
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,8 +24,7 @@
|
|||||||
package appeng.api.storage;
|
package appeng.api.storage;
|
||||||
|
|
||||||
|
|
||||||
import appeng.api.storage.data.IAEFluidStack;
|
import appeng.api.storage.data.IAEStack;
|
||||||
import appeng.api.storage.data.IAEItemStack;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -35,13 +34,6 @@ import appeng.api.storage.data.IAEItemStack;
|
|||||||
public interface IStorageMonitorable
|
public interface IStorageMonitorable
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
<T extends IAEStack<T>> IMEMonitor<T> getInventory( IStorageChannel<T> channel );
|
||||||
* Access the item inventory for the monitorable storage.
|
|
||||||
*/
|
|
||||||
IMEMonitor<IAEItemStack> getItemInventory();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Access the fluid inventory for the monitorable storage.
|
|
||||||
*/
|
|
||||||
IMEMonitor<IAEFluidStack> getFluidInventory();
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ package appeng.api.storage;
|
|||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
import appeng.api.networking.security.BaseActionSource;
|
import appeng.api.networking.security.IActionSource;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -22,5 +22,5 @@ public interface IStorageMonitorableAccessor
|
|||||||
* @return Null if the network cannot be accessed by the given action source (i.e. security doesn't permit it).
|
* @return Null if the network cannot be accessed by the given action source (i.e. security doesn't permit it).
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
IStorageMonitorable getInventory( BaseActionSource src );
|
IStorageMonitorable getInventory( IActionSource src );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,64 +0,0 @@
|
|||||||
/*
|
|
||||||
* The MIT License (MIT)
|
|
||||||
*
|
|
||||||
* Copyright (c) 2013 AlgorithmX2
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
* this software and associated documentation files (the "Software"), to deal in
|
|
||||||
* the Software without restriction, including without limitation the rights to
|
|
||||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
||||||
* the Software, and to permit persons to whom the Software is furnished to do so,
|
|
||||||
* subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all
|
|
||||||
* copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
||||||
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
||||||
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package appeng.api.storage;
|
|
||||||
|
|
||||||
|
|
||||||
import appeng.api.AEApi;
|
|
||||||
import appeng.api.storage.data.IAEFluidStack;
|
|
||||||
import appeng.api.storage.data.IAEItemStack;
|
|
||||||
import appeng.api.storage.data.IAEStack;
|
|
||||||
import appeng.api.storage.data.IItemList;
|
|
||||||
|
|
||||||
|
|
||||||
public enum StorageChannel
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* AE2's Default Storage.
|
|
||||||
*/
|
|
||||||
ITEMS( IAEItemStack.class ),
|
|
||||||
|
|
||||||
/**
|
|
||||||
* AE2's Fluid Based Storage ( mainly added to better support ExtraCells )
|
|
||||||
*/
|
|
||||||
FLUIDS( IAEFluidStack.class );
|
|
||||||
|
|
||||||
public final Class<? extends IAEStack> type;
|
|
||||||
|
|
||||||
StorageChannel( final Class<? extends IAEStack> t )
|
|
||||||
{
|
|
||||||
this.type = t;
|
|
||||||
}
|
|
||||||
|
|
||||||
public IItemList createList()
|
|
||||||
{
|
|
||||||
if( this == ITEMS )
|
|
||||||
{
|
|
||||||
return AEApi.instance().storage().createItemList();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return AEApi.instance().storage().createFluidList();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+8
-15
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
*
|
*
|
||||||
* Copyright (c) 2013 AlgorithmX2
|
* Copyright (c) 2017 AlgorithmX2
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
* this software and associated documentation files (the "Software"), to deal in
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
@@ -21,21 +21,14 @@
|
|||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package appeng.api.networking.security;
|
package appeng.api.storage.channels;
|
||||||
|
|
||||||
/**
|
|
||||||
* TODO: Consider refactoring.
|
import appeng.api.storage.IStorageChannel;
|
||||||
*/
|
import appeng.api.storage.data.IAEFluidStack;
|
||||||
public class BaseActionSource
|
|
||||||
|
|
||||||
|
public interface IFluidStorageChannel extends IStorageChannel<IAEFluidStack>
|
||||||
{
|
{
|
||||||
|
|
||||||
public boolean isPlayer()
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isMachine()
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* The MIT License (MIT)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2017 AlgorithmX2
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
* this software and associated documentation files (the "Software"), to deal in
|
||||||
|
* the Software without restriction, including without limitation the rights to
|
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
* the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
* subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package appeng.api.storage.channels;
|
||||||
|
|
||||||
|
|
||||||
|
import appeng.api.storage.IStorageChannel;
|
||||||
|
import appeng.api.storage.data.IAEItemStack;
|
||||||
|
|
||||||
|
|
||||||
|
public interface IItemStorageChannel extends IStorageChannel<IAEItemStack>
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
@@ -37,7 +37,7 @@ import net.minecraftforge.fluids.FluidStack;
|
|||||||
*
|
*
|
||||||
* Don't Implement.
|
* Don't Implement.
|
||||||
*
|
*
|
||||||
* Construct with Util.createFluidStack( FluidStack )
|
* Construct with AEApi.instance().storage().getStorageChannel( IFluidStorageChannel.class).createStack( FluidStack )
|
||||||
*/
|
*/
|
||||||
public interface IAEFluidStack extends IAEStack<IAEFluidStack>
|
public interface IAEFluidStack extends IAEStack<IAEFluidStack>
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ import net.minecraft.item.ItemStack;
|
|||||||
*
|
*
|
||||||
* Don't Implement.
|
* Don't Implement.
|
||||||
*
|
*
|
||||||
* Construct with Util.createItemStack( ItemStack )
|
* Construct with AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class).createStack( ItemStack )
|
||||||
*/
|
*/
|
||||||
public interface IAEItemStack extends IAEStack<IAEItemStack>
|
public interface IAEItemStack extends IAEStack<IAEItemStack>
|
||||||
{
|
{
|
||||||
@@ -46,7 +46,7 @@ public interface IAEItemStack extends IAEStack<IAEItemStack>
|
|||||||
*
|
*
|
||||||
* @return new ItemStack
|
* @return new ItemStack
|
||||||
*/
|
*/
|
||||||
ItemStack getItemStack();
|
ItemStack createItemStack();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* is there NBT Data for this item?
|
* is there NBT Data for this item?
|
||||||
@@ -105,4 +105,11 @@ public interface IAEItemStack extends IAEStack<IAEItemStack>
|
|||||||
* @return true if it is the same type (same item, damage, nbt)
|
* @return true if it is the same type (same item, damage, nbt)
|
||||||
*/
|
*/
|
||||||
boolean isSameType( ItemStack stored );
|
boolean isSameType( ItemStack stored );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DO NOT MODIFY THIS STACK! NEVER. If you think about it .. DON'T
|
||||||
|
*
|
||||||
|
* @return definition stack
|
||||||
|
*/
|
||||||
|
ItemStack getDefinition();
|
||||||
}
|
}
|
||||||
@@ -28,13 +28,14 @@ import java.io.IOException;
|
|||||||
|
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
|
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
|
||||||
import appeng.api.config.FuzzyMode;
|
import appeng.api.config.FuzzyMode;
|
||||||
import appeng.api.storage.StorageChannel;
|
import appeng.api.storage.IStorageChannel;
|
||||||
|
|
||||||
|
|
||||||
public interface IAEStack<StackType extends IAEStack>
|
public interface IAEStack<T extends IAEStack<T>>
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -42,7 +43,7 @@ public interface IAEStack<StackType extends IAEStack>
|
|||||||
*
|
*
|
||||||
* @param is added item
|
* @param is added item
|
||||||
*/
|
*/
|
||||||
void add( StackType is );
|
void add( T is );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* number of items in the stack.
|
* number of items in the stack.
|
||||||
@@ -56,7 +57,7 @@ public interface IAEStack<StackType extends IAEStack>
|
|||||||
*
|
*
|
||||||
* @param stackSize , ItemStack.stackSize = N
|
* @param stackSize , ItemStack.stackSize = N
|
||||||
*/
|
*/
|
||||||
StackType setStackSize( long stackSize );
|
T setStackSize( long stackSize );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Same as getStackSize, but for requestable items. ( LP )
|
* Same as getStackSize, but for requestable items. ( LP )
|
||||||
@@ -70,7 +71,7 @@ public interface IAEStack<StackType extends IAEStack>
|
|||||||
*
|
*
|
||||||
* @return basically itemStack.stackSize = N but for setStackSize items.
|
* @return basically itemStack.stackSize = N but for setStackSize items.
|
||||||
*/
|
*/
|
||||||
StackType setCountRequestable( long countRequestable );
|
T setCountRequestable( long countRequestable );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* true, if the item can be crafted.
|
* true, if the item can be crafted.
|
||||||
@@ -84,12 +85,12 @@ public interface IAEStack<StackType extends IAEStack>
|
|||||||
*
|
*
|
||||||
* @param isCraftable can item be crafted
|
* @param isCraftable can item be crafted
|
||||||
*/
|
*/
|
||||||
StackType setCraftable( boolean isCraftable );
|
T setCraftable( boolean isCraftable );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* clears, requestable, craftable, and stack sizes.
|
* clears, requestable, craftable, and stack sizes.
|
||||||
*/
|
*/
|
||||||
StackType reset();
|
T reset();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* returns true, if the item can be crafted, requested, or extracted.
|
* returns true, if the item can be crafted, requested, or extracted.
|
||||||
@@ -173,21 +174,14 @@ public interface IAEStack<StackType extends IAEStack>
|
|||||||
*
|
*
|
||||||
* @return a new Stack, which is copied from the original.
|
* @return a new Stack, which is copied from the original.
|
||||||
*/
|
*/
|
||||||
StackType copy();
|
T copy();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* create an empty stack.
|
* create an empty stack.
|
||||||
*
|
*
|
||||||
* @return a new stack, which represents an empty copy of the original.
|
* @return a new stack, which represents an empty copy of the original.
|
||||||
*/
|
*/
|
||||||
StackType empty();
|
T empty();
|
||||||
|
|
||||||
/**
|
|
||||||
* obtain the NBT Data for the item.
|
|
||||||
*
|
|
||||||
* @return nbt data
|
|
||||||
*/
|
|
||||||
IAETagCompound getTagCompound();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return true if the stack is a {@link IAEItemStack}
|
* @return true if the stack is a {@link IAEItemStack}
|
||||||
@@ -202,16 +196,12 @@ public interface IAEStack<StackType extends IAEStack>
|
|||||||
/**
|
/**
|
||||||
* @return ITEM or FLUID
|
* @return ITEM or FLUID
|
||||||
*/
|
*/
|
||||||
StorageChannel getChannel();
|
IStorageChannel<T> getChannel();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return true if it should show the crafting label.
|
* Returns itemstack for display and similar purposes. Always has a count of 1.
|
||||||
|
*
|
||||||
|
* @return itemstack
|
||||||
*/
|
*/
|
||||||
boolean getShowCraftingLabel();
|
ItemStack asItemStackRepresentation();
|
||||||
|
|
||||||
/**
|
|
||||||
* Used internally to show that it should show a Crafting label instead of a "1"
|
|
||||||
*/
|
|
||||||
void setShowCraftingLabel( boolean showCraftingLabel );
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,9 +34,8 @@ import appeng.api.config.FuzzyMode;
|
|||||||
*
|
*
|
||||||
* Don't Implement.
|
* Don't Implement.
|
||||||
*
|
*
|
||||||
* Construct with Util.createItemList()
|
|
||||||
*/
|
*/
|
||||||
public interface IItemContainer<StackType extends IAEStack>
|
public interface IItemContainer<T extends IAEStack<T>>
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -44,7 +43,7 @@ public interface IItemContainer<StackType extends IAEStack>
|
|||||||
*
|
*
|
||||||
* @param option added stack
|
* @param option added stack
|
||||||
*/
|
*/
|
||||||
void add( StackType option ); // adds stack as is
|
void add( T option ); // adds stack as is
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param i compared item
|
* @param i compared item
|
||||||
@@ -52,14 +51,14 @@ public interface IItemContainer<StackType extends IAEStack>
|
|||||||
* @return a stack equivalent to the stack passed in, but with the correct stack size information, or null if its
|
* @return a stack equivalent to the stack passed in, but with the correct stack size information, or null if its
|
||||||
* not present
|
* not present
|
||||||
*/
|
*/
|
||||||
StackType findPrecise( StackType i );
|
T findPrecise( T i );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param input compared item
|
* @param input compared item
|
||||||
*
|
*
|
||||||
* @return a list of relevant fuzzy matched stacks
|
* @return a list of relevant fuzzy matched stacks
|
||||||
*/
|
*/
|
||||||
Collection<StackType> findFuzzy( StackType input, FuzzyMode fuzzy );
|
Collection<T> findFuzzy( T input, FuzzyMode fuzzy );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return true if there are no items in the list
|
* @return true if there are no items in the list
|
||||||
|
|||||||
@@ -26,15 +26,20 @@ package appeng.api.storage.data;
|
|||||||
|
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
import appeng.api.storage.IStorageChannel;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a list of items in AE.
|
* Represents a list of items in AE.
|
||||||
*
|
*
|
||||||
* Don't Implement.
|
* Don't Implement.
|
||||||
*
|
*
|
||||||
* Construct with Util.createItemList()
|
* Construct with
|
||||||
|
* - For items: AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class).createList()
|
||||||
|
* - For fluids: AEApi.instance().storage().getStorageChannel( IFluidStorageChannel.class).createList()
|
||||||
|
* - Replace with the corresponding {@link IStorageChannel} type for non native channels
|
||||||
*/
|
*/
|
||||||
public interface IItemList<StackType extends IAEStack> extends IItemContainer<StackType>, Iterable<StackType>
|
public interface IItemList<T extends IAEStack<T>> extends IItemContainer<T>, Iterable<T>
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -43,14 +48,14 @@ public interface IItemList<StackType extends IAEStack> extends IItemContainer<St
|
|||||||
*
|
*
|
||||||
* @param option stacktype option
|
* @param option stacktype option
|
||||||
*/
|
*/
|
||||||
void addStorage( StackType option ); // adds a stack as stored
|
void addStorage( T option ); // adds a stack as stored
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* add a stack to the list as craftable, this will merge the stack with an item already in the list if found.
|
* add a stack to the list as craftable, this will merge the stack with an item already in the list if found.
|
||||||
*
|
*
|
||||||
* @param option stacktype option
|
* @param option stacktype option
|
||||||
*/
|
*/
|
||||||
void addCrafting( StackType option );
|
void addCrafting( T option );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* add a stack to the list, stack size is used to add to requestable, this will merge the stack with an item already
|
* add a stack to the list, stack size is used to add to requestable, this will merge the stack with an item already
|
||||||
@@ -58,12 +63,12 @@ public interface IItemList<StackType extends IAEStack> extends IItemContainer<St
|
|||||||
*
|
*
|
||||||
* @param option stacktype option
|
* @param option stacktype option
|
||||||
*/
|
*/
|
||||||
void addRequestable( StackType option ); // adds a stack as requestable
|
void addRequestable( T option ); // adds a stack as requestable
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the first item in the list
|
* @return the first item in the list
|
||||||
*/
|
*/
|
||||||
StackType getFirstItem();
|
T getFirstItem();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the number of items in the list
|
* @return the number of items in the list
|
||||||
@@ -74,7 +79,7 @@ public interface IItemList<StackType extends IAEStack> extends IItemContainer<St
|
|||||||
* allows you to iterate the list.
|
* allows you to iterate the list.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
Iterator<StackType> iterator();
|
Iterator<T> iterator();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* resets stack sizes to 0.
|
* resets stack sizes to 0.
|
||||||
|
|||||||
@@ -100,14 +100,12 @@ public abstract class AEBaseBlock extends Block
|
|||||||
return new BlockStateContainer( this, this.getAEStates() );
|
return new BlockStateContainer( this, this.getAEStates() );
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings( "deprecation" )
|
|
||||||
@Override
|
@Override
|
||||||
public final boolean isNormalCube( IBlockState state )
|
public final boolean isNormalCube( IBlockState state )
|
||||||
{
|
{
|
||||||
return this.isFullSize() && this.isOpaque();
|
return this.isFullSize() && this.isOpaque();
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings( "deprecation" )
|
|
||||||
@Override
|
@Override
|
||||||
public AxisAlignedBB getBoundingBox( IBlockState state, IBlockAccess source, BlockPos pos )
|
public AxisAlignedBB getBoundingBox( IBlockState state, IBlockAccess source, BlockPos pos )
|
||||||
{
|
{
|
||||||
@@ -226,7 +224,6 @@ public abstract class AEBaseBlock extends Block
|
|||||||
return super.getSelectedBoundingBox( state, w, pos );
|
return super.getSelectedBoundingBox( state, w, pos );
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings( "deprecation" )
|
|
||||||
@Override
|
@Override
|
||||||
public final boolean isOpaqueCube( IBlockState state )
|
public final boolean isOpaqueCube( IBlockState state )
|
||||||
{
|
{
|
||||||
@@ -281,14 +278,12 @@ public abstract class AEBaseBlock extends Block
|
|||||||
return super.collisionRayTrace( state, w, pos, a, b );
|
return super.collisionRayTrace( state, w, pos, a, b );
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings( "deprecation" )
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasComparatorInputOverride( IBlockState state )
|
public boolean hasComparatorInputOverride( IBlockState state )
|
||||||
{
|
{
|
||||||
return this.isInventory();
|
return this.isInventory();
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings( "deprecation" )
|
|
||||||
@Override
|
@Override
|
||||||
public int getComparatorInputOverride( IBlockState state, final World worldIn, final BlockPos pos )
|
public int getComparatorInputOverride( IBlockState state, final World worldIn, final BlockPos pos )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -67,7 +67,6 @@ public class AEBaseItemBlock extends ItemBlock
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SideOnly( Side.CLIENT )
|
@SideOnly( Side.CLIENT )
|
||||||
@SuppressWarnings( "unchecked" )
|
|
||||||
public final void addInformation( final ItemStack itemStack, final World world, final List<String> toolTip, final ITooltipFlag advancedTooltips )
|
public final void addInformation( final ItemStack itemStack, final World world, final List<String> toolTip, final ITooltipFlag advancedTooltips )
|
||||||
{
|
{
|
||||||
this.addCheckedInformation( itemStack, world, toolTip, advancedTooltips );
|
this.addCheckedInformation( itemStack, world, toolTip, advancedTooltips );
|
||||||
|
|||||||
@@ -37,13 +37,17 @@ import net.minecraft.init.SoundEvents;
|
|||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
import net.minecraft.util.EnumHand;
|
import net.minecraft.util.EnumHand;
|
||||||
|
import net.minecraft.util.ResourceLocation;
|
||||||
import net.minecraft.util.SoundCategory;
|
import net.minecraft.util.SoundCategory;
|
||||||
import net.minecraft.util.math.AxisAlignedBB;
|
import net.minecraft.util.math.AxisAlignedBB;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.Explosion;
|
import net.minecraft.world.Explosion;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
import net.minecraftforge.fml.common.registry.EntityRegistry;
|
||||||
|
|
||||||
import appeng.block.AEBaseBlock;
|
import appeng.block.AEBaseBlock;
|
||||||
|
import appeng.core.AppEng;
|
||||||
|
import appeng.entity.EntityIds;
|
||||||
import appeng.entity.EntityTinyTNTPrimed;
|
import appeng.entity.EntityTinyTNTPrimed;
|
||||||
import appeng.helpers.ICustomCollision;
|
import appeng.helpers.ICustomCollision;
|
||||||
|
|
||||||
@@ -54,15 +58,24 @@ public class BlockTinyTNT extends AEBaseBlock implements ICustomCollision
|
|||||||
public BlockTinyTNT()
|
public BlockTinyTNT()
|
||||||
{
|
{
|
||||||
super( Material.TNT );
|
super( Material.TNT );
|
||||||
this.setLightOpacity( 1 );
|
|
||||||
this.boundingBox = new AxisAlignedBB( 0.25f, 0.0f, 0.25f, 0.75f, 0.5f, 0.75f );
|
this.boundingBox = new AxisAlignedBB( 0.25f, 0.0f, 0.25f, 0.75f, 0.5f, 0.75f );
|
||||||
this.setFullSize( this.setOpaque( false ) );
|
|
||||||
|
this.setLightOpacity( 2 );
|
||||||
|
this.setFullSize( false );
|
||||||
|
this.setOpaque( false );
|
||||||
|
|
||||||
this.setSoundType( SoundType.GROUND );
|
this.setSoundType( SoundType.GROUND );
|
||||||
this.setHardness( 0F );
|
this.setHardness( 0F );
|
||||||
|
|
||||||
// TODO: 1.11
|
EntityRegistry.registerModEntity( new ResourceLocation( AppEng.MOD_ID, EntityTinyTNTPrimed.class.getName() ), EntityTinyTNTPrimed.class,
|
||||||
// EntityRegistry.registerModEntity( EntityTinyTNTPrimed.class, "EntityTinyTNTPrimed", EntityIds.get(
|
"EntityTinyTNTPrimed", EntityIds.get( EntityTinyTNTPrimed.class ), AppEng.instance(), 16, 4, true );
|
||||||
// EntityTinyTNTPrimed.class ), AppEng.instance(), 16, 4, true );
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isFullCube( IBlockState state )
|
||||||
|
{
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -101,7 +101,6 @@ public class BlockCableBus extends AEBaseTileBlock
|
|||||||
// this will actually be overwritten later through setupTile and the
|
// this will actually be overwritten later through setupTile and the
|
||||||
// combined layers
|
// combined layers
|
||||||
this.setTileEntity( TileCableBus.class );
|
this.setTileEntity( TileCableBus.class );
|
||||||
this.useNeighborBrightness = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -97,7 +97,6 @@ public class BlockController extends AEBaseTileBlock
|
|||||||
* controllers and the network state of this controller (offline, online, conflicted). This is used to
|
* controllers and the network state of this controller (offline, online, conflicted). This is used to
|
||||||
* get a rudimentary connected texture feel for the controller based on how it is placed.
|
* get a rudimentary connected texture feel for the controller based on how it is placed.
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings( "deprecation" )
|
|
||||||
@Override
|
@Override
|
||||||
public IBlockState getActualState( IBlockState state, IBlockAccess world, BlockPos pos )
|
public IBlockState getActualState( IBlockState state, IBlockAccess world, BlockPos pos )
|
||||||
{
|
{
|
||||||
@@ -160,7 +159,6 @@ public class BlockController extends AEBaseTileBlock
|
|||||||
return state.getValue( CONTROLLER_STATE ).ordinal();
|
return state.getValue( CONTROLLER_STATE ).ordinal();
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings( "deprecation" )
|
|
||||||
@Override
|
@Override
|
||||||
public IBlockState getStateFromMeta( final int meta )
|
public IBlockState getStateFromMeta( final int meta )
|
||||||
{
|
{
|
||||||
@@ -174,7 +172,6 @@ public class BlockController extends AEBaseTileBlock
|
|||||||
return BlockRenderLayer.CUTOUT;
|
return BlockRenderLayer.CUTOUT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings( "deprecation" )
|
|
||||||
@Override
|
@Override
|
||||||
public void neighborChanged( IBlockState state, World world, BlockPos pos, Block blockIn, BlockPos fromPos )
|
public void neighborChanged( IBlockState state, World world, BlockPos pos, Block blockIn, BlockPos fromPos )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -47,9 +47,9 @@ import appeng.util.Platform;
|
|||||||
public class BlockSkyChest extends AEBaseTileBlock implements ICustomCollision
|
public class BlockSkyChest extends AEBaseTileBlock implements ICustomCollision
|
||||||
{
|
{
|
||||||
|
|
||||||
private static final double AABB_OFFSET_BOTTOM = .0625d;
|
private static final double AABB_OFFSET_BOTTOM = 0.00;
|
||||||
private static final double AABB_OFFSET_SIDES = 0;
|
private static final double AABB_OFFSET_SIDES = 0.06;
|
||||||
private static final double AABB_OFFSET_TOP = .125d;
|
private static final double AABB_OFFSET_TOP = 0.125;
|
||||||
|
|
||||||
public enum SkyChestType
|
public enum SkyChestType
|
||||||
{
|
{
|
||||||
@@ -111,18 +111,18 @@ public class BlockSkyChest extends AEBaseTileBlock implements ICustomCollision
|
|||||||
o = sk.getUp();
|
o = sk.getUp();
|
||||||
}
|
}
|
||||||
|
|
||||||
final double offsetX = o.getFrontOffsetX() == 0 ? AABB_OFFSET_BOTTOM : AABB_OFFSET_SIDES;
|
final double offsetX = o.getFrontOffsetX() == 0 ? AABB_OFFSET_SIDES : 0.0;
|
||||||
final double offsetY = o.getFrontOffsetY() == 0 ? AABB_OFFSET_BOTTOM : AABB_OFFSET_SIDES;
|
final double offsetY = o.getFrontOffsetY() == 0 ? AABB_OFFSET_SIDES : 0.0;
|
||||||
final double offsetZ = o.getFrontOffsetZ() == 0 ? AABB_OFFSET_BOTTOM : AABB_OFFSET_SIDES;
|
final double offsetZ = o.getFrontOffsetZ() == 0 ? AABB_OFFSET_SIDES : 0.0;
|
||||||
|
|
||||||
// x/z needs to be multiplied by -1, thus we simply add not substract.
|
// for x/z top and bottom is swapped
|
||||||
final double minX = Math.max( 0.0, offsetX + o.getFrontOffsetX() * AABB_OFFSET_TOP );
|
final double minX = Math.max( 0.0, offsetX + ( o.getFrontOffsetX() < 0 ? AABB_OFFSET_BOTTOM : ( o.getFrontOffsetX() * AABB_OFFSET_TOP ) ) );
|
||||||
final double minY = Math.max( 0.0, offsetY - o.getFrontOffsetY() * AABB_OFFSET_TOP );
|
final double minY = Math.max( 0.0, offsetY + ( o.getFrontOffsetY() < 0 ? AABB_OFFSET_TOP : ( o.getFrontOffsetY() * AABB_OFFSET_BOTTOM ) ) );
|
||||||
final double minZ = Math.max( 0.0, offsetZ + o.getFrontOffsetZ() * AABB_OFFSET_TOP );
|
final double minZ = Math.max( 0.0, offsetZ + ( o.getFrontOffsetZ() < 0 ? AABB_OFFSET_BOTTOM : ( o.getFrontOffsetZ() * AABB_OFFSET_TOP ) ) );
|
||||||
|
|
||||||
final double maxX = Math.min( 1.0, ( 1.0 - offsetX ) + o.getFrontOffsetX() * AABB_OFFSET_TOP );
|
final double maxX = Math.min( 1.0, 1.0 - offsetX - ( o.getFrontOffsetX() < 0 ? AABB_OFFSET_TOP : ( o.getFrontOffsetX() * AABB_OFFSET_BOTTOM ) ) );
|
||||||
final double maxY = Math.min( 1.0, ( 1.0 - offsetY ) - o.getFrontOffsetY() * AABB_OFFSET_TOP );
|
final double maxY = Math.min( 1.0, 1.0 - offsetY - ( o.getFrontOffsetY() < 0 ? AABB_OFFSET_BOTTOM : ( o.getFrontOffsetY() * AABB_OFFSET_TOP ) ) );
|
||||||
final double maxZ = Math.min( 1.0, ( 1.0 - offsetZ ) + o.getFrontOffsetZ() * AABB_OFFSET_TOP );
|
final double maxZ = Math.min( 1.0, 1.0 - offsetZ - ( o.getFrontOffsetZ() < 0 ? AABB_OFFSET_TOP : ( o.getFrontOffsetZ() * AABB_OFFSET_BOTTOM ) ) );
|
||||||
|
|
||||||
return new AxisAlignedBB( minX, minY, minZ, maxX, maxY, maxZ );
|
return new AxisAlignedBB( minX, minY, minZ, maxX, maxY, maxZ );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of Applied Energistics 2.
|
||||||
|
* Copyright (c) 2013 - 2017, 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.bootstrap;
|
||||||
|
|
||||||
|
|
||||||
|
import net.minecraft.advancements.ICriterionInstance;
|
||||||
|
import net.minecraft.advancements.ICriterionTrigger;
|
||||||
|
|
||||||
|
|
||||||
|
@FunctionalInterface
|
||||||
|
public interface ICriterionTriggerRegistry
|
||||||
|
{
|
||||||
|
void register( ICriterionTrigger<? extends ICriterionInstance> trigger );
|
||||||
|
}
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
package appeng.capabilities;
|
package appeng.capabilities;
|
||||||
|
|
||||||
|
|
||||||
import appeng.api.networking.security.BaseActionSource;
|
import appeng.api.networking.security.IActionSource;
|
||||||
import appeng.api.storage.IStorageMonitorable;
|
import appeng.api.storage.IStorageMonitorable;
|
||||||
import appeng.api.storage.IStorageMonitorableAccessor;
|
import appeng.api.storage.IStorageMonitorableAccessor;
|
||||||
|
|
||||||
@@ -28,7 +28,7 @@ class NullMENetworkAccessor implements IStorageMonitorableAccessor
|
|||||||
{
|
{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IStorageMonitorable getInventory( BaseActionSource src )
|
public IStorageMonitorable getInventory( IActionSource src )
|
||||||
{
|
{
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -84,7 +84,6 @@ import appeng.helpers.InventoryAction;
|
|||||||
|
|
||||||
public abstract class AEBaseGui extends GuiContainer
|
public abstract class AEBaseGui extends GuiContainer
|
||||||
{
|
{
|
||||||
private static boolean switchingGuis;
|
|
||||||
private final List<InternalSlotME> meSlots = new LinkedList<>();
|
private final List<InternalSlotME> meSlots = new LinkedList<>();
|
||||||
// drag y
|
// drag y
|
||||||
private final Set<Slot> drag_click = new HashSet<>();
|
private final Set<Slot> drag_click = new HashSet<>();
|
||||||
@@ -94,13 +93,10 @@ public abstract class AEBaseGui extends GuiContainer
|
|||||||
private Stopwatch dbl_clickTimer = Stopwatch.createStarted();
|
private Stopwatch dbl_clickTimer = Stopwatch.createStarted();
|
||||||
private ItemStack dbl_whichItem = ItemStack.EMPTY;
|
private ItemStack dbl_whichItem = ItemStack.EMPTY;
|
||||||
private Slot bl_clicked;
|
private Slot bl_clicked;
|
||||||
private boolean subGui;
|
|
||||||
|
|
||||||
public AEBaseGui( final Container container )
|
public AEBaseGui( final Container container )
|
||||||
{
|
{
|
||||||
super( container );
|
super( container );
|
||||||
this.subGui = switchingGuis;
|
|
||||||
switchingGuis = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static String join( final Collection<String> toolTip, final String delimiter )
|
protected static String join( final Collection<String> toolTip, final String delimiter )
|
||||||
@@ -123,11 +119,6 @@ public abstract class AEBaseGui extends GuiContainer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isSubGui()
|
|
||||||
{
|
|
||||||
return this.subGui;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initGui()
|
public void initGui()
|
||||||
{
|
{
|
||||||
@@ -149,7 +140,6 @@ public abstract class AEBaseGui extends GuiContainer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings( "unchecked" )
|
|
||||||
private List<Slot> getInventorySlots()
|
private List<Slot> getInventorySlots()
|
||||||
{
|
{
|
||||||
return this.inventorySlots.inventorySlots;
|
return this.inventorySlots.inventorySlots;
|
||||||
@@ -455,7 +445,8 @@ public abstract class AEBaseGui extends GuiContainer
|
|||||||
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();
|
stack = ( (SlotME) slot ).getAEStack();
|
||||||
|
|
||||||
if( stack != null && action == InventoryAction.PICKUP_OR_SET_DOWN && stack.getShowCraftingLabel() && player.inventory.getItemStack().isEmpty() )
|
if( stack != null && action == InventoryAction.PICKUP_OR_SET_DOWN && stack.getStackSize() == 0 && player.inventory.getItemStack()
|
||||||
|
.isEmpty() )
|
||||||
{
|
{
|
||||||
action = InventoryAction.AUTO_CRAFT;
|
action = InventoryAction.AUTO_CRAFT;
|
||||||
}
|
}
|
||||||
@@ -587,7 +578,6 @@ public abstract class AEBaseGui extends GuiContainer
|
|||||||
public void onGuiClosed()
|
public void onGuiClosed()
|
||||||
{
|
{
|
||||||
super.onGuiClosed();
|
super.onGuiClosed();
|
||||||
this.subGui = true; // in case the gui is reopened later ( i'm looking at you NEI )
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Slot getSlot( final int mouseX, final int mouseY )
|
protected Slot getSlot( final int mouseX, final int mouseY )
|
||||||
@@ -715,7 +705,7 @@ public abstract class AEBaseGui extends GuiContainer
|
|||||||
// Annoying but easier than trying to splice into render item
|
// Annoying but easier than trying to splice into render item
|
||||||
super.drawSlot( new Size1Slot( (SlotME) s ) );
|
super.drawSlot( new Size1Slot( (SlotME) s ) );
|
||||||
|
|
||||||
this.stackSizeRenderer.renderStackSize( this.fontRenderer, ( (SlotME) s ).getAEStack(), s.getStack(), s.xPos, s.yPos );
|
this.stackSizeRenderer.renderStackSize( this.fontRenderer, ( (SlotME) s ).getAEStack(), s.xPos, s.yPos );
|
||||||
|
|
||||||
}
|
}
|
||||||
catch( final Exception err )
|
catch( final Exception err )
|
||||||
@@ -870,14 +860,4 @@ public abstract class AEBaseGui extends GuiContainer
|
|||||||
{
|
{
|
||||||
return this.meSlots;
|
return this.meSlots;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final synchronized boolean isSwitchingGuis()
|
|
||||||
{
|
|
||||||
return switchingGuis;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static final synchronized void setSwitchingGuis( final boolean switchingGuis )
|
|
||||||
{
|
|
||||||
AEBaseGui.switchingGuis = switchingGuis;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ import java.text.NumberFormat;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
import net.minecraft.client.util.ITooltipFlag;
|
|
||||||
import net.minecraft.inventory.Container;
|
import net.minecraft.inventory.Container;
|
||||||
import net.minecraft.inventory.Slot;
|
import net.minecraft.inventory.Slot;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
@@ -43,70 +42,17 @@ public abstract class AEBaseMEGui extends AEBaseGui
|
|||||||
super( container );
|
super( container );
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<String> handleItemTooltip( final ItemStack stack, final int mouseX, final int mouseY, final List<String> currentToolTip )
|
|
||||||
{
|
|
||||||
if( !stack.isEmpty() )
|
|
||||||
{
|
|
||||||
final Slot s = this.getSlot( mouseX, mouseY );
|
|
||||||
if( s instanceof SlotME )
|
|
||||||
{
|
|
||||||
final int BigNumber = AEConfig.instance().useTerminalUseLargeFont() ? 999 : 9999;
|
|
||||||
|
|
||||||
IAEItemStack myStack = null;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
final SlotME theSlotField = (SlotME) s;
|
|
||||||
myStack = theSlotField.getAEStack();
|
|
||||||
}
|
|
||||||
catch( final Throwable ignore )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
if( myStack != null )
|
|
||||||
{
|
|
||||||
if( myStack.getStackSize() > BigNumber || ( myStack.getStackSize() > 1 && stack.isItemDamaged() ) )
|
|
||||||
{
|
|
||||||
final String local = ButtonToolTips.ItemsStored.getLocal();
|
|
||||||
final String formattedAmount = NumberFormat.getNumberInstance( Locale.US ).format( myStack.getStackSize() );
|
|
||||||
final String format = String.format( local, formattedAmount );
|
|
||||||
|
|
||||||
currentToolTip.add( TextFormatting.GRAY + format );
|
|
||||||
}
|
|
||||||
|
|
||||||
if( myStack.getCountRequestable() > 0 )
|
|
||||||
{
|
|
||||||
final String local = ButtonToolTips.ItemsRequestable.getLocal();
|
|
||||||
final String formattedAmount = NumberFormat.getNumberInstance( Locale.US ).format( myStack.getCountRequestable() );
|
|
||||||
final String format = String.format( local, formattedAmount );
|
|
||||||
|
|
||||||
currentToolTip.add( TextFormatting.GRAY + format );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if( stack.getCount() > BigNumber || ( stack.getCount() > 1 && stack.isItemDamaged() ) )
|
|
||||||
{
|
|
||||||
final String local = ButtonToolTips.ItemsStored.getLocal();
|
|
||||||
final String formattedAmount = NumberFormat.getNumberInstance( Locale.US ).format( stack.getCount() );
|
|
||||||
final String format = String.format( local, formattedAmount );
|
|
||||||
|
|
||||||
currentToolTip.add( TextFormatting.GRAY + format );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return currentToolTip;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Vanilla version...
|
|
||||||
// protected void drawItemStackTooltip(ItemStack stack, int x, int y)
|
|
||||||
@Override
|
@Override
|
||||||
protected void renderToolTip( final ItemStack stack, final int x, final int y )
|
protected void renderToolTip( final ItemStack stack, final int x, final int y )
|
||||||
{
|
{
|
||||||
final Slot s = this.getSlot( x, y );
|
final Slot s = this.getSlot( x, y );
|
||||||
|
|
||||||
if( s instanceof SlotME && !stack.isEmpty() )
|
if( s instanceof SlotME && !stack.isEmpty() )
|
||||||
{
|
{
|
||||||
final int BigNumber = AEConfig.instance().useTerminalUseLargeFont() ? 999 : 9999;
|
final int bigNumber = AEConfig.instance().useTerminalUseLargeFont() ? 999 : 9999;
|
||||||
|
|
||||||
IAEItemStack myStack = null;
|
IAEItemStack myStack = null;
|
||||||
|
final List<String> currentToolTip = this.getItemToolTip( stack );
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -117,34 +63,44 @@ public abstract class AEBaseMEGui extends AEBaseGui
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
ITooltipFlag.TooltipFlags tooltipFlag = this.mc.gameSettings.advancedItemTooltips ? ITooltipFlag.TooltipFlags.ADVANCED : ITooltipFlag.TooltipFlags.NORMAL;
|
|
||||||
if( myStack != null )
|
if( myStack != null )
|
||||||
{
|
{
|
||||||
@SuppressWarnings( "unchecked" )
|
if( myStack.getStackSize() > bigNumber || ( myStack.getStackSize() > 1 && stack.isItemDamaged() ) )
|
||||||
final List<String> currentToolTip = stack.getTooltip( this.mc.player, tooltipFlag );
|
|
||||||
|
|
||||||
if( myStack.getStackSize() > BigNumber || ( myStack.getStackSize() > 1 && stack.isItemDamaged() ) )
|
|
||||||
{
|
{
|
||||||
currentToolTip.add( "Items Stored: " + NumberFormat.getNumberInstance( Locale.US ).format( myStack.getStackSize() ) );
|
final String local = ButtonToolTips.ItemsStored.getLocal();
|
||||||
|
final String formattedAmount = NumberFormat.getNumberInstance( Locale.US ).format( myStack.getStackSize() );
|
||||||
|
final String format = String.format( local, formattedAmount );
|
||||||
|
|
||||||
|
currentToolTip.add( TextFormatting.GRAY + format );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( myStack.getCountRequestable() > 0 )
|
if( myStack.getCountRequestable() > 0 )
|
||||||
{
|
{
|
||||||
currentToolTip.add( "Items Requestable: " + NumberFormat.getNumberInstance( Locale.US ).format( myStack.getCountRequestable() ) );
|
final String local = ButtonToolTips.ItemsRequestable.getLocal();
|
||||||
|
final String formattedAmount = NumberFormat.getNumberInstance( Locale.US ).format( myStack.getCountRequestable() );
|
||||||
|
final String format = String.format( local, formattedAmount );
|
||||||
|
|
||||||
|
currentToolTip.add( format );
|
||||||
}
|
}
|
||||||
|
|
||||||
this.drawTooltip( x, y, currentToolTip );
|
this.drawHoveringText( currentToolTip, x, y, this.fontRenderer );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if( stack.getCount() > BigNumber )
|
else if( stack.getCount() > bigNumber )
|
||||||
{
|
{
|
||||||
List<String> var4 = stack.getTooltip( this.mc.player, tooltipFlag );
|
final String local = ButtonToolTips.ItemsStored.getLocal();
|
||||||
var4.add( "Items Stored: " + NumberFormat.getNumberInstance( Locale.US ).format( stack.getCount() ) );
|
final String formattedAmount = NumberFormat.getNumberInstance( Locale.US ).format( stack.getCount() );
|
||||||
this.drawTooltip( x, y, var4 );
|
final String format = String.format( local, formattedAmount );
|
||||||
|
|
||||||
|
currentToolTip.add( TextFormatting.GRAY + format );
|
||||||
|
|
||||||
|
this.drawHoveringText( currentToolTip, x, y, this.fontRenderer );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
super.renderToolTip( stack, x, y );
|
super.renderToolTip( stack, x, y );
|
||||||
// super.drawItemStackTooltip( stack, x, y );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -37,6 +37,7 @@ import net.minecraft.item.ItemStack;
|
|||||||
|
|
||||||
import appeng.api.AEApi;
|
import appeng.api.AEApi;
|
||||||
import appeng.api.storage.ITerminalHost;
|
import appeng.api.storage.ITerminalHost;
|
||||||
|
import appeng.api.storage.channels.IItemStorageChannel;
|
||||||
import appeng.api.storage.data.IAEItemStack;
|
import appeng.api.storage.data.IAEItemStack;
|
||||||
import appeng.api.storage.data.IItemList;
|
import appeng.api.storage.data.IItemList;
|
||||||
import appeng.client.gui.AEBaseGui;
|
import appeng.client.gui.AEBaseGui;
|
||||||
@@ -62,9 +63,9 @@ public class GuiCraftConfirm extends AEBaseGui
|
|||||||
|
|
||||||
private final int rows = 5;
|
private final int rows = 5;
|
||||||
|
|
||||||
private final IItemList<IAEItemStack> storage = AEApi.instance().storage().createItemList();
|
private final IItemList<IAEItemStack> storage = AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ).createList();
|
||||||
private final IItemList<IAEItemStack> pending = AEApi.instance().storage().createItemList();
|
private final IItemList<IAEItemStack> pending = AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ).createList();
|
||||||
private final IItemList<IAEItemStack> missing = AEApi.instance().storage().createItemList();
|
private final IItemList<IAEItemStack> missing = AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ).createList();
|
||||||
|
|
||||||
private final List<IAEItemStack> visual = new ArrayList<>();
|
private final List<IAEItemStack> visual = new ArrayList<>();
|
||||||
|
|
||||||
@@ -352,11 +353,11 @@ public class GuiCraftConfirm extends AEBaseGui
|
|||||||
final int posX = x * ( 1 + sectionLength ) + xo + sectionLength - 19;
|
final int posX = x * ( 1 + sectionLength ) + xo + sectionLength - 19;
|
||||||
final int posY = y * offY + yo;
|
final int posY = y * offY + yo;
|
||||||
|
|
||||||
final ItemStack is = refStack.copy().getItemStack();
|
final ItemStack is = refStack.asItemStackRepresentation();
|
||||||
|
|
||||||
if( this.tooltip == z - viewStart )
|
if( this.tooltip == z - viewStart )
|
||||||
{
|
{
|
||||||
dspToolTip = Platform.getItemDisplayName( is );
|
dspToolTip = Platform.getItemDisplayName( refStack );
|
||||||
|
|
||||||
if( lineList.size() > 0 )
|
if( lineList.size() > 0 )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ import appeng.api.AEApi;
|
|||||||
import appeng.api.config.SortDir;
|
import appeng.api.config.SortDir;
|
||||||
import appeng.api.config.SortOrder;
|
import appeng.api.config.SortOrder;
|
||||||
import appeng.api.config.ViewItems;
|
import appeng.api.config.ViewItems;
|
||||||
|
import appeng.api.storage.channels.IItemStorageChannel;
|
||||||
import appeng.api.storage.data.IAEItemStack;
|
import appeng.api.storage.data.IAEItemStack;
|
||||||
import appeng.api.storage.data.IItemList;
|
import appeng.api.storage.data.IItemList;
|
||||||
import appeng.api.util.AEColor;
|
import appeng.api.util.AEColor;
|
||||||
@@ -84,9 +85,9 @@ public class GuiCraftingCPU extends AEBaseGui implements ISortSource
|
|||||||
|
|
||||||
private final ContainerCraftingCPU craftingCpu;
|
private final ContainerCraftingCPU craftingCpu;
|
||||||
|
|
||||||
private IItemList<IAEItemStack> storage = AEApi.instance().storage().createItemList();
|
private IItemList<IAEItemStack> storage = AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ).createList();
|
||||||
private IItemList<IAEItemStack> active = AEApi.instance().storage().createItemList();
|
private IItemList<IAEItemStack> active = AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ).createList();
|
||||||
private IItemList<IAEItemStack> pending = AEApi.instance().storage().createItemList();
|
private IItemList<IAEItemStack> pending = AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ).createList();
|
||||||
|
|
||||||
private List<IAEItemStack> visual = new ArrayList<>();
|
private List<IAEItemStack> visual = new ArrayList<>();
|
||||||
private GuiButton cancel;
|
private GuiButton cancel;
|
||||||
@@ -110,9 +111,9 @@ public class GuiCraftingCPU extends AEBaseGui implements ISortSource
|
|||||||
|
|
||||||
public void clearItems()
|
public void clearItems()
|
||||||
{
|
{
|
||||||
this.storage = AEApi.instance().storage().createItemList();
|
this.storage = AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ).createList();
|
||||||
this.active = AEApi.instance().storage().createItemList();
|
this.active = AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ).createList();
|
||||||
this.pending = AEApi.instance().storage().createItemList();
|
this.pending = AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ).createList();
|
||||||
this.visual = new ArrayList<>();
|
this.visual = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -309,11 +310,11 @@ public class GuiCraftingCPU extends AEBaseGui implements ISortSource
|
|||||||
final int posX = x * ( 1 + SECTION_LENGTH ) + ITEMSTACK_LEFT_OFFSET + SECTION_LENGTH - 19;
|
final int posX = x * ( 1 + SECTION_LENGTH ) + ITEMSTACK_LEFT_OFFSET + SECTION_LENGTH - 19;
|
||||||
final int posY = y * offY + ITEMSTACK_TOP_OFFSET;
|
final int posY = y * offY + ITEMSTACK_TOP_OFFSET;
|
||||||
|
|
||||||
final ItemStack is = refStack.copy().getItemStack();
|
final ItemStack is = refStack.asItemStackRepresentation();
|
||||||
|
|
||||||
if( this.tooltip == z - viewStart )
|
if( this.tooltip == z - viewStart )
|
||||||
{
|
{
|
||||||
dspToolTip = Platform.getItemDisplayName( is );
|
dspToolTip = Platform.getItemDisplayName( refStack );
|
||||||
|
|
||||||
if( lineList.size() > 0 )
|
if( lineList.size() > 0 )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ import net.minecraft.nbt.NBTTagCompound;
|
|||||||
import net.minecraft.nbt.NBTTagList;
|
import net.minecraft.nbt.NBTTagList;
|
||||||
|
|
||||||
import appeng.api.AEApi;
|
import appeng.api.AEApi;
|
||||||
|
import appeng.api.storage.channels.IItemStorageChannel;
|
||||||
import appeng.client.gui.AEBaseGui;
|
import appeng.client.gui.AEBaseGui;
|
||||||
import appeng.client.gui.widgets.GuiScrollbar;
|
import appeng.client.gui.widgets.GuiScrollbar;
|
||||||
import appeng.client.gui.widgets.MEGuiTextField;
|
import appeng.client.gui.widgets.MEGuiTextField;
|
||||||
@@ -347,7 +348,9 @@ public class GuiInterfaceTerminal extends AEBaseGui
|
|||||||
final ItemStack parsedItemStack = new ItemStack( outTag.getCompoundTagAt( i ) );
|
final ItemStack parsedItemStack = new ItemStack( outTag.getCompoundTagAt( i ) );
|
||||||
if( !parsedItemStack.isEmpty() )
|
if( !parsedItemStack.isEmpty() )
|
||||||
{
|
{
|
||||||
final String displayName = Platform.getItemDisplayName( AEApi.instance().storage().createItemStack( parsedItemStack ) ).toLowerCase();
|
final String displayName = Platform
|
||||||
|
.getItemDisplayName( AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ).createStack( parsedItemStack ) )
|
||||||
|
.toLowerCase();
|
||||||
if( displayName.contains( searchTerm ) )
|
if( displayName.contains( searchTerm ) )
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ import appeng.core.sync.network.NetworkHandler;
|
|||||||
import appeng.core.sync.packets.PacketSwitchGuis;
|
import appeng.core.sync.packets.PacketSwitchGuis;
|
||||||
import appeng.core.sync.packets.PacketValueConfig;
|
import appeng.core.sync.packets.PacketValueConfig;
|
||||||
import appeng.helpers.WirelessTerminalGuiObject;
|
import appeng.helpers.WirelessTerminalGuiObject;
|
||||||
|
import appeng.integration.Integrations;
|
||||||
import appeng.parts.reporting.AbstractPartTerminal;
|
import appeng.parts.reporting.AbstractPartTerminal;
|
||||||
import appeng.tile.misc.TileSecurityStation;
|
import appeng.tile.misc.TileSecurityStation;
|
||||||
import appeng.util.IConfigManagerHost;
|
import appeng.util.IConfigManagerHost;
|
||||||
@@ -291,6 +292,7 @@ public class GuiMEMonitorable extends AEBaseMEGui implements ISortSource, IConfi
|
|||||||
this.buttonList.add(
|
this.buttonList.add(
|
||||||
this.searchBoxSettings = new GuiImgButton( this.guiLeft - 18, offset, Settings.SEARCH_MODE, AEConfig.instance().getConfigManager().getSetting(
|
this.searchBoxSettings = new GuiImgButton( this.guiLeft - 18, offset, Settings.SEARCH_MODE, AEConfig.instance().getConfigManager().getSetting(
|
||||||
Settings.SEARCH_MODE ) ) );
|
Settings.SEARCH_MODE ) ) );
|
||||||
|
|
||||||
offset += 20;
|
offset += 20;
|
||||||
|
|
||||||
if( !( this instanceof GuiMEPortableCell ) || this instanceof GuiWirelessTerm )
|
if( !( this instanceof GuiMEPortableCell ) || this instanceof GuiWirelessTerm )
|
||||||
@@ -304,6 +306,7 @@ public class GuiMEMonitorable extends AEBaseMEGui implements ISortSource, IConfi
|
|||||||
this.searchField.setEnableBackgroundDrawing( false );
|
this.searchField.setEnableBackgroundDrawing( false );
|
||||||
this.searchField.setMaxStringLength( 25 );
|
this.searchField.setMaxStringLength( 25 );
|
||||||
this.searchField.setTextColor( 0xFFFFFF );
|
this.searchField.setTextColor( 0xFFFFFF );
|
||||||
|
this.searchField.setSelectionColor( 0xFF99FF99 );
|
||||||
this.searchField.setVisible( true );
|
this.searchField.setVisible( true );
|
||||||
|
|
||||||
if( this.viewCell || this instanceof GuiWirelessTerm )
|
if( this.viewCell || this instanceof GuiWirelessTerm )
|
||||||
@@ -313,13 +316,25 @@ public class GuiMEMonitorable extends AEBaseMEGui implements ISortSource, IConfi
|
|||||||
this.craftingStatusBtn.setHideEdge( 13 );
|
this.craftingStatusBtn.setHideEdge( 13 );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Enum setting = AEConfig.instance().getSetting( "Terminal", SearchBoxMode.class, SearchBoxMode.AUTOSEARCH );
|
final Enum searchModeSetting = AEConfig.instance().getConfigManager().getSetting( Settings.SEARCH_MODE );
|
||||||
final Enum setting = AEConfig.instance().getConfigManager().getSetting( Settings.SEARCH_MODE );
|
|
||||||
this.searchField.setFocused( SearchBoxMode.AUTOSEARCH == setting || SearchBoxMode.JEI_AUTOSEARCH == setting );
|
|
||||||
|
|
||||||
if( this.isSubGui() )
|
final boolean isAutoFocus = SearchBoxMode.AUTOSEARCH == searchModeSetting || SearchBoxMode.JEI_AUTOSEARCH == searchModeSetting || SearchBoxMode.AUTOSEARCH_KEEP == searchModeSetting || SearchBoxMode.JEI_AUTOSEARCH_KEEP == searchModeSetting;
|
||||||
|
final boolean isManualFocus = SearchBoxMode.MANUAL_SEARCH == searchModeSetting || SearchBoxMode.JEI_MANUAL_SEARCH == searchModeSetting || SearchBoxMode.MANUAL_SEARCH_KEEP == searchModeSetting || SearchBoxMode.JEI_MANUAL_SEARCH_KEEP == searchModeSetting;
|
||||||
|
final boolean isKeepFilter = SearchBoxMode.AUTOSEARCH_KEEP == searchModeSetting || SearchBoxMode.JEI_AUTOSEARCH_KEEP == searchModeSetting || SearchBoxMode.MANUAL_SEARCH_KEEP == searchModeSetting || SearchBoxMode.JEI_MANUAL_SEARCH_KEEP == searchModeSetting;
|
||||||
|
final boolean isJEIEnabled = SearchBoxMode.JEI_AUTOSEARCH == searchModeSetting || SearchBoxMode.JEI_MANUAL_SEARCH == searchModeSetting;
|
||||||
|
|
||||||
|
this.searchField.setFocused( isAutoFocus );
|
||||||
|
this.searchField.setCanLoseFocus( isManualFocus );
|
||||||
|
|
||||||
|
if( isJEIEnabled )
|
||||||
|
{
|
||||||
|
memoryText = Integrations.jei().getSearchText();
|
||||||
|
}
|
||||||
|
|
||||||
|
if( isKeepFilter && memoryText != null && !memoryText.isEmpty() )
|
||||||
{
|
{
|
||||||
this.searchField.setText( memoryText );
|
this.searchField.setText( memoryText );
|
||||||
|
this.searchField.selectAll();
|
||||||
this.repo.setSearchString( memoryText );
|
this.repo.setSearchString( memoryText );
|
||||||
this.repo.updateView();
|
this.repo.updateView();
|
||||||
this.setScrollBar();
|
this.setScrollBar();
|
||||||
@@ -351,6 +366,7 @@ public class GuiMEMonitorable extends AEBaseMEGui implements ISortSource, IConfi
|
|||||||
|
|
||||||
craftingGridOffsetX -= 25;
|
craftingGridOffsetX -= 25;
|
||||||
craftingGridOffsetY -= 6;
|
craftingGridOffsetY -= 6;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -363,12 +379,7 @@ public class GuiMEMonitorable extends AEBaseMEGui implements ISortSource, IConfi
|
|||||||
@Override
|
@Override
|
||||||
protected void mouseClicked( final int xCoord, final int yCoord, final int btn ) throws IOException
|
protected void mouseClicked( final int xCoord, final int yCoord, final int btn ) throws IOException
|
||||||
{
|
{
|
||||||
final Enum searchMode = AEConfig.instance().getConfigManager().getSetting( Settings.SEARCH_MODE );
|
this.searchField.mouseClicked( xCoord, yCoord, btn );
|
||||||
|
|
||||||
if( searchMode != SearchBoxMode.AUTOSEARCH && searchMode != SearchBoxMode.JEI_AUTOSEARCH )
|
|
||||||
{
|
|
||||||
this.searchField.mouseClicked( xCoord, yCoord, btn );
|
|
||||||
}
|
|
||||||
|
|
||||||
if( btn == 1 && this.searchField.isMouseIn( xCoord, yCoord ) )
|
if( btn == 1 && this.searchField.isMouseIn( xCoord, yCoord ) )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -180,7 +180,7 @@ public class GuiNetworkStatus extends AEBaseGui implements ISortSource
|
|||||||
|
|
||||||
if( this.tooltip == z - viewStart )
|
if( this.tooltip == z - viewStart )
|
||||||
{
|
{
|
||||||
toolTip = Platform.getItemDisplayName( this.repo.getItem( z ) );
|
toolTip = Platform.getItemDisplayName( refStack );
|
||||||
|
|
||||||
toolTip += ( '\n' + GuiText.Installed.getLocal() + ": " + ( refStack.getStackSize() ) );
|
toolTip += ( '\n' + GuiText.Installed.getLocal() + ": " + ( refStack.getStackSize() ) );
|
||||||
if( refStack.getCountRequestable() > 0 )
|
if( refStack.getCountRequestable() > 0 )
|
||||||
@@ -192,7 +192,7 @@ public class GuiNetworkStatus extends AEBaseGui implements ISortSource
|
|||||||
toolPosY = y * 18 + yo;
|
toolPosY = y * 18 + yo;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.drawItem( posX, posY, this.repo.getItem( z ) );
|
this.drawItem( posX, posY, refStack.asItemStackRepresentation() );
|
||||||
|
|
||||||
x++;
|
x++;
|
||||||
|
|
||||||
@@ -237,10 +237,11 @@ public class GuiNetworkStatus extends AEBaseGui implements ISortSource
|
|||||||
this.getScrollBar().setRange( 0, ( size + 4 ) / 5 - this.rows, 1 );
|
this.getScrollBar().setRange( 0, ( size + 4 ) / 5 - this.rows, 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Vanilla version...
|
@Override
|
||||||
protected void drawItemStackTooltip( final ItemStack stack, final int x, final int y )
|
protected void renderToolTip( final ItemStack stack, final int x, final int y )
|
||||||
{
|
{
|
||||||
final Slot s = this.getSlot( x, y );
|
final Slot s = this.getSlot( x, y );
|
||||||
|
|
||||||
if( s instanceof SlotME && stack != null )
|
if( s instanceof SlotME && stack != null )
|
||||||
{
|
{
|
||||||
IAEItemStack myStack = null;
|
IAEItemStack myStack = null;
|
||||||
@@ -270,7 +271,8 @@ public class GuiNetworkStatus extends AEBaseGui implements ISortSource
|
|||||||
this.drawTooltip( x, y, currentToolTip );
|
this.drawTooltip( x, y, currentToolTip );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// super.drawItemStackTooltip( stack, x, y );
|
|
||||||
|
super.renderToolTip( stack, x, y );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -110,6 +110,13 @@ public class GuiImgButton extends GuiButton implements ITooltip
|
|||||||
this.registerApp( 16 * 2 + 5, Settings.SEARCH_MODE, SearchBoxMode.JEI_AUTOSEARCH, ButtonToolTips.SearchMode, ButtonToolTips.SearchMode_JEIAuto );
|
this.registerApp( 16 * 2 + 5, Settings.SEARCH_MODE, SearchBoxMode.JEI_AUTOSEARCH, ButtonToolTips.SearchMode, ButtonToolTips.SearchMode_JEIAuto );
|
||||||
this.registerApp( 16 * 2 + 6, Settings.SEARCH_MODE, SearchBoxMode.JEI_MANUAL_SEARCH, ButtonToolTips.SearchMode,
|
this.registerApp( 16 * 2 + 6, Settings.SEARCH_MODE, SearchBoxMode.JEI_MANUAL_SEARCH, ButtonToolTips.SearchMode,
|
||||||
ButtonToolTips.SearchMode_JEIStandard );
|
ButtonToolTips.SearchMode_JEIStandard );
|
||||||
|
this.registerApp( 16 * 2 + 7, Settings.SEARCH_MODE, SearchBoxMode.AUTOSEARCH_KEEP, ButtonToolTips.SearchMode, ButtonToolTips.SearchMode_AutoKeep );
|
||||||
|
this.registerApp( 16 * 2 + 8, Settings.SEARCH_MODE, SearchBoxMode.MANUAL_SEARCH_KEEP, ButtonToolTips.SearchMode,
|
||||||
|
ButtonToolTips.SearchMode_StandardKeep );
|
||||||
|
this.registerApp( 16 * 2 + 9, Settings.SEARCH_MODE, SearchBoxMode.JEI_AUTOSEARCH_KEEP, ButtonToolTips.SearchMode,
|
||||||
|
ButtonToolTips.SearchMode_JEIAutoKeep );
|
||||||
|
this.registerApp( 16 * 2 + 10, Settings.SEARCH_MODE, SearchBoxMode.JEI_MANUAL_SEARCH_KEEP, ButtonToolTips.SearchMode,
|
||||||
|
ButtonToolTips.SearchMode_JEIStandardKeep );
|
||||||
|
|
||||||
this.registerApp( 16 * 5 + 3, Settings.LEVEL_TYPE, LevelType.ENERGY_LEVEL, ButtonToolTips.LevelType, ButtonToolTips.LevelType_Energy );
|
this.registerApp( 16 * 5 + 3, Settings.LEVEL_TYPE, LevelType.ENERGY_LEVEL, ButtonToolTips.LevelType, ButtonToolTips.LevelType_Energy );
|
||||||
this.registerApp( 16 * 4 + 3, Settings.LEVEL_TYPE, LevelType.ITEM_LEVEL, ButtonToolTips.LevelType, ButtonToolTips.LevelType_Item );
|
this.registerApp( 16 * 4 + 3, Settings.LEVEL_TYPE, LevelType.ITEM_LEVEL, ButtonToolTips.LevelType, ButtonToolTips.LevelType_Item );
|
||||||
|
|||||||
@@ -21,6 +21,10 @@ package appeng.client.gui.widgets;
|
|||||||
|
|
||||||
import net.minecraft.client.gui.FontRenderer;
|
import net.minecraft.client.gui.FontRenderer;
|
||||||
import net.minecraft.client.gui.GuiTextField;
|
import net.minecraft.client.gui.GuiTextField;
|
||||||
|
import net.minecraft.client.renderer.BufferBuilder;
|
||||||
|
import net.minecraft.client.renderer.GlStateManager;
|
||||||
|
import net.minecraft.client.renderer.Tessellator;
|
||||||
|
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -39,6 +43,7 @@ public class MEGuiTextField extends GuiTextField
|
|||||||
private final int _yPos;
|
private final int _yPos;
|
||||||
private final int _width;
|
private final int _width;
|
||||||
private final int _height;
|
private final int _height;
|
||||||
|
private int selectionColor = 0xFF00FF00;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Uses the values to instantiate a padded version of a text field.
|
* Uses the values to instantiate a padded version of a text field.
|
||||||
@@ -66,8 +71,11 @@ public class MEGuiTextField extends GuiTextField
|
|||||||
super.mouseClicked( xPos, yPos, button );
|
super.mouseClicked( xPos, yPos, button );
|
||||||
|
|
||||||
final boolean requiresFocus = this.isMouseIn( xPos, yPos );
|
final boolean requiresFocus = this.isMouseIn( xPos, yPos );
|
||||||
|
if( !this.isFocused() )
|
||||||
|
{
|
||||||
|
this.setFocused( requiresFocus );
|
||||||
|
}
|
||||||
|
|
||||||
this.setFocused( requiresFocus );
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -86,4 +94,69 @@ public class MEGuiTextField extends GuiTextField
|
|||||||
|
|
||||||
return withinXRange && withinYRange;
|
return withinXRange && withinYRange;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void selectAll()
|
||||||
|
{
|
||||||
|
this.setCursorPosition( 0 );
|
||||||
|
this.setSelectionPos( this.getMaxStringLength() );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSelectionColor( int color )
|
||||||
|
{
|
||||||
|
this.selectionColor = color;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void drawSelectionBox( int startX, int startY, int endX, int endY )
|
||||||
|
{
|
||||||
|
if( startX < endX )
|
||||||
|
{
|
||||||
|
int i = startX;
|
||||||
|
startX = endX;
|
||||||
|
endX = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
startX += 1;
|
||||||
|
endX -= 1;
|
||||||
|
|
||||||
|
if( startY < endY )
|
||||||
|
{
|
||||||
|
int j = startY;
|
||||||
|
startY = endY;
|
||||||
|
endY = j;
|
||||||
|
}
|
||||||
|
|
||||||
|
startY -= PADDING;
|
||||||
|
|
||||||
|
if( endX > this.x + this.width )
|
||||||
|
{
|
||||||
|
endX = this.x + this.width;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( startX > this.x + this.width )
|
||||||
|
{
|
||||||
|
startX = this.x + this.width;
|
||||||
|
}
|
||||||
|
|
||||||
|
Tessellator tessellator = Tessellator.getInstance();
|
||||||
|
BufferBuilder bufferbuilder = tessellator.getBuffer();
|
||||||
|
|
||||||
|
float red = (float) ( this.selectionColor >> 16 & 255 ) / 255.0F;
|
||||||
|
float blue = (float) ( this.selectionColor >> 8 & 255 ) / 255.0F;
|
||||||
|
float green = (float) ( this.selectionColor & 255 ) / 255.0F;
|
||||||
|
float alpha = (float) ( this.selectionColor >> 24 & 255 ) / 255.0F;
|
||||||
|
|
||||||
|
GlStateManager.color( red, green, blue, alpha );
|
||||||
|
GlStateManager.disableTexture2D();
|
||||||
|
GlStateManager.enableColorLogic();
|
||||||
|
GlStateManager.colorLogicOp( GlStateManager.LogicOp.OR_REVERSE );
|
||||||
|
bufferbuilder.begin( 7, DefaultVertexFormats.POSITION );
|
||||||
|
bufferbuilder.pos( (double) startX, (double) endY, 0.0D ).endVertex();
|
||||||
|
bufferbuilder.pos( (double) endX, (double) endY, 0.0D ).endVertex();
|
||||||
|
bufferbuilder.pos( (double) endX, (double) startY, 0.0D ).endVertex();
|
||||||
|
bufferbuilder.pos( (double) startX, (double) startY, 0.0D ).endVertex();
|
||||||
|
tessellator.draw();
|
||||||
|
GlStateManager.disableColorLogic();
|
||||||
|
GlStateManager.enableTexture2D();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ public class InternalSlotME
|
|||||||
|
|
||||||
ItemStack getStack()
|
ItemStack getStack()
|
||||||
{
|
{
|
||||||
return this.repo.getItem( this.offset );
|
return this.getAEStack() == null ? ItemStack.EMPTY : this.getAEStack().asItemStackRepresentation();
|
||||||
}
|
}
|
||||||
|
|
||||||
IAEItemStack getAEStack()
|
IAEItemStack getAEStack()
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ import appeng.api.config.Settings;
|
|||||||
import appeng.api.config.SortOrder;
|
import appeng.api.config.SortOrder;
|
||||||
import appeng.api.config.ViewItems;
|
import appeng.api.config.ViewItems;
|
||||||
import appeng.api.config.YesNo;
|
import appeng.api.config.YesNo;
|
||||||
|
import appeng.api.storage.channels.IItemStorageChannel;
|
||||||
import appeng.api.storage.data.IAEItemStack;
|
import appeng.api.storage.data.IAEItemStack;
|
||||||
import appeng.api.storage.data.IItemList;
|
import appeng.api.storage.data.IItemList;
|
||||||
import appeng.client.gui.widgets.IScrollSource;
|
import appeng.client.gui.widgets.IScrollSource;
|
||||||
@@ -48,9 +49,8 @@ import appeng.util.prioritylist.IPartitionList;
|
|||||||
public class ItemRepo
|
public class ItemRepo
|
||||||
{
|
{
|
||||||
|
|
||||||
private final IItemList<IAEItemStack> list = AEApi.instance().storage().createItemList();
|
private final IItemList<IAEItemStack> list = AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ).createList();
|
||||||
private final ArrayList<IAEItemStack> view = new ArrayList<>();
|
private final ArrayList<IAEItemStack> view = new ArrayList<>();
|
||||||
private final ArrayList<ItemStack> dsp = new ArrayList<>();
|
|
||||||
private final IScrollSource src;
|
private final IScrollSource src;
|
||||||
private final ISortSource sortSrc;
|
private final ISortSource sortSrc;
|
||||||
|
|
||||||
@@ -78,17 +78,6 @@ public class ItemRepo
|
|||||||
return this.view.get( idx );
|
return this.view.get( idx );
|
||||||
}
|
}
|
||||||
|
|
||||||
public ItemStack getItem( int idx )
|
|
||||||
{
|
|
||||||
idx += this.src.getCurrentScroll() * this.rowSize;
|
|
||||||
|
|
||||||
if( idx >= this.dsp.size() )
|
|
||||||
{
|
|
||||||
return ItemStack.EMPTY;
|
|
||||||
}
|
|
||||||
return this.dsp.get( idx );
|
|
||||||
}
|
|
||||||
|
|
||||||
void setSearch( final String search )
|
void setSearch( final String search )
|
||||||
{
|
{
|
||||||
this.searchString = search == null ? "" : search;
|
this.searchString = search == null ? "" : search;
|
||||||
@@ -118,21 +107,18 @@ public class ItemRepo
|
|||||||
public void updateView()
|
public void updateView()
|
||||||
{
|
{
|
||||||
this.view.clear();
|
this.view.clear();
|
||||||
this.dsp.clear();
|
|
||||||
|
|
||||||
this.view.ensureCapacity( this.list.size() );
|
this.view.ensureCapacity( this.list.size() );
|
||||||
this.dsp.ensureCapacity( this.list.size() );
|
|
||||||
|
|
||||||
final Enum viewMode = this.sortSrc.getSortDisplay();
|
final Enum viewMode = this.sortSrc.getSortDisplay();
|
||||||
final Enum searchMode = AEConfig.instance().getConfigManager().getSetting( Settings.SEARCH_MODE );
|
final Enum searchMode = AEConfig.instance().getConfigManager().getSetting( Settings.SEARCH_MODE );
|
||||||
if( searchMode == SearchBoxMode.JEI_AUTOSEARCH || searchMode == SearchBoxMode.JEI_MANUAL_SEARCH )
|
if( searchMode == SearchBoxMode.JEI_AUTOSEARCH || searchMode == SearchBoxMode.JEI_MANUAL_SEARCH || searchMode == SearchBoxMode.JEI_AUTOSEARCH_KEEP || searchMode == SearchBoxMode.JEI_MANUAL_SEARCH_KEEP )
|
||||||
{
|
{
|
||||||
this.updateJEI( this.searchString );
|
this.updateJEI( this.searchString );
|
||||||
}
|
}
|
||||||
|
|
||||||
this.innerSearch = this.searchString;
|
this.innerSearch = this.searchString;
|
||||||
final boolean terminalSearchToolTips = AEConfig.instance().getConfigManager().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;
|
boolean searchMod = false;
|
||||||
if( this.innerSearch.startsWith( "@" ) )
|
if( this.innerSearch.startsWith( "@" ) )
|
||||||
@@ -177,12 +163,10 @@ public class ItemRepo
|
|||||||
if( viewMode == ViewItems.CRAFTABLE )
|
if( viewMode == ViewItems.CRAFTABLE )
|
||||||
{
|
{
|
||||||
is = is.copy();
|
is = is.copy();
|
||||||
// is.setStackSize( 0 ) triggers isEmpty() and thus only shows empty stacks!
|
is.setStackSize( 0 );
|
||||||
is.setStackSize( 1 );
|
|
||||||
is.setShowCraftingLabel( true );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if( viewMode == ViewItems.STORED && is.getShowCraftingLabel() )
|
if( viewMode == ViewItems.STORED && is.getStackSize() == 0 )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -196,7 +180,7 @@ public class ItemRepo
|
|||||||
notDone = false;
|
notDone = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( terminalSearchToolTips && notDone )
|
if( terminalSearchToolTips && notDone && !searchMod )
|
||||||
{
|
{
|
||||||
for( final Object lp : Platform.getTooltip( is ) )
|
for( final Object lp : Platform.getTooltip( is ) )
|
||||||
{
|
{
|
||||||
@@ -237,11 +221,6 @@ public class ItemRepo
|
|||||||
{
|
{
|
||||||
Collections.sort( this.view, ItemSorters.CONFIG_BASED_SORT_BY_NAME );
|
Collections.sort( this.view, ItemSorters.CONFIG_BASED_SORT_BY_NAME );
|
||||||
}
|
}
|
||||||
|
|
||||||
for( final IAEItemStack is : this.view )
|
|
||||||
{
|
|
||||||
this.dsp.add( is.getItemStack() );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateJEI( String filter )
|
private void updateJEI( String filter )
|
||||||
|
|||||||
@@ -0,0 +1,69 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of Applied Energistics 2.
|
||||||
|
* Copyright (c) 2013 - 2017, 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.client.render;
|
||||||
|
|
||||||
|
|
||||||
|
import javax.vecmath.Matrix4f;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
|
|
||||||
|
import net.minecraft.client.renderer.block.model.IBakedModel;
|
||||||
|
import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
|
||||||
|
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
||||||
|
|
||||||
|
|
||||||
|
public abstract class DelegateBakedModel implements IBakedModel
|
||||||
|
{
|
||||||
|
private IBakedModel baseModel;
|
||||||
|
|
||||||
|
protected DelegateBakedModel( IBakedModel base )
|
||||||
|
{
|
||||||
|
this.baseModel = base;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Pair<? extends IBakedModel, Matrix4f> handlePerspective( ItemCameraTransforms.TransformType type )
|
||||||
|
{
|
||||||
|
Pair<? extends IBakedModel, Matrix4f> pair = this.baseModel.handlePerspective( type );
|
||||||
|
return Pair.of( this, pair.getValue() );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TextureAtlasSprite getParticleTexture()
|
||||||
|
{
|
||||||
|
return this.baseModel.getParticleTexture();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ItemCameraTransforms getItemCameraTransforms()
|
||||||
|
{
|
||||||
|
return this.baseModel.getItemCameraTransforms();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isAmbientOcclusion()
|
||||||
|
{
|
||||||
|
return this.baseModel.isAmbientOcclusion();
|
||||||
|
}
|
||||||
|
|
||||||
|
public IBakedModel getBaseModel()
|
||||||
|
{
|
||||||
|
return this.baseModel;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -27,9 +27,7 @@ import javax.annotation.Nullable;
|
|||||||
import net.minecraft.block.state.IBlockState;
|
import net.minecraft.block.state.IBlockState;
|
||||||
import net.minecraft.client.renderer.block.model.BakedQuad;
|
import net.minecraft.client.renderer.block.model.BakedQuad;
|
||||||
import net.minecraft.client.renderer.block.model.IBakedModel;
|
import net.minecraft.client.renderer.block.model.IBakedModel;
|
||||||
import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
|
|
||||||
import net.minecraft.client.renderer.block.model.ItemOverrideList;
|
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.client.renderer.vertex.VertexFormat;
|
||||||
import net.minecraft.entity.EntityLivingBase;
|
import net.minecraft.entity.EntityLivingBase;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
@@ -44,16 +42,13 @@ import appeng.items.parts.ItemFacade;
|
|||||||
* on the item stack.
|
* on the item stack.
|
||||||
* A custom Item Override List is used to accomplish this.
|
* A custom Item Override List is used to accomplish this.
|
||||||
*/
|
*/
|
||||||
public class FacadeDispatcherBakedModel implements IBakedModel
|
public class FacadeDispatcherBakedModel extends DelegateBakedModel
|
||||||
{
|
{
|
||||||
|
|
||||||
private final IBakedModel baseModel;
|
|
||||||
|
|
||||||
private final VertexFormat format;
|
private final VertexFormat format;
|
||||||
|
|
||||||
public FacadeDispatcherBakedModel( IBakedModel baseModel, VertexFormat format )
|
public FacadeDispatcherBakedModel( IBakedModel baseModel, VertexFormat format )
|
||||||
{
|
{
|
||||||
this.baseModel = baseModel;
|
super( baseModel );
|
||||||
this.format = format;
|
this.format = format;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,16 +59,10 @@ public class FacadeDispatcherBakedModel implements IBakedModel
|
|||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isAmbientOcclusion()
|
|
||||||
{
|
|
||||||
return this.baseModel.isAmbientOcclusion();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isGui3d()
|
public boolean isGui3d()
|
||||||
{
|
{
|
||||||
return this.baseModel.isGui3d();
|
return this.getBaseModel().isGui3d();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -82,18 +71,6 @@ public class FacadeDispatcherBakedModel implements IBakedModel
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public TextureAtlasSprite getParticleTexture()
|
|
||||||
{
|
|
||||||
return this.baseModel.getParticleTexture();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemCameraTransforms getItemCameraTransforms()
|
|
||||||
{
|
|
||||||
return this.baseModel.getItemCameraTransforms();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemOverrideList getOverrides()
|
public ItemOverrideList getOverrides()
|
||||||
{
|
{
|
||||||
@@ -112,7 +89,8 @@ public class FacadeDispatcherBakedModel implements IBakedModel
|
|||||||
IBlockState state = itemFacade.getTextureBlockState( stack );
|
IBlockState state = itemFacade.getTextureBlockState( stack );
|
||||||
ItemStack textureItem = itemFacade.getTextureItem( stack );
|
ItemStack textureItem = itemFacade.getTextureItem( stack );
|
||||||
|
|
||||||
return new FacadeWithBlockBakedModel( FacadeDispatcherBakedModel.this.baseModel, state, textureItem, FacadeDispatcherBakedModel.this.format );
|
return new FacadeWithBlockBakedModel( FacadeDispatcherBakedModel.this
|
||||||
|
.getBaseModel(), state, textureItem, FacadeDispatcherBakedModel.this.format );
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ import net.minecraft.util.ResourceLocation;
|
|||||||
import net.minecraftforge.client.model.IModel;
|
import net.minecraftforge.client.model.IModel;
|
||||||
import net.minecraftforge.client.model.ModelLoaderRegistry;
|
import net.minecraftforge.client.model.ModelLoaderRegistry;
|
||||||
import net.minecraftforge.common.model.IModelState;
|
import net.minecraftforge.common.model.IModelState;
|
||||||
import net.minecraftforge.common.model.TRSRTransformation;
|
|
||||||
|
|
||||||
import appeng.core.AppEng;
|
import appeng.core.AppEng;
|
||||||
|
|
||||||
@@ -41,10 +40,27 @@ import appeng.core.AppEng;
|
|||||||
*/
|
*/
|
||||||
public class FacadeItemModel implements IModel
|
public class FacadeItemModel implements IModel
|
||||||
{
|
{
|
||||||
|
|
||||||
// We use this to get the default item transforms and make our lives easier
|
// We use this to get the default item transforms and make our lives easier
|
||||||
private static final ResourceLocation MODEL_BASE = new ResourceLocation( AppEng.MOD_ID, "item/facade_base" );
|
private static final ResourceLocation MODEL_BASE = new ResourceLocation( AppEng.MOD_ID, "item/facade_base" );
|
||||||
|
|
||||||
|
private IModel baseModel = null;
|
||||||
|
|
||||||
|
private IModel getBaseModel()
|
||||||
|
{
|
||||||
|
if( this.baseModel == null )
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
baseModel = ModelLoaderRegistry.getModel( MODEL_BASE );
|
||||||
|
}
|
||||||
|
catch( Exception e )
|
||||||
|
{
|
||||||
|
throw new RuntimeException( e );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return this.baseModel;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<ResourceLocation> getDependencies()
|
public Collection<ResourceLocation> getDependencies()
|
||||||
{
|
{
|
||||||
@@ -60,17 +76,7 @@ public class FacadeItemModel implements IModel
|
|||||||
@Override
|
@Override
|
||||||
public IBakedModel bake( IModelState state, VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter )
|
public IBakedModel bake( IModelState state, VertexFormat format, Function<ResourceLocation, TextureAtlasSprite> bakedTextureGetter )
|
||||||
{
|
{
|
||||||
IModel baseModel;
|
IBakedModel bakedBaseModel = this.getBaseModel().bake( state, format, bakedTextureGetter );
|
||||||
try
|
|
||||||
{
|
|
||||||
baseModel = ModelLoaderRegistry.getModel( MODEL_BASE );
|
|
||||||
}
|
|
||||||
catch( Exception e )
|
|
||||||
{
|
|
||||||
throw new RuntimeException( e );
|
|
||||||
}
|
|
||||||
|
|
||||||
IBakedModel bakedBaseModel = baseModel.bake( state, format, bakedTextureGetter );
|
|
||||||
|
|
||||||
return new FacadeDispatcherBakedModel( bakedBaseModel, format );
|
return new FacadeDispatcherBakedModel( bakedBaseModel, format );
|
||||||
}
|
}
|
||||||
@@ -78,6 +84,6 @@ public class FacadeItemModel implements IModel
|
|||||||
@Override
|
@Override
|
||||||
public IModelState getDefaultState()
|
public IModelState getDefaultState()
|
||||||
{
|
{
|
||||||
return TRSRTransformation.identity();
|
return getBaseModel().getDefaultState();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,9 +29,7 @@ import net.minecraft.block.state.IBlockState;
|
|||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.renderer.block.model.BakedQuad;
|
import net.minecraft.client.renderer.block.model.BakedQuad;
|
||||||
import net.minecraft.client.renderer.block.model.IBakedModel;
|
import net.minecraft.client.renderer.block.model.IBakedModel;
|
||||||
import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
|
|
||||||
import net.minecraft.client.renderer.block.model.ItemOverrideList;
|
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.client.renderer.vertex.VertexFormat;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
@@ -44,11 +42,8 @@ import appeng.client.render.cablebus.FacadeBuilder;
|
|||||||
* This is the actual baked model that will combine the north face of a given block state
|
* This is the actual baked model that will combine the north face of a given block state
|
||||||
* with the base facade item model to achieve what is then actually rendered on screen.
|
* with the base facade item model to achieve what is then actually rendered on screen.
|
||||||
*/
|
*/
|
||||||
public class FacadeWithBlockBakedModel implements IBakedModel
|
public class FacadeWithBlockBakedModel extends DelegateBakedModel
|
||||||
{
|
{
|
||||||
|
|
||||||
private final IBakedModel baseModel;
|
|
||||||
|
|
||||||
private final IBlockState blockState;
|
private final IBlockState blockState;
|
||||||
|
|
||||||
private final IBakedModel textureModel;
|
private final IBakedModel textureModel;
|
||||||
@@ -59,7 +54,7 @@ public class FacadeWithBlockBakedModel implements IBakedModel
|
|||||||
|
|
||||||
public FacadeWithBlockBakedModel( IBakedModel baseModel, IBlockState blockState, ItemStack textureItem, VertexFormat format )
|
public FacadeWithBlockBakedModel( IBakedModel baseModel, IBlockState blockState, ItemStack textureItem, VertexFormat format )
|
||||||
{
|
{
|
||||||
this.baseModel = baseModel;
|
super( baseModel );
|
||||||
this.blockState = blockState;
|
this.blockState = blockState;
|
||||||
this.textureItem = textureItem;
|
this.textureItem = textureItem;
|
||||||
this.textureModel = Minecraft.getMinecraft().getBlockRendererDispatcher().getModelForState( blockState );
|
this.textureModel = Minecraft.getMinecraft().getBlockRendererDispatcher().getModelForState( blockState );
|
||||||
@@ -79,7 +74,7 @@ public class FacadeWithBlockBakedModel implements IBakedModel
|
|||||||
{
|
{
|
||||||
if( sprite.getTint() != -1 )
|
if( sprite.getTint() != -1 )
|
||||||
{
|
{
|
||||||
builder.setColor( Minecraft.getMinecraft().getItemColors().getColorFromItemstack( this.textureItem, sprite.getTint() ) );
|
builder.setColor( Minecraft.getMinecraft().getItemColors().colorMultiplier( this.textureItem, sprite.getTint() ) );
|
||||||
}
|
}
|
||||||
builder.setTexture( sprite.getSprite() );
|
builder.setTexture( sprite.getSprite() );
|
||||||
builder.setDrawFaces( EnumSet.of( EnumFacing.NORTH ) );
|
builder.setDrawFaces( EnumSet.of( EnumFacing.NORTH ) );
|
||||||
@@ -88,13 +83,7 @@ public class FacadeWithBlockBakedModel implements IBakedModel
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.baseModel.getQuads( state, side, rand );
|
return this.getBaseModel().getQuads( state, side, rand );
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isAmbientOcclusion()
|
|
||||||
{
|
|
||||||
return this.baseModel.isAmbientOcclusion();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -109,18 +98,6 @@ public class FacadeWithBlockBakedModel implements IBakedModel
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public TextureAtlasSprite getParticleTexture()
|
|
||||||
{
|
|
||||||
return this.baseModel.getParticleTexture();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ItemCameraTransforms getItemCameraTransforms()
|
|
||||||
{
|
|
||||||
return this.baseModel.getItemCameraTransforms();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemOverrideList getOverrides()
|
public ItemOverrideList getOverrides()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ package appeng.client.render;
|
|||||||
|
|
||||||
import net.minecraft.client.gui.FontRenderer;
|
import net.minecraft.client.gui.FontRenderer;
|
||||||
import net.minecraft.client.renderer.GlStateManager;
|
import net.minecraft.client.renderer.GlStateManager;
|
||||||
import net.minecraft.item.ItemStack;
|
|
||||||
|
|
||||||
import appeng.api.storage.data.IAEItemStack;
|
import appeng.api.storage.data.IAEItemStack;
|
||||||
import appeng.core.AEConfig;
|
import appeng.core.AEConfig;
|
||||||
@@ -42,9 +41,9 @@ public class StackSizeRenderer
|
|||||||
private static final ISlimReadableNumberConverter SLIM_CONVERTER = ReadableNumberConverter.INSTANCE;
|
private static final ISlimReadableNumberConverter SLIM_CONVERTER = ReadableNumberConverter.INSTANCE;
|
||||||
private static final IWideReadableNumberConverter WIDE_CONVERTER = ReadableNumberConverter.INSTANCE;
|
private static final IWideReadableNumberConverter WIDE_CONVERTER = ReadableNumberConverter.INSTANCE;
|
||||||
|
|
||||||
public void renderStackSize( FontRenderer fontRenderer, IAEItemStack aeStack, ItemStack is, int xPos, int yPos )
|
public void renderStackSize( FontRenderer fontRenderer, IAEItemStack aeStack, int xPos, int yPos )
|
||||||
{
|
{
|
||||||
if( !is.isEmpty() )
|
if( aeStack != 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 float inverseScaleFactor = 1.0f / scaleFactor;
|
||||||
@@ -53,7 +52,7 @@ public class StackSizeRenderer
|
|||||||
final boolean unicodeFlag = fontRenderer.getUnicodeFlag();
|
final boolean unicodeFlag = fontRenderer.getUnicodeFlag();
|
||||||
fontRenderer.setUnicodeFlag( false );
|
fontRenderer.setUnicodeFlag( false );
|
||||||
|
|
||||||
if( aeStack.getShowCraftingLabel() )
|
if( aeStack.getStackSize() == 0 && aeStack.isCraftable() )
|
||||||
{
|
{
|
||||||
final String craftLabelText = AEConfig.instance().useTerminalUseLargeFont() ? GuiText.LargeFontCraft.getLocal() : GuiText.SmallFontCraft
|
final String craftLabelText = AEConfig.instance().useTerminalUseLargeFont() ? GuiText.LargeFontCraft.getLocal() : GuiText.SmallFontCraft
|
||||||
.getLocal();
|
.getLocal();
|
||||||
@@ -71,10 +70,9 @@ public class StackSizeRenderer
|
|||||||
GlStateManager.enableBlend();
|
GlStateManager.enableBlend();
|
||||||
}
|
}
|
||||||
|
|
||||||
final long amount = aeStack != null ? aeStack.getStackSize() : is.getCount();
|
if( aeStack.getStackSize() > 0 )
|
||||||
if( amount != 0 && !aeStack.getShowCraftingLabel() )
|
|
||||||
{
|
{
|
||||||
final String stackSize = this.getToBeRenderedStackSize( amount );
|
final String stackSize = this.getToBeRenderedStackSize( aeStack.getStackSize() );
|
||||||
|
|
||||||
GlStateManager.disableLighting();
|
GlStateManager.disableLighting();
|
||||||
GlStateManager.disableDepth();
|
GlStateManager.disableDepth();
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ public class StaticItemColor implements IItemColor
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getColorFromItemstack( ItemStack stack, int tintIndex )
|
public int colorMultiplier( ItemStack stack, int tintIndex )
|
||||||
{
|
{
|
||||||
return this.color.getVariantByTintIndex( tintIndex );
|
return this.color.getVariantByTintIndex( tintIndex );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -126,8 +126,9 @@ public class TesrRenderHelper
|
|||||||
*/
|
*/
|
||||||
public static void renderItem2dWithAmount( IAEItemStack itemStack, float itemScale, float spacing )
|
public static void renderItem2dWithAmount( IAEItemStack itemStack, float itemScale, float spacing )
|
||||||
{
|
{
|
||||||
|
final ItemStack renderStack = itemStack.asItemStackRepresentation();
|
||||||
|
|
||||||
TesrRenderHelper.renderItem2d( itemStack.getItemStack(), itemScale );
|
TesrRenderHelper.renderItem2d( renderStack, itemScale );
|
||||||
|
|
||||||
final long stackSize = itemStack.getStackSize();
|
final long stackSize = itemStack.getStackSize();
|
||||||
final String renderedStackSize = NUMBER_CONVERTER.toWideReadableForm( stackSize );
|
final String renderedStackSize = NUMBER_CONVERTER.toWideReadableForm( stackSize );
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ package appeng.client.render.cablebus;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.EnumMap;
|
import java.util.EnumMap;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -52,6 +53,8 @@ import appeng.block.networking.BlockCableBus;
|
|||||||
public class CableBusBakedModel implements IBakedModel
|
public class CableBusBakedModel implements IBakedModel
|
||||||
{
|
{
|
||||||
|
|
||||||
|
private static final Map<CableBusRenderState, List<BakedQuad>> CABLE_MODEL_CACHE = new HashMap<>();
|
||||||
|
|
||||||
private final CableBuilder cableBuilder;
|
private final CableBuilder cableBuilder;
|
||||||
|
|
||||||
private final FacadeBuilder facadeBuilder;
|
private final FacadeBuilder facadeBuilder;
|
||||||
@@ -88,8 +91,15 @@ public class CableBusBakedModel implements IBakedModel
|
|||||||
// translucent facades further down below.
|
// translucent facades further down below.
|
||||||
if( layer == BlockRenderLayer.CUTOUT )
|
if( layer == BlockRenderLayer.CUTOUT )
|
||||||
{
|
{
|
||||||
|
|
||||||
// First, handle the cable at the center of the cable bus
|
// First, handle the cable at the center of the cable bus
|
||||||
this.addCableQuads( renderState, quads );
|
final List<BakedQuad> cableModel = CABLE_MODEL_CACHE.computeIfAbsent( renderState, k ->
|
||||||
|
{
|
||||||
|
final List<BakedQuad> model = new ArrayList<>();
|
||||||
|
this.addCableQuads( renderState, model );
|
||||||
|
return model;
|
||||||
|
} );
|
||||||
|
quads.addAll( cableModel );
|
||||||
|
|
||||||
// Then handle attachments
|
// Then handle attachments
|
||||||
for( EnumFacing facing : EnumFacing.values() )
|
for( EnumFacing facing : EnumFacing.values() )
|
||||||
@@ -168,6 +178,8 @@ public class CableBusBakedModel implements IBakedModel
|
|||||||
return firstType == AECableType.DENSE_COVERED && secondType == AECableType.DENSE_COVERED;
|
return firstType == AECableType.DENSE_COVERED && secondType == AECableType.DENSE_COVERED;
|
||||||
case DENSE_SMART:
|
case DENSE_SMART:
|
||||||
return firstType == AECableType.DENSE_SMART && secondType == AECableType.DENSE_SMART;
|
return firstType == AECableType.DENSE_SMART && secondType == AECableType.DENSE_SMART;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -208,6 +220,8 @@ public class CableBusBakedModel implements IBakedModel
|
|||||||
case DENSE_SMART:
|
case DENSE_SMART:
|
||||||
this.cableBuilder.addStraightDenseSmartConnection( facing, cableColor, renderState.getChannelsOnSide().get( facing ), quadsOut );
|
this.cableBuilder.addStraightDenseSmartConnection( facing, cableColor, renderState.getChannelsOnSide().get( facing ), quadsOut );
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return; // Don't render the other form of connection
|
return; // Don't render the other form of connection
|
||||||
@@ -237,6 +251,8 @@ public class CableBusBakedModel implements IBakedModel
|
|||||||
case DENSE_SMART:
|
case DENSE_SMART:
|
||||||
// Dense cables do not render connections to parts since none can be attached
|
// Dense cables do not render connections to parts since none can be attached
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -265,6 +281,8 @@ public class CableBusBakedModel implements IBakedModel
|
|||||||
case DENSE_SMART:
|
case DENSE_SMART:
|
||||||
this.cableBuilder.addDenseSmartConnection( facing, cableColor, connectionType, cableBusAdjacent, channels, quadsOut );
|
this.cableBuilder.addDenseSmartConnection( facing, cableColor, connectionType, cableBusAdjacent, channels, quadsOut );
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -300,10 +318,8 @@ public class CableBusBakedModel implements IBakedModel
|
|||||||
|
|
||||||
TextureAtlasSprite particleTexture = bakedModel.getParticleTexture();
|
TextureAtlasSprite particleTexture = bakedModel.getParticleTexture();
|
||||||
|
|
||||||
// If a part sub-model has no particle texture (indicated by it being the missing texture), don't
|
// If a part sub-model has no particle texture (indicated by it being the missing texture),
|
||||||
// add
|
// don't add it, so we don't get ugly missing texture break particles.
|
||||||
// it,
|
|
||||||
// so we don't get ugly missing texture break particles.
|
|
||||||
if( this.textureMap.getMissingSprite() != particleTexture )
|
if( this.textureMap.getMissingSprite() != particleTexture )
|
||||||
{
|
{
|
||||||
result.add( particleTexture );
|
result.add( particleTexture );
|
||||||
@@ -328,7 +344,7 @@ public class CableBusBakedModel implements IBakedModel
|
|||||||
@Override
|
@Override
|
||||||
public boolean isAmbientOcclusion()
|
public boolean isAmbientOcclusion()
|
||||||
{
|
{
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.EnumMap;
|
import java.util.EnumMap;
|
||||||
import java.util.EnumSet;
|
import java.util.EnumSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
import net.minecraft.util.math.AxisAlignedBB;
|
import net.minecraft.util.math.AxisAlignedBB;
|
||||||
@@ -153,4 +154,43 @@ public class CableBusRenderState
|
|||||||
return this.boundingBoxes;
|
return this.boundingBoxes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode()
|
||||||
|
{
|
||||||
|
final int prime = 31;
|
||||||
|
int result = 1;
|
||||||
|
result = prime * result + ( ( this.attachmentConnections == null ) ? 0 : this.attachmentConnections.hashCode() );
|
||||||
|
result = prime * result + ( ( this.cableBusAdjacent == null ) ? 0 : this.cableBusAdjacent.hashCode() );
|
||||||
|
result = prime * result + ( ( this.cableColor == null ) ? 0 : this.cableColor.hashCode() );
|
||||||
|
result = prime * result + ( ( this.cableType == null ) ? 0 : this.cableType.hashCode() );
|
||||||
|
result = prime * result + ( ( this.channelsOnSide == null ) ? 0 : this.channelsOnSide.hashCode() );
|
||||||
|
result = prime * result + ( ( this.connectionTypes == null ) ? 0 : this.connectionTypes.hashCode() );
|
||||||
|
result = prime * result + ( ( this.coreType == null ) ? 0 : this.coreType.hashCode() );
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals( Object obj )
|
||||||
|
{
|
||||||
|
if( this == obj )
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if( obj == null )
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if( getClass() != obj.getClass() )
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final CableBusRenderState other = (CableBusRenderState) obj;
|
||||||
|
|
||||||
|
return this.cableColor == other.cableColor && this.cableType == other.cableType && this.coreType == other.coreType && Objects
|
||||||
|
.equals( this.attachmentConnections, other.attachmentConnections ) && Objects.equals( this.cableBusAdjacent,
|
||||||
|
other.cableBusAdjacent ) && Objects.equals( this.channelsOnSide, other.channelsOnSide ) && Objects.equals( this.connectionTypes,
|
||||||
|
other.connectionTypes );
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,6 +59,8 @@ public class CubeBuilder
|
|||||||
|
|
||||||
private int color = 0xFFFFFFFF;
|
private int color = 0xFFFFFFFF;
|
||||||
|
|
||||||
|
private boolean useStandardUV = false;
|
||||||
|
|
||||||
private boolean renderFullBright;
|
private boolean renderFullBright;
|
||||||
|
|
||||||
public CubeBuilder( VertexFormat format, List<BakedQuad> output )
|
public CubeBuilder( VertexFormat format, List<BakedQuad> output )
|
||||||
@@ -142,7 +144,9 @@ public class CubeBuilder
|
|||||||
UnpackedBakedQuad.Builder builder = new UnpackedBakedQuad.Builder( this.format );
|
UnpackedBakedQuad.Builder builder = new UnpackedBakedQuad.Builder( this.format );
|
||||||
builder.setTexture( texture );
|
builder.setTexture( texture );
|
||||||
builder.setQuadOrientation( face );
|
builder.setQuadOrientation( face );
|
||||||
|
builder.setQuadTint( -1 );
|
||||||
|
builder.setApplyDiffuseLighting( true );
|
||||||
|
|
||||||
UvVector uv = new UvVector();
|
UvVector uv = new UvVector();
|
||||||
|
|
||||||
// The user might have set specific UV coordinates for this face
|
// The user might have set specific UV coordinates for this face
|
||||||
@@ -154,6 +158,10 @@ public class CubeBuilder
|
|||||||
uv.u2 = texture.getInterpolatedU( customUv.z );
|
uv.u2 = texture.getInterpolatedU( customUv.z );
|
||||||
uv.v2 = texture.getInterpolatedV( customUv.w );
|
uv.v2 = texture.getInterpolatedV( customUv.w );
|
||||||
}
|
}
|
||||||
|
else if( this.useStandardUV )
|
||||||
|
{
|
||||||
|
uv = this.getStandardUv( face, texture, x1, y1, z1, x2, y2, z2 );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
uv = this.getDefaultUv( face, texture, x1, y1, z1, x2, y2, z2 );
|
uv = this.getDefaultUv( face, texture, x1, y1, z1, x2, y2, z2 );
|
||||||
@@ -199,8 +207,7 @@ public class CubeBuilder
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
int[] vertexData = builder.build().getVertexData();
|
this.output.add( builder.build() );
|
||||||
this.output.add( new BakedQuad( vertexData, -1, face, texture, true, this.format ) );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private UvVector getDefaultUv( EnumFacing face, TextureAtlasSprite texture, float x1, float y1, float z1, float x2, float y2, float z2 )
|
private UvVector getDefaultUv( EnumFacing face, TextureAtlasSprite texture, float x1, float y1, float z1, float x2, float y2, float z2 )
|
||||||
@@ -251,6 +258,51 @@ public class CubeBuilder
|
|||||||
return uv;
|
return uv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private UvVector getStandardUv( EnumFacing face, TextureAtlasSprite texture, float x1, float y1, float z1, float x2, float y2, float z2 )
|
||||||
|
{
|
||||||
|
UvVector uv = new UvVector();
|
||||||
|
switch( face )
|
||||||
|
{
|
||||||
|
case DOWN:
|
||||||
|
uv.u1 = texture.getInterpolatedU( x1 * 16 );
|
||||||
|
uv.v1 = texture.getInterpolatedV( 16 - z1 * 16 );
|
||||||
|
uv.u2 = texture.getInterpolatedU( x2 * 16 );
|
||||||
|
uv.v2 = texture.getInterpolatedV( 16 - z2 * 16 );
|
||||||
|
break;
|
||||||
|
case UP:
|
||||||
|
uv.u1 = texture.getInterpolatedU( x1 * 16 );
|
||||||
|
uv.v1 = texture.getInterpolatedV( z1 * 16 );
|
||||||
|
uv.u2 = texture.getInterpolatedU( x2 * 16 );
|
||||||
|
uv.v2 = texture.getInterpolatedV( z2 * 16 );
|
||||||
|
break;
|
||||||
|
case NORTH:
|
||||||
|
uv.u1 = texture.getInterpolatedU( 16 - x1 * 16 );
|
||||||
|
uv.v1 = texture.getInterpolatedV( 16 - y1 * 16 );
|
||||||
|
uv.u2 = texture.getInterpolatedU( 16 - x2 * 16 );
|
||||||
|
uv.v2 = texture.getInterpolatedV( 16 - y2 * 16 );
|
||||||
|
break;
|
||||||
|
case SOUTH:
|
||||||
|
uv.u1 = texture.getInterpolatedU( x1 * 16 );
|
||||||
|
uv.v1 = texture.getInterpolatedV( 16 - y1 * 16 );
|
||||||
|
uv.u2 = texture.getInterpolatedU( x2 * 16 );
|
||||||
|
uv.v2 = texture.getInterpolatedV( 16 - y2 * 16 );
|
||||||
|
break;
|
||||||
|
case WEST:
|
||||||
|
uv.u1 = texture.getInterpolatedU( z1 * 16 );
|
||||||
|
uv.v1 = texture.getInterpolatedV( 16 - y1 * 16 );
|
||||||
|
uv.u2 = texture.getInterpolatedU( z2 * 16 );
|
||||||
|
uv.v2 = texture.getInterpolatedV( 16 - y2 * 16 );
|
||||||
|
break;
|
||||||
|
case EAST:
|
||||||
|
uv.u1 = texture.getInterpolatedU( 16 - z2 * 16 );
|
||||||
|
uv.v1 = texture.getInterpolatedV( 16 - y1 * 16 );
|
||||||
|
uv.u2 = texture.getInterpolatedU( 16 - z1 * 16 );
|
||||||
|
uv.v2 = texture.getInterpolatedV( 16 - y2 * 16 );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return uv;
|
||||||
|
}
|
||||||
|
|
||||||
// uv.u1, uv.v1
|
// uv.u1, uv.v1
|
||||||
private void putVertexTL( UnpackedBakedQuad.Builder builder, EnumFacing face, float x, float y, float z, UvVector uv )
|
private void putVertexTL( UnpackedBakedQuad.Builder builder, EnumFacing face, float x, float y, float z, UvVector uv )
|
||||||
{
|
{
|
||||||
@@ -484,6 +536,15 @@ public class CubeBuilder
|
|||||||
this.uvRotations[facing.ordinal()] = (byte) rotation;
|
this.uvRotations[facing.ordinal()] = (byte) rotation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CubeBuilder uses UV optimized for cables by default.
|
||||||
|
* This switches to standard UV coordinates.
|
||||||
|
*/
|
||||||
|
public void useStandardUV()
|
||||||
|
{
|
||||||
|
this.useStandardUV = true;
|
||||||
|
}
|
||||||
|
|
||||||
public List<BakedQuad> getOutput()
|
public List<BakedQuad> getOutput()
|
||||||
{
|
{
|
||||||
return this.output;
|
return this.output;
|
||||||
|
|||||||
@@ -175,6 +175,7 @@ public class FacadeBuilder
|
|||||||
|
|
||||||
// Reset to no color multiplicator
|
// Reset to no color multiplicator
|
||||||
builder.setColorRGB( 0xFFFFFF );
|
builder.setColorRGB( 0xFFFFFF );
|
||||||
|
builder.useStandardUV();
|
||||||
|
|
||||||
// We only render the stilt if we don't intersect with any part directly, and if there's no part on our side
|
// 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 )
|
if( renderStilt && busBounds == null && layer == BlockRenderLayer.CUTOUT )
|
||||||
@@ -438,22 +439,22 @@ public class FacadeBuilder
|
|||||||
|
|
||||||
private static AxisAlignedBB getFacadeBox( EnumFacing side, boolean thinFacades )
|
private static AxisAlignedBB getFacadeBox( EnumFacing side, boolean thinFacades )
|
||||||
{
|
{
|
||||||
int thickness = thinFacades ? 1 : 2;
|
double thickness = ( thinFacades ? 1 : 2 ) / 16.0;
|
||||||
|
|
||||||
switch( side )
|
switch( side )
|
||||||
{
|
{
|
||||||
case DOWN:
|
case DOWN:
|
||||||
return new AxisAlignedBB( 0.0, 0.0, 0.0, 1.0, ( thickness ) / 16.0, 1.0 );
|
return new AxisAlignedBB( 0.0, 0.0, 0.0, 1.0, thickness, 1.0 );
|
||||||
case EAST:
|
case EAST:
|
||||||
return new AxisAlignedBB( ( 16.0 - thickness ) / 16.0, 0.0, 0.0, 1.0, 1.0, 1.0 );
|
return new AxisAlignedBB( 1.0 - thickness, 0.0, 0.0, 1.0, 1.0, 1.0 );
|
||||||
case NORTH:
|
case NORTH:
|
||||||
return new AxisAlignedBB( 0.0, 0.0, 0.0, 1.0, 1.0, ( thickness ) / 16.0 );
|
return new AxisAlignedBB( 0.0, 0.0, 0.0, 1.0, 1.0, thickness );
|
||||||
case SOUTH:
|
case SOUTH:
|
||||||
return new AxisAlignedBB( 0.0, 0.0, ( 16.0 - thickness ) / 16.0, 1.0, 1.0, 1.0 );
|
return new AxisAlignedBB( 0.0, 0.0, 1.0 - thickness, 1.0, 1.0, 1.0 );
|
||||||
case UP:
|
case UP:
|
||||||
return new AxisAlignedBB( 0.0, ( 16.0 - thickness ) / 16.0, 0.0, 1.0, 1.0, 1.0 );
|
return new AxisAlignedBB( 0.0, 1.0 - thickness, 0.0, 1.0, 1.0, 1.0 );
|
||||||
case WEST:
|
case WEST:
|
||||||
return new AxisAlignedBB( 0.0, 0.0, 0.0, ( thickness ) / 16.0, 1.0, 1.0 );
|
return new AxisAlignedBB( 0.0, 0.0, 0.0, thickness, 1.0, 1.0 );
|
||||||
default:
|
default:
|
||||||
throw new IllegalArgumentException( "Unsupported face: " + side );
|
throw new IllegalArgumentException( "Unsupported face: " + side );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ public class FacadeRenderState
|
|||||||
|
|
||||||
public int resolveTintColor( int tintIndex )
|
public int resolveTintColor( int tintIndex )
|
||||||
{
|
{
|
||||||
return Minecraft.getMinecraft().getItemColors().getColorFromItemstack( this.textureItem, tintIndex );
|
return Minecraft.getMinecraft().getItemColors().colorMultiplier( this.textureItem, tintIndex );
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ package appeng.client.render.effects;
|
|||||||
import net.minecraft.client.particle.Particle;
|
import net.minecraft.client.particle.Particle;
|
||||||
import net.minecraft.client.renderer.BufferBuilder;
|
import net.minecraft.client.renderer.BufferBuilder;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
import appeng.api.storage.data.IAEItemStack;
|
import appeng.api.storage.data.IAEItemStack;
|
||||||
@@ -45,7 +46,8 @@ public class AssemblerFX extends Particle implements ICanDie
|
|||||||
this.motionY = 0;
|
this.motionY = 0;
|
||||||
this.motionZ = 0;
|
this.motionZ = 0;
|
||||||
this.speed = speed;
|
this.speed = speed;
|
||||||
this.fi = new EntityFloatingItem( this, w, x, y, z, is.getItemStack() );
|
final ItemStack displayItem = is.asItemStackRepresentation();
|
||||||
|
this.fi = new EntityFloatingItem( this, w, x, y, z, displayItem );
|
||||||
w.spawnEntity( this.fi );
|
w.spawnEntity( this.fi );
|
||||||
this.particleMaxAge = (int) Math.ceil( Math.max( 1, 100.0f / speed ) ) + 2;
|
this.particleMaxAge = (int) Math.ceil( Math.max( 1, 100.0f / speed ) ) + 2;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -191,17 +191,19 @@ public enum UVLModelLoader implements ICustomModelLoader
|
|||||||
{
|
{
|
||||||
modelPath = modelPath.substring( "models/".length() );
|
modelPath = modelPath.substring( "models/".length() );
|
||||||
}
|
}
|
||||||
|
|
||||||
try( InputStreamReader io = new InputStreamReader( Minecraft.getMinecraft()
|
try( InputStreamReader io = new InputStreamReader( Minecraft.getMinecraft()
|
||||||
.getResourceManager()
|
.getResourceManager()
|
||||||
.getResource( new ResourceLocation( modelLocation.getResourceDomain(), "models/" + modelPath + ".json" ) )
|
.getResource( new ResourceLocation( modelLocation.getResourceDomain(), "models/" + modelPath + ".json" ) )
|
||||||
.getInputStream() ) )
|
.getInputStream() ) )
|
||||||
{
|
{
|
||||||
return gson.fromJson( io, UVLMarker.class ).uvlMarker;
|
return gson.fromJson( io, UVLMarker.class ).ae2_uvl_marker;
|
||||||
}
|
}
|
||||||
catch( IOException e )
|
catch( Exception e )
|
||||||
{
|
{
|
||||||
|
// Catch-all in case of any JSON parser issues.
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -387,7 +389,7 @@ public enum UVLModelLoader implements ICustomModelLoader
|
|||||||
|
|
||||||
class UVLMarker
|
class UVLMarker
|
||||||
{
|
{
|
||||||
boolean uvlMarker = false;
|
boolean ae2_uvl_marker = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -19,14 +19,11 @@
|
|||||||
package appeng.container;
|
package appeng.container;
|
||||||
|
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
|
||||||
import java.io.ByteArrayOutputStream;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
@@ -37,8 +34,6 @@ import net.minecraft.inventory.IContainerListener;
|
|||||||
import net.minecraft.inventory.IInventory;
|
import net.minecraft.inventory.IInventory;
|
||||||
import net.minecraft.inventory.Slot;
|
import net.minecraft.inventory.Slot;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.CompressedStreamTools;
|
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraftforge.items.IItemHandler;
|
import net.minecraftforge.items.IItemHandler;
|
||||||
import net.minecraftforge.items.wrapper.PlayerInvWrapper;
|
import net.minecraftforge.items.wrapper.PlayerInvWrapper;
|
||||||
@@ -51,12 +46,12 @@ import appeng.api.networking.IGrid;
|
|||||||
import appeng.api.networking.IGridNode;
|
import appeng.api.networking.IGridNode;
|
||||||
import appeng.api.networking.energy.IEnergyGrid;
|
import appeng.api.networking.energy.IEnergyGrid;
|
||||||
import appeng.api.networking.energy.IEnergySource;
|
import appeng.api.networking.energy.IEnergySource;
|
||||||
import appeng.api.networking.security.BaseActionSource;
|
|
||||||
import appeng.api.networking.security.IActionHost;
|
import appeng.api.networking.security.IActionHost;
|
||||||
|
import appeng.api.networking.security.IActionSource;
|
||||||
import appeng.api.networking.security.ISecurityGrid;
|
import appeng.api.networking.security.ISecurityGrid;
|
||||||
import appeng.api.networking.security.PlayerSource;
|
|
||||||
import appeng.api.parts.IPart;
|
import appeng.api.parts.IPart;
|
||||||
import appeng.api.storage.IMEInventoryHandler;
|
import appeng.api.storage.IMEInventoryHandler;
|
||||||
|
import appeng.api.storage.channels.IItemStorageChannel;
|
||||||
import appeng.api.storage.data.IAEItemStack;
|
import appeng.api.storage.data.IAEItemStack;
|
||||||
import appeng.client.me.InternalSlotME;
|
import appeng.client.me.InternalSlotME;
|
||||||
import appeng.client.me.SlotME;
|
import appeng.client.me.SlotME;
|
||||||
@@ -73,10 +68,11 @@ import appeng.container.slot.SlotPlayerInv;
|
|||||||
import appeng.core.AELog;
|
import appeng.core.AELog;
|
||||||
import appeng.core.sync.network.NetworkHandler;
|
import appeng.core.sync.network.NetworkHandler;
|
||||||
import appeng.core.sync.packets.PacketInventoryAction;
|
import appeng.core.sync.packets.PacketInventoryAction;
|
||||||
import appeng.core.sync.packets.PacketPartialItem;
|
import appeng.core.sync.packets.PacketTargetItemStack;
|
||||||
import appeng.core.sync.packets.PacketValueConfig;
|
import appeng.core.sync.packets.PacketValueConfig;
|
||||||
import appeng.helpers.ICustomNameObject;
|
import appeng.helpers.ICustomNameObject;
|
||||||
import appeng.helpers.InventoryAction;
|
import appeng.helpers.InventoryAction;
|
||||||
|
import appeng.me.helpers.PlayerSource;
|
||||||
import appeng.util.InventoryAdaptor;
|
import appeng.util.InventoryAdaptor;
|
||||||
import appeng.util.Platform;
|
import appeng.util.Platform;
|
||||||
import appeng.util.inv.AdaptorItemHandler;
|
import appeng.util.inv.AdaptorItemHandler;
|
||||||
@@ -87,12 +83,11 @@ import appeng.util.item.AEItemStack;
|
|||||||
public abstract class AEBaseContainer extends Container
|
public abstract class AEBaseContainer extends Container
|
||||||
{
|
{
|
||||||
private final InventoryPlayer invPlayer;
|
private final InventoryPlayer invPlayer;
|
||||||
private final BaseActionSource mySrc;
|
private final IActionSource mySrc;
|
||||||
private final HashSet<Integer> locked = new HashSet<>();
|
private final HashSet<Integer> locked = new HashSet<>();
|
||||||
private final TileEntity tileEntity;
|
private final TileEntity tileEntity;
|
||||||
private final IPart part;
|
private final IPart part;
|
||||||
private final IGuiItemObject obj;
|
private final IGuiItemObject obj;
|
||||||
private final List<PacketPartialItem> dataChunks = new LinkedList<>();
|
|
||||||
private final HashMap<Integer, SyncData> syncData = new HashMap<>();
|
private final HashMap<Integer, SyncData> syncData = new HashMap<>();
|
||||||
private boolean isContainerValid = true;
|
private boolean isContainerValid = true;
|
||||||
private String customName;
|
private String customName;
|
||||||
@@ -174,47 +169,6 @@ public abstract class AEBaseContainer extends Container
|
|||||||
this.prepareSync();
|
this.prepareSync();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void postPartial( final PacketPartialItem packetPartialItem )
|
|
||||||
{
|
|
||||||
this.dataChunks.add( packetPartialItem );
|
|
||||||
if( packetPartialItem.getPageCount() == this.dataChunks.size() )
|
|
||||||
{
|
|
||||||
this.parsePartials();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void parsePartials()
|
|
||||||
{
|
|
||||||
int total = 0;
|
|
||||||
for( final PacketPartialItem ppi : this.dataChunks )
|
|
||||||
{
|
|
||||||
total += ppi.getSize();
|
|
||||||
}
|
|
||||||
|
|
||||||
final byte[] buffer = new byte[total];
|
|
||||||
int cursor = 0;
|
|
||||||
|
|
||||||
for( final PacketPartialItem ppi : this.dataChunks )
|
|
||||||
{
|
|
||||||
cursor = ppi.write( buffer, cursor );
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
final NBTTagCompound data = CompressedStreamTools.readCompressed( new ByteArrayInputStream( buffer ) );
|
|
||||||
if( data != null )
|
|
||||||
{
|
|
||||||
this.setTargetStack( AEApi.instance().storage().createItemStack( new ItemStack( data ) ) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch( final IOException e )
|
|
||||||
{
|
|
||||||
AELog.debug( e );
|
|
||||||
}
|
|
||||||
|
|
||||||
this.dataChunks.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
public IAEItemStack getTargetStack()
|
public IAEItemStack getTargetStack()
|
||||||
{
|
{
|
||||||
return this.clientRequestedTargetItem;
|
return this.clientRequestedTargetItem;
|
||||||
@@ -225,61 +179,22 @@ public abstract class AEBaseContainer extends Container
|
|||||||
// client doesn't need to re-send, makes for lower overhead rapid packets.
|
// client doesn't need to re-send, makes for lower overhead rapid packets.
|
||||||
if( Platform.isClient() )
|
if( Platform.isClient() )
|
||||||
{
|
{
|
||||||
final ItemStack a = stack == null ? ItemStack.EMPTY : stack.getItemStack();
|
if( stack == null && this.clientRequestedTargetItem == null )
|
||||||
final ItemStack b = this.clientRequestedTargetItem == null ? ItemStack.EMPTY : this.clientRequestedTargetItem.getItemStack();
|
{
|
||||||
|
return;
|
||||||
if( Platform.itemComparisons().isSameItem( a, b ) )
|
}
|
||||||
|
if( stack != null && stack.isSameType( this.clientRequestedTargetItem ) )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final ByteArrayOutputStream stream = new ByteArrayOutputStream();
|
NetworkHandler.instance().sendToServer( new PacketTargetItemStack( (AEItemStack) stack ) );
|
||||||
final NBTTagCompound item = new NBTTagCompound();
|
|
||||||
|
|
||||||
if( stack != null )
|
|
||||||
{
|
|
||||||
stack.writeToNBT( item );
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
CompressedStreamTools.writeCompressed( item, stream );
|
|
||||||
|
|
||||||
final int maxChunkSize = 30000;
|
|
||||||
final List<byte[]> miniPackets = new LinkedList<>();
|
|
||||||
|
|
||||||
final byte[] data = stream.toByteArray();
|
|
||||||
|
|
||||||
final ByteArrayInputStream bis = new ByteArrayInputStream( data, 0, stream.size() );
|
|
||||||
while( bis.available() > 0 )
|
|
||||||
{
|
|
||||||
final int nextBLock = bis.available() > maxChunkSize ? maxChunkSize : bis.available();
|
|
||||||
final byte[] nextSegment = new byte[nextBLock];
|
|
||||||
bis.read( nextSegment );
|
|
||||||
miniPackets.add( nextSegment );
|
|
||||||
}
|
|
||||||
bis.close();
|
|
||||||
stream.close();
|
|
||||||
|
|
||||||
int page = 0;
|
|
||||||
for( final byte[] packet : miniPackets )
|
|
||||||
{
|
|
||||||
final PacketPartialItem ppi = new PacketPartialItem( page, miniPackets.size(), packet );
|
|
||||||
page++;
|
|
||||||
NetworkHandler.instance().sendToServer( ppi );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch( final IOException e )
|
|
||||||
{
|
|
||||||
AELog.debug( e );
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.clientRequestedTargetItem = stack == null ? null : stack.copy();
|
this.clientRequestedTargetItem = stack == null ? null : stack.copy();
|
||||||
}
|
}
|
||||||
|
|
||||||
public BaseActionSource getActionSource()
|
public IActionSource getActionSource()
|
||||||
{
|
{
|
||||||
return this.mySrc;
|
return this.mySrc;
|
||||||
}
|
}
|
||||||
@@ -861,7 +776,7 @@ public abstract class AEBaseContainer extends Container
|
|||||||
if( slotItem != null )
|
if( slotItem != null )
|
||||||
{
|
{
|
||||||
IAEItemStack ais = slotItem.copy();
|
IAEItemStack ais = slotItem.copy();
|
||||||
ItemStack myItem = ais.getItemStack();
|
ItemStack myItem = ais.createItemStack();
|
||||||
|
|
||||||
ais.setStackSize( myItem.getMaxStackSize() );
|
ais.setStackSize( myItem.getMaxStackSize() );
|
||||||
|
|
||||||
@@ -877,7 +792,7 @@ public abstract class AEBaseContainer extends Container
|
|||||||
ais = Platform.poweredExtraction( this.getPowerSource(), this.getCellInventory(), ais, this.getActionSource() );
|
ais = Platform.poweredExtraction( this.getPowerSource(), this.getCellInventory(), ais, this.getActionSource() );
|
||||||
if( ais != null )
|
if( ais != null )
|
||||||
{
|
{
|
||||||
adp.addItems( ais.getItemStack() );
|
adp.addItems( ais.createItemStack() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -892,7 +807,7 @@ public abstract class AEBaseContainer extends Container
|
|||||||
|
|
||||||
if( !isg.isEmpty() && releaseQty > 0 )
|
if( !isg.isEmpty() && releaseQty > 0 )
|
||||||
{
|
{
|
||||||
IAEItemStack ais = AEApi.instance().storage().createItemStack( isg );
|
IAEItemStack ais = AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ).createStack( isg );
|
||||||
ais.setStackSize( 1 );
|
ais.setStackSize( 1 );
|
||||||
final IAEItemStack extracted = ais.copy();
|
final IAEItemStack extracted = ais.copy();
|
||||||
|
|
||||||
@@ -901,7 +816,7 @@ public abstract class AEBaseContainer extends Container
|
|||||||
{
|
{
|
||||||
final InventoryAdaptor ia = new AdaptorItemHandler( new WrapperCursorItemHandler( player.inventory ) );
|
final InventoryAdaptor ia = new AdaptorItemHandler( new WrapperCursorItemHandler( player.inventory ) );
|
||||||
|
|
||||||
final ItemStack fail = ia.removeItems( 1, extracted.getItemStack(), null );
|
final ItemStack fail = ia.removeItems( 1, extracted.getDefinition(), null );
|
||||||
if( fail.isEmpty() )
|
if( fail.isEmpty() )
|
||||||
{
|
{
|
||||||
this.getCellInventory().extractItems( extracted, Actionable.MODULATE, this.getActionSource() );
|
this.getCellInventory().extractItems( extracted, Actionable.MODULATE, this.getActionSource() );
|
||||||
@@ -930,7 +845,7 @@ public abstract class AEBaseContainer extends Container
|
|||||||
{
|
{
|
||||||
liftQty = 0;
|
liftQty = 0;
|
||||||
}
|
}
|
||||||
if( !Platform.itemComparisons().isSameItem( slotItem.getItemStack(), item ) )
|
if( !Platform.itemComparisons().isSameItem( slotItem.getDefinition(), item ) )
|
||||||
{
|
{
|
||||||
liftQty = 0;
|
liftQty = 0;
|
||||||
}
|
}
|
||||||
@@ -945,7 +860,7 @@ public abstract class AEBaseContainer extends Container
|
|||||||
{
|
{
|
||||||
final InventoryAdaptor ia = new AdaptorItemHandler( new WrapperCursorItemHandler( player.inventory ) );
|
final InventoryAdaptor ia = new AdaptorItemHandler( new WrapperCursorItemHandler( player.inventory ) );
|
||||||
|
|
||||||
final ItemStack fail = ia.addItems( ais.getItemStack() );
|
final ItemStack fail = ia.addItems( ais.createItemStack() );
|
||||||
if( !fail.isEmpty() )
|
if( !fail.isEmpty() )
|
||||||
{
|
{
|
||||||
this.getCellInventory().injectItems( ais, Actionable.MODULATE, this.getActionSource() );
|
this.getCellInventory().injectItems( ais, Actionable.MODULATE, this.getActionSource() );
|
||||||
@@ -967,11 +882,11 @@ public abstract class AEBaseContainer extends Container
|
|||||||
if( slotItem != null )
|
if( slotItem != null )
|
||||||
{
|
{
|
||||||
IAEItemStack ais = slotItem.copy();
|
IAEItemStack ais = slotItem.copy();
|
||||||
ais.setStackSize( ais.getItemStack().getMaxStackSize() );
|
ais.setStackSize( ais.getDefinition().getMaxStackSize() );
|
||||||
ais = Platform.poweredExtraction( this.getPowerSource(), this.getCellInventory(), ais, this.getActionSource() );
|
ais = Platform.poweredExtraction( this.getPowerSource(), this.getCellInventory(), ais, this.getActionSource() );
|
||||||
if( ais != null )
|
if( ais != null )
|
||||||
{
|
{
|
||||||
player.inventory.setItemStack( ais.getItemStack() );
|
player.inventory.setItemStack( ais.createItemStack() );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -982,11 +897,11 @@ public abstract class AEBaseContainer extends Container
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
IAEItemStack ais = AEApi.instance().storage().createItemStack( player.inventory.getItemStack() );
|
IAEItemStack ais = AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ).createStack( player.inventory.getItemStack() );
|
||||||
ais = Platform.poweredInsert( this.getPowerSource(), this.getCellInventory(), ais, this.getActionSource() );
|
ais = Platform.poweredInsert( this.getPowerSource(), this.getCellInventory(), ais, this.getActionSource() );
|
||||||
if( ais != null )
|
if( ais != null )
|
||||||
{
|
{
|
||||||
player.inventory.setItemStack( ais.getItemStack() );
|
player.inventory.setItemStack( ais.createItemStack() );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1007,7 +922,7 @@ public abstract class AEBaseContainer extends Container
|
|||||||
if( slotItem != null )
|
if( slotItem != null )
|
||||||
{
|
{
|
||||||
IAEItemStack ais = slotItem.copy();
|
IAEItemStack ais = slotItem.copy();
|
||||||
final long maxSize = ais.getItemStack().getMaxStackSize();
|
final long maxSize = ais.getDefinition().getMaxStackSize();
|
||||||
ais.setStackSize( maxSize );
|
ais.setStackSize( maxSize );
|
||||||
ais = this.getCellInventory().extractItems( ais, Actionable.SIMULATE, this.getActionSource() );
|
ais = this.getCellInventory().extractItems( ais, Actionable.SIMULATE, this.getActionSource() );
|
||||||
|
|
||||||
@@ -1020,7 +935,7 @@ public abstract class AEBaseContainer extends Container
|
|||||||
|
|
||||||
if( ais != null )
|
if( ais != null )
|
||||||
{
|
{
|
||||||
player.inventory.setItemStack( ais.getItemStack() );
|
player.inventory.setItemStack( ais.createItemStack() );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1031,7 +946,7 @@ public abstract class AEBaseContainer extends Container
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
IAEItemStack ais = AEApi.instance().storage().createItemStack( player.inventory.getItemStack() );
|
IAEItemStack ais = AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ).createStack( player.inventory.getItemStack() );
|
||||||
ais.setStackSize( 1 );
|
ais.setStackSize( 1 );
|
||||||
ais = Platform.poweredInsert( this.getPowerSource(), this.getCellInventory(), ais, this.getActionSource() );
|
ais = Platform.poweredInsert( this.getPowerSource(), this.getCellInventory(), ais, this.getActionSource() );
|
||||||
if( ais == null )
|
if( ais == null )
|
||||||
@@ -1050,7 +965,7 @@ public abstract class AEBaseContainer extends Container
|
|||||||
case CREATIVE_DUPLICATE:
|
case CREATIVE_DUPLICATE:
|
||||||
if( player.capabilities.isCreativeMode && slotItem != null )
|
if( player.capabilities.isCreativeMode && slotItem != null )
|
||||||
{
|
{
|
||||||
final ItemStack is = slotItem.getItemStack();
|
final ItemStack is = slotItem.createItemStack();
|
||||||
is.setCount( is.getMaxStackSize() );
|
is.setCount( is.getMaxStackSize() );
|
||||||
player.inventory.setItemStack( is );
|
player.inventory.setItemStack( is );
|
||||||
this.updateHeld( player );
|
this.updateHeld( player );
|
||||||
@@ -1069,7 +984,7 @@ public abstract class AEBaseContainer extends Container
|
|||||||
for( int slotNum = 0; slotNum < playerInv; slotNum++ )
|
for( int slotNum = 0; slotNum < playerInv; slotNum++ )
|
||||||
{
|
{
|
||||||
IAEItemStack ais = slotItem.copy();
|
IAEItemStack ais = slotItem.copy();
|
||||||
ItemStack myItem = ais.getItemStack();
|
ItemStack myItem = ais.createItemStack();
|
||||||
|
|
||||||
ais.setStackSize( myItem.getMaxStackSize() );
|
ais.setStackSize( myItem.getMaxStackSize() );
|
||||||
|
|
||||||
@@ -1085,7 +1000,7 @@ public abstract class AEBaseContainer extends Container
|
|||||||
ais = Platform.poweredExtraction( this.getPowerSource(), this.getCellInventory(), ais, this.getActionSource() );
|
ais = Platform.poweredExtraction( this.getPowerSource(), this.getCellInventory(), ais, this.getActionSource() );
|
||||||
if( ais != null )
|
if( ais != null )
|
||||||
{
|
{
|
||||||
adp.addItems( ais.getItemStack() );
|
adp.addItems( ais.createItemStack() );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1106,7 +1021,8 @@ public abstract class AEBaseContainer extends Container
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
NetworkHandler.instance().sendTo( new PacketInventoryAction( InventoryAction.UPDATE_HAND, 0, AEItemStack.create( p.inventory.getItemStack() ) ),
|
NetworkHandler.instance().sendTo(
|
||||||
|
new PacketInventoryAction( InventoryAction.UPDATE_HAND, 0, AEItemStack.fromItemStack( p.inventory.getItemStack() ) ),
|
||||||
p );
|
p );
|
||||||
}
|
}
|
||||||
catch( final IOException e )
|
catch( final IOException e )
|
||||||
@@ -1122,13 +1038,14 @@ public abstract class AEBaseContainer extends Container
|
|||||||
{
|
{
|
||||||
return input;
|
return input;
|
||||||
}
|
}
|
||||||
final IAEItemStack ais = Platform.poweredInsert( this.getPowerSource(), this.getCellInventory(), AEApi.instance().storage().createItemStack( input ),
|
final IAEItemStack ais = Platform.poweredInsert( this.getPowerSource(), this.getCellInventory(),
|
||||||
|
AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ).createStack( input ),
|
||||||
this.getActionSource() );
|
this.getActionSource() );
|
||||||
if( ais == null )
|
if( ais == null )
|
||||||
{
|
{
|
||||||
return ItemStack.EMPTY;
|
return ItemStack.EMPTY;
|
||||||
}
|
}
|
||||||
return ais.getItemStack();
|
return ais.createItemStack();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateSlot( final Slot clickSlot )
|
private void updateSlot( final Slot clickSlot )
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ import appeng.api.config.FuzzyMode;
|
|||||||
import appeng.api.config.Settings;
|
import appeng.api.config.Settings;
|
||||||
import appeng.api.storage.ICellWorkbenchItem;
|
import appeng.api.storage.ICellWorkbenchItem;
|
||||||
import appeng.api.storage.IMEInventory;
|
import appeng.api.storage.IMEInventory;
|
||||||
import appeng.api.storage.StorageChannel;
|
import appeng.api.storage.channels.IItemStorageChannel;
|
||||||
import appeng.api.storage.data.IAEItemStack;
|
import appeng.api.storage.data.IAEItemStack;
|
||||||
import appeng.api.storage.data.IItemList;
|
import appeng.api.storage.data.IItemList;
|
||||||
import appeng.container.guisync.GuiSync;
|
import appeng.container.guisync.GuiSync;
|
||||||
@@ -227,12 +227,14 @@ public class ContainerCellWorkbench extends ContainerUpgradeable
|
|||||||
final IItemHandler inv = this.getUpgradeable().getInventoryByName( "config" );
|
final IItemHandler inv = this.getUpgradeable().getInventoryByName( "config" );
|
||||||
|
|
||||||
final IMEInventory<IAEItemStack> cellInv = AEApi.instance().registries().cell().getCellInventory(
|
final IMEInventory<IAEItemStack> cellInv = AEApi.instance().registries().cell().getCellInventory(
|
||||||
this.getUpgradeable().getInventoryByName( "cell" ).getStackInSlot( 0 ), null, StorageChannel.ITEMS );
|
this.getUpgradeable().getInventoryByName( "cell" ).getStackInSlot( 0 ), null,
|
||||||
|
AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ) );
|
||||||
|
|
||||||
Iterator<IAEItemStack> i = new NullIterator<>();
|
Iterator<IAEItemStack> i = new NullIterator<>();
|
||||||
if( cellInv != null )
|
if( cellInv != null )
|
||||||
{
|
{
|
||||||
final IItemList<IAEItemStack> list = cellInv.getAvailableItems( AEApi.instance().storage().createItemList() );
|
final IItemList<IAEItemStack> list = cellInv
|
||||||
|
.getAvailableItems( AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ).createList() );
|
||||||
i = list.iterator();
|
i = list.iterator();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -240,8 +242,8 @@ public class ContainerCellWorkbench extends ContainerUpgradeable
|
|||||||
{
|
{
|
||||||
if( i.hasNext() )
|
if( i.hasNext() )
|
||||||
{
|
{
|
||||||
final ItemStack g = i.next().getItemStack();
|
// TODO: check if ok
|
||||||
g.setCount( 1 );
|
final ItemStack g = i.next().asItemStackRepresentation();
|
||||||
ItemHandlerUtil.setStackInSlot( inv, x, g );
|
ItemHandlerUtil.setStackInSlot( inv, x, g );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -27,13 +27,13 @@ import net.minecraft.world.World;
|
|||||||
|
|
||||||
import appeng.api.config.SecurityPermissions;
|
import appeng.api.config.SecurityPermissions;
|
||||||
import appeng.api.networking.IGrid;
|
import appeng.api.networking.IGrid;
|
||||||
import appeng.api.networking.security.BaseActionSource;
|
|
||||||
import appeng.api.networking.security.IActionHost;
|
import appeng.api.networking.security.IActionHost;
|
||||||
import appeng.api.networking.security.PlayerSource;
|
import appeng.api.networking.security.IActionSource;
|
||||||
import appeng.api.storage.ITerminalHost;
|
import appeng.api.storage.ITerminalHost;
|
||||||
import appeng.api.storage.data.IAEItemStack;
|
import appeng.api.storage.data.IAEItemStack;
|
||||||
import appeng.container.AEBaseContainer;
|
import appeng.container.AEBaseContainer;
|
||||||
import appeng.container.slot.SlotInaccessible;
|
import appeng.container.slot.SlotInaccessible;
|
||||||
|
import appeng.me.helpers.PlayerSource;
|
||||||
import appeng.tile.inventory.AppEngInternalInventory;
|
import appeng.tile.inventory.AppEngInternalInventory;
|
||||||
|
|
||||||
|
|
||||||
@@ -69,7 +69,7 @@ public class ContainerCraftAmount extends AEBaseContainer
|
|||||||
return this.getPlayerInv().player.world;
|
return this.getPlayerInv().player.world;
|
||||||
}
|
}
|
||||||
|
|
||||||
public BaseActionSource getActionSrc()
|
public IActionSource getActionSrc()
|
||||||
{
|
{
|
||||||
return new PlayerSource( this.getPlayerInv().player, (IActionHost) this.getTarget() );
|
return new PlayerSource( this.getPlayerInv().player, (IActionHost) this.getTarget() );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,12 +44,12 @@ import appeng.api.networking.crafting.ICraftingCPU;
|
|||||||
import appeng.api.networking.crafting.ICraftingGrid;
|
import appeng.api.networking.crafting.ICraftingGrid;
|
||||||
import appeng.api.networking.crafting.ICraftingJob;
|
import appeng.api.networking.crafting.ICraftingJob;
|
||||||
import appeng.api.networking.crafting.ICraftingLink;
|
import appeng.api.networking.crafting.ICraftingLink;
|
||||||
import appeng.api.networking.security.BaseActionSource;
|
|
||||||
import appeng.api.networking.security.IActionHost;
|
import appeng.api.networking.security.IActionHost;
|
||||||
import appeng.api.networking.security.PlayerSource;
|
import appeng.api.networking.security.IActionSource;
|
||||||
import appeng.api.networking.storage.IStorageGrid;
|
import appeng.api.networking.storage.IStorageGrid;
|
||||||
import appeng.api.storage.IMEInventory;
|
import appeng.api.storage.IMEInventory;
|
||||||
import appeng.api.storage.ITerminalHost;
|
import appeng.api.storage.ITerminalHost;
|
||||||
|
import appeng.api.storage.channels.IItemStorageChannel;
|
||||||
import appeng.api.storage.data.IAEItemStack;
|
import appeng.api.storage.data.IAEItemStack;
|
||||||
import appeng.api.storage.data.IItemList;
|
import appeng.api.storage.data.IItemList;
|
||||||
import appeng.container.AEBaseContainer;
|
import appeng.container.AEBaseContainer;
|
||||||
@@ -58,8 +58,8 @@ import appeng.core.AELog;
|
|||||||
import appeng.core.sync.GuiBridge;
|
import appeng.core.sync.GuiBridge;
|
||||||
import appeng.core.sync.network.NetworkHandler;
|
import appeng.core.sync.network.NetworkHandler;
|
||||||
import appeng.core.sync.packets.PacketMEInventoryUpdate;
|
import appeng.core.sync.packets.PacketMEInventoryUpdate;
|
||||||
import appeng.core.sync.packets.PacketSwitchGuis;
|
|
||||||
import appeng.helpers.WirelessTerminalGuiObject;
|
import appeng.helpers.WirelessTerminalGuiObject;
|
||||||
|
import appeng.me.helpers.PlayerSource;
|
||||||
import appeng.parts.reporting.PartCraftingTerminal;
|
import appeng.parts.reporting.PartCraftingTerminal;
|
||||||
import appeng.parts.reporting.PartPatternTerminal;
|
import appeng.parts.reporting.PartPatternTerminal;
|
||||||
import appeng.parts.reporting.PartTerminal;
|
import appeng.parts.reporting.PartTerminal;
|
||||||
@@ -209,7 +209,7 @@ public class ContainerCraftConfirm extends AEBaseContainer
|
|||||||
final PacketMEInventoryUpdate b = new PacketMEInventoryUpdate( (byte) 1 );
|
final PacketMEInventoryUpdate b = new PacketMEInventoryUpdate( (byte) 1 );
|
||||||
final PacketMEInventoryUpdate c = this.result.isSimulation() ? new PacketMEInventoryUpdate( (byte) 2 ) : null;
|
final PacketMEInventoryUpdate c = this.result.isSimulation() ? new PacketMEInventoryUpdate( (byte) 2 ) : null;
|
||||||
|
|
||||||
final IItemList<IAEItemStack> plan = AEApi.instance().storage().createItemList();
|
final IItemList<IAEItemStack> plan = AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ).createList();
|
||||||
this.result.populatePlan( plan );
|
this.result.populatePlan( plan );
|
||||||
|
|
||||||
this.setUsedBytes( this.result.getByteTotal() );
|
this.setUsedBytes( this.result.getByteTotal() );
|
||||||
@@ -226,7 +226,7 @@ public class ContainerCraftConfirm extends AEBaseContainer
|
|||||||
p.setStackSize( out.getCountRequestable() );
|
p.setStackSize( out.getCountRequestable() );
|
||||||
|
|
||||||
final IStorageGrid sg = this.getGrid().getCache( IStorageGrid.class );
|
final IStorageGrid sg = this.getGrid().getCache( IStorageGrid.class );
|
||||||
final IMEInventory<IAEItemStack> items = sg.getItemInventory();
|
final IMEInventory<IAEItemStack> items = sg.getInventory( AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ) );
|
||||||
|
|
||||||
IAEItemStack m = null;
|
IAEItemStack m = null;
|
||||||
if( c != null && this.result.isSimulation() )
|
if( c != null && this.result.isSimulation() )
|
||||||
@@ -353,15 +353,13 @@ public class ContainerCraftConfirm extends AEBaseContainer
|
|||||||
this.setAutoStart( false );
|
this.setAutoStart( false );
|
||||||
if( g != null && originalGui != null && this.getOpenContext() != null )
|
if( g != null && originalGui != null && this.getOpenContext() != null )
|
||||||
{
|
{
|
||||||
NetworkHandler.instance().sendTo( new PacketSwitchGuis( originalGui ), (EntityPlayerMP) this.getInventoryPlayer().player );
|
|
||||||
|
|
||||||
final TileEntity te = this.getOpenContext().getTile();
|
final TileEntity te = this.getOpenContext().getTile();
|
||||||
Platform.openGUI( this.getInventoryPlayer().player, te, this.getOpenContext().getSide(), originalGui );
|
Platform.openGUI( this.getInventoryPlayer().player, te, this.getOpenContext().getSide(), originalGui );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private BaseActionSource getActionSrc()
|
private IActionSource getActionSrc()
|
||||||
{
|
{
|
||||||
return new PlayerSource( this.getPlayerInv().player, (IActionHost) this.getTarget() );
|
return new PlayerSource( this.getPlayerInv().player, (IActionHost) this.getTarget() );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,16 +28,15 @@ import net.minecraft.inventory.IContainerListener;
|
|||||||
|
|
||||||
import appeng.api.AEApi;
|
import appeng.api.AEApi;
|
||||||
import appeng.api.networking.IGrid;
|
import appeng.api.networking.IGrid;
|
||||||
import appeng.api.networking.IGridHost;
|
|
||||||
import appeng.api.networking.IGridNode;
|
|
||||||
import appeng.api.networking.crafting.CraftingItemList;
|
import appeng.api.networking.crafting.CraftingItemList;
|
||||||
import appeng.api.networking.crafting.ICraftingCPU;
|
import appeng.api.networking.crafting.ICraftingCPU;
|
||||||
import appeng.api.networking.security.BaseActionSource;
|
import appeng.api.networking.security.IActionHost;
|
||||||
|
import appeng.api.networking.security.IActionSource;
|
||||||
import appeng.api.networking.storage.IBaseMonitor;
|
import appeng.api.networking.storage.IBaseMonitor;
|
||||||
import appeng.api.storage.IMEMonitorHandlerReceiver;
|
import appeng.api.storage.IMEMonitorHandlerReceiver;
|
||||||
|
import appeng.api.storage.channels.IItemStorageChannel;
|
||||||
import appeng.api.storage.data.IAEItemStack;
|
import appeng.api.storage.data.IAEItemStack;
|
||||||
import appeng.api.storage.data.IItemList;
|
import appeng.api.storage.data.IItemList;
|
||||||
import appeng.api.util.AEPartLocation;
|
|
||||||
import appeng.container.AEBaseContainer;
|
import appeng.container.AEBaseContainer;
|
||||||
import appeng.container.guisync.GuiSync;
|
import appeng.container.guisync.GuiSync;
|
||||||
import appeng.core.AELog;
|
import appeng.core.AELog;
|
||||||
@@ -54,7 +53,7 @@ import appeng.util.Platform;
|
|||||||
public class ContainerCraftingCPU extends AEBaseContainer implements IMEMonitorHandlerReceiver<IAEItemStack>, ICustomNameObject
|
public class ContainerCraftingCPU extends AEBaseContainer implements IMEMonitorHandlerReceiver<IAEItemStack>, ICustomNameObject
|
||||||
{
|
{
|
||||||
|
|
||||||
private final IItemList<IAEItemStack> list = AEApi.instance().storage().createItemList();
|
private final IItemList<IAEItemStack> list = AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ).createList();
|
||||||
private IGrid network;
|
private IGrid network;
|
||||||
private CraftingCPUCluster monitor = null;
|
private CraftingCPUCluster monitor = null;
|
||||||
private String cpuName = null;
|
private String cpuName = null;
|
||||||
@@ -65,15 +64,11 @@ public class ContainerCraftingCPU extends AEBaseContainer implements IMEMonitorH
|
|||||||
public ContainerCraftingCPU( final InventoryPlayer ip, final Object te )
|
public ContainerCraftingCPU( final InventoryPlayer ip, final Object te )
|
||||||
{
|
{
|
||||||
super( ip, te );
|
super( ip, te );
|
||||||
final IGridHost host = (IGridHost) ( te instanceof IGridHost ? te : null );
|
final IActionHost host = (IActionHost) ( te instanceof IActionHost ? te : null );
|
||||||
|
|
||||||
if( host != null )
|
if( host != null && host.getActionableNode() != null )
|
||||||
{
|
{
|
||||||
this.findNode( host, AEPartLocation.INTERNAL );
|
this.setNetwork( host.getActionableNode().getGrid() );
|
||||||
for( final AEPartLocation d : AEPartLocation.SIDE_LOCATIONS )
|
|
||||||
{
|
|
||||||
this.findNode( host, d );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if( te instanceof TileCraftingTile )
|
if( te instanceof TileCraftingTile )
|
||||||
@@ -87,18 +82,6 @@ public class ContainerCraftingCPU extends AEBaseContainer implements IMEMonitorH
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void findNode( final IGridHost host, final AEPartLocation d )
|
|
||||||
{
|
|
||||||
if( this.getNetwork() == null )
|
|
||||||
{
|
|
||||||
final IGridNode node = host.getGridNode( d );
|
|
||||||
if( node != null )
|
|
||||||
{
|
|
||||||
this.setNetwork( node.getGrid() );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void setCPU( final ICraftingCPU c )
|
protected void setCPU( final ICraftingCPU c )
|
||||||
{
|
{
|
||||||
if( c == this.getMonitor() )
|
if( c == this.getMonitor() )
|
||||||
@@ -238,7 +221,7 @@ public class ContainerCraftingCPU extends AEBaseContainer implements IMEMonitorH
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void postChange( final IBaseMonitor<IAEItemStack> monitor, final Iterable<IAEItemStack> change, final BaseActionSource actionSource )
|
public void postChange( final IBaseMonitor<IAEItemStack> monitor, final Iterable<IAEItemStack> change, final IActionSource actionSource )
|
||||||
{
|
{
|
||||||
for( IAEItemStack is : change )
|
for( IAEItemStack is : change )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -47,12 +47,14 @@ import appeng.api.networking.IGridHost;
|
|||||||
import appeng.api.networking.IGridNode;
|
import appeng.api.networking.IGridNode;
|
||||||
import appeng.api.networking.energy.IEnergyGrid;
|
import appeng.api.networking.energy.IEnergyGrid;
|
||||||
import appeng.api.networking.energy.IEnergySource;
|
import appeng.api.networking.energy.IEnergySource;
|
||||||
import appeng.api.networking.security.BaseActionSource;
|
import appeng.api.networking.security.IActionHost;
|
||||||
|
import appeng.api.networking.security.IActionSource;
|
||||||
import appeng.api.networking.storage.IBaseMonitor;
|
import appeng.api.networking.storage.IBaseMonitor;
|
||||||
import appeng.api.parts.IPart;
|
import appeng.api.parts.IPart;
|
||||||
import appeng.api.storage.IMEMonitor;
|
import appeng.api.storage.IMEMonitor;
|
||||||
import appeng.api.storage.IMEMonitorHandlerReceiver;
|
import appeng.api.storage.IMEMonitorHandlerReceiver;
|
||||||
import appeng.api.storage.ITerminalHost;
|
import appeng.api.storage.ITerminalHost;
|
||||||
|
import appeng.api.storage.channels.IItemStorageChannel;
|
||||||
import appeng.api.storage.data.IAEItemStack;
|
import appeng.api.storage.data.IAEItemStack;
|
||||||
import appeng.api.storage.data.IItemList;
|
import appeng.api.storage.data.IItemList;
|
||||||
import appeng.api.util.AEPartLocation;
|
import appeng.api.util.AEPartLocation;
|
||||||
@@ -76,7 +78,7 @@ public class ContainerMEMonitorable extends AEBaseContainer implements IConfigMa
|
|||||||
|
|
||||||
private final SlotRestrictedInput[] cellView = new SlotRestrictedInput[5];
|
private final SlotRestrictedInput[] cellView = new SlotRestrictedInput[5];
|
||||||
private final IMEMonitor<IAEItemStack> monitor;
|
private final IMEMonitor<IAEItemStack> monitor;
|
||||||
private final IItemList<IAEItemStack> items = AEApi.instance().storage().createItemList();
|
private final IItemList<IAEItemStack> items = AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ).createList();
|
||||||
private final IConfigManager clientCM;
|
private final IConfigManager clientCM;
|
||||||
private final ITerminalHost host;
|
private final ITerminalHost host;
|
||||||
@GuiSync( 99 )
|
@GuiSync( 99 )
|
||||||
@@ -107,7 +109,7 @@ public class ContainerMEMonitorable extends AEBaseContainer implements IConfigMa
|
|||||||
{
|
{
|
||||||
this.serverCM = monitorable.getConfigManager();
|
this.serverCM = monitorable.getConfigManager();
|
||||||
|
|
||||||
this.monitor = monitorable.getItemInventory();
|
this.monitor = monitorable.getInventory( AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ) );
|
||||||
if( this.monitor != null )
|
if( this.monitor != null )
|
||||||
{
|
{
|
||||||
this.monitor.addListener( this, null );
|
this.monitor.addListener( this, null );
|
||||||
@@ -122,9 +124,22 @@ public class ContainerMEMonitorable extends AEBaseContainer implements IConfigMa
|
|||||||
{
|
{
|
||||||
this.setPowerSource( (IEnergySource) monitorable );
|
this.setPowerSource( (IEnergySource) monitorable );
|
||||||
}
|
}
|
||||||
else if( monitorable instanceof IGridHost )
|
else if( monitorable instanceof IGridHost || monitorable instanceof IActionHost )
|
||||||
{
|
{
|
||||||
final IGridNode node = ( (IGridHost) monitorable ).getGridNode( AEPartLocation.INTERNAL );
|
final IGridNode node;
|
||||||
|
if( monitorable instanceof IGridHost )
|
||||||
|
{
|
||||||
|
node = ( (IGridHost) monitorable ).getGridNode( AEPartLocation.INTERNAL );
|
||||||
|
}
|
||||||
|
else if( monitorable instanceof IActionHost )
|
||||||
|
{
|
||||||
|
node = ( (IActionHost) monitorable ).getActionableNode();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
node = null;
|
||||||
|
}
|
||||||
|
|
||||||
if( node != null )
|
if( node != null )
|
||||||
{
|
{
|
||||||
this.networkNode = node;
|
this.networkNode = node;
|
||||||
@@ -174,7 +189,7 @@ public class ContainerMEMonitorable extends AEBaseContainer implements IConfigMa
|
|||||||
{
|
{
|
||||||
if( Platform.isServer() )
|
if( Platform.isServer() )
|
||||||
{
|
{
|
||||||
if( this.monitor != this.host.getItemInventory() )
|
if( this.monitor != this.host.getInventory( AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ) ) )
|
||||||
{
|
{
|
||||||
this.setValidContainer( false );
|
this.setValidContainer( false );
|
||||||
}
|
}
|
||||||
@@ -374,7 +389,7 @@ public class ContainerMEMonitorable extends AEBaseContainer implements IConfigMa
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void postChange( final IBaseMonitor<IAEItemStack> monitor, final Iterable<IAEItemStack> change, final BaseActionSource source )
|
public void postChange( final IBaseMonitor<IAEItemStack> monitor, final Iterable<IAEItemStack> change, final IActionSource source )
|
||||||
{
|
{
|
||||||
for( final IAEItemStack is : change )
|
for( final IAEItemStack is : change )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ import appeng.api.config.Actionable;
|
|||||||
import appeng.api.config.PowerMultiplier;
|
import appeng.api.config.PowerMultiplier;
|
||||||
import appeng.api.implementations.guiobjects.IPortableCell;
|
import appeng.api.implementations.guiobjects.IPortableCell;
|
||||||
import appeng.container.interfaces.IInventorySlotAware;
|
import appeng.container.interfaces.IInventorySlotAware;
|
||||||
import appeng.util.Platform;
|
|
||||||
|
|
||||||
|
|
||||||
public class ContainerMEPortableCell extends ContainerMEMonitorable
|
public class ContainerMEPortableCell extends ContainerMEMonitorable
|
||||||
@@ -67,7 +66,7 @@ public class ContainerMEPortableCell extends ContainerMEMonitorable
|
|||||||
{
|
{
|
||||||
if( !currentItem.isEmpty() )
|
if( !currentItem.isEmpty() )
|
||||||
{
|
{
|
||||||
if( Platform.itemComparisons().isEqualItem( this.civ.getItemStack(), currentItem ) )
|
if( ItemStack.areItemsEqual( this.civ.getItemStack(), currentItem ) )
|
||||||
{
|
{
|
||||||
this.getPlayerInv().setInventorySlotContents( this.getPlayerInv().currentItem, this.civ.getItemStack() );
|
this.getPlayerInv().setInventorySlotContents( this.getPlayerInv().currentItem, this.civ.getItemStack() );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ import appeng.api.networking.IGridBlock;
|
|||||||
import appeng.api.networking.IGridHost;
|
import appeng.api.networking.IGridHost;
|
||||||
import appeng.api.networking.IGridNode;
|
import appeng.api.networking.IGridNode;
|
||||||
import appeng.api.networking.energy.IEnergyGrid;
|
import appeng.api.networking.energy.IEnergyGrid;
|
||||||
|
import appeng.api.storage.channels.IItemStorageChannel;
|
||||||
import appeng.api.storage.data.IAEItemStack;
|
import appeng.api.storage.data.IAEItemStack;
|
||||||
import appeng.api.storage.data.IItemList;
|
import appeng.api.storage.data.IItemList;
|
||||||
import appeng.api.util.AEPartLocation;
|
import appeng.api.util.AEPartLocation;
|
||||||
@@ -113,14 +114,14 @@ public class ContainerNetworkStatus extends AEBaseContainer
|
|||||||
|
|
||||||
for( final Class<? extends IGridHost> machineClass : this.network.getMachinesClasses() )
|
for( final Class<? extends IGridHost> machineClass : this.network.getMachinesClasses() )
|
||||||
{
|
{
|
||||||
final IItemList<IAEItemStack> list = AEApi.instance().storage().createItemList();
|
final IItemList<IAEItemStack> list = AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ).createList();
|
||||||
for( final IGridNode machine : this.network.getMachines( machineClass ) )
|
for( final IGridNode machine : this.network.getMachines( machineClass ) )
|
||||||
{
|
{
|
||||||
final IGridBlock blk = machine.getGridBlock();
|
final IGridBlock blk = machine.getGridBlock();
|
||||||
final ItemStack is = blk.getMachineRepresentation();
|
final ItemStack is = blk.getMachineRepresentation();
|
||||||
if( !is.isEmpty() )
|
if( !is.isEmpty() )
|
||||||
{
|
{
|
||||||
final IAEItemStack ais = AEItemStack.create( is );
|
final IAEItemStack ais = AEItemStack.fromItemStack( is );
|
||||||
ais.setStackSize( 1 );
|
ais.setStackSize( 1 );
|
||||||
ais.setCountRequestable( (long) ( blk.getIdlePowerUsage() * 100.0 ) );
|
ais.setCountRequestable( (long) ( blk.getIdlePowerUsage() * 100.0 ) );
|
||||||
list.add( ais );
|
list.add( ais );
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ public class ContainerNetworkTool extends AEBaseContainer
|
|||||||
{
|
{
|
||||||
if( !currentItem.isEmpty() )
|
if( !currentItem.isEmpty() )
|
||||||
{
|
{
|
||||||
if( Platform.itemComparisons().isEqualItem( this.toolInv.getItemStack(), currentItem ) )
|
if( ItemStack.areItemsEqual( this.toolInv.getItemStack(), currentItem ) )
|
||||||
{
|
{
|
||||||
this.getPlayerInv().setInventorySlotContents( this.getPlayerInv().currentItem, this.toolInv.getItemStack() );
|
this.getPlayerInv().setInventorySlotContents( this.getPlayerInv().currentItem, this.toolInv.getItemStack() );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,9 +43,9 @@ import net.minecraftforge.items.wrapper.PlayerInvWrapper;
|
|||||||
import appeng.api.AEApi;
|
import appeng.api.AEApi;
|
||||||
import appeng.api.config.Actionable;
|
import appeng.api.config.Actionable;
|
||||||
import appeng.api.definitions.IDefinitions;
|
import appeng.api.definitions.IDefinitions;
|
||||||
import appeng.api.networking.security.MachineSource;
|
|
||||||
import appeng.api.storage.IMEMonitor;
|
import appeng.api.storage.IMEMonitor;
|
||||||
import appeng.api.storage.ITerminalHost;
|
import appeng.api.storage.ITerminalHost;
|
||||||
|
import appeng.api.storage.channels.IItemStorageChannel;
|
||||||
import appeng.api.storage.data.IAEItemStack;
|
import appeng.api.storage.data.IAEItemStack;
|
||||||
import appeng.api.storage.data.IItemList;
|
import appeng.api.storage.data.IItemList;
|
||||||
import appeng.container.ContainerNull;
|
import appeng.container.ContainerNull;
|
||||||
@@ -59,6 +59,7 @@ import appeng.container.slot.SlotRestrictedInput;
|
|||||||
import appeng.core.sync.packets.PacketPatternSlot;
|
import appeng.core.sync.packets.PacketPatternSlot;
|
||||||
import appeng.helpers.IContainerCraftingPacket;
|
import appeng.helpers.IContainerCraftingPacket;
|
||||||
import appeng.items.storage.ItemViewCell;
|
import appeng.items.storage.ItemViewCell;
|
||||||
|
import appeng.me.helpers.MachineSource;
|
||||||
import appeng.parts.reporting.PartPatternTerminal;
|
import appeng.parts.reporting.PartPatternTerminal;
|
||||||
import appeng.tile.inventory.AppEngInternalInventory;
|
import appeng.tile.inventory.AppEngInternalInventory;
|
||||||
import appeng.util.InventoryAdaptor;
|
import appeng.util.InventoryAdaptor;
|
||||||
@@ -364,7 +365,7 @@ public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEA
|
|||||||
inv = playerInv;
|
inv = playerInv;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( !inv.simulateAdd( out.getItemStack() ).isEmpty() )
|
if( !inv.simulateAdd( out.createItemStack() ).isEmpty() )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -374,7 +375,7 @@ public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEA
|
|||||||
|
|
||||||
if( extracted != null )
|
if( extracted != null )
|
||||||
{
|
{
|
||||||
inv.addItems( extracted.getItemStack() );
|
inv.addItems( extracted.createItemStack() );
|
||||||
if( p instanceof EntityPlayerMP )
|
if( p instanceof EntityPlayerMP )
|
||||||
{
|
{
|
||||||
this.updateHeld( (EntityPlayerMP) p );
|
this.updateHeld( (EntityPlayerMP) p );
|
||||||
@@ -388,7 +389,7 @@ public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEA
|
|||||||
|
|
||||||
for( int x = 0; x < 9; x++ )
|
for( int x = 0; x < 9; x++ )
|
||||||
{
|
{
|
||||||
ic.setInventorySlotContents( x, packetPatternSlot.pattern[x] == null ? ItemStack.EMPTY : packetPatternSlot.pattern[x].getItemStack() );
|
ic.setInventorySlotContents( x, packetPatternSlot.pattern[x] == null ? ItemStack.EMPTY : packetPatternSlot.pattern[x].createItemStack() );
|
||||||
}
|
}
|
||||||
|
|
||||||
final IRecipe r = CraftingManager.findMatchingRecipe( ic, p.world );
|
final IRecipe r = CraftingManager.findMatchingRecipe( ic, p.world );
|
||||||
@@ -398,7 +399,8 @@ public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEA
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final IMEMonitor<IAEItemStack> storage = this.getPatternTerminal().getItemInventory();
|
final IMEMonitor<IAEItemStack> storage = this.getPatternTerminal()
|
||||||
|
.getInventory( AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ) );
|
||||||
final IItemList<IAEItemStack> all = storage.getStorageList();
|
final IItemList<IAEItemStack> all = storage.getStorageList();
|
||||||
|
|
||||||
final ItemStack is = r.getCraftingResult( ic );
|
final ItemStack is = r.getCraftingResult( ic );
|
||||||
@@ -447,7 +449,7 @@ public class ContainerPatternTerm extends ContainerMEMonitorable implements IAEA
|
|||||||
final ItemStack failed = real.getStackInSlot( x );
|
final ItemStack failed = real.getStackInSlot( x );
|
||||||
if( !failed.isEmpty() )
|
if( !failed.isEmpty() )
|
||||||
{
|
{
|
||||||
this.getCellInventory().injectItems( AEItemStack.create( failed ), Actionable.MODULATE,
|
this.getCellInventory().injectItems( AEItemStack.fromItemStack( failed ), Actionable.MODULATE,
|
||||||
new MachineSource( this.getPatternTerminal() ) );
|
new MachineSource( this.getPatternTerminal() ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ public class ContainerQuartzKnife extends AEBaseContainer
|
|||||||
{
|
{
|
||||||
if( !currentItem.isEmpty() )
|
if( !currentItem.isEmpty() )
|
||||||
{
|
{
|
||||||
if( Platform.itemComparisons().isEqualItem( this.toolInv.getItemStack(), currentItem ) )
|
if( ItemStack.areItemsEqual( this.toolInv.getItemStack(), currentItem ) )
|
||||||
{
|
{
|
||||||
this.getPlayerInv().setInventorySlotContents( this.getPlayerInv().currentItem, this.toolInv.getItemStack() );
|
this.getPlayerInv().setInventorySlotContents( this.getPlayerInv().currentItem, this.toolInv.getItemStack() );
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user