Skip to content

Commit

Permalink
Add bonus attributes to extra tool materials.
Browse files Browse the repository at this point in the history
  • Loading branch information
Provismet committed Jan 20, 2024
1 parent 4e13b11 commit 4d9e27f
Show file tree
Hide file tree
Showing 10 changed files with 276 additions and 14 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,4 @@ modid=additional-armoury
#Fabric api
fabric_version=0.91.0+1.20.1
fabric_asm_version=v2.3
combatplus_version=0.3.0-mc1.20.1
combatplus_version=0.3.1-mc1.20.1
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.provismet.AdditionalArmoury.items;

import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.Multimap;
import com.provismet.CombatPlusCore.utility.AttributeIdentifiers;

import net.minecraft.entity.EquipmentSlot;
import net.minecraft.entity.attribute.EntityAttribute;
import net.minecraft.entity.attribute.EntityAttributeModifier;
import net.minecraft.entity.attribute.EntityAttributes;
import net.minecraft.item.AxeItem;

public class AAExtraAxeItem extends AxeItem {
private final float extraAttackDamage;
private final Multimap<EntityAttribute, EntityAttributeModifier> extraAttributeModifiers;

public AAExtraAxeItem (AAToolMaterials toolMaterial, float attackDamage, float attackSpeed, Settings settings) {
super(toolMaterial, attackDamage, attackSpeed, settings);
this.extraAttackDamage = attackDamage + toolMaterial.getAttackDamage();
if (toolMaterial.getCustomAttribute() == EntityAttributes.GENERIC_ATTACK_SPEED) attackSpeed += toolMaterial.getCustomAttributeValue();

ImmutableMultimap.Builder<EntityAttribute, EntityAttributeModifier> builder = ImmutableMultimap.builder();
builder.put(EntityAttributes.GENERIC_ATTACK_DAMAGE, new EntityAttributeModifier(ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", (double)this.extraAttackDamage, EntityAttributeModifier.Operation.ADDITION));
builder.put(EntityAttributes.GENERIC_ATTACK_SPEED, new EntityAttributeModifier(ATTACK_SPEED_MODIFIER_ID, "Tool modifier", (double)attackSpeed, EntityAttributeModifier.Operation.ADDITION));

if (toolMaterial.getCustomAttribute() != null && toolMaterial.getCustomAttribute() != EntityAttributes.GENERIC_ATTACK_SPEED) {
builder.put(toolMaterial.getCustomAttribute(), new EntityAttributeModifier(AttributeIdentifiers.WEAPON_BONUS_ATTRIBUTE, "Additional Armoury: Tool modifier", (double)toolMaterial.getCustomAttributeValue(), EntityAttributeModifier.Operation.ADDITION));
}

this.extraAttributeModifiers = builder.build();
}

@Override
public float getAttackDamage() {
return this.extraAttackDamage;
}

@Override
public Multimap<EntityAttribute, EntityAttributeModifier> getAttributeModifiers(EquipmentSlot slot) {
if (slot == EquipmentSlot.MAINHAND) {
return this.extraAttributeModifiers;
}
return super.getAttributeModifiers(slot);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.provismet.AdditionalArmoury.items;

import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.Multimap;
import com.provismet.CombatPlusCore.utility.AttributeIdentifiers;

import net.minecraft.entity.EquipmentSlot;
import net.minecraft.entity.attribute.EntityAttribute;
import net.minecraft.entity.attribute.EntityAttributeModifier;
import net.minecraft.entity.attribute.EntityAttributes;
import net.minecraft.item.HoeItem;

public class AAExtraHoeItem extends HoeItem {
private final float extraAttackDamage;
private final Multimap<EntityAttribute, EntityAttributeModifier> extraAttributeModifiers;

public AAExtraHoeItem (AAToolMaterials toolMaterial, int attackDamage, float attackSpeed, Settings settings) {
super(toolMaterial, attackDamage, attackSpeed, settings);
this.extraAttackDamage = attackDamage + toolMaterial.getAttackDamage();
if (toolMaterial.getCustomAttribute() == EntityAttributes.GENERIC_ATTACK_SPEED) attackSpeed += toolMaterial.getCustomAttributeValue();

ImmutableMultimap.Builder<EntityAttribute, EntityAttributeModifier> builder = ImmutableMultimap.builder();
builder.put(EntityAttributes.GENERIC_ATTACK_DAMAGE, new EntityAttributeModifier(ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", (double)this.extraAttackDamage, EntityAttributeModifier.Operation.ADDITION));
builder.put(EntityAttributes.GENERIC_ATTACK_SPEED, new EntityAttributeModifier(ATTACK_SPEED_MODIFIER_ID, "Tool modifier", (double)attackSpeed, EntityAttributeModifier.Operation.ADDITION));

if (toolMaterial.getCustomAttribute() != null && toolMaterial.getCustomAttribute() != EntityAttributes.GENERIC_ATTACK_SPEED) {
builder.put(toolMaterial.getCustomAttribute(), new EntityAttributeModifier(AttributeIdentifiers.WEAPON_BONUS_ATTRIBUTE, "Additional Armoury: Tool modifier", (double)toolMaterial.getCustomAttributeValue(), EntityAttributeModifier.Operation.ADDITION));
}

this.extraAttributeModifiers = builder.build();
}

@Override
public float getAttackDamage() {
return this.extraAttackDamage;
}

@Override
public Multimap<EntityAttribute, EntityAttributeModifier> getAttributeModifiers(EquipmentSlot slot) {
if (slot == EquipmentSlot.MAINHAND) {
return this.extraAttributeModifiers;
}
return super.getAttributeModifiers(slot);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.provismet.AdditionalArmoury.items;

import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.Multimap;
import com.provismet.CombatPlusCore.utility.AttributeIdentifiers;

import net.minecraft.entity.EquipmentSlot;
import net.minecraft.entity.attribute.EntityAttribute;
import net.minecraft.entity.attribute.EntityAttributeModifier;
import net.minecraft.entity.attribute.EntityAttributes;
import net.minecraft.item.PickaxeItem;

public class AAExtraPickaxeItem extends PickaxeItem {
private final float extraAttackDamage;
private final Multimap<EntityAttribute, EntityAttributeModifier> extraAttributeModifiers;

public AAExtraPickaxeItem (AAToolMaterials toolMaterial, int attackDamage, float attackSpeed, Settings settings) {
super(toolMaterial, attackDamage, attackSpeed, settings);
this.extraAttackDamage = attackDamage + toolMaterial.getAttackDamage();
if (toolMaterial.getCustomAttribute() == EntityAttributes.GENERIC_ATTACK_SPEED) attackSpeed += toolMaterial.getCustomAttributeValue();

ImmutableMultimap.Builder<EntityAttribute, EntityAttributeModifier> builder = ImmutableMultimap.builder();
builder.put(EntityAttributes.GENERIC_ATTACK_DAMAGE, new EntityAttributeModifier(ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", (double)this.extraAttackDamage, EntityAttributeModifier.Operation.ADDITION));
builder.put(EntityAttributes.GENERIC_ATTACK_SPEED, new EntityAttributeModifier(ATTACK_SPEED_MODIFIER_ID, "Tool modifier", (double)attackSpeed, EntityAttributeModifier.Operation.ADDITION));

if (toolMaterial.getCustomAttribute() != null && toolMaterial.getCustomAttribute() != EntityAttributes.GENERIC_ATTACK_SPEED) {
builder.put(toolMaterial.getCustomAttribute(), new EntityAttributeModifier(AttributeIdentifiers.WEAPON_BONUS_ATTRIBUTE, "Additional Armoury: Tool modifier", (double)toolMaterial.getCustomAttributeValue(), EntityAttributeModifier.Operation.ADDITION));
}

this.extraAttributeModifiers = builder.build();
}

@Override
public float getAttackDamage() {
return this.extraAttackDamage;
}

@Override
public Multimap<EntityAttribute, EntityAttributeModifier> getAttributeModifiers(EquipmentSlot slot) {
if (slot == EquipmentSlot.MAINHAND) {
return this.extraAttributeModifiers;
}
return super.getAttributeModifiers(slot);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.provismet.AdditionalArmoury.items;

import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.Multimap;
import com.provismet.CombatPlusCore.utility.AttributeIdentifiers;

import net.minecraft.entity.EquipmentSlot;
import net.minecraft.entity.attribute.EntityAttribute;
import net.minecraft.entity.attribute.EntityAttributeModifier;
import net.minecraft.entity.attribute.EntityAttributes;
import net.minecraft.item.ShovelItem;

public class AAExtraShovelItem extends ShovelItem {
private final float extraAttackDamage;
private final Multimap<EntityAttribute, EntityAttributeModifier> extraAttributeModifiers;

public AAExtraShovelItem (AAToolMaterials toolMaterial, float attackDamage, float attackSpeed, Settings settings) {
super(toolMaterial, attackDamage, attackSpeed, settings);
this.extraAttackDamage = attackDamage + toolMaterial.getAttackDamage();
if (toolMaterial.getCustomAttribute() == EntityAttributes.GENERIC_ATTACK_SPEED) attackSpeed += toolMaterial.getCustomAttributeValue();

ImmutableMultimap.Builder<EntityAttribute, EntityAttributeModifier> builder = ImmutableMultimap.builder();
builder.put(EntityAttributes.GENERIC_ATTACK_DAMAGE, new EntityAttributeModifier(ATTACK_DAMAGE_MODIFIER_ID, "Tool modifier", (double)this.extraAttackDamage, EntityAttributeModifier.Operation.ADDITION));
builder.put(EntityAttributes.GENERIC_ATTACK_SPEED, new EntityAttributeModifier(ATTACK_SPEED_MODIFIER_ID, "Tool modifier", (double)attackSpeed, EntityAttributeModifier.Operation.ADDITION));

if (toolMaterial.getCustomAttribute() != null && toolMaterial.getCustomAttribute() != EntityAttributes.GENERIC_ATTACK_SPEED) {
builder.put(toolMaterial.getCustomAttribute(), new EntityAttributeModifier(AttributeIdentifiers.WEAPON_BONUS_ATTRIBUTE, "Additional Armoury: Tool modifier", (double)toolMaterial.getCustomAttributeValue(), EntityAttributeModifier.Operation.ADDITION));
}

this.extraAttributeModifiers = builder.build();
}

@Override
public float getAttackDamage() {
return this.extraAttackDamage;
}

@Override
public Multimap<EntityAttribute, EntityAttributeModifier> getAttributeModifiers(EquipmentSlot slot) {
if (slot == EquipmentSlot.MAINHAND) {
return this.extraAttributeModifiers;
}
return super.getAttributeModifiers(slot);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.provismet.AdditionalArmoury.items;

import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.Multimap;
import com.provismet.CombatPlusCore.utility.AttributeIdentifiers;

import net.minecraft.entity.EquipmentSlot;
import net.minecraft.entity.attribute.EntityAttribute;
import net.minecraft.entity.attribute.EntityAttributeModifier;
import net.minecraft.entity.attribute.EntityAttributes;
import net.minecraft.item.SwordItem;

public class AAExtraSwordItem extends SwordItem {
private final float extraAttackDamage;
private final Multimap<EntityAttribute, EntityAttributeModifier> extraAttributeModifiers;

public AAExtraSwordItem (AAToolMaterials toolMaterial, int attackDamage, float attackSpeed, Settings settings) {
super(toolMaterial, attackDamage, attackSpeed, settings);
this.extraAttackDamage = attackDamage + toolMaterial.getAttackDamage();
if (toolMaterial.getCustomAttribute() == EntityAttributes.GENERIC_ATTACK_SPEED) attackSpeed += toolMaterial.getCustomAttributeValue();

ImmutableMultimap.Builder<EntityAttribute, EntityAttributeModifier> builder = ImmutableMultimap.builder();
builder.put(EntityAttributes.GENERIC_ATTACK_DAMAGE, new EntityAttributeModifier(ATTACK_DAMAGE_MODIFIER_ID, "Weapon modifier", (double)this.extraAttackDamage, EntityAttributeModifier.Operation.ADDITION));
builder.put(EntityAttributes.GENERIC_ATTACK_SPEED, new EntityAttributeModifier(ATTACK_SPEED_MODIFIER_ID, "Weapon modifier", (double)attackSpeed, EntityAttributeModifier.Operation.ADDITION));

if (toolMaterial.getCustomAttribute() != null && toolMaterial.getCustomAttribute() != EntityAttributes.GENERIC_ATTACK_SPEED) {
builder.put(toolMaterial.getCustomAttribute(), new EntityAttributeModifier(AttributeIdentifiers.WEAPON_BONUS_ATTRIBUTE, "Additional Armoury: Weapon modifier", (double)toolMaterial.getCustomAttributeValue(), EntityAttributeModifier.Operation.ADDITION));
}

this.extraAttributeModifiers = builder.build();
}

@Override
public float getAttackDamage() {
return this.extraAttackDamage;
}

@Override
public Multimap<EntityAttribute, EntityAttributeModifier> getAttributeModifiers(EquipmentSlot slot) {
if (slot == EquipmentSlot.MAINHAND) {
return this.extraAttributeModifiers;
}
return super.getAttributeModifiers(slot);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,26 +6,32 @@
import com.provismet.AdditionalArmoury.registries.AAItems;

import net.fabricmc.yarn.constants.MiningLevels;
import net.minecraft.entity.attribute.EntityAttribute;
import net.minecraft.entity.attribute.EntityAttributes;
import net.minecraft.item.ToolMaterial;
import net.minecraft.recipe.Ingredient;

public enum AAToolMaterials implements ToolMaterial {
OVERNETHER(MiningLevels.NETHERITE, 2031, 9.0f, 4.0f, 15, () -> Ingredient.ofItems(AAItems.OVERNETHER_INGOT)),
ENDERNETHER(MiningLevels.NETHERITE, 2031, 9.0f, 4.0f, 15, () -> Ingredient.ofItems(AAItems.ENDERNETHER_INGOT));
OVERNETHER(MiningLevels.NETHERITE, 2031, 9.0f, 3.0f, 15, EntityAttributes.GENERIC_ATTACK_KNOCKBACK, 1.5f, () -> Ingredient.ofItems(AAItems.OVERNETHER_INGOT)),
ENDERNETHER(MiningLevels.NETHERITE, 2031, 9.0f, 3.0f, 15, EntityAttributes.GENERIC_ATTACK_SPEED, 0.2f, () -> Ingredient.ofItems(AAItems.ENDERNETHER_INGOT));

private final int miningLevel;
private final int itemDurability;
private final float miningSpeed;
private final float attackDamage;
private final int enchantability;
private final Supplier<Ingredient> repairIngredient;
private final EntityAttribute customAttribute;
private final float customAttributeValue;

private AAToolMaterials (int miningLevel, int itemDurability, float miningSpeed, float attackDamage, int enchantability, Supplier<Ingredient> repairIngredient) {
private AAToolMaterials (int miningLevel, int itemDurability, float miningSpeed, float attackDamage, int enchantability, EntityAttribute customAttribute, float customAttributeValue, Supplier<Ingredient> repairIngredient) {
this.miningLevel = miningLevel;
this.itemDurability = itemDurability;
this.miningSpeed = miningSpeed;
this.attackDamage = attackDamage;
this.enchantability = enchantability;
this.customAttribute = customAttribute;
this.customAttributeValue = customAttributeValue;
this.repairIngredient = Suppliers.memoize(repairIngredient::get);
}

Expand Down Expand Up @@ -54,6 +60,14 @@ public int getEnchantability () {
return this.enchantability;
}

public EntityAttribute getCustomAttribute () {
return this.customAttribute;
}

public float getCustomAttributeValue () {
return this.customAttributeValue;
}

@Override
public Ingredient getRepairIngredient () {
return this.repairIngredient.get();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import com.google.common.collect.Multimap;
import com.provismet.AdditionalArmoury.registries.AAEnchantments;
import com.provismet.CombatPlusCore.interfaces.DualWeapon;
import com.provismet.CombatPlusCore.utility.AttributeIdentifiers;

import net.minecraft.block.BlockState;
import net.minecraft.block.Blocks;
Expand Down Expand Up @@ -48,9 +49,17 @@ public DaggerItem (ToolMaterial material, int attackDamage, float attackSpeed, S
super(material, settings);
this.attackDamage = attackDamage + material.getAttackDamage();
this.defaultTipColour = defaultTipColour;

if (material instanceof AAToolMaterials extraMat && extraMat.getCustomAttribute() == EntityAttributes.GENERIC_ATTACK_SPEED)
attackSpeed += extraMat.getCustomAttributeValue();

ImmutableMultimap.Builder<EntityAttribute, EntityAttributeModifier> builder = ImmutableMultimap.builder();
builder.put(EntityAttributes.GENERIC_ATTACK_DAMAGE, new EntityAttributeModifier(ATTACK_DAMAGE_MODIFIER_ID, "Weapon modifier", (double)this.attackDamage, EntityAttributeModifier.Operation.ADDITION));
builder.put(EntityAttributes.GENERIC_ATTACK_SPEED, new EntityAttributeModifier(ATTACK_SPEED_MODIFIER_ID, "Weapon modifier", (double)attackSpeed, EntityAttributeModifier.Operation.ADDITION));

if (material instanceof AAToolMaterials extraMat && extraMat.getCustomAttribute() != null && extraMat.getCustomAttribute() != EntityAttributes.GENERIC_ATTACK_SPEED)
builder.put(extraMat.getCustomAttribute(), new EntityAttributeModifier(AttributeIdentifiers.WEAPON_BONUS_ATTRIBUTE, "Additional Armoury: Weapon Modifier", extraMat.getCustomAttributeValue(), EntityAttributeModifier.Operation.ADDITION));

this.attributeModifiers = builder.build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.google.common.collect.Multimap;
import com.provismet.AdditionalArmoury.registries.AAStatusEffects;
import com.provismet.CombatPlusCore.interfaces.MeleeWeapon;
import com.provismet.CombatPlusCore.utility.AttributeIdentifiers;

import net.minecraft.entity.EquipmentSlot;
import net.minecraft.entity.LivingEntity;
Expand All @@ -22,9 +23,17 @@ public class MaceItem extends ToolItem implements MeleeWeapon {
public MaceItem (ToolMaterial material, int attackDamage, float attackSpeed, Settings settings) {
super(material, settings);
this.attackDamage = attackDamage + material.getAttackDamage();

if (material instanceof AAToolMaterials extraMat && extraMat.getCustomAttribute() == EntityAttributes.GENERIC_ATTACK_SPEED)
attackSpeed += extraMat.getCustomAttributeValue();

ImmutableMultimap.Builder<EntityAttribute, EntityAttributeModifier> builder = ImmutableMultimap.builder();
builder.put(EntityAttributes.GENERIC_ATTACK_DAMAGE, new EntityAttributeModifier(ATTACK_DAMAGE_MODIFIER_ID, "Weapon modifier", (double)this.attackDamage, EntityAttributeModifier.Operation.ADDITION));
builder.put(EntityAttributes.GENERIC_ATTACK_SPEED, new EntityAttributeModifier(ATTACK_SPEED_MODIFIER_ID, "Weapon modifier", (double)attackSpeed, EntityAttributeModifier.Operation.ADDITION));

if (material instanceof AAToolMaterials extraMat && extraMat.getCustomAttribute() != null && extraMat.getCustomAttribute() != EntityAttributes.GENERIC_ATTACK_SPEED)
builder.put(extraMat.getCustomAttribute(), new EntityAttributeModifier(AttributeIdentifiers.WEAPON_BONUS_ATTRIBUTE, "Additional Armoury: Weapon Modifier", extraMat.getCustomAttributeValue(), EntityAttributeModifier.Operation.ADDITION));

this.attributeModifiers = builder.build();
}

Expand Down
Loading

0 comments on commit 4d9e27f

Please sign in to comment.