initial 1.8 port

This commit is contained in:
Raoul Van den Berge
2015-12-25 18:51:58 +01:00
parent 8acd72fffc
commit 6c3c113521
74 changed files with 6796 additions and 7094 deletions

View File

@@ -22,7 +22,7 @@ group = "storagecraft"
archivesBaseName = "storagecraft" archivesBaseName = "storagecraft"
minecraft { minecraft {
version = "1.7.10-10.13.4.1566-1.7.10" version = "1.8-11.14.1.1341"
runDir = "eclipse" runDir = "eclipse"
} }
@@ -33,9 +33,9 @@ repositories {
} }
} }
dependencies { dependencies {
compile "codechicken:CodeChickenLib:1.7.10-1.1.3.140:dev" compile "codechicken:CodeChickenLib:1.8-1.1.2.139:dev"
compile "codechicken:CodeChickenCore:1.7.10-1.0.7.47:dev" compile "codechicken:CodeChickenCore:1.8-1.0.5.36:dev"
compile "codechicken:NotEnoughItems:1.7.10-1.0.5.118:dev" compile "codechicken:NotEnoughItems:1.8-1.0.5.104:dev"
} }
processResources { processResources {

View File

@@ -1,11 +0,0 @@
package cofh.api;
public class CoFHAPIProps {
private CoFHAPIProps() {
}
public static final String VERSION = "1.7.10R1.0.2";
}

View File

@@ -1,6 +1,6 @@
package cofh.api.energy; package cofh.api.energy;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraft.util.EnumFacing;
/** /**
* Implement this interface on TileEntities which should connect to energy transportation blocks. This is intended for blocks which generate energy but do not * Implement this interface on TileEntities which should connect to energy transportation blocks. This is intended for blocks which generate energy but do not
@@ -16,6 +16,6 @@ public interface IEnergyConnection {
/** /**
* Returns TRUE if the TileEntity can connect on a given side. * Returns TRUE if the TileEntity can connect on a given side.
*/ */
boolean canConnectEnergy(ForgeDirection from); boolean canConnectEnergy(EnumFacing facing);
} }

View File

@@ -1,6 +1,7 @@
package cofh.api.energy; package cofh.api.energy;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraft.util.EnumFacing;
/** /**
* Implement this interface on Tile Entities which should handle energy, generally storing it in one or more internal {@link IEnergyStorage} objects. * Implement this interface on Tile Entities which should handle energy, generally storing it in one or more internal {@link IEnergyStorage} objects.
@@ -26,7 +27,7 @@ public interface IEnergyHandler extends IEnergyProvider, IEnergyReceiver {
* @return Amount of energy that was (or would have been, if simulated) received. * @return Amount of energy that was (or would have been, if simulated) received.
*/ */
@Override @Override
int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate); int receiveEnergy(EnumFacing facing, int maxReceive, boolean simulate);
/** /**
* Remove energy from an IEnergyProvider, internal distribution is left entirely to the IEnergyProvider. * Remove energy from an IEnergyProvider, internal distribution is left entirely to the IEnergyProvider.
@@ -40,19 +41,19 @@ public interface IEnergyHandler extends IEnergyProvider, IEnergyReceiver {
* @return Amount of energy that was (or would have been, if simulated) extracted. * @return Amount of energy that was (or would have been, if simulated) extracted.
*/ */
@Override @Override
int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate); int extractEnergy(EnumFacing facing, int maxExtract, boolean simulate);
/** /**
* Returns the amount of energy currently stored. * Returns the amount of energy currently stored.
*/ */
@Override @Override
int getEnergyStored(ForgeDirection from); int getEnergyStored(EnumFacing facing);
/** /**
* Returns the maximum amount of energy that can be stored. * Returns the maximum amount of energy that can be stored.
*/ */
@Override @Override
int getMaxEnergyStored(ForgeDirection from); int getMaxEnergyStored(EnumFacing facing);
} }

View File

@@ -1,6 +1,7 @@
package cofh.api.energy; package cofh.api.energy;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraft.util.EnumFacing;
/** /**
* Implement this interface on Tile Entities which should provide energy, generally storing it in one or more internal {@link IEnergyStorage} objects. * Implement this interface on Tile Entities which should provide energy, generally storing it in one or more internal {@link IEnergyStorage} objects.
@@ -23,16 +24,16 @@ public interface IEnergyProvider extends IEnergyConnection {
* If TRUE, the extraction will only be simulated. * If TRUE, the extraction will only be simulated.
* @return Amount of energy that was (or would have been, if simulated) extracted. * @return Amount of energy that was (or would have been, if simulated) extracted.
*/ */
int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate); int extractEnergy(EnumFacing facing, int maxExtract, boolean simulate);
/** /**
* Returns the amount of energy currently stored. * Returns the amount of energy currently stored.
*/ */
int getEnergyStored(ForgeDirection from); int getEnergyStored(EnumFacing facing);
/** /**
* Returns the maximum amount of energy that can be stored. * Returns the maximum amount of energy that can be stored.
*/ */
int getMaxEnergyStored(ForgeDirection from); int getMaxEnergyStored(EnumFacing facing);
} }

View File

@@ -1,6 +1,7 @@
package cofh.api.energy; package cofh.api.energy;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraft.util.EnumFacing;
/** /**
* Implement this interface on Tile Entities which should receive energy, generally storing it in one or more internal {@link IEnergyStorage} objects. * Implement this interface on Tile Entities which should receive energy, generally storing it in one or more internal {@link IEnergyStorage} objects.
@@ -23,16 +24,16 @@ public interface IEnergyReceiver extends IEnergyConnection {
* If TRUE, the charge will only be simulated. * If TRUE, the charge will only be simulated.
* @return Amount of energy that was (or would have been, if simulated) received. * @return Amount of energy that was (or would have been, if simulated) received.
*/ */
int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate); int receiveEnergy(EnumFacing facing, int maxReceive, boolean simulate);
/** /**
* Returns the amount of energy currently stored. * Returns the amount of energy currently stored.
*/ */
int getEnergyStored(ForgeDirection from); int getEnergyStored(EnumFacing facing);
/** /**
* Returns the maximum amount of energy that can be stored. * Returns the maximum amount of energy that can be stored.
*/ */
int getMaxEnergyStored(ForgeDirection from); int getMaxEnergyStored(EnumFacing facing);
} }

View File

@@ -63,15 +63,15 @@ public class ItemEnergyContainer extends Item implements IEnergyContainerItem {
@Override @Override
public int receiveEnergy(ItemStack container, int maxReceive, boolean simulate) { public int receiveEnergy(ItemStack container, int maxReceive, boolean simulate) {
if (container.stackTagCompound == null) { if (container.getTagCompound() == null) {
container.stackTagCompound = new NBTTagCompound(); container.setTagCompound(new NBTTagCompound());
} }
int energy = container.stackTagCompound.getInteger("Energy"); int energy = container.getTagCompound().getInteger("Energy");
int energyReceived = Math.min(capacity - energy, Math.min(this.maxReceive, maxReceive)); int energyReceived = Math.min(capacity - energy, Math.min(this.maxReceive, maxReceive));
if (!simulate) { if (!simulate) {
energy += energyReceived; energy += energyReceived;
container.stackTagCompound.setInteger("Energy", energy); container.getTagCompound().setInteger("Energy", energy);
} }
return energyReceived; return energyReceived;
} }
@@ -79,15 +79,15 @@ public class ItemEnergyContainer extends Item implements IEnergyContainerItem {
@Override @Override
public int extractEnergy(ItemStack container, int maxExtract, boolean simulate) { public int extractEnergy(ItemStack container, int maxExtract, boolean simulate) {
if (container.stackTagCompound == null || !container.stackTagCompound.hasKey("Energy")) { if (container.getTagCompound() == null || !container.getTagCompound().hasKey("Energy")) {
return 0; return 0;
} }
int energy = container.stackTagCompound.getInteger("Energy"); int energy = container.getTagCompound().getInteger("Energy");
int energyExtracted = Math.min(energy, Math.min(this.maxExtract, maxExtract)); int energyExtracted = Math.min(energy, Math.min(this.maxExtract, maxExtract));
if (!simulate) { if (!simulate) {
energy -= energyExtracted; energy -= energyExtracted;
container.stackTagCompound.setInteger("Energy", energy); container.getTagCompound().setInteger("Energy", energy);
} }
return energyExtracted; return energyExtracted;
} }
@@ -95,10 +95,10 @@ public class ItemEnergyContainer extends Item implements IEnergyContainerItem {
@Override @Override
public int getEnergyStored(ItemStack container) { public int getEnergyStored(ItemStack container) {
if (container.stackTagCompound == null || !container.stackTagCompound.hasKey("Energy")) { if (container.getTagCompound() == null || !container.getTagCompound().hasKey("Energy")) {
return 0; return 0;
} }
return container.stackTagCompound.getInteger("Energy"); return container.getTagCompound().getInteger("Energy");
} }
@Override @Override

View File

@@ -2,7 +2,7 @@ package cofh.api.energy;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraft.util.EnumFacing;
/** /**
* Reference implementation of {@link IEnergyHandler}. Use/extend this or implement your own. * Reference implementation of {@link IEnergyHandler}. Use/extend this or implement your own.
@@ -30,34 +30,34 @@ public class TileEnergyHandler extends TileEntity implements IEnergyHandler {
/* IEnergyConnection */ /* IEnergyConnection */
@Override @Override
public boolean canConnectEnergy(ForgeDirection from) { public boolean canConnectEnergy(EnumFacing facing) {
return true; return true;
} }
/* IEnergyReceiver */ /* IEnergyReceiver */
@Override @Override
public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate) { public int receiveEnergy(EnumFacing facing, int maxReceive, boolean simulate) {
return storage.receiveEnergy(maxReceive, simulate); return storage.receiveEnergy(maxReceive, simulate);
} }
/* IEnergyProvider */ /* IEnergyProvider */
@Override @Override
public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate) { public int extractEnergy(EnumFacing facing, int maxExtract, boolean simulate) {
return storage.extractEnergy(maxExtract, simulate); return storage.extractEnergy(maxExtract, simulate);
} }
/* IEnergyReceiver and IEnergyProvider */ /* IEnergyReceiver and IEnergyProvider */
@Override @Override
public int getEnergyStored(ForgeDirection from) { public int getEnergyStored(EnumFacing facing) {
return storage.getEnergyStored(); return storage.getEnergyStored();
} }
@Override @Override
public int getMaxEnergyStored(ForgeDirection from) { public int getMaxEnergyStored(EnumFacing facing) {
return storage.getMaxEnergyStored(); return storage.getMaxEnergyStored();
} }

View File

@@ -1,10 +0,0 @@
/**
* (C) 2014 Team CoFH / CoFH / Cult of the Full Hub
* http://www.teamcofh.com
*/
@API(apiVersion = CoFHAPIProps.VERSION, owner = "CoFHAPI", provides = "CoFHAPI|energy")
package cofh.api.energy;
import cofh.api.CoFHAPIProps;
import cpw.mods.fml.common.API;

View File

@@ -1,9 +0,0 @@
/**
* (C) 2014 Team CoFH / CoFH / Cult of the Full Hub
* http://www.teamcofh.com
*/
@API(apiVersion = CoFHAPIProps.VERSION, owner = "CoFHLib", provides = "CoFHAPI")
package cofh.api;
import cpw.mods.fml.common.API;

View File

@@ -1,17 +1,17 @@
package storagecraft; package storagecraft;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.Mod.Instance;
import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.network.NetworkRegistry;
import cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper;
import net.minecraft.creativetab.CreativeTabs; import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventHandler;
import net.minecraftforge.fml.common.Mod.Instance;
import net.minecraftforge.fml.common.SidedProxy;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.network.NetworkRegistry;
import net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper;
import storagecraft.item.ItemStorageCell; import storagecraft.item.ItemStorageCell;
import storagecraft.proxy.CommonProxy; import storagecraft.proxy.CommonProxy;

View File

@@ -1,92 +1,87 @@
package storagecraft.block; package storagecraft.block;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.BlockPistonBase; import net.minecraft.block.BlockPistonBase;
import net.minecraft.block.material.Material; import net.minecraft.block.material.Material;
import net.minecraft.entity.EntityLivingBase; import net.minecraft.block.state.IBlockState;
import net.minecraft.item.ItemStack; import net.minecraft.entity.EntityLivingBase;
import net.minecraft.tileentity.TileEntity; import net.minecraft.item.ItemStack;
import net.minecraft.world.World; import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraft.util.BlockPos;
import storagecraft.StorageCraft; import net.minecraft.util.EnumFacing;
import storagecraft.tile.TileBase; import net.minecraft.world.World;
import storagecraft.util.InventoryUtils; import storagecraft.StorageCraft;
import storagecraft.tile.TileBase;
public abstract class BlockBase extends Block import storagecraft.util.InventoryUtils;
{
private String name; public abstract class BlockBase extends Block
{
public BlockBase(String name) private String name;
{
super(Material.rock); public BlockBase(String name)
{
this.name = name; super(Material.rock);
setCreativeTab(StorageCraft.TAB); this.name = name;
setBlockTextureName("storagecraft:" + name);
} setCreativeTab(StorageCraft.TAB);
}
@Override
public String getUnlocalizedName() @Override
{ public String getUnlocalizedName()
return "block." + StorageCraft.ID + ":" + name; {
} return "block." + StorageCraft.ID + ":" + name;
}
@Override
public boolean rotateBlock(World world, int x, int y, int z, ForgeDirection axis) @Override
{ public boolean rotateBlock(World world, BlockPos pos, EnumFacing axis)
TileEntity tile = world.getTileEntity(x, y, z); {
TileEntity tile = world.getTileEntity(pos);
if (tile instanceof TileBase)
{ if (tile instanceof TileBase)
ForgeDirection dir = ((TileBase) tile).getDirection(); {
EnumFacing dir = ((TileBase) tile).getDirection();
int newDir = dir.ordinal() + 1;
int newDir = dir.ordinal() + 1;
if (newDir > ForgeDirection.VALID_DIRECTIONS.length - 1)
{ if (newDir > EnumFacing.VALUES.length - 1)
newDir = 0; {
} newDir = 0;
}
((TileBase) tile).setDirection(ForgeDirection.getOrientation(newDir));
((TileBase) tile).setDirection(EnumFacing.getFront(newDir));
world.markBlockForUpdate(x, y, z);
world.markBlockForUpdate(pos);
return true;
} return true;
}
return false;
} return false;
}
@Override
public int damageDropped(int meta) @Override
{ public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase player, ItemStack itemStack)
return meta; {
} super.onBlockPlacedBy(world, pos, state, player, itemStack);
@Override TileEntity tile = world.getTileEntity(pos);
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entityLiving, ItemStack itemStack)
{ if (tile instanceof TileBase)
super.onBlockPlacedBy(world, x, y, z, entityLiving, itemStack); {
((TileBase) tile).setDirection(BlockPistonBase.func_180695_a(world, pos, player));
TileEntity tile = world.getTileEntity(x, y, z); }
}
if (tile instanceof TileBase)
{ @Override
((TileBase) tile).setDirection(ForgeDirection.getOrientation(BlockPistonBase.determineOrientation(world, x, y, z, entityLiving))); public void onBlockDestroyedByPlayer(World world, BlockPos pos, IBlockState state) // @TODO: Make this work all
} {
} TileEntity tile = world.getTileEntity(pos);
@Override if (tile instanceof TileBase && ((TileBase) tile).getDroppedInventory() != null)
public void onBlockPreDestroy(World world, int x, int y, int z, int meta) {
{ InventoryUtils.dropInventory(world, ((TileBase) tile).getDroppedInventory(), pos.getX(), pos.getY(), pos.getZ());
TileEntity tile = world.getTileEntity(x, y, z); }
if (tile instanceof TileBase && ((TileBase) tile).getDroppedInventory() != null) super.onBlockDestroyedByPlayer(world, pos, state);
{ }
InventoryUtils.dropInventory(world, ((TileBase) tile).getDroppedInventory(), x, y, z); }
}
super.onBlockPreDestroy(world, x, y, z, meta);
}
}

View File

@@ -1,51 +1,72 @@
package storagecraft.block; package storagecraft.block;
import java.util.List; import java.util.List;
import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.ITileEntityProvider;
import net.minecraft.creativetab.CreativeTabs; import net.minecraft.block.properties.IProperty;
import net.minecraft.item.Item; import net.minecraft.block.properties.PropertyBool;
import net.minecraft.item.ItemStack; import net.minecraft.block.state.BlockState;
import net.minecraft.tileentity.TileEntity; import net.minecraft.block.state.IBlockState;
import net.minecraft.world.World; import net.minecraft.creativetab.CreativeTabs;
import storagecraft.tile.TileCable; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
public class BlockCable extends BlockBase implements ITileEntityProvider import net.minecraft.tileentity.TileEntity;
{ import net.minecraft.world.World;
public BlockCable() import storagecraft.tile.TileCable;
{
super("cable"); public class BlockCable extends BlockBase implements ITileEntityProvider
} {
public static final PropertyBool SENSITIVE = PropertyBool.create("sensitive");
@Override
public TileEntity createNewTileEntity(World world, int meta) public BlockCable()
{ {
return new TileCable(); super("cable");
} }
@Override @Override
public void getSubBlocks(Item item, CreativeTabs tab, List subItems) protected BlockState createBlockState()
{ {
for (int i = 0; i < 2; i++) return new BlockState(this, new IProperty[]
{ {
subItems.add(new ItemStack(item, 1, i)); SENSITIVE
} });
} }
@Override @Override
public int getRenderType() public IBlockState getStateFromMeta(int meta)
{ {
return -1; return getDefaultState().withProperty(SENSITIVE, meta);
} }
@Override @Override
public boolean isOpaqueCube() public int getMetaFromState(IBlockState state)
{ {
return false; return ((Boolean) state.getValue(SENSITIVE)) ? 0 : 1;
} }
@Override @Override
public boolean renderAsNormalBlock() public TileEntity createNewTileEntity(World world, int meta)
{ {
return false; return new TileCable();
} }
}
@Override
public void getSubBlocks(Item item, CreativeTabs tab, List subItems)
{
for (int i = 0; i < 2; i++)
{
subItems.add(new ItemStack(item, 1, i));
}
}
@Override
public int getRenderType()
{
return -1;
}
@Override
public boolean isOpaqueCube()
{
return false;
}
}

View File

@@ -1,73 +1,36 @@
package storagecraft.block; package storagecraft.block;
import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockPos;
import net.minecraft.util.IIcon; import net.minecraft.util.EnumFacing;
import net.minecraft.world.IBlockAccess; import net.minecraft.world.World;
import net.minecraft.world.World; import storagecraft.StorageCraft;
import storagecraft.StorageCraft; import storagecraft.StorageCraftGUI;
import storagecraft.StorageCraftGUI; import storagecraft.tile.TileConstructor;
import storagecraft.tile.TileConstructor;
public class BlockConstructor extends BlockMachine
public class BlockConstructor extends BlockBase implements ITileEntityProvider {
{ public BlockConstructor()
private IIcon sideIcon; {
private IIcon connectedIcon; super("constructor");
private IIcon disconnectedIcon; }
public BlockConstructor() @Override
{ public TileEntity createNewTileEntity(World world, int meta)
super("constructor"); {
} return new TileConstructor();
}
@Override
public TileEntity createNewTileEntity(World world, int meta) @Override
{ public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ)
return new TileConstructor(); {
} if (!world.isRemote)
{
@Override player.openGui(StorageCraft.INSTANCE, StorageCraftGUI.CONSTRUCTOR, world, pos.getX(), pos.getY(), pos.getZ());
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) }
{
if (!world.isRemote) return true;
{ }
player.openGui(StorageCraft.INSTANCE, StorageCraftGUI.CONSTRUCTOR, world, x, y, z); }
}
return true;
}
@Override
public void registerBlockIcons(IIconRegister register)
{
connectedIcon = register.registerIcon("storagecraft:constructorConnected");
disconnectedIcon = register.registerIcon("storagecraft:constructorDisconnected");
sideIcon = register.registerIcon("storagecraft:side");
}
@Override
public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side)
{
TileConstructor tile = (TileConstructor) world.getTileEntity(x, y, z);
if (side == tile.getDirection().ordinal())
{
return tile.isConnected() ? connectedIcon : disconnectedIcon;
}
return sideIcon;
}
@Override
public IIcon getIcon(int side, int damage)
{
if (side == 3)
{
return disconnectedIcon;
}
return sideIcon;
}
}

View File

@@ -1,97 +1,85 @@
package storagecraft.block; package storagecraft.block;
import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.ITileEntityProvider;
import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.block.properties.IProperty;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.block.properties.PropertyInteger;
import net.minecraft.tileentity.TileEntity; import net.minecraft.block.state.BlockState;
import net.minecraft.util.IIcon; import net.minecraft.block.state.IBlockState;
import net.minecraft.world.IBlockAccess; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.world.World; import net.minecraft.tileentity.TileEntity;
import storagecraft.StorageCraft; import net.minecraft.util.BlockPos;
import storagecraft.StorageCraftGUI; import net.minecraft.util.EnumFacing;
import storagecraft.tile.TileController; import net.minecraft.world.World;
import storagecraft.StorageCraft;
public class BlockController extends BlockBase implements ITileEntityProvider import storagecraft.StorageCraftGUI;
{ import storagecraft.tile.TileController;
private IIcon sideIcon;
private IIcon[] icons = new IIcon[9]; public class BlockController extends BlockBase implements ITileEntityProvider
{
public BlockController() public static final PropertyInteger ENERGY = PropertyInteger.create("energy", 0, 15);
{
super("controller"); public BlockController()
} {
super("controller");
@Override }
public TileEntity createNewTileEntity(World world, int meta)
{ @Override
return new TileController(); protected BlockState createBlockState()
} {
return new BlockState(this, new IProperty[]
@Override {
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) ENERGY
{ });
if (!world.isRemote) }
{
player.openGui(StorageCraft.INSTANCE, StorageCraftGUI.CONTROLLER, world, x, y, z); @Override
} public IBlockState getStateFromMeta(int meta)
{
return true; return getDefaultState().withProperty(ENERGY, meta);
} }
@Override @Override
public void onBlockPreDestroy(World world, int x, int y, int z, int meta) public int getMetaFromState(IBlockState state)
{ {
((TileController) world.getTileEntity(x, y, z)).onDestroyed(); return ((Integer) state.getValue(ENERGY));
}
super.onBlockPreDestroy(world, x, y, z, meta);
} @Override
public TileEntity createNewTileEntity(World world, int meta)
@Override {
public boolean hasComparatorInputOverride() return new TileController();
{ }
return true;
} @Override
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ)
@Override {
public int getComparatorInputOverride(World world, int x, int y, int z, int side) if (!world.isRemote)
{ {
TileController tile = (TileController) world.getTileEntity(x, y, z); player.openGui(StorageCraft.INSTANCE, StorageCraftGUI.CONTROLLER, world, pos.getX(), pos.getY(), pos.getZ());
}
return tile.getEnergyScaled(15);
} return true;
}
@Override
public void registerBlockIcons(IIconRegister register) @Override
{ public void onBlockDestroyedByPlayer(World world, BlockPos pos, IBlockState state) // @TODO: What about explosions?
for (int i = 0; i <= 8; ++i) {
{ ((TileController) world.getTileEntity(pos)).onDestroyed();
icons[i] = register.registerIcon("storagecraft:controller" + i);
} super.onBlockDestroyedByPlayer(world, pos, state);
}
sideIcon = register.registerIcon("storagecraft:side");
} @Override
public boolean hasComparatorInputOverride()
@Override {
public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) return true;
{ }
TileController tile = (TileController) world.getTileEntity(x, y, z);
@Override
if (side == tile.getDirection().ordinal()) public int getComparatorInputOverride(World world, BlockPos pos)
{ {
return icons[tile.getEnergyScaled(8)]; TileController tile = (TileController) world.getTileEntity(pos);
}
return tile.getEnergyScaled(15);
return sideIcon; }
} }
@Override
public IIcon getIcon(int side, int meta)
{
if (side == 3)
{
return icons[0];
}
return sideIcon;
}
}

View File

@@ -1,73 +1,36 @@
package storagecraft.block; package storagecraft.block;
import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockPos;
import net.minecraft.util.IIcon; import net.minecraft.util.EnumFacing;
import net.minecraft.world.IBlockAccess; import net.minecraft.world.World;
import net.minecraft.world.World; import storagecraft.StorageCraft;
import storagecraft.StorageCraft; import storagecraft.StorageCraftGUI;
import storagecraft.StorageCraftGUI; import storagecraft.tile.TileDestructor;
import storagecraft.tile.TileDestructor;
public class BlockDestructor extends BlockMachine
public class BlockDestructor extends BlockBase implements ITileEntityProvider {
{ public BlockDestructor()
private IIcon sideIcon; {
private IIcon connectedIcon; super("destructor");
private IIcon disconnectedIcon; }
public BlockDestructor() @Override
{ public TileEntity createNewTileEntity(World world, int meta)
super("destructor"); {
} return new TileDestructor();
}
@Override
public TileEntity createNewTileEntity(World world, int meta) @Override
{ public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ)
return new TileDestructor(); {
} if (!world.isRemote)
{
@Override player.openGui(StorageCraft.INSTANCE, StorageCraftGUI.DESTRUCTOR, world, pos.getX(), pos.getY(), pos.getZ());
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) }
{
if (!world.isRemote) return true;
{ }
player.openGui(StorageCraft.INSTANCE, StorageCraftGUI.DESTRUCTOR, world, x, y, z); }
}
return true;
}
@Override
public void registerBlockIcons(IIconRegister register)
{
connectedIcon = register.registerIcon("storagecraft:destructorConnected");
disconnectedIcon = register.registerIcon("storagecraft:destructorDisconnected");
sideIcon = register.registerIcon("storagecraft:side");
}
@Override
public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side)
{
TileDestructor tile = (TileDestructor) world.getTileEntity(x, y, z);
if (side == tile.getDirection().ordinal())
{
return tile.isConnected() ? connectedIcon : disconnectedIcon;
}
return sideIcon;
}
@Override
public IIcon getIcon(int side, int damage)
{
if (side == 3)
{
return disconnectedIcon;
}
return sideIcon;
}
}

View File

@@ -1,93 +1,37 @@
package storagecraft.block; package storagecraft.block;
import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockPos;
import net.minecraft.util.IIcon; import net.minecraft.util.EnumFacing;
import net.minecraft.world.IBlockAccess; import net.minecraft.world.World;
import net.minecraft.world.World; import storagecraft.StorageCraft;
import storagecraft.StorageCraft; import storagecraft.StorageCraftGUI;
import storagecraft.StorageCraftGUI; import storagecraft.tile.TileDetector;
import storagecraft.tile.TileDetector;
// @TODO: This too other textures
public class BlockDetector extends BlockBase implements ITileEntityProvider public class BlockDetector extends BlockMachine
{ {
private IIcon poweredIcon; public BlockDetector()
private IIcon unpoweredIcon; {
private IIcon sideIcon; super("detector");
}
public BlockDetector()
{ @Override
super("detector"); public TileEntity createNewTileEntity(World world, int meta)
} {
return new TileDetector();
@Override }
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ)
{ @Override
if (!world.isRemote) public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ)
{ {
player.openGui(StorageCraft.INSTANCE, StorageCraftGUI.DETECTOR, world, x, y, z); if (!world.isRemote)
} {
player.openGui(StorageCraft.INSTANCE, StorageCraftGUI.DETECTOR, world, pos.getX(), pos.getY(), pos.getZ());
return true; }
}
return true;
@Override }
public TileEntity createNewTileEntity(World world, int meta) }
{
return new TileDetector();
}
@Override
public int isProvidingWeakPower(IBlockAccess world, int x, int y, int z, int side)
{
return isProvidingStrongPower(world, x, y, z, side);
}
@Override
public int isProvidingStrongPower(IBlockAccess world, int x, int y, int z, int side)
{
TileDetector detector = (TileDetector) world.getTileEntity(x, y, z);
return detector.providesPower() ? 15 : 0;
}
@Override
public boolean canProvidePower()
{
return true;
}
@Override
public void registerBlockIcons(IIconRegister register)
{
poweredIcon = register.registerIcon("storagecraft:detectorPowered");
unpoweredIcon = register.registerIcon("storagecraft:detectorUnpowered");
sideIcon = register.registerIcon("storagecraft:side");
}
@Override
public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side)
{
if (side == 0 || side == 1)
{
return sideIcon;
}
TileDetector tile = (TileDetector) world.getTileEntity(x, y, z);
return tile.providesPower() ? poweredIcon : unpoweredIcon;
}
@Override
public IIcon getIcon(int side, int meta)
{
if (side == 0 || side == 1)
{
return sideIcon;
}
return unpoweredIcon;
}
}

View File

@@ -1,71 +1,36 @@
package storagecraft.block; package storagecraft.block;
import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockPos;
import net.minecraft.util.IIcon; import net.minecraft.util.EnumFacing;
import net.minecraft.world.IBlockAccess; import net.minecraft.world.World;
import net.minecraft.world.World; import storagecraft.StorageCraft;
import storagecraft.StorageCraft; import storagecraft.StorageCraftGUI;
import storagecraft.StorageCraftGUI; import storagecraft.tile.TileDrive;
import storagecraft.tile.TileDrive;
public class BlockDrive extends BlockMachine
public class BlockDrive extends BlockBase implements ITileEntityProvider {
{ public BlockDrive()
private IIcon frontIcon; {
private IIcon sideIcon; super("drive");
}
public BlockDrive()
{ @Override
super("drive"); public TileEntity createNewTileEntity(World world, int meta)
} {
return new TileDrive();
@Override }
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ)
{ @Override
if (!world.isRemote) public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ)
{ {
player.openGui(StorageCraft.INSTANCE, StorageCraftGUI.DRIVE, world, x, y, z); if (!world.isRemote)
} {
player.openGui(StorageCraft.INSTANCE, StorageCraftGUI.DRIVE, world, pos.getX(), pos.getY(), pos.getZ());
return true; }
}
return true;
@Override }
public TileEntity createNewTileEntity(World world, int meta) }
{
return new TileDrive();
}
@Override
public void registerBlockIcons(IIconRegister register)
{
frontIcon = register.registerIcon("storagecraft:drive");
sideIcon = register.registerIcon("storagecraft:side");
}
@Override
public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side)
{
TileDrive tile = (TileDrive) world.getTileEntity(x, y, z);
if (side == tile.getDirection().ordinal())
{
return frontIcon;
}
return sideIcon;
}
@Override
public IIcon getIcon(int side, int meta)
{
if (side == 3)
{
return frontIcon;
}
return sideIcon;
}
}

View File

@@ -1,71 +1,36 @@
package storagecraft.block; package storagecraft.block;
import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockPos;
import net.minecraft.util.IIcon; import net.minecraft.util.EnumFacing;
import net.minecraft.world.IBlockAccess; import net.minecraft.world.World;
import net.minecraft.world.World; import storagecraft.StorageCraft;
import storagecraft.StorageCraft; import storagecraft.StorageCraftGUI;
import storagecraft.StorageCraftGUI; import storagecraft.tile.TileExporter;
import storagecraft.tile.TileExporter;
public class BlockExporter extends BlockMachine
public class BlockExporter extends BlockBase implements ITileEntityProvider {
{ public BlockExporter()
private IIcon frontIcon; {
private IIcon sideIcon; super("exporter");
}
public BlockExporter()
{ @Override
super("exporter"); public TileEntity createNewTileEntity(World world, int meta)
} {
return new TileExporter();
@Override }
public TileEntity createNewTileEntity(World world, int meta)
{ @Override
return new TileExporter(); public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ)
} {
if (!world.isRemote)
@Override {
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) player.openGui(StorageCraft.INSTANCE, StorageCraftGUI.EXPORTER, world, pos.getX(), pos.getY(), pos.getZ());
{ }
if (!world.isRemote)
{ return true;
player.openGui(StorageCraft.INSTANCE, StorageCraftGUI.EXPORTER, world, x, y, z); }
} }
return true;
}
@Override
public void registerBlockIcons(IIconRegister register)
{
frontIcon = register.registerIcon("storagecraft:exporter");
sideIcon = register.registerIcon("storagecraft:side");
}
@Override
public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side)
{
TileExporter tile = (TileExporter) world.getTileEntity(x, y, z);
if (side == tile.getDirection().ordinal())
{
return frontIcon;
}
return sideIcon;
}
@Override
public IIcon getIcon(int side, int meta)
{
if (side == 3)
{
return frontIcon;
}
return sideIcon;
}
}

View File

@@ -1,71 +1,36 @@
package storagecraft.block; package storagecraft.block;
import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockPos;
import net.minecraft.util.IIcon; import net.minecraft.util.EnumFacing;
import net.minecraft.world.IBlockAccess; import net.minecraft.world.World;
import net.minecraft.world.World; import storagecraft.StorageCraft;
import storagecraft.StorageCraft; import storagecraft.StorageCraftGUI;
import storagecraft.StorageCraftGUI; import storagecraft.tile.TileExternalStorage;
import storagecraft.tile.TileExternalStorage;
public class BlockExternalStorage extends BlockMachine
public class BlockExternalStorage extends BlockBase implements ITileEntityProvider {
{ public BlockExternalStorage()
private IIcon frontIcon; {
private IIcon sideIcon; super("externalStorage");
}
public BlockExternalStorage()
{ @Override
super("externalStorage"); public TileEntity createNewTileEntity(World world, int meta)
} {
return new TileExternalStorage();
@Override }
public TileEntity createNewTileEntity(World world, int meta)
{ @Override
return new TileExternalStorage(); public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ)
} {
if (!world.isRemote)
@Override {
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) player.openGui(StorageCraft.INSTANCE, StorageCraftGUI.EXTERNAL_STORAGE, world, pos.getX(), pos.getY(), pos.getZ());
{ }
if (!world.isRemote)
{ return true;
player.openGui(StorageCraft.INSTANCE, StorageCraftGUI.EXTERNAL_STORAGE, world, x, y, z); }
} }
return true;
}
@Override
public void registerBlockIcons(IIconRegister register)
{
frontIcon = register.registerIcon("storagecraft:externalStorage");
sideIcon = register.registerIcon("storagecraft:side");
}
@Override
public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side)
{
TileExternalStorage tile = (TileExternalStorage) world.getTileEntity(x, y, z);
if (side == tile.getDirection().ordinal())
{
return frontIcon;
}
return sideIcon;
}
@Override
public IIcon getIcon(int side, int meta)
{
if (side == 3)
{
return frontIcon;
}
return sideIcon;
}
}

View File

@@ -1,86 +1,36 @@
package storagecraft.block; package storagecraft.block;
import java.util.List; import net.minecraft.block.state.IBlockState;
import net.minecraft.block.ITileEntityProvider; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.tileentity.TileEntity;
import net.minecraft.creativetab.CreativeTabs; import net.minecraft.util.BlockPos;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.EnumFacing;
import net.minecraft.item.Item; import net.minecraft.world.World;
import net.minecraft.item.ItemStack; import storagecraft.StorageCraft;
import net.minecraft.tileentity.TileEntity; import storagecraft.StorageCraftGUI;
import net.minecraft.util.IIcon; import storagecraft.tile.TileGrid;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World; public class BlockGrid extends BlockMachine
import storagecraft.StorageCraft; {
import storagecraft.StorageCraftGUI; public BlockGrid()
import storagecraft.tile.TileGrid; {
super("grid");
public class BlockGrid extends BlockBase implements ITileEntityProvider }
{
private IIcon sideIcon; @Override
private IIcon connectedIcon; public TileEntity createNewTileEntity(World world, int meta)
private IIcon disconnectedIcon; {
return new TileGrid();
public BlockGrid() }
{
super("grid"); @Override
} public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ)
{
@Override if (!world.isRemote)
public TileEntity createNewTileEntity(World world, int meta) {
{ player.openGui(StorageCraft.INSTANCE, StorageCraftGUI.GRID, world, pos.getX(), pos.getY(), pos.getZ());
return new TileGrid(); }
}
return true;
@Override }
public void getSubBlocks(Item item, CreativeTabs tab, List subItems) }
{
for (int i = 0; i < 2; i++)
{
subItems.add(new ItemStack(item, 1, i));
}
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ)
{
if (!world.isRemote)
{
player.openGui(StorageCraft.INSTANCE, StorageCraftGUI.GRID, world, x, y, z);
}
return true;
}
@Override
public void registerBlockIcons(IIconRegister register)
{
connectedIcon = register.registerIcon("storagecraft:gridConnected");
disconnectedIcon = register.registerIcon("storagecraft:gridDisconnected");
sideIcon = register.registerIcon("storagecraft:side");
}
@Override
public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side)
{
TileGrid tile = (TileGrid) world.getTileEntity(x, y, z);
if (side == tile.getDirection().ordinal())
{
return tile.isConnected() ? connectedIcon : disconnectedIcon;
}
return sideIcon;
}
@Override
public IIcon getIcon(int side, int damage)
{
if (side == 3)
{
return disconnectedIcon;
}
return sideIcon;
}
}

View File

@@ -1,71 +1,36 @@
package storagecraft.block; package storagecraft.block;
import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockPos;
import net.minecraft.util.IIcon; import net.minecraft.util.EnumFacing;
import net.minecraft.world.IBlockAccess; import net.minecraft.world.World;
import net.minecraft.world.World; import storagecraft.StorageCraft;
import storagecraft.StorageCraft; import storagecraft.StorageCraftGUI;
import storagecraft.StorageCraftGUI; import storagecraft.tile.TileImporter;
import storagecraft.tile.TileImporter;
public class BlockImporter extends BlockMachine
public class BlockImporter extends BlockBase implements ITileEntityProvider {
{ public BlockImporter()
private IIcon frontIcon; {
private IIcon sideIcon; super("importer");
}
public BlockImporter()
{ @Override
super("importer"); public TileEntity createNewTileEntity(World world, int meta)
} {
return new TileImporter();
@Override }
public TileEntity createNewTileEntity(World world, int meta)
{ @Override
return new TileImporter(); public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ)
} {
if (!world.isRemote)
@Override {
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) player.openGui(StorageCraft.INSTANCE, StorageCraftGUI.IMPORTER, world, pos.getX(), pos.getY(), pos.getZ());
{ }
if (!world.isRemote)
{ return true;
player.openGui(StorageCraft.INSTANCE, StorageCraftGUI.IMPORTER, world, x, y, z); }
} }
return true;
}
@Override
public void registerBlockIcons(IIconRegister register)
{
frontIcon = register.registerIcon("storagecraft:importer");
sideIcon = register.registerIcon("storagecraft:side");
}
@Override
public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side)
{
TileImporter tile = (TileImporter) world.getTileEntity(x, y, z);
if (side == tile.getDirection().ordinal())
{
return frontIcon;
}
return sideIcon;
}
@Override
public IIcon getIcon(int side, int meta)
{
if (side == 3)
{
return frontIcon;
}
return sideIcon;
}
}

View File

@@ -0,0 +1,38 @@
package storagecraft.block;
import net.minecraft.block.ITileEntityProvider;
import net.minecraft.block.properties.IProperty;
import net.minecraft.block.properties.PropertyBool;
import net.minecraft.block.state.BlockState;
import net.minecraft.block.state.IBlockState;
public abstract class BlockMachine extends BlockBase implements ITileEntityProvider
{
public static final PropertyBool CONNECTED = PropertyBool.create("connected");
public BlockMachine(String name)
{
super(name);
}
@Override
protected BlockState createBlockState()
{
return new BlockState(this, new IProperty[]
{
CONNECTED
});
}
@Override
public IBlockState getStateFromMeta(int meta)
{
return getDefaultState().withProperty(CONNECTED, meta);
}
@Override
public int getMetaFromState(IBlockState state)
{
return ((Boolean) state.getValue(CONNECTED)) ? 0 : 1;
}
}

View File

@@ -1,33 +1,9 @@
package storagecraft.block; package storagecraft.block;
import net.minecraft.client.renderer.texture.IIconRegister; public class BlockMachineCasing extends BlockBase
import net.minecraft.util.IIcon; {
import net.minecraft.world.IBlockAccess; public BlockMachineCasing()
{
public class BlockMachineCasing extends BlockBase super("machineCasing");
{ }
private IIcon icon; }
public BlockMachineCasing()
{
super("machineCasing");
}
@Override
public void registerBlockIcons(IIconRegister register)
{
icon = register.registerIcon("storagecraft:side");
}
@Override
public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side)
{
return icon;
}
@Override
public IIcon getIcon(int side, int meta)
{
return icon;
}
}

View File

@@ -1,73 +1,36 @@
package storagecraft.block; package storagecraft.block;
import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockPos;
import net.minecraft.util.IIcon; import net.minecraft.util.EnumFacing;
import net.minecraft.world.IBlockAccess; import net.minecraft.world.World;
import net.minecraft.world.World; import storagecraft.StorageCraft;
import storagecraft.StorageCraft; import storagecraft.StorageCraftGUI;
import storagecraft.StorageCraftGUI; import storagecraft.tile.TileSolderer;
import storagecraft.tile.TileSolderer;
public class BlockSolderer extends BlockMachine
public class BlockSolderer extends BlockBase implements ITileEntityProvider {
{ public BlockSolderer()
private IIcon sideIcon; {
private IIcon connectedIcon; super("solderer");
private IIcon disconnectedIcon; }
public BlockSolderer() @Override
{ public TileEntity createNewTileEntity(World world, int meta)
super("solderer"); {
} return new TileSolderer();
}
@Override
public TileEntity createNewTileEntity(World world, int meta) @Override
{ public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ)
return new TileSolderer(); {
} if (!world.isRemote)
{
@Override player.openGui(StorageCraft.INSTANCE, StorageCraftGUI.SOLDERER, world, pos.getX(), pos.getY(), pos.getZ());
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) }
{
if (!world.isRemote) return true;
{ }
player.openGui(StorageCraft.INSTANCE, StorageCraftGUI.SOLDERER, world, x, y, z); }
}
return true;
}
@Override
public void registerBlockIcons(IIconRegister register)
{
connectedIcon = register.registerIcon("storagecraft:soldererConnected");
disconnectedIcon = register.registerIcon("storagecraft:soldererDisconnected");
sideIcon = register.registerIcon("storagecraft:side");
}
@Override
public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side)
{
TileSolderer tile = (TileSolderer) world.getTileEntity(x, y, z);
if (side == tile.getDirection().ordinal())
{
return tile.isConnected() ? connectedIcon : disconnectedIcon;
}
return sideIcon;
}
@Override
public IIcon getIcon(int side, int damage)
{
if (side == 3)
{
return disconnectedIcon;
}
return sideIcon;
}
}

View File

@@ -1,75 +1,37 @@
package storagecraft.block; package storagecraft.block;
import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.state.IBlockState;
import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockPos;
import net.minecraft.util.IIcon; import net.minecraft.util.EnumFacing;
import net.minecraft.world.IBlockAccess; import net.minecraft.world.World;
import net.minecraft.world.World; import storagecraft.StorageCraft;
import storagecraft.StorageCraft; import storagecraft.StorageCraftGUI;
import storagecraft.StorageCraftGUI; import storagecraft.tile.TileWirelessTransmitter;
import storagecraft.tile.TileWirelessTransmitter;
// @TODO: This texture behaves differently
public class BlockWirelessTransmitter extends BlockBase implements ITileEntityProvider public class BlockWirelessTransmitter extends BlockMachine
{ {
private IIcon icon; public BlockWirelessTransmitter()
private IIcon workingIcon; {
private IIcon sideIcon; super("wirelessTransmitter");
private IIcon workingSideIcon; }
public BlockWirelessTransmitter() @Override
{ public TileEntity createNewTileEntity(World world, int meta)
super("wirelessTransmitter"); {
} return new TileWirelessTransmitter();
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) @Override
{ public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ)
if (!world.isRemote) {
{ if (!world.isRemote)
player.openGui(StorageCraft.INSTANCE, StorageCraftGUI.WIRELESS_TRANSMITTER, world, x, y, z); {
} player.openGui(StorageCraft.INSTANCE, StorageCraftGUI.WIRELESS_TRANSMITTER, world, pos.getX(), pos.getY(), pos.getZ());
}
return true;
} return true;
}
@Override }
public TileEntity createNewTileEntity(World world, int meta)
{
return new TileWirelessTransmitter();
}
@Override
public void registerBlockIcons(IIconRegister register)
{
icon = register.registerIcon("storagecraft:wirelessTransmitter");
workingIcon = register.registerIcon("storagecraft:wirelessTransmitterWorking");
sideIcon = register.registerIcon("storagecraft:wirelessTransmitterSide");
workingSideIcon = register.registerIcon("storagecraft:wirelessTransmitterSideWorking");
}
@Override
public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side)
{
TileWirelessTransmitter tile = (TileWirelessTransmitter) world.getTileEntity(x, y, z);
if (side == tile.getDirection().ordinal())
{
return tile.isWorking() ? workingIcon : icon;
}
return tile.isWorking() ? workingSideIcon : sideIcon;
}
@Override
public IIcon getIcon(int side, int damage)
{
if (side == 3)
{
return icon;
}
return sideIcon;
}
}

View File

@@ -1,39 +1,40 @@
package storagecraft.container.slot; package storagecraft.container.slot;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory; import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.SlotCrafting; import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.item.ItemStack; import net.minecraft.inventory.SlotCrafting;
import storagecraft.tile.TileGrid; import net.minecraft.item.ItemStack;
import storagecraft.tile.TileGrid;
public class SlotGridCraftingResult extends SlotCrafting
{ public class SlotGridCraftingResult extends SlotCrafting
private IInventory craftingMatrix; {
private TileGrid grid; private IInventory craftingMatrix;
private TileGrid grid;
public SlotGridCraftingResult(EntityPlayer player, IInventory craftingMatrix, IInventory craftingResult, TileGrid grid, int id, int x, int y)
{ public SlotGridCraftingResult(EntityPlayer player, InventoryCrafting craftingMatrix, IInventory craftingResult, TileGrid grid, int id, int x, int y)
super(player, craftingMatrix, craftingResult, id, x, y); {
super(player, craftingMatrix, craftingResult, id, x, y);
this.craftingMatrix = craftingMatrix;
this.grid = grid; this.craftingMatrix = craftingMatrix;
} this.grid = grid;
}
@Override
public void onPickupFromSlot(EntityPlayer player, ItemStack stack) @Override
{ public void onPickupFromSlot(EntityPlayer player, ItemStack stack)
ItemStack[] matrixSlots = new ItemStack[craftingMatrix.getSizeInventory()]; {
ItemStack[] matrixSlots = new ItemStack[craftingMatrix.getSizeInventory()];
for (int i = 0; i < craftingMatrix.getSizeInventory(); ++i)
{ for (int i = 0; i < craftingMatrix.getSizeInventory(); ++i)
if (craftingMatrix.getStackInSlot(i) != null) {
{ if (craftingMatrix.getStackInSlot(i) != null)
matrixSlots[i] = craftingMatrix.getStackInSlot(i).copy(); {
} matrixSlots[i] = craftingMatrix.getStackInSlot(i).copy();
} }
}
super.onPickupFromSlot(player, stack);
super.onPickupFromSlot(player, stack);
grid.onCrafted(matrixSlots);
} grid.onCrafted(matrixSlots);
} }
}

View File

@@ -1,306 +1,305 @@
package storagecraft.gui; package storagecraft.gui;
import com.google.common.base.Joiner; import com.google.common.base.Joiner;
import java.util.ArrayList; import java.io.IOException;
import java.util.List; import java.util.ArrayList;
import net.minecraft.client.gui.GuiButton; import java.util.List;
import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.inventory.Container; import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.item.ItemStack; import net.minecraft.inventory.Container;
import net.minecraft.util.EnumChatFormatting; import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.StatCollector; import net.minecraft.util.ResourceLocation;
import org.lwjgl.opengl.GL11; import net.minecraft.util.StatCollector;
import org.lwjgl.opengl.GL12; import org.lwjgl.opengl.GL11;
import storagecraft.StorageCraft; import org.lwjgl.opengl.GL12;
import storagecraft.gui.sidebutton.SideButton; import storagecraft.StorageCraft;
import storagecraft.gui.sidebutton.SideButton;
public abstract class GuiBase extends GuiContainer
{ public abstract class GuiBase extends GuiContainer
public static final int SIDE_BUTTON_WIDTH = 20; {
public static final int SIDE_BUTTON_HEIGHT = 20; public static final int SIDE_BUTTON_WIDTH = 20;
public static final int SIDE_BUTTON_HEIGHT = 20;
private List<SideButton> sideButtons = new ArrayList<SideButton>();
private List<SideButton> sideButtons = new ArrayList<SideButton>();
private int lastButtonId = 0;
private int lastSideButtonY = 6; private int lastButtonId = 0;
private int lastSideButtonY = 6;
public GuiBase(Container container, int w, int h)
{ public GuiBase(Container container, int w, int h)
super(container); {
super(container);
this.xSize = w;
this.ySize = h; this.xSize = w;
} this.ySize = h;
}
@Override
public void initGui() @Override
{ public void initGui()
super.initGui(); {
super.initGui();
sideButtons.clear();
sideButtons.clear();
lastButtonId = 0;
lastSideButtonY = 6; lastButtonId = 0;
lastSideButtonY = 6;
init(guiLeft, guiTop);
} init(guiLeft, guiTop);
}
@Override
public void updateScreen() @Override
{ public void updateScreen()
super.updateScreen(); {
super.updateScreen();
update(guiLeft, guiTop);
} update(guiLeft, guiTop);
}
@Override
protected void drawGuiContainerBackgroundLayer(float renderPartialTicks, int mouseX, int mouseY) @Override
{ protected void drawGuiContainerBackgroundLayer(float renderPartialTicks, int mouseX, int mouseY)
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
drawBackground(guiLeft, guiTop, mouseX, mouseY);
} drawBackground(guiLeft, guiTop, mouseX, mouseY);
}
@Override
protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) @Override
{ protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY)
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
mouseX -= guiLeft;
mouseY -= guiTop; mouseX -= guiLeft;
mouseY -= guiTop;
for (SideButton sideButton : sideButtons)
{ for (SideButton sideButton : sideButtons)
sideButton.draw(this, sideButton.getX() + 2, sideButton.getY() + 1); {
sideButton.draw(this, sideButton.getX() + 2, sideButton.getY() + 1);
if (inBounds(sideButton.getX(), sideButton.getY(), SIDE_BUTTON_WIDTH, SIDE_BUTTON_HEIGHT, mouseX, mouseY))
{ if (inBounds(sideButton.getX(), sideButton.getY(), SIDE_BUTTON_WIDTH, SIDE_BUTTON_HEIGHT, mouseX, mouseY))
drawTooltip(mouseX, mouseY, sideButton.getTooltip(this)); {
} drawTooltip(mouseX, mouseY, sideButton.getTooltip(this));
} }
}
drawForeground(mouseX, mouseY);
} drawForeground(mouseX, mouseY);
}
@Override
protected void actionPerformed(GuiButton button) @Override
{ protected void actionPerformed(GuiButton button) throws IOException
super.actionPerformed(button); {
super.actionPerformed(button);
for (SideButton sideButton : sideButtons)
{ for (SideButton sideButton : sideButtons)
if (sideButton.getId() == button.id) {
{ if (sideButton.getId() == button.id)
sideButton.actionPerformed(); {
} sideButton.actionPerformed();
} }
} }
}
public GuiButton addButton(int x, int y, int w, int h)
{ public GuiButton addButton(int x, int y, int w, int h)
return addButton(x, y, w, h, ""); {
} return addButton(x, y, w, h, "");
}
public GuiButton addButton(int x, int y, int w, int h, String text)
{ public GuiButton addButton(int x, int y, int w, int h, String text)
GuiButton button = new GuiButton(lastButtonId++, x, y, w, h, text); {
GuiButton button = new GuiButton(lastButtonId++, x, y, w, h, text);
buttonList.add(button);
buttonList.add(button);
return button;
} return button;
}
public void addSideButton(SideButton button)
{ public void addSideButton(SideButton button)
button.setX(xSize - 1); {
button.setY(lastSideButtonY); button.setX(xSize - 1);
button.setId(addButton(guiLeft + button.getX(), guiTop + button.getY(), SIDE_BUTTON_WIDTH, SIDE_BUTTON_HEIGHT).id); button.setY(lastSideButtonY);
button.setId(addButton(guiLeft + button.getX(), guiTop + button.getY(), SIDE_BUTTON_WIDTH, SIDE_BUTTON_HEIGHT).id);
lastSideButtonY += SIDE_BUTTON_HEIGHT + 4;
lastSideButtonY += SIDE_BUTTON_HEIGHT + 4;
sideButtons.add(button);
} sideButtons.add(button);
}
public boolean inBounds(int x, int y, int w, int h, int ox, int oy)
{ public boolean inBounds(int x, int y, int w, int h, int ox, int oy)
return ox >= x && ox <= x + w && oy >= y && oy <= y + h; {
} return ox >= x && ox <= x + w && oy >= y && oy <= y + h;
}
public void bindTexture(String file)
{ public void bindTexture(String file)
bindTexture(StorageCraft.ID, file); {
} bindTexture(StorageCraft.ID, file);
}
public void bindTexture(String base, String file)
{ public void bindTexture(String base, String file)
mc.getTextureManager().bindTexture(new ResourceLocation(base, "textures/" + file)); {
} mc.getTextureManager().bindTexture(new ResourceLocation(base, "textures/" + file));
}
public void drawItem(int x, int y, ItemStack stack)
{ public void drawItem(int x, int y, ItemStack stack)
drawItem(x, y, stack, false); {
} drawItem(x, y, stack, false);
}
public void drawItem(int x, int y, ItemStack stack, boolean withOverlay)
{ public void drawItem(int x, int y, ItemStack stack, boolean withOverlay)
zLevel = 100; {
itemRender.zLevel = 100; zLevel = 100;
itemRender.zLevel = 100;
GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS);
GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS);
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glEnable(GL12.GL_RESCALE_NORMAL); GL11.glEnable(GL11.GL_LIGHTING);
GL11.glEnable(GL11.GL_DEPTH_TEST); GL11.glEnable(GL12.GL_RESCALE_NORMAL);
GL11.glEnable(GL11.GL_DEPTH_TEST);
RenderHelper.enableGUIStandardItemLighting();
RenderHelper.enableGUIStandardItemLighting();
itemRender.renderItemAndEffectIntoGUI(fontRendererObj, mc.renderEngine, stack, x, y);
// @TODO: itemRender.renderItemAndEffectIntoGUI(fontRendererObj, mc.renderEngine, stack, x, y);
if (withOverlay) if (withOverlay)
{ {
itemRender.renderItemOverlayIntoGUI(fontRendererObj, mc.renderEngine, stack, x, y); // @TODO: itemRender.renderItemOverlayIntoGUI(fontRendererObj, mc.renderEngine, stack, x, y);
} }
GL11.glPopAttrib(); GL11.glPopAttrib();
itemRender.zLevel = 0; itemRender.zLevel = 0;
zLevel = 0; zLevel = 0;
} }
public void drawString(int x, int y, String message) public void drawString(int x, int y, String message)
{ {
drawString(x, y, message, 4210752); drawString(x, y, message, 4210752);
} }
public void drawString(int x, int y, String message, int color) public void drawString(int x, int y, String message, int color)
{ {
fontRendererObj.drawString(message, x, y, color); fontRendererObj.drawString(message, x, y, color);
} }
// https://github.com/AppliedEnergistics/Applied-Energistics-2/blob/master/src/main/java/appeng/client/gui/AEBaseGui.java // https://github.com/AppliedEnergistics/Applied-Energistics-2/blob/master/src/main/java/appeng/client/gui/AEBaseGui.java
public void drawTooltip(int x, int y, String message) public void drawTooltip(int x, int y, String message)
{ {
GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS); GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS);
GL11.glDisable(GL12.GL_RESCALE_NORMAL); GL11.glDisable(GL12.GL_RESCALE_NORMAL);
RenderHelper.disableStandardItemLighting(); RenderHelper.disableStandardItemLighting();
GL11.glDisable(GL11.GL_LIGHTING); GL11.glDisable(GL11.GL_LIGHTING);
GL11.glDisable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_DEPTH_TEST);
String[] lines = message.split("\n"); String[] lines = message.split("\n");
if (lines.length > 0) if (lines.length > 0)
{ {
int var5 = 0; int var5 = 0;
int var6; int var6;
int var7; int var7;
for (var6 = 0; var6 < lines.length; ++var6) for (var6 = 0; var6 < lines.length; ++var6)
{ {
var7 = this.fontRendererObj.getStringWidth(lines[var6]); var7 = this.fontRendererObj.getStringWidth(lines[var6]);
if (var7 > var5) if (var7 > var5)
{ {
var5 = var7; var5 = var7;
} }
} }
var6 = x + 12; var6 = x + 12;
var7 = y - 12; var7 = y - 12;
int var9 = 8; int var9 = 8;
if (lines.length > 1) if (lines.length > 1)
{ {
var9 += 2 + (lines.length - 1) * 10; var9 += 2 + (lines.length - 1) * 10;
} }
if (this.guiTop + var7 + var9 + 6 > this.height) if (this.guiTop + var7 + var9 + 6 > this.height)
{ {
var7 = this.height - var9 - this.guiTop - 6; var7 = this.height - var9 - this.guiTop - 6;
} }
zLevel = 300.0F; zLevel = 300.0F;
itemRender.zLevel = 300.0F; itemRender.zLevel = 300.0F;
int var10 = -267386864; int var10 = -267386864;
drawGradientRect(var6 - 3, var7 - 4, var6 + var5 + 3, var7 - 3, var10, var10); drawGradientRect(var6 - 3, var7 - 4, var6 + var5 + 3, var7 - 3, var10, var10);
drawGradientRect(var6 - 3, var7 + var9 + 3, var6 + var5 + 3, var7 + var9 + 4, var10, var10); drawGradientRect(var6 - 3, var7 + var9 + 3, var6 + var5 + 3, var7 + var9 + 4, var10, var10);
drawGradientRect(var6 - 3, var7 - 3, var6 + var5 + 3, var7 + var9 + 3, var10, var10); drawGradientRect(var6 - 3, var7 - 3, var6 + var5 + 3, var7 + var9 + 3, var10, var10);
drawGradientRect(var6 - 4, var7 - 3, var6 - 3, var7 + var9 + 3, var10, var10); drawGradientRect(var6 - 4, var7 - 3, var6 - 3, var7 + var9 + 3, var10, var10);
drawGradientRect(var6 + var5 + 3, var7 - 3, var6 + var5 + 4, var7 + var9 + 3, var10, var10); drawGradientRect(var6 + var5 + 3, var7 - 3, var6 + var5 + 4, var7 + var9 + 3, var10, var10);
int var11 = 1347420415; int var11 = 1347420415;
int var12 = (var11 & 16711422) >> 1 | var11 & -16777216; int var12 = (var11 & 16711422) >> 1 | var11 & -16777216;
drawGradientRect(var6 - 3, var7 - 3 + 1, var6 - 3 + 1, var7 + var9 + 3 - 1, var11, var12); drawGradientRect(var6 - 3, var7 - 3 + 1, var6 - 3 + 1, var7 + var9 + 3 - 1, var11, var12);
drawGradientRect(var6 + var5 + 2, var7 - 3 + 1, var6 + var5 + 3, var7 + var9 + 3 - 1, var11, var12); drawGradientRect(var6 + var5 + 2, var7 - 3 + 1, var6 + var5 + 3, var7 + var9 + 3 - 1, var11, var12);
drawGradientRect(var6 - 3, var7 - 3, var6 + var5 + 3, var7 - 3 + 1, var11, var11); drawGradientRect(var6 - 3, var7 - 3, var6 + var5 + 3, var7 - 3 + 1, var11, var11);
drawGradientRect(var6 - 3, var7 + var9 + 2, var6 + var5 + 3, var7 + var9 + 3, var12, var12); drawGradientRect(var6 - 3, var7 + var9 + 2, var6 + var5 + 3, var7 + var9 + 3, var12, var12);
for (int var13 = 0; var13 < lines.length; ++var13) for (int var13 = 0; var13 < lines.length; ++var13)
{ {
String var14 = lines[var13]; String var14 = lines[var13];
if (var13 == 0) if (var13 == 0)
{ {
var14 = '\u00a7' + Integer.toHexString(15) + var14; var14 = '\u00a7' + Integer.toHexString(15) + var14;
} }
else else
{ {
var14 = "\u00a77" + var14; var14 = "\u00a77" + var14;
} }
fontRendererObj.drawStringWithShadow(var14, var6, var7, -1); // @TODO: fontRendererObj.drawStringWithShadow(var14, var6, var7, -1);
if (var13 == 0)
if (var13 == 0) {
{ var7 += 2;
var7 += 2; }
}
var7 += 10;
var7 += 10; }
}
zLevel = 0.0F;
zLevel = 0.0F; itemRender.zLevel = 0.0F;
itemRender.zLevel = 0.0F; }
}
GL11.glPopAttrib();
GL11.glPopAttrib(); }
}
public void drawTooltip(int x, int y, ItemStack stack)
public void drawTooltip(int x, int y, ItemStack stack) {
{ List list = stack.getTooltip(mc.thePlayer, mc.gameSettings.advancedItemTooltips);
List list = stack.getTooltip(mc.thePlayer, mc.gameSettings.advancedItemTooltips);
for (int i = 0; i < list.size(); ++i)
for (int i = 0; i < list.size(); ++i) {
{ if (i == 0)
if (i == 0) {
{ list.set(i, stack.getRarity().rarityColor + (String) list.get(i));
list.set(i, stack.getRarity().rarityColor + (String) list.get(i)); }
} else
else {
{ list.set(i, EnumChatFormatting.GRAY + (String) list.get(i));
list.set(i, EnumChatFormatting.GRAY + (String) list.get(i)); }
} }
}
drawTooltip(x, y, Joiner.on("\n").join(list));
drawTooltip(x, y, Joiner.on("\n").join(list)); }
}
public String t(String name, Object... format)
public String t(String name, Object... format) {
{ return StatCollector.translateToLocalFormatted(name, format);
return StatCollector.translateToLocalFormatted(name, format); }
}
public abstract void init(int x, int y);
public abstract void init(int x, int y);
public abstract void update(int x, int y);
public abstract void update(int x, int y);
public abstract void drawBackground(int x, int y, int mouseX, int mouseY);
public abstract void drawBackground(int x, int y, int mouseX, int mouseY);
public abstract void drawForeground(int mouseX, int mouseY);
public abstract void drawForeground(int mouseX, int mouseY); }
}

View File

@@ -1,82 +1,83 @@
package storagecraft.gui; package storagecraft.gui;
import com.google.common.primitives.Ints; import com.google.common.primitives.Ints;
import net.minecraft.client.gui.GuiTextField; import java.io.IOException;
import storagecraft.StorageCraft; import net.minecraft.client.gui.GuiTextField;
import storagecraft.container.ContainerDetector; import storagecraft.StorageCraft;
import storagecraft.gui.sidebutton.SideButtonCompare; import storagecraft.container.ContainerDetector;
import storagecraft.gui.sidebutton.SideButtonDetectorMode; import storagecraft.gui.sidebutton.SideButtonCompare;
import storagecraft.network.MessageDetectorAmountUpdate; import storagecraft.gui.sidebutton.SideButtonDetectorMode;
import storagecraft.tile.TileDetector; import storagecraft.network.MessageDetectorAmountUpdate;
import storagecraft.util.InventoryUtils; import storagecraft.tile.TileDetector;
import storagecraft.util.InventoryUtils;
public class GuiDetector extends GuiBase
{ public class GuiDetector extends GuiBase
private TileDetector detector; {
private TileDetector detector;
private GuiTextField amountField;
private GuiTextField amountField;
public GuiDetector(ContainerDetector container, TileDetector detector)
{ public GuiDetector(ContainerDetector container, TileDetector detector)
super(container, 176, 137); {
super(container, 176, 137);
this.detector = detector;
} this.detector = detector;
}
@Override
public void init(int x, int y) @Override
{ public void init(int x, int y)
addSideButton(new SideButtonCompare(detector, InventoryUtils.COMPARE_DAMAGE)); {
addSideButton(new SideButtonCompare(detector, InventoryUtils.COMPARE_NBT)); addSideButton(new SideButtonCompare(detector, InventoryUtils.COMPARE_DAMAGE));
addSideButton(new SideButtonCompare(detector, InventoryUtils.COMPARE_NBT));
addSideButton(new SideButtonDetectorMode(detector));
addSideButton(new SideButtonDetectorMode(detector));
amountField = new GuiTextField(fontRendererObj, x + 62 + 1, y + 23 + 1, 25, fontRendererObj.FONT_HEIGHT);
amountField.setText(String.valueOf(detector.getAmount())); amountField = new GuiTextField(0, fontRendererObj, x + 62 + 1, y + 23 + 1, 25, fontRendererObj.FONT_HEIGHT); // @TODO: Is this the right id?
amountField.setEnableBackgroundDrawing(false); amountField.setText(String.valueOf(detector.getAmount()));
amountField.setVisible(true); amountField.setEnableBackgroundDrawing(false);
amountField.setTextColor(16777215); amountField.setVisible(true);
amountField.setCanLoseFocus(false); amountField.setTextColor(16777215);
amountField.setFocused(true); amountField.setCanLoseFocus(false);
} amountField.setFocused(true);
}
@Override
public void update(int x, int y) @Override
{ public void update(int x, int y)
} {
}
@Override
public void drawBackground(int x, int y, int mouseX, int mouseY) @Override
{ public void drawBackground(int x, int y, int mouseX, int mouseY)
bindTexture("gui/detector.png"); {
bindTexture("gui/detector.png");
drawTexturedModalRect(x, y, 0, 0, xSize, ySize);
drawTexturedModalRect(x, y, 0, 0, xSize, ySize);
amountField.drawTextBox();
} amountField.drawTextBox();
}
@Override
public void drawForeground(int mouseX, int mouseY) @Override
{ public void drawForeground(int mouseX, int mouseY)
drawString(7, 7, t("gui.storagecraft:detector")); {
drawString(7, 43, t("container.inventory")); drawString(7, 7, t("gui.storagecraft:detector"));
} drawString(7, 43, t("container.inventory"));
}
@Override
protected void keyTyped(char character, int keyCode) @Override
{ protected void keyTyped(char character, int keyCode) throws IOException
if (!checkHotbarKeys(keyCode) && amountField.textboxKeyTyped(character, keyCode)) {
{ if (!checkHotbarKeys(keyCode) && amountField.textboxKeyTyped(character, keyCode))
Integer result = Ints.tryParse(amountField.getText()); {
Integer result = Ints.tryParse(amountField.getText());
if (result != null)
{ if (result != null)
StorageCraft.NETWORK.sendToServer(new MessageDetectorAmountUpdate(detector, result)); {
} StorageCraft.NETWORK.sendToServer(new MessageDetectorAmountUpdate(detector, result));
} }
else }
{ else
super.keyTyped(character, keyCode); {
} super.keyTyped(character, keyCode);
} }
} }
}

View File

@@ -1,336 +1,337 @@
package storagecraft.gui; package storagecraft.gui;
import java.util.ArrayList; import java.io.IOException;
import java.util.Comparator; import java.util.ArrayList;
import java.util.Iterator; import java.util.Comparator;
import java.util.List; import java.util.Iterator;
import net.minecraft.client.audio.PositionedSoundRecord; import java.util.List;
import net.minecraft.client.gui.GuiTextField; import net.minecraft.client.audio.PositionedSoundRecord;
import net.minecraft.inventory.Slot; import net.minecraft.client.gui.GuiTextField;
import net.minecraft.util.ResourceLocation; import net.minecraft.inventory.Slot;
import org.lwjgl.input.Keyboard; import net.minecraft.util.ResourceLocation;
import org.lwjgl.input.Mouse; import org.lwjgl.input.Keyboard;
import storagecraft.StorageCraft; import org.lwjgl.input.Mouse;
import storagecraft.container.ContainerGrid; import storagecraft.StorageCraft;
import storagecraft.gui.sidebutton.SideButtonGridSortingDirection; import storagecraft.container.ContainerGrid;
import storagecraft.gui.sidebutton.SideButtonGridSortingType; import storagecraft.gui.sidebutton.SideButtonGridSortingDirection;
import storagecraft.gui.sidebutton.SideButtonRedstoneMode; import storagecraft.gui.sidebutton.SideButtonGridSortingType;
import storagecraft.network.MessageGridCraftingClear; import storagecraft.gui.sidebutton.SideButtonRedstoneMode;
import storagecraft.network.MessageStoragePull; import storagecraft.network.MessageGridCraftingClear;
import storagecraft.network.MessageStoragePush; import storagecraft.network.MessageStoragePull;
import storagecraft.storage.StorageItem; import storagecraft.network.MessageStoragePush;
import storagecraft.tile.TileController; import storagecraft.storage.StorageItem;
import storagecraft.tile.TileGrid; import storagecraft.tile.TileController;
import storagecraft.tile.TileGrid;
public class GuiGrid extends GuiBase
{ public class GuiGrid extends GuiBase
public static final int SORTING_DIRECTION_ASCENDING = 0; {
public static final int SORTING_DIRECTION_DESCENDING = 1; public static final int SORTING_DIRECTION_ASCENDING = 0;
public static final int SORTING_DIRECTION_DESCENDING = 1;
public static final int SORTING_TYPE_COUNT = 0;
public static final int SORTING_TYPE_NAME = 1; public static final int SORTING_TYPE_COUNT = 0;
public static final int SORTING_TYPE_NAME = 1;
public static int SORTING_DIRECTION = SORTING_DIRECTION_ASCENDING;
public static int SORTING_TYPE = SORTING_TYPE_COUNT; public static int SORTING_DIRECTION = SORTING_DIRECTION_ASCENDING;
public static int SORTING_TYPE = SORTING_TYPE_COUNT;
private ContainerGrid container;
private TileGrid grid; private ContainerGrid container;
private TileGrid grid;
private GuiTextField searchField;
private GuiTextField searchField;
private int hoveringSlotId;
private int hoveringId; private int hoveringSlotId;
private int hoveringId;
private int offset;
private int offset;
public GuiGrid(ContainerGrid container, TileGrid grid)
{ public GuiGrid(ContainerGrid container, TileGrid grid)
super(container, 176, grid.isCrafting() ? 256 : 190); {
super(container, 176, grid.isCrafting() ? 256 : 190);
this.container = container;
this.grid = grid; this.container = container;
} this.grid = grid;
}
@Override
public void init(int x, int y) @Override
{ public void init(int x, int y)
addSideButton(new SideButtonRedstoneMode(grid)); {
addSideButton(new SideButtonRedstoneMode(grid));
addSideButton(new SideButtonGridSortingDirection());
addSideButton(new SideButtonGridSortingType()); addSideButton(new SideButtonGridSortingDirection());
addSideButton(new SideButtonGridSortingType());
searchField = new GuiTextField(fontRendererObj, x + 80 + 1, y + 6 + 1, 88 - 6, fontRendererObj.FONT_HEIGHT);
searchField.setEnableBackgroundDrawing(false); searchField = new GuiTextField(0, fontRendererObj, x + 80 + 1, y + 6 + 1, 88 - 6, fontRendererObj.FONT_HEIGHT); // @TODO: Is this the right id?
searchField.setVisible(true); searchField.setEnableBackgroundDrawing(false);
searchField.setTextColor(16777215); searchField.setVisible(true);
searchField.setCanLoseFocus(false); searchField.setTextColor(16777215);
searchField.setFocused(true); searchField.setCanLoseFocus(false);
} searchField.setFocused(true);
}
@Override
public void update(int x, int y) @Override
{ public void update(int x, int y)
int wheel = Mouse.getDWheel(); {
int wheel = Mouse.getDWheel();
wheel = Math.max(Math.min(-wheel, 1), -1);
wheel = Math.max(Math.min(-wheel, 1), -1);
if (canScroll(wheel))
{ if (canScroll(wheel))
offset += wheel; {
} offset += wheel;
}
if (offset > getMaxOffset())
{ if (offset > getMaxOffset())
offset = getMaxOffset(); {
} offset = getMaxOffset();
} }
}
private int getMaxOffset()
{ private int getMaxOffset()
if (!grid.isConnected()) {
{ if (!grid.isConnected())
return 0; {
} return 0;
}
int max = ((int) Math.ceil((float) getItems().size() / (float) 9)) - 4;
int max = ((int) Math.ceil((float) getItems().size() / (float) 9)) - 4;
return max < 0 ? 0 : max;
} return max < 0 ? 0 : max;
}
private boolean canScroll(int delta)
{ private boolean canScroll(int delta)
if (offset + delta < 0) {
{ if (offset + delta < 0)
return false; {
} return false;
}
return offset + delta <= getMaxOffset();
} return offset + delta <= getMaxOffset();
}
private boolean isHoveringOverValidSlot()
{ private boolean isHoveringOverValidSlot()
return grid.isConnected() && isHoveringOverSlot() && hoveringSlotId < getItems().size(); {
} return grid.isConnected() && isHoveringOverSlot() && hoveringSlotId < getItems().size();
}
private boolean isHoveringOverSlot()
{ private boolean isHoveringOverSlot()
return hoveringSlotId >= 0; {
} return hoveringSlotId >= 0;
}
public boolean isHoveringOverClear(int mouseX, int mouseY)
{ public boolean isHoveringOverClear(int mouseX, int mouseY)
return inBounds(81, 105, 7, 7, mouseX, mouseY); {
} return inBounds(81, 105, 7, 7, mouseX, mouseY);
}
@Override
public void drawBackground(int x, int y, int mouseX, int mouseY) @Override
{ public void drawBackground(int x, int y, int mouseX, int mouseY)
if (grid.isCrafting()) {
{ if (grid.isCrafting())
bindTexture("gui/craftingGrid.png"); {
} bindTexture("gui/craftingGrid.png");
else }
{ else
bindTexture("gui/grid.png"); {
} bindTexture("gui/grid.png");
}
drawTexturedModalRect(x, y, 0, 0, xSize, ySize);
drawTexturedModalRect(x, y, 0, 0, xSize, ySize);
searchField.drawTextBox();
} searchField.drawTextBox();
}
@Override
public void drawForeground(int mouseX, int mouseY) @Override
{ public void drawForeground(int mouseX, int mouseY)
drawString(7, 7, t("gui.storagecraft:grid")); {
drawString(7, 7, t("gui.storagecraft:grid"));
if (grid.isCrafting())
{ if (grid.isCrafting())
drawString(7, 94, t("container.crafting")); {
} drawString(7, 94, t("container.crafting"));
}
drawString(7, grid.isCrafting() ? 163 : 96, t("container.inventory"));
drawString(7, grid.isCrafting() ? 163 : 96, t("container.inventory"));
int x = 8;
int y = 20; int x = 8;
int y = 20;
List<StorageItem> items = getItems();
List<StorageItem> items = getItems();
hoveringSlotId = -1;
hoveringSlotId = -1;
int slot = offset * 9;
int slot = offset * 9;
for (int i = 0; i < 9 * 4; ++i)
{ for (int i = 0; i < 9 * 4; ++i)
if (slot < items.size()) {
{ if (slot < items.size())
drawItem(x, y, items.get(slot).toItemStack(), true); {
} drawItem(x, y, items.get(slot).toItemStack(), true);
}
if (inBounds(x, y, 16, 16, mouseX, mouseY) || !grid.isConnected())
{ if (inBounds(x, y, 16, 16, mouseX, mouseY) || !grid.isConnected())
hoveringSlotId = slot; {
hoveringSlotId = slot;
if (slot < items.size())
{ if (slot < items.size())
// We need to use the ID, because if we filter, the client-side index will change {
// while the serverside's index will still be the same. // We need to use the ID, because if we filter, the client-side index will change
hoveringId = items.get(slot).getId(); // while the serverside's index will still be the same.
} hoveringId = items.get(slot).getId();
}
int color = grid.isConnected() ? -2130706433 : 0xFF5B5B5B;
int color = grid.isConnected() ? -2130706433 : 0xFF5B5B5B;
zLevel = 190;
drawGradientRect(x, y, x + 16, y + 16, color, color); zLevel = 190;
zLevel = 0; drawGradientRect(x, y, x + 16, y + 16, color, color);
} zLevel = 0;
}
slot++;
slot++;
x += 18;
x += 18;
if ((i + 1) % 9 == 0)
{ if ((i + 1) % 9 == 0)
x = 8; {
y += 18; x = 8;
} y += 18;
} }
}
if (isHoveringOverValidSlot())
{ if (isHoveringOverValidSlot())
drawTooltip(mouseX, mouseY, items.get(hoveringSlotId).toItemStack()); {
} drawTooltip(mouseX, mouseY, items.get(hoveringSlotId).toItemStack());
}
if (grid.isCrafting() && isHoveringOverClear(mouseX, mouseY))
{ if (grid.isCrafting() && isHoveringOverClear(mouseX, mouseY))
drawTooltip(mouseX, mouseY, t("misc.storagecraft:clear")); {
} drawTooltip(mouseX, mouseY, t("misc.storagecraft:clear"));
} }
}
public List<StorageItem> getItems()
{ public List<StorageItem> getItems()
List<StorageItem> items = new ArrayList<StorageItem>(); {
List<StorageItem> items = new ArrayList<StorageItem>();
if (!grid.isConnected())
{ if (!grid.isConnected())
return items; {
} return items;
}
items.addAll(grid.getController().getItems());
items.addAll(grid.getController().getItems());
if (!searchField.getText().trim().isEmpty())
{ if (!searchField.getText().trim().isEmpty())
Iterator<StorageItem> t = items.iterator(); {
Iterator<StorageItem> t = items.iterator();
while (t.hasNext())
{ while (t.hasNext())
StorageItem item = t.next(); {
StorageItem item = t.next();
if (!item.toItemStack().getDisplayName().toLowerCase().contains(searchField.getText().toLowerCase()))
{ if (!item.toItemStack().getDisplayName().toLowerCase().contains(searchField.getText().toLowerCase()))
t.remove(); {
} t.remove();
} }
} }
}
switch (SORTING_TYPE)
{ switch (SORTING_TYPE)
case SORTING_TYPE_COUNT: {
items.sort(new Comparator<StorageItem>() case SORTING_TYPE_COUNT:
{ items.sort(new Comparator<StorageItem>()
@Override {
public int compare(StorageItem o1, StorageItem o2) @Override
{ public int compare(StorageItem o1, StorageItem o2)
switch (SORTING_DIRECTION) {
{ switch (SORTING_DIRECTION)
case SORTING_DIRECTION_ASCENDING: {
return Integer.valueOf(o2.getQuantity()).compareTo(o1.getQuantity()); case SORTING_DIRECTION_ASCENDING:
case SORTING_DIRECTION_DESCENDING: return Integer.valueOf(o2.getQuantity()).compareTo(o1.getQuantity());
return Integer.valueOf(o1.getQuantity()).compareTo(o2.getQuantity()); case SORTING_DIRECTION_DESCENDING:
default: return Integer.valueOf(o1.getQuantity()).compareTo(o2.getQuantity());
return 0; default:
} return 0;
} }
}); }
});
break;
case SORTING_TYPE_NAME: break;
items.sort(new Comparator<StorageItem>() case SORTING_TYPE_NAME:
{ items.sort(new Comparator<StorageItem>()
@Override {
public int compare(StorageItem o1, StorageItem o2) @Override
{ public int compare(StorageItem o1, StorageItem o2)
switch (SORTING_DIRECTION) {
{ switch (SORTING_DIRECTION)
case SORTING_DIRECTION_ASCENDING: {
return o2.toItemStack().getDisplayName().compareTo(o1.toItemStack().getDisplayName()); case SORTING_DIRECTION_ASCENDING:
case SORTING_DIRECTION_DESCENDING: return o2.toItemStack().getDisplayName().compareTo(o1.toItemStack().getDisplayName());
return o1.toItemStack().getDisplayName().compareTo(o2.toItemStack().getDisplayName()); case SORTING_DIRECTION_DESCENDING:
default: return o1.toItemStack().getDisplayName().compareTo(o2.toItemStack().getDisplayName());
return 0; default:
} return 0;
} }
}); }
});
break;
} break;
}
return items;
} return items;
}
@Override
public void mouseClicked(int mouseX, int mouseY, int clickedButton) @Override
{ public void mouseClicked(int mouseX, int mouseY, int clickedButton) throws IOException
super.mouseClicked(mouseX, mouseY, clickedButton); {
super.mouseClicked(mouseX, mouseY, clickedButton);
boolean clickedClear = grid.isCrafting() && clickedButton == 0 && isHoveringOverClear(mouseX - guiLeft, mouseY - guiTop);
boolean clickedClear = grid.isCrafting() && clickedButton == 0 && isHoveringOverClear(mouseX - guiLeft, mouseY - guiTop);
if (grid.isConnected())
{ if (grid.isConnected())
TileController controller = grid.getController(); {
TileController controller = grid.getController();
if (isHoveringOverSlot() && container.getPlayer().inventory.getItemStack() != null)
{ if (isHoveringOverSlot() && container.getPlayer().inventory.getItemStack() != null)
StorageCraft.NETWORK.sendToServer(new MessageStoragePush(controller.xCoord, controller.yCoord, controller.zCoord, -1, clickedButton == 1)); {
} StorageCraft.NETWORK.sendToServer(new MessageStoragePush(controller.getPos().getX(), controller.getPos().getY(), controller.getPos().getZ(), -1, clickedButton == 1));
else if (isHoveringOverValidSlot() && container.getPlayer().inventory.getItemStack() == null) }
{ else if (isHoveringOverValidSlot() && container.getPlayer().inventory.getItemStack() == null)
StorageCraft.NETWORK.sendToServer(new MessageStoragePull(controller.xCoord, controller.yCoord, controller.zCoord, hoveringId, clickedButton == 1, Keyboard.isKeyDown(Keyboard.KEY_LSHIFT))); {
} StorageCraft.NETWORK.sendToServer(new MessageStoragePull(controller.getPos().getX(), controller.getPos().getY(), controller.getPos().getZ(), hoveringId, clickedButton == 1, Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)));
else if (clickedClear) }
{ else if (clickedClear)
StorageCraft.NETWORK.sendToServer(new MessageGridCraftingClear(grid)); {
} StorageCraft.NETWORK.sendToServer(new MessageGridCraftingClear(grid));
else }
{ else
for (Slot slot : container.getPlayerInventorySlots()) {
{ for (Slot slot : container.getPlayerInventorySlots())
if (inBounds(slot.xDisplayPosition, slot.yDisplayPosition, 16, 16, mouseX - guiLeft, mouseY - guiTop)) {
{ if (inBounds(slot.xDisplayPosition, slot.yDisplayPosition, 16, 16, mouseX - guiLeft, mouseY - guiTop))
if (Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) {
{ if (Keyboard.isKeyDown(Keyboard.KEY_LSHIFT))
StorageCraft.NETWORK.sendToServer(new MessageStoragePush(controller.xCoord, controller.yCoord, controller.zCoord, slot.slotNumber, clickedButton == 1)); {
} StorageCraft.NETWORK.sendToServer(new MessageStoragePush(controller.getPos().getX(), controller.getPos().getY(), controller.getPos().getZ(), slot.slotNumber, clickedButton == 1));
} }
} }
} }
} }
}
if (clickedClear)
{ if (clickedClear)
mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); {
} mc.getSoundHandler().playSound(PositionedSoundRecord.create(new ResourceLocation("gui.button.press"), 1.0F));
} }
}
@Override
protected void keyTyped(char character, int keyCode) @Override
{ protected void keyTyped(char character, int keyCode) throws IOException
if (!checkHotbarKeys(keyCode) && searchField.textboxKeyTyped(character, keyCode)) {
{ if (!checkHotbarKeys(keyCode) && searchField.textboxKeyTyped(character, keyCode))
} {
else }
{ else
super.keyTyped(character, keyCode); {
} super.keyTyped(character, keyCode);
} }
} }
}

View File

@@ -1,104 +1,105 @@
package storagecraft.gui; package storagecraft.gui;
import cpw.mods.fml.common.network.IGuiHandler; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container;
import net.minecraft.inventory.Container; import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockPos;
import net.minecraft.world.World; import net.minecraft.world.World;
import storagecraft.StorageCraftGUI; import net.minecraftforge.fml.common.network.IGuiHandler;
import storagecraft.container.ContainerConstructor; import storagecraft.StorageCraftGUI;
import storagecraft.container.ContainerController; import storagecraft.container.ContainerConstructor;
import storagecraft.container.ContainerDestructor; import storagecraft.container.ContainerController;
import storagecraft.container.ContainerDetector; import storagecraft.container.ContainerDestructor;
import storagecraft.container.ContainerDrive; import storagecraft.container.ContainerDetector;
import storagecraft.container.ContainerExporter; import storagecraft.container.ContainerDrive;
import storagecraft.container.ContainerGrid; import storagecraft.container.ContainerExporter;
import storagecraft.container.ContainerImporter; import storagecraft.container.ContainerGrid;
import storagecraft.container.ContainerSolderer; import storagecraft.container.ContainerImporter;
import storagecraft.container.ContainerExternalStorage; import storagecraft.container.ContainerSolderer;
import storagecraft.container.ContainerWirelessTransmitter; import storagecraft.container.ContainerExternalStorage;
import storagecraft.tile.TileConstructor; import storagecraft.container.ContainerWirelessTransmitter;
import storagecraft.tile.TileController; import storagecraft.tile.TileConstructor;
import storagecraft.tile.TileDestructor; import storagecraft.tile.TileController;
import storagecraft.tile.TileDetector; import storagecraft.tile.TileDestructor;
import storagecraft.tile.TileDrive; import storagecraft.tile.TileDetector;
import storagecraft.tile.TileExporter; import storagecraft.tile.TileDrive;
import storagecraft.tile.TileGrid; import storagecraft.tile.TileExporter;
import storagecraft.tile.TileImporter; import storagecraft.tile.TileGrid;
import storagecraft.tile.TileSolderer; import storagecraft.tile.TileImporter;
import storagecraft.tile.TileExternalStorage; import storagecraft.tile.TileSolderer;
import storagecraft.tile.TileWirelessTransmitter; import storagecraft.tile.TileExternalStorage;
import storagecraft.tile.TileWirelessTransmitter;
public class GuiHandler implements IGuiHandler
{ public class GuiHandler implements IGuiHandler
private Container getContainer(int ID, EntityPlayer player, TileEntity tile) {
{ private Container getContainer(int ID, EntityPlayer player, TileEntity tile)
switch (ID) {
{ switch (ID)
case StorageCraftGUI.CONTROLLER: {
return new ContainerController(player); case StorageCraftGUI.CONTROLLER:
case StorageCraftGUI.GRID: return new ContainerController(player);
return new ContainerGrid(player, (TileGrid) tile); case StorageCraftGUI.GRID:
case StorageCraftGUI.DRIVE: return new ContainerGrid(player, (TileGrid) tile);
return new ContainerDrive(player, (TileDrive) tile); case StorageCraftGUI.DRIVE:
case StorageCraftGUI.EXTERNAL_STORAGE: return new ContainerDrive(player, (TileDrive) tile);
return new ContainerExternalStorage(player); case StorageCraftGUI.EXTERNAL_STORAGE:
case StorageCraftGUI.IMPORTER: return new ContainerExternalStorage(player);
return new ContainerImporter(player, (TileImporter) tile); case StorageCraftGUI.IMPORTER:
case StorageCraftGUI.EXPORTER: return new ContainerImporter(player, (TileImporter) tile);
return new ContainerExporter(player, (TileExporter) tile); case StorageCraftGUI.EXPORTER:
case StorageCraftGUI.DETECTOR: return new ContainerExporter(player, (TileExporter) tile);
return new ContainerDetector(player, (TileDetector) tile); case StorageCraftGUI.DETECTOR:
case StorageCraftGUI.SOLDERER: return new ContainerDetector(player, (TileDetector) tile);
return new ContainerSolderer(player, (TileSolderer) tile); case StorageCraftGUI.SOLDERER:
case StorageCraftGUI.WIRELESS_TRANSMITTER: return new ContainerSolderer(player, (TileSolderer) tile);
return new ContainerWirelessTransmitter(player, (TileWirelessTransmitter) tile); case StorageCraftGUI.WIRELESS_TRANSMITTER:
case StorageCraftGUI.DESTRUCTOR: return new ContainerWirelessTransmitter(player, (TileWirelessTransmitter) tile);
return new ContainerDestructor(player); case StorageCraftGUI.DESTRUCTOR:
case StorageCraftGUI.CONSTRUCTOR: return new ContainerDestructor(player);
return new ContainerConstructor(player, (TileConstructor) tile); case StorageCraftGUI.CONSTRUCTOR:
default: return new ContainerConstructor(player, (TileConstructor) tile);
return null; default:
} return null;
} }
}
@Override
public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) @Override
{ public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z)
return getContainer(ID, player, world.getTileEntity(x, y, z)); {
} return getContainer(ID, player, world.getTileEntity(new BlockPos(x, y, z)));
}
@Override
public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) @Override
{ public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z)
TileEntity tile = world.getTileEntity(x, y, z); {
TileEntity tile = world.getTileEntity(new BlockPos(x, y, z));
switch (ID)
{ switch (ID)
case StorageCraftGUI.CONTROLLER: {
return new GuiController((ContainerController) getContainer(ID, player, tile), (TileController) tile); case StorageCraftGUI.CONTROLLER:
case StorageCraftGUI.GRID: return new GuiController((ContainerController) getContainer(ID, player, tile), (TileController) tile);
return new GuiGrid((ContainerGrid) getContainer(ID, player, tile), (TileGrid) tile); case StorageCraftGUI.GRID:
case StorageCraftGUI.DRIVE: return new GuiGrid((ContainerGrid) getContainer(ID, player, tile), (TileGrid) tile);
return new GuiDrive((ContainerDrive) getContainer(ID, player, tile), (TileDrive) tile); case StorageCraftGUI.DRIVE:
case StorageCraftGUI.EXTERNAL_STORAGE: return new GuiDrive((ContainerDrive) getContainer(ID, player, tile), (TileDrive) tile);
return new GuiExternalStorage((ContainerExternalStorage) getContainer(ID, player, tile), (TileExternalStorage) tile); case StorageCraftGUI.EXTERNAL_STORAGE:
case StorageCraftGUI.IMPORTER: return new GuiExternalStorage((ContainerExternalStorage) getContainer(ID, player, tile), (TileExternalStorage) tile);
return new GuiImporter((ContainerImporter) getContainer(ID, player, tile), (TileImporter) tile); case StorageCraftGUI.IMPORTER:
case StorageCraftGUI.EXPORTER: return new GuiImporter((ContainerImporter) getContainer(ID, player, tile), (TileImporter) tile);
return new GuiExporter((ContainerExporter) getContainer(ID, player, tile), (TileExporter) tile); case StorageCraftGUI.EXPORTER:
case StorageCraftGUI.DETECTOR: return new GuiExporter((ContainerExporter) getContainer(ID, player, tile), (TileExporter) tile);
return new GuiDetector((ContainerDetector) getContainer(ID, player, tile), (TileDetector) tile); case StorageCraftGUI.DETECTOR:
case StorageCraftGUI.SOLDERER: return new GuiDetector((ContainerDetector) getContainer(ID, player, tile), (TileDetector) tile);
return new GuiSolderer((ContainerSolderer) getContainer(ID, player, tile), (TileSolderer) tile); case StorageCraftGUI.SOLDERER:
case StorageCraftGUI.WIRELESS_TRANSMITTER: return new GuiSolderer((ContainerSolderer) getContainer(ID, player, tile), (TileSolderer) tile);
return new GuiWirelessTransmitter((ContainerWirelessTransmitter) getContainer(ID, player, tile), (TileWirelessTransmitter) tile); case StorageCraftGUI.WIRELESS_TRANSMITTER:
case StorageCraftGUI.DESTRUCTOR: return new GuiWirelessTransmitter((ContainerWirelessTransmitter) getContainer(ID, player, tile), (TileWirelessTransmitter) tile);
return new GuiDestructor((ContainerDestructor) getContainer(ID, player, tile), (TileDestructor) tile); case StorageCraftGUI.DESTRUCTOR:
case StorageCraftGUI.CONSTRUCTOR: return new GuiDestructor((ContainerDestructor) getContainer(ID, player, tile), (TileDestructor) tile);
return new GuiConstructor((ContainerConstructor) getContainer(ID, player, tile), (TileConstructor) tile); case StorageCraftGUI.CONSTRUCTOR:
default: return new GuiConstructor((ContainerConstructor) getContainer(ID, player, tile), (TileConstructor) tile);
return null; default:
} return null;
} }
} }
}

View File

@@ -1,125 +1,154 @@
package storagecraft.inventory; package storagecraft.inventory;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory; import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.IChatComponent;
public class InventorySimple implements IInventory
{ public class InventorySimple implements IInventory
private ItemStack[] inventory; {
private int size; private ItemStack[] inventory;
private String name; private int size;
private String name;
public InventorySimple(String name, int size)
{ public InventorySimple(String name, int size)
this.name = name; {
this.size = size; this.name = name;
this.inventory = new ItemStack[size]; this.size = size;
} this.inventory = new ItemStack[size];
}
@Override
public int getSizeInventory() @Override
{ public int getSizeInventory()
return size; {
} return size;
}
@Override
public ItemStack getStackInSlot(int slotIndex) @Override
{ public ItemStack getStackInSlot(int slotIndex)
return inventory[slotIndex]; {
} return inventory[slotIndex];
}
@Override
public ItemStack decrStackSize(int slot, int amount) @Override
{ public ItemStack decrStackSize(int slot, int amount)
ItemStack stack = getStackInSlot(slot); {
ItemStack stack = getStackInSlot(slot);
if (stack != null)
{ if (stack != null)
if (stack.stackSize <= amount) {
{ if (stack.stackSize <= amount)
setInventorySlotContents(slot, null); {
} setInventorySlotContents(slot, null);
else }
{ else
stack = stack.splitStack(amount); {
stack = stack.splitStack(amount);
if (stack.stackSize == 0)
{ if (stack.stackSize == 0)
setInventorySlotContents(slot, null); {
} setInventorySlotContents(slot, null);
} }
} }
}
return stack;
} return stack;
}
@Override
public ItemStack getStackInSlotOnClosing(int slot) @Override
{ public ItemStack getStackInSlotOnClosing(int slot)
ItemStack stack = getStackInSlot(slot); {
ItemStack stack = getStackInSlot(slot);
if (stack != null)
{ if (stack != null)
setInventorySlotContents(slot, null); {
} setInventorySlotContents(slot, null);
}
return stack;
} return stack;
}
@Override
public void setInventorySlotContents(int slot, ItemStack stack) @Override
{ public void setInventorySlotContents(int slot, ItemStack stack)
if (stack != null && stack.stackSize > getInventoryStackLimit()) {
{ if (stack != null && stack.stackSize > getInventoryStackLimit())
stack.stackSize = getInventoryStackLimit(); {
} stack.stackSize = getInventoryStackLimit();
}
inventory[slot] = stack;
} inventory[slot] = stack;
}
@Override
public String getInventoryName() @Override
{ public String getName()
return this.name; {
} return this.name;
}
@Override
public boolean hasCustomInventoryName() @Override
{ public boolean hasCustomName()
return true; {
} return true;
}
@Override
public int getInventoryStackLimit() @Override
{ public int getInventoryStackLimit()
return 64; {
} return 64;
}
@Override
public boolean isUseableByPlayer(EntityPlayer player) @Override
{ public boolean isUseableByPlayer(EntityPlayer player)
return true; {
} return true;
}
@Override
public void openInventory() @Override
{ public boolean isItemValidForSlot(int slot, ItemStack stack)
} {
return true;
@Override }
public void closeInventory()
{ @Override
} public void markDirty()
{
@Override }
public boolean isItemValidForSlot(int slot, ItemStack stack)
{ @Override
return true; public void openInventory(EntityPlayer playerIn)
} {
}
@Override
public void markDirty() @Override
{ public void closeInventory(EntityPlayer playerIn)
} {
} }
@Override
public int getField(int id)
{
return 0;
}
@Override
public void setField(int id, int value)
{
}
@Override
public int getFieldCount()
{
return 0;
}
@Override
public void clear()
{
}
@Override
public IChatComponent getDisplayName()
{
return null; // @TODO: ...
}
}

View File

@@ -1,35 +1,35 @@
package storagecraft.item; package storagecraft.item;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import storagecraft.StorageCraft; import storagecraft.StorageCraft;
public abstract class ItemBase extends Item public abstract class ItemBase extends Item
{ {
private String name; private String name;
public ItemBase(String name) public ItemBase(String name)
{ {
this.name = name; this.name = name;
setCreativeTab(StorageCraft.TAB); setCreativeTab(StorageCraft.TAB);
setTextureName("storagecraft:" + name); // @TODO: ... setTextureName("storagecraft:" + name);
} }
@Override @Override
public String getUnlocalizedName() public String getUnlocalizedName()
{ {
return "item." + StorageCraft.ID + ":" + name; return "item." + StorageCraft.ID + ":" + name;
} }
@Override @Override
public String getUnlocalizedName(ItemStack stack) public String getUnlocalizedName(ItemStack stack)
{ {
if (getHasSubtypes()) if (getHasSubtypes())
{ {
return getUnlocalizedName() + "." + stack.getItemDamage(); return getUnlocalizedName() + "." + stack.getItemDamage();
} }
return getUnlocalizedName(); return getUnlocalizedName();
} }
} }

View File

@@ -1,19 +1,21 @@
package storagecraft.item; package storagecraft.item;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.item.ItemBlockWithMetadata; import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
public abstract class ItemBlockBase extends ItemBlockWithMetadata public abstract class ItemBlockBase extends ItemBlock
{ {
public ItemBlockBase(Block block) public ItemBlockBase(Block block)
{ {
super(block, block); super(block);
}
setHasSubtypes(true);
@Override }
public String getUnlocalizedName(ItemStack stack)
{ @Override
return getUnlocalizedName() + "." + stack.getItemDamage(); public String getUnlocalizedName(ItemStack stack)
} {
} return getUnlocalizedName() + "." + stack.getItemDamage();
}
}

View File

@@ -1,55 +1,29 @@
package storagecraft.item; package storagecraft.item;
import java.util.List; import java.util.List;
import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item;
import net.minecraft.item.Item; import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon; public class ItemCore extends ItemBase
{
public class ItemCore extends ItemBase public static final int TYPE_CONSTRUCTION = 0;
{ public static final int TYPE_DESTRUCTION = 1;
public static final int TYPE_CONSTRUCTION = 0;
public static final int TYPE_DESTRUCTION = 1; public ItemCore()
{
private IIcon constructionIcon; super("core");
private IIcon destructionIcon;
setHasSubtypes(true);
public ItemCore() setMaxDamage(0);
{ }
super("core");
@Override
setHasSubtypes(true); public void getSubItems(Item item, CreativeTabs tab, List list)
setMaxDamage(0); {
} for (int i = 0; i < 2; ++i)
{
@Override list.add(new ItemStack(item, 1, i));
public void getSubItems(Item item, CreativeTabs tab, List list) }
{ }
for (int i = 0; i < 2; ++i) }
{
list.add(new ItemStack(item, 1, i));
}
}
@Override
public void registerIcons(IIconRegister register)
{
constructionIcon = register.registerIcon("storagecraft:core0");
destructionIcon = register.registerIcon("storagecraft:core1");
}
@Override
public IIcon getIconFromDamage(int damage)
{
switch (damage)
{
case TYPE_CONSTRUCTION:
return constructionIcon;
case TYPE_DESTRUCTION:
return destructionIcon;
default:
return null;
}
}
}

View File

@@ -1,53 +1,34 @@
package storagecraft.item; package storagecraft.item;
import java.util.List; import java.util.List;
import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item;
import net.minecraft.item.Item; import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon; public class ItemProcessor extends ItemBase
{
public class ItemProcessor extends ItemBase public static final int TYPE_PRINTED_BASIC = 0;
{ public static final int TYPE_PRINTED_IMPROVED = 1;
public static final int TYPE_PRINTED_BASIC = 0; public static final int TYPE_PRINTED_ADVANCED = 2;
public static final int TYPE_PRINTED_IMPROVED = 1; public static final int TYPE_BASIC = 3;
public static final int TYPE_PRINTED_ADVANCED = 2; public static final int TYPE_IMPROVED = 4;
public static final int TYPE_BASIC = 3; public static final int TYPE_ADVANCED = 5;
public static final int TYPE_IMPROVED = 4; public static final int TYPE_PRINTED_SILICON = 6;
public static final int TYPE_ADVANCED = 5;
public static final int TYPE_PRINTED_SILICON = 6; public ItemProcessor()
{
private IIcon[] icons = new IIcon[7]; super("processor");
public ItemProcessor() setHasSubtypes(true);
{ setMaxDamage(0);
super("processor"); }
setHasSubtypes(true); @Override
setMaxDamage(0); public void getSubItems(Item item, CreativeTabs tab, List list)
} {
for (int i = 0; i <= 6; ++i)
@Override {
public void getSubItems(Item item, CreativeTabs tab, List list) list.add(new ItemStack(item, 1, i));
{ }
for (int i = 0; i <= 6; ++i) }
{ }
list.add(new ItemStack(item, 1, i));
}
}
@Override
public void registerIcons(IIconRegister register)
{
for (int i = 0; i <= 6; ++i)
{
icons[i] = register.registerIcon("storagecraft:processor" + i);
}
}
@Override
public IIcon getIconFromDamage(int damage)
{
return icons[damage];
}
}

View File

@@ -1,112 +1,94 @@
package storagecraft.item; package storagecraft.item;
import java.util.List; import java.util.List;
import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item;
import net.minecraft.item.Item; import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList;
import net.minecraft.nbt.NBTTagList; import net.minecraft.util.StatCollector;
import net.minecraft.util.IIcon; import net.minecraft.world.World;
import net.minecraft.util.StatCollector; import storagecraft.storage.CellStorage;
import net.minecraft.world.World;
import storagecraft.storage.CellStorage; public class ItemStorageCell extends ItemBase
{
public class ItemStorageCell extends ItemBase public static final int TYPE_1K = 0;
{ public static final int TYPE_4K = 1;
public static final int TYPE_1K = 0; public static final int TYPE_16K = 2;
public static final int TYPE_4K = 1; public static final int TYPE_64K = 3;
public static final int TYPE_16K = 2; public static final int TYPE_CREATIVE = 4;
public static final int TYPE_64K = 3;
public static final int TYPE_CREATIVE = 4; public ItemStorageCell()
{
private IIcon[] icons = new IIcon[5]; super("storageCell");
public ItemStorageCell() setMaxStackSize(1);
{ setHasSubtypes(true);
super("storageCell"); setMaxDamage(0);
}
setMaxStackSize(1);
setHasSubtypes(true); @Override
setMaxDamage(0); public void getSubItems(Item item, CreativeTabs tab, List list)
} {
for (int i = 0; i < 5; ++i)
@Override {
public void getSubItems(Item item, CreativeTabs tab, List list) list.add(initNBT(new ItemStack(item, 1, i)));
{ }
for (int i = 0; i < 5; ++i) }
{
list.add(initNBT(new ItemStack(item, 1, i))); @Override
} public void addInformation(ItemStack cell, EntityPlayer player, List list, boolean b)
} {
if (getCapacity(cell) == -1)
@Override {
public void addInformation(ItemStack cell, EntityPlayer player, List list, boolean b) list.add(String.format(StatCollector.translateToLocal("misc.storagecraft:storageCellStored"), getStored(cell)));
{ }
if (getCapacity(cell) == -1) else
{ {
list.add(String.format(StatCollector.translateToLocal("misc.storagecraft:storageCellStored"), getStored(cell))); list.add(String.format(StatCollector.translateToLocal("misc.storagecraft:storageCellStoredWithCapacity"), getStored(cell), getCapacity(cell)));
} }
else }
{
list.add(String.format(StatCollector.translateToLocal("misc.storagecraft:storageCellStoredWithCapacity"), getStored(cell), getCapacity(cell))); @Override
} public void onCreated(ItemStack stack, World world, EntityPlayer player)
} {
super.onCreated(stack, world, player);
@Override
public void onCreated(ItemStack stack, World world, EntityPlayer player) initNBT(stack);
{ }
super.onCreated(stack, world, player);
private ItemStack initNBT(ItemStack cell)
initNBT(stack); {
} cell.setTagCompound(new NBTTagCompound());
@Override cell.getTagCompound().setTag(CellStorage.NBT_ITEMS, new NBTTagList());
public void registerIcons(IIconRegister register) cell.getTagCompound().setInteger(CellStorage.NBT_STORED, 0);
{
for (int i = 0; i < 5; ++i) return cell;
{ }
icons[i] = register.registerIcon("storagecraft:storageCell" + i);
} public static int getStored(ItemStack cell)
} {
return cell.getTagCompound().getInteger(CellStorage.NBT_STORED);
@Override }
public IIcon getIconFromDamage(int damage)
{ public static int getCapacity(ItemStack cell)
return icons[damage]; {
} switch (cell.getItemDamage())
{
private ItemStack initNBT(ItemStack cell) case TYPE_1K:
{ return 1000;
cell.stackTagCompound = new NBTTagCompound(); case TYPE_4K:
cell.stackTagCompound.setTag(CellStorage.NBT_ITEMS, new NBTTagList()); return 4000;
cell.stackTagCompound.setInteger(CellStorage.NBT_STORED, 0); case TYPE_16K:
return 16000;
return cell; case TYPE_64K:
} return 64000;
case TYPE_CREATIVE:
public static int getStored(ItemStack cell) return -1;
{ }
return cell.stackTagCompound.getInteger(CellStorage.NBT_STORED);
} return 0;
}
public static int getCapacity(ItemStack cell) }
{
switch (cell.getItemDamage())
{
case TYPE_1K:
return 1000;
case TYPE_4K:
return 4000;
case TYPE_16K:
return 16000;
case TYPE_64K:
return 64000;
case TYPE_CREATIVE:
return -1;
}
return 0;
}
}

View File

@@ -1,50 +1,31 @@
package storagecraft.item; package storagecraft.item;
import java.util.List; import java.util.List;
import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item;
import net.minecraft.item.Item; import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon; public class ItemStoragePart extends ItemBase
{
public class ItemStoragePart extends ItemBase public static final int TYPE_1K = 0;
{ public static final int TYPE_4K = 1;
public static final int TYPE_1K = 0; public static final int TYPE_16K = 2;
public static final int TYPE_4K = 1; public static final int TYPE_64K = 3;
public static final int TYPE_16K = 2;
public static final int TYPE_64K = 3; public ItemStoragePart()
{
private IIcon[] icons = new IIcon[4]; super("storagePart");
public ItemStoragePart() setHasSubtypes(true);
{ setMaxDamage(0);
super("storagePart"); }
setHasSubtypes(true); @Override
setMaxDamage(0); public void getSubItems(Item item, CreativeTabs tab, List list)
} {
for (int i = 0; i <= 3; ++i)
@Override {
public void getSubItems(Item item, CreativeTabs tab, List list) list.add(new ItemStack(item, 1, i));
{ }
for (int i = 0; i <= 3; ++i) }
{ }
list.add(new ItemStack(item, 1, i));
}
}
@Override
public void registerIcons(IIconRegister register)
{
for (int i = 0; i <= 3; ++i)
{
icons[i] = register.registerIcon("storagecraft:storagePart" + i);
}
}
@Override
public IIcon getIconFromDamage(int damage)
{
return icons[damage];
}
}

View File

@@ -1,159 +1,136 @@
package storagecraft.item; package storagecraft.item;
import java.util.List; import java.util.List;
import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item;
import net.minecraft.item.Item; import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockPos;
import net.minecraft.util.ChatComponentText; import net.minecraft.util.ChatComponentText;
import net.minecraft.util.IIcon; import net.minecraft.util.StatCollector;
import net.minecraft.util.StatCollector; import net.minecraft.world.World;
import net.minecraft.world.World; import storagecraft.StorageCraft;
import storagecraft.StorageCraft; import storagecraft.StorageCraftGUI;
import storagecraft.StorageCraftGUI; import storagecraft.tile.TileGrid;
import storagecraft.tile.TileGrid; import storagecraft.tile.TileWirelessTransmitter;
import storagecraft.tile.TileWirelessTransmitter;
public class ItemWirelessGrid extends ItemBase
public class ItemWirelessGrid extends ItemBase {
{ public static final String NBT_WIRELESS_TRANSMITTER_X = "WirelessTransmitterX";
public static final String NBT_WIRELESS_TRANSMITTER_X = "WirelessTransmitterX"; public static final String NBT_WIRELESS_TRANSMITTER_Y = "WirelessTransmitterY";
public static final String NBT_WIRELESS_TRANSMITTER_Y = "WirelessTransmitterY"; public static final String NBT_WIRELESS_TRANSMITTER_Z = "WirelessTransmitterZ";
public static final String NBT_WIRELESS_TRANSMITTER_Z = "WirelessTransmitterZ";
public ItemWirelessGrid()
private IIcon iconConnected; {
private IIcon iconDisconnected; super("wirelessGrid");
public ItemWirelessGrid() setMaxStackSize(1);
{ setHasSubtypes(true);
super("wirelessGrid"); setMaxDamage(0);
}
setMaxStackSize(1);
setHasSubtypes(true); @Override
setMaxDamage(0); public void getSubItems(Item item, CreativeTabs tab, List list)
} {
for (int i = 0; i < 2; ++i)
@Override {
public void getSubItems(Item item, CreativeTabs tab, List list) list.add(new ItemStack(item, 1, i));
{ }
for (int i = 0; i < 2; ++i) }
{
list.add(new ItemStack(item, 1, i)); @Override
} public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean b)
} {
if (isValid(stack))
@Override {
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean b) list.add(StatCollector.translateToLocalFormatted("misc.storagecraft:wirelessGrid.tooltip", getX(stack), getY(stack), getZ(stack)));
{ }
if (isValid(stack)) }
{
list.add(StatCollector.translateToLocalFormatted("misc.storagecraft:wirelessGrid.tooltip", getX(stack), getY(stack), getZ(stack))); @Override
} public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
} {
if (!world.isRemote)
@Override {
public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) if (isValid(stack))
{ {
if (!world.isRemote) if (isInRange(stack, player))
{ {
if (isValid(stack)) int x = getX(stack);
{ int y = getY(stack);
if (isInRange(stack, player)) int z = getZ(stack);
{
int x = getX(stack); TileEntity tile = world.getTileEntity(new BlockPos(x, y, z));
int y = getY(stack);
int z = getZ(stack); if (tile instanceof TileWirelessTransmitter)
{
TileEntity tile = world.getTileEntity(x, y, z); TileWirelessTransmitter wirelessTransmitter = (TileWirelessTransmitter) tile;
if (tile instanceof TileWirelessTransmitter) if (wirelessTransmitter.isWorking())
{ {
TileWirelessTransmitter wirelessTransmitter = (TileWirelessTransmitter) tile; TileGrid grid = wirelessTransmitter.getGrid(stack.getItemDamage());
if (wirelessTransmitter.isWorking()) if (grid == null)
{ {
TileGrid grid = wirelessTransmitter.getGrid(stack.getItemDamage()); player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("misc.storagecraft:wirelessGrid.noGrid." + stack.getItemDamage())));
}
if (grid == null) else
{ {
player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("misc.storagecraft:wirelessGrid.noGrid." + stack.getItemDamage()))); player.openGui(StorageCraft.INSTANCE, StorageCraftGUI.GRID, world, grid.getPos().getX(), grid.getPos().getY(), grid.getPos().getZ());
} }
else }
{ else
player.openGui(StorageCraft.INSTANCE, StorageCraftGUI.GRID, world, grid.xCoord, grid.yCoord, grid.zCoord); {
} player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("misc.storagecraft:wirelessGrid.notWorking")));
} }
else }
{ else
player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("misc.storagecraft:wirelessGrid.notWorking"))); {
} player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("misc.storagecraft:wirelessGrid.notFound")));
} }
else }
{ else
player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("misc.storagecraft:wirelessGrid.notFound"))); {
} player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("misc.storagecraft:wirelessGrid.outOfRange")));
} }
else }
{ else
player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("misc.storagecraft:wirelessGrid.outOfRange"))); {
} player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("misc.storagecraft:wirelessGrid.notSet." + stack.getItemDamage())));
} }
else }
{
player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal("misc.storagecraft:wirelessGrid.notSet." + stack.getItemDamage()))); return stack;
} }
}
public boolean isCrafting(ItemStack stack)
return stack; {
} return stack.getItemDamage() == 1;
}
public boolean isCrafting(ItemStack stack)
{ public int getX(ItemStack stack)
return stack.getItemDamage() == 1; {
} return stack.getTagCompound().getInteger(NBT_WIRELESS_TRANSMITTER_X);
}
public int getX(ItemStack stack)
{ public int getY(ItemStack stack)
return stack.stackTagCompound.getInteger(NBT_WIRELESS_TRANSMITTER_X); {
} return stack.getTagCompound().getInteger(NBT_WIRELESS_TRANSMITTER_Y);
}
public int getY(ItemStack stack)
{ public int getZ(ItemStack stack)
return stack.stackTagCompound.getInteger(NBT_WIRELESS_TRANSMITTER_Y); {
} return stack.getTagCompound().getInteger(NBT_WIRELESS_TRANSMITTER_Z);
}
public int getZ(ItemStack stack)
{ public boolean isInRange(ItemStack stack, EntityPlayer player)
return stack.stackTagCompound.getInteger(NBT_WIRELESS_TRANSMITTER_Z); {
} return (int) Math.sqrt(Math.pow(getX(stack) - player.posX, 2) + Math.pow(getY(stack) - player.posY, 2) + Math.pow(getZ(stack) - player.posZ, 2)) < 64;
}
public boolean isInRange(ItemStack stack, EntityPlayer player)
{ public boolean isValid(ItemStack stack)
return (int) Math.sqrt(Math.pow(getX(stack) - player.posX, 2) + Math.pow(getY(stack) - player.posY, 2) + Math.pow(getZ(stack) - player.posZ, 2)) < 64; {
} return stack.hasTagCompound() && stack.getTagCompound().hasKey(NBT_WIRELESS_TRANSMITTER_X) && stack.getTagCompound().hasKey(NBT_WIRELESS_TRANSMITTER_Y) && stack.getTagCompound().hasKey(NBT_WIRELESS_TRANSMITTER_Z);
}
public boolean isValid(ItemStack stack) }
{
return stack.stackTagCompound != null && stack.stackTagCompound.hasKey(NBT_WIRELESS_TRANSMITTER_X) && stack.stackTagCompound.hasKey(NBT_WIRELESS_TRANSMITTER_Y) && stack.stackTagCompound.hasKey(NBT_WIRELESS_TRANSMITTER_Z);
}
@Override
public void registerIcons(IIconRegister register)
{
iconConnected = register.registerIcon("storagecraft:wirelessGridConnected");
iconDisconnected = register.registerIcon("storagecraft:wirelessGridDisconnected");
}
@Override
public IIcon getIcon(ItemStack stack, int pass)
{
return getIconIndex(stack);
}
@Override
public IIcon getIconIndex(ItemStack stack)
{
return isValid(stack) ? iconConnected : iconDisconnected;
}
}

View File

@@ -1,62 +1,63 @@
package storagecraft.network; package storagecraft.network;
import cpw.mods.fml.common.network.simpleimpl.IMessage; import io.netty.buffer.ByteBuf;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; import net.minecraft.entity.player.EntityPlayerMP;
import cpw.mods.fml.common.network.simpleimpl.MessageContext; import net.minecraft.tileentity.TileEntity;
import io.netty.buffer.ByteBuf; import net.minecraft.util.BlockPos;
import net.minecraft.entity.player.EntityPlayerMP; import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import net.minecraft.tileentity.TileEntity; import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
import storagecraft.tile.ICompareSetting; import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
import storagecraft.tile.ICompareSetting;
public class MessageCompareUpdate implements IMessage, IMessageHandler<MessageCompareUpdate, IMessage>
{ public class MessageCompareUpdate implements IMessage, IMessageHandler<MessageCompareUpdate, IMessage>
private int x; {
private int y; private int x;
private int z; private int y;
private int compare; private int z;
private int compare;
public MessageCompareUpdate()
{ public MessageCompareUpdate()
} {
}
public MessageCompareUpdate(ICompareSetting setting, int compare)
{ public MessageCompareUpdate(ICompareSetting setting, int compare)
this.x = setting.getX(); {
this.y = setting.getY(); this.x = setting.getPos().getX();
this.z = setting.getZ(); this.y = setting.getPos().getY();
this.compare = compare; this.z = setting.getPos().getZ();
} this.compare = compare;
}
@Override
public void fromBytes(ByteBuf buf) @Override
{ public void fromBytes(ByteBuf buf)
x = buf.readInt(); {
y = buf.readInt(); x = buf.readInt();
z = buf.readInt(); y = buf.readInt();
compare = buf.readInt(); z = buf.readInt();
} compare = buf.readInt();
}
@Override
public void toBytes(ByteBuf buf) @Override
{ public void toBytes(ByteBuf buf)
buf.writeInt(x); {
buf.writeInt(y); buf.writeInt(x);
buf.writeInt(z); buf.writeInt(y);
buf.writeInt(compare); buf.writeInt(z);
} buf.writeInt(compare);
}
@Override
public IMessage onMessage(MessageCompareUpdate message, MessageContext context) @Override
{ public IMessage onMessage(MessageCompareUpdate message, MessageContext context)
EntityPlayerMP player = context.getServerHandler().playerEntity; {
EntityPlayerMP player = context.getServerHandler().playerEntity;
TileEntity tile = player.worldObj.getTileEntity(message.x, message.y, message.z);
TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.x, message.y, message.z));
if (tile instanceof ICompareSetting)
{ if (tile instanceof ICompareSetting)
((ICompareSetting) tile).setCompare(message.compare); {
} ((ICompareSetting) tile).setCompare(message.compare);
}
return null;
} return null;
} }
}

View File

@@ -1,62 +1,63 @@
package storagecraft.network; package storagecraft.network;
import cpw.mods.fml.common.network.simpleimpl.IMessage; import io.netty.buffer.ByteBuf;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; import net.minecraft.entity.player.EntityPlayerMP;
import cpw.mods.fml.common.network.simpleimpl.MessageContext; import net.minecraft.tileentity.TileEntity;
import io.netty.buffer.ByteBuf; import net.minecraft.util.BlockPos;
import net.minecraft.entity.player.EntityPlayerMP; import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import net.minecraft.tileentity.TileEntity; import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
import storagecraft.tile.TileDetector; import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
import storagecraft.tile.TileDetector;
public class MessageDetectorAmountUpdate implements IMessage, IMessageHandler<MessageDetectorAmountUpdate, IMessage>
{ public class MessageDetectorAmountUpdate implements IMessage, IMessageHandler<MessageDetectorAmountUpdate, IMessage>
private int x; {
private int y; private int x;
private int z; private int y;
private int amount; private int z;
private int amount;
public MessageDetectorAmountUpdate()
{ public MessageDetectorAmountUpdate()
} {
}
public MessageDetectorAmountUpdate(TileDetector detector, int amount)
{ public MessageDetectorAmountUpdate(TileDetector detector, int amount)
this.x = detector.xCoord; {
this.y = detector.yCoord; this.x = detector.getPos().getX();
this.z = detector.zCoord; this.y = detector.getPos().getY();
this.amount = amount; this.z = detector.getPos().getZ();
} this.amount = amount;
}
@Override
public void fromBytes(ByteBuf buf) @Override
{ public void fromBytes(ByteBuf buf)
x = buf.readInt(); {
y = buf.readInt(); x = buf.readInt();
z = buf.readInt(); y = buf.readInt();
amount = buf.readInt(); z = buf.readInt();
} amount = buf.readInt();
}
@Override
public void toBytes(ByteBuf buf) @Override
{ public void toBytes(ByteBuf buf)
buf.writeInt(x); {
buf.writeInt(y); buf.writeInt(x);
buf.writeInt(z); buf.writeInt(y);
buf.writeInt(amount); buf.writeInt(z);
} buf.writeInt(amount);
}
@Override
public IMessage onMessage(MessageDetectorAmountUpdate message, MessageContext context) @Override
{ public IMessage onMessage(MessageDetectorAmountUpdate message, MessageContext context)
EntityPlayerMP player = context.getServerHandler().playerEntity; {
EntityPlayerMP player = context.getServerHandler().playerEntity;
TileEntity tile = player.worldObj.getTileEntity(message.x, message.y, message.z);
TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.x, message.y, message.z));
if (tile instanceof TileDetector && message.amount >= 0)
{ if (tile instanceof TileDetector && message.amount >= 0)
((TileDetector) tile).setAmount(message.amount); {
} ((TileDetector) tile).setAmount(message.amount);
}
return null;
} return null;
} }
}

View File

@@ -1,71 +1,72 @@
package storagecraft.network; package storagecraft.network;
import cpw.mods.fml.common.network.simpleimpl.IMessage; import io.netty.buffer.ByteBuf;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; import net.minecraft.entity.player.EntityPlayerMP;
import cpw.mods.fml.common.network.simpleimpl.MessageContext; import net.minecraft.tileentity.TileEntity;
import io.netty.buffer.ByteBuf; import net.minecraft.util.BlockPos;
import net.minecraft.entity.player.EntityPlayerMP; import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import net.minecraft.tileentity.TileEntity; import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
import storagecraft.tile.TileDetector; import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
import storagecraft.tile.TileDetector;
public class MessageDetectorModeUpdate implements IMessage, IMessageHandler<MessageDetectorModeUpdate, IMessage>
{ public class MessageDetectorModeUpdate implements IMessage, IMessageHandler<MessageDetectorModeUpdate, IMessage>
private int x; {
private int y; private int x;
private int z; private int y;
private int z;
public MessageDetectorModeUpdate()
{ public MessageDetectorModeUpdate()
} {
}
public MessageDetectorModeUpdate(TileDetector detector)
{ public MessageDetectorModeUpdate(TileDetector detector)
this.x = detector.xCoord; {
this.y = detector.yCoord; this.x = detector.getPos().getX();
this.z = detector.zCoord; this.y = detector.getPos().getY();
} this.z = detector.getPos().getZ();
}
@Override
public void fromBytes(ByteBuf buf) @Override
{ public void fromBytes(ByteBuf buf)
x = buf.readInt(); {
y = buf.readInt(); x = buf.readInt();
z = buf.readInt(); y = buf.readInt();
} z = buf.readInt();
}
@Override
public void toBytes(ByteBuf buf) @Override
{ public void toBytes(ByteBuf buf)
buf.writeInt(x); {
buf.writeInt(y); buf.writeInt(x);
buf.writeInt(z); buf.writeInt(y);
} buf.writeInt(z);
}
@Override
public IMessage onMessage(MessageDetectorModeUpdate message, MessageContext context) @Override
{ public IMessage onMessage(MessageDetectorModeUpdate message, MessageContext context)
EntityPlayerMP player = context.getServerHandler().playerEntity; {
EntityPlayerMP player = context.getServerHandler().playerEntity;
TileEntity tile = player.worldObj.getTileEntity(message.x, message.y, message.z);
TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.x, message.y, message.z));
if (tile instanceof TileDetector)
{ if (tile instanceof TileDetector)
TileDetector detector = (TileDetector) tile; {
TileDetector detector = (TileDetector) tile;
switch (detector.getMode())
{ switch (detector.getMode())
case TileDetector.MODE_UNDER: {
detector.setMode(TileDetector.MODE_EQUAL); case TileDetector.MODE_UNDER:
break; detector.setMode(TileDetector.MODE_EQUAL);
case TileDetector.MODE_EQUAL: break;
detector.setMode(TileDetector.MODE_ABOVE); case TileDetector.MODE_EQUAL:
break; detector.setMode(TileDetector.MODE_ABOVE);
case TileDetector.MODE_ABOVE: break;
detector.setMode(TileDetector.MODE_UNDER); case TileDetector.MODE_ABOVE:
break; detector.setMode(TileDetector.MODE_UNDER);
} break;
} }
}
return null;
} return null;
} }
}

View File

@@ -1,75 +1,76 @@
package storagecraft.network; package storagecraft.network;
import cpw.mods.fml.common.network.simpleimpl.IMessage; import io.netty.buffer.ByteBuf;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; import net.minecraft.entity.player.EntityPlayerMP;
import cpw.mods.fml.common.network.simpleimpl.MessageContext; import net.minecraft.item.ItemStack;
import io.netty.buffer.ByteBuf; import net.minecraft.tileentity.TileEntity;
import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.util.BlockPos;
import net.minecraft.item.ItemStack; import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import net.minecraft.tileentity.TileEntity; import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
import storagecraft.tile.TileGrid; import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
import storagecraft.tile.TileGrid;
public class MessageGridCraftingClear implements IMessage, IMessageHandler<MessageGridCraftingClear, IMessage>
{ public class MessageGridCraftingClear implements IMessage, IMessageHandler<MessageGridCraftingClear, IMessage>
private int x; {
private int y; private int x;
private int z; private int y;
private int z;
public MessageGridCraftingClear()
{ public MessageGridCraftingClear()
} {
}
public MessageGridCraftingClear(TileGrid grid)
{ public MessageGridCraftingClear(TileGrid grid)
this.x = grid.xCoord; {
this.y = grid.yCoord; this.x = grid.getPos().getX();
this.z = grid.zCoord; this.y = grid.getPos().getY();
} this.z = grid.getPos().getZ();
}
@Override
public void fromBytes(ByteBuf buf) @Override
{ public void fromBytes(ByteBuf buf)
x = buf.readInt(); {
y = buf.readInt(); x = buf.readInt();
z = buf.readInt(); y = buf.readInt();
} z = buf.readInt();
}
@Override
public void toBytes(ByteBuf buf) @Override
{ public void toBytes(ByteBuf buf)
buf.writeInt(x); {
buf.writeInt(y); buf.writeInt(x);
buf.writeInt(z); buf.writeInt(y);
} buf.writeInt(z);
}
@Override
public IMessage onMessage(MessageGridCraftingClear message, MessageContext context) @Override
{ public IMessage onMessage(MessageGridCraftingClear message, MessageContext context)
EntityPlayerMP player = context.getServerHandler().playerEntity; {
EntityPlayerMP player = context.getServerHandler().playerEntity;
TileEntity tile = player.worldObj.getTileEntity(message.x, message.y, message.z);
TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.x, message.y, message.z));
if (tile instanceof TileGrid)
{ if (tile instanceof TileGrid)
TileGrid grid = (TileGrid) tile; {
TileGrid grid = (TileGrid) tile;
if (grid.isConnected())
{ if (grid.isConnected())
for (int i = 0; i < grid.getCraftingMatrix().getSizeInventory(); ++i) {
{ for (int i = 0; i < grid.getCraftingMatrix().getSizeInventory(); ++i)
ItemStack slot = grid.getCraftingMatrix().getStackInSlot(i); {
ItemStack slot = grid.getCraftingMatrix().getStackInSlot(i);
if (slot != null)
{ if (slot != null)
if (grid.getController().push(slot)) {
{ if (grid.getController().push(slot))
grid.getCraftingMatrix().setInventorySlotContents(i, null); {
} grid.getCraftingMatrix().setInventorySlotContents(i, null);
} }
} }
} }
} }
}
return null;
} return null;
} }
}

View File

@@ -1,77 +1,78 @@
package storagecraft.network; package storagecraft.network;
import cpw.mods.fml.common.network.ByteBufUtils; import io.netty.buffer.ByteBuf;
import cpw.mods.fml.common.network.simpleimpl.IMessage; import net.minecraft.client.Minecraft;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; import net.minecraft.item.ItemStack;
import cpw.mods.fml.common.network.simpleimpl.MessageContext; import net.minecraft.tileentity.TileEntity;
import io.netty.buffer.ByteBuf; import net.minecraft.util.BlockPos;
import net.minecraft.client.Minecraft; import net.minecraftforge.fml.common.network.ByteBufUtils;
import net.minecraft.item.ItemStack; import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import net.minecraft.tileentity.TileEntity; import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
import storagecraft.tile.TileGrid; import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
import storagecraft.tile.TileGrid;
public class MessageGridCraftingUpdate implements IMessage, IMessageHandler<MessageGridCraftingUpdate, IMessage>
{ public class MessageGridCraftingUpdate implements IMessage, IMessageHandler<MessageGridCraftingUpdate, IMessage>
private int x; {
private int y; private int x;
private int z; private int y;
private ItemStack[] craftingMatrix = new ItemStack[9]; private int z;
private ItemStack[] craftingMatrix = new ItemStack[9];
public MessageGridCraftingUpdate()
{ public MessageGridCraftingUpdate()
} {
}
public MessageGridCraftingUpdate(TileGrid grid)
{ public MessageGridCraftingUpdate(TileGrid grid)
this.x = grid.xCoord; {
this.y = grid.yCoord; this.x = grid.getPos().getX();
this.z = grid.zCoord; this.y = grid.getPos().getY();
this.z = grid.getPos().getZ();
for (int i = 0; i < 9; ++i)
{ for (int i = 0; i < 9; ++i)
craftingMatrix[i] = grid.getCraftingMatrix().getStackInSlot(i); {
} craftingMatrix[i] = grid.getCraftingMatrix().getStackInSlot(i);
} }
}
@Override
public void fromBytes(ByteBuf buf) @Override
{ public void fromBytes(ByteBuf buf)
x = buf.readInt(); {
y = buf.readInt(); x = buf.readInt();
z = buf.readInt(); y = buf.readInt();
z = buf.readInt();
for (int i = 0; i < 9; ++i)
{ for (int i = 0; i < 9; ++i)
craftingMatrix[i] = ByteBufUtils.readItemStack(buf); {
} craftingMatrix[i] = ByteBufUtils.readItemStack(buf);
} }
}
@Override
public void toBytes(ByteBuf buf) @Override
{ public void toBytes(ByteBuf buf)
buf.writeInt(x); {
buf.writeInt(y); buf.writeInt(x);
buf.writeInt(z); buf.writeInt(y);
buf.writeInt(z);
for (ItemStack stack : craftingMatrix)
{ for (ItemStack stack : craftingMatrix)
ByteBufUtils.writeItemStack(buf, stack); {
} ByteBufUtils.writeItemStack(buf, stack);
} }
}
@Override
public IMessage onMessage(MessageGridCraftingUpdate message, MessageContext context) @Override
{ public IMessage onMessage(MessageGridCraftingUpdate message, MessageContext context)
TileEntity tile = Minecraft.getMinecraft().theWorld.getTileEntity(message.x, message.y, message.z); {
TileEntity tile = Minecraft.getMinecraft().theWorld.getTileEntity(new BlockPos(message.x, message.y, message.z));
if (tile instanceof TileGrid)
{ if (tile instanceof TileGrid)
for (int i = 0; i < 9; ++i) {
{ for (int i = 0; i < 9; ++i)
((TileGrid) tile).getCraftingMatrix().setInventorySlotContents(i, message.craftingMatrix[i]); {
} ((TileGrid) tile).getCraftingMatrix().setInventorySlotContents(i, message.craftingMatrix[i]);
} }
}
return null;
} return null;
} }
}

View File

@@ -1,60 +1,61 @@
package storagecraft.network; package storagecraft.network;
import cpw.mods.fml.common.network.simpleimpl.IMessage; import io.netty.buffer.ByteBuf;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; import net.minecraft.entity.player.EntityPlayerMP;
import cpw.mods.fml.common.network.simpleimpl.MessageContext; import net.minecraft.tileentity.TileEntity;
import io.netty.buffer.ByteBuf; import net.minecraft.util.BlockPos;
import net.minecraft.entity.player.EntityPlayerMP; import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import net.minecraft.tileentity.TileEntity; import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
import storagecraft.tile.TileImporter; import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
import storagecraft.tile.TileImporter;
public class MessageImporterModeUpdate implements IMessage, IMessageHandler<MessageImporterModeUpdate, IMessage>
{ public class MessageImporterModeUpdate implements IMessage, IMessageHandler<MessageImporterModeUpdate, IMessage>
private int x; {
private int y; private int x;
private int z; private int y;
private int z;
public MessageImporterModeUpdate()
{ public MessageImporterModeUpdate()
} {
}
public MessageImporterModeUpdate(TileImporter importer)
{ public MessageImporterModeUpdate(TileImporter importer)
this.x = importer.xCoord; {
this.y = importer.yCoord; this.x = importer.getPos().getX();
this.z = importer.zCoord; this.y = importer.getPos().getY();
} this.z = importer.getPos().getZ();
}
@Override
public void fromBytes(ByteBuf buf) @Override
{ public void fromBytes(ByteBuf buf)
x = buf.readInt(); {
y = buf.readInt(); x = buf.readInt();
z = buf.readInt(); y = buf.readInt();
} z = buf.readInt();
}
@Override
public void toBytes(ByteBuf buf) @Override
{ public void toBytes(ByteBuf buf)
buf.writeInt(x); {
buf.writeInt(y); buf.writeInt(x);
buf.writeInt(z); buf.writeInt(y);
} buf.writeInt(z);
}
@Override
public IMessage onMessage(MessageImporterModeUpdate message, MessageContext context) @Override
{ public IMessage onMessage(MessageImporterModeUpdate message, MessageContext context)
EntityPlayerMP player = context.getServerHandler().playerEntity; {
EntityPlayerMP player = context.getServerHandler().playerEntity;
TileEntity tile = player.worldObj.getTileEntity(message.x, message.y, message.z);
TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.x, message.y, message.z));
if (tile instanceof TileImporter)
{ if (tile instanceof TileImporter)
TileImporter importer = (TileImporter) tile; {
TileImporter importer = (TileImporter) tile;
importer.setMode(importer.getMode() == TileImporter.MODE_WHITELIST ? TileImporter.MODE_BLACKLIST : TileImporter.MODE_WHITELIST);
} importer.setMode(importer.getMode() == TileImporter.MODE_WHITELIST ? TileImporter.MODE_BLACKLIST : TileImporter.MODE_WHITELIST);
}
return null;
} return null;
} }
}

View File

@@ -1,60 +1,61 @@
package storagecraft.network; package storagecraft.network;
import cpw.mods.fml.common.network.simpleimpl.IMessage; import io.netty.buffer.ByteBuf;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; import net.minecraft.entity.player.EntityPlayerMP;
import cpw.mods.fml.common.network.simpleimpl.MessageContext; import net.minecraft.tileentity.TileEntity;
import io.netty.buffer.ByteBuf; import net.minecraft.util.BlockPos;
import net.minecraft.entity.player.EntityPlayerMP; import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import net.minecraft.tileentity.TileEntity; import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
import storagecraft.tile.IRedstoneModeSetting; import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
import storagecraft.tile.IRedstoneModeSetting;
public class MessageRedstoneModeUpdate implements IMessage, IMessageHandler<MessageRedstoneModeUpdate, IMessage>
{ public class MessageRedstoneModeUpdate implements IMessage, IMessageHandler<MessageRedstoneModeUpdate, IMessage>
private int x; {
private int y; private int x;
private int z; private int y;
private int z;
public MessageRedstoneModeUpdate()
{ public MessageRedstoneModeUpdate()
} {
}
public MessageRedstoneModeUpdate(IRedstoneModeSetting setting)
{ public MessageRedstoneModeUpdate(IRedstoneModeSetting setting)
this.x = setting.getX(); {
this.y = setting.getY(); this.x = setting.getPos().getX();
this.z = setting.getZ(); this.y = setting.getPos().getY();
} this.z = setting.getPos().getZ();
}
@Override
public void fromBytes(ByteBuf buf) @Override
{ public void fromBytes(ByteBuf buf)
x = buf.readInt(); {
y = buf.readInt(); x = buf.readInt();
z = buf.readInt(); y = buf.readInt();
} z = buf.readInt();
}
@Override
public void toBytes(ByteBuf buf) @Override
{ public void toBytes(ByteBuf buf)
buf.writeInt(x); {
buf.writeInt(y); buf.writeInt(x);
buf.writeInt(z); buf.writeInt(y);
} buf.writeInt(z);
}
@Override
public IMessage onMessage(MessageRedstoneModeUpdate message, MessageContext context) @Override
{ public IMessage onMessage(MessageRedstoneModeUpdate message, MessageContext context)
EntityPlayerMP player = context.getServerHandler().playerEntity; {
EntityPlayerMP player = context.getServerHandler().playerEntity;
TileEntity tile = player.worldObj.getTileEntity(message.x, message.y, message.z);
TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.x, message.y, message.z));
if (tile instanceof IRedstoneModeSetting)
{ if (tile instanceof IRedstoneModeSetting)
IRedstoneModeSetting setting = (IRedstoneModeSetting) tile; {
IRedstoneModeSetting setting = (IRedstoneModeSetting) tile;
setting.setRedstoneMode(setting.getRedstoneMode().next());
} setting.setRedstoneMode(setting.getRedstoneMode().next());
}
return null;
} return null;
} }
}

View File

@@ -1,107 +1,108 @@
package storagecraft.network; package storagecraft.network;
import cpw.mods.fml.common.network.simpleimpl.IMessage; import io.netty.buffer.ByteBuf;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; import net.minecraft.entity.player.EntityPlayerMP;
import cpw.mods.fml.common.network.simpleimpl.MessageContext; import net.minecraft.item.ItemStack;
import io.netty.buffer.ByteBuf; import net.minecraft.tileentity.TileEntity;
import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.util.BlockPos;
import net.minecraft.item.ItemStack; import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import net.minecraft.tileentity.TileEntity; import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
import storagecraft.storage.StorageItem; import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
import storagecraft.tile.TileController; import storagecraft.storage.StorageItem;
import storagecraft.tile.TileController;
public class MessageStoragePull implements IMessage, IMessageHandler<MessageStoragePull, IMessage>
{ public class MessageStoragePull implements IMessage, IMessageHandler<MessageStoragePull, IMessage>
private int x; {
private int y; private int x;
private int z; private int y;
private int id; private int z;
private boolean half; private int id;
private boolean shift; private boolean half;
private boolean shift;
public MessageStoragePull()
{ public MessageStoragePull()
} {
}
public MessageStoragePull(int x, int y, int z, int id, boolean half, boolean shift)
{ public MessageStoragePull(int x, int y, int z, int id, boolean half, boolean shift)
this.x = x; {
this.y = y; this.x = x;
this.z = z; this.y = y;
this.id = id; this.z = z;
this.half = half; this.id = id;
this.shift = shift; this.half = half;
} this.shift = shift;
}
@Override
public void fromBytes(ByteBuf buf) @Override
{ public void fromBytes(ByteBuf buf)
x = buf.readInt(); {
y = buf.readInt(); x = buf.readInt();
z = buf.readInt(); y = buf.readInt();
id = buf.readInt(); z = buf.readInt();
half = buf.readBoolean(); id = buf.readInt();
shift = buf.readBoolean(); half = buf.readBoolean();
} shift = buf.readBoolean();
}
@Override
public void toBytes(ByteBuf buf) @Override
{ public void toBytes(ByteBuf buf)
buf.writeInt(x); {
buf.writeInt(y); buf.writeInt(x);
buf.writeInt(z); buf.writeInt(y);
buf.writeInt(id); buf.writeInt(z);
buf.writeBoolean(half); buf.writeInt(id);
buf.writeBoolean(shift); buf.writeBoolean(half);
} buf.writeBoolean(shift);
}
@Override
public IMessage onMessage(MessageStoragePull message, MessageContext context) @Override
{ public IMessage onMessage(MessageStoragePull message, MessageContext context)
EntityPlayerMP player = context.getServerHandler().playerEntity; {
EntityPlayerMP player = context.getServerHandler().playerEntity;
TileEntity tile = player.worldObj.getTileEntity(message.x, message.y, message.z);
TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.x, message.y, message.z));
if (tile instanceof TileController)
{ if (tile instanceof TileController)
TileController controller = (TileController) tile; {
TileController controller = (TileController) tile;
if (message.id < controller.getItems().size())
{ if (message.id < controller.getItems().size())
StorageItem item = controller.getItems().get(message.id); {
StorageItem item = controller.getItems().get(message.id);
int quantity = 64;
int quantity = 64;
if (message.half && item.getQuantity() > 1)
{ if (message.half && item.getQuantity() > 1)
quantity = item.getQuantity() / 2; {
quantity = item.getQuantity() / 2;
if (quantity > 64)
{ if (quantity > 64)
quantity = 64; {
} quantity = 64;
} }
}
ItemStack took = controller.take(item.copy(quantity).toItemStack());
ItemStack took = controller.take(item.copy(quantity).toItemStack());
if (took != null)
{ if (took != null)
if (message.shift) {
{ if (message.shift)
if (!player.inventory.addItemStackToInventory(took.copy())) {
{ if (!player.inventory.addItemStackToInventory(took.copy()))
controller.push(took); {
} controller.push(took);
} }
else }
{ else
player.inventory.setItemStack(took); {
player.updateHeldItem(); player.inventory.setItemStack(took);
} player.updateHeldItem();
} }
} }
} }
}
return null;
} return null;
} }
}

View File

@@ -1,114 +1,115 @@
package storagecraft.network; package storagecraft.network;
import cpw.mods.fml.common.network.simpleimpl.IMessage; import io.netty.buffer.ByteBuf;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; import net.minecraft.entity.player.EntityPlayerMP;
import cpw.mods.fml.common.network.simpleimpl.MessageContext; import net.minecraft.item.ItemStack;
import io.netty.buffer.ByteBuf; import net.minecraft.tileentity.TileEntity;
import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.util.BlockPos;
import net.minecraft.item.ItemStack; import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import net.minecraft.tileentity.TileEntity; import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
import storagecraft.tile.TileController; import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
import storagecraft.tile.TileController;
public class MessageStoragePush implements IMessage, IMessageHandler<MessageStoragePush, IMessage>
{ public class MessageStoragePush implements IMessage, IMessageHandler<MessageStoragePush, IMessage>
private int x; {
private int y; private int x;
private int z; private int y;
private int slot; private int z;
private boolean one; private int slot;
private boolean one;
public MessageStoragePush()
{ public MessageStoragePush()
} {
}
public MessageStoragePush(int x, int y, int z, int slot, boolean one)
{ public MessageStoragePush(int x, int y, int z, int slot, boolean one)
this.x = x; {
this.y = y; this.x = x;
this.z = z; this.y = y;
this.slot = slot; this.z = z;
this.one = one; this.slot = slot;
} this.one = one;
}
@Override
public void fromBytes(ByteBuf buf) @Override
{ public void fromBytes(ByteBuf buf)
x = buf.readInt(); {
y = buf.readInt(); x = buf.readInt();
z = buf.readInt(); y = buf.readInt();
slot = buf.readInt(); z = buf.readInt();
one = buf.readBoolean(); slot = buf.readInt();
} one = buf.readBoolean();
}
@Override
public void toBytes(ByteBuf buf) @Override
{ public void toBytes(ByteBuf buf)
buf.writeInt(x); {
buf.writeInt(y); buf.writeInt(x);
buf.writeInt(z); buf.writeInt(y);
buf.writeInt(slot); buf.writeInt(z);
buf.writeBoolean(one); buf.writeInt(slot);
} buf.writeBoolean(one);
}
@Override
public IMessage onMessage(MessageStoragePush message, MessageContext context) @Override
{ public IMessage onMessage(MessageStoragePush message, MessageContext context)
EntityPlayerMP player = context.getServerHandler().playerEntity; {
EntityPlayerMP player = context.getServerHandler().playerEntity;
TileEntity tile = player.worldObj.getTileEntity(message.x, message.y, message.z);
TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.x, message.y, message.z));
if (tile instanceof TileController)
{ if (tile instanceof TileController)
TileController controller = (TileController) tile; {
TileController controller = (TileController) tile;
ItemStack stack;
ItemStack stack;
if (message.slot == -1)
{ if (message.slot == -1)
stack = player.inventory.getItemStack().copy(); {
stack = player.inventory.getItemStack().copy();
if (message.one)
{ if (message.one)
stack.stackSize = 1; {
} stack.stackSize = 1;
} }
else }
{ else
stack = player.inventory.getStackInSlot(message.slot); {
} stack = player.inventory.getStackInSlot(message.slot);
}
if (stack != null)
{ if (stack != null)
boolean success = controller.push(stack); {
boolean success = controller.push(stack);
if (success)
{ if (success)
if (message.slot == -1) {
{ if (message.slot == -1)
if (message.one) {
{ if (message.one)
player.inventory.getItemStack().stackSize--; {
player.inventory.getItemStack().stackSize--;
if (player.inventory.getItemStack().stackSize == 0)
{ if (player.inventory.getItemStack().stackSize == 0)
player.inventory.setItemStack(null); {
} player.inventory.setItemStack(null);
} }
else }
{ else
player.inventory.setItemStack(null); {
} player.inventory.setItemStack(null);
}
player.updateHeldItem();
} player.updateHeldItem();
else }
{ else
player.inventory.setInventorySlotContents(message.slot, null); {
} player.inventory.setInventorySlotContents(message.slot, null);
} }
} }
} }
}
return null;
} return null;
} }
}

View File

@@ -1,63 +1,64 @@
package storagecraft.network; package storagecraft.network;
import cpw.mods.fml.common.network.simpleimpl.IMessage; import io.netty.buffer.ByteBuf;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; import net.minecraft.client.Minecraft;
import cpw.mods.fml.common.network.simpleimpl.MessageContext; import net.minecraft.tileentity.TileEntity;
import io.netty.buffer.ByteBuf; import net.minecraft.util.BlockPos;
import net.minecraft.client.Minecraft; import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import net.minecraft.tileentity.TileEntity; import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
import storagecraft.tile.INetworkTile; import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
import storagecraft.tile.INetworkTile;
public class MessageTileUpdate implements IMessage, IMessageHandler<MessageTileUpdate, IMessage>
{ public class MessageTileUpdate implements IMessage, IMessageHandler<MessageTileUpdate, IMessage>
private TileEntity tile; {
private int x; private TileEntity tile;
private int y; private int x;
private int z; private int y;
private int z;
public MessageTileUpdate()
{ public MessageTileUpdate()
} {
}
public MessageTileUpdate(TileEntity tile)
{ public MessageTileUpdate(TileEntity tile)
this.tile = tile; {
} this.tile = tile;
}
@Override
public void fromBytes(ByteBuf buf) @Override
{ public void fromBytes(ByteBuf buf)
x = buf.readInt(); {
y = buf.readInt(); x = buf.readInt();
z = buf.readInt(); y = buf.readInt();
z = buf.readInt();
if (Minecraft.getMinecraft().theWorld != null)
{ if (Minecraft.getMinecraft().theWorld != null)
tile = Minecraft.getMinecraft().theWorld.getTileEntity(x, y, z); {
tile = Minecraft.getMinecraft().theWorld.getTileEntity(new BlockPos(x, y, z));
if (tile instanceof INetworkTile)
{ if (tile instanceof INetworkTile)
((INetworkTile) tile).fromBytes(buf); {
} ((INetworkTile) tile).fromBytes(buf);
} }
} }
}
@Override
public void toBytes(ByteBuf buf) @Override
{ public void toBytes(ByteBuf buf)
buf.writeInt(tile.xCoord); {
buf.writeInt(tile.yCoord); buf.writeInt(tile.getPos().getX());
buf.writeInt(tile.zCoord); buf.writeInt(tile.getPos().getY());
buf.writeInt(tile.getPos().getZ());
if (tile instanceof INetworkTile)
{ if (tile instanceof INetworkTile)
((INetworkTile) tile).toBytes(buf); {
} ((INetworkTile) tile).toBytes(buf);
} }
}
@Override
public IMessage onMessage(MessageTileUpdate message, MessageContext ctx) @Override
{ public IMessage onMessage(MessageTileUpdate message, MessageContext ctx)
return null; {
} return null;
} }
}

View File

@@ -1,23 +1,23 @@
package storagecraft.proxy; package storagecraft.proxy;
import cpw.mods.fml.client.registry.ClientRegistry; import net.minecraft.item.Item;
import cpw.mods.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.client.MinecraftForgeClient;
import net.minecraft.item.Item; import net.minecraftforge.fml.client.registry.ClientRegistry;
import net.minecraftforge.client.MinecraftForgeClient; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import storagecraft.StorageCraftBlocks; import storagecraft.StorageCraftBlocks;
import storagecraft.render.BlockCableRenderer; import storagecraft.render.BlockCableRenderer;
import storagecraft.render.ItemCableRenderer; import storagecraft.render.ItemCableRenderer;
import storagecraft.tile.TileCable; import storagecraft.tile.TileCable;
public class ClientProxy extends CommonProxy public class ClientProxy extends CommonProxy
{ {
@Override @Override
public void preInit(FMLPreInitializationEvent e) public void preInit(FMLPreInitializationEvent e)
{ {
super.preInit(e); super.preInit(e);
ClientRegistry.bindTileEntitySpecialRenderer(TileCable.class, new BlockCableRenderer()); ClientRegistry.bindTileEntitySpecialRenderer(TileCable.class, new BlockCableRenderer());
MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(StorageCraftBlocks.CABLE), new ItemCableRenderer()); MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(StorageCraftBlocks.CABLE), new ItemCableRenderer());
} }
} }

View File

@@ -1,379 +1,379 @@
package storagecraft.proxy; package storagecraft.proxy;
import cpw.mods.fml.common.event.FMLInitializationEvent; import net.minecraft.init.Blocks;
import cpw.mods.fml.common.event.FMLPostInitializationEvent; import net.minecraft.init.Items;
import cpw.mods.fml.common.event.FMLPreInitializationEvent; import net.minecraft.item.ItemStack;
import cpw.mods.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.registry.GameRegistry; import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.relauncher.Side; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraft.init.Blocks; import net.minecraftforge.fml.common.network.NetworkRegistry;
import net.minecraft.init.Items; import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraft.item.ItemStack; import net.minecraftforge.fml.relauncher.Side;
import storagecraft.StorageCraft; import storagecraft.StorageCraft;
import storagecraft.StorageCraftBlocks; import storagecraft.StorageCraftBlocks;
import storagecraft.StorageCraftItems; import storagecraft.StorageCraftItems;
import storagecraft.gui.GuiHandler; import storagecraft.gui.GuiHandler;
import storagecraft.item.ItemBlockCable; import storagecraft.item.ItemBlockCable;
import storagecraft.item.ItemBlockGrid; import storagecraft.item.ItemBlockGrid;
import storagecraft.item.ItemCore; import storagecraft.item.ItemCore;
import storagecraft.item.ItemProcessor; import storagecraft.item.ItemProcessor;
import storagecraft.item.ItemStorageCell; import storagecraft.item.ItemStorageCell;
import storagecraft.item.ItemStoragePart; import storagecraft.item.ItemStoragePart;
import storagecraft.network.MessageCompareUpdate; import storagecraft.network.MessageCompareUpdate;
import storagecraft.network.MessageDetectorAmountUpdate; import storagecraft.network.MessageDetectorAmountUpdate;
import storagecraft.network.MessageDetectorModeUpdate; import storagecraft.network.MessageDetectorModeUpdate;
import storagecraft.network.MessageGridCraftingClear; import storagecraft.network.MessageGridCraftingClear;
import storagecraft.network.MessageGridCraftingUpdate; import storagecraft.network.MessageGridCraftingUpdate;
import storagecraft.network.MessageImporterModeUpdate; import storagecraft.network.MessageImporterModeUpdate;
import storagecraft.network.MessageRedstoneModeUpdate; import storagecraft.network.MessageRedstoneModeUpdate;
import storagecraft.network.MessageStoragePull; import storagecraft.network.MessageStoragePull;
import storagecraft.network.MessageStoragePush; import storagecraft.network.MessageStoragePush;
import storagecraft.network.MessageTileUpdate; import storagecraft.network.MessageTileUpdate;
import storagecraft.tile.TileCable; import storagecraft.tile.TileCable;
import storagecraft.tile.TileConstructor; import storagecraft.tile.TileConstructor;
import storagecraft.tile.TileController; import storagecraft.tile.TileController;
import storagecraft.tile.TileDestructor; import storagecraft.tile.TileDestructor;
import storagecraft.tile.TileDetector; import storagecraft.tile.TileDetector;
import storagecraft.tile.TileDrive; import storagecraft.tile.TileDrive;
import storagecraft.tile.TileExporter; import storagecraft.tile.TileExporter;
import storagecraft.tile.TileGrid; import storagecraft.tile.TileGrid;
import storagecraft.tile.TileImporter; import storagecraft.tile.TileImporter;
import storagecraft.tile.TileSolderer; import storagecraft.tile.TileSolderer;
import storagecraft.tile.TileExternalStorage; import storagecraft.tile.TileExternalStorage;
import storagecraft.tile.TileWirelessTransmitter; import storagecraft.tile.TileWirelessTransmitter;
import storagecraft.tile.solderer.SoldererRecipeCraftingGrid; import storagecraft.tile.solderer.SoldererRecipeCraftingGrid;
import storagecraft.tile.solderer.SoldererRecipeDrive; import storagecraft.tile.solderer.SoldererRecipeDrive;
import storagecraft.tile.solderer.SoldererRecipePrintedProcessor; import storagecraft.tile.solderer.SoldererRecipePrintedProcessor;
import storagecraft.tile.solderer.SoldererRecipeProcessor; import storagecraft.tile.solderer.SoldererRecipeProcessor;
import storagecraft.tile.solderer.SoldererRecipeWirelessGrid; import storagecraft.tile.solderer.SoldererRecipeWirelessGrid;
import storagecraft.tile.solderer.SoldererRegistry; import storagecraft.tile.solderer.SoldererRegistry;
public class CommonProxy public class CommonProxy
{ {
public void preInit(FMLPreInitializationEvent e) public void preInit(FMLPreInitializationEvent e)
{ {
StorageCraft.NETWORK.registerMessage(MessageTileUpdate.class, MessageTileUpdate.class, 0, Side.CLIENT); StorageCraft.NETWORK.registerMessage(MessageTileUpdate.class, MessageTileUpdate.class, 0, Side.CLIENT);
StorageCraft.NETWORK.registerMessage(MessageRedstoneModeUpdate.class, MessageRedstoneModeUpdate.class, 1, Side.SERVER); StorageCraft.NETWORK.registerMessage(MessageRedstoneModeUpdate.class, MessageRedstoneModeUpdate.class, 1, Side.SERVER);
StorageCraft.NETWORK.registerMessage(MessageStoragePush.class, MessageStoragePush.class, 2, Side.SERVER); StorageCraft.NETWORK.registerMessage(MessageStoragePush.class, MessageStoragePush.class, 2, Side.SERVER);
StorageCraft.NETWORK.registerMessage(MessageStoragePull.class, MessageStoragePull.class, 3, Side.SERVER); StorageCraft.NETWORK.registerMessage(MessageStoragePull.class, MessageStoragePull.class, 3, Side.SERVER);
StorageCraft.NETWORK.registerMessage(MessageCompareUpdate.class, MessageCompareUpdate.class, 4, Side.SERVER); StorageCraft.NETWORK.registerMessage(MessageCompareUpdate.class, MessageCompareUpdate.class, 4, Side.SERVER);
StorageCraft.NETWORK.registerMessage(MessageImporterModeUpdate.class, MessageImporterModeUpdate.class, 5, Side.SERVER); StorageCraft.NETWORK.registerMessage(MessageImporterModeUpdate.class, MessageImporterModeUpdate.class, 5, Side.SERVER);
StorageCraft.NETWORK.registerMessage(MessageDetectorModeUpdate.class, MessageDetectorModeUpdate.class, 6, Side.SERVER); StorageCraft.NETWORK.registerMessage(MessageDetectorModeUpdate.class, MessageDetectorModeUpdate.class, 6, Side.SERVER);
StorageCraft.NETWORK.registerMessage(MessageDetectorAmountUpdate.class, MessageDetectorAmountUpdate.class, 7, Side.SERVER); StorageCraft.NETWORK.registerMessage(MessageDetectorAmountUpdate.class, MessageDetectorAmountUpdate.class, 7, Side.SERVER);
StorageCraft.NETWORK.registerMessage(MessageGridCraftingUpdate.class, MessageGridCraftingUpdate.class, 8, Side.CLIENT); StorageCraft.NETWORK.registerMessage(MessageGridCraftingUpdate.class, MessageGridCraftingUpdate.class, 8, Side.CLIENT);
StorageCraft.NETWORK.registerMessage(MessageGridCraftingClear.class, MessageGridCraftingClear.class, 9, Side.SERVER); StorageCraft.NETWORK.registerMessage(MessageGridCraftingClear.class, MessageGridCraftingClear.class, 9, Side.SERVER);
NetworkRegistry.INSTANCE.registerGuiHandler(StorageCraft.INSTANCE, new GuiHandler()); NetworkRegistry.INSTANCE.registerGuiHandler(StorageCraft.INSTANCE, new GuiHandler());
GameRegistry.registerTileEntity(TileController.class, "controller"); GameRegistry.registerTileEntity(TileController.class, "controller");
GameRegistry.registerTileEntity(TileCable.class, "cable"); GameRegistry.registerTileEntity(TileCable.class, "cable");
GameRegistry.registerTileEntity(TileGrid.class, "grid"); GameRegistry.registerTileEntity(TileGrid.class, "grid");
GameRegistry.registerTileEntity(TileDrive.class, "drive"); GameRegistry.registerTileEntity(TileDrive.class, "drive");
GameRegistry.registerTileEntity(TileExternalStorage.class, "externalStorage"); GameRegistry.registerTileEntity(TileExternalStorage.class, "externalStorage");
GameRegistry.registerTileEntity(TileImporter.class, "importer"); GameRegistry.registerTileEntity(TileImporter.class, "importer");
GameRegistry.registerTileEntity(TileExporter.class, "exporter"); GameRegistry.registerTileEntity(TileExporter.class, "exporter");
GameRegistry.registerTileEntity(TileDetector.class, "detector"); GameRegistry.registerTileEntity(TileDetector.class, "detector");
GameRegistry.registerTileEntity(TileSolderer.class, "solderer"); GameRegistry.registerTileEntity(TileSolderer.class, "solderer");
GameRegistry.registerTileEntity(TileWirelessTransmitter.class, "wirelessTransmitter"); GameRegistry.registerTileEntity(TileWirelessTransmitter.class, "wirelessTransmitter");
GameRegistry.registerTileEntity(TileDestructor.class, "destructor"); GameRegistry.registerTileEntity(TileDestructor.class, "destructor");
GameRegistry.registerTileEntity(TileConstructor.class, "constructor"); GameRegistry.registerTileEntity(TileConstructor.class, "constructor");
GameRegistry.registerBlock(StorageCraftBlocks.CONTROLLER, "controller"); GameRegistry.registerBlock(StorageCraftBlocks.CONTROLLER, "controller");
GameRegistry.registerBlock(StorageCraftBlocks.CABLE, ItemBlockCable.class, "cable"); GameRegistry.registerBlock(StorageCraftBlocks.CABLE, ItemBlockCable.class, "cable");
GameRegistry.registerBlock(StorageCraftBlocks.GRID, ItemBlockGrid.class, "grid"); GameRegistry.registerBlock(StorageCraftBlocks.GRID, ItemBlockGrid.class, "grid");
GameRegistry.registerBlock(StorageCraftBlocks.DRIVE, "drive"); GameRegistry.registerBlock(StorageCraftBlocks.DRIVE, "drive");
GameRegistry.registerBlock(StorageCraftBlocks.EXTERNAL_STORAGE, "externalStorage"); GameRegistry.registerBlock(StorageCraftBlocks.EXTERNAL_STORAGE, "externalStorage");
GameRegistry.registerBlock(StorageCraftBlocks.IMPORTER, "importer"); GameRegistry.registerBlock(StorageCraftBlocks.IMPORTER, "importer");
GameRegistry.registerBlock(StorageCraftBlocks.EXPORTER, "exporter"); GameRegistry.registerBlock(StorageCraftBlocks.EXPORTER, "exporter");
GameRegistry.registerBlock(StorageCraftBlocks.DETECTOR, "detector"); GameRegistry.registerBlock(StorageCraftBlocks.DETECTOR, "detector");
GameRegistry.registerBlock(StorageCraftBlocks.MACHINE_CASING, "machineCasing"); GameRegistry.registerBlock(StorageCraftBlocks.MACHINE_CASING, "machineCasing");
GameRegistry.registerBlock(StorageCraftBlocks.SOLDERER, "solderer"); GameRegistry.registerBlock(StorageCraftBlocks.SOLDERER, "solderer");
GameRegistry.registerBlock(StorageCraftBlocks.WIRELESS_TRANSMITTER, "wirelessTransmitter"); GameRegistry.registerBlock(StorageCraftBlocks.WIRELESS_TRANSMITTER, "wirelessTransmitter");
GameRegistry.registerBlock(StorageCraftBlocks.DESTRUCTOR, "destructor"); GameRegistry.registerBlock(StorageCraftBlocks.DESTRUCTOR, "destructor");
GameRegistry.registerBlock(StorageCraftBlocks.CONSTRUCTOR, "constructor"); GameRegistry.registerBlock(StorageCraftBlocks.CONSTRUCTOR, "constructor");
GameRegistry.registerItem(StorageCraftItems.STORAGE_CELL, "storageCell"); GameRegistry.registerItem(StorageCraftItems.STORAGE_CELL, "storageCell");
GameRegistry.registerItem(StorageCraftItems.WIRELESS_GRID, "wirelessGrid"); GameRegistry.registerItem(StorageCraftItems.WIRELESS_GRID, "wirelessGrid");
GameRegistry.registerItem(StorageCraftItems.WIRELESS_GRID_PLATE, "wirelessGridPlate"); GameRegistry.registerItem(StorageCraftItems.WIRELESS_GRID_PLATE, "wirelessGridPlate");
GameRegistry.registerItem(StorageCraftItems.QUARTZ_ENRICHED_IRON, "storigiumIngot"); GameRegistry.registerItem(StorageCraftItems.QUARTZ_ENRICHED_IRON, "storigiumIngot");
GameRegistry.registerItem(StorageCraftItems.CORE, "core"); GameRegistry.registerItem(StorageCraftItems.CORE, "core");
GameRegistry.registerItem(StorageCraftItems.SILICON, "silicon"); GameRegistry.registerItem(StorageCraftItems.SILICON, "silicon");
GameRegistry.registerItem(StorageCraftItems.PROCESSOR, "processor"); GameRegistry.registerItem(StorageCraftItems.PROCESSOR, "processor");
GameRegistry.registerItem(StorageCraftItems.STORAGE_PART, "storagePart"); GameRegistry.registerItem(StorageCraftItems.STORAGE_PART, "storagePart");
// Processors // Processors
SoldererRegistry.addRecipe(new SoldererRecipePrintedProcessor(ItemProcessor.TYPE_PRINTED_BASIC)); SoldererRegistry.addRecipe(new SoldererRecipePrintedProcessor(ItemProcessor.TYPE_PRINTED_BASIC));
SoldererRegistry.addRecipe(new SoldererRecipePrintedProcessor(ItemProcessor.TYPE_PRINTED_IMPROVED)); SoldererRegistry.addRecipe(new SoldererRecipePrintedProcessor(ItemProcessor.TYPE_PRINTED_IMPROVED));
SoldererRegistry.addRecipe(new SoldererRecipePrintedProcessor(ItemProcessor.TYPE_PRINTED_ADVANCED)); SoldererRegistry.addRecipe(new SoldererRecipePrintedProcessor(ItemProcessor.TYPE_PRINTED_ADVANCED));
SoldererRegistry.addRecipe(new SoldererRecipePrintedProcessor(ItemProcessor.TYPE_PRINTED_SILICON)); SoldererRegistry.addRecipe(new SoldererRecipePrintedProcessor(ItemProcessor.TYPE_PRINTED_SILICON));
SoldererRegistry.addRecipe(new SoldererRecipeProcessor(ItemProcessor.TYPE_BASIC)); SoldererRegistry.addRecipe(new SoldererRecipeProcessor(ItemProcessor.TYPE_BASIC));
SoldererRegistry.addRecipe(new SoldererRecipeProcessor(ItemProcessor.TYPE_IMPROVED)); SoldererRegistry.addRecipe(new SoldererRecipeProcessor(ItemProcessor.TYPE_IMPROVED));
SoldererRegistry.addRecipe(new SoldererRecipeProcessor(ItemProcessor.TYPE_ADVANCED)); SoldererRegistry.addRecipe(new SoldererRecipeProcessor(ItemProcessor.TYPE_ADVANCED));
// Silicon // Silicon
GameRegistry.addSmelting(Items.quartz, new ItemStack(StorageCraftItems.SILICON), 0.5f); GameRegistry.addSmelting(Items.quartz, new ItemStack(StorageCraftItems.SILICON), 0.5f);
// Quartz Enriched Iron // Quartz Enriched Iron
GameRegistry.addRecipe(new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON, 4), GameRegistry.addRecipe(new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON, 4),
"II", "II",
"IQ", "IQ",
'I', new ItemStack(Items.iron_ingot), 'I', new ItemStack(Items.iron_ingot),
'Q', new ItemStack(Items.quartz) 'Q', new ItemStack(Items.quartz)
); );
// Machine Casing // Machine Casing
GameRegistry.addRecipe(new ItemStack(StorageCraftBlocks.MACHINE_CASING), GameRegistry.addRecipe(new ItemStack(StorageCraftBlocks.MACHINE_CASING),
"EEE", "EEE",
"E E", "E E",
"EEE", "EEE",
'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON) 'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON)
); );
// Construction Core // Construction Core
GameRegistry.addShapelessRecipe(new ItemStack(StorageCraftItems.CORE, 1, ItemCore.TYPE_CONSTRUCTION), GameRegistry.addShapelessRecipe(new ItemStack(StorageCraftItems.CORE, 1, ItemCore.TYPE_CONSTRUCTION),
new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON), new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON),
new ItemStack(StorageCraftItems.PROCESSOR, 1, ItemProcessor.TYPE_BASIC), new ItemStack(StorageCraftItems.PROCESSOR, 1, ItemProcessor.TYPE_BASIC),
new ItemStack(Items.glowstone_dust) new ItemStack(Items.glowstone_dust)
); );
// Destruction Core // Destruction Core
GameRegistry.addShapelessRecipe(new ItemStack(StorageCraftItems.CORE, 1, ItemCore.TYPE_DESTRUCTION), GameRegistry.addShapelessRecipe(new ItemStack(StorageCraftItems.CORE, 1, ItemCore.TYPE_DESTRUCTION),
new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON), new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON),
new ItemStack(StorageCraftItems.PROCESSOR, 1, ItemProcessor.TYPE_BASIC), new ItemStack(StorageCraftItems.PROCESSOR, 1, ItemProcessor.TYPE_BASIC),
new ItemStack(Items.quartz) new ItemStack(Items.quartz)
); );
// Controller // Controller
GameRegistry.addRecipe(new ItemStack(StorageCraftBlocks.CONTROLLER), GameRegistry.addRecipe(new ItemStack(StorageCraftBlocks.CONTROLLER),
"EDE", "EDE",
"SRS", "SRS",
"ESE", "ESE",
'D', new ItemStack(Items.diamond), 'D', new ItemStack(Items.diamond),
'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON), 'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON),
'R', new ItemStack(Items.redstone), 'R', new ItemStack(Items.redstone),
'S', new ItemStack(StorageCraftItems.SILICON) 'S', new ItemStack(StorageCraftItems.SILICON)
); );
// Solderer // Solderer
GameRegistry.addRecipe(new ItemStack(StorageCraftBlocks.SOLDERER), GameRegistry.addRecipe(new ItemStack(StorageCraftBlocks.SOLDERER),
"ESE", "ESE",
"E E", "E E",
"ESE", "ESE",
'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON), 'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON),
'S', new ItemStack(Blocks.sticky_piston) 'S', new ItemStack(Blocks.sticky_piston)
); );
// Drive // Drive
SoldererRegistry.addRecipe(new SoldererRecipeDrive()); SoldererRegistry.addRecipe(new SoldererRecipeDrive());
// Cable // Cable
GameRegistry.addRecipe(new ItemStack(StorageCraftBlocks.CABLE, 6, 0), GameRegistry.addRecipe(new ItemStack(StorageCraftBlocks.CABLE, 6, 0),
"EEE", "EEE",
"GRG", "GRG",
"EEE", "EEE",
'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON), 'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON),
'G', new ItemStack(Blocks.glass), 'G', new ItemStack(Blocks.glass),
'R', new ItemStack(Items.redstone) 'R', new ItemStack(Items.redstone)
); );
// Sensitive Cable // Sensitive Cable
GameRegistry.addShapelessRecipe(new ItemStack(StorageCraftBlocks.CABLE, 1, 1), GameRegistry.addShapelessRecipe(new ItemStack(StorageCraftBlocks.CABLE, 1, 1),
new ItemStack(StorageCraftBlocks.CABLE, 1, 0), new ItemStack(StorageCraftBlocks.CABLE, 1, 0),
new ItemStack(Items.redstone) new ItemStack(Items.redstone)
); );
// Grid // Grid
GameRegistry.addRecipe(new ItemStack(StorageCraftBlocks.GRID, 1, 0), GameRegistry.addRecipe(new ItemStack(StorageCraftBlocks.GRID, 1, 0),
"ECE", "ECE",
"PMP", "PMP",
"EDE", "EDE",
'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON), 'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON),
'P', new ItemStack(StorageCraftItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED), 'P', new ItemStack(StorageCraftItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED),
'C', new ItemStack(StorageCraftItems.CORE, 1, ItemCore.TYPE_CONSTRUCTION), 'C', new ItemStack(StorageCraftItems.CORE, 1, ItemCore.TYPE_CONSTRUCTION),
'D', new ItemStack(StorageCraftItems.CORE, 1, ItemCore.TYPE_DESTRUCTION), 'D', new ItemStack(StorageCraftItems.CORE, 1, ItemCore.TYPE_DESTRUCTION),
'M', new ItemStack(StorageCraftBlocks.MACHINE_CASING) 'M', new ItemStack(StorageCraftBlocks.MACHINE_CASING)
); );
// Crafting Grid // Crafting Grid
SoldererRegistry.addRecipe(new SoldererRecipeCraftingGrid()); SoldererRegistry.addRecipe(new SoldererRecipeCraftingGrid());
// Wireless Transmitter // Wireless Transmitter
GameRegistry.addRecipe(new ItemStack(StorageCraftBlocks.WIRELESS_TRANSMITTER), GameRegistry.addRecipe(new ItemStack(StorageCraftBlocks.WIRELESS_TRANSMITTER),
"EPE", "EPE",
"EME", "EME",
"EAE", "EAE",
'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON), 'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON),
'A', new ItemStack(StorageCraftItems.PROCESSOR, 1, ItemProcessor.TYPE_ADVANCED), 'A', new ItemStack(StorageCraftItems.PROCESSOR, 1, ItemProcessor.TYPE_ADVANCED),
'P', new ItemStack(Items.ender_pearl), 'P', new ItemStack(Items.ender_pearl),
'M', new ItemStack(StorageCraftBlocks.MACHINE_CASING) 'M', new ItemStack(StorageCraftBlocks.MACHINE_CASING)
); );
// Wireless Grid Plate // Wireless Grid Plate
GameRegistry.addRecipe(new ItemStack(StorageCraftItems.WIRELESS_GRID_PLATE), GameRegistry.addRecipe(new ItemStack(StorageCraftItems.WIRELESS_GRID_PLATE),
" P ", " P ",
"ERE", "ERE",
"EEE", "EEE",
'P', new ItemStack(Items.ender_pearl), 'P', new ItemStack(Items.ender_pearl),
'R', new ItemStack(Items.redstone), 'R', new ItemStack(Items.redstone),
'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON) 'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON)
); );
// Wireless Grid // Wireless Grid
SoldererRegistry.addRecipe(new SoldererRecipeWirelessGrid(0)); SoldererRegistry.addRecipe(new SoldererRecipeWirelessGrid(0));
SoldererRegistry.addRecipe(new SoldererRecipeWirelessGrid(1)); SoldererRegistry.addRecipe(new SoldererRecipeWirelessGrid(1));
// External Storage // External Storage
GameRegistry.addRecipe(new ItemStack(StorageCraftBlocks.EXTERNAL_STORAGE), GameRegistry.addRecipe(new ItemStack(StorageCraftBlocks.EXTERNAL_STORAGE),
"CED", "CED",
"HMH", "HMH",
"EPE", "EPE",
'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON), 'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON),
'H', new ItemStack(Blocks.chest), 'H', new ItemStack(Blocks.chest),
'C', new ItemStack(StorageCraftItems.CORE, 1, ItemCore.TYPE_CONSTRUCTION), 'C', new ItemStack(StorageCraftItems.CORE, 1, ItemCore.TYPE_CONSTRUCTION),
'D', new ItemStack(StorageCraftItems.CORE, 1, ItemCore.TYPE_DESTRUCTION), 'D', new ItemStack(StorageCraftItems.CORE, 1, ItemCore.TYPE_DESTRUCTION),
'M', new ItemStack(StorageCraftBlocks.MACHINE_CASING), 'M', new ItemStack(StorageCraftBlocks.MACHINE_CASING),
'P', new ItemStack(StorageCraftItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED) 'P', new ItemStack(StorageCraftItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED)
); );
// Importer // Importer
GameRegistry.addShapelessRecipe(new ItemStack(StorageCraftBlocks.IMPORTER), GameRegistry.addShapelessRecipe(new ItemStack(StorageCraftBlocks.IMPORTER),
new ItemStack(StorageCraftBlocks.MACHINE_CASING), new ItemStack(StorageCraftBlocks.MACHINE_CASING),
new ItemStack(StorageCraftItems.CORE, 1, ItemCore.TYPE_CONSTRUCTION), new ItemStack(StorageCraftItems.CORE, 1, ItemCore.TYPE_CONSTRUCTION),
new ItemStack(StorageCraftItems.PROCESSOR, 1, ItemProcessor.TYPE_BASIC) new ItemStack(StorageCraftItems.PROCESSOR, 1, ItemProcessor.TYPE_BASIC)
); );
// Exporter // Exporter
GameRegistry.addShapelessRecipe(new ItemStack(StorageCraftBlocks.EXPORTER), GameRegistry.addShapelessRecipe(new ItemStack(StorageCraftBlocks.EXPORTER),
new ItemStack(StorageCraftBlocks.MACHINE_CASING), new ItemStack(StorageCraftBlocks.MACHINE_CASING),
new ItemStack(StorageCraftItems.CORE, 1, ItemCore.TYPE_DESTRUCTION), new ItemStack(StorageCraftItems.CORE, 1, ItemCore.TYPE_DESTRUCTION),
new ItemStack(StorageCraftItems.PROCESSOR, 1, ItemProcessor.TYPE_BASIC) new ItemStack(StorageCraftItems.PROCESSOR, 1, ItemProcessor.TYPE_BASIC)
); );
// Destructor // Destructor
GameRegistry.addShapedRecipe(new ItemStack(StorageCraftBlocks.DESTRUCTOR), GameRegistry.addShapedRecipe(new ItemStack(StorageCraftBlocks.DESTRUCTOR),
"EDE", "EDE",
"RMR", "RMR",
"EIE", "EIE",
'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON), 'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON),
'D', new ItemStack(StorageCraftItems.CORE, 1, ItemCore.TYPE_DESTRUCTION), 'D', new ItemStack(StorageCraftItems.CORE, 1, ItemCore.TYPE_DESTRUCTION),
'R', new ItemStack(Items.redstone), 'R', new ItemStack(Items.redstone),
'M', new ItemStack(StorageCraftBlocks.MACHINE_CASING), 'M', new ItemStack(StorageCraftBlocks.MACHINE_CASING),
'I', new ItemStack(StorageCraftItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED) 'I', new ItemStack(StorageCraftItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED)
); );
// Constructor // Constructor
GameRegistry.addShapedRecipe(new ItemStack(StorageCraftBlocks.CONSTRUCTOR), GameRegistry.addShapedRecipe(new ItemStack(StorageCraftBlocks.CONSTRUCTOR),
"ECE", "ECE",
"RMR", "RMR",
"EIE", "EIE",
'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON), 'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON),
'C', new ItemStack(StorageCraftItems.CORE, 1, ItemCore.TYPE_CONSTRUCTION), 'C', new ItemStack(StorageCraftItems.CORE, 1, ItemCore.TYPE_CONSTRUCTION),
'R', new ItemStack(Items.redstone), 'R', new ItemStack(Items.redstone),
'M', new ItemStack(StorageCraftBlocks.MACHINE_CASING), 'M', new ItemStack(StorageCraftBlocks.MACHINE_CASING),
'I', new ItemStack(StorageCraftItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED) 'I', new ItemStack(StorageCraftItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED)
); );
// Detector // Detector
GameRegistry.addRecipe(new ItemStack(StorageCraftBlocks.DETECTOR), GameRegistry.addRecipe(new ItemStack(StorageCraftBlocks.DETECTOR),
"ECE", "ECE",
"RMR", "RMR",
"EPE", "EPE",
'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON), 'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON),
'R', new ItemStack(Items.redstone), 'R', new ItemStack(Items.redstone),
'C', new ItemStack(Items.comparator), 'C', new ItemStack(Items.comparator),
'M', new ItemStack(StorageCraftBlocks.MACHINE_CASING), 'M', new ItemStack(StorageCraftBlocks.MACHINE_CASING),
'P', new ItemStack(StorageCraftItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED) 'P', new ItemStack(StorageCraftItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED)
); );
// Storage Cell Parts // Storage Cell Parts
GameRegistry.addRecipe(new ItemStack(StorageCraftItems.STORAGE_PART, 1, ItemStoragePart.TYPE_1K), GameRegistry.addRecipe(new ItemStack(StorageCraftItems.STORAGE_PART, 1, ItemStoragePart.TYPE_1K),
"EPE", "EPE",
"SRS", "SRS",
"ESE", "ESE",
'R', new ItemStack(Items.redstone), 'R', new ItemStack(Items.redstone),
'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON), 'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON),
'P', new ItemStack(StorageCraftItems.SILICON), 'P', new ItemStack(StorageCraftItems.SILICON),
'S', new ItemStack(Blocks.glass) 'S', new ItemStack(Blocks.glass)
); );
GameRegistry.addRecipe(new ItemStack(StorageCraftItems.STORAGE_PART, 1, ItemStoragePart.TYPE_4K), GameRegistry.addRecipe(new ItemStack(StorageCraftItems.STORAGE_PART, 1, ItemStoragePart.TYPE_4K),
"EPE", "EPE",
"SRS", "SRS",
"ESE", "ESE",
'R', new ItemStack(Items.redstone), 'R', new ItemStack(Items.redstone),
'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON), 'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON),
'P', new ItemStack(StorageCraftItems.PROCESSOR, 1, ItemProcessor.TYPE_BASIC), 'P', new ItemStack(StorageCraftItems.PROCESSOR, 1, ItemProcessor.TYPE_BASIC),
'S', new ItemStack(StorageCraftItems.STORAGE_PART, 1, ItemStoragePart.TYPE_1K) 'S', new ItemStack(StorageCraftItems.STORAGE_PART, 1, ItemStoragePart.TYPE_1K)
); );
GameRegistry.addRecipe(new ItemStack(StorageCraftItems.STORAGE_PART, 1, ItemStoragePart.TYPE_16K), GameRegistry.addRecipe(new ItemStack(StorageCraftItems.STORAGE_PART, 1, ItemStoragePart.TYPE_16K),
"EPE", "EPE",
"SRS", "SRS",
"ESE", "ESE",
'R', new ItemStack(Items.redstone), 'R', new ItemStack(Items.redstone),
'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON), 'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON),
'P', new ItemStack(StorageCraftItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED), 'P', new ItemStack(StorageCraftItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED),
'S', new ItemStack(StorageCraftItems.STORAGE_PART, 1, ItemStoragePart.TYPE_4K) 'S', new ItemStack(StorageCraftItems.STORAGE_PART, 1, ItemStoragePart.TYPE_4K)
); );
GameRegistry.addRecipe(new ItemStack(StorageCraftItems.STORAGE_PART, 1, ItemStoragePart.TYPE_64K), GameRegistry.addRecipe(new ItemStack(StorageCraftItems.STORAGE_PART, 1, ItemStoragePart.TYPE_64K),
"EPE", "EPE",
"SRS", "SRS",
"ESE", "ESE",
'R', new ItemStack(Items.redstone), 'R', new ItemStack(Items.redstone),
'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON), 'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON),
'P', new ItemStack(StorageCraftItems.PROCESSOR, 1, ItemProcessor.TYPE_ADVANCED), 'P', new ItemStack(StorageCraftItems.PROCESSOR, 1, ItemProcessor.TYPE_ADVANCED),
'S', new ItemStack(StorageCraftItems.STORAGE_PART, 1, ItemStoragePart.TYPE_16K) 'S', new ItemStack(StorageCraftItems.STORAGE_PART, 1, ItemStoragePart.TYPE_16K)
); );
// Storage Cells // Storage Cells
GameRegistry.addRecipe(new ItemStack(StorageCraftItems.STORAGE_CELL, 1, ItemStorageCell.TYPE_1K), GameRegistry.addRecipe(new ItemStack(StorageCraftItems.STORAGE_CELL, 1, ItemStorageCell.TYPE_1K),
"GRG", "GRG",
"RPR", "RPR",
"EEE", "EEE",
'G', new ItemStack(Blocks.glass), 'G', new ItemStack(Blocks.glass),
'R', new ItemStack(Items.redstone), 'R', new ItemStack(Items.redstone),
'P', new ItemStack(StorageCraftItems.STORAGE_PART, 1, ItemStoragePart.TYPE_1K), 'P', new ItemStack(StorageCraftItems.STORAGE_PART, 1, ItemStoragePart.TYPE_1K),
'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON) 'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON)
); );
GameRegistry.addRecipe(new ItemStack(StorageCraftItems.STORAGE_CELL, 1, ItemStorageCell.TYPE_4K), GameRegistry.addRecipe(new ItemStack(StorageCraftItems.STORAGE_CELL, 1, ItemStorageCell.TYPE_4K),
"GRG", "GRG",
"RPR", "RPR",
"EEE", "EEE",
'G', new ItemStack(Blocks.glass), 'G', new ItemStack(Blocks.glass),
'R', new ItemStack(Items.redstone), 'R', new ItemStack(Items.redstone),
'P', new ItemStack(StorageCraftItems.STORAGE_PART, 1, ItemStoragePart.TYPE_4K), 'P', new ItemStack(StorageCraftItems.STORAGE_PART, 1, ItemStoragePart.TYPE_4K),
'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON) 'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON)
); );
GameRegistry.addRecipe(new ItemStack(StorageCraftItems.STORAGE_CELL, 1, ItemStorageCell.TYPE_16K), GameRegistry.addRecipe(new ItemStack(StorageCraftItems.STORAGE_CELL, 1, ItemStorageCell.TYPE_16K),
"GRG", "GRG",
"RPR", "RPR",
"EEE", "EEE",
'G', new ItemStack(Blocks.glass), 'G', new ItemStack(Blocks.glass),
'R', new ItemStack(Items.redstone), 'R', new ItemStack(Items.redstone),
'P', new ItemStack(StorageCraftItems.STORAGE_PART, 1, ItemStoragePart.TYPE_16K), 'P', new ItemStack(StorageCraftItems.STORAGE_PART, 1, ItemStoragePart.TYPE_16K),
'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON) 'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON)
); );
GameRegistry.addRecipe(new ItemStack(StorageCraftItems.STORAGE_CELL, 1, ItemStorageCell.TYPE_64K), GameRegistry.addRecipe(new ItemStack(StorageCraftItems.STORAGE_CELL, 1, ItemStorageCell.TYPE_64K),
"GRG", "GRG",
"RPR", "RPR",
"EEE", "EEE",
'G', new ItemStack(Blocks.glass), 'G', new ItemStack(Blocks.glass),
'R', new ItemStack(Items.redstone), 'R', new ItemStack(Items.redstone),
'P', new ItemStack(StorageCraftItems.STORAGE_PART, 1, ItemStoragePart.TYPE_64K), 'P', new ItemStack(StorageCraftItems.STORAGE_PART, 1, ItemStoragePart.TYPE_64K),
'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON) 'E', new ItemStack(StorageCraftItems.QUARTZ_ENRICHED_IRON)
); );
} }
public void init(FMLInitializationEvent e) public void init(FMLInitializationEvent e)
{ {
} }
public void postInit(FMLPostInitializationEvent e) public void postInit(FMLPostInitializationEvent e)
{ {
} }
} }

View File

@@ -1,23 +1,23 @@
package storagecraft.render; package storagecraft.render;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
import storagecraft.render.model.CableModel; import storagecraft.render.model.CableModel;
import storagecraft.tile.TileCable; import storagecraft.tile.TileCable;
public class BlockCableRenderer extends TileEntitySpecialRenderer public class BlockCableRenderer extends TileEntitySpecialRenderer
{ {
public static final CableModel CABLE_MODEL = new CableModel(); public static final CableModel CABLE_MODEL = new CableModel();
@Override @Override
public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float scale) public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float scale, int a) // @TODO: Find out what a is
{ {
GL11.glPushMatrix(); GL11.glPushMatrix();
GL11.glTranslatef((float) x, (float) y, (float) z); GL11.glTranslatef((float) x, (float) y, (float) z);
CABLE_MODEL.render((TileCable) tile, 0.0625F); CABLE_MODEL.render((TileCable) tile, 0.0625F);
GL11.glPopMatrix(); GL11.glPopMatrix();
} }
} }

View File

@@ -4,8 +4,8 @@ import net.minecraft.client.Minecraft;
import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelBase;
import net.minecraft.client.model.ModelRenderer; import net.minecraft.client.model.ModelRenderer;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraftforge.common.util.ForgeDirection;
import storagecraft.tile.TileCable; import storagecraft.tile.TileCable;
public class CableModel extends ModelBase public class CableModel extends ModelBase
@@ -100,32 +100,32 @@ public class CableModel extends ModelBase
Minecraft.getMinecraft().renderEngine.bindTexture(CABLE_RESOURCE); Minecraft.getMinecraft().renderEngine.bindTexture(CABLE_RESOURCE);
} }
if (cable.hasConnection(ForgeDirection.UP)) if (cable.hasConnection(EnumFacing.UP))
{ {
up.render(x); up.render(x);
} }
if (cable.hasConnection(ForgeDirection.DOWN)) if (cable.hasConnection(EnumFacing.DOWN))
{ {
down.render(x); down.render(x);
} }
if (cable.hasConnection(ForgeDirection.NORTH)) if (cable.hasConnection(EnumFacing.NORTH))
{ {
north.render(x); north.render(x);
} }
if (cable.hasConnection(ForgeDirection.EAST)) if (cable.hasConnection(EnumFacing.EAST))
{ {
east.render(x); east.render(x);
} }
if (cable.hasConnection(ForgeDirection.SOUTH)) if (cable.hasConnection(EnumFacing.SOUTH))
{ {
south.render(x); south.render(x);
} }
if (cable.hasConnection(ForgeDirection.WEST)) if (cable.hasConnection(EnumFacing.WEST))
{ {
west.render(x); west.render(x);
} }

View File

@@ -1,128 +1,128 @@
package storagecraft.storage; package storagecraft.storage;
import java.util.List; import java.util.List;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList; import net.minecraft.nbt.NBTTagList;
import storagecraft.item.ItemStorageCell; import storagecraft.item.ItemStorageCell;
public class CellStorage implements IStorage public class CellStorage implements IStorage
{ {
public static final String NBT_ITEMS = "Items"; public static final String NBT_ITEMS = "Items";
public static final String NBT_STORED = "Stored"; public static final String NBT_STORED = "Stored";
public static final String NBT_ITEM_TYPE = "Type"; public static final String NBT_ITEM_TYPE = "Type";
public static final String NBT_ITEM_QUANTITY = "Quantity"; public static final String NBT_ITEM_QUANTITY = "Quantity";
public static final String NBT_ITEM_DAMAGE = "Damage"; public static final String NBT_ITEM_DAMAGE = "Damage";
public static final String NBT_ITEM_NBT = "NBT"; public static final String NBT_ITEM_NBT = "NBT";
private ItemStack cell; private ItemStack cell;
public CellStorage(ItemStack cell) public CellStorage(ItemStack cell)
{ {
this.cell = cell; this.cell = cell;
} }
@Override @Override
public void addItems(List<StorageItem> items) public void addItems(List<StorageItem> items)
{ {
NBTTagList list = (NBTTagList) cell.stackTagCompound.getTag(NBT_ITEMS); NBTTagList list = (NBTTagList) cell.getTagCompound().getTag(NBT_ITEMS);
for (int i = 0; i < list.tagCount(); ++i) for (int i = 0; i < list.tagCount(); ++i)
{ {
items.add(createItemFromNBT(list.getCompoundTagAt(i))); items.add(createItemFromNBT(list.getCompoundTagAt(i)));
} }
} }
@Override @Override
public void push(ItemStack stack) public void push(ItemStack stack)
{ {
NBTTagList list = (NBTTagList) cell.stackTagCompound.getTag(NBT_ITEMS); NBTTagList list = (NBTTagList) cell.getTagCompound().getTag(NBT_ITEMS);
cell.stackTagCompound.setInteger(NBT_STORED, ItemStorageCell.getStored(cell) + stack.stackSize); cell.getTagCompound().setInteger(NBT_STORED, ItemStorageCell.getStored(cell) + stack.stackSize);
for (int i = 0; i < list.tagCount(); ++i) for (int i = 0; i < list.tagCount(); ++i)
{ {
NBTTagCompound tag = list.getCompoundTagAt(i); NBTTagCompound tag = list.getCompoundTagAt(i);
StorageItem item = createItemFromNBT(tag); StorageItem item = createItemFromNBT(tag);
if (item.compareNoQuantity(stack)) if (item.compareNoQuantity(stack))
{ {
tag.setInteger(NBT_ITEM_QUANTITY, item.getQuantity() + stack.stackSize); tag.setInteger(NBT_ITEM_QUANTITY, item.getQuantity() + stack.stackSize);
return; return;
} }
} }
NBTTagCompound tag = new NBTTagCompound(); NBTTagCompound tag = new NBTTagCompound();
tag.setInteger(NBT_ITEM_TYPE, Item.getIdFromItem(stack.getItem())); tag.setInteger(NBT_ITEM_TYPE, Item.getIdFromItem(stack.getItem()));
tag.setInteger(NBT_ITEM_QUANTITY, stack.stackSize); tag.setInteger(NBT_ITEM_QUANTITY, stack.stackSize);
tag.setInteger(NBT_ITEM_DAMAGE, stack.getItemDamage()); tag.setInteger(NBT_ITEM_DAMAGE, stack.getItemDamage());
if (stack.stackTagCompound != null) if (stack.hasTagCompound())
{ {
tag.setTag(NBT_ITEM_NBT, stack.stackTagCompound); tag.setTag(NBT_ITEM_NBT, stack.getTagCompound());
} }
list.appendTag(tag); list.appendTag(tag);
} }
@Override @Override
public ItemStack take(ItemStack stack, int flags) public ItemStack take(ItemStack stack, int flags)
{ {
int quantity = stack.stackSize; int quantity = stack.stackSize;
NBTTagList list = (NBTTagList) cell.stackTagCompound.getTag(NBT_ITEMS); NBTTagList list = (NBTTagList) cell.getTagCompound().getTag(NBT_ITEMS);
for (int i = 0; i < list.tagCount(); ++i) for (int i = 0; i < list.tagCount(); ++i)
{ {
NBTTagCompound tag = list.getCompoundTagAt(i); NBTTagCompound tag = list.getCompoundTagAt(i);
StorageItem item = createItemFromNBT(tag); StorageItem item = createItemFromNBT(tag);
if (item.compare(stack, flags)) if (item.compare(stack, flags))
{ {
if (quantity > item.getQuantity()) if (quantity > item.getQuantity())
{ {
quantity = item.getQuantity(); quantity = item.getQuantity();
} }
tag.setInteger(NBT_ITEM_QUANTITY, item.getQuantity() - quantity); tag.setInteger(NBT_ITEM_QUANTITY, item.getQuantity() - quantity);
if (item.getQuantity() - quantity == 0) if (item.getQuantity() - quantity == 0)
{ {
list.removeTag(i); list.removeTag(i);
} }
cell.stackTagCompound.setInteger(NBT_STORED, ItemStorageCell.getStored(cell) - quantity); cell.getTagCompound().setInteger(NBT_STORED, ItemStorageCell.getStored(cell) - quantity);
ItemStack newItem = item.toItemStack(); ItemStack newItem = item.toItemStack();
newItem.stackSize = quantity; newItem.stackSize = quantity;
return newItem; return newItem;
} }
} }
return null; return null;
} }
@Override @Override
public boolean canPush(ItemStack stack) public boolean canPush(ItemStack stack)
{ {
if (ItemStorageCell.getCapacity(cell) == -1) if (ItemStorageCell.getCapacity(cell) == -1)
{ {
return true; return true;
} }
return (ItemStorageCell.getStored(cell) + stack.stackSize) <= ItemStorageCell.getCapacity(cell); return (ItemStorageCell.getStored(cell) + stack.stackSize) <= ItemStorageCell.getCapacity(cell);
} }
private StorageItem createItemFromNBT(NBTTagCompound tag) private StorageItem createItemFromNBT(NBTTagCompound tag)
{ {
return new StorageItem(Item.getItemById(tag.getInteger(NBT_ITEM_TYPE)), tag.getInteger(NBT_ITEM_QUANTITY), tag.getInteger(NBT_ITEM_DAMAGE), tag.hasKey(NBT_ITEM_NBT) ? ((NBTTagCompound) tag.getTag(NBT_ITEM_NBT)) : null); return new StorageItem(Item.getItemById(tag.getInteger(NBT_ITEM_TYPE)), tag.getInteger(NBT_ITEM_QUANTITY), tag.getInteger(NBT_ITEM_DAMAGE), tag.hasKey(NBT_ITEM_NBT) ? ((NBTTagCompound) tag.getTag(NBT_ITEM_NBT)) : null);
} }
} }

View File

@@ -1,191 +1,191 @@
package storagecraft.storage; package storagecraft.storage;
import cpw.mods.fml.common.network.ByteBufUtils; import io.netty.buffer.ByteBuf;
import cpw.mods.fml.relauncher.Side; import net.minecraft.item.Item;
import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.item.ItemStack;
import io.netty.buffer.ByteBuf; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.item.Item; import net.minecraftforge.fml.common.network.ByteBufUtils;
import net.minecraft.item.ItemStack; import net.minecraftforge.fml.relauncher.Side;
import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.fml.relauncher.SideOnly;
import storagecraft.util.InventoryUtils; import storagecraft.util.InventoryUtils;
public class StorageItem public class StorageItem
{ {
private Item type; private Item type;
private int quantity; private int quantity;
private int damage; private int damage;
private NBTTagCompound tag; private NBTTagCompound tag;
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
private int id; private int id;
public StorageItem(ByteBuf buf) public StorageItem(ByteBuf buf)
{ {
this.id = buf.readInt(); this.id = buf.readInt();
this.type = Item.getItemById(buf.readInt()); this.type = Item.getItemById(buf.readInt());
this.quantity = buf.readInt(); this.quantity = buf.readInt();
this.damage = buf.readInt(); this.damage = buf.readInt();
this.tag = buf.readBoolean() ? ByteBufUtils.readTag(buf) : null; this.tag = buf.readBoolean() ? ByteBufUtils.readTag(buf) : null;
} }
public StorageItem(Item type, int quantity, int damage, NBTTagCompound tag) public StorageItem(Item type, int quantity, int damage, NBTTagCompound tag)
{ {
this.type = type; this.type = type;
this.quantity = quantity; this.quantity = quantity;
this.damage = damage; this.damage = damage;
this.tag = tag; this.tag = tag;
} }
public StorageItem(Item type, int quantity, int damage, NBTTagCompound tag, int id) public StorageItem(Item type, int quantity, int damage, NBTTagCompound tag, int id)
{ {
this(type, quantity, damage, tag); this(type, quantity, damage, tag);
this.id = id; this.id = id;
} }
public StorageItem(ItemStack stack) public StorageItem(ItemStack stack)
{ {
this(stack.getItem(), stack.stackSize, stack.getItemDamage(), stack.stackTagCompound); this(stack.getItem(), stack.stackSize, stack.getItemDamage(), stack.getTagCompound());
} }
public void toBytes(ByteBuf buf, int id) public void toBytes(ByteBuf buf, int id)
{ {
buf.writeInt(id); buf.writeInt(id);
buf.writeInt(Item.getIdFromItem(type)); buf.writeInt(Item.getIdFromItem(type));
buf.writeInt(quantity); buf.writeInt(quantity);
buf.writeInt(damage); buf.writeInt(damage);
buf.writeBoolean(tag != null); buf.writeBoolean(tag != null);
if (tag != null) if (tag != null)
{ {
ByteBufUtils.writeTag(buf, tag); ByteBufUtils.writeTag(buf, tag);
} }
} }
public Item getType() public Item getType()
{ {
return type; return type;
} }
public int getQuantity() public int getQuantity()
{ {
return quantity; return quantity;
} }
public void setQuantity(int quantity) public void setQuantity(int quantity)
{ {
this.quantity = quantity; this.quantity = quantity;
} }
public int getDamage() public int getDamage()
{ {
return damage; return damage;
} }
public void setDamage(int damage) public void setDamage(int damage)
{ {
this.damage = damage; this.damage = damage;
} }
public NBTTagCompound getTag() public NBTTagCompound getTag()
{ {
return tag; return tag;
} }
public void setTag(NBTTagCompound tag) public void setTag(NBTTagCompound tag)
{ {
this.tag = tag; this.tag = tag;
} }
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public int getId() public int getId()
{ {
return id; return id;
} }
public StorageItem copy() public StorageItem copy()
{ {
return copy(quantity); return copy(quantity);
} }
public StorageItem copy(int newQuantity) public StorageItem copy(int newQuantity)
{ {
return new StorageItem(type, newQuantity, damage, tag); return new StorageItem(type, newQuantity, damage, tag);
} }
public ItemStack toItemStack() public ItemStack toItemStack()
{ {
ItemStack stack = new ItemStack(type, quantity, damage); ItemStack stack = new ItemStack(type, quantity, damage);
stack.stackTagCompound = tag; stack.setTagCompound(tag);
return stack; return stack;
} }
public boolean compare(StorageItem other, int flags) public boolean compare(StorageItem other, int flags)
{ {
if ((flags & InventoryUtils.COMPARE_DAMAGE) == InventoryUtils.COMPARE_DAMAGE) if ((flags & InventoryUtils.COMPARE_DAMAGE) == InventoryUtils.COMPARE_DAMAGE)
{ {
if (damage != other.getDamage()) if (damage != other.getDamage())
{ {
return false; return false;
} }
} }
if ((flags & InventoryUtils.COMPARE_NBT) == InventoryUtils.COMPARE_NBT) if ((flags & InventoryUtils.COMPARE_NBT) == InventoryUtils.COMPARE_NBT)
{ {
if (tag != null && !tag.equals(other.getTag())) if (tag != null && !tag.equals(other.getTag()))
{ {
return false; return false;
} }
} }
if ((flags & InventoryUtils.COMPARE_QUANTITY) == InventoryUtils.COMPARE_QUANTITY) if ((flags & InventoryUtils.COMPARE_QUANTITY) == InventoryUtils.COMPARE_QUANTITY)
{ {
if (quantity != other.getQuantity()) if (quantity != other.getQuantity())
{ {
return false; return false;
} }
} }
return type == other.getType(); return type == other.getType();
} }
public boolean compare(ItemStack stack, int flags) public boolean compare(ItemStack stack, int flags)
{ {
if ((flags & InventoryUtils.COMPARE_DAMAGE) == InventoryUtils.COMPARE_DAMAGE) if ((flags & InventoryUtils.COMPARE_DAMAGE) == InventoryUtils.COMPARE_DAMAGE)
{ {
if (damage != stack.getItemDamage()) if (damage != stack.getItemDamage())
{ {
return false; return false;
} }
} }
if ((flags & InventoryUtils.COMPARE_NBT) == InventoryUtils.COMPARE_NBT) if ((flags & InventoryUtils.COMPARE_NBT) == InventoryUtils.COMPARE_NBT)
{ {
if (tag != null && !tag.equals(stack.stackTagCompound)) if (tag != null && !tag.equals(stack.getTagCompound()))
{ {
return false; return false;
} }
} }
if ((flags & InventoryUtils.COMPARE_QUANTITY) == InventoryUtils.COMPARE_QUANTITY) if ((flags & InventoryUtils.COMPARE_QUANTITY) == InventoryUtils.COMPARE_QUANTITY)
{ {
if (quantity != stack.stackSize) if (quantity != stack.stackSize)
{ {
return false; return false;
} }
} }
return type == stack.getItem(); return type == stack.getItem();
} }
public boolean compareNoQuantity(StorageItem other) public boolean compareNoQuantity(StorageItem other)
{ {
return compare(other, InventoryUtils.COMPARE_NBT | InventoryUtils.COMPARE_DAMAGE); return compare(other, InventoryUtils.COMPARE_NBT | InventoryUtils.COMPARE_DAMAGE);
} }
public boolean compareNoQuantity(ItemStack stack) public boolean compareNoQuantity(ItemStack stack)
{ {
return compare(stack, InventoryUtils.COMPARE_NBT | InventoryUtils.COMPARE_DAMAGE); return compare(stack, InventoryUtils.COMPARE_NBT | InventoryUtils.COMPARE_DAMAGE);
} }
} }

View File

@@ -1,14 +1,12 @@
package storagecraft.tile; package storagecraft.tile;
public interface ICompareSetting import net.minecraft.util.BlockPos;
{
public int getCompare(); public interface ICompareSetting
{
public void setCompare(int compare); public int getCompare();
public int getX(); public void setCompare(int compare);
public int getY(); public BlockPos getPos();
}
public int getZ();
}

View File

@@ -1,16 +1,13 @@
package storagecraft.tile; package storagecraft.tile;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import net.minecraft.util.BlockPos;
public interface INetworkTile
{ public interface INetworkTile
public void fromBytes(ByteBuf buf); {
public void fromBytes(ByteBuf buf);
public void toBytes(ByteBuf buf);
public void toBytes(ByteBuf buf);
public int getX();
public BlockPos getPos();
public int getY(); }
public int getZ();
}

View File

@@ -1,14 +1,12 @@
package storagecraft.tile; package storagecraft.tile;
public interface IRedstoneModeSetting import net.minecraft.util.BlockPos;
{
public RedstoneMode getRedstoneMode(); public interface IRedstoneModeSetting
{
public void setRedstoneMode(RedstoneMode mode); public RedstoneMode getRedstoneMode();
public int getX(); public void setRedstoneMode(RedstoneMode mode);
public int getY(); public BlockPos getPos();
}
public int getZ();
}

View File

@@ -1,59 +1,60 @@
package storagecraft.tile; package storagecraft.tile;
import net.minecraft.world.World; import net.minecraft.util.BlockPos;
import net.minecraft.world.World;
public enum RedstoneMode
{ public enum RedstoneMode
IGNORE(0), {
HIGH(1), IGNORE(0),
LOW(2); HIGH(1),
LOW(2);
public static final String NBT = "RedstoneMode";
public static final String NBT = "RedstoneMode";
public final int id;
public final int id;
RedstoneMode(int id)
{ RedstoneMode(int id)
this.id = id; {
} this.id = id;
}
public RedstoneMode next()
{ public RedstoneMode next()
RedstoneMode next = getById(id + 1); {
RedstoneMode next = getById(id + 1);
if (next == null)
{ if (next == null)
return getById(0); {
} return getById(0);
}
return next;
} return next;
}
public boolean isEnabled(World world, int x, int y, int z)
{ public boolean isEnabled(World world, BlockPos pos)
switch (this) {
{ switch (this)
case IGNORE: {
return true; case IGNORE:
case HIGH: return true;
return world.isBlockIndirectlyGettingPowered(x, y, z); case HIGH:
case LOW: return true; // @TODO: ...
return !world.isBlockIndirectlyGettingPowered(x, y, z); case LOW:
} return true;
}
return false;
} return false;
}
public static RedstoneMode getById(int id)
{ public static RedstoneMode getById(int id)
for (RedstoneMode control : values()) {
{ for (RedstoneMode control : values())
if (control.id == id) {
{ if (control.id == id)
return control; {
} return control;
} }
}
return null;
} return null;
} }
}

View File

@@ -1,86 +1,85 @@
package storagecraft.tile; package storagecraft.tile;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.IInventory; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.NetworkManager;
import net.minecraft.network.NetworkManager; import net.minecraft.network.Packet;
import net.minecraft.network.Packet; import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.server.gui.IUpdatePlayerListBox;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraft.util.EnumFacing;
import storagecraft.StorageCraft; import net.minecraftforge.fml.common.network.NetworkRegistry.TargetPoint;
import storagecraft.network.MessageTileUpdate; import storagecraft.StorageCraft;
import storagecraft.network.MessageTileUpdate;
public abstract class TileBase extends TileEntity
{ public abstract class TileBase extends TileEntity implements IUpdatePlayerListBox
public static final int UPDATE_RANGE = 256; {
public static final int UPDATE_RANGE = 256;
private ForgeDirection direction = ForgeDirection.UNKNOWN;
private EnumFacing direction;
protected int ticks;
protected int ticks;
@Override
public void updateEntity() @Override
{ public void update()
super.updateEntity(); {
ticks++;
ticks++;
if (!worldObj.isRemote)
if (!worldObj.isRemote) {
{ if (this instanceof INetworkTile)
if (this instanceof INetworkTile) {
{ TargetPoint target = new TargetPoint(worldObj.provider.getDimensionId(), pos.getX(), pos.getY(), pos.getZ(), UPDATE_RANGE);
TargetPoint target = new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, UPDATE_RANGE);
StorageCraft.NETWORK.sendToAllAround(new MessageTileUpdate(this), target);
StorageCraft.NETWORK.sendToAllAround(new MessageTileUpdate(this), target); }
} }
} }
}
public void setDirection(EnumFacing direction)
public void setDirection(ForgeDirection direction) {
{ this.direction = direction;
this.direction = direction; }
}
public EnumFacing getDirection()
public ForgeDirection getDirection() {
{ return direction;
return direction; }
}
@Override
@Override public void readFromNBT(NBTTagCompound nbt)
public void readFromNBT(NBTTagCompound nbt) {
{ super.readFromNBT(nbt);
super.readFromNBT(nbt);
direction = EnumFacing.getFront(nbt.getInteger("Direction"));
direction = ForgeDirection.getOrientation(nbt.getInteger("Direction")); }
}
@Override
@Override public void writeToNBT(NBTTagCompound nbt)
public void writeToNBT(NBTTagCompound nbt) {
{ super.writeToNBT(nbt);
super.writeToNBT(nbt);
nbt.setInteger("Direction", direction.ordinal());
nbt.setInteger("Direction", direction.ordinal()); }
}
@Override
@Override public Packet getDescriptionPacket()
public Packet getDescriptionPacket() {
{ NBTTagCompound nbt = new NBTTagCompound();
NBTTagCompound nbt = new NBTTagCompound();
nbt.setInteger("Direction", direction.ordinal());
nbt.setInteger("Direction", direction.ordinal());
return new S35PacketUpdateTileEntity(pos, 1, nbt);
return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, 1, nbt); }
}
@Override
@Override public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity packet)
public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity packet) {
{ direction = EnumFacing.getFront(packet.getNbtCompound().getInteger("Direction"));
direction = ForgeDirection.getOrientation(packet.func_148857_g().getInteger("Direction")); }
}
public IInventory getDroppedInventory()
public IInventory getDroppedInventory() {
{ return null;
return null; }
} }
}

View File

@@ -1,103 +1,100 @@
package storagecraft.tile; package storagecraft.tile;
import java.util.List; import java.util.List;
import net.minecraft.block.Block; import net.minecraft.tileentity.TileEntity;
import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockPos;
import net.minecraft.util.Vec3; import net.minecraft.util.EnumFacing;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection; import storagecraft.block.BlockCable;
import storagecraft.block.BlockCable;
public class TileCable extends TileBase
public class TileCable extends TileBase {
{ public static boolean isCable(World world, BlockPos pos)
public static boolean isCable(World world, int x, int y, int z, ForgeDirection dir) {
{ return world.getBlockState(pos).getBlock() instanceof BlockCable;
Block block = world.getBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ); }
return block instanceof BlockCable; public boolean hasConnection(EnumFacing dir)
} {
if (!isCable(worldObj, pos.offset(dir)))
public boolean hasConnection(ForgeDirection dir) {
{ TileEntity tile = worldObj.getTileEntity(pos.offset(dir));
if (!isCable(worldObj, xCoord, yCoord, zCoord, dir))
{ return tile instanceof TileMachine || tile instanceof TileController;
TileEntity tile = worldObj.getTileEntity(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ); }
return tile instanceof TileMachine || tile instanceof TileController; return true;
} }
return true; public boolean isPowered()
} {
// @TODO: return worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord);
public boolean isPowered() return false;
{ }
return worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord);
} public boolean isSensitiveCable()
{
public boolean isSensitiveCable() // @TODO: return worldObj.getBlockMetadata(xCoord, yCoord, zCoord) == 1;
{ return false;
return worldObj.getBlockMetadata(xCoord, yCoord, zCoord) == 1; }
}
public boolean isEnabled()
public boolean isEnabled() {
{ if (isSensitiveCable())
if (isSensitiveCable()) {
{ return !isPowered();
return !isPowered(); }
}
return true;
return true; }
}
public void addMachines(List<BlockPos> visited, List<TileMachine> machines, TileController controller)
public void addMachines(List<Vec3> visited, List<TileMachine> machines, TileController controller) {
{ for (BlockPos visitedBlock : visited)
for (Vec3 visitedBlock : visited) {
{ if (visitedBlock.equals(pos))
if (visitedBlock.xCoord == xCoord && visitedBlock.yCoord == yCoord && visitedBlock.zCoord == zCoord) {
{ return;
return; }
} }
}
visited.add(pos);
visited.add(Vec3.createVectorHelper(xCoord, yCoord, zCoord));
for (EnumFacing dir : EnumFacing.VALUES)
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
{ BlockPos newPos = pos.offset(dir);
int x = xCoord + dir.offsetX;
int y = yCoord + dir.offsetY; boolean found = false;
int z = zCoord + dir.offsetZ;
for (BlockPos visitedBlock : visited)
boolean found = false; {
if (visitedBlock.equals(newPos))
for (Vec3 visitedBlock : visited) {
{ found = true;
if (visitedBlock.xCoord == x && visitedBlock.yCoord == y && visitedBlock.zCoord == z) }
{ }
found = true;
} if (found)
} {
continue;
if (found) }
{
continue; TileEntity tile = worldObj.getTileEntity(newPos);
}
if (tile instanceof TileMachine && ((TileMachine) tile).getRedstoneMode().isEnabled(worldObj, newPos))
TileEntity tile = worldObj.getTileEntity(x, y, z); {
machines.add((TileMachine) tile);
if (tile instanceof TileMachine && ((TileMachine) tile).getRedstoneMode().isEnabled(worldObj, x, y, z))
{ visited.add(newPos);
machines.add((TileMachine) tile); }
else if (tile instanceof TileCable && ((TileCable) tile).isEnabled())
visited.add(Vec3.createVectorHelper(x, y, z)); {
} ((TileCable) tile).addMachines(visited, machines, controller);
else if (tile instanceof TileCable && ((TileCable) tile).isEnabled()) }
{ else if (tile instanceof TileController && !controller.getPos().equals(newPos))
((TileCable) tile).addMachines(visited, machines, controller); {
} worldObj.createExplosion(null, pos.getX(), pos.getY(), pos.getZ(), 4.5f, true);
else if (tile instanceof TileController && (x != controller.xCoord || y != controller.yCoord || z != controller.zCoord)) }
{ }
worldObj.createExplosion(null, x, y, z, 4.5f, true); }
} }
}
}
}

View File

@@ -1,191 +1,221 @@
package storagecraft.tile; package storagecraft.tile;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks; import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.IInventory; import net.minecraft.inventory.ISidedInventory;
import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.BlockPos;
import storagecraft.inventory.InventorySimple; import net.minecraft.util.EnumFacing;
import storagecraft.util.InventoryUtils; import net.minecraft.util.IChatComponent;
import storagecraft.inventory.InventorySimple;
public class TileConstructor extends TileMachine implements IInventory, ISidedInventory, ICompareSetting import storagecraft.util.InventoryUtils;
{
public static final String NBT_COMPARE = "Compare"; public class TileConstructor extends TileMachine implements IInventory, ISidedInventory, ICompareSetting
{
private InventorySimple inventory = new InventorySimple("constructor", 1); public static final String NBT_COMPARE = "Compare";
private int compare = 0; private InventorySimple inventory = new InventorySimple("constructor", 1);
@Override private int compare = 0;
public int getEnergyUsage()
{ @Override
return 1; public int getEnergyUsage()
} {
return 1;
@Override }
public void updateMachine()
{ @Override
if (ticks % 10 == 0) public void updateMachine()
{ {
int frontX = xCoord + getDirection().offsetX; if (ticks % 10 == 0)
int frontY = yCoord + getDirection().offsetY; {
int frontZ = zCoord + getDirection().offsetZ; BlockPos front = pos.offset(getDirection());
if (worldObj.getBlock(frontX, frontY, frontZ) == Blocks.air && inventory.getStackInSlot(0) != null) if (worldObj.isAirBlock(front) && inventory.getStackInSlot(0) != null)
{ {
ItemStack took = getController().take(inventory.getStackInSlot(0).copy(), compare); ItemStack took = getController().take(inventory.getStackInSlot(0).copy(), compare);
if (took != null) if (took != null)
{ {
worldObj.setBlock(frontX, frontY, frontZ, ((ItemBlock) took.getItem()).field_150939_a, took.getItemDamage(), 1 | 2); worldObj.setBlockState(front, ((ItemBlock) took.getItem()).getBlock().getDefaultState(), 1 | 2);
} }
} }
} }
} }
@Override @Override
public int getCompare() public int getCompare()
{ {
return compare; return compare;
} }
@Override @Override
public void setCompare(int compare) public void setCompare(int compare)
{ {
this.compare = compare; this.compare = compare;
} }
@Override @Override
public int getSizeInventory() public void readFromNBT(NBTTagCompound nbt)
{ {
return inventory.getSizeInventory(); super.readFromNBT(nbt);
}
if (nbt.hasKey(NBT_COMPARE))
@Override {
public ItemStack getStackInSlot(int slot) compare = nbt.getInteger(NBT_COMPARE);
{ }
return inventory.getStackInSlot(slot);
} InventoryUtils.restoreInventory(this, nbt);
}
@Override
public ItemStack decrStackSize(int slot, int amount) @Override
{ public void writeToNBT(NBTTagCompound nbt)
return inventory.decrStackSize(slot, amount); {
} super.writeToNBT(nbt);
@Override nbt.setInteger(NBT_COMPARE, compare);
public ItemStack getStackInSlotOnClosing(int slot)
{ InventoryUtils.saveInventory(this, nbt);
return inventory.getStackInSlotOnClosing(slot); }
}
@Override
@Override public void fromBytes(ByteBuf buf)
public void setInventorySlotContents(int slot, ItemStack stack) {
{ super.fromBytes(buf);
inventory.setInventorySlotContents(slot, stack);
} compare = buf.readInt();
}
@Override
public String getInventoryName() @Override
{ public void toBytes(ByteBuf buf)
return inventory.getInventoryName(); {
} super.toBytes(buf);
@Override buf.writeInt(compare);
public boolean hasCustomInventoryName() }
{
return inventory.hasCustomInventoryName(); @Override
} public int getSizeInventory()
{
@Override return inventory.getSizeInventory();
public int getInventoryStackLimit() }
{
return inventory.getInventoryStackLimit(); @Override
} public ItemStack getStackInSlot(int slot)
{
@Override return inventory.getStackInSlot(slot);
public boolean isUseableByPlayer(EntityPlayer player) }
{
return inventory.isUseableByPlayer(player); @Override
} public ItemStack decrStackSize(int slot, int count)
{
@Override return inventory.decrStackSize(slot, count);
public void openInventory() }
{
inventory.openInventory(); @Override
} public ItemStack getStackInSlotOnClosing(int slot)
{
@Override return inventory.getStackInSlotOnClosing(slot);
public void closeInventory() }
{
inventory.closeInventory(); @Override
} public void setInventorySlotContents(int slot, ItemStack stack)
{
@Override inventory.setInventorySlotContents(slot, stack);
public boolean isItemValidForSlot(int slot, ItemStack stack) }
{
return inventory.isItemValidForSlot(slot, stack); @Override
} public int getInventoryStackLimit()
{
@Override return inventory.getInventoryStackLimit();
public int[] getAccessibleSlotsFromSide(int side) }
{
return new int[] @Override
{ public boolean isUseableByPlayer(EntityPlayer player)
}; {
} return inventory.isUseableByPlayer(player);
}
@Override
public boolean canInsertItem(int slot, ItemStack stack, int side) @Override
{ public void openInventory(EntityPlayer player)
return false; {
} inventory.openInventory(player);
}
@Override
public boolean canExtractItem(int slot, ItemStack stack, int side) @Override
{ public void closeInventory(EntityPlayer player)
return false; {
} inventory.closeInventory(player);
}
@Override
public void readFromNBT(NBTTagCompound nbt) @Override
{ public boolean isItemValidForSlot(int slot, ItemStack stack)
super.readFromNBT(nbt); {
return inventory.isItemValidForSlot(slot, stack);
if (nbt.hasKey(NBT_COMPARE)) }
{
compare = nbt.getInteger(NBT_COMPARE); @Override
} public int getField(int id)
{
InventoryUtils.restoreInventory(this, nbt); return inventory.getField(id);
} }
@Override @Override
public void writeToNBT(NBTTagCompound nbt) public void setField(int id, int value)
{ {
super.writeToNBT(nbt); inventory.setField(id, value);
}
nbt.setInteger(NBT_COMPARE, compare);
@Override
InventoryUtils.saveInventory(this, nbt); public int getFieldCount()
} {
return inventory.getFieldCount();
@Override }
public void fromBytes(ByteBuf buf)
{ @Override
super.fromBytes(buf); public void clear()
{
compare = buf.readInt(); inventory.clear();
} }
@Override @Override
public void toBytes(ByteBuf buf) public String getName()
{ {
super.toBytes(buf); return inventory.getName();
}
buf.writeInt(compare);
} @Override
} public boolean hasCustomName()
{
return inventory.hasCustomName();
}
@Override
public IChatComponent getDisplayName()
{
return inventory.getDisplayName();
}
@Override
public int[] getSlotsForFace(EnumFacing side)
{
return new int[]
{
};
}
@Override
public boolean canInsertItem(int slot, ItemStack stack, EnumFacing direction)
{
return false;
}
@Override
public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction)
{
return false;
}
}

View File

@@ -1,397 +1,379 @@
package storagecraft.tile; package storagecraft.tile;
import cofh.api.energy.EnergyStorage; import cofh.api.energy.EnergyStorage;
import cofh.api.energy.IEnergyReceiver; import cofh.api.energy.IEnergyReceiver;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.Vec3; import net.minecraft.util.BlockPos;
import net.minecraftforge.common.util.ForgeDirection; import net.minecraft.util.EnumFacing;
import storagecraft.StorageCraftBlocks; import storagecraft.StorageCraftBlocks;
import storagecraft.storage.IStorage; import storagecraft.storage.IStorage;
import storagecraft.storage.IStorageProvider; import storagecraft.storage.IStorageProvider;
import storagecraft.storage.StorageItem; import storagecraft.storage.StorageItem;
import storagecraft.util.InventoryUtils; import storagecraft.util.InventoryUtils;
public class TileController extends TileBase implements IEnergyReceiver, INetworkTile, IRedstoneModeSetting public class TileController extends TileBase implements IEnergyReceiver, INetworkTile, IRedstoneModeSetting
{ {
private List<StorageItem> items = new ArrayList<StorageItem>(); private List<StorageItem> items = new ArrayList<StorageItem>();
private List<IStorage> storages = new ArrayList<IStorage>(); private List<IStorage> storages = new ArrayList<IStorage>();
private RedstoneMode redstoneMode = RedstoneMode.IGNORE; private RedstoneMode redstoneMode = RedstoneMode.IGNORE;
private List<TileMachine> machines = new ArrayList<TileMachine>(); private List<TileMachine> machines = new ArrayList<TileMachine>();
private List<Vec3> visitedCables = new ArrayList<Vec3>(); private List<BlockPos> visitedCables = new ArrayList<BlockPos>();
private EnergyStorage energy = new EnergyStorage(32000); private EnergyStorage energy = new EnergyStorage(32000);
private int energyUsage; private int energyUsage;
private boolean destroyed = false; private boolean destroyed = false;
@Override @Override
public void updateEntity() public void update()
{ {
super.updateEntity(); super.update();
if (destroyed) if (destroyed)
{ {
return; return;
} }
if (!worldObj.isRemote) if (!worldObj.isRemote)
{ {
int lastEnergy = energy.getEnergyStored(); int lastEnergy = energy.getEnergyStored();
if (ticks % 40 == 0) if (ticks % 40 == 0)
{ {
if (!isActive()) if (!isActive())
{ {
disconnectAll(); disconnectAll();
} }
else else
{ {
visitedCables.clear(); visitedCables.clear();
List<TileMachine> newMachines = new ArrayList<TileMachine>(); List<TileMachine> newMachines = new ArrayList<TileMachine>();
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) for (EnumFacing dir : EnumFacing.VALUES)
{ {
TileEntity tile = worldObj.getTileEntity(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ); TileEntity tile = worldObj.getTileEntity(pos.offset(dir));
if (tile instanceof TileCable) if (tile instanceof TileCable)
{ {
TileCable cable = (TileCable) tile; TileCable cable = (TileCable) tile;
if (cable.isEnabled()) if (cable.isEnabled())
{ {
cable.addMachines(visitedCables, newMachines, this); cable.addMachines(visitedCables, newMachines, this);
} }
} }
} }
for (TileMachine machine : machines) for (TileMachine machine : machines)
{ {
if (!newMachines.contains(machine)) if (!newMachines.contains(machine))
{ {
machine.onDisconnected(); machine.onDisconnected();
} }
} }
for (TileMachine machine : newMachines) for (TileMachine machine : newMachines)
{ {
if (!machines.contains(machine)) if (!machines.contains(machine))
{ {
machine.onConnected(this); machine.onConnected(this);
} }
} }
machines = newMachines; machines = newMachines;
storages.clear(); storages.clear();
for (TileMachine machine : machines) for (TileMachine machine : machines)
{ {
if (machine instanceof IStorageProvider) if (machine instanceof IStorageProvider)
{ {
((IStorageProvider) machine).addStorages(storages); ((IStorageProvider) machine).addStorages(storages);
} }
} }
syncItems(); syncItems();
} }
energyUsage = 10; energyUsage = 10;
for (TileMachine machine : machines) for (TileMachine machine : machines)
{ {
energyUsage += machine.getEnergyUsage(); energyUsage += machine.getEnergyUsage();
} }
} }
energy.extractEnergy(energyUsage, false); energy.extractEnergy(energyUsage, false);
if (lastEnergy != energy.getEnergyStored()) if (lastEnergy != energy.getEnergyStored())
{ {
worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); worldObj.markBlockForUpdate(pos);
worldObj.notifyBlocksOfNeighborChange(xCoord, yCoord, zCoord, StorageCraftBlocks.CONTROLLER); worldObj.notifyNeighborsOfStateChange(pos, StorageCraftBlocks.CONTROLLER);
} }
} }
} }
public void onDestroyed() public void onDestroyed()
{ {
disconnectAll(); disconnectAll();
destroyed = true; destroyed = true;
} }
private void disconnectAll() private void disconnectAll()
{ {
for (TileMachine machine : machines) for (TileMachine machine : machines)
{ {
machine.onDisconnected(); machine.onDisconnected();
} }
machines.clear(); machines.clear();
} }
public List<TileMachine> getMachines() public List<TileMachine> getMachines()
{ {
return machines; return machines;
} }
public List<StorageItem> getItems() public List<StorageItem> getItems()
{ {
return items; return items;
} }
private void syncItems() private void syncItems()
{ {
items.clear(); items.clear();
for (IStorage storage : storages) for (IStorage storage : storages)
{ {
storage.addItems(items); storage.addItems(items);
} }
combineItems(); combineItems();
} }
private void combineItems() private void combineItems()
{ {
List<Integer> markedIndexes = new ArrayList<Integer>(); List<Integer> markedIndexes = new ArrayList<Integer>();
for (int i = 0; i < items.size(); ++i) for (int i = 0; i < items.size(); ++i)
{ {
if (markedIndexes.contains(i)) if (markedIndexes.contains(i))
{ {
continue; continue;
} }
StorageItem item = items.get(i); StorageItem item = items.get(i);
for (int j = i + 1; j < items.size(); ++j) for (int j = i + 1; j < items.size(); ++j)
{ {
if (markedIndexes.contains(j)) if (markedIndexes.contains(j))
{ {
continue; continue;
} }
StorageItem other = items.get(j); StorageItem other = items.get(j);
if (item.compareNoQuantity(other)) if (item.compareNoQuantity(other))
{ {
item.setQuantity(item.getQuantity() + other.getQuantity()); item.setQuantity(item.getQuantity() + other.getQuantity());
markedIndexes.add(j); markedIndexes.add(j);
} }
} }
} }
List<StorageItem> markedItems = new ArrayList<StorageItem>(); List<StorageItem> markedItems = new ArrayList<StorageItem>();
for (int i : markedIndexes) for (int i : markedIndexes)
{ {
markedItems.add(items.get(i)); markedItems.add(items.get(i));
} }
items.removeAll(markedItems); items.removeAll(markedItems);
} }
public boolean push(ItemStack stack) public boolean push(ItemStack stack)
{ {
IStorage foundStorage = null; IStorage foundStorage = null;
for (IStorage storage : storages) for (IStorage storage : storages)
{ {
if (storage.canPush(stack)) if (storage.canPush(stack))
{ {
foundStorage = storage; foundStorage = storage;
break; break;
} }
} }
if (foundStorage == null) if (foundStorage == null)
{ {
return false; return false;
} }
foundStorage.push(stack); foundStorage.push(stack);
syncItems(); syncItems();
return true; return true;
} }
public ItemStack take(ItemStack stack) public ItemStack take(ItemStack stack)
{ {
return take(stack, InventoryUtils.COMPARE_DAMAGE | InventoryUtils.COMPARE_NBT); return take(stack, InventoryUtils.COMPARE_DAMAGE | InventoryUtils.COMPARE_NBT);
} }
public ItemStack take(ItemStack stack, int flags) public ItemStack take(ItemStack stack, int flags)
{ {
int requested = stack.stackSize; int requested = stack.stackSize;
int receiving = 0; int receiving = 0;
ItemStack newStack = null; ItemStack newStack = null;
for (IStorage storage : storages) for (IStorage storage : storages)
{ {
ItemStack took = storage.take(stack, flags); ItemStack took = storage.take(stack, flags);
if (took != null) if (took != null)
{ {
if (newStack == null) if (newStack == null)
{ {
newStack = took; newStack = took;
} }
else else
{ {
newStack.stackSize += took.stackSize; newStack.stackSize += took.stackSize;
} }
receiving += took.stackSize; receiving += took.stackSize;
} }
if (requested == receiving) if (requested == receiving)
{ {
break; break;
} }
} }
syncItems(); syncItems();
return newStack; return newStack;
} }
@Override @Override
public void readFromNBT(NBTTagCompound nbt) public void readFromNBT(NBTTagCompound nbt)
{ {
super.readFromNBT(nbt); super.readFromNBT(nbt);
energy.readFromNBT(nbt); energy.readFromNBT(nbt);
if (nbt.hasKey(RedstoneMode.NBT)) if (nbt.hasKey(RedstoneMode.NBT))
{ {
redstoneMode = RedstoneMode.getById(nbt.getInteger(RedstoneMode.NBT)); redstoneMode = RedstoneMode.getById(nbt.getInteger(RedstoneMode.NBT));
} }
} }
@Override @Override
public void writeToNBT(NBTTagCompound nbt) public void writeToNBT(NBTTagCompound nbt)
{ {
super.writeToNBT(nbt); super.writeToNBT(nbt);
energy.writeToNBT(nbt); energy.writeToNBT(nbt);
nbt.setInteger(RedstoneMode.NBT, redstoneMode.id); nbt.setInteger(RedstoneMode.NBT, redstoneMode.id);
} }
@Override @Override
public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate) public int receiveEnergy(EnumFacing from, int maxReceive, boolean simulate)
{ {
return energy.receiveEnergy(maxReceive, simulate); return energy.receiveEnergy(maxReceive, simulate);
} }
@Override @Override
public int getEnergyStored(ForgeDirection from) public int getEnergyStored(EnumFacing from)
{ {
return energy.getEnergyStored(); return energy.getEnergyStored();
} }
public int getEnergyScaled(int i) public int getEnergyScaled(int i)
{ {
return (int) ((float) energy.getEnergyStored() / (float) energy.getMaxEnergyStored() * (float) i); return (int) ((float) energy.getEnergyStored() / (float) energy.getMaxEnergyStored() * (float) i);
} }
@Override @Override
public int getMaxEnergyStored(ForgeDirection from) public int getMaxEnergyStored(EnumFacing from)
{ {
return energy.getMaxEnergyStored(); return energy.getMaxEnergyStored();
} }
public int getEnergyUsage() public int getEnergyUsage()
{ {
return energyUsage; return energyUsage;
} }
@Override @Override
public boolean canConnectEnergy(ForgeDirection from) public boolean canConnectEnergy(EnumFacing from)
{ {
return true; return true;
} }
public boolean isActive() public boolean isActive()
{ {
return energy.getEnergyStored() >= getEnergyUsage() && redstoneMode.isEnabled(worldObj, xCoord, yCoord, zCoord); return energy.getEnergyStored() >= getEnergyUsage() && redstoneMode.isEnabled(worldObj, pos);
} }
@Override @Override
public RedstoneMode getRedstoneMode() public RedstoneMode getRedstoneMode()
{ {
return redstoneMode; return redstoneMode;
} }
@Override @Override
public void setRedstoneMode(RedstoneMode mode) public void setRedstoneMode(RedstoneMode mode)
{ {
this.redstoneMode = mode; this.redstoneMode = mode;
} }
@Override @Override
public int getX() public void fromBytes(ByteBuf buf)
{ {
return xCoord; energy.setEnergyStored(buf.readInt());
} energyUsage = buf.readInt();
@Override redstoneMode = RedstoneMode.getById(buf.readInt());
public int getY()
{ items.clear();
return yCoord;
} int size = buf.readInt();
@Override for (int i = 0; i < size; ++i)
public int getZ() {
{ items.add(new StorageItem(buf));
return zCoord; }
} }
@Override @Override
public void fromBytes(ByteBuf buf) public void toBytes(ByteBuf buf)
{ {
energy.setEnergyStored(buf.readInt()); buf.writeInt(energy.getEnergyStored());
energyUsage = buf.readInt(); buf.writeInt(energyUsage);
redstoneMode = RedstoneMode.getById(buf.readInt()); buf.writeInt(redstoneMode.id);
items.clear(); buf.writeInt(items.size());
int size = buf.readInt(); for (StorageItem item : items)
{
for (int i = 0; i < size; ++i) item.toBytes(buf, items.indexOf(item));
{ }
items.add(new StorageItem(buf)); }
} }
}
@Override
public void toBytes(ByteBuf buf)
{
buf.writeInt(energy.getEnergyStored());
buf.writeInt(energyUsage);
buf.writeInt(redstoneMode.id);
buf.writeInt(items.size());
for (StorageItem item : items)
{
item.toBytes(buf, items.indexOf(item));
}
}
}

View File

@@ -1,44 +1,42 @@
package storagecraft.tile; package storagecraft.tile;
import java.util.List; import java.util.List;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemStack; import net.minecraft.util.BlockPos;
import storagecraft.util.InventoryUtils; import storagecraft.util.InventoryUtils;
public class TileDestructor extends TileMachine public class TileDestructor extends TileMachine
{ {
@Override @Override
public int getEnergyUsage() public int getEnergyUsage()
{ {
return 1; return 1;
} }
@Override @Override
public void updateMachine() public void updateMachine()
{ {
if (ticks % 10 == 0) if (ticks % 10 == 0)
{ {
int frontX = xCoord + getDirection().offsetX; BlockPos front = pos.offset(getDirection());
int frontY = yCoord + getDirection().offsetY;
int frontZ = zCoord + getDirection().offsetZ; Block frontBlock = worldObj.getBlockState(front).getBlock();
Block front = worldObj.getBlock(frontX, frontY, frontZ); if (!frontBlock.isAir(worldObj, front))
{
if (front != Blocks.air) List<ItemStack> drops = frontBlock.getDrops(worldObj, front, worldObj.getBlockState(front), 0);
{
List<ItemStack> drops = front.getDrops(worldObj, frontX, frontY, frontZ, worldObj.getBlockMetadata(frontX, frontY, frontZ), 0); worldObj.setBlockToAir(front);
worldObj.setBlockToAir(frontX, frontY, frontZ); for (ItemStack drop : drops)
{
for (ItemStack drop : drops) if (!getController().push(drop))
{ {
if (!getController().push(drop)) InventoryUtils.dropStack(worldObj, drop, front.getX(), front.getY(), front.getZ());
{ }
InventoryUtils.dropStack(worldObj, drop, frontX, frontY, frontZ); }
} }
} }
} }
} }
}
}

View File

@@ -1,293 +1,325 @@
package storagecraft.tile; package storagecraft.tile;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory; import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.ISidedInventory; import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import storagecraft.StorageCraftBlocks; import net.minecraft.util.EnumFacing;
import storagecraft.inventory.InventorySimple; import net.minecraft.util.IChatComponent;
import storagecraft.storage.StorageItem; import storagecraft.StorageCraftBlocks;
import storagecraft.util.InventoryUtils; import storagecraft.inventory.InventorySimple;
import storagecraft.storage.StorageItem;
public class TileDetector extends TileMachine implements IInventory, ISidedInventory, ICompareSetting import storagecraft.util.InventoryUtils;
{
public static final int MODE_UNDER = 0; public class TileDetector extends TileMachine implements IInventory, ISidedInventory, ICompareSetting
public static final int MODE_EQUAL = 1; {
public static final int MODE_ABOVE = 2; public static final int MODE_UNDER = 0;
public static final int MODE_EQUAL = 1;
public static final String NBT_COMPARE = "Compare"; public static final int MODE_ABOVE = 2;
public static final String NBT_MODE = "Mode";
public static final String NBT_AMOUNT = "Amount"; public static final String NBT_COMPARE = "Compare";
public static final String NBT_MODE = "Mode";
private InventorySimple inventory = new InventorySimple("detector", 1); public static final String NBT_AMOUNT = "Amount";
private int compare = 0; private InventorySimple inventory = new InventorySimple("detector", 1);
private int mode = MODE_EQUAL;
private int amount = 0; private int compare = 0;
private int mode = MODE_EQUAL;
private boolean providesPower = false; private int amount = 0;
public TileDetector() private boolean providesPower = false;
{
this.redstoneControlled = false; public TileDetector()
} {
this.redstoneControlled = false;
@Override }
public int getEnergyUsage()
{ @Override
return 4; public int getEnergyUsage()
} {
return 4;
@Override }
public void updateMachine()
{ @Override
if (ticks % 5 == 0) public void updateMachine()
{ {
ItemStack slot = inventory.getStackInSlot(0); if (ticks % 5 == 0)
{
boolean lastProvidesPower = providesPower; ItemStack slot = inventory.getStackInSlot(0);
if (slot != null) boolean lastProvidesPower = providesPower;
{
boolean foundAny = false; if (slot != null)
{
for (StorageItem item : getController().getItems()) boolean foundAny = false;
{
if (item.compare(slot, compare)) for (StorageItem item : getController().getItems())
{ {
foundAny = true; if (item.compare(slot, compare))
{
switch (mode) foundAny = true;
{
case MODE_UNDER: switch (mode)
providesPower = item.getQuantity() < amount; {
break; case MODE_UNDER:
case MODE_EQUAL: providesPower = item.getQuantity() < amount;
providesPower = item.getQuantity() == amount; break;
break; case MODE_EQUAL:
case MODE_ABOVE: providesPower = item.getQuantity() == amount;
providesPower = item.getQuantity() > amount; break;
break; case MODE_ABOVE:
} providesPower = item.getQuantity() > amount;
break;
break; }
}
} break;
}
if (!foundAny) }
{
if (mode == MODE_UNDER && amount != 0) if (!foundAny)
{ {
providesPower = true; if (mode == MODE_UNDER && amount != 0)
} {
else if (mode == MODE_EQUAL && amount == 0) providesPower = true;
{ }
providesPower = true; else if (mode == MODE_EQUAL && amount == 0)
} {
else providesPower = true;
{ }
providesPower = false; else
} {
} providesPower = false;
} }
else }
{ }
providesPower = false; else
} {
providesPower = false;
if (providesPower != lastProvidesPower) }
{
worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); if (providesPower != lastProvidesPower)
worldObj.notifyBlocksOfNeighborChange(xCoord, yCoord, zCoord, StorageCraftBlocks.DETECTOR); {
} worldObj.markBlockForUpdate(pos);
} worldObj.notifyBlockOfStateChange(pos, StorageCraftBlocks.DETECTOR);
} }
}
public boolean providesPower() }
{
return providesPower; public boolean providesPower()
} {
return providesPower;
@Override }
public int getCompare()
{ @Override
return compare; public int getCompare()
} {
return compare;
@Override }
public void setCompare(int compare)
{ @Override
this.compare = compare; public void setCompare(int compare)
} {
this.compare = compare;
public int getMode() }
{
return mode; public int getMode()
} {
return mode;
public void setMode(int mode) }
{
this.mode = mode; public void setMode(int mode)
} {
this.mode = mode;
public int getAmount() }
{
return amount; public int getAmount()
} {
return amount;
public void setAmount(int amount) }
{
this.amount = amount; public void setAmount(int amount)
} {
this.amount = amount;
@Override }
public int getSizeInventory()
{ @Override
return inventory.getSizeInventory(); public void readFromNBT(NBTTagCompound nbt)
} {
super.readFromNBT(nbt);
@Override
public ItemStack getStackInSlot(int slot) if (nbt.hasKey(NBT_COMPARE))
{ {
return inventory.getStackInSlot(slot); compare = nbt.getInteger(NBT_COMPARE);
} }
@Override if (nbt.hasKey(NBT_MODE))
public ItemStack decrStackSize(int slot, int amount) {
{ mode = nbt.getInteger(NBT_MODE);
return inventory.decrStackSize(slot, amount); }
}
if (nbt.hasKey(NBT_AMOUNT))
@Override {
public ItemStack getStackInSlotOnClosing(int slot) amount = nbt.getInteger(NBT_AMOUNT);
{ }
return inventory.getStackInSlotOnClosing(slot);
} InventoryUtils.restoreInventory(this, nbt);
}
@Override
public void setInventorySlotContents(int slot, ItemStack stack) @Override
{ public void writeToNBT(NBTTagCompound nbt)
inventory.setInventorySlotContents(slot, stack); {
} super.writeToNBT(nbt);
@Override nbt.setInteger(NBT_COMPARE, compare);
public String getInventoryName() nbt.setInteger(NBT_MODE, mode);
{ nbt.setInteger(NBT_AMOUNT, amount);
return inventory.getInventoryName();
} InventoryUtils.saveInventory(this, nbt);
}
@Override
public boolean hasCustomInventoryName() @Override
{ public void fromBytes(ByteBuf buf)
return inventory.hasCustomInventoryName(); {
} super.fromBytes(buf);
@Override compare = buf.readInt();
public int getInventoryStackLimit() mode = buf.readInt();
{ amount = buf.readInt();
return inventory.getInventoryStackLimit(); providesPower = buf.readBoolean();
} }
@Override @Override
public boolean isUseableByPlayer(EntityPlayer player) public void toBytes(ByteBuf buf)
{ {
return inventory.isUseableByPlayer(player); super.toBytes(buf);
}
buf.writeInt(compare);
@Override buf.writeInt(mode);
public void openInventory() buf.writeInt(amount);
{ buf.writeBoolean(providesPower);
inventory.openInventory(); }
}
@Override
@Override public int getSizeInventory()
public void closeInventory() {
{ return inventory.getSizeInventory();
inventory.closeInventory(); }
}
@Override
@Override public ItemStack getStackInSlot(int slot)
public boolean isItemValidForSlot(int slot, ItemStack stack) {
{ return inventory.getStackInSlot(slot);
return inventory.isItemValidForSlot(slot, stack); }
}
@Override
@Override public ItemStack decrStackSize(int slot, int count)
public int[] getAccessibleSlotsFromSide(int side) {
{ return inventory.decrStackSize(slot, count);
return new int[] }
{
}; @Override
} public ItemStack getStackInSlotOnClosing(int slot)
{
@Override return inventory.getStackInSlotOnClosing(slot);
public boolean canInsertItem(int slot, ItemStack stack, int side) }
{
return false; @Override
} public void setInventorySlotContents(int slot, ItemStack stack)
{
@Override inventory.setInventorySlotContents(slot, stack);
public boolean canExtractItem(int slot, ItemStack stack, int side) }
{
return false; @Override
} public int getInventoryStackLimit()
{
@Override return inventory.getInventoryStackLimit();
public void readFromNBT(NBTTagCompound nbt) }
{
super.readFromNBT(nbt); @Override
public boolean isUseableByPlayer(EntityPlayer player)
if (nbt.hasKey(NBT_COMPARE)) {
{ return inventory.isUseableByPlayer(player);
compare = nbt.getInteger(NBT_COMPARE); }
}
@Override
if (nbt.hasKey(NBT_MODE)) public void openInventory(EntityPlayer player)
{ {
mode = nbt.getInteger(NBT_MODE); inventory.openInventory(player);
} }
if (nbt.hasKey(NBT_AMOUNT)) @Override
{ public void closeInventory(EntityPlayer player)
amount = nbt.getInteger(NBT_AMOUNT); {
} inventory.closeInventory(player);
}
InventoryUtils.restoreInventory(this, nbt);
} @Override
public boolean isItemValidForSlot(int slot, ItemStack stack)
@Override {
public void writeToNBT(NBTTagCompound nbt) return inventory.isItemValidForSlot(slot, stack);
{ }
super.writeToNBT(nbt);
@Override
nbt.setInteger(NBT_COMPARE, compare); public int getField(int id)
nbt.setInteger(NBT_MODE, mode); {
nbt.setInteger(NBT_AMOUNT, amount); return inventory.getField(id);
}
InventoryUtils.saveInventory(this, nbt);
} @Override
public void setField(int id, int value)
@Override {
public void fromBytes(ByteBuf buf) inventory.setField(id, value);
{ }
super.fromBytes(buf);
@Override
compare = buf.readInt(); public int getFieldCount()
mode = buf.readInt(); {
amount = buf.readInt(); return inventory.getFieldCount();
providesPower = buf.readBoolean(); }
}
@Override
@Override public void clear()
public void toBytes(ByteBuf buf) {
{ inventory.clear();
super.toBytes(buf); }
buf.writeInt(compare); @Override
buf.writeInt(mode); public String getName()
buf.writeInt(amount); {
buf.writeBoolean(providesPower); return inventory.getName();
} }
}
@Override
public boolean hasCustomName()
{
return inventory.hasCustomName();
}
@Override
public IChatComponent getDisplayName()
{
return inventory.getDisplayName();
}
@Override
public int[] getSlotsForFace(EnumFacing side)
{
return new int[]
{
};
}
@Override
public boolean canInsertItem(int slot, ItemStack stack, EnumFacing direction)
{
return false;
}
@Override
public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction)
{
return false;
}
}

View File

@@ -1,144 +1,175 @@
package storagecraft.tile; package storagecraft.tile;
import java.util.List; import java.util.List;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory; import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import storagecraft.inventory.InventorySimple; import net.minecraft.util.IChatComponent;
import storagecraft.storage.CellStorage; import storagecraft.inventory.InventorySimple;
import storagecraft.storage.IStorage; import storagecraft.storage.CellStorage;
import storagecraft.storage.IStorageProvider; import storagecraft.storage.IStorage;
import storagecraft.util.InventoryUtils; import storagecraft.storage.IStorageProvider;
import storagecraft.util.InventoryUtils;
public class TileDrive extends TileMachine implements IInventory, IStorageProvider
{ public class TileDrive extends TileMachine implements IInventory, IStorageProvider
private InventorySimple inventory = new InventorySimple("drive", 8); {
private InventorySimple inventory = new InventorySimple("drive", 8);
@Override
public int getEnergyUsage() @Override
{ public int getEnergyUsage()
int base = 5; {
int base = 5;
for (int i = 0; i < getSizeInventory(); ++i)
{ for (int i = 0; i < getSizeInventory(); ++i)
if (getStackInSlot(i) != null) {
{ if (getStackInSlot(i) != null)
base += 2; {
} base += 2;
} }
}
return base;
} return base;
}
@Override
public void updateMachine() @Override
{ public void updateMachine()
} {
}
@Override
public int getSizeInventory() @Override
{ public void readFromNBT(NBTTagCompound nbt)
return inventory.getSizeInventory(); {
} super.readFromNBT(nbt);
@Override InventoryUtils.restoreInventory(this, nbt);
public ItemStack getStackInSlot(int slot) }
{
return inventory.getStackInSlot(slot); @Override
} public void writeToNBT(NBTTagCompound nbt)
{
@Override super.writeToNBT(nbt);
public ItemStack decrStackSize(int slot, int amount)
{ InventoryUtils.saveInventory(this, nbt);
return inventory.decrStackSize(slot, amount); }
}
@Override
@Override public void addStorages(List<IStorage> storages)
public ItemStack getStackInSlotOnClosing(int slot) {
{ for (int i = 0; i < getSizeInventory(); ++i)
return inventory.getStackInSlotOnClosing(slot); {
} if (getStackInSlot(i) != null)
{
@Override storages.add(new CellStorage(getStackInSlot(i)));
public void setInventorySlotContents(int slot, ItemStack stack) }
{ }
inventory.setInventorySlotContents(slot, stack); }
}
@Override
@Override public int getSizeInventory()
public String getInventoryName() {
{ return inventory.getSizeInventory();
return inventory.getInventoryName(); }
}
@Override
@Override public ItemStack getStackInSlot(int slot)
public boolean hasCustomInventoryName() {
{ return inventory.getStackInSlot(slot);
return inventory.hasCustomInventoryName(); }
}
@Override
@Override public ItemStack decrStackSize(int slot, int count)
public int getInventoryStackLimit() {
{ return inventory.decrStackSize(slot, count);
return inventory.getInventoryStackLimit(); }
}
@Override
@Override public ItemStack getStackInSlotOnClosing(int slot)
public boolean isUseableByPlayer(EntityPlayer player) {
{ return inventory.getStackInSlotOnClosing(slot);
return inventory.isUseableByPlayer(player); }
}
@Override
@Override public void setInventorySlotContents(int slot, ItemStack stack)
public void openInventory() {
{ inventory.setInventorySlotContents(slot, stack);
inventory.openInventory(); }
}
@Override
@Override public int getInventoryStackLimit()
public void closeInventory() {
{ return inventory.getInventoryStackLimit();
inventory.closeInventory(); }
}
@Override
@Override public boolean isUseableByPlayer(EntityPlayer player)
public boolean isItemValidForSlot(int slot, ItemStack stack) {
{ return inventory.isUseableByPlayer(player);
return inventory.isItemValidForSlot(slot, stack); }
}
@Override
@Override public void openInventory(EntityPlayer player)
public void readFromNBT(NBTTagCompound nbt) {
{ inventory.openInventory(player);
super.readFromNBT(nbt); }
InventoryUtils.restoreInventory(this, nbt); @Override
} public void closeInventory(EntityPlayer player)
{
@Override inventory.closeInventory(player);
public void writeToNBT(NBTTagCompound nbt) }
{
super.writeToNBT(nbt); @Override
public boolean isItemValidForSlot(int slot, ItemStack stack)
InventoryUtils.saveInventory(this, nbt); {
} return inventory.isItemValidForSlot(slot, stack);
}
@Override
public void addStorages(List<IStorage> storages) @Override
{ public int getField(int id)
for (int i = 0; i < getSizeInventory(); ++i) {
{ return inventory.getField(id);
if (getStackInSlot(i) != null) }
{
storages.add(new CellStorage(getStackInSlot(i))); @Override
} public void setField(int id, int value)
} {
} inventory.setField(id, value);
}
@Override
public IInventory getDroppedInventory() @Override
{ public int getFieldCount()
return inventory; {
} return inventory.getFieldCount();
} }
@Override
public void clear()
{
inventory.clear();
}
@Override
public String getName()
{
return inventory.getName();
}
@Override
public boolean hasCustomName()
{
return inventory.hasCustomName();
}
@Override
public IChatComponent getDisplayName()
{
return inventory.getDisplayName();
}
@Override
public IInventory getDroppedInventory()
{
return inventory;
}
}

View File

@@ -1,232 +1,264 @@
package storagecraft.tile; package storagecraft.tile;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory; import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.ISidedInventory; import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import storagecraft.inventory.InventorySimple; import net.minecraft.util.EnumFacing;
import storagecraft.util.InventoryUtils; import net.minecraft.util.IChatComponent;
import storagecraft.inventory.InventorySimple;
public class TileExporter extends TileMachine implements IInventory, ISidedInventory, ICompareSetting import storagecraft.util.InventoryUtils;
{
public static final String NBT_COMPARE = "Compare"; public class TileExporter extends TileMachine implements IInventory, ISidedInventory, ICompareSetting
{
private InventorySimple inventory = new InventorySimple("exporter", 9); public static final String NBT_COMPARE = "Compare";
private int compare = 0; private InventorySimple inventory = new InventorySimple("exporter", 9);
@Override private int compare = 0;
public int getEnergyUsage()
{ @Override
return 2; public int getEnergyUsage()
} {
return 2;
@Override }
public void updateMachine()
{ @Override
TileEntity tile = worldObj.getTileEntity(xCoord + getDirection().offsetX, yCoord + getDirection().offsetY, zCoord + getDirection().offsetZ); public void updateMachine()
{
if (tile instanceof IInventory) TileEntity tile = worldObj.getTileEntity(pos.offset(getDirection()));
{
IInventory connectedInventory = (IInventory) tile; if (tile instanceof IInventory)
{
if (ticks % 5 == 0) IInventory connectedInventory = (IInventory) tile;
{
for (int i = 0; i < inventory.getSizeInventory(); ++i) if (ticks % 5 == 0)
{ {
ItemStack slot = inventory.getStackInSlot(i); for (int i = 0; i < inventory.getSizeInventory(); ++i)
{
if (slot != null) ItemStack slot = inventory.getStackInSlot(i);
{
ItemStack toTake = slot.copy(); if (slot != null)
{
toTake.stackSize = 64; ItemStack toTake = slot.copy();
ItemStack took = getController().take(toTake, compare); toTake.stackSize = 64;
if (took != null) ItemStack took = getController().take(toTake, compare);
{
if (connectedInventory instanceof ISidedInventory) if (took != null)
{ {
ISidedInventory sided = (ISidedInventory) connectedInventory; if (connectedInventory instanceof ISidedInventory)
{
boolean pushedAny = false; ISidedInventory sided = (ISidedInventory) connectedInventory;
for (int sidedSlot = 0; sidedSlot < connectedInventory.getSizeInventory(); ++sidedSlot) boolean pushedAny = false;
{
if (sided.canInsertItem(sidedSlot, took, getDirection().getOpposite().ordinal()) && InventoryUtils.canPushToInventorySlot(connectedInventory, sidedSlot, took)) for (int sidedSlot = 0; sidedSlot < connectedInventory.getSizeInventory(); ++sidedSlot)
{ {
InventoryUtils.pushToInventorySlot(connectedInventory, sidedSlot, took); if (sided.canInsertItem(sidedSlot, took, getDirection().getOpposite()) && InventoryUtils.canPushToInventorySlot(connectedInventory, sidedSlot, took))
{
pushedAny = true; InventoryUtils.pushToInventorySlot(connectedInventory, sidedSlot, took);
break; pushedAny = true;
}
} break;
}
if (!pushedAny) }
{
getController().push(took); if (!pushedAny)
} {
} getController().push(took);
else if (InventoryUtils.canPushToInventory(connectedInventory, took)) }
{ }
InventoryUtils.pushToInventory(connectedInventory, took); else if (InventoryUtils.canPushToInventory(connectedInventory, took))
} {
else InventoryUtils.pushToInventory(connectedInventory, took);
{ }
getController().push(took); else
} {
} getController().push(took);
} }
} }
} }
} }
} }
}
@Override }
public int getCompare()
{ @Override
return compare; public int getCompare()
} {
return compare;
@Override }
public void setCompare(int compare)
{ @Override
this.compare = compare; public void setCompare(int compare)
} {
this.compare = compare;
@Override }
public int getSizeInventory()
{ @Override
return inventory.getSizeInventory(); public void readFromNBT(NBTTagCompound nbt)
} {
super.readFromNBT(nbt);
@Override
public ItemStack getStackInSlot(int slot) if (nbt.hasKey(NBT_COMPARE))
{ {
return inventory.getStackInSlot(slot); compare = nbt.getInteger(NBT_COMPARE);
} }
@Override InventoryUtils.restoreInventory(this, nbt);
public ItemStack decrStackSize(int slot, int amount) }
{
return inventory.decrStackSize(slot, amount); @Override
} public void writeToNBT(NBTTagCompound nbt)
{
@Override super.writeToNBT(nbt);
public ItemStack getStackInSlotOnClosing(int slot)
{ nbt.setInteger(NBT_COMPARE, compare);
return inventory.getStackInSlotOnClosing(slot);
} InventoryUtils.saveInventory(this, nbt);
}
@Override
public void setInventorySlotContents(int slot, ItemStack stack) @Override
{ public void fromBytes(ByteBuf buf)
inventory.setInventorySlotContents(slot, stack); {
} super.fromBytes(buf);
@Override compare = buf.readInt();
public String getInventoryName() }
{
return inventory.getInventoryName(); @Override
} public void toBytes(ByteBuf buf)
{
@Override super.toBytes(buf);
public boolean hasCustomInventoryName()
{ buf.writeInt(compare);
return inventory.hasCustomInventoryName(); }
}
@Override
@Override public int getSizeInventory()
public int getInventoryStackLimit() {
{ return inventory.getSizeInventory();
return inventory.getInventoryStackLimit(); }
}
@Override
@Override public ItemStack getStackInSlot(int slot)
public boolean isUseableByPlayer(EntityPlayer player) {
{ return inventory.getStackInSlot(slot);
return inventory.isUseableByPlayer(player); }
}
@Override
@Override public ItemStack decrStackSize(int slot, int count)
public void openInventory() {
{ return inventory.decrStackSize(slot, count);
inventory.openInventory(); }
}
@Override
@Override public ItemStack getStackInSlotOnClosing(int slot)
public void closeInventory() {
{ return inventory.getStackInSlotOnClosing(slot);
inventory.closeInventory(); }
}
@Override
@Override public void setInventorySlotContents(int slot, ItemStack stack)
public boolean isItemValidForSlot(int slot, ItemStack stack) {
{ inventory.setInventorySlotContents(slot, stack);
return inventory.isItemValidForSlot(slot, stack); }
}
@Override
@Override public int getInventoryStackLimit()
public int[] getAccessibleSlotsFromSide(int side) {
{ return inventory.getInventoryStackLimit();
return new int[] }
{
}; @Override
} public boolean isUseableByPlayer(EntityPlayer player)
{
@Override return inventory.isUseableByPlayer(player);
public boolean canInsertItem(int slot, ItemStack stack, int side) }
{
return false; @Override
} public void openInventory(EntityPlayer player)
{
@Override inventory.openInventory(player);
public boolean canExtractItem(int slot, ItemStack stack, int side) }
{
return false; @Override
} public void closeInventory(EntityPlayer player)
{
@Override inventory.closeInventory(player);
public void readFromNBT(NBTTagCompound nbt) }
{
super.readFromNBT(nbt); @Override
public boolean isItemValidForSlot(int slot, ItemStack stack)
if (nbt.hasKey(NBT_COMPARE)) {
{ return inventory.isItemValidForSlot(slot, stack);
compare = nbt.getInteger(NBT_COMPARE); }
}
@Override
InventoryUtils.restoreInventory(this, nbt); public int getField(int id)
} {
return inventory.getField(id);
@Override }
public void writeToNBT(NBTTagCompound nbt)
{ @Override
super.writeToNBT(nbt); public void setField(int id, int value)
{
nbt.setInteger(NBT_COMPARE, compare); inventory.setField(id, value);
}
InventoryUtils.saveInventory(this, nbt);
} @Override
public int getFieldCount()
@Override {
public void fromBytes(ByteBuf buf) return inventory.getFieldCount();
{ }
super.fromBytes(buf);
@Override
compare = buf.readInt(); public void clear()
} {
inventory.clear();
@Override }
public void toBytes(ByteBuf buf)
{ @Override
super.toBytes(buf); public String getName()
{
buf.writeInt(compare); return inventory.getName();
} }
}
@Override
public boolean hasCustomName()
{
return inventory.hasCustomName();
}
@Override
public IChatComponent getDisplayName()
{
return inventory.getDisplayName();
}
@Override
public int[] getSlotsForFace(EnumFacing side)
{
return new int[]
{
};
}
@Override
public boolean canInsertItem(int slot, ItemStack stack, EnumFacing direction)
{
return false;
}
@Override
public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction)
{
return false;
}
}

View File

@@ -1,126 +1,126 @@
package storagecraft.tile; package storagecraft.tile;
import java.util.List; import java.util.List;
import net.minecraft.inventory.IInventory; import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import storagecraft.storage.IStorage; import storagecraft.storage.IStorage;
import storagecraft.storage.IStorageProvider; import storagecraft.storage.IStorageProvider;
import storagecraft.storage.StorageItem; import storagecraft.storage.StorageItem;
import storagecraft.util.InventoryUtils; import storagecraft.util.InventoryUtils;
public class TileExternalStorage extends TileMachine implements IStorageProvider, IStorage public class TileExternalStorage extends TileMachine implements IStorageProvider, IStorage
{ {
public IInventory getInventory() public IInventory getInventory()
{ {
TileEntity tile = worldObj.getTileEntity(xCoord + getDirection().offsetX, yCoord + getDirection().offsetY, zCoord + getDirection().offsetZ); TileEntity tile = worldObj.getTileEntity(pos.offset(getDirection()));
if (tile instanceof IInventory) if (tile instanceof IInventory)
{ {
return (IInventory) tile; return (IInventory) tile;
} }
return null; return null;
} }
@Override @Override
public int getEnergyUsage() public int getEnergyUsage()
{ {
return 2; return 2;
} }
@Override @Override
public void updateMachine() public void updateMachine()
{ {
} }
@Override @Override
public void addItems(List<StorageItem> items) public void addItems(List<StorageItem> items)
{ {
IInventory inventory = getInventory(); IInventory inventory = getInventory();
if (inventory != null) if (inventory != null)
{ {
for (int i = 0; i < inventory.getSizeInventory(); ++i) for (int i = 0; i < inventory.getSizeInventory(); ++i)
{ {
if (inventory.getStackInSlot(i) != null) if (inventory.getStackInSlot(i) != null)
{ {
items.add(new StorageItem(inventory.getStackInSlot(i))); items.add(new StorageItem(inventory.getStackInSlot(i)));
} }
} }
} }
} }
@Override @Override
public void push(ItemStack stack) public void push(ItemStack stack)
{ {
IInventory inventory = getInventory(); IInventory inventory = getInventory();
if (inventory == null) if (inventory == null)
{ {
return; return;
} }
InventoryUtils.pushToInventory(inventory, stack); InventoryUtils.pushToInventory(inventory, stack);
} }
@Override @Override
public ItemStack take(ItemStack stack, int flags) public ItemStack take(ItemStack stack, int flags)
{ {
IInventory inventory = getInventory(); IInventory inventory = getInventory();
if (inventory == null) if (inventory == null)
{ {
return null; return null;
} }
int quantity = stack.stackSize; int quantity = stack.stackSize;
for (int i = 0; i < inventory.getSizeInventory(); ++i) for (int i = 0; i < inventory.getSizeInventory(); ++i)
{ {
ItemStack slot = inventory.getStackInSlot(i); ItemStack slot = inventory.getStackInSlot(i);
if (slot != null && InventoryUtils.compareStack(slot, stack, flags)) if (slot != null && InventoryUtils.compareStack(slot, stack, flags))
{ {
if (quantity > slot.stackSize) if (quantity > slot.stackSize)
{ {
quantity = slot.stackSize; quantity = slot.stackSize;
} }
slot.stackSize -= quantity; slot.stackSize -= quantity;
if (slot.stackSize == 0) if (slot.stackSize == 0)
{ {
inventory.setInventorySlotContents(i, null); inventory.setInventorySlotContents(i, null);
} }
ItemStack newItem = slot.copy(); ItemStack newItem = slot.copy();
newItem.stackSize = quantity; newItem.stackSize = quantity;
return newItem; return newItem;
} }
} }
return null; return null;
} }
@Override @Override
public boolean canPush(ItemStack stack) public boolean canPush(ItemStack stack)
{ {
IInventory inventory = getInventory(); IInventory inventory = getInventory();
if (inventory == null) if (inventory == null)
{ {
return false; return false;
} }
return InventoryUtils.canPushToInventory(inventory, stack); return InventoryUtils.canPushToInventory(inventory, stack);
} }
@Override @Override
public void addStorages(List<IStorage> storages) public void addStorages(List<IStorage> storages)
{ {
storages.add(this); storages.add(this);
} }
} }

View File

@@ -1,110 +1,110 @@
package storagecraft.tile; package storagecraft.tile;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.IInventory; import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.inventory.InventoryCrafting; import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.CraftingManager;
import net.minecraft.item.crafting.CraftingManager; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.fml.common.network.NetworkRegistry.TargetPoint;
import storagecraft.StorageCraft; import storagecraft.StorageCraft;
import storagecraft.container.ContainerGridCrafting; import storagecraft.container.ContainerGridCrafting;
import storagecraft.inventory.InventorySimple; import storagecraft.inventory.InventorySimple;
import storagecraft.network.MessageGridCraftingUpdate; import storagecraft.network.MessageGridCraftingUpdate;
import storagecraft.storage.StorageItem; import storagecraft.storage.StorageItem;
import storagecraft.util.InventoryUtils; import storagecraft.util.InventoryUtils;
public class TileGrid extends TileMachine public class TileGrid extends TileMachine
{ {
private ContainerGridCrafting craftingMatrixContainer = new ContainerGridCrafting(this); private ContainerGridCrafting craftingMatrixContainer = new ContainerGridCrafting(this);
private InventoryCrafting craftingMatrix = new InventoryCrafting(craftingMatrixContainer, 3, 3); private InventoryCrafting craftingMatrix = new InventoryCrafting(craftingMatrixContainer, 3, 3);
private InventorySimple craftingResult = new InventorySimple("craftingResult", 1); private InventorySimple craftingResult = new InventorySimple("craftingResult", 1);
@Override @Override
public int getEnergyUsage() public int getEnergyUsage()
{ {
return 5; return 5;
} }
@Override @Override
public void updateMachine() public void updateMachine()
{ {
} }
public int getType() public int getType()
{ {
return worldObj.getBlockMetadata(xCoord, yCoord, zCoord); return 0; // @TODO: Make other grid work too
} }
public boolean isCrafting() public boolean isCrafting()
{ {
return getType() == 1; return getType() == 1;
} }
public InventoryCrafting getCraftingMatrix() public InventoryCrafting getCraftingMatrix()
{ {
return craftingMatrix; return craftingMatrix;
} }
public void onCraftingMatrixChanged() public void onCraftingMatrixChanged()
{ {
craftingResult.setInventorySlotContents(0, CraftingManager.getInstance().findMatchingRecipe(craftingMatrix, worldObj)); craftingResult.setInventorySlotContents(0, CraftingManager.getInstance().findMatchingRecipe(craftingMatrix, worldObj));
} }
public void onCrafted(ItemStack[] matrixSlots) public void onCrafted(ItemStack[] matrixSlots)
{ {
if (isConnected() && !worldObj.isRemote) if (isConnected() && !worldObj.isRemote)
{ {
for (int i = 0; i < craftingMatrix.getSizeInventory(); ++i) for (int i = 0; i < craftingMatrix.getSizeInventory(); ++i)
{ {
ItemStack slot = craftingMatrix.getStackInSlot(i); ItemStack slot = craftingMatrix.getStackInSlot(i);
if (slot == null && matrixSlots[i] != null) if (slot == null && matrixSlots[i] != null)
{ {
for (StorageItem item : getController().getItems()) for (StorageItem item : getController().getItems())
{ {
if (item.compareNoQuantity(matrixSlots[i].copy())) if (item.compareNoQuantity(matrixSlots[i].copy()))
{ {
craftingMatrix.setInventorySlotContents(i, getController().take(matrixSlots[i].copy())); craftingMatrix.setInventorySlotContents(i, getController().take(matrixSlots[i].copy()));
break; break;
} }
} }
} }
} }
onCraftingMatrixChanged(); onCraftingMatrixChanged();
// @TODO: HACK! // @TODO: HACK!
TargetPoint target = new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, UPDATE_RANGE); TargetPoint target = new TargetPoint(worldObj.provider.getDimensionId(), pos.getX(), pos.getY(), pos.getZ(), UPDATE_RANGE);
StorageCraft.NETWORK.sendToAllAround(new MessageGridCraftingUpdate(this), target); StorageCraft.NETWORK.sendToAllAround(new MessageGridCraftingUpdate(this), target);
} }
} }
public InventorySimple getCraftingResult() public InventorySimple getCraftingResult()
{ {
return craftingResult; return craftingResult;
} }
@Override @Override
public void readFromNBT(NBTTagCompound nbt) public void readFromNBT(NBTTagCompound nbt)
{ {
super.readFromNBT(nbt); super.readFromNBT(nbt);
InventoryUtils.restoreInventory(craftingMatrix, nbt); InventoryUtils.restoreInventory(craftingMatrix, nbt);
} }
@Override @Override
public void writeToNBT(NBTTagCompound nbt) public void writeToNBT(NBTTagCompound nbt)
{ {
super.writeToNBT(nbt); super.writeToNBT(nbt);
InventoryUtils.saveInventory(craftingMatrix, nbt); InventoryUtils.saveInventory(craftingMatrix, nbt);
} }
@Override @Override
public IInventory getDroppedInventory() public IInventory getDroppedInventory()
{ {
return craftingMatrix; return craftingMatrix;
} }
} }

View File

@@ -1,283 +1,315 @@
package storagecraft.tile; package storagecraft.tile;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory; import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.ISidedInventory; import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import storagecraft.inventory.InventorySimple; import net.minecraft.util.EnumFacing;
import storagecraft.util.InventoryUtils; import net.minecraft.util.IChatComponent;
import storagecraft.inventory.InventorySimple;
public class TileImporter extends TileMachine implements IInventory, ISidedInventory, ICompareSetting import storagecraft.util.InventoryUtils;
{
public static final int MODE_WHITELIST = 0; public class TileImporter extends TileMachine implements IInventory, ISidedInventory, ICompareSetting
public static final int MODE_BLACKLIST = 1; {
public static final int MODE_WHITELIST = 0;
public static final String NBT_COMPARE = "Compare"; public static final int MODE_BLACKLIST = 1;
public static final String NBT_MODE = "Mode";
public static final String NBT_COMPARE = "Compare";
private InventorySimple inventory = new InventorySimple("importer", 9); public static final String NBT_MODE = "Mode";
private int compare = 0; private InventorySimple inventory = new InventorySimple("importer", 9);
private int mode = MODE_WHITELIST;
private int compare = 0;
private int currentSlot = 0; private int mode = MODE_WHITELIST;
@Override private int currentSlot = 0;
public int getEnergyUsage()
{ @Override
return 2; public int getEnergyUsage()
} {
return 2;
@Override }
public void updateMachine()
{ @Override
TileEntity tile = worldObj.getTileEntity(xCoord + getDirection().offsetX, yCoord + getDirection().offsetY, zCoord + getDirection().offsetZ); public void updateMachine()
{
if (tile instanceof IInventory) TileEntity tile = worldObj.getTileEntity(pos.offset(getDirection()));
{
IInventory connectedInventory = (IInventory) tile; if (tile instanceof IInventory)
{
if (ticks % 5 == 0) IInventory connectedInventory = (IInventory) tile;
{
ItemStack slot = connectedInventory.getStackInSlot(currentSlot); if (ticks % 5 == 0)
{
while ((slot = connectedInventory.getStackInSlot(currentSlot)) == null) ItemStack slot = connectedInventory.getStackInSlot(currentSlot);
{
currentSlot++; while ((slot = connectedInventory.getStackInSlot(currentSlot)) == null)
{
if (currentSlot > connectedInventory.getSizeInventory() - 1) currentSlot++;
{
break; if (currentSlot > connectedInventory.getSizeInventory() - 1)
} {
} break;
}
if (slot != null && canImport(slot)) }
{
if (connectedInventory instanceof ISidedInventory) if (slot != null && canImport(slot))
{ {
ISidedInventory sided = (ISidedInventory) connectedInventory; if (connectedInventory instanceof ISidedInventory)
{
if (sided.canExtractItem(currentSlot, slot.copy(), getDirection().getOpposite().ordinal())) ISidedInventory sided = (ISidedInventory) connectedInventory;
{
if (getController().push(slot.copy())) if (sided.canExtractItem(currentSlot, slot.copy(), getDirection().getOpposite()))
{ {
connectedInventory.setInventorySlotContents(currentSlot, null); if (getController().push(slot.copy()))
} {
} connectedInventory.setInventorySlotContents(currentSlot, null);
} }
else if (getController().push(slot.copy())) }
{ }
connectedInventory.setInventorySlotContents(currentSlot, null); else if (getController().push(slot.copy()))
} {
connectedInventory.setInventorySlotContents(currentSlot, null);
connectedInventory.markDirty(); }
}
connectedInventory.markDirty();
currentSlot++; }
if (currentSlot > connectedInventory.getSizeInventory() - 1) currentSlot++;
{
currentSlot = 0; if (currentSlot > connectedInventory.getSizeInventory() - 1)
} {
} currentSlot = 0;
} }
} }
}
public boolean canImport(ItemStack stack) }
{
int slots = 0; public boolean canImport(ItemStack stack)
{
for (int i = 0; i < inventory.getSizeInventory(); ++i) int slots = 0;
{
ItemStack slot = inventory.getStackInSlot(i); for (int i = 0; i < inventory.getSizeInventory(); ++i)
{
if (slot != null) ItemStack slot = inventory.getStackInSlot(i);
{
slots++; if (slot != null)
{
if (InventoryUtils.compareStack(stack, slot, compare)) slots++;
{
if (mode == MODE_WHITELIST) if (InventoryUtils.compareStack(stack, slot, compare))
{ {
return true; if (mode == MODE_WHITELIST)
} {
else if (mode == MODE_BLACKLIST) return true;
{ }
return false; else if (mode == MODE_BLACKLIST)
} {
} return false;
} }
} }
}
if (mode == MODE_WHITELIST) }
{
return slots == 0; if (mode == MODE_WHITELIST)
} {
return slots == 0;
return true; }
}
return true;
@Override }
public int getCompare()
{ @Override
return compare; public int getCompare()
} {
return compare;
@Override }
public void setCompare(int compare)
{ @Override
this.compare = compare; public void setCompare(int compare)
} {
this.compare = compare;
public int getMode() }
{
return mode; public int getMode()
} {
return mode;
public void setMode(int mode) }
{
this.mode = mode; public void setMode(int mode)
} {
this.mode = mode;
@Override }
public int getSizeInventory()
{ @Override
return inventory.getSizeInventory(); public void readFromNBT(NBTTagCompound nbt)
} {
super.readFromNBT(nbt);
@Override
public ItemStack getStackInSlot(int slot) if (nbt.hasKey(NBT_COMPARE))
{ {
return inventory.getStackInSlot(slot); compare = nbt.getInteger(NBT_COMPARE);
} }
@Override if (nbt.hasKey(NBT_MODE))
public ItemStack decrStackSize(int slot, int amount) {
{ mode = nbt.getInteger(NBT_MODE);
return inventory.decrStackSize(slot, amount); }
}
InventoryUtils.restoreInventory(this, nbt);
@Override }
public ItemStack getStackInSlotOnClosing(int slot)
{ @Override
return inventory.getStackInSlotOnClosing(slot); public void writeToNBT(NBTTagCompound nbt)
} {
super.writeToNBT(nbt);
@Override
public void setInventorySlotContents(int slot, ItemStack stack) nbt.setInteger(NBT_COMPARE, compare);
{ nbt.setInteger(NBT_MODE, mode);
inventory.setInventorySlotContents(slot, stack);
} InventoryUtils.saveInventory(this, nbt);
}
@Override
public String getInventoryName() @Override
{ public void fromBytes(ByteBuf buf)
return inventory.getInventoryName(); {
} super.fromBytes(buf);
@Override compare = buf.readInt();
public boolean hasCustomInventoryName() mode = buf.readInt();
{ }
return inventory.hasCustomInventoryName();
} @Override
public void toBytes(ByteBuf buf)
@Override {
public int getInventoryStackLimit() super.toBytes(buf);
{
return inventory.getInventoryStackLimit(); buf.writeInt(compare);
} buf.writeInt(mode);
}
@Override
public boolean isUseableByPlayer(EntityPlayer player) @Override
{ public int getSizeInventory()
return inventory.isUseableByPlayer(player); {
} return inventory.getSizeInventory();
}
@Override
public void openInventory() @Override
{ public ItemStack getStackInSlot(int slot)
inventory.openInventory(); {
} return inventory.getStackInSlot(slot);
}
@Override
public void closeInventory() @Override
{ public ItemStack decrStackSize(int slot, int count)
inventory.closeInventory(); {
} return inventory.decrStackSize(slot, count);
}
@Override
public boolean isItemValidForSlot(int slot, ItemStack stack) @Override
{ public ItemStack getStackInSlotOnClosing(int slot)
return inventory.isItemValidForSlot(slot, stack); {
} return inventory.getStackInSlotOnClosing(slot);
}
@Override
public int[] getAccessibleSlotsFromSide(int side) @Override
{ public void setInventorySlotContents(int slot, ItemStack stack)
return new int[] {
{ inventory.setInventorySlotContents(slot, stack);
}; }
}
@Override
@Override public int getInventoryStackLimit()
public boolean canInsertItem(int slot, ItemStack stack, int side) {
{ return inventory.getInventoryStackLimit();
return false; }
}
@Override
@Override public boolean isUseableByPlayer(EntityPlayer player)
public boolean canExtractItem(int slot, ItemStack stack, int side) {
{ return inventory.isUseableByPlayer(player);
return false; }
}
@Override
@Override public void openInventory(EntityPlayer player)
public void readFromNBT(NBTTagCompound nbt) {
{ inventory.openInventory(player);
super.readFromNBT(nbt); }
if (nbt.hasKey(NBT_COMPARE)) @Override
{ public void closeInventory(EntityPlayer player)
compare = nbt.getInteger(NBT_COMPARE); {
} inventory.closeInventory(player);
}
if (nbt.hasKey(NBT_MODE))
{ @Override
mode = nbt.getInteger(NBT_MODE); public boolean isItemValidForSlot(int slot, ItemStack stack)
} {
return inventory.isItemValidForSlot(slot, stack);
InventoryUtils.restoreInventory(this, nbt); }
}
@Override
@Override public int getField(int id)
public void writeToNBT(NBTTagCompound nbt) {
{ return inventory.getField(id);
super.writeToNBT(nbt); }
nbt.setInteger(NBT_COMPARE, compare); @Override
nbt.setInteger(NBT_MODE, mode); public void setField(int id, int value)
{
InventoryUtils.saveInventory(this, nbt); inventory.setField(id, value);
} }
@Override @Override
public void fromBytes(ByteBuf buf) public int getFieldCount()
{ {
super.fromBytes(buf); return inventory.getFieldCount();
}
compare = buf.readInt();
mode = buf.readInt(); @Override
} public void clear()
{
@Override inventory.clear();
public void toBytes(ByteBuf buf) }
{
super.toBytes(buf); @Override
public String getName()
buf.writeInt(compare); {
buf.writeInt(mode); return inventory.getName();
} }
}
@Override
public boolean hasCustomName()
{
return inventory.hasCustomName();
}
@Override
public IChatComponent getDisplayName()
{
return inventory.getDisplayName();
}
@Override
public int[] getSlotsForFace(EnumFacing side)
{
return new int[]
{
};
}
@Override
public boolean canInsertItem(int slot, ItemStack stack, EnumFacing direction)
{
return false;
}
@Override
public boolean canExtractItem(int index, ItemStack stack, EnumFacing direction)
{
return false;
}
}

View File

@@ -1,144 +1,121 @@
package storagecraft.tile; package storagecraft.tile;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.BlockPos;
public abstract class TileMachine extends TileBase implements INetworkTile, IRedstoneModeSetting
{ public abstract class TileMachine extends TileBase implements INetworkTile, IRedstoneModeSetting
protected boolean connected = false; {
protected boolean redstoneControlled = true; protected boolean connected = false;
protected boolean redstoneControlled = true;
private RedstoneMode redstoneMode = RedstoneMode.IGNORE;
private RedstoneMode redstoneMode = RedstoneMode.IGNORE;
private int xController;
private int yController; private BlockPos controllerPos;
private int zController;
public void onConnected(TileController controller)
public void onConnected(TileController controller) {
{ connected = true;
connected = true;
controllerPos = controller.getPos();
xController = controller.xCoord; }
yController = controller.yCoord;
zController = controller.zCoord; public void onDisconnected()
} {
connected = false;
public void onDisconnected() }
{
connected = false; @Override
} public void update()
{
@Override super.update();
public void updateEntity()
{ if (!worldObj.isRemote && isConnected())
super.updateEntity(); {
updateMachine();
if (!worldObj.isRemote && isConnected()) }
{ }
updateMachine();
} public boolean isConnected()
} {
return connected;
public boolean isConnected() }
{
return connected; @Override
} public RedstoneMode getRedstoneMode()
{
@Override return redstoneMode;
public RedstoneMode getRedstoneMode() }
{
return redstoneMode; @Override
} public void setRedstoneMode(RedstoneMode mode)
{
@Override if (redstoneControlled)
public void setRedstoneMode(RedstoneMode mode) {
{ this.redstoneMode = mode;
if (redstoneControlled) }
{ }
this.redstoneMode = mode;
} public TileController getController()
} {
return (TileController) worldObj.getTileEntity(controllerPos);
@Override }
public int getX()
{ @Override
return xCoord; public void fromBytes(ByteBuf buf)
} {
boolean lastConnected = connected;
@Override
public int getY() connected = buf.readBoolean();
{
return yCoord; if (connected)
} {
controllerPos = new BlockPos(buf.readInt(), buf.readInt(), buf.readInt());
@Override }
public int getZ()
{ redstoneMode = RedstoneMode.getById(buf.readInt());
return zCoord;
} if (lastConnected != connected)
{
public TileController getController() worldObj.markBlockForUpdate(pos);
{ }
return (TileController) worldObj.getTileEntity(xController, yController, zController); }
}
@Override
@Override public void toBytes(ByteBuf buf)
public void fromBytes(ByteBuf buf) {
{ buf.writeBoolean(connected);
boolean lastConnected = connected;
if (connected)
connected = buf.readBoolean(); {
buf.writeInt(controllerPos.getX());
if (connected) buf.writeInt(controllerPos.getY());
{ buf.writeInt(controllerPos.getZ());
xController = buf.readInt(); }
yController = buf.readInt();
zController = buf.readInt(); buf.writeInt(redstoneMode.id);
} }
redstoneMode = RedstoneMode.getById(buf.readInt()); @Override
public void readFromNBT(NBTTagCompound nbt)
if (lastConnected != connected) {
{ super.readFromNBT(nbt);
worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
} if (nbt.hasKey(RedstoneMode.NBT))
} {
redstoneMode = RedstoneMode.getById(nbt.getInteger(RedstoneMode.NBT));
@Override }
public void toBytes(ByteBuf buf) }
{
buf.writeBoolean(connected); @Override
public void writeToNBT(NBTTagCompound nbt)
if (connected) {
{ super.writeToNBT(nbt);
buf.writeInt(xController);
buf.writeInt(yController); nbt.setInteger(RedstoneMode.NBT, redstoneMode.id);
buf.writeInt(zController); }
}
public abstract int getEnergyUsage();
buf.writeInt(redstoneMode.id);
} public abstract void updateMachine();
}
@Override
public void readFromNBT(NBTTagCompound nbt)
{
super.readFromNBT(nbt);
if (nbt.hasKey(RedstoneMode.NBT))
{
redstoneMode = RedstoneMode.getById(nbt.getInteger(RedstoneMode.NBT));
}
}
@Override
public void writeToNBT(NBTTagCompound nbt)
{
super.writeToNBT(nbt);
nbt.setInteger(RedstoneMode.NBT, redstoneMode.id);
}
public abstract int getEnergyUsage();
public abstract void updateMachine();
}

View File

@@ -1,268 +1,298 @@
package storagecraft.tile; package storagecraft.tile;
import cpw.mods.fml.relauncher.Side; import io.netty.buffer.ByteBuf;
import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.entity.player.EntityPlayer;
import io.netty.buffer.ByteBuf; import net.minecraft.inventory.IInventory;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.ISidedInventory;
import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack;
import net.minecraft.inventory.ISidedInventory; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.IChatComponent;
import storagecraft.inventory.InventorySimple; import net.minecraftforge.fml.relauncher.Side;
import storagecraft.tile.solderer.ISoldererRecipe; import net.minecraftforge.fml.relauncher.SideOnly;
import storagecraft.tile.solderer.SoldererRegistry; import storagecraft.inventory.InventorySimple;
import storagecraft.util.InventoryUtils; import storagecraft.tile.solderer.ISoldererRecipe;
import storagecraft.tile.solderer.SoldererRegistry;
public class TileSolderer extends TileMachine implements IInventory, ISidedInventory import storagecraft.util.InventoryUtils;
{
public static final String NBT_WORKING = "Working"; public class TileSolderer extends TileMachine implements IInventory, ISidedInventory
public static final String NBT_PROGRESS = "Progress"; {
public static final String NBT_WORKING = "Working";
private InventorySimple inventory = new InventorySimple("solderer", 4); public static final String NBT_PROGRESS = "Progress";
private ISoldererRecipe recipe;
private boolean working = false; private InventorySimple inventory = new InventorySimple("solderer", 4);
private int progress = 0; private ISoldererRecipe recipe;
@SideOnly(Side.CLIENT) private boolean working = false;
private int duration; private int progress = 0;
@SideOnly(Side.CLIENT)
@Override private int duration;
public int getEnergyUsage()
{ @Override
return 3; public int getEnergyUsage()
} {
return 3;
@Override }
public void updateMachine()
{ @Override
ISoldererRecipe newRecipe = SoldererRegistry.getRecipe(inventory); public void updateMachine()
{
if (newRecipe == null) ISoldererRecipe newRecipe = SoldererRegistry.getRecipe(inventory);
{
reset(); if (newRecipe == null)
} {
else if (newRecipe != recipe && inventory.getStackInSlot(3) == null) reset();
{ }
recipe = newRecipe; else if (newRecipe != recipe && inventory.getStackInSlot(3) == null)
progress = 0; {
working = true; recipe = newRecipe;
} progress = 0;
else if (working) working = true;
{ }
progress++; else if (working)
{
if (progress == recipe.getDuration()) progress++;
{
inventory.setInventorySlotContents(3, recipe.getResult()); if (progress == recipe.getDuration())
{
for (int i = 0; i < 3; ++i) inventory.setInventorySlotContents(3, recipe.getResult());
{
if (recipe.getRow(i) != null) for (int i = 0; i < 3; ++i)
{ {
inventory.decrStackSize(i, recipe.getRow(i).stackSize); if (recipe.getRow(i) != null)
} {
} inventory.decrStackSize(i, recipe.getRow(i).stackSize);
}
reset(); }
}
} reset();
} }
}
@Override }
public void onDisconnected()
{ @Override
super.onDisconnected(); public void onDisconnected()
{
reset(); super.onDisconnected();
}
reset();
public void reset() }
{
progress = 0; public void reset()
working = false; {
recipe = null; progress = 0;
} working = false;
recipe = null;
@Override }
public int getSizeInventory()
{ @Override
return inventory.getSizeInventory(); public void readFromNBT(NBTTagCompound nbt)
} {
super.readFromNBT(nbt);
@Override
public ItemStack getStackInSlot(int slot) InventoryUtils.restoreInventory(this, nbt);
{
return inventory.getStackInSlot(slot); recipe = SoldererRegistry.getRecipe(inventory);
}
if (nbt.hasKey(NBT_WORKING))
@Override {
public ItemStack decrStackSize(int slot, int amount) working = nbt.getBoolean(NBT_WORKING);
{ }
return inventory.decrStackSize(slot, amount);
} if (nbt.hasKey(NBT_PROGRESS))
{
@Override progress = nbt.getInteger(NBT_PROGRESS);
public ItemStack getStackInSlotOnClosing(int slot) }
{ }
return inventory.getStackInSlotOnClosing(slot);
} @Override
public void writeToNBT(NBTTagCompound nbt)
@Override {
public void setInventorySlotContents(int slot, ItemStack stack) super.writeToNBT(nbt);
{
inventory.setInventorySlotContents(slot, stack); InventoryUtils.saveInventory(this, nbt);
}
nbt.setBoolean(NBT_WORKING, working);
@Override nbt.setInteger(NBT_PROGRESS, progress);
public String getInventoryName() }
{
return inventory.getInventoryName(); @Override
} public void fromBytes(ByteBuf buf)
{
@Override super.fromBytes(buf);
public boolean hasCustomInventoryName()
{ working = buf.readBoolean();
return inventory.hasCustomInventoryName(); progress = buf.readInt();
} duration = buf.readInt();
}
@Override
public int getInventoryStackLimit() @Override
{ public void toBytes(ByteBuf buf)
return inventory.getInventoryStackLimit(); {
} super.toBytes(buf);
@Override buf.writeBoolean(working);
public boolean isUseableByPlayer(EntityPlayer player) buf.writeInt(progress);
{ buf.writeInt(recipe != null ? recipe.getDuration() : 0);
return inventory.isUseableByPlayer(player); }
}
public boolean isWorking()
@Override {
public void openInventory() return working;
{ }
inventory.openInventory();
} public int getProgress()
{
@Override return progress;
public void closeInventory() }
{
inventory.closeInventory(); @SideOnly(Side.CLIENT)
} public int getProgressScaled(int i)
{
@Override return (int) ((float) progress / (float) duration * (float) i);
public boolean isItemValidForSlot(int slot, ItemStack stack) }
{
return inventory.isItemValidForSlot(slot, stack); @SideOnly(Side.CLIENT)
} public int getDuration()
{
@Override return duration;
public int[] getAccessibleSlotsFromSide(int side) }
{
// On all sides, but not the bottom we can reach the slots @Override
if (side > 0) public IInventory getDroppedInventory()
{ {
return new int[] return inventory;
{ }
0, 1, 2
}; @Override
} public int getSizeInventory()
{
// On the bottom we can only reach the output slot return inventory.getSizeInventory();
return new int[] }
{
3 @Override
}; public ItemStack getStackInSlot(int slot)
} {
return inventory.getStackInSlot(slot);
@Override }
public boolean canInsertItem(int slot, ItemStack stack, int side)
{ @Override
// We can insert in all slots, but not the output slot or via the output side public ItemStack decrStackSize(int slot, int count)
return side != 0 && slot != 3; {
} return inventory.decrStackSize(slot, count);
}
@Override
public boolean canExtractItem(int slot, ItemStack stack, int side) @Override
{ public ItemStack getStackInSlotOnClosing(int slot)
// We can only extract from the buttom in the last slot {
return side == 0 && slot == 3; return inventory.getStackInSlotOnClosing(slot);
} }
@Override @Override
public void readFromNBT(NBTTagCompound nbt) public void setInventorySlotContents(int slot, ItemStack stack)
{ {
super.readFromNBT(nbt); inventory.setInventorySlotContents(slot, stack);
}
InventoryUtils.restoreInventory(this, nbt);
@Override
recipe = SoldererRegistry.getRecipe(inventory); public int getInventoryStackLimit()
{
if (nbt.hasKey(NBT_WORKING)) return inventory.getInventoryStackLimit();
{ }
working = nbt.getBoolean(NBT_WORKING);
} @Override
public boolean isUseableByPlayer(EntityPlayer player)
if (nbt.hasKey(NBT_PROGRESS)) {
{ return inventory.isUseableByPlayer(player);
progress = nbt.getInteger(NBT_PROGRESS); }
}
} @Override
public void openInventory(EntityPlayer player)
@Override {
public void writeToNBT(NBTTagCompound nbt) inventory.openInventory(player);
{ }
super.writeToNBT(nbt);
@Override
InventoryUtils.saveInventory(this, nbt); public void closeInventory(EntityPlayer player)
{
nbt.setBoolean(NBT_WORKING, working); inventory.closeInventory(player);
nbt.setInteger(NBT_PROGRESS, progress); }
}
@Override
@Override public boolean isItemValidForSlot(int slot, ItemStack stack)
public void fromBytes(ByteBuf buf) {
{ return inventory.isItemValidForSlot(slot, stack);
super.fromBytes(buf); }
working = buf.readBoolean(); @Override
progress = buf.readInt(); public int getField(int id)
duration = buf.readInt(); {
} return inventory.getField(id);
}
@Override
public void toBytes(ByteBuf buf) @Override
{ public void setField(int id, int value)
super.toBytes(buf); {
inventory.setField(id, value);
buf.writeBoolean(working); }
buf.writeInt(progress);
buf.writeInt(recipe != null ? recipe.getDuration() : 0); @Override
} public int getFieldCount()
{
public boolean isWorking() return inventory.getFieldCount();
{ }
return working;
} @Override
public void clear()
public int getProgress() {
{ inventory.clear();
return progress; }
}
@Override
@SideOnly(Side.CLIENT) public String getName()
public int getProgressScaled(int i) {
{ return inventory.getName();
return (int) ((float) progress / (float) duration * (float) i); }
}
@Override
@SideOnly(Side.CLIENT) public boolean hasCustomName()
public int getDuration() {
{ return inventory.hasCustomName();
return duration; }
}
@Override
@Override public IChatComponent getDisplayName()
public IInventory getDroppedInventory() {
{ return inventory.getDisplayName();
return inventory; }
}
} @Override
public int[] getSlotsForFace(EnumFacing side)
{
// On all sides, but not the bottom we can reach the slots
if (side != EnumFacing.DOWN)
{
return new int[]
{
0, 1, 2
};
}
// On the bottom we can only reach the output slot
return new int[]
{
3
};
}
@Override
public boolean canInsertItem(int slot, ItemStack stack, EnumFacing direction)
{
return slot != 3;
}
@Override
public boolean canExtractItem(int slot, ItemStack stack, EnumFacing direction)
{
return slot == 3;
}
}

View File

@@ -1,240 +1,273 @@
package storagecraft.tile; package storagecraft.tile;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory; import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import storagecraft.inventory.InventorySimple; import net.minecraft.util.IChatComponent;
import storagecraft.item.ItemWirelessGrid; import storagecraft.inventory.InventorySimple;
import storagecraft.util.InventoryUtils; import storagecraft.item.ItemWirelessGrid;
import storagecraft.util.InventoryUtils;
public class TileWirelessTransmitter extends TileMachine implements IInventory
{ public class TileWirelessTransmitter extends TileMachine implements IInventory
public static final int TOTAL_PROGRESS = 10000; {
public static final int TOTAL_PROGRESS = 10000;
public static final String NBT_WORKING = "Working";
public static final String NBT_PROGRESS = "Progress"; public static final String NBT_WORKING = "Working";
public static final String NBT_PROGRESS = "Progress";
private InventorySimple inventory = new InventorySimple("wirelessTransmitter", 3);
private InventorySimple inventory = new InventorySimple("wirelessTransmitter", 3);
private boolean working = false;
private int progress = 0; private boolean working = false;
private int progress = 0;
@Override
public int getEnergyUsage() @Override
{ public int getEnergyUsage()
return 4; {
} return 4;
}
@Override
public void updateMachine() @Override
{ public void updateMachine()
if (working) {
{ if (working)
progress++; {
progress++;
if (progress == TOTAL_PROGRESS)
{ if (progress == TOTAL_PROGRESS)
reset(); {
} reset();
} }
else if (inventory.getStackInSlot(0) != null) }
{ else if (inventory.getStackInSlot(0) != null)
inventory.decrStackSize(0, 1); {
inventory.decrStackSize(0, 1);
progress = 0;
working = true; progress = 0;
} working = true;
}
if (inventory.getStackInSlot(1) != null)
{ if (inventory.getStackInSlot(1) != null)
ItemStack slot = inventory.getStackInSlot(1); {
ItemStack slot = inventory.getStackInSlot(1);
slot.stackTagCompound = new NBTTagCompound();
slot.stackTagCompound.setInteger(ItemWirelessGrid.NBT_WIRELESS_TRANSMITTER_X, xCoord); slot.setTagCompound(new NBTTagCompound());
slot.stackTagCompound.setInteger(ItemWirelessGrid.NBT_WIRELESS_TRANSMITTER_Y, yCoord);
slot.stackTagCompound.setInteger(ItemWirelessGrid.NBT_WIRELESS_TRANSMITTER_Z, zCoord); slot.getTagCompound().setInteger(ItemWirelessGrid.NBT_WIRELESS_TRANSMITTER_X, pos.getX());
slot.getTagCompound().setInteger(ItemWirelessGrid.NBT_WIRELESS_TRANSMITTER_Y, pos.getY());
inventory.setInventorySlotContents(2, slot); slot.getTagCompound().setInteger(ItemWirelessGrid.NBT_WIRELESS_TRANSMITTER_Z, pos.getZ());
inventory.setInventorySlotContents(1, null);
} inventory.setInventorySlotContents(2, slot);
} inventory.setInventorySlotContents(1, null);
}
public void reset() }
{
progress = 0; public void reset()
working = false; {
} progress = 0;
working = false;
@Override }
public void onDisconnected()
{ @Override
super.onDisconnected(); public void onDisconnected()
{
reset(); super.onDisconnected();
}
reset();
public boolean isWorking() }
{
return working; public boolean isWorking()
} {
return working;
public int getProgress() }
{
return progress; public int getProgress()
} {
return progress;
public TileGrid getGrid(int type) }
{
for (TileMachine machine : getController().getMachines()) public TileGrid getGrid(int type)
{ {
if (worldObj.getTileEntity(machine.xCoord, machine.yCoord, machine.zCoord) != null) for (TileMachine machine : getController().getMachines())
{ {
if (machine instanceof TileGrid) // @TODO: Is this still needed?
{ if (worldObj.getTileEntity(machine.getPos()) != null)
TileGrid grid = (TileGrid) machine; {
if (machine instanceof TileGrid)
if (grid.getType() == type) {
{ TileGrid grid = (TileGrid) machine;
return grid;
} if (grid.getType() == type)
} {
} return grid;
} }
}
return null; }
} }
@Override return null;
public int getSizeInventory() }
{
return inventory.getSizeInventory(); @Override
} public void readFromNBT(NBTTagCompound nbt)
{
@Override super.readFromNBT(nbt);
public ItemStack getStackInSlot(int slot)
{ InventoryUtils.restoreInventory(this, nbt);
return inventory.getStackInSlot(slot);
} if (nbt.hasKey(NBT_WORKING))
{
@Override working = nbt.getBoolean(NBT_WORKING);
public ItemStack decrStackSize(int slot, int amount) }
{
return inventory.decrStackSize(slot, amount); if (nbt.hasKey(NBT_PROGRESS))
} {
progress = nbt.getInteger(NBT_PROGRESS);
@Override }
public ItemStack getStackInSlotOnClosing(int slot) }
{
return inventory.getStackInSlotOnClosing(slot); @Override
} public void writeToNBT(NBTTagCompound nbt)
{
@Override super.writeToNBT(nbt);
public void setInventorySlotContents(int slot, ItemStack stack)
{ InventoryUtils.saveInventory(this, nbt);
inventory.setInventorySlotContents(slot, stack);
} nbt.setBoolean(NBT_WORKING, working);
nbt.setInteger(NBT_PROGRESS, progress);
@Override }
public String getInventoryName()
{ @Override
return inventory.getInventoryName(); public void fromBytes(ByteBuf buf)
} {
super.fromBytes(buf);
@Override
public boolean hasCustomInventoryName() boolean lastWorking = working;
{
return inventory.hasCustomInventoryName(); working = buf.readBoolean();
} progress = buf.readInt();
@Override if (lastWorking != working)
public int getInventoryStackLimit() {
{ worldObj.markBlockForUpdate(pos);
return inventory.getInventoryStackLimit(); }
} }
@Override @Override
public boolean isUseableByPlayer(EntityPlayer player) public void toBytes(ByteBuf buf)
{ {
return inventory.isUseableByPlayer(player); super.toBytes(buf);
}
buf.writeBoolean(working);
@Override buf.writeInt(progress);
public void openInventory() }
{
inventory.openInventory(); @Override
} public IInventory getDroppedInventory()
{
@Override return inventory;
public void closeInventory() }
{
inventory.closeInventory(); @Override
} public int getSizeInventory()
{
@Override return inventory.getSizeInventory();
public boolean isItemValidForSlot(int slot, ItemStack stack) }
{
return inventory.isItemValidForSlot(slot, stack); @Override
} public ItemStack getStackInSlot(int slot)
{
@Override return inventory.getStackInSlot(slot);
public void readFromNBT(NBTTagCompound nbt) }
{
super.readFromNBT(nbt); @Override
public ItemStack decrStackSize(int slot, int count)
InventoryUtils.restoreInventory(this, nbt); {
return inventory.decrStackSize(slot, count);
if (nbt.hasKey(NBT_WORKING)) }
{
working = nbt.getBoolean(NBT_WORKING); @Override
} public ItemStack getStackInSlotOnClosing(int slot)
{
if (nbt.hasKey(NBT_PROGRESS)) return inventory.getStackInSlotOnClosing(slot);
{ }
progress = nbt.getInteger(NBT_PROGRESS);
} @Override
} public void setInventorySlotContents(int slot, ItemStack stack)
{
@Override inventory.setInventorySlotContents(slot, stack);
public void writeToNBT(NBTTagCompound nbt) }
{
super.writeToNBT(nbt); @Override
public int getInventoryStackLimit()
InventoryUtils.saveInventory(this, nbt); {
return inventory.getInventoryStackLimit();
nbt.setBoolean(NBT_WORKING, working); }
nbt.setInteger(NBT_PROGRESS, progress);
} @Override
public boolean isUseableByPlayer(EntityPlayer player)
@Override {
public void fromBytes(ByteBuf buf) return inventory.isUseableByPlayer(player);
{ }
super.fromBytes(buf);
@Override
boolean lastWorking = working; public boolean isItemValidForSlot(int slot, ItemStack stack)
{
working = buf.readBoolean(); return inventory.isItemValidForSlot(slot, stack);
progress = buf.readInt(); }
if (lastWorking != working) @Override
{ public void openInventory(EntityPlayer player)
worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); {
} inventory.openInventory(player);
} }
@Override @Override
public void toBytes(ByteBuf buf) public void closeInventory(EntityPlayer player)
{ {
super.toBytes(buf); inventory.closeInventory(player);
}
buf.writeBoolean(working);
buf.writeInt(progress); @Override
} public int getField(int id)
{
@Override return inventory.getField(id);
public IInventory getDroppedInventory() }
{
return inventory; @Override
} public void setField(int id, int value)
} {
inventory.setField(id, value);
}
@Override
public int getFieldCount()
{
return inventory.getFieldCount();
}
@Override
public void clear()
{
inventory.clear();
}
@Override
public String getName()
{
return inventory.getName();
}
@Override
public boolean hasCustomName()
{
return inventory.hasCustomName();
}
@Override
public IChatComponent getDisplayName()
{
return inventory.getDisplayName();
}
}

View File

@@ -1,250 +1,250 @@
package storagecraft.util; package storagecraft.util;
import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.item.EntityItem;
import net.minecraft.inventory.IInventory; import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList; import net.minecraft.nbt.NBTTagList;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.util.Constants; import net.minecraftforge.common.util.Constants;
public class InventoryUtils public class InventoryUtils
{ {
public static final String NBT_INVENTORY = "Inventory"; public static final String NBT_INVENTORY = "Inventory";
public static final String NBT_SLOT = "Slot"; public static final String NBT_SLOT = "Slot";
public static final int COMPARE_DAMAGE = 1; public static final int COMPARE_DAMAGE = 1;
public static final int COMPARE_NBT = 2; public static final int COMPARE_NBT = 2;
public static final int COMPARE_QUANTITY = 4; public static final int COMPARE_QUANTITY = 4;
public static void saveInventory(IInventory inventory, NBTTagCompound nbt) public static void saveInventory(IInventory inventory, NBTTagCompound nbt)
{ {
NBTTagList tagList = new NBTTagList(); NBTTagList tagList = new NBTTagList();
for (int i = 0; i < inventory.getSizeInventory(); i++) for (int i = 0; i < inventory.getSizeInventory(); i++)
{ {
if (inventory.getStackInSlot(i) != null) if (inventory.getStackInSlot(i) != null)
{ {
NBTTagCompound compoundTag = new NBTTagCompound(); NBTTagCompound compoundTag = new NBTTagCompound();
compoundTag.setInteger(NBT_SLOT, i); compoundTag.setInteger(NBT_SLOT, i);
inventory.getStackInSlot(i).writeToNBT(compoundTag); inventory.getStackInSlot(i).writeToNBT(compoundTag);
tagList.appendTag(compoundTag); tagList.appendTag(compoundTag);
} }
} }
nbt.setTag(NBT_INVENTORY, tagList); nbt.setTag(NBT_INVENTORY, tagList);
} }
public static void restoreInventory(IInventory inventory, NBTTagCompound nbt) public static void restoreInventory(IInventory inventory, NBTTagCompound nbt)
{ {
if (nbt.hasKey(NBT_INVENTORY)) if (nbt.hasKey(NBT_INVENTORY))
{ {
NBTTagList tagList = nbt.getTagList(NBT_INVENTORY, Constants.NBT.TAG_COMPOUND); NBTTagList tagList = nbt.getTagList(NBT_INVENTORY, Constants.NBT.TAG_COMPOUND);
for (int i = 0; i < tagList.tagCount(); i++) for (int i = 0; i < tagList.tagCount(); i++)
{ {
int slot = tagList.getCompoundTagAt(i).getInteger(NBT_SLOT); int slot = tagList.getCompoundTagAt(i).getInteger(NBT_SLOT);
ItemStack stack = ItemStack.loadItemStackFromNBT(tagList.getCompoundTagAt(i)); ItemStack stack = ItemStack.loadItemStackFromNBT(tagList.getCompoundTagAt(i));
inventory.setInventorySlotContents(slot, stack); inventory.setInventorySlotContents(slot, stack);
} }
} }
} }
public static void dropInventory(World world, IInventory inventory, int x, int y, int z) public static void dropInventory(World world, IInventory inventory, int x, int y, int z)
{ {
for (int i = 0; i < inventory.getSizeInventory(); ++i) for (int i = 0; i < inventory.getSizeInventory(); ++i)
{ {
ItemStack stack = inventory.getStackInSlot(i); ItemStack stack = inventory.getStackInSlot(i);
if (stack != null) if (stack != null)
{ {
dropStack(world, stack, x, y, z); dropStack(world, stack, x, y, z);
} }
} }
} }
public static void dropStack(World world, ItemStack stack, int x, int y, int z) public static void dropStack(World world, ItemStack stack, int x, int y, int z) // @TODO: Take BlockPos here
{ {
float xo = world.rand.nextFloat() * 0.8F + 0.1F; float xo = world.rand.nextFloat() * 0.8F + 0.1F;
float yo = world.rand.nextFloat() * 0.8F + 0.1F; float yo = world.rand.nextFloat() * 0.8F + 0.1F;
float zo = world.rand.nextFloat() * 0.8F + 0.1F; float zo = world.rand.nextFloat() * 0.8F + 0.1F;
while (stack.stackSize > 0) while (stack.stackSize > 0)
{ {
int amount = world.rand.nextInt(21) + 10; int amount = world.rand.nextInt(21) + 10;
if (amount > stack.stackSize) if (amount > stack.stackSize)
{ {
amount = stack.stackSize; amount = stack.stackSize;
} }
stack.stackSize -= amount; stack.stackSize -= amount;
EntityItem entity = new EntityItem(world, (float) x + xo, (float) y + yo, (float) z + zo, new ItemStack(stack.getItem(), amount, stack.getItemDamage())); EntityItem entity = new EntityItem(world, (float) x + xo, (float) y + yo, (float) z + zo, new ItemStack(stack.getItem(), amount, stack.getItemDamage()));
entity.motionX = (float) world.rand.nextGaussian() * 0.05F; entity.motionX = (float) world.rand.nextGaussian() * 0.05F;
entity.motionY = (float) world.rand.nextGaussian() * 0.05F + 0.2F; entity.motionY = (float) world.rand.nextGaussian() * 0.05F + 0.2F;
entity.motionZ = (float) world.rand.nextGaussian() * 0.05F; entity.motionZ = (float) world.rand.nextGaussian() * 0.05F;
if (stack.hasTagCompound()) if (stack.hasTagCompound())
{ {
entity.getEntityItem().setTagCompound((NBTTagCompound) stack.getTagCompound().copy()); entity.getEntityItem().setTagCompound((NBTTagCompound) stack.getTagCompound().copy());
} }
world.spawnEntityInWorld(entity); world.spawnEntityInWorld(entity);
} }
} }
public static void pushToInventorySlot(IInventory inventory, int i, ItemStack stack) public static void pushToInventorySlot(IInventory inventory, int i, ItemStack stack)
{ {
ItemStack slot = inventory.getStackInSlot(i); ItemStack slot = inventory.getStackInSlot(i);
if (slot == null) if (slot == null)
{ {
inventory.setInventorySlotContents(i, stack); inventory.setInventorySlotContents(i, stack);
} }
else if (compareStackNoQuantity(slot, stack)) else if (compareStackNoQuantity(slot, stack))
{ {
slot.stackSize += stack.stackSize; slot.stackSize += stack.stackSize;
} }
} }
public static boolean canPushToInventorySlot(IInventory inventory, int i, ItemStack stack) public static boolean canPushToInventorySlot(IInventory inventory, int i, ItemStack stack)
{ {
ItemStack slot = inventory.getStackInSlot(i); ItemStack slot = inventory.getStackInSlot(i);
if (slot == null) if (slot == null)
{ {
return true; return true;
} }
if (!compareStackNoQuantity(slot, stack)) if (!compareStackNoQuantity(slot, stack))
{ {
return false; return false;
} }
return slot.stackSize + stack.stackSize < slot.getMaxStackSize(); return slot.stackSize + stack.stackSize < slot.getMaxStackSize();
} }
public static void pushToInventory(IInventory inventory, ItemStack stack) public static void pushToInventory(IInventory inventory, ItemStack stack)
{ {
int toGo = stack.stackSize; int toGo = stack.stackSize;
for (int i = 0; i < inventory.getSizeInventory(); ++i) for (int i = 0; i < inventory.getSizeInventory(); ++i)
{ {
ItemStack slot = inventory.getStackInSlot(i); ItemStack slot = inventory.getStackInSlot(i);
if (slot == null) if (slot == null)
{ {
inventory.setInventorySlotContents(i, stack); inventory.setInventorySlotContents(i, stack);
return; return;
} }
else if (compareStackNoQuantity(slot, stack)) else if (compareStackNoQuantity(slot, stack))
{ {
int toAdd = toGo; int toAdd = toGo;
if (slot.stackSize + toAdd > slot.getMaxStackSize()) if (slot.stackSize + toAdd > slot.getMaxStackSize())
{ {
toAdd = slot.getMaxStackSize() - slot.stackSize; toAdd = slot.getMaxStackSize() - slot.stackSize;
} }
slot.stackSize += toAdd; slot.stackSize += toAdd;
toGo -= toAdd; toGo -= toAdd;
if (toGo == 0) if (toGo == 0)
{ {
return; return;
} }
} }
} }
} }
public static boolean canPushToInventory(IInventory inventory, ItemStack stack) public static boolean canPushToInventory(IInventory inventory, ItemStack stack)
{ {
int toGo = stack.stackSize; int toGo = stack.stackSize;
for (int i = 0; i < inventory.getSizeInventory(); ++i) for (int i = 0; i < inventory.getSizeInventory(); ++i)
{ {
ItemStack slot = inventory.getStackInSlot(i); ItemStack slot = inventory.getStackInSlot(i);
if (slot == null) if (slot == null)
{ {
return true; return true;
} }
else if (compareStackNoQuantity(slot, stack)) else if (compareStackNoQuantity(slot, stack))
{ {
int toAdd = toGo; int toAdd = toGo;
if (slot.stackSize + toAdd > slot.getMaxStackSize()) if (slot.stackSize + toAdd > slot.getMaxStackSize())
{ {
toAdd = slot.getMaxStackSize() - slot.stackSize; toAdd = slot.getMaxStackSize() - slot.stackSize;
} }
toGo -= toAdd; toGo -= toAdd;
if (toGo == 0) if (toGo == 0)
{ {
break; break;
} }
} }
} }
return toGo == 0; return toGo == 0;
} }
public static boolean compareStack(ItemStack first, ItemStack second) public static boolean compareStack(ItemStack first, ItemStack second)
{ {
return compareStack(first, second, COMPARE_NBT | COMPARE_DAMAGE | COMPARE_QUANTITY); return compareStack(first, second, COMPARE_NBT | COMPARE_DAMAGE | COMPARE_QUANTITY);
} }
public static boolean compareStack(ItemStack first, ItemStack second, int flags) public static boolean compareStack(ItemStack first, ItemStack second, int flags)
{ {
if (first == null && second == null) if (first == null && second == null)
{ {
return true; return true;
} }
if ((first == null && second != null) || (first != null && second == null)) if ((first == null && second != null) || (first != null && second == null))
{ {
return false; return false;
} }
if ((flags & COMPARE_DAMAGE) == COMPARE_DAMAGE) if ((flags & COMPARE_DAMAGE) == COMPARE_DAMAGE)
{ {
if (first.getItemDamage() != second.getItemDamage()) if (first.getItemDamage() != second.getItemDamage())
{ {
return false; return false;
} }
} }
if ((flags & COMPARE_NBT) == COMPARE_NBT) if ((flags & COMPARE_NBT) == COMPARE_NBT)
{ {
if (first.stackTagCompound != null && !first.stackTagCompound.equals(second.stackTagCompound)) if (first.hasTagCompound() && !first.getTagCompound().equals(second.getTagCompound()))
{ {
return false; return false;
} }
} }
if ((flags & COMPARE_QUANTITY) == COMPARE_QUANTITY) if ((flags & COMPARE_QUANTITY) == COMPARE_QUANTITY)
{ {
if (first.stackSize != second.stackSize) if (first.stackSize != second.stackSize)
{ {
return false; return false;
} }
} }
return first.getItem() == second.getItem(); return first.getItem() == second.getItem();
} }
public static boolean compareStackNoQuantity(ItemStack first, ItemStack second) public static boolean compareStackNoQuantity(ItemStack first, ItemStack second)
{ {
return compareStack(first, second, COMPARE_NBT | COMPARE_DAMAGE); return compareStack(first, second, COMPARE_NBT | COMPARE_DAMAGE);
} }
} }