Begin ability refactor, rewrite tool harvest abilities

This commit is contained in:
abel1502 2025-05-15 01:30:10 +03:00
parent caf416a27d
commit 2982dd1f58
No known key found for this signature in database
GPG Key ID: 076926596A536338
10 changed files with 450 additions and 31 deletions

View File

@ -15,7 +15,7 @@ import com.hbm.inventory.recipes.CrystallizerRecipes;
import com.hbm.inventory.recipes.CrystallizerRecipes.CrystallizerRecipe;
import com.hbm.inventory.recipes.ShredderRecipes;
import com.hbm.items.ModItems;
import com.hbm.items.tool.IItemAbility;
import com.hbm.items.tool.IItemWithAbility;
import com.hbm.util.EnchantmentUtil;
import net.minecraft.block.Block;
@ -33,7 +33,7 @@ import net.minecraft.world.World;
public abstract class ToolAbility {
public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemAbility tool) { return false; }
public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) { return false; }
public abstract String getName();
public abstract String getFullName();
public abstract String getExtension();
@ -50,7 +50,7 @@ public abstract class ToolAbility {
private Set<ThreeInts> pos = new HashSet();
@Override
public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemAbility tool) {
public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) {
Block b = world.getBlock(x, y, z);
@ -80,7 +80,7 @@ public abstract class ToolAbility {
}
}
private void recurse(World world, int x, int y, int z, int refX, int refY, int refZ, EntityPlayer player, IItemAbility tool, int depth) {
private void recurse(World world, int x, int y, int z, int refX, int refY, int refZ, EntityPlayer player, IItemWithAbility tool, int depth) {
List<ThreeInts> shuffledOffsets = new ArrayList<>(offsets);
Collections.shuffle(shuffledOffsets);
@ -90,7 +90,7 @@ public abstract class ToolAbility {
}
}
private void breakExtra(World world, int x, int y, int z, int refX, int refY, int refZ, EntityPlayer player, IItemAbility tool, int depth) {
private void breakExtra(World world, int x, int y, int z, int refX, int refY, int refZ, EntityPlayer player, IItemWithAbility tool, int depth) {
if(pos.contains(new ThreeInts(x, y, z)))
return;
@ -166,7 +166,7 @@ public abstract class ToolAbility {
}
@Override
public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemAbility tool) {
public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) {
for(int a = x - range; a <= x + range; a++) {
for(int b = y - range; b <= y + range; b++) {
@ -213,7 +213,7 @@ public abstract class ToolAbility {
}
@Override
public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemAbility tool) {
public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) {
if(EnchantmentHelper.getSilkTouchModifier(player) || player.getHeldItem() == null)
return false;
@ -232,7 +232,7 @@ public abstract class ToolAbility {
}
}
if(player instanceof EntityPlayerMP)
IItemAbility.standardDigPost(world, x, y, z, (EntityPlayerMP) player);
IItemWithAbility.standardDigPost(world, x, y, z, (EntityPlayerMP) player);
EnchantmentUtil.removeEnchantment(stack, Enchantment.silkTouch);
@ -264,7 +264,7 @@ public abstract class ToolAbility {
public static class SilkAbility extends ToolAbility {
@Override
public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemAbility tool) {
public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) {
if(EnchantmentHelper.getSilkTouchModifier(player) || player.getHeldItem() == null)
return false;
@ -273,7 +273,7 @@ public abstract class ToolAbility {
EnchantmentUtil.addEnchantment(stack, Enchantment.silkTouch, 1);
if(player instanceof EntityPlayerMP)
IItemAbility.standardDigPost(world, x, y, z, (EntityPlayerMP) player);
IItemWithAbility.standardDigPost(world, x, y, z, (EntityPlayerMP) player);
EnchantmentUtil.removeEnchantment(stack, Enchantment.silkTouch);
@ -310,7 +310,7 @@ public abstract class ToolAbility {
}
@Override
public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemAbility tool) {
public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) {
if(EnchantmentHelper.getFortuneModifier(player) > 0 || player.getHeldItem() == null)
return false;
@ -319,7 +319,7 @@ public abstract class ToolAbility {
EnchantmentUtil.addEnchantment(stack, Enchantment.fortune, luck);
if(player instanceof EntityPlayerMP)
IItemAbility.standardDigPost(world, x, y, z, (EntityPlayerMP) player);
IItemWithAbility.standardDigPost(world, x, y, z, (EntityPlayerMP) player);
EnchantmentUtil.removeEnchantment(stack, Enchantment.fortune);
@ -350,7 +350,7 @@ public abstract class ToolAbility {
public static class SmelterAbility extends ToolAbility {
@Override
public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemAbility tool) {
public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) {
List<ItemStack> drops = block.getDrops(world, x, y, z, world.getBlockMetadata(x, y, z), 0);
@ -403,7 +403,7 @@ public abstract class ToolAbility {
public static class ShredderAbility extends ToolAbility {
@Override
public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemAbility tool) {
public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) {
//a band-aid on a gaping wound
if(block == Blocks.lit_redstone_ore)
@ -445,7 +445,7 @@ public abstract class ToolAbility {
public static class CentrifugeAbility extends ToolAbility {
@Override
public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemAbility tool) {
public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) {
//a band-aid on a gaping wound
if(block == Blocks.lit_redstone_ore)
@ -491,7 +491,7 @@ public abstract class ToolAbility {
public static class CrystallizerAbility extends ToolAbility {
@Override
public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemAbility tool) {
public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) {
//a band-aid on a gaping wound
if(block == Blocks.lit_redstone_ore)
@ -533,7 +533,7 @@ public abstract class ToolAbility {
public static class MercuryAbility extends ToolAbility {
@Override
public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemAbility tool) {
public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) {
//a band-aid on a gaping wound
if(block == Blocks.lit_redstone_ore)
@ -585,7 +585,7 @@ public abstract class ToolAbility {
}
@Override
public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemAbility tool) {
public boolean onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemWithAbility tool) {
ExplosionNT ex = new ExplosionNT(player.worldObj, player, x + 0.5, y + 0.5, z + 0.5, strength);
ex.addAttrib(ExAttrib.ALLDROP);

View File

@ -4,7 +4,8 @@ import com.hbm.blocks.ModBlocks;
import com.hbm.blocks.generic.BlockBobble.BobbleType;
import com.hbm.handler.threading.PacketThreading;
import com.hbm.items.ModItems;
import com.hbm.items.tool.IItemAbility;
import com.hbm.items.tool.IItemWithAbility;
import com.hbm.lib.ModDamageSource;
import com.hbm.packet.toclient.AuxParticlePacketNT;
import com.hbm.potion.HbmPotion;
import com.hbm.util.ContaminationUtil;
@ -38,7 +39,7 @@ import net.minecraft.world.World;
public abstract class WeaponAbility {
public abstract void onHit(World world, EntityPlayer player, Entity victim, IItemAbility tool);
public abstract void onHit(World world, EntityPlayer player, Entity victim, IItemWithAbility tool);
public abstract String getName();
public abstract String getFullName();
@ -51,7 +52,7 @@ public abstract class WeaponAbility {
}
@Override
public void onHit(World world, EntityPlayer player, Entity victim, IItemAbility tool) {
public void onHit(World world, EntityPlayer player, Entity victim, IItemWithAbility tool) {
if(victim instanceof EntityLivingBase)
ContaminationUtil.contaminate((EntityLivingBase)victim, HazardType.RADIATION, ContaminationType.CREATIVE, rad);
@ -77,7 +78,7 @@ public abstract class WeaponAbility {
}
@Override
public void onHit(World world, EntityPlayer player, Entity victim, IItemAbility tool) {
public void onHit(World world, EntityPlayer player, Entity victim, IItemWithAbility tool) {
if(victim instanceof EntityLivingBase) {
@ -109,7 +110,7 @@ public abstract class WeaponAbility {
}
@Override
public void onHit(World world, EntityPlayer player, Entity victim, IItemAbility tool) {
public void onHit(World world, EntityPlayer player, Entity victim, IItemWithAbility tool) {
if(victim instanceof EntityLivingBase) {
@ -130,6 +131,50 @@ public abstract class WeaponAbility {
return I18n.format(getName()) + " (" + duration + ")";
}
}
public static class BlendAbility extends WeaponAbility {
int divider;
public BlendAbility(int divider) {
this.divider = divider;
}
@Override
public void onHit(World world, EntityPlayer player, Entity victim, IItemWithAbility tool) {
if(victim instanceof EntityLivingBase) {
EntityLivingBase living = (EntityLivingBase) victim;
if(living.getHealth() <= 0.0F) {
int count = Math.min((int)Math.ceil(living.getMaxHealth() / divider), 250); //safeguard to prevent funnies from bosses with obscene health
world.playSoundEffect(living.posX, living.posY + living.height * 0.5, living.posZ, "mob.zombie.woodbreak", 0.5F, 1.0F);
victim.attackEntityFrom(ModDamageSource.turbofan, 100);
NBTTagCompound data = new NBTTagCompound();
data.setString("type", "giblets");
data.setInteger("count", count * 4);
data.setInteger("ent", victim.getEntityId());
data.setInteger("cDiv", 5);
PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(data, victim.posX, victim.posY + victim.height * 0.5, victim.posZ), new TargetPoint(victim.dimension, victim.posX, victim.posY + victim.height * 0.5, victim.posZ, 150));
living.entityDropItem(new ItemStack(ModItems.flesh, 10, 0), 0.0F);
}
}
}
@Override
public String getName() {
return "weapon.ability.blender";
}
@Override
public String getFullName() {
return I18n.format(getName()) + " (1:" + divider + ")";
}
}
public static class PhosphorusAbility extends WeaponAbility {
@ -140,7 +185,7 @@ public abstract class WeaponAbility {
}
@Override
public void onHit(World world, EntityPlayer player, Entity victim, IItemAbility tool) {
public void onHit(World world, EntityPlayer player, Entity victim, IItemWithAbility tool) {
if(victim instanceof EntityLivingBase) {
@ -170,7 +215,7 @@ public abstract class WeaponAbility {
}
@Override
public void onHit(World world, EntityPlayer player, Entity victim, IItemAbility tool) {
public void onHit(World world, EntityPlayer player, Entity victim, IItemWithAbility tool) {
if(victim instanceof EntityLivingBase) {
victim.setFire(duration);
@ -197,7 +242,7 @@ public abstract class WeaponAbility {
}
@Override
public void onHit(World world, EntityPlayer player, Entity victim, IItemAbility tool) {
public void onHit(World world, EntityPlayer player, Entity victim, IItemWithAbility tool) {
if(victim instanceof EntityLivingBase) {
@ -241,7 +286,7 @@ public abstract class WeaponAbility {
public static class BeheaderAbility extends WeaponAbility {
@Override
public void onHit(World world, EntityPlayer player, Entity victim, IItemAbility tool) {
public void onHit(World world, EntityPlayer player, Entity victim, IItemWithAbility tool) {
if(victim instanceof EntityLivingBase && ((EntityLivingBase) victim).getHealth() <= 0.0F) {
@ -294,7 +339,7 @@ public abstract class WeaponAbility {
public static class BobbleAbility extends WeaponAbility {
@Override
public void onHit(World world, EntityPlayer player, Entity victim, IItemAbility tool) {
public void onHit(World world, EntityPlayer player, Entity victim, IItemWithAbility tool) {
if(victim instanceof EntityMob && ((EntityMob) victim).getHealth() <= 0.0F) {

View File

@ -0,0 +1,27 @@
package com.hbm.handler.ability;
import net.minecraft.client.resources.I18n;
public interface IBaseAbility {
String getName();
default String getExtension(int level) {
return "";
}
default String getFullName(int level) {
return I18n.format(getName()) + getExtension(level);
}
default boolean isAllowed() {
return true;
}
// 1 means no support for levels (i.e. the level is always 0).
// The UI only supports levels() between 1 and 10 (inclusive).
// All calls accepting an `int level` parameters must be done
// with a level between 0 and levels()-1 (inclusive).
default int levels() {
return 1;
}
}

View File

@ -0,0 +1,14 @@
package com.hbm.handler.ability;
import com.hbm.items.tool.IItemWithAbility;
import com.jcraft.jorbis.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.world.World;
public interface IToolAreaAbility extends IBaseAbility {
// Should call tool.breakExtraBlock on a bunch of blocks.
// The initial block is always implicitly broken and shouldn't be included.
// TODO: Explosion needs it not to be broken, as it bypasses the harvest ability
void onDig(int level, World world, int x, int y, int z, EntityPlayer player, IItemWithAbility tool);
}

View File

@ -0,0 +1,321 @@
package com.hbm.handler.ability;
import java.util.List;
import com.hbm.config.ToolConfig;
import com.hbm.inventory.fluid.Fluids;
import com.hbm.inventory.recipes.CentrifugeRecipes;
import com.hbm.inventory.recipes.CrystallizerRecipes;
import com.hbm.inventory.recipes.ShredderRecipes;
import com.hbm.inventory.recipes.CrystallizerRecipes.CrystallizerRecipe;
import com.hbm.items.ModItems;
import com.hbm.items.tool.IItemWithAbility;
import com.hbm.util.EnchantmentUtil;
import net.minecraft.block.Block;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.FurnaceRecipes;
import net.minecraft.world.World;
public interface IToolHarvestAbility extends IBaseAbility {
default void preHarvestAll(int level, World world, EntityPlayer player) {}
default void postHarvestAll(int level, World world, EntityPlayer player) {}
boolean skipDefaultDrops(int level);
// Call IToolHarvestAbility.super.onHarvestBlock to emulate the actual block breaking
default void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) {
if (skipDefaultDrops(level)) {
// Emulate the block breaking without drops
world.setBlockToAir(x, y, z);
player.getHeldItem().damageItem(1, player);
} else if (player instanceof EntityPlayerMP) {
// Break the block conventionally
IItemWithAbility.standardDigPost(world, x, y, z, (EntityPlayerMP) player);
}
}
public static enum HarvestAbility {
None(
new IToolHarvestAbility() {
@Override
public String getName() {
// TODO: null? empty? otherwise i18n
return "";
}
@Override
public boolean skipDefaultDrops(int level) {
return false;
}
}
),
Silk(new IToolHarvestAbility() {
@Override
public String getName() {
return "tool.ability.silktouch";
}
@Override
public boolean isAllowed() {
return ToolConfig.abilitySilk;
}
@Override
public boolean skipDefaultDrops(int level) {
return false;
}
@Override
public void preHarvestAll(int level, World world, EntityPlayer player) {
ItemStack stack = player.getHeldItem();
EnchantmentUtil.addEnchantment(stack, Enchantment.silkTouch, 1);
}
@Override
public void postHarvestAll(int level, World world, EntityPlayer player) {
// ToC-ToU mismatch should be impossible
// because both calls happen on the same tick.
// Even if can be forced somehow, the player doesn't gain any benefit from it.
ItemStack stack = player.getHeldItem();
EnchantmentUtil.removeEnchantment(stack, Enchantment.silkTouch);
}
}),
Luck(new IToolHarvestAbility() {
@Override
public String getName() {
return "tool.ability.luck";
}
@Override
public boolean isAllowed() {
return ToolConfig.abilityLuck;
}
final int[] powerAtLevel = {1, 2, 3, 4, 5, 9};
@Override
public int levels() {
return powerAtLevel.length;
}
@Override
public String getExtension(int level) {
return " (" + powerAtLevel[level] + ")";
}
@Override
public boolean skipDefaultDrops(int level) {
return false;
}
@Override
public void preHarvestAll(int level, World world, EntityPlayer player) {
ItemStack stack = player.getHeldItem();
EnchantmentUtil.addEnchantment(stack, Enchantment.fortune, powerAtLevel[level]);
}
@Override
public void postHarvestAll(int level, World world, EntityPlayer player) {
// ToC-ToU mismatch should be impossible
// because both calls happen on the same tick.
// Even if can be forced somehow, the player doesn't gain any benefit from it.
ItemStack stack = player.getHeldItem();
EnchantmentUtil.removeEnchantment(stack, Enchantment.fortune);
}
}),
Smelter(new IToolHarvestAbility() {
@Override
public String getName() {
return "tool.ability.smelter";
}
@Override
public boolean isAllowed() {
return ToolConfig.abilityFurnace;
}
@Override
public boolean skipDefaultDrops(int level) {
return true;
}
@Override
public void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) {
List<ItemStack> drops = block.getDrops(world, x, y, z, world.getBlockMetadata(x, y, z), 0);
boolean doesSmelt = false;
for(int i = 0; i < drops.size(); i++) {
ItemStack stack = drops.get(i).copy();
ItemStack result = FurnaceRecipes.smelting().getSmeltingResult(stack);
if(result != null) {
result = result.copy();
result.stackSize *= stack.stackSize;
drops.set(i, result);
doesSmelt = true;
}
}
if(doesSmelt) {
IToolHarvestAbility.super.onHarvestBlock(level, world, x, y, z, player, block, meta);
for(ItemStack stack : drops)
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, stack.copy()));
}
}
}),
Shredder(new IToolHarvestAbility() {
@Override
public String getName() {
return "tool.ability.shredder";
}
@Override
public boolean isAllowed() {
return ToolConfig.abilityShredder;
}
@Override
public boolean skipDefaultDrops(int level) {
return true;
}
@Override
public void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) {
//a band-aid on a gaping wound
if(block == Blocks.lit_redstone_ore)
block = Blocks.redstone_ore;
ItemStack stack = new ItemStack(block, 1, meta);
ItemStack result = ShredderRecipes.getShredderResult(stack);
if(result != null && result.getItem() != ModItems.scrap) {
IToolHarvestAbility.super.onHarvestBlock(level, world, x, y, z, player, block, meta);
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, result.copy()));
}
}
}),
Centrifuge(new IToolHarvestAbility() {
@Override
public String getName() {
return "tool.ability.centrifuge";
}
@Override
public boolean isAllowed() {
return ToolConfig.abilityCentrifuge;
}
@Override
public boolean skipDefaultDrops(int level) {
return true;
}
@Override
public void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) {
//a band-aid on a gaping wound
if(block == Blocks.lit_redstone_ore)
block = Blocks.redstone_ore;
ItemStack stack = new ItemStack(block, 1, meta);
ItemStack[] result = CentrifugeRecipes.getOutput(stack);
if(result != null) {
IToolHarvestAbility.super.onHarvestBlock(level, world, x, y, z, player, block, meta);
for(ItemStack st : result) {
if(st != null)
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, st.copy()));
}
}
}
}),
Crystallizer(new IToolHarvestAbility() {
@Override
public String getName() {
return "tool.ability.crystallizer";
}
@Override
public boolean isAllowed() {
return ToolConfig.abilityCrystallizer;
}
@Override
public boolean skipDefaultDrops(int level) {
return true;
}
@Override
public void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) {
//a band-aid on a gaping wound
if(block == Blocks.lit_redstone_ore)
block = Blocks.redstone_ore;
ItemStack stack = new ItemStack(block, 1, meta);
CrystallizerRecipe result = CrystallizerRecipes.getOutput(stack, Fluids.PEROXIDE);
if(result != null) {
IToolHarvestAbility.super.onHarvestBlock(level, world, x, y, z, player, block, meta);
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, result.output.copy()));
}
}
}),
Mercury(new IToolHarvestAbility() {
@Override
public String getName() {
return "tool.ability.mercury";
}
@Override
public boolean isAllowed() {
return ToolConfig.abilityMercury;
}
@Override
public boolean skipDefaultDrops(int level) {
return true;
}
@Override
public void onHarvestBlock(int level, World world, int x, int y, int z, EntityPlayer player, Block block, int meta) {
//a band-aid on a gaping wound
if(block == Blocks.lit_redstone_ore)
block = Blocks.redstone_ore;
int mercury = 0;
if(block == Blocks.redstone_ore)
mercury = player.getRNG().nextInt(5) + 4;
if(block == Blocks.redstone_block)
mercury = player.getRNG().nextInt(7) + 8;
if(mercury > 0) {
IToolHarvestAbility.super.onHarvestBlock(level, world, x, y, z, player, block, meta);
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModItems.ingot_mercury, mercury)));
}
}
});
public IToolHarvestAbility handler;
HarvestAbility(IToolHarvestAbility handler) {
this.handler = handler;
}
}
}

View File

@ -0,0 +1,12 @@
package com.hbm.handler.ability;
import javax.swing.text.html.parser.Entity;
import com.hbm.items.tool.IItemWithAbility;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.world.World;
public interface IWeaponAbility extends IBaseAbility {
void onHit(int level, World world, EntityPlayer player, Entity victim, IItemWithAbility tool);
}

View File

@ -22,7 +22,7 @@ import net.minecraftforge.common.ForgeHooks;
import net.minecraftforge.common.IShearable;
import net.minecraftforge.event.world.BlockEvent;
public interface IItemAbility {
public interface IItemWithAbility {
public boolean canHarvestBlock(Block par1Block, ItemStack itemStack);
public boolean isShears(ItemStack stack);

View File

@ -19,7 +19,7 @@ import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemSword;
import net.minecraft.util.EnumChatFormatting;
public class ItemSwordAbility extends ItemSword implements IItemAbility {
public class ItemSwordAbility extends ItemSword implements IItemWithAbility {
private EnumRarity rarity = EnumRarity.common;
// was there a reason for this to be private?

View File

@ -40,7 +40,7 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;
public class ItemToolAbility extends ItemTool implements IItemAbility, IDepthRockTool, IGUIProvider {
public class ItemToolAbility extends ItemTool implements IItemWithAbility, IDepthRockTool, IGUIProvider {
protected boolean isShears = false;
protected EnumToolType toolType;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB