Alloy furnace - More clean-up + activation configuration

This commit is contained in:
Emmanuel BENOîT 2016-06-28 15:04:46 +02:00
parent 624eca0042
commit 8174b02091
18 changed files with 385 additions and 121 deletions

Binary file not shown.

View file

@ -21,6 +21,7 @@ public class Materials
public static final MMetal GOLD;
public static final MMetal IRON;
public static final MMetal COPPER;
//public static final MMetal RED_COPPER;
public static final Item ITEM_SLAG;
public static final Item ITEM_MALACHITE;
@ -39,6 +40,7 @@ public class Materials
// Custom metals
COPPER = new MMetal( "copper" , 0.4f , 4f , 1 , MapColor.DIRT );
//RED_COPPER = new MMetal( "red_copper" , 0f , 2f , 1 , MapColor.RED );
// Items that do not correspond to metals or ores
URegistry.addItem( ITEM_SLAG = Materials.makeItem( "slag" ) );
@ -56,9 +58,9 @@ public class Materials
}
public static Item makeFuel( String name , int burnTime )
public static Item makeFuel( final String name , final int burnTime )
{
Item fuel = makeItem( name );
final Item fuel = Materials.makeItem( name );
URegistry.setFuel( fuel , burnTime );
return fuel;
}
@ -89,8 +91,12 @@ public class Materials
public void registerRecipes( )
{
// Alloy recipes
// MAlloyRecipe.build( ).setName( "materials/red_copper" ).setBurnTime( 800 )
// .addInput( Materials.COPPER.INGOT , 1 ).addInput( Items.REDSTONE , 2 )
// .setOutput( Materials.RED_COPPER.INGOT ).setSlag( 1 ).register( );
// XXX coke is not an alloy
MAlloyRecipe.build( ).setName( "materials/coke" ).setBurnTime( 3200 ).addInput( Items.COAL , 2 )
.setOutput( ITEM_COKE ).setSlag( 1 ).register( );
.setOutput( Materials.ITEM_COKE ).setSlag( 1 ).register( );
}
}

View file

@ -0,0 +1,24 @@
package mmm.tech.base;
public enum E_TBActivationMode {
ALWAYS_ACTIVE ,
POWERED ,
UNPOWERED ,
DISABLED;
private static final E_TBActivationMode[] VALUES = E_TBActivationMode.values( );
public String getDisplayName( )
{
return "gui.mmm.tech.base.am." + this.toString( ).toLowerCase( );
}
public E_TBActivationMode next( )
{
return E_TBActivationMode.VALUES[ ( this.ordinal( ) + 1 ) % E_TBActivationMode.VALUES.length ];
}
}

View file

@ -0,0 +1,12 @@
package mmm.tech.base;
public interface I_TBConfigurableActivation
{
public E_TBActivationMode getActivationMode( );
public void setActivationMode( E_TBActivationMode mode );
}

View file

@ -0,0 +1,67 @@
package mmm.tech.base;
import io.netty.buffer.ByteBuf;
import mmm.utils.I_UMessage;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.inventory.Container;
public class TBActivationModeMessage
implements I_UMessage
{
private E_TBActivationMode mode;
public TBActivationModeMessage( )
{
// EMPTY
}
public TBActivationModeMessage( final E_TBActivationMode mode )
{
this.mode = mode;
}
@Override
public void fromBytes( final ByteBuf buf )
{
switch ( buf.readByte( ) ) {
default:
// XXX warning
case 0:
this.mode = E_TBActivationMode.ALWAYS_ACTIVE;
break;
case 1:
this.mode = E_TBActivationMode.POWERED;
break;
case 2:
this.mode = E_TBActivationMode.UNPOWERED;
break;
case 3:
this.mode = E_TBActivationMode.DISABLED;
break;
}
}
@Override
public void toBytes( final ByteBuf buf )
{
buf.writeByte( this.mode.ordinal( ) );
}
@Override
public void handleOnServer( final EntityPlayerMP player )
{
final Container curCont = player.openContainer;
if ( curCont instanceof I_TBConfigurableActivation ) {
( (I_TBConfigurableActivation) curCont ).setActivationMode( this.mode );
}
}
}

View file

@ -1,6 +1,9 @@
package mmm.tech.base;
import mmm.tech.base.alloy_furnace.TBAFContainer;
import mmm.tech.base.alloy_furnace.TBAFGui;
import mmm.tech.base.alloy_furnace.TBAFTileEntity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
@ -21,8 +24,8 @@ public class TBAlloyFurnaceGuiHandler
{
final BlockPos pos = new BlockPos( x , y , z );
final TileEntity tileEntity = world.getTileEntity( pos );
if ( tileEntity instanceof TBAlloyFurnaceTileEntity ) {
return new TBAlloyFurnaceContainer( player.inventory , (TBAlloyFurnaceTileEntity) tileEntity );
if ( tileEntity instanceof TBAFTileEntity ) {
return new TBAFContainer( player.inventory , (TBAFTileEntity) tileEntity );
}
return null;
}
@ -34,8 +37,8 @@ public class TBAlloyFurnaceGuiHandler
final int y , final int z )
{
final TileEntity tileEntity = world.getTileEntity( new BlockPos( x , y , z ) );
if ( tileEntity instanceof TBAlloyFurnaceTileEntity ) {
return new TBAlloyFurnaceGui( player.inventory , (TBAlloyFurnaceTileEntity) tileEntity );
if ( tileEntity instanceof TBAFTileEntity ) {
return new TBAFGui( player.inventory , (TBAFTileEntity) tileEntity );
}
return null;
}

View file

@ -1,39 +1,18 @@
package mmm.tech.base;
import mmm.Mmm;
import mmm.materials.MAlloyRecipe;
import mmm.tech.base.alloy_furnace.AlloyFurnace;
import mmm.utils.URegistry;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlockSpecial;
import net.minecraftforge.fml.common.network.NetworkRegistry;
import net.minecraftforge.fml.common.registry.GameRegistry;
public class TechBase
{
public static final TBAlloyFurnaceBlock ALLOY_FURNACE_BLOCK_INACTIVE;
public static final TBAlloyFurnaceBlock ALLOY_FURNACE_BLOCK_ACTIVE;
public static final Item ALLOY_FURNACE_ITEM;
public static final AlloyFurnace ALLOY_FURNACE;
static {
ALLOY_FURNACE_BLOCK_INACTIVE = new TBAlloyFurnaceBlock( false );
ALLOY_FURNACE_BLOCK_ACTIVE = new TBAlloyFurnaceBlock( true );
ALLOY_FURNACE_ITEM = new ItemBlockSpecial( TechBase.ALLOY_FURNACE_BLOCK_INACTIVE )//
.setMaxStackSize( 16 )//
.setCreativeTab( TechBase.ALLOY_FURNACE_BLOCK_INACTIVE.getCreativeTabToDisplayOn( ) );
URegistry.setIdentifiers( TechBase.ALLOY_FURNACE_ITEM , "tech" , "base" , "alloy_furnace" );
URegistry.addBlock( TechBase.ALLOY_FURNACE_BLOCK_INACTIVE , TechBase.ALLOY_FURNACE_ITEM );
URegistry.addBlock( TechBase.ALLOY_FURNACE_BLOCK_ACTIVE , null );
GameRegistry.registerTileEntity( TBAlloyFurnaceTileEntity.class , "mmm:tech/base/alloy_furnace" );
NetworkRegistry.INSTANCE.registerGuiHandler( Mmm.get( ) , new TBAlloyFurnaceGuiHandler( ) );
URegistry.addServerMessage( TBAlloyFurnaceMessage.class );
// FIXME test, remove this later
MAlloyRecipe.build( ).setName( "test" ).setBurnTime( 50 ).setSlag( 1 ).setOutput( Items.COOKED_CHICKEN , 10 )
.addInput( Items.COOKED_BEEF ).addInput( Items.COOKED_PORKCHOP ).register( );
URegistry.addServerMessage( TBActivationModeMessage.class );
ALLOY_FURNACE = AlloyFurnace.INSTANCE;
}

View file

@ -0,0 +1,41 @@
package mmm.tech.base.alloy_furnace;
import mmm.Mmm;
import mmm.tech.base.TBAlloyFurnaceGuiHandler;
import mmm.utils.URegistry;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlockSpecial;
import net.minecraftforge.fml.common.network.NetworkRegistry;
import net.minecraftforge.fml.common.registry.GameRegistry;
public enum AlloyFurnace {
INSTANCE;
public final TBAFBlock INACTIVE;
public final TBAFBlock ACTIVE;
public final Item ITEM;
private AlloyFurnace( )
{
this.INACTIVE = new TBAFBlock( false );
this.ACTIVE = new TBAFBlock( true );
this.ITEM = new ItemBlockSpecial( this.INACTIVE )//
.setMaxStackSize( 16 )//
.setCreativeTab( this.INACTIVE.getCreativeTabToDisplayOn( ) );
URegistry.setIdentifiers( this.ITEM , "tech" , "base" , "alloy_furnace" );
URegistry.addBlock( this.INACTIVE , this.ITEM );
URegistry.addBlock( this.ACTIVE , null );
GameRegistry.registerTileEntity( TBAFTileEntity.class , "mmm:tech/base/alloy_furnace" );
// FIXME
NetworkRegistry.INSTANCE.registerGuiHandler( Mmm.get( ) , new TBAlloyFurnaceGuiHandler( ) );
URegistry.addServerMessage( TBAFMessage.class );
}
}

View file

@ -1,4 +1,4 @@
package mmm.tech.base;
package mmm.tech.base.alloy_furnace;
import java.util.List;
@ -48,7 +48,7 @@ import net.minecraftforge.fml.relauncher.SideOnly;
public class TBAlloyFurnaceBlock
public class TBAFBlock
extends BlockContainer
implements I_URecipeRegistrar
{
@ -63,7 +63,7 @@ public class TBAlloyFurnaceBlock
public final boolean active;
public TBAlloyFurnaceBlock( final boolean active )
public TBAFBlock( final boolean active )
{
super( Material.ROCK );
this.active = active;
@ -80,8 +80,8 @@ public class TBAlloyFurnaceBlock
this.lightValue = active ? 13 : 0;
this.setDefaultState( this.blockState.getBaseState( ) //
.withProperty( TBAlloyFurnaceBlock.FACING , EnumFacing.NORTH ) //
.withProperty( TBAlloyFurnaceBlock.POWERED , Boolean.valueOf( false ) ) );
.withProperty( TBAFBlock.FACING , EnumFacing.NORTH ) //
.withProperty( TBAFBlock.POWERED , Boolean.valueOf( false ) ) );
URegistry.setIdentifiers( this , "tech" , "base" , "alloy_furnace" , active ? "active" : "inactive" );
}
@ -91,7 +91,7 @@ public class TBAlloyFurnaceBlock
public void registerRecipes( )
{
if ( !this.active ) {
GameRegistry.addShapedRecipe( new ItemStack( TechBase.ALLOY_FURNACE_ITEM ) , //
GameRegistry.addShapedRecipe( new ItemStack( AlloyFurnace.INSTANCE.ITEM ) , //
"BBB" , //
"BFB" , //
"BBB" , //
@ -108,7 +108,7 @@ public class TBAlloyFurnaceBlock
@Override
public TileEntity createNewTileEntity( final World worldIn , final int meta )
{
return new TBAlloyFurnaceTileEntity( );
return new TBAFTileEntity( );
}
@ -117,19 +117,19 @@ public class TBAlloyFurnaceBlock
final IBlockState iblockstate = world.getBlockState( pos );
final TileEntity tileentity = world.getTileEntity( pos );
TBAlloyFurnaceBlock.keepInventory = true;
TBAFBlock.keepInventory = true;
IBlockState nState;
Block nBlock;
if ( burning ) {
nBlock = TechBase.ALLOY_FURNACE_BLOCK_ACTIVE;
nBlock = AlloyFurnace.INSTANCE.ACTIVE;
} else {
nBlock = TechBase.ALLOY_FURNACE_BLOCK_INACTIVE;
nBlock = AlloyFurnace.INSTANCE.INACTIVE;
}
nState = nBlock.getDefaultState( ) //
.withProperty( TBAlloyFurnaceBlock.FACING , iblockstate.getValue( TBAlloyFurnaceBlock.FACING ) ) //
.withProperty( TBAlloyFurnaceBlock.POWERED , iblockstate.getValue( TBAlloyFurnaceBlock.POWERED ) );
.withProperty( TBAFBlock.FACING , iblockstate.getValue( TBAFBlock.FACING ) ) //
.withProperty( TBAFBlock.POWERED , iblockstate.getValue( TBAFBlock.POWERED ) );
world.setBlockState( pos , nState , 3 );
TBAlloyFurnaceBlock.keepInventory = false;
TBAFBlock.keepInventory = false;
if ( tileentity != null ) {
tileentity.validate( );
@ -214,7 +214,7 @@ public class TBAlloyFurnaceBlock
final double pSide = ( rand.nextDouble( ) - .5 ) * 10. / 16.;
double spawnX , spawnZ;
switch ( stateIn.getValue( TBAlloyFurnaceBlock.FACING ) ) {
switch ( stateIn.getValue( TBAFBlock.FACING ) ) {
case WEST:
spawnX = cx - frontOffset;
spawnZ = cz + pSide;
@ -251,8 +251,8 @@ public class TBAlloyFurnaceBlock
public void addCollisionBoxToList( final IBlockState state , final World worldIn , final BlockPos pos ,
final AxisAlignedBB entityBox , final List< AxisAlignedBB > collidingBoxes , final Entity entityIn )
{
Block.addCollisionBoxToList( pos , entityBox , collidingBoxes , TBAlloyFurnaceBlock.AABB_TOP );
Block.addCollisionBoxToList( pos , entityBox , collidingBoxes , TBAlloyFurnaceBlock.AABB_BOTTOM );
Block.addCollisionBoxToList( pos , entityBox , collidingBoxes , TBAFBlock.AABB_TOP );
Block.addCollisionBoxToList( pos , entityBox , collidingBoxes , TBAFBlock.AABB_BOTTOM );
}
@ -264,7 +264,7 @@ public class TBAlloyFurnaceBlock
@Nullable
public Item getItemDropped( final IBlockState state , final Random rand , final int fortune )
{
return TechBase.ALLOY_FURNACE_ITEM;
return AlloyFurnace.INSTANCE.ITEM;
}
@ -276,7 +276,7 @@ public class TBAlloyFurnaceBlock
protected BlockStateContainer createBlockState( )
{
return new BlockStateContainer( this , new IProperty[] {
TBAlloyFurnaceBlock.FACING , TBAlloyFurnaceBlock.POWERED
TBAFBlock.FACING , TBAFBlock.POWERED
} );
}
@ -292,16 +292,16 @@ public class TBAlloyFurnaceBlock
}
return this.getDefaultState( ) //
.withProperty( TBAlloyFurnaceBlock.FACING , enumfacing ) //
.withProperty( TBAlloyFurnaceBlock.POWERED , powered );
.withProperty( TBAFBlock.FACING , enumfacing ) //
.withProperty( TBAFBlock.POWERED , powered );
}
@Override
public int getMetaFromState( final IBlockState state )
{
return state.getValue( TBAlloyFurnaceBlock.FACING ).getIndex( ) //
| ( state.getValue( TBAlloyFurnaceBlock.POWERED ) ? 8 : 0 );
return state.getValue( TBAFBlock.FACING ).getIndex( ) //
| ( state.getValue( TBAFBlock.POWERED ) ? 8 : 0 );
}
@ -310,22 +310,21 @@ public class TBAlloyFurnaceBlock
final float hitX , final float hitY , final float hitZ , final int meta , final EntityLivingBase placer )
{
return this.getDefaultState( ).withProperty( //
TBAlloyFurnaceBlock.FACING , placer.getHorizontalFacing( ).getOpposite( ) );
TBAFBlock.FACING , placer.getHorizontalFacing( ).getOpposite( ) );
}
@Override
public IBlockState withRotation( final IBlockState state , final Rotation rot )
{
return state.withProperty( TBAlloyFurnaceBlock.FACING ,
rot.rotate( state.getValue( TBAlloyFurnaceBlock.FACING ) ) );
return state.withProperty( TBAFBlock.FACING , rot.rotate( state.getValue( TBAFBlock.FACING ) ) );
}
@Override
public IBlockState withMirror( final IBlockState state , final Mirror mirrorIn )
{
return state.withRotation( mirrorIn.toRotation( state.getValue( TBAlloyFurnaceBlock.FACING ) ) );
return state.withRotation( mirrorIn.toRotation( state.getValue( TBAFBlock.FACING ) ) );
}
@ -351,7 +350,7 @@ public class TBAlloyFurnaceBlock
final float hitX , final float hitY , final float hitZ )
{
final TileEntity te = worldIn.getTileEntity( pos );
if ( ! ( te instanceof TBAlloyFurnaceTileEntity ) || playerIn.isSneaking( ) ) {
if ( ! ( te instanceof TBAFTileEntity ) || playerIn.isSneaking( ) ) {
return false;
}
playerIn.openGui( Mmm.get( ) , 0 , worldIn , pos.getX( ) , pos.getY( ) , pos.getZ( ) );
@ -362,10 +361,10 @@ public class TBAlloyFurnaceBlock
@Override
public void breakBlock( final World worldIn , final BlockPos pos , final IBlockState state )
{
if ( !TBAlloyFurnaceBlock.keepInventory ) {
if ( !TBAFBlock.keepInventory ) {
final TileEntity tileEntity = worldIn.getTileEntity( pos );
if ( tileEntity instanceof TBAlloyFurnaceTileEntity ) {
final TBAlloyFurnaceTileEntity afte = (TBAlloyFurnaceTileEntity) tileEntity;
if ( tileEntity instanceof TBAFTileEntity ) {
final TBAFTileEntity afte = (TBAFTileEntity) tileEntity;
afte.cancelAlloying( );
InventoryHelper.dropInventoryItems( worldIn , pos , afte.input );
InventoryHelper.dropInventoryItems( worldIn , pos , afte.fuel );
@ -393,10 +392,10 @@ public class TBAlloyFurnaceBlock
public int getComparatorInputOverride( final IBlockState blockState , final World worldIn , final BlockPos pos )
{
final TileEntity te = worldIn.getTileEntity( pos );
if ( ! ( te instanceof TBAlloyFurnaceTileEntity ) ) {
if ( ! ( te instanceof TBAFTileEntity ) ) {
return 0;
}
return Container.calcRedstoneFromInventory( ( (TBAlloyFurnaceTileEntity) te ).output );
return Container.calcRedstoneFromInventory( ( (TBAFTileEntity) te ).output );
}
@ -418,8 +417,8 @@ public class TBAlloyFurnaceBlock
private void checkIfPowered( final IBlockState state , final World worldIn , final BlockPos pos )
{
final boolean powered = worldIn.isBlockPowered( pos );
if ( powered != state.getValue( TBAlloyFurnaceBlock.POWERED ).booleanValue( ) ) {
worldIn.setBlockState( pos , state.withProperty( TBAlloyFurnaceBlock.POWERED , powered ) , 4 );
if ( powered != state.getValue( TBAFBlock.POWERED ).booleanValue( ) ) {
worldIn.setBlockState( pos , state.withProperty( TBAFBlock.POWERED , powered ) , 4 );
}
}

View file

@ -1,9 +1,13 @@
package mmm.tech.base;
package mmm.tech.base.alloy_furnace;
import mmm.materials.MAlloyRecipe;
import mmm.tech.base.E_TBActivationMode;
import mmm.tech.base.I_TBConfigurableActivation;
import mmm.tech.base.TBActivationModeMessage;
import mmm.utils.UInventoryDisplay;
import mmm.utils.UInventoryGrid;
import mmm.utils.URegistry;
import mmm.utils.gui.UGContainer;
import mmm.utils.gui.UGSlotDisplay;
import mmm.utils.gui.UGSlotFuel;
@ -12,6 +16,7 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntityFurnace;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
@ -19,10 +24,11 @@ import net.minecraft.world.World;
public class TBAlloyFurnaceContainer
public class TBAFContainer
extends UGContainer
implements I_TBConfigurableActivation
{
public final TBAlloyFurnaceTileEntity tileEntity;
public final TBAFTileEntity tileEntity;
public final World world;
public final BlockPos position;
@ -32,7 +38,7 @@ public class TBAlloyFurnaceContainer
public final UInventoryDisplay recipe;
public TBAlloyFurnaceContainer( final InventoryPlayer playerInv , final TBAlloyFurnaceTileEntity tileEntity )
public TBAFContainer( final InventoryPlayer playerInv , final TBAFTileEntity tileEntity )
{
this.tileEntity = tileEntity;
this.world = tileEntity.getWorld( );
@ -59,15 +65,13 @@ public class TBAlloyFurnaceContainer
this.addSlotToContainer( new UGSlotDisplay( this.recipe , 6 , 131 , 49 ) );
this.slotGroups.endGroups( );
this.slotGroups.showGroup( 0 ); // FIXME remove this
this.slotGroups.showGroup( 1 );
}
@Override
public boolean canInteractWith( final EntityPlayer player )
{
return this.world.getBlockState( this.position ).getBlock( ) instanceof TBAlloyFurnaceBlock
return this.world.getBlockState( this.position ).getBlock( ) instanceof TBAFBlock
&& player.getDistanceSq( this.position.getX( ) + .5 , this.position.getY( ) + .5 ,
this.position.getZ( ) + .5 ) <= 64.;
}
@ -148,4 +152,28 @@ public class TBAlloyFurnaceContainer
}
}
@Override
public E_TBActivationMode getActivationMode( )
{
final TileEntity te = this.world.getTileEntity( this.position );
if ( te instanceof TBAFTileEntity ) {
return ( (TBAFTileEntity) te ).getActivationMode( );
}
return E_TBActivationMode.DISABLED;
}
@Override
public void setActivationMode( final E_TBActivationMode mode )
{
final TileEntity te = this.world.getTileEntity( this.position );
if ( te instanceof TBAFTileEntity ) {
( (TBAFTileEntity) te ).setActivationMode( mode );
}
if ( this.world.isRemote ) {
URegistry.network.sendToServer( new TBActivationModeMessage( mode ) );
}
}
}

View file

@ -1,4 +1,4 @@
package mmm.tech.base;
package mmm.tech.base.alloy_furnace;
import java.util.ArrayList;
@ -22,8 +22,8 @@ import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly( Side.CLIENT )
public class TBAlloyFurnaceGui
extends A_UGTabbedContainerScreen< TBAlloyFurnaceContainer >
public class TBAFGui
extends A_UGTabbedContainerScreen< TBAFContainer >
{
private static final ResourceLocation TEXTURES[] = {
new ResourceLocation( Mmm.ID , "textures/gui/alloy_furnace_1.png" ) ,
@ -39,7 +39,7 @@ public class TBAlloyFurnaceGui
private MainTab( )
{
super( );
this.setBackground( TBAlloyFurnaceGui.TEXTURES[ 0 ] ) //
this.setBackground( TBAFGui.TEXTURES[ 0 ] ) //
.setHeight( 194 ) //
.setIconPosition( 191 , 0 )//
.setSlotGroups( 0 , 1 ) //
@ -55,10 +55,10 @@ public class TBAlloyFurnaceGui
final int x = ( this.parent.width - this.parent.getXSize( ) ) / 2;
final int y = ( this.parent.height - this.height ) / 2;
final TBAlloyFurnaceContainer container = (TBAlloyFurnaceContainer) this.parent.container;
final TBAFContainer container = (TBAFContainer) this.parent.container;
final TileEntity atPos = container.world.getTileEntity( container.position );
if ( atPos instanceof TBAlloyFurnaceTileEntity ) {
final TBAlloyFurnaceTileEntity te = (TBAlloyFurnaceTileEntity) atPos;
if ( atPos instanceof TBAFTileEntity ) {
final TBAFTileEntity te = (TBAFTileEntity) atPos;
// Burn
if ( te.isBurning( ) ) {
final int burn = te.getBurnProgress( 13 );
@ -89,7 +89,7 @@ public class TBAlloyFurnaceGui
private RecipeTab( )
{
super( );
this.setBackground( TBAlloyFurnaceGui.TEXTURES[ 1 ] ) //
this.setBackground( TBAFGui.TEXTURES[ 1 ] ) //
.setHeight( 194 ) //
.setIconPosition( 207 , 0 )//
.setSlotGroups( 0 , 2 ) //
@ -112,9 +112,7 @@ public class TBAlloyFurnaceGui
this.tfSearch.setDisabledTextColour( 0x7f7f7f );
this.tfSearch.setEnableBackgroundDrawing( true );
this.tfSearch.setMaxStringLength( 30 );
this.bPrevious.visible = this.bNext.visible = this.bConfirm.visible = false;
this.tfSearch.setVisible( false );
this.tfSearch.setVisible( this.isSelected( ) );
this.buttons.add( this.bNext );
this.buttons.add( this.bPrevious );
@ -161,7 +159,7 @@ public class TBAlloyFurnaceGui
public boolean onKeyTyped( final char typedChar , final int keyCode )
{
if ( this.tfSearch.textboxKeyTyped( typedChar , keyCode ) ) {
( (TBAlloyFurnaceGui) this.parent ).handleFiltering( this.tfSearch.getText( ) );
( (TBAFGui) this.parent ).handleFiltering( this.tfSearch.getText( ) );
return true;
}
return false;
@ -171,7 +169,7 @@ public class TBAlloyFurnaceGui
@Override
public boolean onActionPerformed( final GuiButton button )
{
final TBAlloyFurnaceGui gui = (TBAlloyFurnaceGui) this.parent;
final TBAFGui gui = (TBAFGui) this.parent;
if ( button == this.bNext ) {
gui.setRecipe( gui.currentRecipe + 1 );
} else if ( button == this.bPrevious ) {
@ -179,7 +177,7 @@ public class TBAlloyFurnaceGui
} else if ( button == this.bConfirm ) {
final MAlloyRecipe recipe = gui.recipes.get( gui.currentRecipe );
URegistry.network.sendToServer( //
new TBAlloyFurnaceMessage( gui.container.position , recipe.name , true ) );
new TBAFMessage( gui.container.position , recipe.name , true ) );
gui.container.tileEntity.recipe = recipe;
} else {
return false;
@ -196,7 +194,7 @@ public class TBAlloyFurnaceGui
return;
}
final TBAlloyFurnaceGui gui = (TBAlloyFurnaceGui) this.parent;
final TBAFGui gui = (TBAFGui) this.parent;
if ( gui.recipes.isEmpty( ) ) {
this.bNext.enabled = this.bPrevious.enabled = this.bConfirm.enabled = false;
} else {
@ -212,16 +210,56 @@ public class TBAlloyFurnaceGui
private static class ConfigTab
extends A_UGTab
{
private GuiButton bActivationMode;
private ConfigTab( )
{
super( );
this.setBackground( TBAlloyFurnaceGui.TEXTURES[ 2 ] ) //
this.setBackground( TBAFGui.TEXTURES[ 2 ] ) //
.setHeight( 194 ) //
.setIconPosition( 223 , 0 )//
.setSlotGroups( ) //
.setTooltip( "gui.mmm.configure" );
}
@Override
public void initGui( final int x , final int y )
{
super.initGui( x , y );
this.bActivationMode = new GuiButton( 100 , x + 10 , y + 10 , this.parent.getXSize( ) - 20 , 20 ,
this.getActivationText( ) );
this.buttons.add( this.bActivationMode );
}
@Override
public void drawBackground( final float partialTicks , final int mouseX , final int mouseY )
{
this.bActivationMode.displayString = this.getActivationText( );
super.drawBackground( partialTicks , mouseX , mouseY );
}
@Override
public boolean onActionPerformed( final GuiButton button )
{
if ( button == this.bActivationMode ) {
final TBAFContainer cont = (TBAFContainer) this.parent.container;
cont.setActivationMode( cont.getActivationMode( ).next( ) );
return true;
}
return super.onActionPerformed( button );
}
private String getActivationText( )
{
return I18n.format( ( (TBAFContainer) this.parent.container ).getActivationMode( ).getDisplayName( ) );
}
}
private ArrayList< MAlloyRecipe > recipes;
@ -229,9 +267,9 @@ public class TBAlloyFurnaceGui
private String searchString = "";
public TBAlloyFurnaceGui( final InventoryPlayer inventoryPlayer , final TBAlloyFurnaceTileEntity tileEntity )
public TBAFGui( final InventoryPlayer inventoryPlayer , final TBAFTileEntity tileEntity )
{
super( new TBAlloyFurnaceContainer( inventoryPlayer , tileEntity ) , TBAlloyFurnaceGui.TEXTURES[ 0 ] , //
super( new TBAFContainer( inventoryPlayer , tileEntity ) , TBAFGui.TEXTURES[ 0 ] , //
new MainTab( ) , //
new RecipeTab( ) , //
new ConfigTab( ) );
@ -258,7 +296,7 @@ public class TBAlloyFurnaceGui
this.container.setCurrentRecipe( rName , false );
URegistry.network.sendToServer( //
new TBAlloyFurnaceMessage( this.container.position , rName , false ) );
new TBAFMessage( this.container.position , rName , false ) );
( (RecipeTab) this.tabs[ 1 ] ).enableButtons( );
}

View file

@ -1,4 +1,4 @@
package mmm.tech.base;
package mmm.tech.base.alloy_furnace;
import io.netty.buffer.ByteBuf;
@ -11,7 +11,7 @@ import net.minecraftforge.fml.common.network.ByteBufUtils;
public class TBAlloyFurnaceMessage
public class TBAFMessage
implements I_UMessage
{
private BlockPos blockPos;
@ -19,13 +19,13 @@ public class TBAlloyFurnaceMessage
private boolean confirm;
public TBAlloyFurnaceMessage( )
public TBAFMessage( )
{
// EMPTY
}
public TBAlloyFurnaceMessage( final BlockPos blockPos , final ResourceLocation selected , final boolean confirm )
public TBAFMessage( final BlockPos blockPos , final ResourceLocation selected , final boolean confirm )
{
this.blockPos = blockPos;
this.selected = selected;
@ -66,8 +66,8 @@ public class TBAlloyFurnaceMessage
public void handleOnServer( final EntityPlayerMP player )
{
final Container curCont = player.openContainer;
if ( curCont instanceof TBAlloyFurnaceContainer ) {
final TBAlloyFurnaceContainer container = (TBAlloyFurnaceContainer) curCont;
if ( curCont instanceof TBAFContainer ) {
final TBAFContainer container = (TBAFContainer) curCont;
container.setCurrentRecipe( this.selected , this.confirm );
}
}

View file

@ -1,4 +1,4 @@
package mmm.tech.base;
package mmm.tech.base.alloy_furnace;
import mmm.utils.UInventoryGrid;
@ -8,14 +8,14 @@ import net.minecraftforge.items.IItemHandler;
public class TBAlloyFurnaceOutputHopper
public class TBAFOutputHopper
implements IItemHandler
{
private final TBAlloyFurnaceTileEntity tileEntity;
private final TBAFTileEntity tileEntity;
private final int nSlots;
public TBAlloyFurnaceOutputHopper( final TBAlloyFurnaceTileEntity tileEntity )
public TBAFOutputHopper( final TBAFTileEntity tileEntity )
{
this.tileEntity = tileEntity;
this.nSlots = this.tileEntity.input.getSizeInventory( ) + this.tileEntity.fuel.getSizeInventory( )

View file

@ -1,8 +1,10 @@
package mmm.tech.base;
package mmm.tech.base.alloy_furnace;
import mmm.materials.MAlloyRecipe;
import mmm.materials.Materials;
import mmm.tech.base.E_TBActivationMode;
import mmm.tech.base.I_TBConfigurableActivation;
import mmm.utils.UInventoryGrid;
import net.minecraft.block.state.IBlockState;
import net.minecraft.item.ItemStack;
@ -24,9 +26,9 @@ import net.minecraftforge.items.wrapper.InvWrapper;
public class TBAlloyFurnaceTileEntity
public class TBAFTileEntity
extends TileEntity
implements ITickable
implements ITickable , I_TBConfigurableActivation
{
public final UInventoryGrid input;
@ -39,22 +41,24 @@ public class TBAlloyFurnaceTileEntity
private int alloyCurrent;
private int burnCurrent;
private int burnTotal;
private E_TBActivationMode activationMode;
private final IItemHandler inputHopper;
private final IItemHandler fuelHopper;
private final IItemHandler outputHopper;
public TBAlloyFurnaceTileEntity( )
public TBAFTileEntity( )
{
this.input = new UInventoryGrid( "Input" , 3 , 5 );
this.fuel = new UInventoryGrid( "Fuel" , 2 , 2 );
this.output = new UInventoryGrid( "Output" , 2 , 5 );
this.recipe = MAlloyRecipe.REGISTRY.getRecipes( ).get( 0 );
this.activationMode = E_TBActivationMode.ALWAYS_ACTIVE;
this.inputHopper = new InvWrapper( this.input );
this.fuelHopper = new InvWrapper( this.fuel );
this.outputHopper = new TBAlloyFurnaceOutputHopper( this );
this.outputHopper = new TBAFOutputHopper( this );
}
@ -62,7 +66,7 @@ public class TBAlloyFurnaceTileEntity
public boolean shouldRefresh( final World world , final BlockPos pos , final IBlockState oldState ,
final IBlockState newSate )
{
return ! ( newSate.getBlock( ) instanceof TBAlloyFurnaceBlock );
return ! ( newSate.getBlock( ) instanceof TBAFBlock );
}
@ -163,7 +167,7 @@ public class TBAlloyFurnaceTileEntity
}
if ( this.isBurning( ) != wasBurning ) {
TBAlloyFurnaceBlock.setState( this.isBurning( ) , this.worldObj , this.pos );
TBAFBlock.setState( this.isBurning( ) , this.worldObj , this.pos );
}
if ( dirty ) {
@ -176,7 +180,19 @@ public class TBAlloyFurnaceTileEntity
public boolean isEnabled( )
{
return !TBAlloyFurnaceBlock.isPowered( this.getBlockMetadata( ) );
final boolean powered = TBAFBlock.isPowered( this.getBlockMetadata( ) );
switch ( this.activationMode ) {
case ALWAYS_ACTIVE:
return true;
case POWERED:
return powered;
case UNPOWERED:
return !powered;
case DISABLED:
return false;
}
System.err.println( "Warning: unsupported activation mode" );
return false;
}
@ -205,6 +221,20 @@ public class TBAlloyFurnaceTileEntity
}
@Override
public E_TBActivationMode getActivationMode( )
{
return this.activationMode;
}
@Override
public void setActivationMode( final E_TBActivationMode mode )
{
this.activationMode = mode;
}
public void cancelAlloying( )
{
if ( this.alloying != null ) {
@ -431,6 +461,24 @@ public class TBAlloyFurnaceTileEntity
this.recipe = MAlloyRecipe.REGISTRY.getRecipes( ).get( 0 );
}
byte am = compound.getByte( "ActivationMode" );
switch ( am ) {
default:
// XXX log
case 0:
this.activationMode = E_TBActivationMode.ALWAYS_ACTIVE;
break;
case 1:
this.activationMode = E_TBActivationMode.POWERED;
break;
case 2:
this.activationMode = E_TBActivationMode.UNPOWERED;
break;
case 3:
this.activationMode = E_TBActivationMode.DISABLED;
break;
}
this.burnCurrent = compound.getInteger( "BurnCurrent" );
this.burnTotal = compound.getInteger( "BurnTotal" );
@ -451,6 +499,7 @@ public class TBAlloyFurnaceTileEntity
private void writeSyncData( final NBTTagCompound compound )
{
compound.setString( "Recipe" , this.recipe.name.toString( ) );
compound.setByte( "ActivationMode" , (byte) this.activationMode.ordinal( ) );
if ( this.alloying != null ) {
compound.setString( "AlloyRecipe" , this.alloying.name.toString( ) );
compound.setInteger( "AlloyCurrent" , this.alloyCurrent );

View file

@ -27,9 +27,10 @@ public abstract class A_UGTab
protected int iconY;
protected String tooltip;
protected List< GuiButton > buttons = Lists.< GuiButton > newArrayList( );
private boolean selected;
A_UGTab setParent( final A_UGTabbedContainerScreen< ? > parent , int ordinal )
A_UGTab setParent( final A_UGTabbedContainerScreen< ? > parent , final int ordinal )
{
this.parent = parent;
this.ordinal = ordinal;
@ -43,7 +44,7 @@ public abstract class A_UGTab
}
public A_UGTab setBackground( ResourceLocation background )
public A_UGTab setBackground( final ResourceLocation background )
{
this.background = background;
return this;
@ -56,7 +57,7 @@ public abstract class A_UGTab
}
public A_UGTab setHeight( int height )
public A_UGTab setHeight( final int height )
{
this.height = height;
return this;
@ -75,7 +76,7 @@ public abstract class A_UGTab
}
public A_UGTab setIconPosition( int x , int y )
public A_UGTab setIconPosition( final int x , final int y )
{
this.iconX = x;
this.iconY = y;
@ -89,27 +90,27 @@ public abstract class A_UGTab
}
public A_UGTab setTooltip( String tooltip )
public A_UGTab setTooltip( final String tooltip )
{
this.tooltip = tooltip;
return this;
}
public A_UGTab setSlotGroups( int... slotGroups )
public A_UGTab setSlotGroups( final int... slotGroups )
{
this.slotGroups = slotGroups;
return this;
}
public void initGui( int x , int y )
public void initGui( final int x , final int y )
{
// EMPTY
}
public void drawBackground( float partialTicks , int mouseX , int mouseY )
public void drawBackground( final float partialTicks , final int mouseX , final int mouseY )
{
GlStateManager.color( 1f , 1f , 1f , 1f );
GlStateManager.enableBlend( );
@ -125,6 +126,7 @@ public abstract class A_UGTab
for ( int i = 0 ; i < this.buttons.size( ) ; i++ ) {
this.buttons.get( i ).visible = true;
}
this.selected = true;
}
@ -133,10 +135,17 @@ public abstract class A_UGTab
for ( int i = 0 ; i < this.buttons.size( ) ; i++ ) {
this.buttons.get( i ).visible = false;
}
this.selected = false;
}
public void onMouseClicked( int mouseX , int mouseY , int mouseButton )
public boolean isSelected( )
{
return this.selected;
}
public void onMouseClicked( final int mouseX , final int mouseY , final int mouseButton )
{
// EMPTY
}
@ -148,7 +157,7 @@ public abstract class A_UGTab
}
public boolean onActionPerformed( GuiButton button )
public boolean onActionPerformed( final GuiButton button )
{
return false;
}

View file

@ -54,9 +54,13 @@ public abstract class A_UGTabbedContainerScreen< CTYPE extends UGContainer >
final int x = ( this.width - this.xSize ) / 2;
final int y = ( this.height - this.ySize ) / 2;
for ( final A_UGTab tab : this.tabs ) {
for ( int tabIndex = 0 ; tabIndex < this.tabs.length ; tabIndex ++ ) {
A_UGTab tab = this.tabs[ tabIndex ];
tab.buttons.clear( );
tab.initGui( x , y );
for ( int i = 0 ; i < tab.buttons.size( ) ; i ++ ) {
tab.buttons.get( i ).visible = ( this.currentTab == tabIndex );
}
this.buttonList.addAll( tab.buttons );
}
}

View file

@ -16,6 +16,11 @@ item.mmm.materials.stone.cuprite.name=Cuprite
tile.mmm.materials.ore.cuprite.name=Cuprite Ore
gui.mmm.tech.base.am.always_active=Always Active
gui.mmm.tech.base.am.powered=Redstone Activates
gui.mmm.tech.base.am.unpowered=Redstone Disables
gui.mmm.tech.base.am.disabled=Deactivated
item.mmm.tech.base.alloy_furnace.name=Alloy Furnace
container.mmm.alloy_furnace.contents=Furnace Contents
container.mmm.alloy_furnace.recipe=Alloy Selection

Binary file not shown.

After

Width:  |  Height:  |  Size: 792 B