From d4222693c035015b2256d7802294b75cfd6b6aac Mon Sep 17 00:00:00 2001 From: modmuss50 Date: Sun, 8 Nov 2015 13:59:36 +0000 Subject: [PATCH] Cleaned up Item Power System --- src/main/java/techreborn/Core.java | 2 +- .../api/power/IEnergyInterfaceItem.java | 23 +- .../techreborn/api/power/IEnergyItemInfo.java | 28 +++ .../client/gui/GuiBlastFurnace.java | 1 + src/main/java/techreborn/init/ModItems.java | 17 +- .../techreborn/items/ItemLapotronicOrb.java | 4 +- .../items/armor/ItemLapotronPack.java | 38 +++- .../items/armor/ItemLithiumBatpack.java | 38 +++- .../items/tools/ItemAdvancedDrill.java | 34 ++- .../items/tools/ItemCloakingDevice.java | 31 ++- .../techreborn/items/tools/ItemOmniTool.java | 48 ++++- .../items/tools/ItemRockCutter.java | 40 +++- .../techreborn/powerSystem/PoweredArmor.java | 199 ----------------- .../techreborn/powerSystem/PoweredItem.java | 201 +++--------------- .../powerSystem/PoweredPickaxe.java | 200 ----------------- .../powerSystem/traits/BasePowerTrait.java | 88 ++++++++ .../powerSystem/traits/EUItemPowerTrait.java | 41 ++++ .../powerSystem/traits/RFItemPowerTrait.java | 51 ++++- 18 files changed, 448 insertions(+), 636 deletions(-) create mode 100644 src/main/java/techreborn/api/power/IEnergyItemInfo.java delete mode 100644 src/main/java/techreborn/powerSystem/PoweredArmor.java delete mode 100644 src/main/java/techreborn/powerSystem/PoweredPickaxe.java create mode 100644 src/main/java/techreborn/powerSystem/traits/BasePowerTrait.java create mode 100644 src/main/java/techreborn/powerSystem/traits/EUItemPowerTrait.java diff --git a/src/main/java/techreborn/Core.java b/src/main/java/techreborn/Core.java index 241e57f6d..ee732ff73 100644 --- a/src/main/java/techreborn/Core.java +++ b/src/main/java/techreborn/Core.java @@ -74,7 +74,7 @@ public class Core { } @Mod.EventHandler - public void init(FMLInitializationEvent event) { + public void init(FMLInitializationEvent event) throws IllegalAccessException, InstantiationException { // Register ModBlocks ModBlocks.init(); // Register Fluids diff --git a/src/main/java/techreborn/api/power/IEnergyInterfaceItem.java b/src/main/java/techreborn/api/power/IEnergyInterfaceItem.java index 416c87ef0..41489c784 100644 --- a/src/main/java/techreborn/api/power/IEnergyInterfaceItem.java +++ b/src/main/java/techreborn/api/power/IEnergyInterfaceItem.java @@ -2,7 +2,7 @@ package techreborn.api.power; import net.minecraft.item.ItemStack; -public interface IEnergyInterfaceItem { +public interface IEnergyInterfaceItem extends IEnergyItemInfo{ /** * @return Amount of energy in the tile */ @@ -15,12 +15,6 @@ public interface IEnergyInterfaceItem { */ public void setEnergy(double energy, ItemStack stack); - /** - * Gets the max stored energy in the tile - * - * @return The max energy - */ - public double getMaxPower(ItemStack stack); /** * @param energy amount of energy to add to the tile @@ -69,20 +63,5 @@ public interface IEnergyInterfaceItem { */ public double useEnergy(double energy, boolean simulate, ItemStack stack); - /** - * @return if it can accept energy - */ - public boolean canAcceptEnergy(ItemStack stack); - - /** - * @return if it can provide energy - */ - public boolean canProvideEnergy(ItemStack stack); - - - public double getMaxTransfer(ItemStack stack); - - public int getStackTeir(ItemStack stack); - } diff --git a/src/main/java/techreborn/api/power/IEnergyItemInfo.java b/src/main/java/techreborn/api/power/IEnergyItemInfo.java new file mode 100644 index 000000000..ad3f45e57 --- /dev/null +++ b/src/main/java/techreborn/api/power/IEnergyItemInfo.java @@ -0,0 +1,28 @@ +package techreborn.api.power; + + +import net.minecraft.item.ItemStack; + +public interface IEnergyItemInfo { + + /** + * Gets the max stored energy in the tile + * + * @return The max energy + */ + double getMaxPower(ItemStack stack); + + /** + * @return if it can accept energy + */ + boolean canAcceptEnergy(ItemStack stack); + + /** + * @return if it can provide energy + */ + boolean canProvideEnergy(ItemStack stack); + + double getMaxTransfer(ItemStack stack); + + int getStackTeir(ItemStack stack); +} diff --git a/src/main/java/techreborn/client/gui/GuiBlastFurnace.java b/src/main/java/techreborn/client/gui/GuiBlastFurnace.java index e1350042b..c39edb7a7 100644 --- a/src/main/java/techreborn/client/gui/GuiBlastFurnace.java +++ b/src/main/java/techreborn/client/gui/GuiBlastFurnace.java @@ -11,6 +11,7 @@ import net.minecraftforge.common.util.ForgeDirection; import reborncore.client.gui.GuiUtil; import reborncore.client.multiblock.Multiblock; import reborncore.client.multiblock.MultiblockSet; +import reborncore.common.misc.Location; import techreborn.client.container.ContainerBlastFurnace; import techreborn.init.ModBlocks; import techreborn.lib.ModInfo; diff --git a/src/main/java/techreborn/init/ModItems.java b/src/main/java/techreborn/init/ModItems.java index 87634e9c9..2bb31d98e 100644 --- a/src/main/java/techreborn/init/ModItems.java +++ b/src/main/java/techreborn/init/ModItems.java @@ -17,6 +17,7 @@ import techreborn.items.*; import techreborn.items.armor.ItemLapotronPack; import techreborn.items.armor.ItemLithiumBatpack; import techreborn.items.tools.*; +import techreborn.powerSystem.PoweredItem; public class ModItems { @@ -76,7 +77,7 @@ public class ModItems { public static Item upgrades; - public static void init() { + public static void init() throws InstantiationException, IllegalAccessException { gems = new ItemGems(); GameRegistry.registerItem(gems, "gem"); ingots = new ItemIngots(); @@ -97,17 +98,17 @@ public class ModItems { GameRegistry.registerItem(parts, "part"); cells = new ItemCells(); GameRegistry.registerItem(cells, "cell"); - rockCutter = new ItemRockCutter(ToolMaterial.EMERALD); + rockCutter = PoweredItem.createItem(ItemRockCutter.class); GameRegistry.registerItem(rockCutter, "rockCutter"); - lithiumBatpack = new ItemLithiumBatpack(ArmorMaterial.DIAMOND, 7, 1); + lithiumBatpack = PoweredItem.createItem(ItemLithiumBatpack.class); GameRegistry.registerItem(lithiumBatpack, "lithiumBatpack"); - lapotronpack = new ItemLapotronPack(ArmorMaterial.DIAMOND, 7, 1); + lapotronpack = PoweredItem.createItem(ItemLapotronPack.class); GameRegistry.registerItem(lapotronpack, "lapotronPack"); - lapotronicOrb = new ItemLapotronicOrb(); + lapotronicOrb = PoweredItem.createItem(ItemLapotronicOrb.class); GameRegistry.registerItem(lapotronicOrb, "lapotronicOrb"); - omniTool = new ItemOmniTool(ToolMaterial.EMERALD); + omniTool = PoweredItem.createItem(ItemOmniTool.class); GameRegistry.registerItem(omniTool, "omniTool"); - advancedDrill = new ItemAdvancedDrill(); + advancedDrill = PoweredItem.createItem(ItemAdvancedDrill.class); GameRegistry.registerItem(advancedDrill, "advancedDrill"); manuel = new ItemTechPda(); GameRegistry.registerItem(manuel, "techmanuel"); @@ -117,7 +118,7 @@ public class ModItems { upgrades = new ItemUpgrade(); GameRegistry.registerItem(upgrades, "upgrades"); - cloakingDevice = new ItemCloakingDevice(); + cloakingDevice = PoweredItem.createItem(ItemCloakingDevice.class); GameRegistry.registerItem(cloakingDevice, "cloakingdevice"); // buckets diff --git a/src/main/java/techreborn/items/ItemLapotronicOrb.java b/src/main/java/techreborn/items/ItemLapotronicOrb.java index b2fe7a94e..b17d1868f 100644 --- a/src/main/java/techreborn/items/ItemLapotronicOrb.java +++ b/src/main/java/techreborn/items/ItemLapotronicOrb.java @@ -3,13 +3,15 @@ package techreborn.items; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import techreborn.api.power.IEnergyItemInfo; import techreborn.client.TechRebornCreativeTab; import techreborn.config.ConfigTechReborn; import techreborn.powerSystem.PoweredItem; -public class ItemLapotronicOrb extends PoweredItem { +public class ItemLapotronicOrb extends Item implements IEnergyItemInfo{ public static final int maxCharge = ConfigTechReborn.LapotronicOrbMaxCharge; public static final int tier = ConfigTechReborn.LithiumBatpackTier; diff --git a/src/main/java/techreborn/items/armor/ItemLapotronPack.java b/src/main/java/techreborn/items/armor/ItemLapotronPack.java index 28575f04c..ae961cd16 100644 --- a/src/main/java/techreborn/items/armor/ItemLapotronPack.java +++ b/src/main/java/techreborn/items/armor/ItemLapotronPack.java @@ -3,20 +3,26 @@ package techreborn.items.armor; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; +import techreborn.api.power.IEnergyItemInfo; import techreborn.client.TechRebornCreativeTab; import techreborn.config.ConfigTechReborn; -import techreborn.powerSystem.PoweredArmor; +import techreborn.powerSystem.PoweredItem; -public class ItemLapotronPack extends PoweredArmor { +import java.util.List; + +public class ItemLapotronPack extends ItemArmor implements IEnergyItemInfo { public static final int maxCharge = ConfigTechReborn.LapotronPackCharge; public static final int tier = ConfigTechReborn.LapotronPackTier; public double transferLimit = 100000; - public ItemLapotronPack(ArmorMaterial armormaterial, int par2, int par3) { - super(armormaterial, par2, par3); + public ItemLapotronPack() { + super(ItemArmor.ArmorMaterial.DIAMOND, 7, 1); setCreativeTab(TechRebornCreativeTab.instance); setUnlocalizedName("techreborn.lapotronpack"); setMaxStackSize(1); @@ -59,5 +65,29 @@ public class ItemLapotronPack extends PoweredArmor { return tier; } + @SuppressWarnings( + {"rawtypes", "unchecked"}) + @SideOnly(Side.CLIENT) + public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List itemList) { + ItemStack itemStack = new ItemStack(this, 1); + itemList.add(itemStack); + + ItemStack charged = new ItemStack(this, 1); + PoweredItem.setEnergy(getMaxPower(charged), charged); + itemList.add(charged); + } + + @Override + public double getDurabilityForDisplay(ItemStack stack) { + double charge = (PoweredItem.getEnergy(stack) / getMaxPower(stack)); + return 1 - charge; + + } + + @Override + public boolean showDurabilityBar(ItemStack stack) { + return true; + } + } diff --git a/src/main/java/techreborn/items/armor/ItemLithiumBatpack.java b/src/main/java/techreborn/items/armor/ItemLithiumBatpack.java index 7a97c0455..ab1dec89a 100644 --- a/src/main/java/techreborn/items/armor/ItemLithiumBatpack.java +++ b/src/main/java/techreborn/items/armor/ItemLithiumBatpack.java @@ -3,20 +3,26 @@ package techreborn.items.armor; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; +import techreborn.api.power.IEnergyItemInfo; import techreborn.client.TechRebornCreativeTab; import techreborn.config.ConfigTechReborn; -import techreborn.powerSystem.PoweredArmor; +import techreborn.powerSystem.PoweredItem; -public class ItemLithiumBatpack extends PoweredArmor { +import java.util.List; + +public class ItemLithiumBatpack extends ItemArmor implements IEnergyItemInfo { public static final int maxCharge = ConfigTechReborn.LithiumBatpackCharge; public static final int tier = ConfigTechReborn.LithiumBatpackTier; public double transferLimit = 10000; - public ItemLithiumBatpack(ArmorMaterial armorMaterial, int par3, int par4) { - super(armorMaterial, par3, par4); + public ItemLithiumBatpack() { + super(ItemArmor.ArmorMaterial.DIAMOND, 7, 1); setMaxStackSize(1); setUnlocalizedName("techreborn.lithiumbatpack"); setCreativeTab(TechRebornCreativeTab.instance); @@ -58,4 +64,28 @@ public class ItemLithiumBatpack extends PoweredArmor { public int getStackTeir(ItemStack stack) { return tier; } + + @SuppressWarnings( + {"rawtypes", "unchecked"}) + @SideOnly(Side.CLIENT) + public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List itemList) { + ItemStack itemStack = new ItemStack(this, 1); + itemList.add(itemStack); + + ItemStack charged = new ItemStack(this, 1); + PoweredItem.setEnergy(getMaxPower(charged), charged); + itemList.add(charged); + } + + @Override + public double getDurabilityForDisplay(ItemStack stack) { + double charge = (PoweredItem.getEnergy(stack) / getMaxPower(stack)); + return 1 - charge; + + } + + @Override + public boolean showDurabilityBar(ItemStack stack) { + return true; + } } diff --git a/src/main/java/techreborn/items/tools/ItemAdvancedDrill.java b/src/main/java/techreborn/items/tools/ItemAdvancedDrill.java index 6ff9d6ced..ce0efd5dc 100644 --- a/src/main/java/techreborn/items/tools/ItemAdvancedDrill.java +++ b/src/main/java/techreborn/items/tools/ItemAdvancedDrill.java @@ -5,17 +5,23 @@ import cpw.mods.fml.relauncher.SideOnly; import ic2.api.item.ElectricItem; import net.minecraft.block.Block; import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemPickaxe; import net.minecraft.item.ItemStack; import net.minecraft.world.World; import reborncore.common.util.TorchHelper; +import techreborn.api.power.IEnergyItemInfo; import techreborn.client.TechRebornCreativeTab; import techreborn.config.ConfigTechReborn; -import techreborn.powerSystem.PoweredPickaxe; +import techreborn.powerSystem.PoweredItem; -public class ItemAdvancedDrill extends PoweredPickaxe { +import java.util.List; + +public class ItemAdvancedDrill extends ItemPickaxe implements IEnergyItemInfo { public static final int maxCharge = ConfigTechReborn.AdvancedDrillCharge; public int cost = 250; @@ -104,4 +110,28 @@ public class ItemAdvancedDrill extends PoweredPickaxe { public int getStackTeir(ItemStack stack) { return tier; } + + @SuppressWarnings( + {"rawtypes", "unchecked"}) + @SideOnly(Side.CLIENT) + public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List itemList) { + ItemStack itemStack = new ItemStack(this, 1); + itemList.add(itemStack); + + ItemStack charged = new ItemStack(this, 1); + PoweredItem.setEnergy(getMaxPower(charged), charged); + itemList.add(charged); + } + + @Override + public double getDurabilityForDisplay(ItemStack stack) { + double charge = (PoweredItem.getEnergy(stack) / getMaxPower(stack)); + return 1 - charge; + + } + + @Override + public boolean showDurabilityBar(ItemStack stack) { + return true; + } } diff --git a/src/main/java/techreborn/items/tools/ItemCloakingDevice.java b/src/main/java/techreborn/items/tools/ItemCloakingDevice.java index 17a52a945..4ca1f01d6 100644 --- a/src/main/java/techreborn/items/tools/ItemCloakingDevice.java +++ b/src/main/java/techreborn/items/tools/ItemCloakingDevice.java @@ -3,16 +3,21 @@ package techreborn.items.tools; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.potion.Potion; import net.minecraft.world.World; +import techreborn.api.power.IEnergyItemInfo; import techreborn.client.TechRebornCreativeTab; import techreborn.config.ConfigTechReborn; import techreborn.powerSystem.PoweredItem; -public class ItemCloakingDevice extends PoweredItem { +import java.util.List; + +public class ItemCloakingDevice extends Item implements IEnergyItemInfo { public static int Teir = ConfigTechReborn.CloakingDeviceTier; public static int MaxCharge = ConfigTechReborn.CloakingDeviceCharge; public static int Limit = 100; @@ -27,8 +32,8 @@ public class ItemCloakingDevice extends PoweredItem { @Override public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) { - if (canUseEnergy(ConfigTechReborn.CloakingDeviceEUTick, itemStack)) { - useEnergy(ConfigTechReborn.CloakingDeviceEUTick, itemStack); + if (PoweredItem.canUseEnergy(ConfigTechReborn.CloakingDeviceEUTick, itemStack)) { + PoweredItem.useEnergy(ConfigTechReborn.CloakingDeviceEUTick, itemStack); player.setInvisible(true); } else { if (!player.isPotionActive(Potion.invisibility)) { @@ -91,5 +96,25 @@ public class ItemCloakingDevice extends PoweredItem { + "techreborn.cloakingdevice"); } + @SideOnly(Side.CLIENT) + public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List itemList) { + ItemStack itemStack = new ItemStack(this, 1); + itemList.add(itemStack); + + ItemStack charged = new ItemStack(this, 1); + PoweredItem.setEnergy(getMaxPower(charged), charged); + itemList.add(charged); + } + + + public double getDurabilityForDisplay(ItemStack stack) { + double charge = (PoweredItem.getEnergy(stack) / getMaxPower(stack)); + return 1 - charge; + + } + + public boolean showDurabilityBar(ItemStack stack) { + return true; + } } diff --git a/src/main/java/techreborn/items/tools/ItemOmniTool.java b/src/main/java/techreborn/items/tools/ItemOmniTool.java index 8e4d13b5e..aefb1c0c6 100644 --- a/src/main/java/techreborn/items/tools/ItemOmniTool.java +++ b/src/main/java/techreborn/items/tools/ItemOmniTool.java @@ -4,26 +4,32 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemPickaxe; import net.minecraft.item.ItemStack; import net.minecraft.util.DamageSource; import net.minecraft.world.World; import reborncore.common.util.TorchHelper; +import techreborn.api.power.IEnergyItemInfo; import techreborn.client.TechRebornCreativeTab; import techreborn.config.ConfigTechReborn; -import techreborn.powerSystem.PoweredPickaxe; +import techreborn.powerSystem.PoweredItem; -public class ItemOmniTool extends PoweredPickaxe { +import java.util.List; + +public class ItemOmniTool extends ItemPickaxe implements IEnergyItemInfo { public static final int maxCharge = ConfigTechReborn.OmniToolCharge; public static final int tier = ConfigTechReborn.OmniToolTier; public int cost = 100; public int hitCost = 125; - public ItemOmniTool(ToolMaterial toolMaterial) { - super(toolMaterial); + public ItemOmniTool() { + super(ToolMaterial.EMERALD); efficiencyOnProperMaterial = 13F; setCreativeTab(TechRebornCreativeTab.instance); setMaxStackSize(1); @@ -40,7 +46,7 @@ public class ItemOmniTool extends PoweredPickaxe { @Override public boolean onBlockDestroyed(ItemStack stack, World world, Block block, int par4, int par5, int par6, EntityLivingBase entityLiving) { - useEnergy(cost, stack); + PoweredItem.useEnergy(cost, stack); return true; } @@ -56,8 +62,8 @@ public class ItemOmniTool extends PoweredPickaxe { @Override public float getDigSpeed(ItemStack stack, Block block, int meta) { - if (canUseEnergy(cost, stack)) { - useEnergy(cost, stack); + if (PoweredItem.canUseEnergy(cost, stack)) { + PoweredItem.useEnergy(cost, stack); return 5.0F; } @@ -74,8 +80,8 @@ public class ItemOmniTool extends PoweredPickaxe { @Override public boolean hitEntity(ItemStack itemstack, EntityLivingBase entityliving, EntityLivingBase attacker) { - if (canUseEnergy(hitCost, itemstack)) { - useEnergy(hitCost, itemstack); + if (PoweredItem.canUseEnergy(hitCost, itemstack)) { + PoweredItem.useEnergy(hitCost, itemstack); entityliving.attackEntityFrom(DamageSource.causePlayerDamage((EntityPlayer) attacker), 8F); } return false; @@ -118,4 +124,28 @@ public class ItemOmniTool extends PoweredPickaxe { return 2; } + @SuppressWarnings( + {"rawtypes", "unchecked"}) + @SideOnly(Side.CLIENT) + public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List itemList) { + ItemStack itemStack = new ItemStack(this, 1); + itemList.add(itemStack); + + ItemStack charged = new ItemStack(this, 1); + PoweredItem.setEnergy(getMaxPower(charged), charged); + itemList.add(charged); + } + + @Override + public double getDurabilityForDisplay(ItemStack stack) { + double charge = (PoweredItem.getEnergy(stack) / getMaxPower(stack)); + return 1 - charge; + + } + + @Override + public boolean showDurabilityBar(ItemStack stack) { + return true; + } + } diff --git a/src/main/java/techreborn/items/tools/ItemRockCutter.java b/src/main/java/techreborn/items/tools/ItemRockCutter.java index 03a5b2af3..07a29fabb 100644 --- a/src/main/java/techreborn/items/tools/ItemRockCutter.java +++ b/src/main/java/techreborn/items/tools/ItemRockCutter.java @@ -4,26 +4,30 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; import net.minecraft.enchantment.Enchantment; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemPickaxe; import net.minecraft.item.ItemStack; import net.minecraft.world.World; import reborncore.common.util.Color; +import techreborn.api.power.IEnergyItemInfo; import techreborn.client.TechRebornCreativeTab; import techreborn.config.ConfigTechReborn; -import techreborn.powerSystem.PoweredPickaxe; +import techreborn.powerSystem.PoweredItem; import java.util.List; -public class ItemRockCutter extends PoweredPickaxe { +public class ItemRockCutter extends ItemPickaxe implements IEnergyItemInfo { public static final int maxCharge = ConfigTechReborn.RockCutterCharge; public int cost = 500; public static final int tier = ConfigTechReborn.RockCutterTier; - public ItemRockCutter(ToolMaterial toolMaterial) { - super(toolMaterial); + public ItemRockCutter() { + super(Item.ToolMaterial.EMERALD); setUnlocalizedName("techreborn.rockcutter"); setCreativeTab(TechRebornCreativeTab.instance); setMaxStackSize(1); @@ -52,8 +56,8 @@ public class ItemRockCutter extends PoweredPickaxe { @Override public boolean canHarvestBlock(Block block, ItemStack stack) { if (Items.diamond_pickaxe.canHarvestBlock(block, stack)) { - if (canUseEnergy(cost, stack)) { - useEnergy(cost, stack); + if (PoweredItem.canUseEnergy(cost, stack)) { + PoweredItem.useEnergy(cost, stack); return true; } } @@ -110,4 +114,28 @@ public class ItemRockCutter extends PoweredPickaxe { public int getStackTeir(ItemStack stack) { return 2; } + + @SuppressWarnings( + {"rawtypes", "unchecked"}) + @SideOnly(Side.CLIENT) + public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List itemList) { + ItemStack itemStack = new ItemStack(this, 1); + itemList.add(itemStack); + + ItemStack charged = new ItemStack(this, 1); + PoweredItem.setEnergy(getMaxPower(charged), charged); + itemList.add(charged); + } + + @Override + public double getDurabilityForDisplay(ItemStack stack) { + double charge = (PoweredItem.getEnergy(stack) / getMaxPower(stack)); + return 1 - charge; + + } + + @Override + public boolean showDurabilityBar(ItemStack stack) { + return true; + } } diff --git a/src/main/java/techreborn/powerSystem/PoweredArmor.java b/src/main/java/techreborn/powerSystem/PoweredArmor.java deleted file mode 100644 index c8fe4fe19..000000000 --- a/src/main/java/techreborn/powerSystem/PoweredArmor.java +++ /dev/null @@ -1,199 +0,0 @@ -package techreborn.powerSystem; - -import cofh.api.energy.IEnergyContainerItem; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import ic2.api.item.IElectricItem; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemArmor; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import techreborn.api.power.IEnergyInterfaceItem; -import techreborn.config.ConfigTechReborn; - -import java.util.List; - -public abstract class PoweredArmor extends ItemArmor implements IEnergyInterfaceItem, IElectricItem, IEnergyContainerItem { - - public PoweredArmor(ArmorMaterial material, int renderIndex, int armorType) { - super(material, renderIndex, armorType); - } - - @SuppressWarnings( - {"rawtypes", "unchecked"}) - @SideOnly(Side.CLIENT) - public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List itemList) { - ItemStack itemStack = new ItemStack(this, 1); - itemList.add(itemStack); - - ItemStack charged = new ItemStack(this, 1); - setEnergy(getMaxPower(charged), charged); - itemList.add(charged); - } - - @Override - public double getDurabilityForDisplay(ItemStack stack) { - double charge = (getEnergy(stack) / getMaxPower(stack)); - return 1 - charge; - - } - - @Override - public boolean showDurabilityBar(ItemStack stack) { - return true; - } - - - //TechReborn - @Override - public double getEnergy(ItemStack stack) { - NBTTagCompound tagCompound = getOrCreateNbtData(stack); - if (tagCompound.hasKey("charge")) { - return tagCompound.getDouble("charge"); - } - return 0; - } - - @Override - public void setEnergy(double energy, ItemStack stack) { - NBTTagCompound tagCompound = getOrCreateNbtData(stack); - tagCompound.setDouble("charge", energy); - - if (this.getEnergy(stack) > getMaxPower(stack)) { - this.setEnergy(getMaxPower(stack), stack); - } else if (this.getEnergy(stack) < 0) { - this.setEnergy(0, stack); - } - } - - @Override - public double addEnergy(double energy, ItemStack stack) { - return addEnergy(energy, false, stack); - } - - @Override - public double addEnergy(double energy, boolean simulate, ItemStack stack) { - double energyReceived = Math.min(getMaxPower(stack) - energy, Math.min(this.getMaxPower(stack), energy)); - - if (!simulate) { - setEnergy(energy + energyReceived, stack); - } - return energyReceived; - } - - @Override - public boolean canUseEnergy(double input, ItemStack stack) { - return input <= getEnergy(stack); - } - - @Override - public double useEnergy(double energy, ItemStack stack) { - return useEnergy(energy, false, stack); - } - - @Override - public double useEnergy(double extract, boolean simulate, ItemStack stack) { - double energyExtracted = Math.min(extract, Math.min(this.getMaxTransfer(stack), extract)); - - if (!simulate) { - setEnergy(getEnergy(stack) - energyExtracted, stack); - } - return energyExtracted; - } - - @Override - public boolean canAddEnergy(double energy, ItemStack stack) { - return this.getEnergy(stack) + energy <= getMaxPower(stack); - } - - - public static NBTTagCompound getOrCreateNbtData(ItemStack itemStack) { - NBTTagCompound tagCompound = itemStack.getTagCompound(); - if (tagCompound == null) { - tagCompound = new NBTTagCompound(); - itemStack.setTagCompound(tagCompound); - } - - return tagCompound; - } - - - //End Techreborn - - - //IC2 - @Override - public Item getChargedItem(ItemStack itemStack) { - return this; - } - - @Override - public Item getEmptyItem(ItemStack itemStack) { - return this; - } - - @Override - public double getMaxCharge(ItemStack itemStack) { - return getMaxPower(itemStack); - } - - @Override - public int getTier(ItemStack itemStack) { - return getStackTeir(itemStack); - } - - @Override - public double getTransferLimit(ItemStack itemStack) { - return getMaxTransfer(itemStack); - } - //IC2 - - //COFH - @Override - public int receiveEnergy(ItemStack container, int maxReceive, boolean simulate) { - if (!PowerSystem.RFPOWENET) - return 0; - if (!canAcceptEnergy(container)) { - return 0; - } - maxReceive *= ConfigTechReborn.euPerRF; - int energyReceived = Math.min(getMaxEnergyStored(container) - getEnergyStored(container), Math.min((int) this.getMaxTransfer(container) * ConfigTechReborn.euPerRF, maxReceive)); - - if (!simulate) { - setEnergy(getEnergy(container) + energyReceived, container); - } - return energyReceived / ConfigTechReborn.euPerRF; - } - - @Override - public int extractEnergy(ItemStack container, int maxExtract, boolean simulate) { - if (!PowerSystem.RFPOWENET) - return 0; - if (!canAcceptEnergy(container)) { - return 0; - } - maxExtract *= ConfigTechReborn.euPerRF; - int energyExtracted = Math.min(getEnergyStored(container), Math.min(maxExtract, maxExtract)); - - if (!simulate) { - setEnergy(getEnergy(container) - energyExtracted, container); - } - return energyExtracted / ConfigTechReborn.euPerRF; - } - - @Override - public int getEnergyStored(ItemStack container) { - if (!PowerSystem.RFPOWENET) - return 0; - return ((int) getEnergy(container) / ConfigTechReborn.euPerRF); - } - - @Override - public int getMaxEnergyStored(ItemStack container) { - if (!PowerSystem.RFPOWENET) - return 0; - return ((int) getMaxPower(container) / ConfigTechReborn.euPerRF); - } - //Cofh -} diff --git a/src/main/java/techreborn/powerSystem/PoweredItem.java b/src/main/java/techreborn/powerSystem/PoweredItem.java index 53094ddf8..ffd0e2b77 100644 --- a/src/main/java/techreborn/powerSystem/PoweredItem.java +++ b/src/main/java/techreborn/powerSystem/PoweredItem.java @@ -1,198 +1,49 @@ package techreborn.powerSystem; -import cofh.api.energy.IEnergyContainerItem; -import cpw.mods.fml.common.Optional; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import ic2.api.item.IElectricItem; -import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; +import reborncore.jtraits.MixinFactory; import techreborn.api.power.IEnergyInterfaceItem; -import techreborn.config.ConfigTechReborn; +import techreborn.powerSystem.traits.BasePowerTrait; +import techreborn.powerSystem.traits.EUItemPowerTrait; +import techreborn.powerSystem.traits.RFItemPowerTrait; -import java.util.List; -@Optional.InterfaceList(value = { - @Optional.Interface(iface = "ic2.api.item.IElectricItem", modid = "IC2") -}) -public abstract class PoweredItem extends Item implements IEnergyInterfaceItem, IElectricItem, IEnergyContainerItem { +public abstract class PoweredItem { - @SuppressWarnings( - {"rawtypes", "unchecked"}) - @SideOnly(Side.CLIENT) - public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List itemList) { - ItemStack itemStack = new ItemStack(this, 1); - itemList.add(itemStack); - - ItemStack charged = new ItemStack(this, 1); - setEnergy(getMaxPower(charged), charged); - itemList.add(charged); + public static Item createItem(Class itemClass) throws IllegalAccessException, InstantiationException { + return (Item) MixinFactory.mixin(itemClass,BasePowerTrait.class, RFItemPowerTrait.class, EUItemPowerTrait.class).newInstance(); } - @Override - public double getDurabilityForDisplay(ItemStack stack) { - double charge = (getEnergy(stack) / getMaxPower(stack)); - return 1 - charge; - - } - - @Override - public boolean showDurabilityBar(ItemStack stack) { - return true; - } - - - //TechReborn - @Override - public double getEnergy(ItemStack stack) { - NBTTagCompound tagCompound = getOrCreateNbtData(stack); - if (tagCompound.hasKey("charge")) { - return tagCompound.getDouble("charge"); - } - return 0; - } - - @Override - public void setEnergy(double energy, ItemStack stack) { - NBTTagCompound tagCompound = getOrCreateNbtData(stack); - tagCompound.setDouble("charge", energy); - - if (this.getEnergy(stack) > getMaxPower(stack)) { - this.setEnergy(getMaxPower(stack), stack); - } else if (this.getEnergy(stack) < 0) { - this.setEnergy(0, stack); + public static boolean canUseEnergy(double energy, ItemStack stack){ + if(stack.getItem() instanceof IEnergyInterfaceItem){ + return ((IEnergyInterfaceItem) stack.getItem()).canUseEnergy(energy, stack); + } else { + return false; } } - @Override - public double addEnergy(double energy, ItemStack stack) { - return addEnergy(energy, false, stack); - } - - @Override - public double addEnergy(double energy, boolean simulate, ItemStack stack) { - double energyReceived = Math.min(getMaxPower(stack) - energy, Math.min(this.getMaxPower(stack), energy)); - - if (!simulate) { - setEnergy(energy + energyReceived, stack); - } - return energyReceived; - } - - @Override - public boolean canUseEnergy(double input, ItemStack stack) { - return input <= getEnergy(stack); - } - - @Override - public double useEnergy(double energy, ItemStack stack) { - return useEnergy(energy, false, stack); - } - - @Override - public double useEnergy(double extract, boolean simulate, ItemStack stack) { - double energyExtracted = Math.min(extract, Math.min(this.getMaxTransfer(stack), extract)); - - if (!simulate) { - setEnergy(getEnergy(stack) - energyExtracted, stack); - } - return energyExtracted; - } - - @Override - public boolean canAddEnergy(double energy, ItemStack stack) { - return this.getEnergy(stack) + energy <= getMaxPower(stack); - } - - - public static NBTTagCompound getOrCreateNbtData(ItemStack itemStack) { - NBTTagCompound tagCompound = itemStack.getTagCompound(); - if (tagCompound == null) { - tagCompound = new NBTTagCompound(); - itemStack.setTagCompound(tagCompound); - } - - return tagCompound; - } - - - //End Techreborn - - - //IC2 - @Override - public Item getChargedItem(ItemStack itemStack) { - return this; - } - - @Override - public Item getEmptyItem(ItemStack itemStack) { - return this; - } - - @Override - public double getMaxCharge(ItemStack itemStack) { - return getMaxPower(itemStack); - } - - @Override - public int getTier(ItemStack itemStack) { - return getStackTeir(itemStack); - } - - @Override - public double getTransferLimit(ItemStack itemStack) { - return getMaxTransfer(itemStack); - } - //IC2 - - //COFH - @Override - public int receiveEnergy(ItemStack container, int maxReceive, boolean simulate) { - if (!PowerSystem.RFPOWENET) - return 0; - if (!canAcceptEnergy(container)) { + public static double useEnergy(double energy, ItemStack stack){ + if(stack.getItem() instanceof IEnergyInterfaceItem){ + return ((IEnergyInterfaceItem) stack.getItem()).useEnergy(energy, stack); + } else { return 0; } - maxReceive *= ConfigTechReborn.euPerRF; - int energyReceived = Math.min(getMaxEnergyStored(container) - getEnergyStored(container), Math.min((int) this.getMaxTransfer(container) * ConfigTechReborn.euPerRF, maxReceive)); - - if (!simulate) { - setEnergy(getEnergy(container) + energyReceived, container); - } - return energyReceived / ConfigTechReborn.euPerRF; } - @Override - public int extractEnergy(ItemStack container, int maxExtract, boolean simulate) { - if (!PowerSystem.RFPOWENET) - return 0; - if (!canAcceptEnergy(container)) { + public static void setEnergy(double energy, ItemStack stack){ + if(stack.getItem() instanceof IEnergyInterfaceItem){ + ((IEnergyInterfaceItem) stack.getItem()).setEnergy(energy, stack); + } + } + + public static double getEnergy(ItemStack stack){ + if(stack.getItem() instanceof IEnergyInterfaceItem){ + return ((IEnergyInterfaceItem) stack.getItem()).getEnergy(stack); + } else { return 0; } - maxExtract *= ConfigTechReborn.euPerRF; - int energyExtracted = Math.min(getEnergyStored(container), Math.min(maxExtract, maxExtract)); - - if (!simulate) { - setEnergy(getEnergy(container) - energyExtracted, container); - } - return energyExtracted / ConfigTechReborn.euPerRF; } - @Override - public int getEnergyStored(ItemStack container) { - if (!PowerSystem.RFPOWENET) - return 0; - return ((int) getEnergy(container) / ConfigTechReborn.euPerRF); - } - @Override - public int getMaxEnergyStored(ItemStack container) { - if (!PowerSystem.RFPOWENET) - return 0; - return ((int) getMaxPower(container) / ConfigTechReborn.euPerRF); - } - //Cofh } diff --git a/src/main/java/techreborn/powerSystem/PoweredPickaxe.java b/src/main/java/techreborn/powerSystem/PoweredPickaxe.java deleted file mode 100644 index 09d1bb7c0..000000000 --- a/src/main/java/techreborn/powerSystem/PoweredPickaxe.java +++ /dev/null @@ -1,200 +0,0 @@ -package techreborn.powerSystem; - -import cofh.api.energy.IEnergyContainerItem; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import ic2.api.item.IElectricItem; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemPickaxe; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import techreborn.api.power.IEnergyInterfaceItem; -import techreborn.config.ConfigTechReborn; - -import java.util.List; - - -public abstract class PoweredPickaxe extends ItemPickaxe implements IEnergyInterfaceItem, IElectricItem, IEnergyContainerItem { - - protected PoweredPickaxe(ToolMaterial toolMaterial) { - super(toolMaterial); - } - - @SuppressWarnings( - {"rawtypes", "unchecked"}) - @SideOnly(Side.CLIENT) - public void getSubItems(Item item, CreativeTabs par2CreativeTabs, List itemList) { - ItemStack itemStack = new ItemStack(this, 1); - itemList.add(itemStack); - - ItemStack charged = new ItemStack(this, 1); - setEnergy(getMaxPower(charged), charged); - itemList.add(charged); - } - - @Override - public double getDurabilityForDisplay(ItemStack stack) { - double charge = (getEnergy(stack) / getMaxPower(stack)); - return 1 - charge; - - } - - @Override - public boolean showDurabilityBar(ItemStack stack) { - return true; - } - - - //TechReborn - @Override - public double getEnergy(ItemStack stack) { - NBTTagCompound tagCompound = getOrCreateNbtData(stack); - if (tagCompound.hasKey("charge")) { - return tagCompound.getDouble("charge"); - } - return 0; - } - - @Override - public void setEnergy(double energy, ItemStack stack) { - NBTTagCompound tagCompound = getOrCreateNbtData(stack); - tagCompound.setDouble("charge", energy); - - if (this.getEnergy(stack) > getMaxPower(stack)) { - this.setEnergy(getMaxPower(stack), stack); - } else if (this.getEnergy(stack) < 0) { - this.setEnergy(0, stack); - } - } - - @Override - public double addEnergy(double energy, ItemStack stack) { - return addEnergy(energy, false, stack); - } - - @Override - public double addEnergy(double energy, boolean simulate, ItemStack stack) { - double energyReceived = Math.min(getMaxPower(stack) - energy, Math.min(this.getMaxPower(stack), energy)); - - if (!simulate) { - setEnergy(energy + energyReceived, stack); - } - return energyReceived; - } - - @Override - public boolean canUseEnergy(double input, ItemStack stack) { - return input <= getEnergy(stack); - } - - @Override - public double useEnergy(double energy, ItemStack stack) { - return useEnergy(energy, false, stack); - } - - @Override - public double useEnergy(double extract, boolean simulate, ItemStack stack) { - double energyExtracted = Math.min(extract, Math.min(this.getMaxTransfer(stack), extract)); - - if (!simulate) { - setEnergy(getEnergy(stack) - energyExtracted, stack); - } - return energyExtracted; - } - - @Override - public boolean canAddEnergy(double energy, ItemStack stack) { - return this.getEnergy(stack) + energy <= getMaxPower(stack); - } - - - public static NBTTagCompound getOrCreateNbtData(ItemStack itemStack) { - NBTTagCompound tagCompound = itemStack.getTagCompound(); - if (tagCompound == null) { - tagCompound = new NBTTagCompound(); - itemStack.setTagCompound(tagCompound); - } - - return tagCompound; - } - - - //End Techreborn - - - //IC2 - @Override - public Item getChargedItem(ItemStack itemStack) { - return this; - } - - @Override - public Item getEmptyItem(ItemStack itemStack) { - return this; - } - - @Override - public double getMaxCharge(ItemStack itemStack) { - return getMaxPower(itemStack); - } - - @Override - public int getTier(ItemStack itemStack) { - return getStackTeir(itemStack); - } - - @Override - public double getTransferLimit(ItemStack itemStack) { - return getMaxTransfer(itemStack); - } - //IC2 - - //COFH - @Override - public int receiveEnergy(ItemStack container, int maxReceive, boolean simulate) { - if (!PowerSystem.RFPOWENET) - return 0; - if (!canAcceptEnergy(container)) { - return 0; - } - maxReceive *= ConfigTechReborn.euPerRF; - int energyReceived = Math.min(getMaxEnergyStored(container) - getEnergyStored(container), Math.min((int) this.getMaxTransfer(container) * ConfigTechReborn.euPerRF, maxReceive)); - - if (!simulate) { - setEnergy(getEnergy(container) + energyReceived, container); - } - return energyReceived / ConfigTechReborn.euPerRF; - } - - @Override - public int extractEnergy(ItemStack container, int maxExtract, boolean simulate) { - if (!PowerSystem.RFPOWENET) - return 0; - if (!canAcceptEnergy(container)) { - return 0; - } - maxExtract *= ConfigTechReborn.euPerRF; - int energyExtracted = Math.min(getEnergyStored(container), Math.min(maxExtract, maxExtract)); - - if (!simulate) { - setEnergy(getEnergy(container) - energyExtracted, container); - } - return energyExtracted / ConfigTechReborn.euPerRF; - } - - @Override - public int getEnergyStored(ItemStack container) { - if (!PowerSystem.RFPOWENET) - return 0; - return ((int) getEnergy(container) / ConfigTechReborn.euPerRF); - } - - @Override - public int getMaxEnergyStored(ItemStack container) { - if (!PowerSystem.RFPOWENET) - return 0; - return ((int) getMaxPower(container) / ConfigTechReborn.euPerRF); - } - //Cofh -} diff --git a/src/main/java/techreborn/powerSystem/traits/BasePowerTrait.java b/src/main/java/techreborn/powerSystem/traits/BasePowerTrait.java new file mode 100644 index 000000000..0d46f4b8f --- /dev/null +++ b/src/main/java/techreborn/powerSystem/traits/BasePowerTrait.java @@ -0,0 +1,88 @@ +package techreborn.powerSystem.traits; + + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import reborncore.jtraits.JTrait; +import techreborn.api.power.IEnergyInterfaceItem; + +public abstract class BasePowerTrait extends JTrait implements IEnergyInterfaceItem { + + @Override + public double getEnergy(ItemStack stack) { + NBTTagCompound tagCompound = getOrCreateNbtData(stack); + if (tagCompound.hasKey("charge")) { + return tagCompound.getDouble("charge"); + } + return 0; + } + + @Override + public void setEnergy(double energy, ItemStack stack) { + NBTTagCompound tagCompound = getOrCreateNbtData(stack); + tagCompound.setDouble("charge", energy); + + if (this.getEnergy(stack) > getMaxPower(stack)) { + this.setEnergy(getMaxPower(stack), stack); + } else if (this.getEnergy(stack) < 0) { + this.setEnergy(0, stack); + } + } + + @Override + public double addEnergy(double energy, ItemStack stack) { + return addEnergy(energy, false, stack); + } + + @Override + public double addEnergy(double energy, boolean simulate, ItemStack stack) { + double energyReceived = Math.min(getMaxPower(stack) - energy, Math.min(this.getMaxPower(stack), energy)); + + if (!simulate) { + setEnergy(energy + energyReceived, stack); + } + return energyReceived; + } + + @Override + public boolean canUseEnergy(double input, ItemStack stack) { + return input <= getEnergy(stack); + } + + @Override + public double useEnergy(double energy, ItemStack stack) { + return useEnergy(energy, false, stack); + } + + @Override + public double useEnergy(double extract, boolean simulate, ItemStack stack) { + double energyExtracted = Math.min(extract, Math.min(this.getMaxTransfer(stack), extract)); + + if (!simulate) { + setEnergy(getEnergy(stack) - energyExtracted, stack); + } + return energyExtracted; + } + + @Override + public boolean canAddEnergy(double energy, ItemStack stack) { + return this.getEnergy(stack) + energy <= getMaxPower(stack); + } + + + public NBTTagCompound getOrCreateNbtData(ItemStack itemStack) { + NBTTagCompound tagCompound = itemStack.getTagCompound(); + if (tagCompound == null) { + tagCompound = new NBTTagCompound(); + itemStack.setTagCompound(tagCompound); + } + + return tagCompound; + } + + +} diff --git a/src/main/java/techreborn/powerSystem/traits/EUItemPowerTrait.java b/src/main/java/techreborn/powerSystem/traits/EUItemPowerTrait.java new file mode 100644 index 000000000..faba62add --- /dev/null +++ b/src/main/java/techreborn/powerSystem/traits/EUItemPowerTrait.java @@ -0,0 +1,41 @@ +package techreborn.powerSystem.traits; + +import ic2.api.item.IElectricItem; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import reborncore.jtraits.JTrait; +import techreborn.api.power.IEnergyInterfaceItem; + + +public class EUItemPowerTrait extends JTrait implements IElectricItem { + + @Override + public boolean canProvideEnergy(ItemStack itemStack) { + return _self.canAcceptEnergy(itemStack); + } + + @Override + public Item getChargedItem(ItemStack itemStack) { + return (Item) _self; + } + + @Override + public Item getEmptyItem(ItemStack itemStack) { + return (Item) _self; + } + + @Override + public double getMaxCharge(ItemStack itemStack) { + return _self.getMaxPower(itemStack); + } + + @Override + public int getTier(ItemStack itemStack) { + return _self.getStackTeir(itemStack); + } + + @Override + public double getTransferLimit(ItemStack itemStack) { + return _self.getMaxTransfer(itemStack); + } +} diff --git a/src/main/java/techreborn/powerSystem/traits/RFItemPowerTrait.java b/src/main/java/techreborn/powerSystem/traits/RFItemPowerTrait.java index f776e3531..6a1aefbb3 100644 --- a/src/main/java/techreborn/powerSystem/traits/RFItemPowerTrait.java +++ b/src/main/java/techreborn/powerSystem/traits/RFItemPowerTrait.java @@ -1,11 +1,58 @@ package techreborn.powerSystem.traits; +import cofh.api.energy.IEnergyContainerItem; +import net.minecraft.item.ItemStack; import reborncore.jtraits.JTrait; -import techreborn.powerSystem.PoweredItem; +import techreborn.api.power.IEnergyInterfaceItem; +import techreborn.config.ConfigTechReborn; +import techreborn.powerSystem.PowerSystem; +public class RFItemPowerTrait extends JTrait implements IEnergyContainerItem { -public class RFItemPowerTrait extends JTrait { + @Override + public int receiveEnergy(ItemStack container, int maxReceive, boolean simulate) { + if (!PowerSystem.RFPOWENET) + return 0; + if (!_self.canAcceptEnergy(container)) { + return 0; + } + maxReceive *= ConfigTechReborn.euPerRF; + int energyReceived = Math.min(getMaxEnergyStored(container) - getEnergyStored(container), Math.min((int) _self.getMaxTransfer(container) * ConfigTechReborn.euPerRF, maxReceive)); + if (!simulate) { + _self.setEnergy(_self.getEnergy(container) + energyReceived, container); + } + return energyReceived / ConfigTechReborn.euPerRF; + } + @Override + public int extractEnergy(ItemStack container, int maxExtract, boolean simulate) { + if (!PowerSystem.RFPOWENET) + return 0; + if (!_self.canAcceptEnergy(container)) { + return 0; + } + maxExtract *= ConfigTechReborn.euPerRF; + int energyExtracted = Math.min(getEnergyStored(container), Math.min(maxExtract, maxExtract)); + + if (!simulate) { + _self.setEnergy(_self.getEnergy(container) - energyExtracted, container); + } + return energyExtracted / ConfigTechReborn.euPerRF; + } + + @Override + public int getEnergyStored(ItemStack container) { + if (!PowerSystem.RFPOWENET) + return 0; + return ((int) _self.getEnergy(container) / ConfigTechReborn.euPerRF); + } + + @Override + public int getMaxEnergyStored(ItemStack container) { + if (!PowerSystem.RFPOWENET) + return 0; + return ((int) _self.getMaxPower(container) / ConfigTechReborn.euPerRF); + } }