v4.3 Beta #1
*Updated mcmod.info. *Removed PlatinumCable both physically and code-ly. *Completely refactored TileEntity hierarchy *again* to make code more efficient. *Fixed container bug. *Fixed GUI text not rendering. *Added missing javadocs. *Removed unused and unneeded code. *Added Generator base for making Obsidian Ingots generators. *Added Heat Generator, a block that generates energy with heat. *Doubled Platinum Ore generation. *Fixed energy devices to only have a max damage of 100. *Fixed energy devices not working in SMP. *Updated ITileNetwork with new packet changes. *Other various bugfixes.
This commit is contained in:
parent
7e4f1e7a1b
commit
1be888ca88
32 changed files with 1340 additions and 437 deletions
BIN
bin/minecraft/gui/GuiGenerator.png
Executable file
BIN
bin/minecraft/gui/GuiGenerator.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 4 KiB |
Binary file not shown.
Before Width: | Height: | Size: 2 KiB |
Binary file not shown.
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Binary file not shown.
Before Width: | Height: | Size: 9.4 KiB After Width: | Height: | Size: 10 KiB |
|
@ -3,8 +3,8 @@
|
|||
"modid": "ObsidianIngots",
|
||||
"name": "Obsidian Ingots",
|
||||
"description": "Energy, Armor, Tools, Weapons, Machines, Magic.",
|
||||
"version": "4.2.2",
|
||||
"mcversion": "1.3.2",
|
||||
"version": "4.3",
|
||||
"mcversion": "1.4.2",
|
||||
"updateUrl": "",
|
||||
"authors": [
|
||||
"aidancbrady"
|
||||
|
|
226
src/common/net/uberkat/obsidian/common/BlockGenerator.java
Normal file
226
src/common/net/uberkat/obsidian/common/BlockGenerator.java
Normal file
|
@ -0,0 +1,226 @@
|
|||
package net.uberkat.obsidian.common;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
import cpw.mods.fml.common.Side;
|
||||
import cpw.mods.fml.common.asm.SideOnly;
|
||||
import net.minecraft.src.*;
|
||||
import net.minecraftforge.common.ForgeDirection;
|
||||
import net.uberkat.obsidian.common.BlockMachine.MachineType;
|
||||
|
||||
public class BlockGenerator extends BlockContainer
|
||||
{
|
||||
public Random machineRand = new Random();
|
||||
|
||||
public BlockGenerator(int id)
|
||||
{
|
||||
super(id, Material.iron);
|
||||
setHardness(3.5F);
|
||||
setResistance(8F);
|
||||
setCreativeTab(CreativeTabs.tabDecorations);
|
||||
setRequiresSelfNotify();
|
||||
}
|
||||
|
||||
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLiving entityliving)
|
||||
{
|
||||
TileEntityGenerator tileEntity = (TileEntityGenerator)world.getBlockTileEntity(x, y, z);
|
||||
int side = MathHelper.floor_double((double)(entityliving.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
|
||||
int change = 3;
|
||||
|
||||
switch(side)
|
||||
{
|
||||
case 0: change = 2; break;
|
||||
case 1: change = 5; break;
|
||||
case 2: change = 3; break;
|
||||
case 3: change = 4; break;
|
||||
}
|
||||
|
||||
tileEntity.setFacing((short)change);
|
||||
}
|
||||
|
||||
public int getBlockTextureFromSideAndMetadata(int side, int meta)
|
||||
{
|
||||
if(meta == 0)
|
||||
{
|
||||
if(side == 3)
|
||||
{
|
||||
return 27;
|
||||
}
|
||||
else if(side != 0 && side != 1)
|
||||
{
|
||||
return 25;
|
||||
}
|
||||
else {
|
||||
return 26;
|
||||
}
|
||||
}
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public int getBlockTexture(IBlockAccess world, int x, int y, int z, int side)
|
||||
{
|
||||
int metadata = world.getBlockMetadata(x, y, z);
|
||||
TileEntityGenerator tileEntity = (TileEntityGenerator)world.getBlockTileEntity(x, y, z);
|
||||
|
||||
if(metadata == 0)
|
||||
{
|
||||
if(side == tileEntity.facing)
|
||||
{
|
||||
return 27;
|
||||
}
|
||||
else if(side != 0 && side != 1)
|
||||
{
|
||||
return 25;
|
||||
}
|
||||
else {
|
||||
return 26;
|
||||
}
|
||||
}
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public int damageDropped(int i)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void getSubBlocks(int i, CreativeTabs creativetabs, List list)
|
||||
{
|
||||
list.add(new ItemStack(i, 1, 0));
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if a generator is operating.
|
||||
* @param world
|
||||
* @param x
|
||||
* @param y
|
||||
* @param z
|
||||
* @return if generator is operating
|
||||
*/
|
||||
public boolean isActive(IBlockAccess world, int x, int y, int z)
|
||||
{
|
||||
TileEntityGenerator tileEntity = (TileEntityGenerator)world.getBlockTileEntity(x, y, z);
|
||||
if(tileEntity != null)
|
||||
{
|
||||
return tileEntity.canPower();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void breakBlock(World world, int x, int y, int z, int i1, int i2)
|
||||
{
|
||||
TileEntityGenerator tileEntity = (TileEntityGenerator)world.getBlockTileEntity(x, y, z);
|
||||
|
||||
if (tileEntity != null)
|
||||
{
|
||||
for (int i = 0; i < tileEntity.getSizeInventory(); ++i)
|
||||
{
|
||||
ItemStack slotStack = tileEntity.getStackInSlot(i);
|
||||
|
||||
if (slotStack != null)
|
||||
{
|
||||
float xRandom = machineRand.nextFloat() * 0.8F + 0.1F;
|
||||
float yRandom = machineRand.nextFloat() * 0.8F + 0.1F;
|
||||
float zRandom = machineRand.nextFloat() * 0.8F + 0.1F;
|
||||
|
||||
while (slotStack.stackSize > 0)
|
||||
{
|
||||
int j = machineRand.nextInt(21) + 10;
|
||||
|
||||
if (j > slotStack.stackSize)
|
||||
{
|
||||
j = slotStack.stackSize;
|
||||
}
|
||||
|
||||
slotStack.stackSize -= j;
|
||||
EntityItem item = new EntityItem(world, (double)((float)x + xRandom), (double)((float)y + yRandom), (double)((float)z + zRandom), new ItemStack(slotStack.itemID, j, slotStack.getItemDamage()));
|
||||
|
||||
if (slotStack.hasTagCompound())
|
||||
{
|
||||
item.item.setTagCompound((NBTTagCompound)slotStack.getTagCompound().copy());
|
||||
}
|
||||
|
||||
float k = 0.05F;
|
||||
item.motionX = (double)((float)machineRand.nextGaussian() * k);
|
||||
item.motionY = (double)((float)machineRand.nextGaussian() * k + 0.2F);
|
||||
item.motionZ = (double)((float)machineRand.nextGaussian() * k);
|
||||
world.spawnEntityInWorld(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
tileEntity.invalidate();
|
||||
}
|
||||
|
||||
super.breakBlock(world, x, y, z, i1, i2);
|
||||
}
|
||||
|
||||
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer entityplayer, int facing, float playerX, float playerY, float playerZ)
|
||||
{
|
||||
if (world.isRemote)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
TileEntityGenerator tileEntity = (TileEntityGenerator)world.getBlockTileEntity(x, y, z);
|
||||
int metadata = world.getBlockMetadata(x, y, z);
|
||||
|
||||
if (tileEntity != null)
|
||||
{
|
||||
if(!entityplayer.isSneaking())
|
||||
{
|
||||
int id = 0;
|
||||
|
||||
if(metadata == 0) id = 9;
|
||||
|
||||
entityplayer.openGui(ObsidianIngots.instance, id, world, x, y, z);
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public String getTextureFile()
|
||||
{
|
||||
return "/textures/terrain.png";
|
||||
}
|
||||
|
||||
public TileEntity createNewTileEntity(World world, int metadata)
|
||||
{
|
||||
if(metadata == MachineType.HEAT_GENERATOR.index)
|
||||
{
|
||||
return new TileEntityHeatGenerator();
|
||||
}
|
||||
else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/*This method is not used, metadata manipulation is required to create a Tile Entity.*/
|
||||
public TileEntity createNewTileEntity(World world)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public static enum MachineType
|
||||
{
|
||||
HEAT_GENERATOR(0);
|
||||
|
||||
private int index;
|
||||
|
||||
private MachineType(int i)
|
||||
{
|
||||
index = i;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -55,6 +55,7 @@ public class CommonProxy
|
|||
ObsidianIngots.oreBlockID = ObsidianIngots.configuration.getBlock("OreBlock", 3002).getInt();
|
||||
ObsidianIngots.obsidianTNTID = ObsidianIngots.configuration.getBlock("ObsidianTNT", 3003).getInt();
|
||||
ObsidianIngots.powerUnitID = ObsidianIngots.configuration.getBlock("PowerUnit", 3004).getInt();
|
||||
ObsidianIngots.generatorID = ObsidianIngots.configuration.getBlock("Generator", 3005).getInt();
|
||||
ObsidianIngots.extrasEnabled = ObsidianIngots.configuration.get("ExtrasEnabled", Configuration.CATEGORY_GENERAL, true).getBoolean(true);
|
||||
ObsidianIngots.oreGenerationEnabled = ObsidianIngots.configuration.get("OreGenerationEnabled", Configuration.CATEGORY_GENERAL, true).getBoolean(true);
|
||||
ObsidianIngots.configuration.save();
|
||||
|
@ -117,6 +118,9 @@ public class CommonProxy
|
|||
case 8:
|
||||
TileEntityPowerUnit tileentity5 = (TileEntityPowerUnit)world.getBlockTileEntity(x, y, z);
|
||||
return new ContainerPowerUnit(player.inventory, tileentity5);
|
||||
case 9:
|
||||
TileEntityGenerator tileentity6 = (TileEntityGenerator)world.getBlockTileEntity(x, y, z);
|
||||
return new ContainerGenerator(player.inventory, tileentity6);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -42,7 +42,7 @@ public class ContainerAdvancedElectricMachine extends Container
|
|||
/**
|
||||
* Called to transfer a stack from one inventory to the other eg. when shift clicking.
|
||||
*/
|
||||
public ItemStack transferStackInSlot(int slotID)
|
||||
public ItemStack func_82846_b(EntityPlayer player, int slotID)
|
||||
{
|
||||
ItemStack stack = null;
|
||||
Slot currentSlot = (Slot)inventorySlots.get(slotID);
|
||||
|
@ -165,7 +165,7 @@ public class ContainerAdvancedElectricMachine extends Container
|
|||
return null;
|
||||
}
|
||||
|
||||
currentSlot.putStack(slotStack);
|
||||
currentSlot.func_82870_a(player, slotStack);
|
||||
}
|
||||
|
||||
return stack;
|
||||
|
|
|
@ -41,7 +41,7 @@ public class ContainerElectricMachine extends Container
|
|||
/**
|
||||
* Called to transfer a stack from one inventory to the other eg. when shift clicking.
|
||||
*/
|
||||
public ItemStack transferStackInSlot(int slotID)
|
||||
public ItemStack func_82846_b(EntityPlayer player, int slotID)
|
||||
{
|
||||
ItemStack stack = null;
|
||||
Slot currentSlot = (Slot)inventorySlots.get(slotID);
|
||||
|
@ -122,7 +122,7 @@ public class ContainerElectricMachine extends Container
|
|||
return null;
|
||||
}
|
||||
|
||||
currentSlot.putStack(slotStack);
|
||||
currentSlot.func_82870_a(player, slotStack);
|
||||
}
|
||||
|
||||
return stack;
|
||||
|
|
105
src/common/net/uberkat/obsidian/common/ContainerGenerator.java
Normal file
105
src/common/net/uberkat/obsidian/common/ContainerGenerator.java
Normal file
|
@ -0,0 +1,105 @@
|
|||
package net.uberkat.obsidian.common;
|
||||
|
||||
import ic2.api.IElectricItem;
|
||||
import obsidian.api.IEnergizedItem;
|
||||
import obsidian.api.IMachineUpgrade;
|
||||
import universalelectricity.implement.IItemElectric;
|
||||
import net.minecraft.src.*;
|
||||
|
||||
public class ContainerGenerator extends Container
|
||||
{
|
||||
private TileEntityGenerator tileEntity;
|
||||
|
||||
public ContainerGenerator(InventoryPlayer inventory, TileEntityGenerator tentity)
|
||||
{
|
||||
tileEntity = tentity;
|
||||
addSlotToContainer(new Slot(tentity, 0, 17, 35));
|
||||
addSlotToContainer(new SlotEnergy(tentity, 1, 143, 35));
|
||||
int slotX;
|
||||
|
||||
for (slotX = 0; slotX < 3; ++slotX)
|
||||
{
|
||||
for (int slotY = 0; slotY < 9; ++slotY)
|
||||
{
|
||||
addSlotToContainer(new Slot(inventory, slotY + slotX * 9 + 9, 8 + slotY * 18, 84 + slotX * 18));
|
||||
}
|
||||
}
|
||||
|
||||
for (slotX = 0; slotX < 9; ++slotX)
|
||||
{
|
||||
addSlotToContainer(new Slot(inventory, slotX, 8 + slotX * 18, 142));
|
||||
}
|
||||
}
|
||||
|
||||
public boolean canInteractWith(EntityPlayer par1EntityPlayer)
|
||||
{
|
||||
return tileEntity.isUseableByPlayer(par1EntityPlayer);
|
||||
}
|
||||
|
||||
/**
|
||||
* Called to transfer a stack from one inventory to the other eg. when shift clicking.
|
||||
*/
|
||||
public ItemStack func_82846_b(EntityPlayer player, int slotID)
|
||||
{
|
||||
ItemStack stack = null;
|
||||
Slot currentSlot = (Slot)inventorySlots.get(slotID);
|
||||
|
||||
if(currentSlot != null && currentSlot.getHasStack())
|
||||
{
|
||||
ItemStack slotStack = currentSlot.getStack();
|
||||
stack = slotStack.copy();
|
||||
|
||||
if(slotStack.getItem() instanceof IEnergizedItem || slotStack.getItem() instanceof IItemElectric || slotStack.getItem() instanceof IElectricItem || slotStack.itemID == Item.redstone.shiftedIndex)
|
||||
{
|
||||
if(slotID != 1)
|
||||
{
|
||||
if (!mergeItemStack(slotStack, 1, 2, false))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
else if(slotID == 1)
|
||||
{
|
||||
if(!mergeItemStack(slotStack, 2, inventorySlots.size(), false))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(tileEntity.getFuel(slotStack) > 0)
|
||||
{
|
||||
if(slotID != 0 && slotID != 1)
|
||||
{
|
||||
if (!mergeItemStack(slotStack, 0, 1, false))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if(!mergeItemStack(slotStack, 2, inventorySlots.size(), true))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (slotStack.stackSize == 0)
|
||||
{
|
||||
currentSlot.putStack((ItemStack)null);
|
||||
}
|
||||
else
|
||||
{
|
||||
currentSlot.onSlotChanged();
|
||||
}
|
||||
|
||||
if (slotStack.stackSize == stack.stackSize)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
currentSlot.func_82870_a(player, slotStack);
|
||||
}
|
||||
|
||||
return stack;
|
||||
}
|
||||
}
|
|
@ -36,7 +36,7 @@ public class ContainerPowerUnit extends Container
|
|||
return tileEntity.isUseableByPlayer(par1EntityPlayer);
|
||||
}
|
||||
|
||||
public ItemStack transferStackInSlot(int slotID)
|
||||
public ItemStack func_82846_b(EntityPlayer player, int slotID)
|
||||
{
|
||||
ItemStack stack = null;
|
||||
Slot currentSlot = (Slot)inventorySlots.get(slotID);
|
||||
|
@ -91,7 +91,7 @@ public class ContainerPowerUnit extends Container
|
|||
return null;
|
||||
}
|
||||
|
||||
currentSlot.putStack(slotStack);
|
||||
currentSlot.func_82870_a(player, slotStack);
|
||||
}
|
||||
|
||||
return stack;
|
||||
|
|
|
@ -0,0 +1,46 @@
|
|||
package net.uberkat.obsidian.common;
|
||||
|
||||
import net.minecraft.src.*;
|
||||
|
||||
/**
|
||||
* Item class for handling multiple generator block IDs.
|
||||
* 0: Heat Generator
|
||||
* @author AidanBrady
|
||||
*
|
||||
*/
|
||||
public class ItemBlockGenerator extends ItemBlock
|
||||
{
|
||||
public Block metaBlock;
|
||||
|
||||
public ItemBlockGenerator(int id, Block block)
|
||||
{
|
||||
super(id);
|
||||
metaBlock = block;
|
||||
setHasSubtypes(true);
|
||||
}
|
||||
|
||||
public int getMetadata(int i)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
|
||||
public int getIconFromDamage(int i)
|
||||
{
|
||||
return metaBlock.getBlockTextureFromSideAndMetadata(2, i);
|
||||
}
|
||||
|
||||
public String getItemNameIS(ItemStack itemstack)
|
||||
{
|
||||
String name = "";
|
||||
switch(itemstack.getItemDamage())
|
||||
{
|
||||
case 0:
|
||||
name = "HeatGenerator";
|
||||
break;
|
||||
default:
|
||||
name = "Unknown";
|
||||
break;
|
||||
}
|
||||
return getItemName() + "." + name;
|
||||
}
|
||||
}
|
|
@ -17,13 +17,16 @@ public class ItemEnergized extends ItemObsidian implements IEnergizedItem, IItem
|
|||
|
||||
public int transferRate;
|
||||
|
||||
public ItemEnergized(int id, int energy, int rate)
|
||||
public int divider;
|
||||
|
||||
public ItemEnergized(int id, int energy, int rate, int divide)
|
||||
{
|
||||
super(id);
|
||||
divider = divide;
|
||||
maxEnergy = energy;
|
||||
transferRate = rate;
|
||||
setMaxStackSize(1);
|
||||
setMaxDamage(maxEnergy);
|
||||
setMaxDamage(maxEnergy/divider);
|
||||
setNoRepair();
|
||||
setCreativeTab(CreativeTabs.tabRedstone);
|
||||
}
|
||||
|
@ -60,7 +63,7 @@ public class ItemEnergized extends ItemObsidian implements IEnergizedItem, IItem
|
|||
stored = itemstack.stackTagCompound.getInteger("energy");
|
||||
}
|
||||
|
||||
itemstack.setItemDamage(maxEnergy - stored);
|
||||
itemstack.setItemDamage((maxEnergy - stored)/divider);
|
||||
return stored;
|
||||
}
|
||||
|
||||
|
@ -73,20 +76,20 @@ public class ItemEnergized extends ItemObsidian implements IEnergizedItem, IItem
|
|||
|
||||
int stored = Math.max(Math.min(energy, maxEnergy), 0);
|
||||
itemstack.stackTagCompound.setInteger("energy", stored);
|
||||
itemstack.setItemDamage(maxEnergy - stored);
|
||||
itemstack.setItemDamage((maxEnergy - stored)/divider);
|
||||
}
|
||||
|
||||
public ItemStack getUnchargedItem()
|
||||
{
|
||||
ItemStack charged = new ItemStack(this);
|
||||
charged.setItemDamage(maxEnergy);
|
||||
charged.setItemDamage(maxEnergy/divider);
|
||||
return charged;
|
||||
}
|
||||
|
||||
public void getSubItems(int i, CreativeTabs tabs, List list)
|
||||
{
|
||||
ItemStack discharged = new ItemStack(this);
|
||||
discharged.setItemDamage(maxEnergy);
|
||||
discharged.setItemDamage(maxEnergy/divider);
|
||||
list.add(discharged);
|
||||
ItemStack charged = new ItemStack(this);
|
||||
setEnergy(charged, ((IEnergizedItem)charged.getItem()).getMaxEnergy());
|
||||
|
@ -170,4 +173,9 @@ public class ItemEnergized extends ItemObsidian implements IEnergizedItem, IItem
|
|||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public int getDivider()
|
||||
{
|
||||
return divider;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -39,7 +39,7 @@ import cpw.mods.fml.common.registry.TickRegistry;
|
|||
* @author AidanBrady
|
||||
*
|
||||
*/
|
||||
@Mod(modid = "ObsidianIngots", name = "Obsidian Ingots", version = "4.2.3")
|
||||
@Mod(modid = "ObsidianIngots", name = "Obsidian Ingots", version = "4.2.4")
|
||||
@NetworkMod(channels = { "ObsidianIngots" }, clientSideRequired = true, serverSideRequired = false, packetHandler = PacketHandler.class)
|
||||
public class ObsidianIngots
|
||||
{
|
||||
|
@ -61,7 +61,7 @@ public class ObsidianIngots
|
|||
public static Configuration configuration;
|
||||
|
||||
/** Obsidian Ingots version number */
|
||||
public static Version versionNumber = new Version(4, 2, 3);
|
||||
public static Version versionNumber = new Version(4, 2, 4);
|
||||
|
||||
/** The latest version number which is received from the Obsidian Ingots server */
|
||||
public static String latestVersionNumber;
|
||||
|
@ -106,6 +106,7 @@ public class ObsidianIngots
|
|||
public static int oreBlockID = 3002;
|
||||
public static int obsidianTNTID = 3003;
|
||||
public static int powerUnitID = 3004;
|
||||
public static int generatorID = 3005;
|
||||
|
||||
//Base Items
|
||||
public static Item WoodPaxel;
|
||||
|
@ -211,6 +212,7 @@ public class ObsidianIngots
|
|||
public static Block OreBlock;
|
||||
public static Block ObsidianTNT;
|
||||
public static Block PowerUnit;
|
||||
public static Block Generator;
|
||||
|
||||
//Boolean Values
|
||||
public static boolean extrasEnabled = true;
|
||||
|
@ -674,6 +676,9 @@ public class ObsidianIngots
|
|||
LanguageRegistry.instance().addStringLocalization("tile.PowerUnit.PowerUnit.name", "Power Unit");
|
||||
LanguageRegistry.instance().addStringLocalization("tile.PowerUnit.AdvancedPowerUnit.name", "Advanced Power Unit");
|
||||
|
||||
//Localization for Generator
|
||||
LanguageRegistry.instance().addStringLocalization("tile.Generator.HeatGenerator.name", "Heat Generator");
|
||||
|
||||
if(extrasEnabled == true)
|
||||
{
|
||||
LanguageRegistry.instance().addStringLocalization("tile.MachineBlock.TheoreticalElementizer.name", "Theoretical Elementizer");
|
||||
|
@ -870,9 +875,9 @@ public class ObsidianIngots
|
|||
GlowstoneLegs = new ItemObsidianArmor(11310, armorGLOWSTONE, proxy.getArmorIndex("glowstone"), 2).setItemName("GlowstoneLegs");
|
||||
GlowstoneBoots = new ItemObsidianArmor(11311, armorGLOWSTONE, proxy.getArmorIndex("glowstone"), 3).setItemName("GlowstoneBoots");
|
||||
GlowstoneKnife = new ItemObsidianKnife(11312, toolGLOWSTONE).setItemName("GlowstoneKnife");
|
||||
EnergyTablet = (ItemEnergized) new ItemEnergized(11314, 50000, 100).setItemName("EnergyTablet");
|
||||
EnergyOrb = (ItemEnergized) new ItemEnergized(11315, 15000000, 1000).setItemName("EnergyOrb");
|
||||
EnergyCube = (ItemEnergized) new ItemEnergized(11316, 12000, 100).setItemName("EnergyCube");
|
||||
EnergyTablet = (ItemEnergized) new ItemEnergized(11314, 50000, 100, 500).setItemName("EnergyTablet");
|
||||
EnergyOrb = (ItemEnergized) new ItemEnergized(11315, 15000000, 1000, 150000).setItemName("EnergyOrb");
|
||||
EnergyCube = (ItemEnergized) new ItemEnergized(11316, 12000, 100, 120).setItemName("EnergyCube");
|
||||
SpeedUpgrade = new ItemMachineUpgrade(11317).setItemName("SpeedUpgrade");
|
||||
EnergyUpgrade = new ItemMachineUpgrade(11318).setItemName("EnergyUpgrade");
|
||||
UltimateUpgrade = new ItemMachineUpgrade(11319).setItemName("UltimateUpgrade");
|
||||
|
@ -888,6 +893,7 @@ public class ObsidianIngots
|
|||
MachineBlock = new BlockMachine(machineBlockID).setBlockName("MachineBlock");
|
||||
OreBlock = new BlockOre(oreBlockID).setBlockName("OreBlock");
|
||||
PowerUnit = new BlockPowerUnit(powerUnitID).setBlockName("PowerUnit");
|
||||
Generator = new BlockGenerator(generatorID).setBlockName("Generator");
|
||||
ObsidianTNT = new BlockObsidianTNT(obsidianTNTID).setBlockName("ObsidianTNT").setCreativeTab(CreativeTabs.tabRedstone);
|
||||
|
||||
//Registrations
|
||||
|
@ -898,6 +904,7 @@ public class ObsidianIngots
|
|||
Item.itemsList[machineBlockID] = new ItemBlockMachine(machineBlockID - 256, MachineBlock).setItemName("MachineBlock");
|
||||
Item.itemsList[oreBlockID] = new ItemBlockOre(oreBlockID - 256, OreBlock).setItemName("OreBlock");
|
||||
Item.itemsList[powerUnitID] = new ItemBlockPowerUnit(powerUnitID - 256, PowerUnit).setItemName("PowerUnit");
|
||||
Item.itemsList[generatorID] = new ItemBlockGenerator(generatorID - 256, Generator).setItemName("Generator");
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -971,6 +978,7 @@ public class ObsidianIngots
|
|||
GameRegistry.registerTileEntity(TileEntityTheoreticalElementizer.class, "TheoreticalElementizer");
|
||||
GameRegistry.registerTileEntity(TileEntityPowerUnit.class, "PowerUnit");
|
||||
GameRegistry.registerTileEntity(TileEntityAdvancedPowerUnit.class, "AdvancedPowerUnit");
|
||||
GameRegistry.registerTileEntity(TileEntityHeatGenerator.class, "HeatGenerator");
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package net.uberkat.obsidian.common;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
import net.minecraft.src.IChunkProvider;
|
||||
|
@ -30,7 +32,7 @@ public class OreHandler implements IWorldGenerator
|
|||
{
|
||||
if(ObsidianIngots.oreGenerationEnabled == true)
|
||||
{
|
||||
for (int i=0;i<3;i++)
|
||||
for (int i=0;i<6;i++)
|
||||
{
|
||||
int randPosX = chunkX + random.nextInt(16);
|
||||
int randPosY = random.nextInt(60);
|
||||
|
|
|
@ -316,6 +316,74 @@ public class PacketHandler implements IPacketHandler
|
|||
PacketDispatcher.sendPacketToAllAround(sender.xCoord, sender.yCoord, sender.zCoord, distance, sender.worldObj.provider.dimensionId, packet);
|
||||
}
|
||||
|
||||
/**
|
||||
* Send a generator packet from server to client. This will send the data int '4,' as well as the machine's x, y, and z
|
||||
* coordinates, along with it's facing, energy stored, and fuel stored.
|
||||
* @param sender - tile entity who is sending the packet
|
||||
*/
|
||||
public static void sendGeneratorPacket(TileEntityGenerator sender)
|
||||
{
|
||||
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
|
||||
DataOutputStream output = new DataOutputStream(bytes);
|
||||
|
||||
try {
|
||||
output.writeInt(EnumPacketType.TILE_ENTITY.id);
|
||||
output.writeInt(sender.xCoord);
|
||||
output.writeInt(sender.yCoord);
|
||||
output.writeInt(sender.zCoord);
|
||||
output.writeInt(sender.facing);
|
||||
output.writeInt(sender.energyStored);
|
||||
output.writeInt(sender.fuelStored);
|
||||
} catch (IOException e)
|
||||
{
|
||||
System.err.println("[ObsidianIngots] Error while writing tile entity packet.");
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
Packet250CustomPayload packet = new Packet250CustomPayload();
|
||||
packet.channel = "ObsidianIngots";
|
||||
packet.data = bytes.toByteArray();
|
||||
packet.length = packet.data.length;
|
||||
|
||||
if(FMLCommonHandler.instance().getMinecraftServerInstance() != null)
|
||||
{
|
||||
FMLCommonHandler.instance().getMinecraftServerInstance().getConfigurationManager().sendPacketToAllPlayers(packet);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Send a generator packet from server to client with a defined range. This will send the data int '4,' as well as
|
||||
* the machine's x, y, and z coordinates, along with it's facing, energy stored, and fuel stored.
|
||||
* @param sender - tile entity who is sending the packet
|
||||
* @param distance - radius to send packet in
|
||||
*/
|
||||
public static void sendGeneratorPacketWithRange(TileEntityGenerator sender, double distance)
|
||||
{
|
||||
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
|
||||
DataOutputStream output = new DataOutputStream(bytes);
|
||||
|
||||
try {
|
||||
output.writeInt(EnumPacketType.TILE_ENTITY.id);
|
||||
output.writeInt(sender.xCoord);
|
||||
output.writeInt(sender.yCoord);
|
||||
output.writeInt(sender.zCoord);
|
||||
output.writeInt(sender.facing);
|
||||
output.writeInt(sender.energyStored);
|
||||
output.writeInt(sender.fuelStored);
|
||||
} catch (IOException e)
|
||||
{
|
||||
System.err.println("[ObsidianIngots] Error while writing tile entity packet.");
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
Packet250CustomPayload packet = new Packet250CustomPayload();
|
||||
packet.channel = "ObsidianIngots";
|
||||
packet.data = bytes.toByteArray();
|
||||
packet.length = packet.data.length;
|
||||
|
||||
PacketDispatcher.sendPacketToAllAround(sender.xCoord, sender.yCoord, sender.zCoord, distance, sender.worldObj.provider.dimensionId, packet);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends the server the defined packet data int.
|
||||
* @param type - packet type
|
||||
|
|
|
@ -414,6 +414,11 @@ public abstract class TileEntityAdvancedElectricMachine extends TileEntityBasicM
|
|||
secondaryEnergyStored = Math.max(Math.min(energy, getFuelTicks(inventory[1])), 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the scaled secondary energy level for the GUI.
|
||||
* @param i - multiplier
|
||||
* @return scaled secondary energy
|
||||
*/
|
||||
public int getScaledSecondaryEnergyLevel(int i)
|
||||
{
|
||||
return secondaryEnergyStored*i / MAX_SECONDARY_ENERGY;
|
||||
|
|
|
@ -4,6 +4,6 @@ public class TileEntityAdvancedPowerUnit extends TileEntityPowerUnit
|
|||
{
|
||||
public TileEntityAdvancedPowerUnit()
|
||||
{
|
||||
super(50000000, 1024);
|
||||
super("Advanced Power Unit", 50000000, 1024);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,11 +25,8 @@ import net.minecraftforge.common.ForgeDirection;
|
|||
import net.minecraftforge.common.ISidedInventory;
|
||||
import net.uberkat.obsidian.client.Sound;
|
||||
|
||||
public abstract class TileEntityBasicMachine extends TileEntityDisableable implements IElectricMachine
|
||||
public abstract class TileEntityBasicMachine extends TileEntityElectricBlock implements IElectricMachine
|
||||
{
|
||||
/** The inventory slot itemstacks used by this machine. */
|
||||
public ItemStack[] inventory;
|
||||
|
||||
/** The Sound instance for this machine. */
|
||||
public Sound audio;
|
||||
|
||||
|
@ -42,39 +39,21 @@ public abstract class TileEntityBasicMachine extends TileEntityDisableable imple
|
|||
/** How many ticks this machine has operated for. */
|
||||
public int operatingTicks = 0;
|
||||
|
||||
/** How much energy is stored in this machine. */
|
||||
public int energyStored = 0;
|
||||
|
||||
/** Ticks required to operate -- or smelt an item. */
|
||||
public int TICKS_REQUIRED;
|
||||
|
||||
/** The current tick requirement for this machine. */
|
||||
public int currentTicksRequired;
|
||||
|
||||
/** Maximum amount of energy this machine can hold. */
|
||||
public int MAX_ENERGY;
|
||||
|
||||
/** The current energy capacity for this machine. */
|
||||
public int currentMaxEnergy;
|
||||
|
||||
/** The direction this block is facing. */
|
||||
public int facing;
|
||||
|
||||
/** A timer used to send packets to clients. */
|
||||
public int packetTick = 0;
|
||||
|
||||
/** Whether or not this block is in it's active state. */
|
||||
public boolean isActive;
|
||||
|
||||
/** The previous active state for this block. */
|
||||
public boolean prevActive;
|
||||
|
||||
/** Whether or not this machine has initialized and registered with other mods. */
|
||||
public boolean initialized;
|
||||
|
||||
/** The full name of this machine. */
|
||||
public String fullName;
|
||||
|
||||
/** The GUI texture path for this machine. */
|
||||
public String guiTexturePath;
|
||||
|
||||
|
@ -92,49 +71,26 @@ public abstract class TileEntityBasicMachine extends TileEntityDisableable imple
|
|||
*/
|
||||
public TileEntityBasicMachine(String soundPath, String name, String path, int perTick, int ticksRequired, int maxEnergy)
|
||||
{
|
||||
super(name, maxEnergy);
|
||||
ENERGY_PER_TICK = perTick;
|
||||
TICKS_REQUIRED = currentTicksRequired = ticksRequired;
|
||||
MAX_ENERGY = currentMaxEnergy = maxEnergy;
|
||||
soundURL = soundPath;
|
||||
fullName = name;
|
||||
guiTexturePath = path;
|
||||
isActive = false;
|
||||
if(PowerFramework.currentFramework != null)
|
||||
{
|
||||
powerProvider = PowerFramework.currentFramework.createPowerProvider();
|
||||
powerProvider.configure(5, 25, 25, 25, maxEnergy/10);
|
||||
powerProvider.configure(20, 25, 25, 25, maxEnergy/10);
|
||||
}
|
||||
}
|
||||
|
||||
public void updateEntity()
|
||||
public void onUpdate()
|
||||
{
|
||||
if(!initialized && worldObj != null)
|
||||
{
|
||||
if(ObsidianIngots.hooks.IC2Loaded)
|
||||
{
|
||||
EnergyNet.getForWorld(worldObj).addTileEntity(this);
|
||||
}
|
||||
|
||||
initialized = true;
|
||||
}
|
||||
|
||||
if(audio == null && worldObj.isRemote)
|
||||
{
|
||||
audio = ObsidianIngots.audioHandler.getSound(fullName.replace(" ", ""), soundURL, worldObj, xCoord, yCoord, zCoord);
|
||||
}
|
||||
|
||||
onUpdate();
|
||||
|
||||
if(!worldObj.isRemote)
|
||||
{
|
||||
if(packetTick == 5)
|
||||
{
|
||||
sendPacket();
|
||||
}
|
||||
|
||||
packetTick++;
|
||||
}
|
||||
|
||||
if(worldObj.isRemote)
|
||||
{
|
||||
audio.updateVolume(FMLClientHandler.instance().getClient().thePlayer);
|
||||
|
@ -147,36 +103,12 @@ public abstract class TileEntityBasicMachine extends TileEntityDisableable imple
|
|||
audio.stop();
|
||||
}
|
||||
}
|
||||
|
||||
if(!worldObj.isRemote)
|
||||
{
|
||||
sendPacketWithRange();
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isUseableByPlayer(EntityPlayer entityplayer)
|
||||
{
|
||||
return worldObj.getBlockTileEntity(xCoord, yCoord, zCoord) != this ? false : entityplayer.getDistanceSq((double)xCoord + 0.5D, (double)yCoord + 0.5D, (double)zCoord + 0.5D) <= 64.0D;
|
||||
}
|
||||
|
||||
public void openChest() {}
|
||||
|
||||
public void closeChest() {}
|
||||
|
||||
public String getInvName()
|
||||
{
|
||||
return fullName;
|
||||
}
|
||||
|
||||
public int getInventoryStackLimit()
|
||||
{
|
||||
return 64;
|
||||
}
|
||||
|
||||
public void invalidate()
|
||||
{
|
||||
super.invalidate();
|
||||
if(worldObj.isRemote)
|
||||
if(worldObj.isRemote && audio != null)
|
||||
{
|
||||
audio.remove();
|
||||
}
|
||||
|
@ -204,46 +136,6 @@ public abstract class TileEntityBasicMachine extends TileEntityDisableable imple
|
|||
return rejects;
|
||||
}
|
||||
|
||||
public boolean wrenchCanSetFacing(EntityPlayer entityPlayer, int side)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public short getFacing()
|
||||
{
|
||||
return (short)facing;
|
||||
}
|
||||
|
||||
public void setFacing(short direction)
|
||||
{
|
||||
if(initialized)
|
||||
{
|
||||
if(ObsidianIngots.hooks.IC2Loaded)
|
||||
{
|
||||
EnergyNet.getForWorld(worldObj).removeTileEntity(this);
|
||||
}
|
||||
}
|
||||
|
||||
initialized = false;
|
||||
facing = direction;
|
||||
sendPacket();
|
||||
if(ObsidianIngots.hooks.IC2Loaded)
|
||||
{
|
||||
EnergyNet.getForWorld(worldObj).addTileEntity(this);
|
||||
}
|
||||
initialized = true;
|
||||
}
|
||||
|
||||
public boolean wrenchCanRemove(EntityPlayer entityPlayer)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public float getWrenchDropRate()
|
||||
{
|
||||
return 1.0F;
|
||||
}
|
||||
|
||||
public void setPowerProvider(IPowerProvider provider)
|
||||
{
|
||||
powerProvider = provider;
|
||||
|
@ -266,15 +158,10 @@ public abstract class TileEntityBasicMachine extends TileEntityDisableable imple
|
|||
return true;
|
||||
}
|
||||
|
||||
public boolean isAddedToEnergyNet()
|
||||
{
|
||||
return initialized;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the scaled energy level for the GUI.
|
||||
* @param i - multiplier
|
||||
* @return
|
||||
* @return scaled energy
|
||||
*/
|
||||
public int getScaledEnergyLevel(int i)
|
||||
{
|
||||
|
@ -366,82 +253,6 @@ public abstract class TileEntityBasicMachine extends TileEntityDisableable imple
|
|||
|
||||
public void detach(IComputerAccess computer) {}
|
||||
|
||||
public int getStartInventorySide(ForgeDirection side)
|
||||
{
|
||||
if (side == ForgeDirection.DOWN) return 1;
|
||||
if (side == ForgeDirection.UP) return 0;
|
||||
return 2;
|
||||
}
|
||||
|
||||
public int getSizeInventorySide(ForgeDirection side)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
public int getSizeInventory()
|
||||
{
|
||||
return inventory.length;
|
||||
}
|
||||
|
||||
public ItemStack getStackInSlot(int par1)
|
||||
{
|
||||
return inventory[par1];
|
||||
}
|
||||
|
||||
public ItemStack decrStackSize(int par1, int par2)
|
||||
{
|
||||
if (inventory[par1] != null)
|
||||
{
|
||||
ItemStack var3;
|
||||
|
||||
if (inventory[par1].stackSize <= par2)
|
||||
{
|
||||
var3 = inventory[par1];
|
||||
inventory[par1] = null;
|
||||
return var3;
|
||||
}
|
||||
else
|
||||
{
|
||||
var3 = inventory[par1].splitStack(par2);
|
||||
|
||||
if (inventory[par1].stackSize == 0)
|
||||
{
|
||||
inventory[par1] = null;
|
||||
}
|
||||
|
||||
return var3;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public ItemStack getStackInSlotOnClosing(int par1)
|
||||
{
|
||||
if (inventory[par1] != null)
|
||||
{
|
||||
ItemStack var2 = inventory[par1];
|
||||
inventory[par1] = null;
|
||||
return var2;
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void setInventorySlotContents(int par1, ItemStack par2ItemStack)
|
||||
{
|
||||
inventory[par1] = par2ItemStack;
|
||||
|
||||
if (par2ItemStack != null && par2ItemStack.stackSize > getInventoryStackLimit())
|
||||
{
|
||||
par2ItemStack.stackSize = getInventoryStackLimit();
|
||||
}
|
||||
}
|
||||
|
||||
public int transferToAcceptor(int amount)
|
||||
{
|
||||
int rejects = 0;
|
||||
|
|
|
@ -0,0 +1,228 @@
|
|||
package net.uberkat.obsidian.common;
|
||||
|
||||
import obsidian.api.ITileNetwork;
|
||||
import universalelectricity.prefab.TileEntityDisableable;
|
||||
import ic2.api.EnergyNet;
|
||||
import ic2.api.IWrenchable;
|
||||
import net.minecraft.src.*;
|
||||
import net.minecraftforge.common.ForgeDirection;
|
||||
import net.minecraftforge.common.ISidedInventory;
|
||||
|
||||
public abstract class TileEntityElectricBlock extends TileEntityDisableable implements IWrenchable, ISidedInventory, IInventory, ITileNetwork
|
||||
{
|
||||
/** The inventory slot itemstacks used by this block. */
|
||||
public ItemStack[] inventory;
|
||||
|
||||
/** How much energy is stored in this block. */
|
||||
public int energyStored;
|
||||
|
||||
/** The direction this block is facing. */
|
||||
public int facing;
|
||||
|
||||
/** Maximum amount of energy this machine can hold. */
|
||||
public int MAX_ENERGY;
|
||||
|
||||
/** The full name of this machine. */
|
||||
public String fullName;
|
||||
|
||||
/** Whether or not this machine has initialized and registered with other mods. */
|
||||
public boolean initialized;
|
||||
|
||||
/** The amount of players using this block */
|
||||
public int playersUsing = 0;
|
||||
|
||||
/** A timer used to send packets to clients. */
|
||||
public int packetTick;
|
||||
|
||||
/**
|
||||
* The base of all blocks that deal with electricity. It has a facing state, initialized state,
|
||||
* and a current amount of stored energy.
|
||||
* @param name - full name of this block
|
||||
* @param maxEnergy - how much energy this block can store
|
||||
*/
|
||||
public TileEntityElectricBlock(String name, int maxEnergy)
|
||||
{
|
||||
fullName = name;
|
||||
MAX_ENERGY = maxEnergy;
|
||||
}
|
||||
|
||||
public void updateEntity()
|
||||
{
|
||||
if(!initialized && worldObj != null)
|
||||
{
|
||||
if(ObsidianIngots.hooks.IC2Loaded)
|
||||
{
|
||||
EnergyNet.getForWorld(worldObj).addTileEntity(this);
|
||||
}
|
||||
|
||||
initialized = true;
|
||||
}
|
||||
|
||||
onUpdate();
|
||||
|
||||
if(!worldObj.isRemote)
|
||||
{
|
||||
if(playersUsing > 0)
|
||||
{
|
||||
sendPacketWithRange();
|
||||
}
|
||||
else {
|
||||
if(packetTick % 100 == 0)
|
||||
{
|
||||
sendPacketWithRange();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update call for machines. Use instead of updateEntity -- it's called every tick.
|
||||
*/
|
||||
public abstract void onUpdate();
|
||||
|
||||
public int getStartInventorySide(ForgeDirection side)
|
||||
{
|
||||
if (side == ForgeDirection.DOWN) return 1;
|
||||
if (side == ForgeDirection.UP) return 0;
|
||||
return 2;
|
||||
}
|
||||
|
||||
public int getSizeInventorySide(ForgeDirection side)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
public int getSizeInventory()
|
||||
{
|
||||
return inventory.length;
|
||||
}
|
||||
|
||||
public ItemStack getStackInSlot(int par1)
|
||||
{
|
||||
return inventory[par1];
|
||||
}
|
||||
|
||||
public ItemStack decrStackSize(int par1, int par2)
|
||||
{
|
||||
if (inventory[par1] != null)
|
||||
{
|
||||
ItemStack var3;
|
||||
|
||||
if (inventory[par1].stackSize <= par2)
|
||||
{
|
||||
var3 = inventory[par1];
|
||||
inventory[par1] = null;
|
||||
return var3;
|
||||
}
|
||||
else
|
||||
{
|
||||
var3 = inventory[par1].splitStack(par2);
|
||||
|
||||
if (inventory[par1].stackSize == 0)
|
||||
{
|
||||
inventory[par1] = null;
|
||||
}
|
||||
|
||||
return var3;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public ItemStack getStackInSlotOnClosing(int par1)
|
||||
{
|
||||
if (inventory[par1] != null)
|
||||
{
|
||||
ItemStack var2 = inventory[par1];
|
||||
inventory[par1] = null;
|
||||
return var2;
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void setInventorySlotContents(int par1, ItemStack par2ItemStack)
|
||||
{
|
||||
inventory[par1] = par2ItemStack;
|
||||
|
||||
if (par2ItemStack != null && par2ItemStack.stackSize > getInventoryStackLimit())
|
||||
{
|
||||
par2ItemStack.stackSize = getInventoryStackLimit();
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isUseableByPlayer(EntityPlayer entityplayer)
|
||||
{
|
||||
return worldObj.getBlockTileEntity(xCoord, yCoord, zCoord) != this ? false : entityplayer.getDistanceSq((double)xCoord + 0.5D, (double)yCoord + 0.5D, (double)zCoord + 0.5D) <= 64.0D;
|
||||
}
|
||||
|
||||
public boolean wrenchCanSetFacing(EntityPlayer entityPlayer, int side)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public short getFacing()
|
||||
{
|
||||
return (short)facing;
|
||||
}
|
||||
|
||||
public void setFacing(short direction)
|
||||
{
|
||||
if(initialized)
|
||||
{
|
||||
if(ObsidianIngots.hooks.IC2Loaded)
|
||||
{
|
||||
EnergyNet.getForWorld(worldObj).removeTileEntity(this);
|
||||
}
|
||||
}
|
||||
|
||||
initialized = false;
|
||||
facing = direction;
|
||||
sendPacket();
|
||||
if(ObsidianIngots.hooks.IC2Loaded)
|
||||
{
|
||||
EnergyNet.getForWorld(worldObj).addTileEntity(this);
|
||||
}
|
||||
initialized = true;
|
||||
}
|
||||
|
||||
public boolean wrenchCanRemove(EntityPlayer entityPlayer)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public float getWrenchDropRate()
|
||||
{
|
||||
return 1.0F;
|
||||
}
|
||||
|
||||
public boolean isAddedToEnergyNet()
|
||||
{
|
||||
return initialized;
|
||||
}
|
||||
|
||||
public String getInvName()
|
||||
{
|
||||
return fullName;
|
||||
}
|
||||
|
||||
public int getInventoryStackLimit()
|
||||
{
|
||||
return 64;
|
||||
}
|
||||
|
||||
public void openChest()
|
||||
{
|
||||
playersUsing++;
|
||||
}
|
||||
|
||||
public void closeChest()
|
||||
{
|
||||
playersUsing--;
|
||||
}
|
||||
}
|
484
src/common/net/uberkat/obsidian/common/TileEntityGenerator.java
Normal file
484
src/common/net/uberkat/obsidian/common/TileEntityGenerator.java
Normal file
|
@ -0,0 +1,484 @@
|
|||
package net.uberkat.obsidian.common;
|
||||
|
||||
import buildcraft.api.core.Orientations;
|
||||
import buildcraft.api.power.IPowerProvider;
|
||||
import buildcraft.api.power.IPowerReceptor;
|
||||
import buildcraft.api.power.PowerFramework;
|
||||
import buildcraft.api.power.PowerProvider;
|
||||
|
||||
import com.google.common.io.ByteArrayDataInput;
|
||||
|
||||
import dan200.computer.api.IComputerAccess;
|
||||
import dan200.computer.api.IPeripheral;
|
||||
|
||||
import ic2.api.Direction;
|
||||
import ic2.api.ElectricItem;
|
||||
import ic2.api.EnergyNet;
|
||||
import ic2.api.IElectricItem;
|
||||
import ic2.api.IEnergySource;
|
||||
import ic2.api.IEnergyStorage;
|
||||
import obsidian.api.IEnergizedItem;
|
||||
import obsidian.api.IEnergyAcceptor;
|
||||
import universalelectricity.core.UniversalElectricity;
|
||||
import universalelectricity.core.Vector3;
|
||||
import universalelectricity.electricity.ElectricInfo;
|
||||
import universalelectricity.electricity.ElectricityManager;
|
||||
import universalelectricity.implement.IConductor;
|
||||
import universalelectricity.implement.IElectricityReceiver;
|
||||
import universalelectricity.implement.IItemElectric;
|
||||
import universalelectricity.implement.IJouleStorage;
|
||||
import universalelectricity.prefab.TileEntityConductor;
|
||||
import net.minecraft.src.*;
|
||||
import net.minecraftforge.common.ForgeDirection;
|
||||
|
||||
public abstract class TileEntityGenerator extends TileEntityElectricBlock implements IEnergySource, IEnergyStorage, IPowerReceptor, IJouleStorage, IElectricityReceiver, IPeripheral
|
||||
{
|
||||
/** The amount of fuel stored in this generator. */
|
||||
public int fuelStored;
|
||||
|
||||
/** The maximum amount of fuel this generator can store. */
|
||||
public int MAX_FUEL;
|
||||
|
||||
/** Output per tick this generator can transfer. */
|
||||
public int output = 128;
|
||||
|
||||
/** BuildCraft power provider. */
|
||||
public IPowerProvider powerProvider;
|
||||
|
||||
/**
|
||||
* Generator -- a block that produces energy. It has a certain amount of fuel it can store as well as an output rate.
|
||||
* @param name - full name of this generator
|
||||
* @param maxEnergy - how much energy this generator can store
|
||||
* @param maxFuel - how much fuel this generator can store
|
||||
*/
|
||||
public TileEntityGenerator(String name, int maxEnergy, int maxFuel)
|
||||
{
|
||||
super(name, maxEnergy);
|
||||
MAX_FUEL = maxFuel;
|
||||
inventory = new ItemStack[2];
|
||||
if(PowerFramework.currentFramework != null)
|
||||
{
|
||||
powerProvider = PowerFramework.currentFramework.createPowerProvider();
|
||||
powerProvider.configure(0, 2, 2000, 1, MAX_ENERGY/10);
|
||||
}
|
||||
}
|
||||
|
||||
public void onUpdate()
|
||||
{
|
||||
if(powerProvider != null)
|
||||
{
|
||||
int received = (int)(powerProvider.useEnergy(25, 25, true)*10);
|
||||
setEnergy(energyStored + received);
|
||||
}
|
||||
|
||||
if(inventory[1] != null && energyStored > 0)
|
||||
{
|
||||
if(inventory[1].getItem() instanceof IEnergizedItem)
|
||||
{
|
||||
IEnergizedItem item = (IEnergizedItem)inventory[1].getItem();
|
||||
int rejects = item.charge(inventory[1], item.getRate());
|
||||
setEnergy(energyStored - (item.getRate() - rejects));
|
||||
}
|
||||
else if(inventory[1].getItem() instanceof IItemElectric)
|
||||
{
|
||||
IItemElectric electricItem = (IItemElectric) inventory[1].getItem();
|
||||
double ampsToGive = Math.min(ElectricInfo.getAmps(electricItem.getMaxJoules() * 0.005, getVoltage()), (energyStored*UniversalElectricity.IC2_RATIO));
|
||||
double joules = electricItem.onReceive(ampsToGive, getVoltage(), inventory[1]);
|
||||
setJoules((energyStored*UniversalElectricity.IC2_RATIO) - (ElectricInfo.getJoules(ampsToGive, getVoltage(), 1) - joules));
|
||||
}
|
||||
else if(inventory[1].getItem() instanceof IElectricItem)
|
||||
{
|
||||
int sent = ElectricItem.charge(inventory[1], energyStored, 3, false, false);
|
||||
setEnergy(energyStored - sent);
|
||||
}
|
||||
}
|
||||
|
||||
if(inventory[0] != null && fuelStored < MAX_ENERGY)
|
||||
{
|
||||
int fuel = getFuel(inventory[0]);
|
||||
if(fuel > 0)
|
||||
{
|
||||
int fuelNeeded = MAX_FUEL - fuelStored;
|
||||
if(fuel <= fuelNeeded)
|
||||
{
|
||||
fuelStored += fuel;
|
||||
--inventory[0].stackSize;
|
||||
}
|
||||
|
||||
if(inventory[0].stackSize == 0)
|
||||
{
|
||||
inventory[0] = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(energyStored < MAX_ENERGY)
|
||||
{
|
||||
System.out.println(getEnvironmentBoost());
|
||||
setEnergy(energyStored + getEnvironmentBoost());
|
||||
|
||||
if(fuelStored > 0)
|
||||
{
|
||||
fuelStored--;
|
||||
setEnergy(energyStored + 4);
|
||||
}
|
||||
}
|
||||
|
||||
if(energyStored > 0)
|
||||
{
|
||||
TileEntity tileEntity = Vector3.getTileEntityFromSide(worldObj, Vector3.get(this), ForgeDirection.getOrientation(facing));
|
||||
|
||||
if(ObsidianIngots.hooks.IC2Loaded)
|
||||
{
|
||||
if(energyStored >= output)
|
||||
{
|
||||
setEnergy(energyStored - (output - EnergyNet.getForWorld(worldObj).emitEnergyFrom(this, output)));
|
||||
}
|
||||
}
|
||||
|
||||
if(tileEntity != null)
|
||||
{
|
||||
if(isPowerReceptor(tileEntity))
|
||||
{
|
||||
IPowerReceptor receptor = (IPowerReceptor)tileEntity;
|
||||
int energyNeeded = Math.min(receptor.getPowerProvider().getMinEnergyReceived(), receptor.getPowerProvider().getMaxEnergyReceived())*10;
|
||||
float transferEnergy = Math.max(Math.min(Math.min(energyNeeded, energyStored), 54000), 0);
|
||||
receptor.getPowerProvider().receiveEnergy((float)(transferEnergy/10), Orientations.dirs()[ForgeDirection.getOrientation(facing).getOpposite().ordinal()]);
|
||||
setEnergy(energyStored - (int)transferEnergy);
|
||||
}
|
||||
else if(tileEntity instanceof TileEntityConductor)
|
||||
{
|
||||
double joulesNeeded = ElectricityManager.instance.getElectricityRequired(((IConductor) tileEntity).getNetwork());
|
||||
double transferAmps = Math.max(Math.min(Math.min(ElectricInfo.getAmps(joulesNeeded, getVoltage()), ElectricInfo.getAmps(energyStored*UniversalElectricity.IC2_RATIO, getVoltage())), 80), 0);
|
||||
if (!worldObj.isRemote)
|
||||
{
|
||||
ElectricityManager.instance.produceElectricity(this, (IConductor)tileEntity, transferAmps, getVoltage());
|
||||
}
|
||||
setEnergy(energyStored - (int)(ElectricInfo.getJoules(transferAmps, getVoltage())*UniversalElectricity.TO_IC2_RATIO));
|
||||
}
|
||||
else if(tileEntity instanceof IEnergyAcceptor)
|
||||
{
|
||||
if(((IEnergyAcceptor)tileEntity).canReceive(ForgeDirection.getOrientation(facing).getOpposite()))
|
||||
{
|
||||
int sendingEnergy = 0;
|
||||
if(energyStored >= output)
|
||||
{
|
||||
sendingEnergy = output;
|
||||
}
|
||||
else if(energyStored < output)
|
||||
{
|
||||
sendingEnergy = energyStored;
|
||||
}
|
||||
|
||||
int rejects = ((IEnergyAcceptor)tileEntity).transferToAcceptor(output);
|
||||
|
||||
setEnergy(energyStored - (sendingEnergy - rejects));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the amount of fuel a certain ItemStack contains.
|
||||
* @param itemstack - slot stack to check
|
||||
* @return amount of fuel the stack contains
|
||||
*/
|
||||
public abstract int getFuel(ItemStack itemstack);
|
||||
|
||||
/**
|
||||
* Gets the boost this generator can receive in it's current location.
|
||||
* @return environmental boost
|
||||
*/
|
||||
public int getEnvironmentBoost()
|
||||
{
|
||||
int boost = 0;
|
||||
|
||||
if(worldObj.getBlockId(xCoord+1, yCoord, zCoord) == 10)
|
||||
boost+=1;
|
||||
if(worldObj.getBlockId(xCoord-1, yCoord, zCoord) == 10)
|
||||
boost+=1;
|
||||
if(worldObj.getBlockId(xCoord, yCoord+1, zCoord) == 10)
|
||||
boost+=1;
|
||||
if(worldObj.getBlockId(xCoord, yCoord-1, zCoord) == 10)
|
||||
boost+=1;
|
||||
if(worldObj.getBlockId(xCoord, yCoord, zCoord+1) == 10)
|
||||
boost+=1;
|
||||
if(worldObj.getBlockId(xCoord, yCoord, zCoord-1) == 10)
|
||||
boost+=1;
|
||||
|
||||
if(worldObj.isDaytime() && worldObj.canBlockSeeTheSky(xCoord, yCoord+1, zCoord) && !worldObj.isRaining() && !worldObj.isThundering() && !worldObj.provider.hasNoSky)
|
||||
{
|
||||
boost+=2;
|
||||
if(worldObj.getWorldChunkManager().getBiomeGenAt(xCoord, zCoord).biomeName.equals("Desert"))
|
||||
boost+=2;
|
||||
else if(worldObj.getWorldChunkManager().getBiomeGenAt(xCoord, zCoord).biomeName.equals("Plains"))
|
||||
boost+=1;
|
||||
}
|
||||
|
||||
return boost;
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether or not this machine can operate and generate power.
|
||||
* @return if the machine can generate power
|
||||
*/
|
||||
public boolean canPower()
|
||||
{
|
||||
if(fuelStored <= 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if(energyStored >= MAX_ENERGY)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether or not the declared Tile Entity is an instance of a BuildCraft power receptor.
|
||||
* @param tileEntity - tile entity to check
|
||||
* @return if the tile entity is a power receptor
|
||||
*/
|
||||
public boolean isPowerReceptor(TileEntity tileEntity)
|
||||
{
|
||||
if(tileEntity instanceof IPowerReceptor)
|
||||
{
|
||||
IPowerReceptor receptor = (IPowerReceptor)tileEntity;
|
||||
IPowerProvider provider = receptor.getPowerProvider();
|
||||
return provider != null && provider.getClass().getSuperclass().equals(PowerProvider.class);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the scaled energy level for the GUI.
|
||||
* @param i - multiplier
|
||||
* @return
|
||||
*/
|
||||
public int getScaledEnergyLevel(int i)
|
||||
{
|
||||
return energyStored*i / MAX_ENERGY;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the scaled fuel level for the GUI.
|
||||
* @param i - multiplier
|
||||
* @return
|
||||
*/
|
||||
public int getScaledFuelLevel(int i)
|
||||
{
|
||||
return fuelStored*i / MAX_FUEL;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set this block's energy to a new amount.
|
||||
* @param energy - new amount of energy
|
||||
*/
|
||||
public void setEnergy(int energy)
|
||||
{
|
||||
energyStored = Math.max(Math.min(energy, MAX_ENERGY), 0);
|
||||
}
|
||||
|
||||
public void readFromNBT(NBTTagCompound nbtTags)
|
||||
{
|
||||
super.readFromNBT(nbtTags);
|
||||
|
||||
if(PowerFramework.currentFramework != null)
|
||||
{
|
||||
PowerFramework.currentFramework.loadPowerProvider(this, nbtTags);
|
||||
}
|
||||
|
||||
NBTTagList tagList = nbtTags.getTagList("Items");
|
||||
inventory = new ItemStack[getSizeInventory()];
|
||||
|
||||
for (int slots = 0; slots < tagList.tagCount(); ++slots)
|
||||
{
|
||||
NBTTagCompound tagCompound = (NBTTagCompound)tagList.tagAt(slots);
|
||||
byte slotID = tagCompound.getByte("Slot");
|
||||
|
||||
if (slotID >= 0 && slotID < inventory.length)
|
||||
{
|
||||
inventory[slotID] = ItemStack.loadItemStackFromNBT(tagCompound);
|
||||
}
|
||||
}
|
||||
|
||||
energyStored = nbtTags.getInteger("energyStored");
|
||||
fuelStored = nbtTags.getInteger("fuelStored");
|
||||
facing = nbtTags.getInteger("facing");
|
||||
}
|
||||
|
||||
public void writeToNBT(NBTTagCompound nbtTags)
|
||||
{
|
||||
super.writeToNBT(nbtTags);
|
||||
|
||||
if(PowerFramework.currentFramework != null)
|
||||
{
|
||||
PowerFramework.currentFramework.savePowerProvider(this, nbtTags);
|
||||
}
|
||||
|
||||
nbtTags.setInteger("energyStored", energyStored);
|
||||
nbtTags.setInteger("fuelStored", fuelStored);
|
||||
nbtTags.setInteger("facing", facing);
|
||||
NBTTagList tagList = new NBTTagList();
|
||||
|
||||
for (int slots = 0; slots < inventory.length; ++slots)
|
||||
{
|
||||
if (inventory[slots] != null)
|
||||
{
|
||||
NBTTagCompound tagCompound = new NBTTagCompound();
|
||||
tagCompound.setByte("Slot", (byte)slots);
|
||||
inventory[slots].writeToNBT(tagCompound);
|
||||
tagList.appendTag(tagCompound);
|
||||
}
|
||||
}
|
||||
|
||||
nbtTags.setTag("Items", tagList);
|
||||
}
|
||||
|
||||
public double getVoltage()
|
||||
{
|
||||
return 120;
|
||||
}
|
||||
|
||||
public void setJoules(double joules, Object... data)
|
||||
{
|
||||
setEnergy((int)(joules*UniversalElectricity.TO_IC2_RATIO));
|
||||
}
|
||||
|
||||
public void handlePacketData(INetworkManager network, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput dataStream)
|
||||
{
|
||||
try {
|
||||
facing = dataStream.readInt();
|
||||
energyStored = dataStream.readInt();
|
||||
fuelStored = dataStream.readInt();
|
||||
worldObj.markBlockAsNeedsUpdate(xCoord, yCoord, zCoord);
|
||||
} catch (Exception e)
|
||||
{
|
||||
System.out.println("[ObsidianIngots] Error while handling tile entity packet.");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void sendPacket()
|
||||
{
|
||||
PacketHandler.sendGeneratorPacket(this);
|
||||
}
|
||||
|
||||
public void sendPacketWithRange()
|
||||
{
|
||||
PacketHandler.sendGeneratorPacketWithRange(this, 50);
|
||||
}
|
||||
|
||||
public String getType()
|
||||
{
|
||||
return getInvName();
|
||||
}
|
||||
|
||||
public String[] getMethodNames()
|
||||
{
|
||||
return new String[] {"getStored", "getOutput", "getMaxEnergy", "getEnergyNeeded", "getFuel", "getFuelNeeded"};
|
||||
}
|
||||
|
||||
public Object[] callMethod(IComputerAccess computer, int method, Object[] arguments) throws Exception
|
||||
{
|
||||
switch(method)
|
||||
{
|
||||
case 0:
|
||||
return new Object[] {energyStored};
|
||||
case 1:
|
||||
return new Object[] {output};
|
||||
case 2:
|
||||
return new Object[] {MAX_ENERGY};
|
||||
case 3:
|
||||
return new Object[] {(MAX_ENERGY-energyStored)};
|
||||
case 4:
|
||||
return new Object[] {fuelStored};
|
||||
case 5:
|
||||
return new Object[] {MAX_FUEL-fuelStored};
|
||||
default:
|
||||
System.err.println("[ObsidianIngots] Attempted to call unknown method with computer ID " + computer.getID());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean canAttachToSide(int side)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public void attach(IComputerAccess computer, String computerSide) {}
|
||||
|
||||
public void detach(IComputerAccess computer) {}
|
||||
|
||||
public void setPowerProvider(IPowerProvider provider)
|
||||
{
|
||||
powerProvider = provider;
|
||||
}
|
||||
|
||||
public IPowerProvider getPowerProvider()
|
||||
{
|
||||
return powerProvider;
|
||||
}
|
||||
|
||||
public void doWork() {}
|
||||
|
||||
public int powerRequest()
|
||||
{
|
||||
return getPowerProvider().getMaxEnergyReceived();
|
||||
}
|
||||
|
||||
public double getMaxJoules()
|
||||
{
|
||||
return MAX_ENERGY*UniversalElectricity.IC2_RATIO;
|
||||
}
|
||||
|
||||
public double getJoules(Object... data)
|
||||
{
|
||||
return energyStored*UniversalElectricity.IC2_RATIO;
|
||||
}
|
||||
|
||||
public int getMaxEnergyOutput()
|
||||
{
|
||||
return output;
|
||||
}
|
||||
|
||||
public boolean emitsEnergyTo(TileEntity receiver, Direction direction)
|
||||
{
|
||||
return direction.toForgeDirection() == ForgeDirection.getOrientation(facing);
|
||||
}
|
||||
|
||||
public int getStored()
|
||||
{
|
||||
return energyStored;
|
||||
}
|
||||
|
||||
public int getCapacity()
|
||||
{
|
||||
return MAX_ENERGY;
|
||||
}
|
||||
|
||||
public int getRate()
|
||||
{
|
||||
return output;
|
||||
}
|
||||
|
||||
public boolean canConnect(ForgeDirection side)
|
||||
{
|
||||
return side == ForgeDirection.getOrientation(facing);
|
||||
}
|
||||
|
||||
public void onReceive(TileEntity sender, double amps, double voltage, ForgeDirection side) {}
|
||||
|
||||
public double wattRequest()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
public boolean canReceiveFromSide(ForgeDirection side)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
package net.uberkat.obsidian.common;
|
||||
|
||||
import com.google.common.io.ByteArrayDataInput;
|
||||
|
||||
import net.minecraft.src.*;
|
||||
|
||||
public class TileEntityHeatGenerator extends TileEntityGenerator
|
||||
{
|
||||
public TileEntityHeatGenerator()
|
||||
{
|
||||
super("Heat Generator", 8000, 2000);
|
||||
}
|
||||
|
||||
public int getFuel(ItemStack itemstack)
|
||||
{
|
||||
return TileEntityFurnace.getItemBurnTime(itemstack);
|
||||
}
|
||||
}
|
|
@ -42,38 +42,20 @@ import net.minecraft.src.*;
|
|||
import net.minecraftforge.common.ForgeDirection;
|
||||
import net.minecraftforge.common.ISidedInventory;
|
||||
|
||||
public class TileEntityPowerUnit extends TileEntityDisableable implements IInventory, ISidedInventory, ITileNetwork, IWrenchable, IEnergySink, IEnergySource, IEnergyStorage, IPowerReceptor, IJouleStorage, IElectricityReceiver, IEnergyAcceptor, IPeripheral
|
||||
public class TileEntityPowerUnit extends TileEntityElectricBlock implements IEnergySink, IEnergySource, IEnergyStorage, IPowerReceptor, IJouleStorage, IElectricityReceiver, IEnergyAcceptor, IPeripheral
|
||||
{
|
||||
/** The inventory slot itemstacks used by this power unit. */
|
||||
public ItemStack[] inventory = new ItemStack[2];
|
||||
|
||||
/** Maximum amount of energy this unit can hold. */
|
||||
public int maxEnergy;
|
||||
|
||||
/** Output per tick this machine can transfer. */
|
||||
public int output;
|
||||
|
||||
/** The amount of energy this unit is storing. */
|
||||
public int energyStored = 0;
|
||||
|
||||
/** Direction this block is facing. */
|
||||
public int facing;
|
||||
|
||||
/** A timer used to send packets to clients. */
|
||||
public int packetTick = 0;
|
||||
|
||||
/** BuildCraft power provider. */
|
||||
public IPowerProvider powerProvider;
|
||||
|
||||
/** Whether or not this machine has initialized and registered with other mods. */
|
||||
public boolean initialized = false;
|
||||
|
||||
/**
|
||||
* A block used to store and transfer electricity.
|
||||
*/
|
||||
public TileEntityPowerUnit()
|
||||
{
|
||||
this(500000, 256);
|
||||
this("Power Unit", 500000, 256);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -81,39 +63,20 @@ public class TileEntityPowerUnit extends TileEntityDisableable implements IInven
|
|||
* @param energy - maximum energy this block can hold.
|
||||
* @param i - output per tick this block can handle.
|
||||
*/
|
||||
public TileEntityPowerUnit(int energy, int i)
|
||||
public TileEntityPowerUnit(String name, int maxEnergy, int i)
|
||||
{
|
||||
maxEnergy = energy;
|
||||
super(name, maxEnergy);
|
||||
inventory = new ItemStack[2];
|
||||
output = i;
|
||||
if(PowerFramework.currentFramework != null)
|
||||
{
|
||||
powerProvider = PowerFramework.currentFramework.createPowerProvider();
|
||||
powerProvider.configure(5, 25, 25, 25, maxEnergy/10);
|
||||
powerProvider.configure(0, 2, 2000, 1, MAX_ENERGY/10);
|
||||
}
|
||||
}
|
||||
|
||||
public void updateEntity()
|
||||
public void onUpdate()
|
||||
{
|
||||
if(!worldObj.isRemote)
|
||||
{
|
||||
if(packetTick == 5)
|
||||
{
|
||||
PacketHandler.sendPowerUnitPacket(this);
|
||||
}
|
||||
|
||||
packetTick++;
|
||||
}
|
||||
|
||||
if(!initialized)
|
||||
{
|
||||
if(ObsidianIngots.hooks.IC2Loaded)
|
||||
{
|
||||
EnergyNet.getForWorld(worldObj).addTileEntity(this);
|
||||
}
|
||||
|
||||
initialized = true;
|
||||
}
|
||||
|
||||
if(powerProvider != null)
|
||||
{
|
||||
int received = (int)(powerProvider.useEnergy(25, 25, true)*10);
|
||||
|
@ -142,7 +105,7 @@ public class TileEntityPowerUnit extends TileEntityDisableable implements IInven
|
|||
}
|
||||
}
|
||||
|
||||
if(inventory[1] != null && energyStored < maxEnergy)
|
||||
if(inventory[1] != null && energyStored < MAX_ENERGY)
|
||||
{
|
||||
if(inventory[1].getItem() instanceof IEnergizedItem)
|
||||
{
|
||||
|
@ -165,7 +128,7 @@ public class TileEntityPowerUnit extends TileEntityDisableable implements IInven
|
|||
IElectricItem item = (IElectricItem)inventory[1].getItem();
|
||||
if(item.canProvideEnergy())
|
||||
{
|
||||
int gain = ElectricItem.discharge(inventory[1], maxEnergy - energyStored, 3, false, false);
|
||||
int gain = ElectricItem.discharge(inventory[1], MAX_ENERGY - energyStored, 3, false, false);
|
||||
setEnergy(energyStored + gain);
|
||||
}
|
||||
}
|
||||
|
@ -234,106 +197,17 @@ public class TileEntityPowerUnit extends TileEntityDisableable implements IInven
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!worldObj.isRemote)
|
||||
{
|
||||
PacketHandler.sendPowerUnitPacketWithRange(this, 50);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set this block's energy to a new amount.
|
||||
* @param energy - new amount of energy
|
||||
*/
|
||||
public void setEnergy(int energy)
|
||||
{
|
||||
energyStored = Math.max(Math.min(energy, maxEnergy), 0);
|
||||
energyStored = Math.max(Math.min(energy, MAX_ENERGY), 0);
|
||||
}
|
||||
|
||||
public int getStartInventorySide(ForgeDirection side)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
public int getSizeInventorySide(ForgeDirection side)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
public int getSizeInventory()
|
||||
{
|
||||
return inventory.length;
|
||||
}
|
||||
|
||||
public ItemStack getStackInSlot(int par1)
|
||||
{
|
||||
return inventory[par1];
|
||||
}
|
||||
|
||||
public ItemStack decrStackSize(int par1, int par2)
|
||||
{
|
||||
if (inventory[par1] != null)
|
||||
{
|
||||
ItemStack var3;
|
||||
|
||||
if (inventory[par1].stackSize <= par2)
|
||||
{
|
||||
var3 = inventory[par1];
|
||||
inventory[par1] = null;
|
||||
return var3;
|
||||
}
|
||||
else
|
||||
{
|
||||
var3 = inventory[par1].splitStack(par2);
|
||||
|
||||
if (inventory[par1].stackSize == 0)
|
||||
{
|
||||
inventory[par1] = null;
|
||||
}
|
||||
|
||||
return var3;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public ItemStack getStackInSlotOnClosing(int par1)
|
||||
{
|
||||
if (inventory[par1] != null)
|
||||
{
|
||||
ItemStack var2 = inventory[par1];
|
||||
inventory[par1] = null;
|
||||
return var2;
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void setInventorySlotContents(int par1, ItemStack par2ItemStack)
|
||||
{
|
||||
inventory[par1] = par2ItemStack;
|
||||
|
||||
if (par2ItemStack != null && par2ItemStack.stackSize > getInventoryStackLimit())
|
||||
{
|
||||
par2ItemStack.stackSize = getInventoryStackLimit();
|
||||
}
|
||||
}
|
||||
|
||||
public String getInvName()
|
||||
{
|
||||
return output == 1024 ? "Advanced Power Unit" : "Power Unit";
|
||||
}
|
||||
|
||||
public int getInventoryStackLimit()
|
||||
{
|
||||
return 64;
|
||||
}
|
||||
|
||||
public void openChest() {}
|
||||
|
||||
public void closeChest() {}
|
||||
|
||||
public void readFromNBT(NBTTagCompound nbtTags)
|
||||
{
|
||||
super.readFromNBT(nbtTags);
|
||||
|
@ -401,56 +275,11 @@ public class TileEntityPowerUnit extends TileEntityDisableable implements IInven
|
|||
}
|
||||
}
|
||||
|
||||
public boolean wrenchCanSetFacing(EntityPlayer entityPlayer, int side)
|
||||
{
|
||||
return facing != side;
|
||||
}
|
||||
|
||||
public short getFacing()
|
||||
{
|
||||
return (short)facing;
|
||||
}
|
||||
|
||||
public void setFacing(short direction)
|
||||
{
|
||||
if(initialized)
|
||||
{
|
||||
if(ObsidianIngots.hooks.IC2Loaded)
|
||||
{
|
||||
EnergyNet.getForWorld(worldObj).removeTileEntity(this);
|
||||
}
|
||||
}
|
||||
|
||||
initialized = false;
|
||||
facing = direction;
|
||||
PacketHandler.sendPowerUnitPacket(this);
|
||||
if(ObsidianIngots.hooks.IC2Loaded)
|
||||
{
|
||||
EnergyNet.getForWorld(worldObj).addTileEntity(this);
|
||||
}
|
||||
initialized = true;
|
||||
}
|
||||
|
||||
public boolean wrenchCanRemove(EntityPlayer entityPlayer)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public float getWrenchDropRate()
|
||||
{
|
||||
return 1.0F;
|
||||
}
|
||||
|
||||
public boolean acceptsEnergyFrom(TileEntity emitter, Direction direction)
|
||||
{
|
||||
return direction.toForgeDirection() != ForgeDirection.getOrientation(facing);
|
||||
}
|
||||
|
||||
public boolean isAddedToEnergyNet()
|
||||
{
|
||||
return initialized;
|
||||
}
|
||||
|
||||
public int getStored()
|
||||
{
|
||||
return energyStored;
|
||||
|
@ -458,7 +287,7 @@ public class TileEntityPowerUnit extends TileEntityDisableable implements IInven
|
|||
|
||||
public int getCapacity()
|
||||
{
|
||||
return maxEnergy;
|
||||
return MAX_ENERGY;
|
||||
}
|
||||
|
||||
public int getRate()
|
||||
|
@ -468,13 +297,13 @@ public class TileEntityPowerUnit extends TileEntityDisableable implements IInven
|
|||
|
||||
public boolean demandsEnergy()
|
||||
{
|
||||
return energyStored < maxEnergy;
|
||||
return energyStored < MAX_ENERGY;
|
||||
}
|
||||
|
||||
public int injectEnergy(Direction direction, int i)
|
||||
{
|
||||
int rejects = 0;
|
||||
int neededEnergy = maxEnergy-energyStored;
|
||||
int neededEnergy = MAX_ENERGY-energyStored;
|
||||
if(i <= neededEnergy)
|
||||
{
|
||||
energyStored += i;
|
||||
|
@ -510,7 +339,7 @@ public class TileEntityPowerUnit extends TileEntityDisableable implements IInven
|
|||
|
||||
public double getMaxJoules()
|
||||
{
|
||||
return maxEnergy*UniversalElectricity.IC2_RATIO;
|
||||
return MAX_ENERGY*UniversalElectricity.IC2_RATIO;
|
||||
}
|
||||
|
||||
public void setPowerProvider(IPowerProvider provider)
|
||||
|
@ -542,8 +371,8 @@ public class TileEntityPowerUnit extends TileEntityDisableable implements IInven
|
|||
|
||||
/**
|
||||
* Whether or not the declared Tile Entity is an instance of a BuildCraft power receptor.
|
||||
* @param tileEntity
|
||||
* @return
|
||||
* @param tileEntity - tile entity to check
|
||||
* @return if the tile entity is a power receptor
|
||||
*/
|
||||
public boolean isPowerReceptor(TileEntity tileEntity)
|
||||
{
|
||||
|
@ -563,7 +392,7 @@ public class TileEntityPowerUnit extends TileEntityDisableable implements IInven
|
|||
|
||||
public double wattRequest()
|
||||
{
|
||||
return ElectricInfo.getWatts(maxEnergy*UniversalElectricity.IC2_RATIO) - ElectricInfo.getWatts(energyStored*UniversalElectricity.IC2_RATIO);
|
||||
return ElectricInfo.getWatts(MAX_ENERGY*UniversalElectricity.IC2_RATIO) - ElectricInfo.getWatts(energyStored*UniversalElectricity.IC2_RATIO);
|
||||
}
|
||||
|
||||
public boolean canReceiveFromSide(ForgeDirection side)
|
||||
|
@ -571,11 +400,6 @@ public class TileEntityPowerUnit extends TileEntityDisableable implements IInven
|
|||
return side != ForgeDirection.getOrientation(facing);
|
||||
}
|
||||
|
||||
public boolean isUseableByPlayer(EntityPlayer entityplayer)
|
||||
{
|
||||
return worldObj.getBlockTileEntity(xCoord, yCoord, zCoord) != this ? false : entityplayer.getDistanceSq((double)xCoord + 0.5D, (double)yCoord + 0.5D, (double)zCoord + 0.5D) <= 64.0D;
|
||||
}
|
||||
|
||||
public String getType()
|
||||
{
|
||||
return getInvName();
|
||||
|
@ -595,9 +419,9 @@ public class TileEntityPowerUnit extends TileEntityDisableable implements IInven
|
|||
case 1:
|
||||
return new Object[] {output};
|
||||
case 2:
|
||||
return new Object[] {maxEnergy};
|
||||
return new Object[] {MAX_ENERGY};
|
||||
case 3:
|
||||
return new Object[] {(maxEnergy-energyStored)};
|
||||
return new Object[] {(MAX_ENERGY-energyStored)};
|
||||
default:
|
||||
System.err.println("[ObsidianIngots] Attempted to call unknown method with computer ID " + computer.getID());
|
||||
return null;
|
||||
|
@ -616,7 +440,7 @@ public class TileEntityPowerUnit extends TileEntityDisableable implements IInven
|
|||
public int transferToAcceptor(int amount)
|
||||
{
|
||||
int rejects = 0;
|
||||
int neededEnergy = maxEnergy-energyStored;
|
||||
int neededEnergy = MAX_ENERGY-energyStored;
|
||||
if(amount <= neededEnergy)
|
||||
{
|
||||
energyStored += amount;
|
||||
|
@ -634,4 +458,14 @@ public class TileEntityPowerUnit extends TileEntityDisableable implements IInven
|
|||
{
|
||||
return side != ForgeDirection.getOrientation(facing);
|
||||
}
|
||||
|
||||
public void sendPacket()
|
||||
{
|
||||
PacketHandler.sendPowerUnitPacket(this);
|
||||
}
|
||||
|
||||
public void sendPacketWithRange()
|
||||
{
|
||||
PacketHandler.sendPowerUnitPacketWithRange(this, 50);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ import net.minecraftforge.common.ISidedInventory;
|
|||
* @author AidanBrady
|
||||
*
|
||||
*/
|
||||
public interface IElectricMachine extends IInventory, ISidedInventory, IWrenchable, ITileNetwork, IPowerReceptor, IEnergySink, IJouleStorage, IElectricityReceiver, IEnergyAcceptor, IPeripheral
|
||||
public interface IElectricMachine extends IPowerReceptor, IEnergySink, IJouleStorage, IElectricityReceiver, IEnergyAcceptor, IPeripheral
|
||||
{
|
||||
/**
|
||||
* Update call for machines. Use instead of updateEntity() - it's called every tick.
|
||||
|
@ -37,16 +37,6 @@ public interface IElectricMachine extends IInventory, ISidedInventory, IWrenchab
|
|||
*/
|
||||
public void operate();
|
||||
|
||||
/**
|
||||
* Sends a tile entity packet to the server.
|
||||
*/
|
||||
public void sendPacket();
|
||||
|
||||
/**
|
||||
* Sends a tile entity packet to the server with a defined range.
|
||||
*/
|
||||
public void sendPacketWithRange();
|
||||
|
||||
/**
|
||||
* Gets the recipe vector from the machine tile entity.
|
||||
* @return recipes
|
||||
|
|
|
@ -50,4 +50,10 @@ public interface IEnergizedItem
|
|||
* @return leftover energy
|
||||
*/
|
||||
public int discharge(ItemStack itemstack, int amount);
|
||||
|
||||
/**
|
||||
* Gets the divider that gets that returns the max damage as 100.
|
||||
* @return divider
|
||||
*/
|
||||
public int getDivider();
|
||||
}
|
||||
|
|
|
@ -21,4 +21,14 @@ public interface ITileNetwork
|
|||
* @param dataStream
|
||||
*/
|
||||
public void handlePacketData(INetworkManager network, Packet250CustomPayload packet, EntityPlayer player, ByteArrayDataInput dataStream);
|
||||
|
||||
/**
|
||||
* Sends a tile entity packet to the server.
|
||||
*/
|
||||
public void sendPacket();
|
||||
|
||||
/**
|
||||
* Sends a tile entity packet to the server with a defined range.
|
||||
*/
|
||||
public void sendPacketWithRange();
|
||||
}
|
||||
|
|
|
@ -31,6 +31,7 @@ import net.uberkat.obsidian.common.ObsidianUtils;
|
|||
import net.uberkat.obsidian.common.TileEntityCombiner;
|
||||
import net.uberkat.obsidian.common.TileEntityCrusher;
|
||||
import net.uberkat.obsidian.common.TileEntityEnrichmentChamber;
|
||||
import net.uberkat.obsidian.common.TileEntityGenerator;
|
||||
import net.uberkat.obsidian.common.TileEntityPlatinumCompressor;
|
||||
import net.uberkat.obsidian.common.TileEntityPowerUnit;
|
||||
import net.uberkat.obsidian.common.TileEntityTheoreticalElementizer;
|
||||
|
@ -59,7 +60,6 @@ public class ClientProxy extends CommonProxy
|
|||
MinecraftForgeClient.preloadTexture("/textures/ElementizerFront.png");
|
||||
MinecraftForgeClient.preloadTexture("/textures/ElementizerBack.png");
|
||||
MinecraftForgeClient.preloadTexture("/textures/ElementizerSide.png");
|
||||
MinecraftForgeClient.preloadTexture("/texture/PlatinumCable.png");
|
||||
|
||||
//Register animated TextureFX for machines
|
||||
try {
|
||||
|
@ -119,6 +119,9 @@ public class ClientProxy extends CommonProxy
|
|||
case 8:
|
||||
TileEntityPowerUnit tileentity5 = (TileEntityPowerUnit)world.getBlockTileEntity(x, y, z);
|
||||
return new GuiPowerUnit(player.inventory, tileentity5);
|
||||
case 9:
|
||||
TileEntityGenerator tileentity6 = (TileEntityGenerator)world.getBlockTileEntity(x, y, z);
|
||||
return new GuiGenerator(player.inventory, tileentity6);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -18,7 +18,7 @@ public class GuiAdvancedElectricMachine extends GuiContainer
|
|||
/**
|
||||
* Draw the foreground layer for the GuiContainer (everythin in front of the items)
|
||||
*/
|
||||
protected void drawGuiContainerForegroundLayer()
|
||||
protected void drawGuiContainerForegroundLayer(int par1, int par2)
|
||||
{
|
||||
fontRenderer.drawString(tileEntity.fullName, 45, 6, 0x404040);
|
||||
fontRenderer.drawString("Inventory", 8, (ySize - 96) + 2, 0x404040);
|
||||
|
|
|
@ -18,7 +18,7 @@ public class GuiElectricMachine extends GuiContainer
|
|||
/**
|
||||
* Draw the foreground layer for the GuiContainer (everythin in front of the items)
|
||||
*/
|
||||
protected void drawGuiContainerForegroundLayer()
|
||||
protected void drawGuiContainerForegroundLayer(int par1, int par2)
|
||||
{
|
||||
fontRenderer.drawString(tileEntity.fullName, 45, 6, 0x404040);
|
||||
fontRenderer.drawString("Inventory", 8, (ySize - 96) + 2, 0x404040);
|
||||
|
|
47
src/minecraft/net/uberkat/obsidian/client/GuiGenerator.java
Normal file
47
src/minecraft/net/uberkat/obsidian/client/GuiGenerator.java
Normal file
|
@ -0,0 +1,47 @@
|
|||
package net.uberkat.obsidian.client;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import net.minecraft.src.*;
|
||||
import net.uberkat.obsidian.common.ContainerGenerator;
|
||||
import net.uberkat.obsidian.common.TileEntityGenerator;
|
||||
|
||||
public class GuiGenerator extends GuiContainer
|
||||
{
|
||||
public TileEntityGenerator tileEntity;
|
||||
|
||||
public GuiGenerator(InventoryPlayer inventory, TileEntityGenerator tentity)
|
||||
{
|
||||
super(new ContainerGenerator(inventory, tentity));
|
||||
tileEntity = tentity;
|
||||
}
|
||||
|
||||
/**
|
||||
* Draw the foreground layer for the GuiContainer (everythin in front of the items)
|
||||
*/
|
||||
protected void drawGuiContainerForegroundLayer(int par1, int par2)
|
||||
{
|
||||
fontRenderer.drawString(tileEntity.fullName, 45, 6, 0x404040);
|
||||
fontRenderer.drawString("Inventory", 8, (ySize - 96) + 2, 0x404040);
|
||||
}
|
||||
|
||||
/**
|
||||
* Draw the background layer for the GuiContainer (everything behind the items)
|
||||
*/
|
||||
protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3)
|
||||
{
|
||||
int texture = mc.renderEngine.getTexture("/gui/GuiGenerator.png");
|
||||
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
|
||||
mc.renderEngine.bindTexture(texture);
|
||||
int guiWidth = (width - xSize) / 2;
|
||||
int guiHeight = (height - ySize) / 2;
|
||||
drawTexturedModalRect(guiWidth, guiHeight, 0, 0, xSize, ySize);
|
||||
int displayInt;
|
||||
|
||||
displayInt = tileEntity.getScaledFuelLevel(52);
|
||||
drawTexturedModalRect(guiWidth + 7, guiHeight + 17 + 52 - displayInt, 176, 52 + 52 - displayInt, 4, displayInt);
|
||||
|
||||
displayInt = tileEntity.getScaledEnergyLevel(52);
|
||||
drawTexturedModalRect(guiWidth + 165, guiHeight + 17 + 52 - displayInt, 176, 52 - displayInt, 4, displayInt);
|
||||
}
|
||||
}
|
|
@ -20,9 +20,9 @@ public class GuiPowerUnit extends GuiContainer
|
|||
tileEntity = tentity;
|
||||
}
|
||||
|
||||
protected void drawGuiContainerForegroundLayer()
|
||||
protected void drawGuiContainerForegroundLayer(int par1, int par2)
|
||||
{
|
||||
String capacityInfo = "Stored: " + ObsidianUtils.getDisplayedEnergyNoColor(tileEntity.energyStored) + "/" + ObsidianUtils.getDisplayedEnergyNoColor(tileEntity.maxEnergy);
|
||||
String capacityInfo = "Stored: " + ObsidianUtils.getDisplayedEnergyNoColor(tileEntity.energyStored) + "/" + ObsidianUtils.getDisplayedEnergyNoColor(tileEntity.MAX_ENERGY);
|
||||
String outputInfo = "Output: " + ObsidianUtils.getDisplayedEnergyNoColor(tileEntity.output) + "/t";
|
||||
fontRenderer.drawString(tileEntity.getInvName(), 43, 6, 0x404040);
|
||||
fontRenderer.drawString(capacityInfo, 45, 42, 0x404040);
|
||||
|
@ -39,7 +39,7 @@ public class GuiPowerUnit extends GuiContainer
|
|||
guiWidth = (width - xSize) / 2;
|
||||
guiHeight = (height - ySize) / 2;
|
||||
drawTexturedModalRect(guiWidth, guiHeight, 0, 0, xSize, ySize);
|
||||
int scale = (int)(((double)tileEntity.energyStored / tileEntity.maxEnergy) * 72);
|
||||
int scale = (int)(((double)tileEntity.energyStored / tileEntity.MAX_ENERGY) * 72);
|
||||
drawTexturedModalRect(guiWidth + 65, guiHeight + 17, 176, 0, scale, 20);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,9 +14,9 @@ public class GuiTheoreticalElementizer extends GuiAdvancedElectricMachine
|
|||
super(inventory, tentity);
|
||||
}
|
||||
|
||||
protected void drawGuiContainerForegroundLayer()
|
||||
protected void drawGuiContainerForegroundLayer(int par1, int par2)
|
||||
{
|
||||
super.drawGuiContainerForegroundLayer();
|
||||
super.drawGuiContainerForegroundLayer(par1, par2);
|
||||
String displayText = "";
|
||||
if(tileEntity.isActive)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue