/* * This file is part of TechReborn, licensed under the MIT License (MIT). * * Copyright (c) 2020 TechReborn * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ package techreborn.items; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.item.TooltipContext; import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; import net.minecraft.text.Text; import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; import net.minecraft.util.TypedActionResult; import net.minecraft.util.collection.DefaultedList; import net.minecraft.world.World; import org.jetbrains.annotations.Nullable; import reborncore.common.powerSystem.PowerSystem; import reborncore.common.util.ItemDurabilityExtensions; import reborncore.common.util.ItemUtils; import team.reborn.energy.EnergyHolder; import team.reborn.energy.EnergyTier; import techreborn.TechReborn; import techreborn.utils.InitUtils; import techreborn.utils.MessageIDs; import java.util.List; public class BatteryItem extends Item implements EnergyHolder, ItemDurabilityExtensions { private final int maxEnergy; private final EnergyTier tier; public BatteryItem(int maxEnergy, EnergyTier tier) { super(new Item.Settings().group(TechReborn.ITEMGROUP).maxCount(1).maxDamageIfAbsent(1)); this.maxEnergy = maxEnergy; this.tier = tier; } // Item @Override public TypedActionResult use(final World world, final PlayerEntity player, final Hand hand) { final ItemStack stack = player.getStackInHand(hand); if (player.isSneaking()) { ItemUtils.switchActive(stack, 1, world.isClient, MessageIDs.poweredToolID); return new TypedActionResult<>(ActionResult.SUCCESS, stack); } return new TypedActionResult<>(ActionResult.PASS, stack); } @Override public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { ItemUtils.checkActive(stack, 1, entity.world.isClient, MessageIDs.poweredToolID); if (world.isClient) { return; } if (!ItemUtils.isActive(stack)){ return; } if (entity instanceof PlayerEntity) { ItemUtils.distributePowerToInventory((PlayerEntity) entity, stack, tier.getMaxOutput()); } } @Environment(EnvType.CLIENT) @Override public void appendTooltip(ItemStack stack, @Nullable World worldIn, List tooltip, TooltipContext flagIn) { ItemUtils.buildActiveTooltip(stack, tooltip); } @Override public void appendStacks(ItemGroup group, DefaultedList stacks) { if (!isIn(group)) { return; } InitUtils.initPoweredItems(this, stacks); } // EnergyHolder @Override public double getMaxStoredPower() { return maxEnergy; } @Override public EnergyTier getTier() { return tier; } // ItemDurabilityExtensions @Override public double getDurability(ItemStack stack) { return 1 - ItemUtils.getPowerForDurabilityBar(stack); } @Override public boolean showDurability(ItemStack stack) { return true; } @Override public int getDurabilityColor(ItemStack stack) { return PowerSystem.getDisplayPower().colour; } }