diff --git a/src/main/java/ic2/api/item/IElectricItemManager.java b/src/main/java/ic2/api/item/IElectricItemManager.java index 604620b..6e1c706 100644 --- a/src/main/java/ic2/api/item/IElectricItemManager.java +++ b/src/main/java/ic2/api/item/IElectricItemManager.java @@ -11,7 +11,7 @@ import net.minecraft.item.ItemStack; * - handle charging, taking amount, tier, transfer limit, canProvideEnergy and simulate into account * - replace item IDs if appropriate (getChargedItemId() and getEmptyItemId()) * - update and manage the damage value for the visual charge indicator - * + * * @note If you're implementing your own variant (ISpecialElectricItem), you can delegate to the * default implementations through ElectricItem.rawManager. The default implementation is designed * to minimize its dependency on its own constraints/structure and delegates most work back to the @@ -45,7 +45,7 @@ public interface IElectricItemManager { /** * Determine the charge level for the specified item. - * + * * @param stack ItemStack containing the electric item * @return charge level in EU */ @@ -85,7 +85,7 @@ public interface IElectricItemManager { /** * Get the tool tip to display for electric items. - * + * * @param stack ItemStack to determine the tooltip for * @return tool tip string or null for none */ diff --git a/src/main/java/net/machinemuse/api/electricity/IMuseElectricItem.java b/src/main/java/net/machinemuse/api/electricity/IMuseElectricItem.java index 94bca40..8075e01 100644 --- a/src/main/java/net/machinemuse/api/electricity/IMuseElectricItem.java +++ b/src/main/java/net/machinemuse/api/electricity/IMuseElectricItem.java @@ -21,7 +21,7 @@ import net.minecraft.item.ItemStack; @Optional.Interface(iface = "cofh.api.energy.IEnergyContainerItem", modid = "CoFHAPI|energy", striprefs = true), @Optional.Interface(iface = "ic2.api.item.IElectricItemManager", modid = "IC2", striprefs = true), @Optional.Interface(iface = "ic2.api.item.ISpecialElectricItem", modid = "IC2", striprefs = true), - @Optional.Interface(iface = "appeng.api.implementations.items.IAEItemPowerStorage", modid = "AE2", striprefs = true) + @Optional.Interface(iface = "appeng.api.implementations.items.IAEItemPowerStorage", modid = "appliedenergistics2", striprefs = true) }) public interface IMuseElectricItem extends IEnergyContainerItem, diff --git a/src/main/java/net/machinemuse/api/electricity/MuseElectricItem.java b/src/main/java/net/machinemuse/api/electricity/MuseElectricItem.java deleted file mode 100644 index 943aabe..0000000 --- a/src/main/java/net/machinemuse/api/electricity/MuseElectricItem.java +++ /dev/null @@ -1,253 +0,0 @@ -package net.machinemuse.api.electricity; - -import appeng.api.config.AccessRestriction; -import ic2.api.item.ElectricItem; -import ic2.api.item.IElectricItemManager; -import net.machinemuse.api.ModuleManager; -import net.machinemuse.utils.ElectricItemUtils; -import net.machinemuse.utils.MuseItemUtils; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; - -/** - * Author: MachineMuse (Claire Semple) - * Created: 10:12 PM, 4/20/13 - * - * Ported to Java by lehjr on 11/3/16. - */ -public class MuseElectricItem extends Item implements IMuseElectricItem { - private static MuseElectricItem INSTANCE; - - public static MuseElectricItem getInstance() { - if (INSTANCE == null) - INSTANCE = new MuseElectricItem(); - return INSTANCE; - } - - /** - * Call to get the energy of an item - * - * @param stack ItemStack to set - * @return Current energy level - */ - @Override - public double getCurrentEnergy(ItemStack stack) { - return MuseItemUtils.getDoubleOrZero(stack, ElectricItemUtils.CURRENT_ENERGY); - } - - /** - * Call to set the energy of an item - * - * @param stack ItemStack to set - * @return Maximum energy level - */ - @Override - public double getMaxEnergy(ItemStack stack) { - return ModuleManager.computeModularProperty(stack, ElectricItemUtils.MAXIMUM_ENERGY); - } - - /** - * Call to set the energy of an item - * - * @param stack ItemStack to set - * @param energy Level to set it to - */ - @Override - public void setCurrentEnergy(ItemStack stack, double energy) { - MuseItemUtils.setDoubleOrRemove(stack, ElectricItemUtils.CURRENT_ENERGY, Math.min(energy, getMaxEnergy(stack))); - } - - /** - * Call to drain energy from an item - * - * @param stack ItemStack being requested for energy - * @param requested Amount of energy to drain - * @return Amount of energy successfully drained - */ - @Override - public double drainEnergyFrom(ItemStack stack, double requested) { - double available = getCurrentEnergy(stack); - if (available > requested) { - setCurrentEnergy(stack, available - requested); - return requested; - } else { - setCurrentEnergy(stack, 0); - return available; - } - } - - /** - * Call to give energy to an item - * - * @param stack ItemStack being provided with energy - * @param provided Amount of energy to add - * @return Amount of energy added - */ - @Override - public double giveEnergyTo(ItemStack stack, double provided) { - double available = getCurrentEnergy(stack); - double max = getMaxEnergy(stack); - if (available + provided < max) { - setCurrentEnergy(stack, available + provided); - return provided; - } else { - setCurrentEnergy(stack, max); - return max - available; - } - } - - @Override - public int getMaxDamage(ItemStack itemStack) { - return 0; - } - - /* Industrialcraft 2 -------------------------------------------------------------------------- */ - @Override - public boolean canProvideEnergy(ItemStack itemStack) { - return true; - } - - @Override - public Item getChargedItem(ItemStack itemStack) { - return this; - } - - @Override - public Item getEmptyItem(ItemStack itemStack) { - return this; - } - - @Override - public double getMaxCharge(ItemStack itemStack) { - return ElectricConversions.museEnergyToEU(getMaxEnergy(itemStack)); - } - - @Override - public int getTier(ItemStack itemStack) { - return ElectricConversions.getTier(itemStack); - } - - @Override - public double getTransferLimit(ItemStack itemStack) { - return ElectricConversions.museEnergyToEU(Math.sqrt(getMaxEnergy(itemStack))); - } - - @Override - public double charge(ItemStack itemStack, double amount, int tier, boolean ignoreTransferLimit, boolean simulate){ - double current = getCurrentEnergy(itemStack); - double transfer = (ignoreTransferLimit || amount < getTransferLimit(itemStack)) ? ElectricConversions.museEnergyFromEU(amount) : getTransferLimit(itemStack); - double given = giveEnergyTo(itemStack, transfer); - if (simulate) { - setCurrentEnergy(itemStack, current); - } - return ElectricConversions.museEnergyToEU(given); - } - - @Override - public double discharge(ItemStack itemStack, double amount, int tier, boolean ignoreTransferLimit, boolean externally, boolean simulate) { - double current = getCurrentEnergy(itemStack); - double transfer = (ignoreTransferLimit || amount < getTransferLimit(itemStack)) ? ElectricConversions.museEnergyFromEU(amount) : getTransferLimit(itemStack); - double taken = drainEnergyFrom(itemStack, transfer); - if (simulate) { - setCurrentEnergy(itemStack, current); - } - return ElectricConversions.museEnergyToEU(taken); - } - - @Override - public double getCharge(ItemStack itemStack) { - return ElectricConversions.museEnergyToEU(getCurrentEnergy(itemStack)); - } - - @Override - public boolean canUse(ItemStack itemStack, double amount) { - return ElectricConversions.museEnergyFromEU(amount) < getCurrentEnergy(itemStack); - } - - @Override - public boolean use(ItemStack itemStack, double amount, EntityLivingBase entity) { - return ElectricItem.rawManager.use(itemStack, ElectricConversions.museEnergyToEU(amount), entity); - } - - @Override - public void chargeFromArmor(ItemStack itemStack, EntityLivingBase entity) { - ElectricItem.rawManager.chargeFromArmor(itemStack, entity); - } - - @Override - public String getToolTip(ItemStack itemStack) { -// return itemStack.getTooltip(Minecraft.getMinecraft().thePlayer, false).toString(); // enabling this doubles up the tooltips - return ""; - } - - @Override - public IElectricItemManager getManager(ItemStack itemStack) { - return this; - } - - - /* Thermal Expansion -------------------------------------------------------------------------- */ - @Override - public int receiveEnergy(ItemStack itemStack, int energy, boolean simulate) { - double current = getCurrentEnergy(itemStack); - double receivedME = ElectricConversions.museEnergyFromRF(energy); - double eatenME = giveEnergyTo(itemStack, receivedME); - if (simulate) setCurrentEnergy(itemStack, current); - return ElectricConversions.museEnergyToRF(eatenME); - } - - @Override - public int extractEnergy(ItemStack itemStack, int energy, boolean simulate) { - double current = getCurrentEnergy(itemStack); - double requesteddME = ElectricConversions.museEnergyFromRF(energy); - double takenME = drainEnergyFrom(itemStack, requesteddME); - if (simulate) { - setCurrentEnergy(itemStack, current); - } - return ElectricConversions.museEnergyToRF(takenME); - } - - @Override - public int getEnergyStored(ItemStack itemStack) { - return ElectricConversions.museEnergyToRF(getCurrentEnergy(itemStack)); - } - - @Override - public int getMaxEnergyStored(ItemStack itemStack) { - return ElectricConversions.museEnergyToRF(getMaxEnergy(itemStack)); - } - - - /* Applied Energistics 2 ---------------------------------------------------------------------- */ - @Override - public double injectAEPower(ItemStack itemStack, double ae) { - double current = getCurrentEnergy(itemStack); - double recieved = ElectricConversions.museEnergyFromAE(ae); - setCurrentEnergy(itemStack, current); - return ElectricConversions.museEnergyToAE(recieved); - } - - @Override - public double extractAEPower(ItemStack itemStack, double ae) { - double current = getCurrentEnergy(itemStack); - double taken = ElectricConversions.museEnergyFromAE(ae); - setCurrentEnergy(itemStack, current); - return ElectricConversions.museEnergyToAE(taken); - } - - @Override - public double getAEMaxPower(ItemStack itemStack) { - return ElectricConversions.museEnergyToAE(getCurrentEnergy(itemStack)); - } - - @Override - public double getAECurrentPower(ItemStack itemStack) { - return ElectricConversions.museEnergyToAE(getCurrentEnergy(itemStack)); - } - - @Override - public AccessRestriction getPowerFlow(ItemStack itemStack) { - return AccessRestriction.READ_WRITE; - } -} diff --git a/src/main/java/net/machinemuse/powersuits/common/ModularPowersuits.java b/src/main/java/net/machinemuse/powersuits/common/ModularPowersuits.java index 4203648..e05400e 100644 --- a/src/main/java/net/machinemuse/powersuits/common/ModularPowersuits.java +++ b/src/main/java/net/machinemuse/powersuits/common/ModularPowersuits.java @@ -20,7 +20,7 @@ import static net.machinemuse.powersuits.common.ModularPowersuits.VERSION; * * Ported to Java by lehjr on 11/14/16. */ -@Mod(modid = MODID, version = VERSION, dependencies = "required-after:numina@[@numina_version@,)") +@Mod(modid = MODID, version = VERSION, dependencies = "required-after:numina@[@numina_version@,), ae2wct") public final class ModularPowersuits { public static final String MODID = "powersuits"; public static final String VERSION = "@VERSION@"; diff --git a/src/main/java/net/machinemuse/powersuits/item/IModularItemBase.java b/src/main/java/net/machinemuse/powersuits/item/IModularItemBase.java index 1d7386a..f2c7532 100644 --- a/src/main/java/net/machinemuse/powersuits/item/IModularItemBase.java +++ b/src/main/java/net/machinemuse/powersuits/item/IModularItemBase.java @@ -47,10 +47,4 @@ public interface IModularItemBase extends IModularItem, IMuseElectricItem { List getLongInfo(EntityPlayer player, ItemStack stack); double getArmorDouble(EntityPlayer player, ItemStack stack); - - double getPlayerEnergy(EntityPlayer player); - - void drainPlayerEnergy(EntityPlayer player, double drainEnergy); - - void givePlayerEnergy(EntityPlayer player, double joulesToGive); } diff --git a/src/main/java/net/machinemuse/powersuits/item/ItemElectricArmor.java b/src/main/java/net/machinemuse/powersuits/item/ItemElectricArmor.java index b7bfbc1..9be21ae 100644 --- a/src/main/java/net/machinemuse/powersuits/item/ItemElectricArmor.java +++ b/src/main/java/net/machinemuse/powersuits/item/ItemElectricArmor.java @@ -1,190 +1,358 @@ package net.machinemuse.powersuits.item; import appeng.api.config.AccessRestriction; +import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import ic2.api.item.ElectricItem; +import ic2.api.item.IElectricItemManager; +import net.machinemuse.api.ModuleManager; +import net.machinemuse.api.electricity.ElectricConversions; import net.machinemuse.api.electricity.IMuseElectricItem; -import net.machinemuse.api.electricity.MuseElectricItem; import net.machinemuse.numina.geometry.Colour; +import net.machinemuse.powersuits.powermodule.misc.CosmeticGlowModule; +import net.machinemuse.powersuits.powermodule.misc.TintModule; +import net.machinemuse.utils.ElectricItemUtils; +import net.machinemuse.utils.MuseCommonStrings; +import net.machinemuse.utils.MuseItemUtils; +import net.machinemuse.utils.MuseStringUtils; +import net.minecraft.client.Minecraft; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; +import java.util.ArrayList; import java.util.List; +import static net.machinemuse.numina.general.MuseMathUtils.clampDouble; + /** * Ported to Java by lehjr on 10/26/16. */ +@Optional.InterfaceList({ + @Optional.Interface(iface = "cofh.api.energy.IEnergyContainerItem", modid = "CoFHAPI|energy", striprefs = true), + @Optional.Interface(iface = "ic2.api.item.IElectricItemManager", modid = "IC2", striprefs = true), + @Optional.Interface(iface = "ic2.api.item.ISpecialElectricItem", modid = "IC2", striprefs = true), + @Optional.Interface(iface = "appeng.api.implementations.items.IAEItemPowerStorage", modid = "appliedenergistics2", striprefs = true) +}) public abstract class ItemElectricArmor extends ItemArmor implements IModularItemBase, IMuseElectricItem { public ItemElectricArmor(final ItemArmor.ArmorMaterial material, final int index1, final int index2) { super(material, index1, index2); } + @SideOnly(Side.CLIENT) + @Override + public int getColorFromItemStack(ItemStack itemStack, int par2) { + return getColorFromItemStack(itemStack).getInt(); + } + + @Override + public Colour getGlowFromItemStack(ItemStack itemStack) { + if (!ModuleManager.itemHasActiveModule(itemStack, CosmeticGlowModule.MODULE_GLOW)) { + return Colour.LIGHTBLUE; + } + double computedred = ModuleManager.computeModularProperty(itemStack, CosmeticGlowModule.RED_GLOW); + double computedgreen = ModuleManager.computeModularProperty(itemStack, CosmeticGlowModule.GREEN_GLOW); + double computedblue = ModuleManager.computeModularProperty(itemStack, CosmeticGlowModule.BLUE_GLOW); + return new Colour(clampDouble(computedred, 0, 1), clampDouble(computedgreen, 0, 1), clampDouble(computedblue, 0, 1), 0.8); + } + + @Override + public Colour getColorFromItemStack(ItemStack itemStack) { + if (!ModuleManager.itemHasActiveModule(itemStack, TintModule.MODULE_TINT)) { + return Colour.WHITE; + } + double computedred = ModuleManager.computeModularProperty(itemStack, TintModule.RED_TINT); + double computedgreen = ModuleManager.computeModularProperty(itemStack, TintModule.GREEN_TINT); + double computedblue = ModuleManager.computeModularProperty(itemStack, TintModule.BLUE_TINT); + return new Colour(clampDouble(computedred, 0, 1), clampDouble(computedgreen, 0, 1), clampDouble(computedblue, 0, 1), 1.0F); + } + + @Override + public boolean requiresMultipleRenderPasses() { + return false; + } + + @SideOnly(Side.CLIENT) + @Override + public void addInformation(ItemStack itemStack, EntityPlayer player, List currentTipList, boolean advancedToolTips) { + MuseCommonStrings.addInformation(itemStack, player, currentTipList, advancedToolTips); + } + + @Override + public String formatInfo(String string, double value) { + return string + '\t' + MuseStringUtils.formatNumberShort(value); + } + + + /* IModularItem ------------------------------------------------------------------------------- */ + @SideOnly(Side.CLIENT) + @Override + public List getLongInfo(EntityPlayer player, ItemStack itemStack) { + List info = new ArrayList<>(); + + info.add("Detailed Summary"); + info.add(formatInfo("Armor", getArmorDouble(player, itemStack))); + info.add(formatInfo("Energy Storage", getCurrentEnergy(itemStack)) + 'J'); + info.add(formatInfo("Weight", MuseCommonStrings.getTotalWeight(itemStack)) + 'g'); + return info; + } + + @Override + public double getArmorDouble(EntityPlayer player, ItemStack itemStack) { + return 0; + } + + @Override + public double getPlayerEnergy(EntityPlayer player) { + return ElectricItemUtils.getPlayerEnergy(player); + } + + @Override + public void drainPlayerEnergy(EntityPlayer player, double drainEnergy) { + ElectricItemUtils.drainPlayerEnergy(player, drainEnergy); + } + + @Override + public void givePlayerEnergy(EntityPlayer player, double joulesToGive) { + ElectricItemUtils.givePlayerEnergy(player, joulesToGive); + } + + @Override + public int getMaxDamage(ItemStack itemStack) { + return 0; + } + + @SideOnly(Side.CLIENT) @Override public String getToolTip(ItemStack itemStack) { - return null; + return itemStack.getTooltip(Minecraft.getMinecraft().thePlayer, false).toString(); } - @SideOnly(Side.CLIENT) - public int getColorFromItemStack(final ItemStack stack, final int par2) { - return ModularItemBase.getInstance().getColorFromItemStack(stack, par2); - } - - public Colour getGlowFromItemStack(final ItemStack stack) { - return ModularItemBase.getInstance().getGlowFromItemStack(stack); - } - - public Colour getColorFromItemStack(final ItemStack stack) { - return ModularItemBase.getInstance().getColorFromItemStack(stack); - } - - @SideOnly(Side.CLIENT) - public boolean requiresMultipleRenderPasses() { - return ModularItemBase.getInstance().requiresMultipleRenderPasses(); - } - - @SideOnly(Side.CLIENT) + /** + * Call to get the energy of an item + * + * @param stack ItemStack to set + * @return Current energy level + */ @Override - public void addInformation(ItemStack stack, EntityPlayer player, List currentTipList, boolean advancedToolTips) { - ModularItemBase.getInstance().addInformation(stack, player, currentTipList, advancedToolTips); + public double getCurrentEnergy(ItemStack stack) { + return MuseItemUtils.getDoubleOrZero(stack, ElectricItemUtils.CURRENT_ENERGY); } - public String formatInfo(final String string, final double value) { - return ModularItemBase.getInstance().formatInfo(string, value); + /** + * Call to set the energy of an item + * + * @param stack ItemStack to set + * @return Maximum energy level + */ + @Override + public double getMaxEnergy(ItemStack stack) { + return ModuleManager.computeModularProperty(stack, ElectricItemUtils.MAXIMUM_ENERGY); } - public List getLongInfo(final EntityPlayer player, final ItemStack stack) { - return ModularItemBase.getInstance().getLongInfo(player, stack); + /** + * Call to set the energy of an item + * + * @param stack ItemStack to set + * @param energy Level to set it to + */ + @Override + public void setCurrentEnergy(ItemStack stack, double energy) { + MuseItemUtils.setDoubleOrRemove(stack, ElectricItemUtils.CURRENT_ENERGY, Math.min(energy, getMaxEnergy(stack))); } - public double getArmorDouble(final EntityPlayer player, final ItemStack stack) { - return ModularItemBase.getInstance().getArmorDouble(player, stack); + /** + * Call to drain energy from an item + * + * @param stack ItemStack being requested for energy + * @param requested Amount of energy to drain + * @return Amount of energy successfully drained + */ + @Override + public double drainEnergyFrom(ItemStack stack, double requested) { + double available = getCurrentEnergy(stack); + if (available > requested) { + setCurrentEnergy(stack, available - requested); + return requested; + } else { + setCurrentEnergy(stack, 0); + return available; + } } - public double getPlayerEnergy(final EntityPlayer player) { - return ModularItemBase.getInstance().getPlayerEnergy(player); + /** + * Call to give energy to an item + * + * @param stack ItemStack being provided with energy + * @param provided Amount of energy to add + * @return Amount of energy added + */ + @Override + public double giveEnergyTo(ItemStack stack, double provided) { + double available = getCurrentEnergy(stack); + double max = getMaxEnergy(stack); + if (available + provided < max) { + setCurrentEnergy(stack, available + provided); + return provided; + } else { + setCurrentEnergy(stack, max); + return max - available; + } } - public void drainPlayerEnergy(final EntityPlayer player, final double drainEnergy) { - ModularItemBase.getInstance().drainPlayerEnergy(player, drainEnergy); + /* Industrialcraft 2 -------------------------------------------------------------------------- */ + @Optional.Method(modid = "IC2") + @Override + public boolean canProvideEnergy(ItemStack itemStack) { + return true; } - public void givePlayerEnergy(final EntityPlayer player, final double joulesToGive) { - ModularItemBase.getInstance().givePlayerEnergy(player, joulesToGive); + @Optional.Method(modid = "IC2") + @Override + public Item getChargedItem(ItemStack itemStack) { + return this; } - public double getCurrentEnergy(final ItemStack stack) { - return MuseElectricItem.getInstance().getCurrentEnergy(stack); + @Optional.Method(modid = "IC2") + @Override + public Item getEmptyItem(ItemStack itemStack) { + return this; } - public double getMaxEnergy(final ItemStack stack) { - return MuseElectricItem.getInstance().getMaxEnergy(stack); + @Optional.Method(modid = "IC2") + @Override + public double getMaxCharge(ItemStack itemStack) { + return ElectricConversions.museEnergyToEU(getMaxEnergy(itemStack)); } - public void setCurrentEnergy(final ItemStack stack, final double energy) { - MuseElectricItem.getInstance().setCurrentEnergy(stack, energy); + @Optional.Method(modid = "IC2") + @Override + public int getTier(ItemStack itemStack) { + return ElectricConversions.getTier(itemStack); } - public double drainEnergyFrom(final ItemStack stack, final double requested) { - return MuseElectricItem.getInstance().drainEnergyFrom(stack, requested); + @Optional.Method(modid = "IC2") + @Override + public double getTransferLimit(ItemStack itemStack) { + return ElectricConversions.museEnergyToEU(Math.sqrt(getMaxEnergy(itemStack))); } - public double giveEnergyTo(final ItemStack stack, final double provided) { - return MuseElectricItem.getInstance().giveEnergyTo(stack, provided); + @Optional.Method(modid = "IC2") + @Override + public double charge(ItemStack itemStack, double amount, int tier, boolean ignoreTransferLimit, boolean simulate){ + double current = getCurrentEnergy(itemStack); + double transfer = (ignoreTransferLimit || amount < getTransferLimit(itemStack)) ? ElectricConversions.museEnergyFromEU(amount) : getTransferLimit(itemStack); + double given = giveEnergyTo(itemStack, transfer); + if (simulate) { + setCurrentEnergy(itemStack, current); + } + return ElectricConversions.museEnergyToEU(given); } - public IMuseElectricItem getManager(final ItemStack itemStack) { - return (IMuseElectricItem) MuseElectricItem.getInstance().getManager(itemStack); + @Optional.Method(modid = "IC2") + @Override + public double discharge(ItemStack itemStack, double amount, int tier, boolean ignoreTransferLimit, boolean externally, boolean simulate) { + double current = getCurrentEnergy(itemStack); + double transfer = (ignoreTransferLimit || amount < getTransferLimit(itemStack)) ? ElectricConversions.museEnergyFromEU(amount) : getTransferLimit(itemStack); + double taken = drainEnergyFrom(itemStack, transfer); + if (simulate) { + setCurrentEnergy(itemStack, current); + } + return ElectricConversions.museEnergyToEU(taken); } - public void chargeFromArmor(final ItemStack itemStack, final EntityLivingBase entity) { - MuseElectricItem.getInstance().chargeFromArmor(itemStack, entity); + @Optional.Method(modid = "IC2") + @Override + public double getCharge(ItemStack itemStack) { + return ElectricConversions.museEnergyToEU(getCurrentEnergy(itemStack)); } - public boolean use(final ItemStack itemStack, final double amount, final EntityLivingBase entity) { - return MuseElectricItem.getInstance().use(itemStack, amount, entity); + @Optional.Method(modid = "IC2") + @Override + public boolean canUse(ItemStack itemStack, double amount) { + return ElectricConversions.museEnergyFromEU(amount) < getCurrentEnergy(itemStack); } - public boolean canProvideEnergy(final ItemStack itemStack) { - return MuseElectricItem.getInstance().canProvideEnergy(itemStack); + @Optional.Method(modid = "IC2") + @Override + public boolean use(ItemStack itemStack, double amount, EntityLivingBase entity) { + return ElectricItem.rawManager.use(itemStack, ElectricConversions.museEnergyToEU(amount), entity); } - public double getCharge(final ItemStack itemStack) { - return MuseElectricItem.getInstance().getCharge(itemStack); + @Optional.Method(modid = "IC2") + @Override + public void chargeFromArmor(ItemStack itemStack, EntityLivingBase entity) { + ElectricItem.rawManager.chargeFromArmor(itemStack, entity); } - public double getMaxCharge(final ItemStack itemStack) { - return MuseElectricItem.getInstance().getMaxCharge(itemStack); + @Optional.Method(modid = "IC2") + @Override + public IElectricItemManager getManager(ItemStack itemStack) { + return this; + } + /* Thermal Expansion -------------------------------------------------------------------------- */ + @Override + public int receiveEnergy(ItemStack itemStack, int energy, boolean simulate) { + double current = getCurrentEnergy(itemStack); + double receivedME = ElectricConversions.museEnergyFromRF(energy); + double eatenME = giveEnergyTo(itemStack, receivedME); + if (simulate) setCurrentEnergy(itemStack, current); + return ElectricConversions.museEnergyToRF(eatenME); } - public int getTier(final ItemStack itemStack) { - return MuseElectricItem.getInstance().getTier(itemStack); + @Override + public int extractEnergy(ItemStack itemStack, int energy, boolean simulate) { + double current = getCurrentEnergy(itemStack); + double requesteddME = ElectricConversions.museEnergyFromRF(energy); + double takenME = drainEnergyFrom(itemStack, requesteddME); + if (simulate) { + setCurrentEnergy(itemStack, current); + } + return ElectricConversions.museEnergyToRF(takenME); } - public double getTransferLimit(final ItemStack itemStack) { - return MuseElectricItem.getInstance().getTransferLimit(itemStack); + @Override + public int getEnergyStored(ItemStack itemStack) { + return ElectricConversions.museEnergyToRF(getCurrentEnergy(itemStack)); } - public double charge(final ItemStack itemStack, final double amount, final int tier, final boolean ignoreTransferLimit, final boolean simulate) { - return MuseElectricItem.getInstance().charge(itemStack, amount, tier, ignoreTransferLimit, simulate); - } - - public double discharge(final ItemStack itemStack, final double amount, final int tier, final boolean ignoreTransferLimit, final boolean externally, final boolean simulate) { - return MuseElectricItem.getInstance().discharge(itemStack, amount, tier, ignoreTransferLimit, externally, simulate); - } - - public boolean canUse(final ItemStack itemStack, final double amount) { - return MuseElectricItem.getInstance().canUse(itemStack, amount); - } - - public Item getChargedItem(final ItemStack itemStack) { - return MuseElectricItem.getInstance().getChargedItem(itemStack); - } - - public Item getEmptyItem(final ItemStack itemStack) { - return MuseElectricItem.getInstance().getEmptyItem(itemStack); - } - - public int receiveEnergy(final ItemStack stack, final int energy, final boolean simulate) { - return MuseElectricItem.getInstance().receiveEnergy(stack, energy, simulate); - } - - public int extractEnergy(final ItemStack stack, final int energy, final boolean simulate) { - return MuseElectricItem.getInstance().extractEnergy(stack, energy, simulate); - } - - public int getEnergyStored(final ItemStack theItem) { - return MuseElectricItem.getInstance().getEnergyStored(theItem); - } - - public int getMaxEnergyStored(final ItemStack theItem) { - return MuseElectricItem.getInstance().getMaxEnergyStored(theItem); - } - - public int getMaxDamage(final ItemStack itemStack) { - return MuseElectricItem.getInstance().getMaxDamage(itemStack); + @Override + public int getMaxEnergyStored(ItemStack itemStack) { + return ElectricConversions.museEnergyToRF(getMaxEnergy(itemStack)); } /* Applied Energistics 2 ---------------------------------------------------------------------- */ - public double injectAEPower(final ItemStack stack, final double ae) { - return MuseElectricItem.getInstance().injectAEPower(stack, ae); + @Override + public double injectAEPower(ItemStack itemStack, double ae) { + double current = getCurrentEnergy(itemStack); + double recieved = ElectricConversions.museEnergyFromAE(ae); + setCurrentEnergy(itemStack, current); + return ElectricConversions.museEnergyToAE(recieved); } - public double extractAEPower(final ItemStack stack, final double ae) { - return MuseElectricItem.getInstance().extractAEPower(stack, ae); + @Override + public double extractAEPower(ItemStack itemStack, double ae) { + double current = getCurrentEnergy(itemStack); + double taken = ElectricConversions.museEnergyFromAE(ae); + setCurrentEnergy(itemStack, current); + return ElectricConversions.museEnergyToAE(taken); } - public double getAEMaxPower(final ItemStack stack) { - return MuseElectricItem.getInstance().getAEMaxPower(stack); + @Override + public double getAEMaxPower(ItemStack itemStack) { + return ElectricConversions.museEnergyToAE(getCurrentEnergy(itemStack)); } - public double getAECurrentPower(final ItemStack stack) { - return MuseElectricItem.getInstance().getAECurrentPower(stack); + @Override + public double getAECurrentPower(ItemStack itemStack) { + return ElectricConversions.museEnergyToAE(getCurrentEnergy(itemStack)); } - public AccessRestriction getPowerFlow(final ItemStack stack) { - return MuseElectricItem.getInstance().getPowerFlow(stack); + @Override + public AccessRestriction getPowerFlow(ItemStack itemStack) { + return AccessRestriction.READ_WRITE; } -} +} \ No newline at end of file diff --git a/src/main/java/net/machinemuse/powersuits/item/ItemPowerArmorHelmet.java b/src/main/java/net/machinemuse/powersuits/item/ItemPowerArmorHelmet.java index 66df370..71e3e8a 100644 --- a/src/main/java/net/machinemuse/powersuits/item/ItemPowerArmorHelmet.java +++ b/src/main/java/net/machinemuse/powersuits/item/ItemPowerArmorHelmet.java @@ -44,6 +44,7 @@ public class ItemPowerArmorHelmet extends ItemPowerArmor implements itemIcon = iconRegister.registerIcon(iconpath); } + @Optional.Method(modid = "Thaumcraft") @Override public boolean showIngamePopups(ItemStack itemStack, EntityLivingBase entityLivingBase) { return ModuleManager.itemHasActiveModule(itemStack, ThaumGogglesModule.MODULE_THAUM_GOGGLES); diff --git a/src/main/java/net/machinemuse/powersuits/item/MPSItemElectricTool.java b/src/main/java/net/machinemuse/powersuits/item/MPSItemElectricTool.java index 0b52cba..dec3afc 100644 --- a/src/main/java/net/machinemuse/powersuits/item/MPSItemElectricTool.java +++ b/src/main/java/net/machinemuse/powersuits/item/MPSItemElectricTool.java @@ -2,13 +2,23 @@ package net.machinemuse.powersuits.item; import appeng.api.config.AccessRestriction; import com.google.common.collect.Sets; +import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import ic2.api.item.ElectricItem; import ic2.api.item.IElectricItemManager; +import net.machinemuse.api.ModuleManager; +import net.machinemuse.api.electricity.ElectricConversions; import net.machinemuse.api.electricity.IMuseElectricItem; -import net.machinemuse.api.electricity.MuseElectricItem; import net.machinemuse.numina.geometry.Colour; +import net.machinemuse.powersuits.powermodule.misc.CosmeticGlowModule; +import net.machinemuse.powersuits.powermodule.misc.TintModule; +import net.machinemuse.utils.ElectricItemUtils; +import net.machinemuse.utils.MuseCommonStrings; +import net.machinemuse.utils.MuseItemUtils; +import net.machinemuse.utils.MuseStringUtils; import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; @@ -16,12 +26,23 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemTool; +import java.util.ArrayList; import java.util.List; import java.util.Set; +import static net.machinemuse.numina.general.MuseMathUtils.clampDouble; + /** * Ported to Java by lehjr on 11/4/16. */ + + +@Optional.InterfaceList({ + @Optional.Interface(iface = "cofh.api.energy.IEnergyContainerItem", modid = "CoFHAPI|energy", striprefs = true), + @Optional.Interface(iface = "ic2.api.item.IElectricItemManager", modid = "IC2", striprefs = true), + @Optional.Interface(iface = "ic2.api.item.ISpecialElectricItem", modid = "IC2", striprefs = true), + @Optional.Interface(iface = "appeng.api.implementations.items.IAEItemPowerStorage", modid = "appliedenergistics2", striprefs = true) +}) public class MPSItemElectricTool extends ItemTool implements IModularItemBase, IMuseElectricItem { public static final Set blocksEffectiveOn = Sets.newHashSet(Blocks.cobblestone, Blocks.double_stone_slab, Blocks.stone_slab, Blocks.stone, Blocks.sandstone, Blocks.mossy_cobblestone, Blocks.iron_ore, Blocks.iron_block, Blocks.coal_ore, Blocks.gold_block, Blocks.gold_ore, Blocks.diamond_ore, @@ -33,194 +54,320 @@ public class MPSItemElectricTool extends ItemTool implements IModularItemBase, I super(damageBonus, material, blocksEffectiveOn); } - - @Override - public String getToolTip(ItemStack itemStack) { - return null; - } - - @Override - public double getCurrentEnergy(ItemStack stack) { - return MuseElectricItem.getInstance().getCurrentEnergy(stack); - } - - @Override - public double getMaxEnergy(ItemStack stack) { - return MuseElectricItem.getInstance().getMaxEnergy(stack); - } - - @Override - public void setCurrentEnergy(ItemStack stack, double energy) { - MuseElectricItem.getInstance().setCurrentEnergy(stack, energy); - } - - @Override - public double drainEnergyFrom(ItemStack stack, double requested) { - return MuseElectricItem.getInstance().drainEnergyFrom(stack, requested); - } - - @Override - public double giveEnergyTo(ItemStack stack, double provided) { - return MuseElectricItem.getInstance().giveEnergyTo(stack, provided); - } - - @SideOnly(Side.CLIENT) - @Override - public void addInformation(ItemStack stack, EntityPlayer player, List currentTipList, boolean advancedToolTips) { - ModularItemBase.getInstance().addInformation(stack, player, currentTipList, advancedToolTips); - } - - /* Industrialcraft 2 -------------------------------------------------------------------------- */ - @Override - public IElectricItemManager getManager(ItemStack stack) { - return MuseElectricItem.getInstance().getManager(stack); - } - - @Override - public void chargeFromArmor(ItemStack itemStack, EntityLivingBase entity) { - MuseElectricItem.getInstance().chargeFromArmor(itemStack, entity); - } - - @Override - public boolean use(ItemStack itemStack, double amount, EntityLivingBase entity) { - return MuseElectricItem.getInstance().use(itemStack, amount, entity); - } - - @Override - public boolean canProvideEnergy(ItemStack itemStack) { - return MuseElectricItem.getInstance().canProvideEnergy(itemStack); - } - - @Override - public double getCharge(ItemStack itemStack) { - return MuseElectricItem.getInstance().getCharge(itemStack); - } - - @Override - public double getMaxCharge(ItemStack itemStack) { - return MuseElectricItem.getInstance().getMaxCharge(itemStack); - } - - @Override - public int getTier(ItemStack itemStack) { - return MuseElectricItem.getInstance().getTier(itemStack); - } - - @Override - public double getTransferLimit(ItemStack itemStack) { - return MuseElectricItem.getInstance().getTransferLimit(itemStack); - } - - @Override - public double charge(ItemStack itemStack, double amount, int tier, boolean ignoreTransferLimit, boolean simulate) { - return MuseElectricItem.getInstance().charge(itemStack, amount, tier, ignoreTransferLimit, simulate); - } - - @Override - public double discharge(ItemStack itemStack, double amount, int tier, boolean ignoreTransferLimit, boolean externally, boolean simulate) { - return MuseElectricItem.getInstance().discharge(itemStack, amount, tier, ignoreTransferLimit, externally, simulate); - } - - @Override - public boolean canUse(ItemStack itemStack, double amount) { - return MuseElectricItem.getInstance().canUse(itemStack, amount); - } - - @Override - public Item getChargedItem(ItemStack itemStack) { - return MuseElectricItem.getInstance().getChargedItem(itemStack); - } - - @Override - public Item getEmptyItem(ItemStack itemStack) { - return MuseElectricItem.getInstance().getEmptyItem(itemStack); - } - - /* Thermal Expansion -------------------------------------------------------------------------- */ - @Override - public int receiveEnergy(ItemStack stack, int energy, boolean simulate) { - return MuseElectricItem.getInstance().receiveEnergy(stack, energy, simulate); - } - - @Override - public int extractEnergy(ItemStack stack, int energy, boolean simulate) { - return MuseElectricItem.getInstance().extractEnergy(stack, energy, simulate); - } - - @Override - public int getEnergyStored(ItemStack theItem) { - return MuseElectricItem.getInstance().getEnergyStored(theItem); - } - - @Override - public int getMaxEnergyStored(ItemStack theItem) { - return MuseElectricItem.getInstance().getMaxEnergyStored(theItem); - } - - /* Applied Energistics 2 ---------------------------------------------------------------------- */ - @Override - public double injectAEPower(ItemStack stack, double ae) { - return MuseElectricItem.getInstance().injectAEPower(stack, ae); - } - - @Override - public double extractAEPower(ItemStack stack, double ae) { - return MuseElectricItem.getInstance().extractAEPower(stack, ae); - } - - @Override - public double getAEMaxPower(ItemStack stack) { - return MuseElectricItem.getInstance().getAEMaxPower(stack); - } - - @Override - public double getAECurrentPower(ItemStack stack) { - return MuseElectricItem.getInstance().getAECurrentPower(stack); - } - - @Override - public AccessRestriction getPowerFlow(ItemStack stack) { - return MuseElectricItem.getInstance().getPowerFlow(stack); - } - /* IModularItemBase ------------------------------------------------------------------------------ */ - @Override - public Colour getGlowFromItemStack(ItemStack stack) { - return ModularItemBase.getInstance().getGlowFromItemStack(stack); - } - - @Override - public Colour getColorFromItemStack(ItemStack stack) { - return ModularItemBase.getInstance().getColorFromItemStack(stack); - } - - @Override - public String formatInfo(String string, double value) { - return ModularItemBase.getInstance().formatInfo(string, value); - } - - @Override - public List getLongInfo(EntityPlayer player, ItemStack stack) { - return ModularItemBase.getInstance().getLongInfo(player, stack); - } - @Override public double getArmorDouble(EntityPlayer player, ItemStack stack) { return 0; } - /* MPSItemElectricTool ------------------------------------------------------------------------ */ + + @SideOnly(Side.CLIENT) + @Override + public int getColorFromItemStack(ItemStack itemStack, int par2) { + return getColorFromItemStack(itemStack).getInt(); + } + + @Override + public Colour getGlowFromItemStack(ItemStack itemStack) { + if (!ModuleManager.itemHasActiveModule(itemStack, CosmeticGlowModule.MODULE_GLOW)) { + return Colour.LIGHTBLUE; + } + double computedred = ModuleManager.computeModularProperty(itemStack, CosmeticGlowModule.RED_GLOW); + double computedgreen = ModuleManager.computeModularProperty(itemStack, CosmeticGlowModule.GREEN_GLOW); + double computedblue = ModuleManager.computeModularProperty(itemStack, CosmeticGlowModule.BLUE_GLOW); + return new Colour(clampDouble(computedred, 0, 1), clampDouble(computedgreen, 0, 1), clampDouble(computedblue, 0, 1), 0.8); + } + + @Override + public Colour getColorFromItemStack(ItemStack itemStack) { + if (!ModuleManager.itemHasActiveModule(itemStack, TintModule.MODULE_TINT)) { + return Colour.WHITE; + } + double computedred = ModuleManager.computeModularProperty(itemStack, TintModule.RED_TINT); + double computedgreen = ModuleManager.computeModularProperty(itemStack, TintModule.GREEN_TINT); + double computedblue = ModuleManager.computeModularProperty(itemStack, TintModule.BLUE_TINT); + return new Colour(clampDouble(computedred, 0, 1), clampDouble(computedgreen, 0, 1), clampDouble(computedblue, 0, 1), 1.0F); + } + + @Override + public boolean requiresMultipleRenderPasses() { + return false; + } + + @SideOnly(Side.CLIENT) + @Override + public void addInformation(ItemStack itemStack, EntityPlayer player, List currentTipList, boolean advancedToolTips) { + MuseCommonStrings.addInformation(itemStack, player, currentTipList, advancedToolTips); + } + + @Override + public String formatInfo(String string, double value) { + return string + '\t' + MuseStringUtils.formatNumberShort(value); + } + + + /* IModularItem ------------------------------------------------------------------------------- */ + @SideOnly(Side.CLIENT) + @Override + public List getLongInfo(EntityPlayer player, ItemStack itemStack) { + List info = new ArrayList<>(); + + info.add("Detailed Summary"); + info.add(formatInfo("Armor", getArmorDouble(player, itemStack))); + info.add(formatInfo("Energy Storage", getCurrentEnergy(itemStack)) + 'J'); + info.add(formatInfo("Weight", MuseCommonStrings.getTotalWeight(itemStack)) + 'g'); + return info; + } + @Override public double getPlayerEnergy(EntityPlayer player) { - return 0; + return ElectricItemUtils.getPlayerEnergy(player); } @Override public void drainPlayerEnergy(EntityPlayer player, double drainEnergy) { - + ElectricItemUtils.drainPlayerEnergy(player, drainEnergy); } @Override public void givePlayerEnergy(EntityPlayer player, double joulesToGive) { + ElectricItemUtils.givePlayerEnergy(player, joulesToGive); + } + + @Override + public int getMaxDamage(ItemStack itemStack) { + return 0; + } + + @SideOnly(Side.CLIENT) + @Override + public String getToolTip(ItemStack itemStack) { + return itemStack.getTooltip(Minecraft.getMinecraft().thePlayer, false).toString(); + } + + /** + * Call to get the energy of an item + * + * @param stack ItemStack to set + * @return Current energy level + */ + @Override + public double getCurrentEnergy(ItemStack stack) { + return MuseItemUtils.getDoubleOrZero(stack, ElectricItemUtils.CURRENT_ENERGY); + } + + /** + * Call to set the energy of an item + * + * @param stack ItemStack to set + * @return Maximum energy level + */ + @Override + public double getMaxEnergy(ItemStack stack) { + return ModuleManager.computeModularProperty(stack, ElectricItemUtils.MAXIMUM_ENERGY); + } + + /** + * Call to set the energy of an item + * + * @param stack ItemStack to set + * @param energy Level to set it to + */ + @Override + public void setCurrentEnergy(ItemStack stack, double energy) { + MuseItemUtils.setDoubleOrRemove(stack, ElectricItemUtils.CURRENT_ENERGY, Math.min(energy, getMaxEnergy(stack))); + } + + /** + * Call to drain energy from an item + * + * @param stack ItemStack being requested for energy + * @param requested Amount of energy to drain + * @return Amount of energy successfully drained + */ + @Override + public double drainEnergyFrom(ItemStack stack, double requested) { + double available = getCurrentEnergy(stack); + if (available > requested) { + setCurrentEnergy(stack, available - requested); + return requested; + } else { + setCurrentEnergy(stack, 0); + return available; + } + } + + /** + * Call to give energy to an item + * + * @param stack ItemStack being provided with energy + * @param provided Amount of energy to add + * @return Amount of energy added + */ + @Override + public double giveEnergyTo(ItemStack stack, double provided) { + double available = getCurrentEnergy(stack); + double max = getMaxEnergy(stack); + if (available + provided < max) { + setCurrentEnergy(stack, available + provided); + return provided; + } else { + setCurrentEnergy(stack, max); + return max - available; + } + } + + /* Industrialcraft 2 -------------------------------------------------------------------------- */ + @Optional.Method(modid = "IC2") + @Override + public boolean canProvideEnergy(ItemStack itemStack) { + return true; + } + + @Optional.Method(modid = "IC2") + @Override + public Item getChargedItem(ItemStack itemStack) { + return this; + } + + @Optional.Method(modid = "IC2") + @Override + public Item getEmptyItem(ItemStack itemStack) { + return this; + } + + @Optional.Method(modid = "IC2") + @Override + public double getMaxCharge(ItemStack itemStack) { + return ElectricConversions.museEnergyToEU(getMaxEnergy(itemStack)); + } + + @Optional.Method(modid = "IC2") + @Override + public int getTier(ItemStack itemStack) { + return ElectricConversions.getTier(itemStack); + } + + @Optional.Method(modid = "IC2") + @Override + public double getTransferLimit(ItemStack itemStack) { + return ElectricConversions.museEnergyToEU(Math.sqrt(getMaxEnergy(itemStack))); + } + + @Optional.Method(modid = "IC2") + @Override + public double charge(ItemStack itemStack, double amount, int tier, boolean ignoreTransferLimit, boolean simulate){ + double current = getCurrentEnergy(itemStack); + double transfer = (ignoreTransferLimit || amount < getTransferLimit(itemStack)) ? ElectricConversions.museEnergyFromEU(amount) : getTransferLimit(itemStack); + double given = giveEnergyTo(itemStack, transfer); + if (simulate) { + setCurrentEnergy(itemStack, current); + } + return ElectricConversions.museEnergyToEU(given); + } + + @Optional.Method(modid = "IC2") + @Override + public double discharge(ItemStack itemStack, double amount, int tier, boolean ignoreTransferLimit, boolean externally, boolean simulate) { + double current = getCurrentEnergy(itemStack); + double transfer = (ignoreTransferLimit || amount < getTransferLimit(itemStack)) ? ElectricConversions.museEnergyFromEU(amount) : getTransferLimit(itemStack); + double taken = drainEnergyFrom(itemStack, transfer); + if (simulate) { + setCurrentEnergy(itemStack, current); + } + return ElectricConversions.museEnergyToEU(taken); + } + + @Optional.Method(modid = "IC2") + @Override + public double getCharge(ItemStack itemStack) { + return ElectricConversions.museEnergyToEU(getCurrentEnergy(itemStack)); + } + + @Optional.Method(modid = "IC2") + @Override + public boolean canUse(ItemStack itemStack, double amount) { + return ElectricConversions.museEnergyFromEU(amount) < getCurrentEnergy(itemStack); + } + + @Optional.Method(modid = "IC2") + @Override + public boolean use(ItemStack itemStack, double amount, EntityLivingBase entity) { + return ElectricItem.rawManager.use(itemStack, ElectricConversions.museEnergyToEU(amount), entity); + } + + @Optional.Method(modid = "IC2") + @Override + public void chargeFromArmor(ItemStack itemStack, EntityLivingBase entity) { + ElectricItem.rawManager.chargeFromArmor(itemStack, entity); + } + + @Optional.Method(modid = "IC2") + @Override + public IElectricItemManager getManager(ItemStack itemStack) { + return this; + } + + /* Thermal Expansion -------------------------------------------------------------------------- */ + @Override + public int receiveEnergy(ItemStack itemStack, int energy, boolean simulate) { + double current = getCurrentEnergy(itemStack); + double receivedME = ElectricConversions.museEnergyFromRF(energy); + double eatenME = giveEnergyTo(itemStack, receivedME); + if (simulate) setCurrentEnergy(itemStack, current); + return ElectricConversions.museEnergyToRF(eatenME); + } + + @Override + public int extractEnergy(ItemStack itemStack, int energy, boolean simulate) { + double current = getCurrentEnergy(itemStack); + double requesteddME = ElectricConversions.museEnergyFromRF(energy); + double takenME = drainEnergyFrom(itemStack, requesteddME); + if (simulate) { + setCurrentEnergy(itemStack, current); + } + return ElectricConversions.museEnergyToRF(takenME); + } + + @Override + public int getEnergyStored(ItemStack itemStack) { + return ElectricConversions.museEnergyToRF(getCurrentEnergy(itemStack)); + } + + @Override + public int getMaxEnergyStored(ItemStack itemStack) { + return ElectricConversions.museEnergyToRF(getMaxEnergy(itemStack)); + } + + /* Applied Energistics 2 ---------------------------------------------------------------------- */ + @Override + public double injectAEPower(ItemStack itemStack, double ae) { + double current = getCurrentEnergy(itemStack); + double recieved = ElectricConversions.museEnergyFromAE(ae); + setCurrentEnergy(itemStack, current); + return ElectricConversions.museEnergyToAE(recieved); + } + + @Override + public double extractAEPower(ItemStack itemStack, double ae) { + double current = getCurrentEnergy(itemStack); + double taken = ElectricConversions.museEnergyFromAE(ae); + setCurrentEnergy(itemStack, current); + return ElectricConversions.museEnergyToAE(taken); + } + + @Override + public double getAEMaxPower(ItemStack itemStack) { + return ElectricConversions.museEnergyToAE(getCurrentEnergy(itemStack)); + } + + @Override + public double getAECurrentPower(ItemStack itemStack) { + return ElectricConversions.museEnergyToAE(getCurrentEnergy(itemStack)); + } + + @Override + public AccessRestriction getPowerFlow(ItemStack itemStack) { + return AccessRestriction.READ_WRITE; } } \ No newline at end of file diff --git a/src/main/java/net/machinemuse/powersuits/item/ModeChangingModularItem.java b/src/main/java/net/machinemuse/powersuits/item/ModeChangingModularItem.java deleted file mode 100644 index 79eeba3..0000000 --- a/src/main/java/net/machinemuse/powersuits/item/ModeChangingModularItem.java +++ /dev/null @@ -1,130 +0,0 @@ -//package net.machinemuse.powersuits.item; -// -//import net.machinemuse.api.ModuleManager; -//import net.machinemuse.api.moduletrigger.IRightClickModule; -//import net.machinemuse.numina.item.NuminaItemUtils; -//import net.machinemuse.numina.network.MusePacketModeChangeRequest; -//import net.machinemuse.numina.network.PacketSender; -//import net.minecraft.entity.player.EntityPlayer; -//import net.minecraft.item.ItemStack; -//import net.minecraft.util.IIcon; -// -//import java.util.ArrayList; -//import java.util.List; -// -///** -// * Author: MachineMuse (Claire Semple) -// * Created: 4:52 PM, 9/5/13 -// * -// * Ported to Java by lehjr on 12/12/16. -// */ -//public class ModeChangingModularItem implements IModeChangingModularItem { -// private static ModeChangingModularItem ourInstance = new ModeChangingModularItem(); -// -// public static ModeChangingModularItem getInstance() { -// return ourInstance; -// } -// -// private ModeChangingModularItem() { -// } -// -// @Override -// public void setActiveMode(ItemStack itemStack, String newMode) { -// NuminaItemUtils.getTagCompound(itemStack).setString("mode", newMode); -// } -// -// @Override -// public String getActiveMode(ItemStack itemStack, EntityPlayer player) { -// return getActiveMode(itemStack); -// } -// -// @Override -// public void cycleMode(ItemStack itemStack, EntityPlayer player, int dMode) { -// List modes = getValidModes(itemStack, player); -// if (!modes.isEmpty()) { -// int newindex = clampMode(modes.indexOf(getActiveMode(itemStack, player)) + dMode, modes.size()); -// String newmode = modes.get(newindex); -// setActiveMode(itemStack, newmode); -// PacketSender.sendToServer(new MusePacketModeChangeRequest(player,newmode, player.inventory.currentItem)); -// } -// } -// -// @Override -// public String nextMode(ItemStack itemStack, EntityPlayer player) { -// List modes = getValidModes(itemStack, player); -// if (!modes.isEmpty()) { -// int newindex = clampMode(modes.indexOf(getActiveMode(itemStack, player)) + 1, modes.size()); -// return modes.get(newindex); -// } else { -// return ""; -// } -// } -// -// @Override -// public String prevMode(ItemStack itemStack, EntityPlayer player) { -// List modes = getValidModes(itemStack, player); -// if (!modes.isEmpty()) { -// int newindex = clampMode(modes.indexOf(getActiveMode(itemStack, player)) - 1, modes.size()); -// return modes.get(newindex); -// } else { -// return ""; -// } -// } -// -// @Override -// public void cycleModeForItem(ItemStack itemStack, EntityPlayer player, int dMode) { -// if (itemStack != null) { -// this.cycleMode(itemStack, player, dMode); -// } -// } -// -// @Override -// public IIcon getModeIcon(String mode, ItemStack itemStack, EntityPlayer player) { -// if (!mode.isEmpty()) -// return ModuleManager.getModule(mode).getIcon(itemStack); -// return null; -// } -// -// -// private int clampMode(int selection, int modesSize) { -// if (selection > 0) { -// return selection % modesSize; -// } else { -// return (selection + modesSize * (-selection)) % modesSize; -// } -// } -////------------- -// -// -// @Override -// public List getValidModes(ItemStack stack, EntityPlayer player) { -// return getValidModes(stack); -// } -// -// @Override -// public List getValidModes(ItemStack itemStack) { -//// List validModes = new ArrayList<>(); -//// -//// for (IRightClickModule module : ModuleManager.getRightClickModules()) { -//// if (module.isValidForItem(itemStack)) -//// if (ModuleManager.itemHasActiveModule(itemStack, module.getDataName())) -//// validModes.add(module.getDataName()); -//// } -// return ModuleManager.getValidModes(itemStack); -// } -// -// @Override -// public String getActiveMode(ItemStack itemStack) { -// String modeFromNBT = NuminaItemUtils.getTagCompound(itemStack).getString("mode"); -// if (!modeFromNBT.isEmpty()) { -// return modeFromNBT; -// } else { -// List validModes = getValidModes(itemStack); -// if (!validModes.isEmpty()) { -// return validModes.get(0); -// } else { -// return ""; -// } -// } -// } -//} \ No newline at end of file diff --git a/src/main/java/net/machinemuse/powersuits/item/ModularItemBase.java b/src/main/java/net/machinemuse/powersuits/item/ModularItemBase.java deleted file mode 100644 index 08a53a6..0000000 --- a/src/main/java/net/machinemuse/powersuits/item/ModularItemBase.java +++ /dev/null @@ -1,273 +0,0 @@ -package net.machinemuse.powersuits.item; - -import appeng.api.config.AccessRestriction; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import ic2.api.item.IElectricItemManager; -import net.machinemuse.api.ModuleManager; -import net.machinemuse.api.electricity.MuseElectricItem; -import net.machinemuse.numina.geometry.Colour; -import net.machinemuse.powersuits.powermodule.misc.CosmeticGlowModule; -import net.machinemuse.powersuits.powermodule.misc.TintModule; -import net.machinemuse.utils.ElectricItemUtils; -import net.machinemuse.utils.MuseCommonStrings; -import net.machinemuse.utils.MuseStringUtils; -import net.minecraft.client.Minecraft; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; - -import java.util.ArrayList; -import java.util.List; - -import static net.machinemuse.numina.general.MuseMathUtils.clampDouble; - -/** - * Author: MachineMuse (Claire Semple) - * Created: 7:49 PM, 4/23/13 - * - * Ported to Java by lehjr on 11/4/16. - */ -public class ModularItemBase extends Item implements IModularItemBase { - private static ModularItemBase INSTANCE; - - public static ModularItemBase getInstance() { - if (INSTANCE == null) { - INSTANCE = new ModularItemBase(); - } - return INSTANCE; - } - - @SideOnly(Side.CLIENT) - @Override - public int getColorFromItemStack(ItemStack itemStack, int par2) { - return getColorFromItemStack(itemStack).getInt(); - } - - @Override - public Colour getGlowFromItemStack(ItemStack itemStack) { - if (!ModuleManager.itemHasActiveModule(itemStack, CosmeticGlowModule.MODULE_GLOW)) { - return Colour.LIGHTBLUE; - } - double computedred = ModuleManager.computeModularProperty(itemStack, CosmeticGlowModule.RED_GLOW); - double computedgreen = ModuleManager.computeModularProperty(itemStack, CosmeticGlowModule.GREEN_GLOW); - double computedblue = ModuleManager.computeModularProperty(itemStack, CosmeticGlowModule.BLUE_GLOW); - return new Colour(clampDouble(computedred, 0, 1), clampDouble(computedgreen, 0, 1), clampDouble(computedblue, 0, 1), 0.8); - } - - @Override - public Colour getColorFromItemStack(ItemStack itemStack) { - if (!ModuleManager.itemHasActiveModule(itemStack, TintModule.MODULE_TINT)) { - return Colour.WHITE; - } - double computedred = ModuleManager.computeModularProperty(itemStack, TintModule.RED_TINT); - double computedgreen = ModuleManager.computeModularProperty(itemStack, TintModule.GREEN_TINT); - double computedblue = ModuleManager.computeModularProperty(itemStack, TintModule.BLUE_TINT); - return new Colour(clampDouble(computedred, 0, 1), clampDouble(computedgreen, 0, 1), clampDouble(computedblue, 0, 1), 1.0F); - } - - @Override - public boolean requiresMultipleRenderPasses() { - return false; - } - - @Override - public void addInformation(ItemStack itemStack, EntityPlayer player, List currentTipList, boolean advancedToolTips) { - MuseCommonStrings.addInformation(itemStack, player, currentTipList, advancedToolTips); - } - - @Override - public String formatInfo(String string, double value) { - return string + '\t' + MuseStringUtils.formatNumberShort(value); - } - - - /* IModularItem ------------------------------------------------------------------------------- */ - @SideOnly(Side.CLIENT) - @Override - public List getLongInfo(EntityPlayer player, ItemStack itemStack) { - List info = new ArrayList<>(); - - info.add("Detailed Summary"); - info.add(formatInfo("Armor", getArmorDouble(player, itemStack))); - info.add(formatInfo("Energy Storage", getCurrentEnergy(itemStack)) + 'J'); - info.add(formatInfo("Weight", MuseCommonStrings.getTotalWeight(itemStack)) + 'g'); - return info; - } - - @Override - public double getArmorDouble(EntityPlayer player, ItemStack itemStack) { - return 0; - } - - @Override - public double getPlayerEnergy(EntityPlayer player) { - return ElectricItemUtils.getPlayerEnergy(player); - } - - @Override - public void drainPlayerEnergy(EntityPlayer player, double drainEnergy) { - ElectricItemUtils.drainPlayerEnergy(player, drainEnergy); - } - - @Override - public void givePlayerEnergy(EntityPlayer player, double joulesToGive) { - ElectricItemUtils.givePlayerEnergy(player, joulesToGive); - } - - - /* MuseElectricItem --------------------------------------------------------------------------- */ - @Override - public double getCurrentEnergy(ItemStack itemStack) { - return MuseElectricItem.getInstance().getCurrentEnergy(itemStack); - } - - @Override - public double getMaxEnergy(ItemStack itemStack) { - return MuseElectricItem.getInstance().getCurrentEnergy(itemStack); - } - - @Override - public void setCurrentEnergy(ItemStack itemStack, double energy) { - MuseElectricItem.getInstance().setCurrentEnergy(itemStack, energy); - } - - @Override - public double drainEnergyFrom(ItemStack itemStack, double requested) { - return MuseElectricItem.getInstance().drainEnergyFrom(itemStack, requested); - } - - @Override - public double giveEnergyTo(ItemStack itemStack, double provided) { - return MuseElectricItem.getInstance().giveEnergyTo(itemStack, provided); - } - - @Override - public int getMaxDamage(ItemStack itemStack) { - return 0; - } - - @SideOnly(Side.CLIENT) - @Override - public String getToolTip(ItemStack itemStack) { - return itemStack.getTooltip(Minecraft.getMinecraft().thePlayer, false).toString(); - } - - - /* Industrialcraft 2 -------------------------------------------------------------------------- */ - @Override - public boolean canProvideEnergy(ItemStack itemStack) { - return MuseElectricItem.getInstance().canProvideEnergy(itemStack); - } - - @Override - public Item getChargedItem(ItemStack itemStack) { - return MuseElectricItem.getInstance().getChargedItem(itemStack); - } - - @Override - public Item getEmptyItem(ItemStack itemStack) { - return MuseElectricItem.getInstance().getEmptyItem(itemStack); - } - - @Override - public double getMaxCharge(ItemStack itemStack) { - return MuseElectricItem.getInstance().getMaxCharge(itemStack); - } - - @Override - public int getTier(ItemStack itemStack) { - return MuseElectricItem.getInstance().getTier(itemStack); - } - - @Override - public double getTransferLimit(ItemStack itemStack) { - return MuseElectricItem.getInstance().getTransferLimit(itemStack); - } - - @Override - public double charge(ItemStack itemStack, double amount, int tier, boolean ignoreTransferLimit, boolean simulate) { - return MuseElectricItem.getInstance().charge(itemStack, amount, tier, ignoreTransferLimit, simulate); - } - - @Override - public double discharge(ItemStack itemStack, double amount, int tier, boolean ignoreTransferLimit, boolean externally, boolean simulate) { - return MuseElectricItem.getInstance().discharge(itemStack, amount, tier, ignoreTransferLimit, externally, simulate); - } - - @Override - public double getCharge(ItemStack itemStack) { - return MuseElectricItem.getInstance().getCharge(itemStack); - } - - @Override - public boolean canUse(ItemStack itemStack, double amount) { - return MuseElectricItem.getInstance().canUse(itemStack, amount); - } - - @Override - public boolean use(ItemStack itemStack, double amount, EntityLivingBase entity) { - return MuseElectricItem.getInstance().use(itemStack, amount, entity); - } - - @Override - public void chargeFromArmor(ItemStack itemStack, EntityLivingBase entity) { - MuseElectricItem.getInstance().chargeFromArmor(itemStack, entity); - } - - - @Override - public IElectricItemManager getManager(ItemStack itemStack) { - return MuseElectricItem.getInstance().getManager(itemStack); - } - - - /* Thermal Expansion -------------------------------------------------------------------------- */ - @Override - public int receiveEnergy(ItemStack itemStack, int energy, boolean simulate) { - return MuseElectricItem.getInstance().receiveEnergy(itemStack, energy, simulate); - } - - @Override - public int extractEnergy(ItemStack itemStack, int energy, boolean simulate) { - return MuseElectricItem.getInstance().extractEnergy(itemStack, energy, simulate); - } - - @Override - public int getEnergyStored(ItemStack itemStack) { - return MuseElectricItem.getInstance().getEnergyStored(itemStack); - } - - @Override - public int getMaxEnergyStored(ItemStack itemStack) { - return MuseElectricItem.getInstance().getMaxEnergyStored(itemStack); - } - - - /* Applied Energistics 2 ---------------------------------------------------------------------- */ - @Override - public double injectAEPower(ItemStack itemStack, double ae) { - return MuseElectricItem.getInstance().injectAEPower(itemStack, ae); - } - - @Override - public double extractAEPower(ItemStack itemStack, double ae) { - return MuseElectricItem.getInstance().extractAEPower(itemStack, ae); - } - - @Override - public double getAEMaxPower(ItemStack itemStack) { - return MuseElectricItem.getInstance().getAEMaxPower(itemStack); - } - - @Override - public double getAECurrentPower(ItemStack itemStack) { - return MuseElectricItem.getInstance().getAECurrentPower(itemStack); - } - - @Override - public AccessRestriction getPowerFlow(ItemStack itemStack) { - return MuseElectricItem.getInstance().getPowerFlow(itemStack); - } -} diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index eaee244..612fab4 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -27,7 +27,8 @@ "Thaumcraft", "GalacticraftCore", "numina", - "chisel" + "chisel", + "ae2wct" ], "useDependencyInformation": true