- 1,031
- 19
- 87
Здравствуйте. Создал я значит свой молот со свойствами кирки и меча. Большинство функционала работает, в точности разрушаются и добываются нужные блоки, а также мобам наносится нужный урон. Но при крафте отнимается одна единичка прочности и дальше не крафтится. Плюс складыванием двух молотов они не чинятся в один. Как это решить?
Java:
public class ItemHammerBase extends ItemTool {
private static final Set<Block> EFFECTIVE_ON = Sets.newHashSet(Blocks.ACTIVATOR_RAIL, Blocks.COAL_ORE, Blocks.COBBLESTONE, Blocks.DETECTOR_RAIL, Blocks.DIAMOND_BLOCK, Blocks.DIAMOND_ORE, Blocks.DOUBLE_STONE_SLAB, Blocks.GOLDEN_RAIL, Blocks.GOLD_BLOCK, Blocks.GOLD_ORE, Blocks.ICE, Blocks.IRON_BLOCK, Blocks.IRON_ORE, Blocks.LAPIS_BLOCK, Blocks.LAPIS_ORE, Blocks.LIT_REDSTONE_ORE, Blocks.MOSSY_COBBLESTONE, Blocks.NETHERRACK, Blocks.PACKED_ICE, Blocks.RAIL, Blocks.REDSTONE_ORE, Blocks.SANDSTONE, Blocks.RED_SANDSTONE, Blocks.STONE, Blocks.STONE_SLAB, Blocks.STONE_BUTTON, Blocks.STONE_PRESSURE_PLATE);
public ItemHammerBase(Item.ToolMaterial material, String NameRegistry, String NameLocalized, float Speed, float Damage) {
super(Damage, Speed, material, EFFECTIVE_ON);
this.setUnlocalizedName(NameLocalized);
this.setRegistryName(NameRegistry);
this.setMaxStackSize(1);
this.setNoRepair();
}
public boolean hasContainerItem(ItemStack stack) {
return true;
}
@Override
public ItemStack getContainerItem(ItemStack itemStack) {
ItemStack result = itemStack.copy();
result.setItemDamage(result.getItemDamage() + 1);
if (result.getItemDamage() >= result.getMaxDamage())
return ItemStack.EMPTY;
return result;
}
@Override
public boolean canHarvestBlock(IBlockState blockIn) {
Block block = blockIn.getBlock();
if (block == Blocks.OBSIDIAN) return this.toolMaterial.getHarvestLevel() == 3;
else if (block != Blocks.DIAMOND_BLOCK && block != Blocks.DIAMOND_ORE) {
if (block != Blocks.EMERALD_ORE && block != Blocks.EMERALD_BLOCK) {
if (block != Blocks.GOLD_BLOCK && block != Blocks.GOLD_ORE) {
if (block != Blocks.IRON_BLOCK && block != Blocks.IRON_ORE) {
if (block != Blocks.LAPIS_BLOCK && block != Blocks.LAPIS_ORE) {
if (block != Blocks.REDSTONE_ORE && block != Blocks.LIT_REDSTONE_ORE) {
Material material = blockIn.getMaterial();
if (material == Material.ROCK) return true;
else if (material == Material.IRON) return true;
else return material == Material.ANVIL;
} else return this.toolMaterial.getHarvestLevel() >= 2;
} else return this.toolMaterial.getHarvestLevel() >= 1;
} else return this.toolMaterial.getHarvestLevel() >= 1;
} else return this.toolMaterial.getHarvestLevel() >= 2;
} else return this.toolMaterial.getHarvestLevel() >= 2;
} else return this.toolMaterial.getHarvestLevel() >= 2;
}
@Override
public float getDestroySpeed(ItemStack stack, IBlockState state) {
Material material = state.getMaterial();
return material != Material.IRON && material != Material.ANVIL ? super.getDestroySpeed(stack, state) : this.efficiency;
}
@Override
public boolean hitEntity(ItemStack stack, EntityLivingBase target, EntityLivingBase attacker) {
stack.damageItem(1, attacker);
if (attacker instanceof EntityPlayer)
target.attackEntityFrom(DamageSource.causePlayerDamage((EntityPlayer)attacker), attackDamage);
else
target.attackEntityFrom(DamageSource.causeMobDamage(attacker), attackDamage);
if ((target instanceof EntitySkeleton || target instanceof EntitySkeletonHorse) && !target.world.isRemote) {
boolean flag = true;
for (ItemStack armor : target.getArmorInventoryList()) {
if (!armor.isEmpty()) {
flag = false;
break;
}
}
if (flag && target.world.rand.nextBoolean())
target.world.spawnEntity(new EntityItem(target.world, target.posX, target.posY, target.posZ, new ItemStack(Items.DYE, 1, 15)));
}
return true;
}
Java:
public class RegisterItem {
public static Item COPPER_INGOT = new ItemCraftBase("copper_ingot", "ingot.copper", 64);
public static Item COPPER_NUGGET = new ItemCraftBase("copper_nugget", "nugget.copper", 64);
public static Item COPPER_HELMET = new ItemArmorBase(MaterialArmor.COPPER, EntityEquipmentSlot.HEAD, "copper_helmet", "helmet.copper", 1);
public static Item COPPER_CHESTPLATE = new ItemArmorBase(MaterialArmor.COPPER, EntityEquipmentSlot.CHEST, "copper_chestplate", "chestplate.copper", 1);
public static Item COPPER_LEGGINGS = new ItemArmorBase(MaterialArmor.COPPER, EntityEquipmentSlot.LEGS, "copper_leggings", "leggings.copper", 2);
public static Item COPPER_BOOTS = new ItemArmorBase(MaterialArmor.COPPER, EntityEquipmentSlot.FEET, "copper_boots", "boots.copper", 1);
public static Item COPPER_HOE = new ItemHoeBase(MaterialTool.COPPER, "copper_hoe", "hoe.copper");
public static Item COPPER_SWORD = new ItemSwordBase(MaterialTool.COPPER, "copper_sword", "sword.copper");
public static Item COPPER_AXE = new ItemAxeBase(MaterialTool.COPPER, "copper_axe", "axe.copper", 7.0F, -3.2F);
public static Item COPPER_SHOVEL = new ItemShovelBase(MaterialTool.COPPER, "copper_shovel", "shovel.copper");
public static Item COPPER_PICKAXE = new ItemPickaxeBase(MaterialTool.COPPER, "copper_pickaxe", "pickaxe.copper");
public static Item DIAMOND_HAMMER = new ItemHammerBase(ToolMaterial.DIAMOND, "diamond_hammer", "hammer.diamond", -3.0F, 10.0F);
public static Item IRON_PLATE = new ItemCraftBase("iron_plate", "plate.iron", 32);
public static Item FRIED_EGG = new ItemFoodBase("fried_egg", "fried.egg", false, 0.5F, 2, 2);
public static void register() {
setRegister(COPPER_INGOT);
setRegister(COPPER_NUGGET);
setRegister(COPPER_HELMET);
setRegister(COPPER_CHESTPLATE);
setRegister(COPPER_LEGGINGS);
setRegister(COPPER_BOOTS);
setRegister(COPPER_HOE);
setRegister(COPPER_SWORD);
setRegister(COPPER_AXE);
setRegister(COPPER_SHOVEL);
setRegister(COPPER_PICKAXE);
setRegister(DIAMOND_HAMMER);
setRegister(IRON_PLATE);
setRegister(FRIED_EGG);
}
@SideOnly(Side.CLIENT)
public static void registerRender() {
setRender(COPPER_INGOT);
setRender(COPPER_NUGGET);
setRender(COPPER_HELMET);
setRender(COPPER_CHESTPLATE);
setRender(COPPER_LEGGINGS);
setRender(COPPER_BOOTS);
setRender(COPPER_HOE);
setRender(COPPER_SWORD);
setRender(COPPER_AXE);
setRender(COPPER_SHOVEL);
setRender(COPPER_PICKAXE);
setRender(DIAMOND_HAMMER);
setRender(IRON_PLATE);
setRender(FRIED_EGG);
}
private static void setRegister(Item item) {
ForgeRegistries.ITEMS.register(item);
}
@SideOnly(Side.CLIENT)
private static void setRender(Item item) {
Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(item, 0, new ModelResourceLocation(item.getRegistryName(), "inventory"));
}