From b848c40d9ec249c47016b67facc7f7ff4d1fc76e Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Wed, 18 Sep 2019 21:42:15 +0200 Subject: [PATCH] Make controller block a capprovider for energy. Pass energy value to block on place. --- .../refinedstorage/block/ControllerBlock.java | 36 +++++---- .../block/MachineCasingBlock.java | 1 + .../block/QuartzEnrichedIronBlock.java | 1 + .../refinedstorage/item/EnergyItem.java | 25 +------ .../item/blockitem/ControllerBlockItem.java | 66 +---------------- .../item/blockitem/EnergyBlockItem.java | 73 +++++++++++++++++++ 6 files changed, 102 insertions(+), 100 deletions(-) create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/item/blockitem/EnergyBlockItem.java diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/ControllerBlock.java b/src/main/java/com/raoulvdberge/refinedstorage/block/ControllerBlock.java index fb538c4c6..6db24255d 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/ControllerBlock.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/ControllerBlock.java @@ -5,16 +5,22 @@ import com.raoulvdberge.refinedstorage.tile.ControllerTile; import com.raoulvdberge.refinedstorage.util.BlockUtils; import net.minecraft.block.Block; import net.minecraft.block.BlockState; +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.ItemStack; import net.minecraft.state.EnumProperty; import net.minecraft.state.StateContainer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockRenderLayer; import net.minecraft.util.IStringSerializable; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockReader; +import net.minecraft.world.World; +import net.minecraftforge.energy.CapabilityEnergy; import javax.annotation.Nullable; // TODO - Fullbright models +// TODO DROPS public class ControllerBlock extends Block { public enum Type { NORMAL, @@ -83,27 +89,27 @@ public class ControllerBlock extends Block { return new ControllerTile(type); } + @Override + public void onBlockPlacedBy(World world, BlockPos pos, BlockState state, @Nullable LivingEntity entity, ItemStack stack) { + super.onBlockPlacedBy(world, pos, state, entity, stack); + + if (!world.isRemote) { + stack.getCapability(CapabilityEnergy.ENERGY).ifPresent(energyFromStack -> { + TileEntity tile = world.getTileEntity(pos); + + if (tile != null) { + tile.getCapability(CapabilityEnergy.ENERGY).ifPresent(energyFromTile -> energyFromTile.receiveEnergy(energyFromStack.getEnergyStored(), false)); + } + }); + } + } + /* @Override public boolean onBlockActivated(World world, BlockPos pos, BlockState state, PlayerEntity player, EnumHand hand, Direction side, float hitX, float hitY, float hitZ) { return openNetworkGui(RSGui.CONTROLLER, player, world, pos, side); } - @Override - public void onBlockPlacedBy(World world, BlockPos pos, BlockState state, EntityLivingBase player, ItemStack stack) { - if (!world.isRemote) { - TileController controller = (TileController) world.getTileEntity(pos); - - CompoundNBT tag = stack.getTagCompound(); - - if (tag != null && tag.hasKey(TileController.NBT_ENERGY)) { - controller.getEnergy().setStored(tag.getInteger(TileController.NBT_ENERGY)); - } - } - - super.onBlockPlacedBy(world, pos, state, player, stack); - } - @Override public void getDrops(NonNullList drops, IBlockAccess world, BlockPos pos, BlockState state, int fortune) { ItemStack stack = new ItemStack(this, 1, getMetaFromState(state)); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/MachineCasingBlock.java b/src/main/java/com/raoulvdberge/refinedstorage/block/MachineCasingBlock.java index 5198cff21..b6193a7c8 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/MachineCasingBlock.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/MachineCasingBlock.java @@ -4,6 +4,7 @@ import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.util.BlockUtils; import net.minecraft.block.Block; +// TODO DROPS public class MachineCasingBlock extends Block { public MachineCasingBlock() { super(BlockUtils.DEFAULT_ROCK_PROPERTIES); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/QuartzEnrichedIronBlock.java b/src/main/java/com/raoulvdberge/refinedstorage/block/QuartzEnrichedIronBlock.java index f27accbae..6db4786c3 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/QuartzEnrichedIronBlock.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/QuartzEnrichedIronBlock.java @@ -4,6 +4,7 @@ import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.util.BlockUtils; import net.minecraft.block.Block; +// TODO DROPS public class QuartzEnrichedIronBlock extends Block { public QuartzEnrichedIronBlock() { super(BlockUtils.DEFAULT_ROCK_PROPERTIES); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/EnergyItem.java b/src/main/java/com/raoulvdberge/refinedstorage/item/EnergyItem.java index 9db661fc7..bb8a88d9e 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/item/EnergyItem.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/item/EnergyItem.java @@ -23,7 +23,7 @@ public abstract class EnergyItem extends Item { private final boolean creative; public EnergyItem(Item.Properties properties, boolean creative, int energyCapacity) { - super(properties.maxDamage(energyCapacity).maxStackSize(1)); + super(properties); this.creative = creative; this.energyCapacity = energyCapacity; @@ -35,13 +35,8 @@ public abstract class EnergyItem extends Item { } @Override - public boolean isDamageable() { - return true; - } - - @Override - public boolean getIsRepairable(ItemStack a, ItemStack b) { - return false; + public boolean showDurabilityBar(ItemStack stack) { + return !creative; } @Override @@ -64,24 +59,12 @@ public abstract class EnergyItem extends Item { 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 !creative; - } - - @Override - public void setDamage(ItemStack stack, int damage) { - // NO OP - } - @Override public void addInformation(ItemStack stack, @Nullable World world, List tooltip, ITooltipFlag flag) { super.addInformation(stack, world, tooltip, flag); if (!creative) { - stack.getCapability(CapabilityEnergy.ENERGY, null).ifPresent(energy -> { - tooltip.add(new TranslationTextComponent("misc.refinedstorage.energy_stored", energy.getEnergyStored(), energy.getMaxEnergyStored()).setStyle(new Style().setColor(TextFormatting.GRAY))); - }); + stack.getCapability(CapabilityEnergy.ENERGY, null).ifPresent(energy -> tooltip.add(new TranslationTextComponent("misc.refinedstorage.energy_stored", energy.getEnergyStored(), energy.getMaxEnergyStored()).setStyle(new Style().setColor(TextFormatting.GRAY)))); } } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/blockitem/ControllerBlockItem.java b/src/main/java/com/raoulvdberge/refinedstorage/item/blockitem/ControllerBlockItem.java index b56f2d7e1..62122b1e1 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/item/blockitem/ControllerBlockItem.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/item/blockitem/ControllerBlockItem.java @@ -2,74 +2,12 @@ package com.raoulvdberge.refinedstorage.item.blockitem; import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.block.ControllerBlock; -import com.raoulvdberge.refinedstorage.tile.ControllerTile; -import net.minecraft.client.util.ITooltipFlag; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.BlockItem; import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.Style; -import net.minecraft.util.text.TextFormatting; -import net.minecraft.util.text.TranslationTextComponent; -import net.minecraft.world.World; - -import javax.annotation.Nullable; -import java.util.List; - -// TODO: Convert to energy cap. -public class ControllerBlockItem extends BlockItem { - private ControllerBlock controller; +public class ControllerBlockItem extends EnergyBlockItem { public ControllerBlockItem(ControllerBlock block) { - super(block, new Item.Properties().group(RS.MAIN_GROUP).maxStackSize(1)); + super(block, new Item.Properties().group(RS.MAIN_GROUP).maxStackSize(1), block.getType() == ControllerBlock.Type.CREATIVE, () -> RS.CONFIG.getController().getCapacity()); - this.controller = block; this.setRegistryName(block.getRegistryName()); } - - @Override - public double getDurabilityForDisplay(ItemStack stack) { - return 1D - ((double) getEnergyStored(stack) / (double) RS.CONFIG.getController().getCapacity()); - } - - @Override - public int getRGBDurabilityForDisplay(ItemStack stack) { - return MathHelper.hsvToRGB(Math.max(0.0F, (float) getEnergyStored(stack) / (float) RS.CONFIG.getController().getCapacity()) / 3.0F, 1.0F, 1.0F); - } - - @Override - public boolean showDurabilityBar(ItemStack stack) { - return controller.getType() != ControllerBlock.Type.CREATIVE; - } - - @Override - public void addInformation(ItemStack stack, @Nullable World world, List tooltip, ITooltipFlag flag) { - super.addInformation(stack, world, tooltip, flag); - - if (controller.getType() != ControllerBlock.Type.CREATIVE) { - tooltip.add(new TranslationTextComponent("misc.refinedstorage.energy_stored", getEnergyStored(stack), RS.CONFIG.getController().getCapacity()).setStyle(new Style().setColor(TextFormatting.GRAY))); - } - } - - public static int getEnergyStored(ItemStack stack) { - return (stack.hasTag() && stack.getTag().contains(ControllerTile.NBT_ENERGY)) ? stack.getTag().getInt(ControllerTile.NBT_ENERGY) : 0; - } - - @Override - public void onCreated(ItemStack stack, World world, PlayerEntity player) { - super.onCreated(stack, world, player); - - CompoundNBT tag = stack.getTag(); - - if (tag == null) { - tag = new CompoundNBT(); - } - - tag.putInt(ControllerTile.NBT_ENERGY, 0); - - stack.setTag(tag); - } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/blockitem/EnergyBlockItem.java b/src/main/java/com/raoulvdberge/refinedstorage/item/blockitem/EnergyBlockItem.java new file mode 100644 index 000000000..4d7d2446d --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/item/blockitem/EnergyBlockItem.java @@ -0,0 +1,73 @@ +package com.raoulvdberge.refinedstorage.item.blockitem; + +import com.raoulvdberge.refinedstorage.item.capabilityprovider.CapabilityProviderEnergy; +import net.minecraft.block.Block; +import net.minecraft.client.util.ITooltipFlag; +import net.minecraft.item.BlockItem; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.text.ITextComponent; +import net.minecraft.util.text.Style; +import net.minecraft.util.text.TextFormatting; +import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.world.World; +import net.minecraftforge.common.capabilities.ICapabilityProvider; +import net.minecraftforge.energy.CapabilityEnergy; +import net.minecraftforge.energy.IEnergyStorage; + +import javax.annotation.Nullable; +import java.util.List; +import java.util.function.Supplier; + +public abstract class EnergyBlockItem extends BlockItem { + private final Supplier energyCapacity; + private final boolean creative; + + public EnergyBlockItem(Block block, Item.Properties properties, boolean creative, Supplier energyCapacity) { + super(block, properties); + + this.creative = creative; + this.energyCapacity = energyCapacity; + } + + @Override + public ICapabilityProvider initCapabilities(ItemStack stack, CompoundNBT tag) { + return new CapabilityProviderEnergy(stack, energyCapacity.get()); + } + + @Override + public boolean showDurabilityBar(ItemStack stack) { + return !creative; + } + + @Override + public double getDurabilityForDisplay(ItemStack stack) { + IEnergyStorage energy = stack.getCapability(CapabilityEnergy.ENERGY).orElse(null); + if (energy == null) { + return 0; + } + + return 1D - ((double) energy.getEnergyStored() / (double) energy.getMaxEnergyStored()); + } + + @Override + public int getRGBDurabilityForDisplay(ItemStack stack) { + IEnergyStorage energy = stack.getCapability(CapabilityEnergy.ENERGY, null).orElse(null); + if (energy == null) { + return super.getRGBDurabilityForDisplay(stack); + } + + return MathHelper.hsvToRGB(Math.max(0.0F, (float) energy.getEnergyStored() / (float) energy.getMaxEnergyStored()) / 3.0F, 1.0F, 1.0F); + } + + @Override + public void addInformation(ItemStack stack, @Nullable World world, List tooltip, ITooltipFlag flag) { + super.addInformation(stack, world, tooltip, flag); + + if (!creative) { + stack.getCapability(CapabilityEnergy.ENERGY, null).ifPresent(energy -> tooltip.add(new TranslationTextComponent("misc.refinedstorage.energy_stored", energy.getEnergyStored(), energy.getMaxEnergyStored()).setStyle(new Style().setColor(TextFormatting.GRAY)))); + } + } +}