Reorganize energy code from ItemNetworkItem in separate class for the Portable Grid

This commit is contained in:
raoulvdberge
2017-05-08 21:56:36 +02:00
parent 0322a35bc4
commit 51db9dddb4
11 changed files with 159 additions and 129 deletions

View File

@@ -22,4 +22,5 @@ public final class RSItems {
public static final ItemFluidStoragePart FLUID_STORAGE_PART = new ItemFluidStoragePart();
public static final ItemWrench WRENCH = new ItemWrench();
public static final ItemSecurityCard SECURITY_CARD = new ItemSecurityCard();
public static final ItemPortableGrid PORTABLE_GRID = new ItemPortableGrid();
}

View File

@@ -7,7 +7,7 @@ import com.raoulvdberge.refinedstorage.api.network.INetworkMaster;
import com.raoulvdberge.refinedstorage.api.network.item.INetworkItem;
import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler;
import com.raoulvdberge.refinedstorage.api.network.security.Permission;
import com.raoulvdberge.refinedstorage.item.ItemNetworkItem;
import com.raoulvdberge.refinedstorage.item.ItemWirelessCraftingMonitor;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
@@ -34,7 +34,7 @@ public class NetworkItemWirelessCraftingMonitor implements INetworkItem {
@Override
public boolean onOpen(INetworkMaster network, EntityPlayer player, World controllerWorld, EnumHand hand) {
if (RS.INSTANCE.config.wirelessCraftingMonitorUsesEnergy && stack.getItemDamage() != ItemNetworkItem.TYPE_CREATIVE && stack.getCapability(CapabilityEnergy.ENERGY, null).getEnergyStored() <= RS.INSTANCE.config.wirelessCraftingMonitorOpenUsage) {
if (RS.INSTANCE.config.wirelessCraftingMonitorUsesEnergy && stack.getItemDamage() != ItemWirelessCraftingMonitor.TYPE_CREATIVE && stack.getCapability(CapabilityEnergy.ENERGY, null).getEnergyStored() <= RS.INSTANCE.config.wirelessCraftingMonitorOpenUsage) {
return false;
}
@@ -54,7 +54,7 @@ public class NetworkItemWirelessCraftingMonitor implements INetworkItem {
}
public void drainEnergy(int energy) {
if (RS.INSTANCE.config.wirelessCraftingMonitorUsesEnergy && stack.getItemDamage() != ItemNetworkItem.TYPE_CREATIVE) {
if (RS.INSTANCE.config.wirelessCraftingMonitorUsesEnergy && stack.getItemDamage() != ItemWirelessCraftingMonitor.TYPE_CREATIVE) {
IEnergyStorage energyStorage = stack.getCapability(CapabilityEnergy.ENERGY, null);
energyStorage.extractEnergy(energy, false);

View File

@@ -7,7 +7,7 @@ import com.raoulvdberge.refinedstorage.api.network.INetworkMaster;
import com.raoulvdberge.refinedstorage.api.network.item.INetworkItem;
import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler;
import com.raoulvdberge.refinedstorage.api.network.security.Permission;
import com.raoulvdberge.refinedstorage.item.ItemNetworkItem;
import com.raoulvdberge.refinedstorage.item.ItemWirelessFluidGrid;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
@@ -36,7 +36,7 @@ public class NetworkItemWirelessFluidGrid implements INetworkItem {
@Override
public boolean onOpen(INetworkMaster network, EntityPlayer player, World controllerWorld, EnumHand hand) {
if (RS.INSTANCE.config.wirelessFluidGridUsesEnergy && stack.getItemDamage() != ItemNetworkItem.TYPE_CREATIVE && stack.getCapability(CapabilityEnergy.ENERGY, null).getEnergyStored() <= RS.INSTANCE.config.wirelessFluidGridOpenUsage) {
if (RS.INSTANCE.config.wirelessFluidGridUsesEnergy && stack.getItemDamage() != ItemWirelessFluidGrid.TYPE_CREATIVE && stack.getCapability(CapabilityEnergy.ENERGY, null).getEnergyStored() <= RS.INSTANCE.config.wirelessFluidGridOpenUsage) {
return false;
}
@@ -56,7 +56,7 @@ public class NetworkItemWirelessFluidGrid implements INetworkItem {
}
public void drainEnergy(int energy) {
if (RS.INSTANCE.config.wirelessFluidGridUsesEnergy && stack.getItemDamage() != ItemNetworkItem.TYPE_CREATIVE) {
if (RS.INSTANCE.config.wirelessFluidGridUsesEnergy && stack.getItemDamage() != ItemWirelessFluidGrid.TYPE_CREATIVE) {
IEnergyStorage energyStorage = stack.getCapability(CapabilityEnergy.ENERGY, null);
energyStorage.extractEnergy(energy, false);

View File

@@ -7,7 +7,7 @@ import com.raoulvdberge.refinedstorage.api.network.INetworkMaster;
import com.raoulvdberge.refinedstorage.api.network.item.INetworkItem;
import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler;
import com.raoulvdberge.refinedstorage.api.network.security.Permission;
import com.raoulvdberge.refinedstorage.item.ItemNetworkItem;
import com.raoulvdberge.refinedstorage.item.ItemWirelessGrid;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
@@ -36,7 +36,7 @@ public class NetworkItemWirelessGrid implements INetworkItem {
@Override
public boolean onOpen(INetworkMaster network, EntityPlayer player, World controllerWorld, EnumHand hand) {
if (RS.INSTANCE.config.wirelessGridUsesEnergy && stack.getItemDamage() != ItemNetworkItem.TYPE_CREATIVE && stack.getCapability(CapabilityEnergy.ENERGY, null).getEnergyStored() <= RS.INSTANCE.config.wirelessGridOpenUsage) {
if (RS.INSTANCE.config.wirelessGridUsesEnergy && stack.getItemDamage() != ItemWirelessGrid.TYPE_CREATIVE && stack.getCapability(CapabilityEnergy.ENERGY, null).getEnergyStored() <= RS.INSTANCE.config.wirelessGridOpenUsage) {
return false;
}
@@ -56,7 +56,7 @@ public class NetworkItemWirelessGrid implements INetworkItem {
}
public void drainEnergy(int energy) {
if (RS.INSTANCE.config.wirelessGridUsesEnergy && stack.getItemDamage() != ItemNetworkItem.TYPE_CREATIVE) {
if (RS.INSTANCE.config.wirelessGridUsesEnergy && stack.getItemDamage() != ItemWirelessGrid.TYPE_CREATIVE) {
IEnergyStorage energyStorage = stack.getCapability(CapabilityEnergy.ENERGY, null);
energyStorage.extractEnergy(energy, false);

View File

@@ -0,0 +1,132 @@
package com.raoulvdberge.refinedstorage.item;
import com.raoulvdberge.refinedstorage.integration.forgeenergy.NetworkItemEnergyForge;
import com.raoulvdberge.refinedstorage.integration.tesla.IntegrationTesla;
import com.raoulvdberge.refinedstorage.integration.tesla.NetworkItemEnergyTesla;
import net.darkhax.tesla.capability.TeslaCapabilities;
import net.minecraft.client.resources.I18n;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.NonNullList;
import net.minecraft.util.math.MathHelper;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ICapabilityProvider;
import net.minecraftforge.energy.CapabilityEnergy;
import net.minecraftforge.energy.IEnergyStorage;
import javax.annotation.Nullable;
import java.util.List;
public abstract class ItemEnergyItem extends ItemBase {
public static final int TYPE_NORMAL = 0;
public static final int TYPE_CREATIVE = 1;
public ItemEnergyItem(String name) {
super(name);
setMaxDamage(3200);
setMaxStackSize(1);
setHasSubtypes(true);
}
@Override
public ICapabilityProvider initCapabilities(ItemStack stack, NBTTagCompound tag) {
return new NetworkItemCapabilityProvider(stack);
}
@Override
public boolean isDamageable() {
return true;
}
@Override
public boolean isRepairable() {
return false;
}
@Override
public double getDurabilityForDisplay(ItemStack stack) {
IEnergyStorage energy = stack.getCapability(CapabilityEnergy.ENERGY, null);
return 1D - ((double) energy.getEnergyStored() / (double) energy.getMaxEnergyStored());
}
@Override
public int getRGBDurabilityForDisplay(ItemStack stack) {
IEnergyStorage energy = stack.getCapability(CapabilityEnergy.ENERGY, null);
return MathHelper.hsvToRGB(Math.max(0.0F, (float) energy.getEnergyStored() / (float) energy.getMaxEnergyStored()) / 3.0F, 1.0F, 1.0F);
}
@Override
public boolean isDamaged(ItemStack stack) {
return stack.getItemDamage() != TYPE_CREATIVE;
}
@Override
public void setDamage(ItemStack stack, int damage) {
// NO OP
}
@Override
public void getSubItems(Item item, CreativeTabs tab, NonNullList<ItemStack> list) {
list.add(new ItemStack(item, 1, TYPE_NORMAL));
ItemStack fullyCharged = new ItemStack(item, 1, TYPE_NORMAL);
IEnergyStorage energy = fullyCharged.getCapability(CapabilityEnergy.ENERGY, null);
energy.receiveEnergy(energy.getMaxEnergyStored(), false);
list.add(fullyCharged);
list.add(new ItemStack(item, 1, TYPE_CREATIVE));
}
@Override
public void addInformation(ItemStack stack, EntityPlayer playerIn, List<String> tooltip, boolean advanced) {
super.addInformation(stack, playerIn, tooltip, advanced);
if (stack.getItemDamage() != TYPE_CREATIVE) {
IEnergyStorage energy = stack.getCapability(CapabilityEnergy.ENERGY, null);
tooltip.add(I18n.format("misc.refinedstorage:energy_stored", energy.getEnergyStored(), energy.getMaxEnergyStored()));
}
}
private class NetworkItemCapabilityProvider implements ICapabilityProvider {
private ItemStack stack;
public NetworkItemCapabilityProvider(ItemStack stack) {
this.stack = stack;
}
@Override
public boolean hasCapability(Capability<?> capability, @Nullable EnumFacing facing) {
return capability == CapabilityEnergy.ENERGY ||
(IntegrationTesla.isLoaded() && (capability == TeslaCapabilities.CAPABILITY_HOLDER || capability == TeslaCapabilities.CAPABILITY_CONSUMER));
}
@Override
public <T> T getCapability(Capability<T> capability, @Nullable EnumFacing facing) {
if (capability == CapabilityEnergy.ENERGY) {
return CapabilityEnergy.ENERGY.cast(new NetworkItemEnergyForge(stack, 3200));
}
if (IntegrationTesla.isLoaded()) {
if (capability == TeslaCapabilities.CAPABILITY_HOLDER) {
return TeslaCapabilities.CAPABILITY_HOLDER.cast(new NetworkItemEnergyTesla(stack));
}
if (capability == TeslaCapabilities.CAPABILITY_CONSUMER) {
return TeslaCapabilities.CAPABILITY_CONSUMER.cast(new NetworkItemEnergyTesla(stack));
}
}
return null;
}
}
}

View File

@@ -2,37 +2,22 @@ package com.raoulvdberge.refinedstorage.item;
import com.raoulvdberge.refinedstorage.RSBlocks;
import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemProvider;
import com.raoulvdberge.refinedstorage.integration.forgeenergy.NetworkItemEnergyForge;
import com.raoulvdberge.refinedstorage.integration.tesla.IntegrationTesla;
import com.raoulvdberge.refinedstorage.integration.tesla.NetworkItemEnergyTesla;
import com.raoulvdberge.refinedstorage.tile.TileController;
import net.darkhax.tesla.capability.TeslaCapabilities;
import net.minecraft.block.Block;
import net.minecraft.client.resources.I18n;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.*;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.text.TextComponentTranslation;
import net.minecraft.world.World;
import net.minecraftforge.common.DimensionManager;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.common.capabilities.ICapabilityProvider;
import net.minecraftforge.energy.CapabilityEnergy;
import net.minecraftforge.energy.IEnergyStorage;
import javax.annotation.Nullable;
import java.util.List;
public abstract class ItemNetworkItem extends ItemBase implements INetworkItemProvider {
public static final int TYPE_NORMAL = 0;
public static final int TYPE_CREATIVE = 1;
public abstract class ItemNetworkItem extends ItemEnergyItem implements INetworkItemProvider {
private static final String NBT_CONTROLLER_X = "ControllerX";
private static final String NBT_CONTROLLER_Y = "ControllerY";
private static final String NBT_CONTROLLER_Z = "ControllerZ";
@@ -41,10 +26,6 @@ public abstract class ItemNetworkItem extends ItemBase implements INetworkItemPr
public ItemNetworkItem(String name) {
super(name);
setMaxDamage(3200);
setMaxStackSize(1);
setHasSubtypes(true);
addPropertyOverride(new ResourceLocation("connected"), (stack, world, entity) -> (entity != null && isValid(stack)) ? 1.0f : 0.0f);
}
@@ -71,69 +52,10 @@ public abstract class ItemNetworkItem extends ItemBase implements INetworkItemPr
return ActionResult.newResult(EnumActionResult.SUCCESS, stack);
}
@Override
public ICapabilityProvider initCapabilities(ItemStack stack, NBTTagCompound nbt) {
return new NetworkItemCapabilityProvider(stack);
}
@Override
public boolean isDamageable() {
return true;
}
@Override
public boolean isRepairable() {
return false;
}
@Override
public double getDurabilityForDisplay(ItemStack stack) {
IEnergyStorage energy = stack.getCapability(CapabilityEnergy.ENERGY, null);
return 1D - ((double) energy.getEnergyStored() / (double) energy.getMaxEnergyStored());
}
@Override
public int getRGBDurabilityForDisplay(ItemStack stack) {
IEnergyStorage energy = stack.getCapability(CapabilityEnergy.ENERGY, null);
return MathHelper.hsvToRGB(Math.max(0.0F, (float) energy.getEnergyStored() / (float) energy.getMaxEnergyStored()) / 3.0F, 1.0F, 1.0F);
}
@Override
public boolean isDamaged(ItemStack stack) {
return stack.getItemDamage() != TYPE_CREATIVE;
}
@Override
public void setDamage(ItemStack stack, int damage) {
// NO OP
}
@Override
public void getSubItems(Item item, CreativeTabs tab, NonNullList<ItemStack> list) {
list.add(new ItemStack(item, 1, TYPE_NORMAL));
ItemStack fullyCharged = new ItemStack(item, 1, TYPE_NORMAL);
IEnergyStorage energy = fullyCharged.getCapability(CapabilityEnergy.ENERGY, null);
energy.receiveEnergy(energy.getMaxEnergyStored(), false);
list.add(fullyCharged);
list.add(new ItemStack(item, 1, TYPE_CREATIVE));
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List<String> tooltip, boolean advanced) {
super.addInformation(stack, player, tooltip, advanced);
if (stack.getItemDamage() != TYPE_CREATIVE) {
IEnergyStorage energy = stack.getCapability(CapabilityEnergy.ENERGY, null);
tooltip.add(I18n.format("misc.refinedstorage:energy_stored", energy.getEnergyStored(), energy.getMaxEnergyStored()));
}
if (isValid(stack)) {
tooltip.add(I18n.format("misc.refinedstorage:network_item.tooltip", getX(stack), getY(stack), getZ(stack)));
}
@@ -157,7 +79,7 @@ public abstract class ItemNetworkItem extends ItemBase implements INetworkItemPr
tag.setInteger(NBT_CONTROLLER_Z, pos.getZ());
tag.setInteger(NBT_DIMENSION_ID, player.dimension);
initializeDefaults(tag);
initDefaults(tag);
stack.setTagCompound(tag);
@@ -167,7 +89,7 @@ public abstract class ItemNetworkItem extends ItemBase implements INetworkItemPr
return EnumActionResult.PASS;
}
public void initializeDefaults(NBTTagCompound tag) {
protected void initDefaults(NBTTagCompound tag) {
// NO OP
}
@@ -207,37 +129,4 @@ public abstract class ItemNetworkItem extends ItemBase implements INetworkItemPr
&& stack.getTagCompound().hasKey(NBT_CONTROLLER_Z)
&& stack.getTagCompound().hasKey(NBT_DIMENSION_ID);
}
private class NetworkItemCapabilityProvider implements ICapabilityProvider {
private ItemStack stack;
public NetworkItemCapabilityProvider(ItemStack stack) {
this.stack = stack;
}
@Override
public boolean hasCapability(Capability<?> capability, @Nullable EnumFacing facing) {
return capability == CapabilityEnergy.ENERGY ||
(IntegrationTesla.isLoaded() && (capability == TeslaCapabilities.CAPABILITY_HOLDER || capability == TeslaCapabilities.CAPABILITY_CONSUMER));
}
@Override
public <T> T getCapability(Capability<T> capability, @Nullable EnumFacing facing) {
if (capability == CapabilityEnergy.ENERGY) {
return CapabilityEnergy.ENERGY.cast(new NetworkItemEnergyForge(stack, 3200));
}
if (IntegrationTesla.isLoaded()) {
if (capability == TeslaCapabilities.CAPABILITY_HOLDER) {
return TeslaCapabilities.CAPABILITY_HOLDER.cast(new NetworkItemEnergyTesla(stack));
}
if (capability == TeslaCapabilities.CAPABILITY_CONSUMER) {
return TeslaCapabilities.CAPABILITY_CONSUMER.cast(new NetworkItemEnergyTesla(stack));
}
}
return null;
}
}
}

View File

@@ -0,0 +1,7 @@
package com.raoulvdberge.refinedstorage.item;
public class ItemPortableGrid extends ItemEnergyItem {
public ItemPortableGrid() {
super("portable_grid");
}
}

View File

@@ -17,8 +17,8 @@ public class ItemWirelessCraftingMonitor extends ItemNetworkItem {
}
@Override
public void initializeDefaults(NBTTagCompound tag) {
super.initializeDefaults(tag);
public void initDefaults(NBTTagCompound tag) {
super.initDefaults(tag);
tag.setBoolean(NBT_VIEW_AUTOMATED, true);
}

View File

@@ -16,8 +16,8 @@ public class ItemWirelessFluidGrid extends ItemNetworkItem {
}
@Override
public void initializeDefaults(NBTTagCompound tag) {
super.initializeDefaults(tag);
public void initDefaults(NBTTagCompound tag) {
super.initDefaults(tag);
tag.setInteger(NetworkNodeGrid.NBT_SORTING_DIRECTION, NetworkNodeGrid.SORTING_DIRECTION_DESCENDING);
tag.setInteger(NetworkNodeGrid.NBT_SORTING_TYPE, NetworkNodeGrid.SORTING_TYPE_QUANTITY);

View File

@@ -16,8 +16,8 @@ public class ItemWirelessGrid extends ItemNetworkItem {
}
@Override
public void initializeDefaults(NBTTagCompound tag) {
super.initializeDefaults(tag);
public void initDefaults(NBTTagCompound tag) {
super.initDefaults(tag);
tag.setInteger(NetworkNodeGrid.NBT_VIEW_TYPE, NetworkNodeGrid.VIEW_TYPE_NORMAL);
tag.setInteger(NetworkNodeGrid.NBT_SORTING_DIRECTION, NetworkNodeGrid.SORTING_DIRECTION_DESCENDING);

View File

@@ -207,6 +207,7 @@ public class ProxyCommon {
registerItem(RSItems.NETWORK_CARD);
registerItem(RSItems.WRENCH);
registerItem(RSItems.SECURITY_CARD);
registerItem(RSItems.PORTABLE_GRID);
OreDictionary.registerOre("itemSilicon", RSItems.SILICON);