Make electric tools enchantable on table. Closes #1944
This commit is contained in:
parent
0f56adbc9e
commit
1d053bb592
6 changed files with 96 additions and 75 deletions
|
@ -24,14 +24,15 @@
|
||||||
|
|
||||||
package techreborn.items.tool;
|
package techreborn.items.tool;
|
||||||
|
|
||||||
import net.fabricmc.api.EnvType;
|
|
||||||
import net.fabricmc.api.Environment;
|
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
import net.minecraft.block.Material;
|
import net.minecraft.block.Material;
|
||||||
import net.minecraft.enchantment.EnchantmentHelper;
|
import net.minecraft.enchantment.EnchantmentHelper;
|
||||||
import net.minecraft.enchantment.Enchantments;
|
import net.minecraft.enchantment.Enchantments;
|
||||||
import net.minecraft.entity.LivingEntity;
|
import net.minecraft.entity.LivingEntity;
|
||||||
import net.minecraft.item.*;
|
import net.minecraft.item.AxeItem;
|
||||||
|
import net.minecraft.item.Item;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.item.ToolMaterials;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
@ -44,7 +45,6 @@ import team.reborn.energy.EnergySide;
|
||||||
import team.reborn.energy.EnergyTier;
|
import team.reborn.energy.EnergyTier;
|
||||||
import techreborn.TechReborn;
|
import techreborn.TechReborn;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
public class ChainsawItem extends AxeItem implements EnergyHolder, ItemDurabilityExtensions {
|
public class ChainsawItem extends AxeItem implements EnergyHolder, ItemDurabilityExtensions {
|
||||||
|
@ -53,26 +53,21 @@ public class ChainsawItem extends AxeItem implements EnergyHolder, ItemDurabilit
|
||||||
public int cost = 250;
|
public int cost = 250;
|
||||||
public float poweredSpeed = 20F;
|
public float poweredSpeed = 20F;
|
||||||
public int transferLimit = 100;
|
public int transferLimit = 100;
|
||||||
public boolean isBreaking = false;
|
|
||||||
|
|
||||||
public ChainsawItem(ToolMaterials material, int energyCapacity, float unpoweredSpeed) {
|
public ChainsawItem(ToolMaterials material, int energyCapacity, float unpoweredSpeed) {
|
||||||
super(material, (int) material.getAttackDamage(), unpoweredSpeed, new Item.Settings().group(TechReborn.ITEMGROUP).maxCount(1));
|
super(material, (int) material.getAttackDamage(), unpoweredSpeed, new Item.Settings().group(TechReborn.ITEMGROUP).maxCount(1));
|
||||||
this.maxCharge = energyCapacity;
|
this.maxCharge = energyCapacity;
|
||||||
|
|
||||||
this.addPropertyGetter(new Identifier("techreborn", "animated"), new ItemPropertyGetter() {
|
this.addPropertyGetter(new Identifier("techreborn", "animated"), (stack, worldIn, entityIn) -> {
|
||||||
@Override
|
if (!stack.isEmpty() && Energy.of(stack).getEnergy() >= cost
|
||||||
@Environment(EnvType.CLIENT)
|
&& entityIn != null && entityIn.getMainHandStack().equals(stack)) {
|
||||||
public float call(ItemStack stack, @Nullable World worldIn, @Nullable LivingEntity entityIn) {
|
return 1.0F;
|
||||||
if (!stack.isEmpty() && Energy.of(stack).getEnergy() >= cost
|
|
||||||
&& entityIn != null && entityIn.getMainHandStack().equals(stack)) {
|
|
||||||
return 1.0F;
|
|
||||||
}
|
|
||||||
return 0.0F;
|
|
||||||
}
|
}
|
||||||
|
return 0.0F;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// ItemAxe
|
// AxeItem
|
||||||
@Override
|
@Override
|
||||||
public float getMiningSpeed(ItemStack stack, BlockState state) {
|
public float getMiningSpeed(ItemStack stack, BlockState state) {
|
||||||
if (Energy.of(stack).getEnergy() >= cost
|
if (Energy.of(stack).getEnergy() >= cost
|
||||||
|
@ -82,7 +77,7 @@ public class ChainsawItem extends AxeItem implements EnergyHolder, ItemDurabilit
|
||||||
return super.getMiningSpeed(stack, state);
|
return super.getMiningSpeed(stack, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ItemTool
|
// MiningToolItem
|
||||||
@Override
|
@Override
|
||||||
public boolean postMine(ItemStack stack, World worldIn, BlockState blockIn, BlockPos pos, LivingEntity entityLiving) {
|
public boolean postMine(ItemStack stack, World worldIn, BlockState blockIn, BlockPos pos, LivingEntity entityLiving) {
|
||||||
Random rand = new Random();
|
Random rand = new Random();
|
||||||
|
@ -97,6 +92,22 @@ public class ChainsawItem extends AxeItem implements EnergyHolder, ItemDurabilit
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ToolItem
|
||||||
|
@Override
|
||||||
|
public boolean canRepair(ItemStack itemStack_1, ItemStack itemStack_2) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Item
|
||||||
|
@Override
|
||||||
|
public boolean isDamageable() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isEnchantable(ItemStack stack) { return true; }
|
||||||
|
|
||||||
|
// ItemDurabilityExtensions
|
||||||
@Override
|
@Override
|
||||||
public double getDurability(ItemStack stack) {
|
public double getDurability(ItemStack stack) {
|
||||||
return 1 - ItemUtils.getPowerForDurabilityBar(stack);
|
return 1 - ItemUtils.getPowerForDurabilityBar(stack);
|
||||||
|
@ -112,12 +123,7 @@ public class ChainsawItem extends AxeItem implements EnergyHolder, ItemDurabilit
|
||||||
return PowerSystem.getDisplayPower().colour;
|
return PowerSystem.getDisplayPower().colour;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
// EnergyHolder
|
||||||
public boolean canRepair(ItemStack itemStack_1, ItemStack itemStack_2) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// IEnergyItemInfo
|
|
||||||
@Override
|
@Override
|
||||||
public double getMaxStoredPower() {
|
public double getMaxStoredPower() {
|
||||||
return maxCharge;
|
return maxCharge;
|
||||||
|
@ -137,9 +143,4 @@ public class ChainsawItem extends AxeItem implements EnergyHolder, ItemDurabilit
|
||||||
public double getMaxOutput(EnergySide side) {
|
public double getMaxOutput(EnergySide side) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getEnchantability() {
|
|
||||||
return 20;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,7 +71,7 @@ public class DrillItem extends PickaxeItem implements EnergyHolder, ItemDurabili
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ItemTool
|
// MiningToolItem
|
||||||
@Override
|
@Override
|
||||||
public boolean postMine(ItemStack stack, World worldIn, BlockState blockIn, BlockPos pos, LivingEntity entityLiving) {
|
public boolean postMine(ItemStack stack, World worldIn, BlockState blockIn, BlockPos pos, LivingEntity entityLiving) {
|
||||||
Random rand = new Random();
|
Random rand = new Random();
|
||||||
|
@ -86,17 +86,21 @@ public class DrillItem extends PickaxeItem implements EnergyHolder, ItemDurabili
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Item
|
// ToolItem
|
||||||
@Override
|
@Override
|
||||||
public boolean canRepair(ItemStack itemStack_1, ItemStack itemStack_2) {
|
public boolean canRepair(ItemStack itemStack_1, ItemStack itemStack_2) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Item
|
||||||
@Override
|
@Override
|
||||||
public boolean isDamageable() {
|
public boolean isDamageable() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isEnchantable(ItemStack stack) { return true; }
|
||||||
|
|
||||||
// ItemDurabilityExtensions
|
// ItemDurabilityExtensions
|
||||||
@Override
|
@Override
|
||||||
public double getDurability(ItemStack stack) {
|
public double getDurability(ItemStack stack) {
|
||||||
|
|
|
@ -88,6 +88,10 @@ public class JackhammerItem extends PickaxeItem implements EnergyHolder, ItemDur
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Item
|
||||||
|
@Override
|
||||||
|
public boolean isEnchantable(ItemStack stack) { return true; }
|
||||||
|
|
||||||
// ItemDurabilityExtensions
|
// ItemDurabilityExtensions
|
||||||
@Override
|
@Override
|
||||||
public double getDurability(ItemStack stack) {
|
public double getDurability(ItemStack stack) {
|
||||||
|
|
|
@ -62,10 +62,7 @@ public class RockCutterItem extends PickaxeItem implements EnergyHolder, ItemDur
|
||||||
// PickaxeItem
|
// PickaxeItem
|
||||||
@Override
|
@Override
|
||||||
public boolean isEffectiveOn(BlockState state) {
|
public boolean isEffectiveOn(BlockState state) {
|
||||||
if (Items.DIAMOND_PICKAXE.isEffectiveOn(state)) {
|
return Items.DIAMOND_PICKAXE.isEffectiveOn(state);
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -111,6 +108,9 @@ public class RockCutterItem extends PickaxeItem implements EnergyHolder, ItemDur
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isEnchantable(ItemStack stack) { return true; }
|
||||||
|
|
||||||
@Environment(EnvType.CLIENT)
|
@Environment(EnvType.CLIENT)
|
||||||
@Override
|
@Override
|
||||||
public void appendStacks(ItemGroup par2ItemGroup, DefaultedList<ItemStack> itemList) {
|
public void appendStacks(ItemGroup par2ItemGroup, DefaultedList<ItemStack> itemList) {
|
||||||
|
|
|
@ -63,40 +63,33 @@ public class NanosaberItem extends SwordItem implements EnergyHolder, ItemDurabi
|
||||||
// 4M FE max charge with 1k charge rate
|
// 4M FE max charge with 1k charge rate
|
||||||
public NanosaberItem() {
|
public NanosaberItem() {
|
||||||
super(ToolMaterials.DIAMOND, 1, 1, new Item.Settings().group(TechReborn.ITEMGROUP).maxCount(1));
|
super(ToolMaterials.DIAMOND, 1, 1, new Item.Settings().group(TechReborn.ITEMGROUP).maxCount(1));
|
||||||
this.addPropertyGetter(new Identifier("techreborn:active"), new ItemPropertyGetter() {
|
this.addPropertyGetter(new Identifier("techreborn:active"), (stack, worldIn, entityIn) -> {
|
||||||
@Override
|
if (ItemUtils.isActive(stack)) {
|
||||||
@Environment(EnvType.CLIENT)
|
if (Energy.of(stack).getMaxStored() - Energy.of(stack).getEnergy() >= 0.9 * Energy.of(stack).getMaxStored()) {
|
||||||
public float call(ItemStack stack,
|
return 0.5F;
|
||||||
@Nullable
|
|
||||||
World worldIn,
|
|
||||||
@Nullable
|
|
||||||
LivingEntity entityIn) {
|
|
||||||
if (ItemUtils.isActive(stack)) {
|
|
||||||
if (Energy.of(stack).getMaxStored() - Energy.of(stack).getEnergy() >= 0.9 * Energy.of(stack).getMaxStored()) {
|
|
||||||
return 0.5F;
|
|
||||||
}
|
|
||||||
return 1.0F;
|
|
||||||
}
|
}
|
||||||
return 0.0F;
|
return 1.0F;
|
||||||
}
|
}
|
||||||
|
return 0.0F;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// ItemSword
|
// SwordItem
|
||||||
@Override
|
@Override
|
||||||
public boolean postHit(ItemStack stack, LivingEntity entityHit, LivingEntity entityHitter) {
|
public boolean postHit(ItemStack stack, LivingEntity entityHit, LivingEntity entityHitter) {
|
||||||
return Energy.of(stack).use(cost);
|
return Energy.of(stack).use(cost);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ToolItem
|
||||||
@Override
|
@Override
|
||||||
public void getAttributeModifiers(EquipmentSlot slot, ItemStack stack, Multimap<String, EntityAttributeModifier> attributes) {
|
public boolean canRepair(ItemStack itemStack_1, ItemStack itemStack_2) {
|
||||||
attributes.removeAll(EntityAttributes.ATTACK_DAMAGE.getId());
|
return false;
|
||||||
attributes.removeAll(EntityAttributes.ATTACK_SPEED.getId());
|
}
|
||||||
|
|
||||||
if (slot== EquipmentSlot.MAINHAND && ItemUtils.isActive(stack)) {
|
// Item
|
||||||
attributes.put(EntityAttributes.ATTACK_DAMAGE.getId(), new EntityAttributeModifier(ATTACK_DAMAGE_MODIFIER_UUID, "Weapon modifier", 12, EntityAttributeModifier.Operation.ADDITION));
|
@Override
|
||||||
attributes.put(EntityAttributes.ATTACK_SPEED.getId(), new EntityAttributeModifier(ATTACK_SPEED_MODIFIER_UUID, "Weapon modifier", 3, EntityAttributeModifier.Operation.ADDITION));
|
public void inventoryTick(ItemStack stack, World worldIn, Entity entityIn, int itemSlot, boolean isSelected) {
|
||||||
}
|
ItemUtils.checkActive(stack, cost, entityIn.world.isClient, MessageIDs.poweredToolID);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -110,29 +103,12 @@ public class NanosaberItem extends SwordItem implements EnergyHolder, ItemDurabi
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void inventoryTick(ItemStack stack, World worldIn, Entity entityIn, int itemSlot, boolean isSelected) {
|
public boolean isDamageable() {
|
||||||
ItemUtils.checkActive(stack, cost, entityIn.world.isClient, MessageIDs.poweredToolID);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canRepair(ItemStack itemStack_1, ItemStack itemStack_2) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getDurability(ItemStack stack) {
|
public boolean isEnchantable(ItemStack stack) { return true; }
|
||||||
return 1 - ItemUtils.getPowerForDurabilityBar(stack);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean showDurability(ItemStack stack) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getDurabilityColor(ItemStack stack) {
|
|
||||||
return PowerSystem.getDisplayPower().colour;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Environment(EnvType.CLIENT)
|
@Environment(EnvType.CLIENT)
|
||||||
@Override
|
@Override
|
||||||
|
@ -166,7 +142,7 @@ public class NanosaberItem extends SwordItem implements EnergyHolder, ItemDurabi
|
||||||
ItemUtils.buildActiveTooltip(stack, tooltip);
|
ItemUtils.buildActiveTooltip(stack, tooltip);
|
||||||
}
|
}
|
||||||
|
|
||||||
// IEnergyItemInfo
|
// EnergyHolder
|
||||||
@Override
|
@Override
|
||||||
public double getMaxStoredPower() {
|
public double getMaxStoredPower() {
|
||||||
return maxCharge;
|
return maxCharge;
|
||||||
|
@ -186,4 +162,32 @@ public class NanosaberItem extends SwordItem implements EnergyHolder, ItemDurabi
|
||||||
public double getMaxOutput(EnergySide side) {
|
public double getMaxOutput(EnergySide side) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ItemStackModifiers
|
||||||
|
@Override
|
||||||
|
public void getAttributeModifiers(EquipmentSlot slot, ItemStack stack, Multimap<String, EntityAttributeModifier> attributes) {
|
||||||
|
attributes.removeAll(EntityAttributes.ATTACK_DAMAGE.getId());
|
||||||
|
attributes.removeAll(EntityAttributes.ATTACK_SPEED.getId());
|
||||||
|
|
||||||
|
if (slot== EquipmentSlot.MAINHAND && ItemUtils.isActive(stack)) {
|
||||||
|
attributes.put(EntityAttributes.ATTACK_DAMAGE.getId(), new EntityAttributeModifier(ATTACK_DAMAGE_MODIFIER_UUID, "Weapon modifier", 12, EntityAttributeModifier.Operation.ADDITION));
|
||||||
|
attributes.put(EntityAttributes.ATTACK_SPEED.getId(), new EntityAttributeModifier(ATTACK_SPEED_MODIFIER_UUID, "Weapon modifier", 3, EntityAttributeModifier.Operation.ADDITION));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -110,6 +110,14 @@ public class OmniToolItem extends PickaxeItem implements EnergyHolder, ItemDurab
|
||||||
return TorchHelper.placeTorch(context);
|
return TorchHelper.placeTorch(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isDamageable() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isEnchantable(ItemStack stack) { return true; }
|
||||||
|
|
||||||
@Environment(EnvType.CLIENT)
|
@Environment(EnvType.CLIENT)
|
||||||
@Override
|
@Override
|
||||||
public void appendStacks(ItemGroup par2ItemGroup, DefaultedList<ItemStack> itemList) {
|
public void appendStacks(ItemGroup par2ItemGroup, DefaultedList<ItemStack> itemList) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue