Make electric tools enchantable on table. Closes #1944

This commit is contained in:
drcrazy 2020-01-08 16:45:33 +03:00
parent 0f56adbc9e
commit 1d053bb592
6 changed files with 96 additions and 75 deletions

View file

@ -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;
}
} }

View file

@ -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) {

View file

@ -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) {

View file

@ -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) {

View file

@ -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));
}
}
} }

View file

@ -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) {