diff --git a/src/main/generated/assets/acesbs/models/item/sovs_plate_carrier.json b/src/main/generated/assets/acesbs/models/item/sovs_plate_carrier.json new file mode 100644 index 0000000..43d6b21 --- /dev/null +++ b/src/main/generated/assets/acesbs/models/item/sovs_plate_carrier.json @@ -0,0 +1,68 @@ +{ + "parent": "minecraft:item/generated", + "overrides": [ + { + "model": "acesbs:item/sovs_plate_carrier_quartz_trim", + "predicate": { + "trim_type": 0.1 + } + }, + { + "model": "acesbs:item/sovs_plate_carrier_iron_trim", + "predicate": { + "trim_type": 0.2 + } + }, + { + "model": "acesbs:item/sovs_plate_carrier_netherite_trim", + "predicate": { + "trim_type": 0.3 + } + }, + { + "model": "acesbs:item/sovs_plate_carrier_redstone_trim", + "predicate": { + "trim_type": 0.4 + } + }, + { + "model": "acesbs:item/sovs_plate_carrier_copper_trim", + "predicate": { + "trim_type": 0.5 + } + }, + { + "model": "acesbs:item/sovs_plate_carrier_gold_trim", + "predicate": { + "trim_type": 0.6 + } + }, + { + "model": "acesbs:item/sovs_plate_carrier_emerald_trim", + "predicate": { + "trim_type": 0.7 + } + }, + { + "model": "acesbs:item/sovs_plate_carrier_diamond_trim", + "predicate": { + "trim_type": 0.8 + } + }, + { + "model": "acesbs:item/sovs_plate_carrier_lapis_trim", + "predicate": { + "trim_type": 0.9 + } + }, + { + "model": "acesbs:item/sovs_plate_carrier_amethyst_trim", + "predicate": { + "trim_type": 1.0 + } + } + ], + "textures": { + "layer0": "acesbs:item/sovs_plate_carrier" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/acesbs/models/item/sovs_plate_carrier_amethyst_trim.json b/src/main/generated/assets/acesbs/models/item/sovs_plate_carrier_amethyst_trim.json new file mode 100644 index 0000000..7aa3987 --- /dev/null +++ b/src/main/generated/assets/acesbs/models/item/sovs_plate_carrier_amethyst_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "acesbs:item/sovs_plate_carrier", + "layer1": "minecraft:trims/items/chestplate_trim_amethyst" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/acesbs/models/item/sovs_plate_carrier_copper_trim.json b/src/main/generated/assets/acesbs/models/item/sovs_plate_carrier_copper_trim.json new file mode 100644 index 0000000..42edef3 --- /dev/null +++ b/src/main/generated/assets/acesbs/models/item/sovs_plate_carrier_copper_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "acesbs:item/sovs_plate_carrier", + "layer1": "minecraft:trims/items/chestplate_trim_copper" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/acesbs/models/item/sovs_plate_carrier_diamond_trim.json b/src/main/generated/assets/acesbs/models/item/sovs_plate_carrier_diamond_trim.json new file mode 100644 index 0000000..641b583 --- /dev/null +++ b/src/main/generated/assets/acesbs/models/item/sovs_plate_carrier_diamond_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "acesbs:item/sovs_plate_carrier", + "layer1": "minecraft:trims/items/chestplate_trim_diamond" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/acesbs/models/item/sovs_plate_carrier_emerald_trim.json b/src/main/generated/assets/acesbs/models/item/sovs_plate_carrier_emerald_trim.json new file mode 100644 index 0000000..c0baf40 --- /dev/null +++ b/src/main/generated/assets/acesbs/models/item/sovs_plate_carrier_emerald_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "acesbs:item/sovs_plate_carrier", + "layer1": "minecraft:trims/items/chestplate_trim_emerald" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/acesbs/models/item/sovs_plate_carrier_gold_trim.json b/src/main/generated/assets/acesbs/models/item/sovs_plate_carrier_gold_trim.json new file mode 100644 index 0000000..07102d8 --- /dev/null +++ b/src/main/generated/assets/acesbs/models/item/sovs_plate_carrier_gold_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "acesbs:item/sovs_plate_carrier", + "layer1": "minecraft:trims/items/chestplate_trim_gold" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/acesbs/models/item/sovs_plate_carrier_iron_trim.json b/src/main/generated/assets/acesbs/models/item/sovs_plate_carrier_iron_trim.json new file mode 100644 index 0000000..4b9967d --- /dev/null +++ b/src/main/generated/assets/acesbs/models/item/sovs_plate_carrier_iron_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "acesbs:item/sovs_plate_carrier", + "layer1": "minecraft:trims/items/chestplate_trim_iron" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/acesbs/models/item/sovs_plate_carrier_lapis_trim.json b/src/main/generated/assets/acesbs/models/item/sovs_plate_carrier_lapis_trim.json new file mode 100644 index 0000000..a7453fe --- /dev/null +++ b/src/main/generated/assets/acesbs/models/item/sovs_plate_carrier_lapis_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "acesbs:item/sovs_plate_carrier", + "layer1": "minecraft:trims/items/chestplate_trim_lapis" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/acesbs/models/item/sovs_plate_carrier_netherite_trim.json b/src/main/generated/assets/acesbs/models/item/sovs_plate_carrier_netherite_trim.json new file mode 100644 index 0000000..7c6a8ae --- /dev/null +++ b/src/main/generated/assets/acesbs/models/item/sovs_plate_carrier_netherite_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "acesbs:item/sovs_plate_carrier", + "layer1": "minecraft:trims/items/chestplate_trim_netherite" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/acesbs/models/item/sovs_plate_carrier_quartz_trim.json b/src/main/generated/assets/acesbs/models/item/sovs_plate_carrier_quartz_trim.json new file mode 100644 index 0000000..f3d9232 --- /dev/null +++ b/src/main/generated/assets/acesbs/models/item/sovs_plate_carrier_quartz_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "acesbs:item/sovs_plate_carrier", + "layer1": "minecraft:trims/items/chestplate_trim_quartz" + } +} \ No newline at end of file diff --git a/src/main/generated/assets/acesbs/models/item/sovs_plate_carrier_redstone_trim.json b/src/main/generated/assets/acesbs/models/item/sovs_plate_carrier_redstone_trim.json new file mode 100644 index 0000000..ca0ada0 --- /dev/null +++ b/src/main/generated/assets/acesbs/models/item/sovs_plate_carrier_redstone_trim.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "acesbs:item/sovs_plate_carrier", + "layer1": "minecraft:trims/items/chestplate_trim_redstone" + } +} \ No newline at end of file diff --git a/src/main/generated/data/minecraft/tags/item/trimmable_armor.json b/src/main/generated/data/minecraft/tags/item/trimmable_armor.json index 64f37a9..4211054 100644 --- a/src/main/generated/data/minecraft/tags/item/trimmable_armor.json +++ b/src/main/generated/data/minecraft/tags/item/trimmable_armor.json @@ -4,6 +4,8 @@ "acesbs:prisma_steel_chestplate", "acesbs:prisma_steel_leggings", "acesbs:prisma_steel_boots", - "acesbs:berserkers_pauldron" + "acesbs:berserkers_pauldron", + "acesbs:wildfire_boots", + "acesbs:sovs_plate_carrier" ] } \ No newline at end of file diff --git a/src/main/java/com/acethewildfire/acesbs/TODO.txt b/src/main/java/com/acethewildfire/acesbs/TODO.txt index 9640cf8..9a3ddec 100644 --- a/src/main/java/com/acethewildfire/acesbs/TODO.txt +++ b/src/main/java/com/acethewildfire/acesbs/TODO.txt @@ -40,7 +40,7 @@ Items Armor X Beserker Pauldron (Special: Skeleton hurt sound) -- Wildfire Boots (Special: Rainbow ember) +X Wildfire Boots (Special: Rainbow ember) - Fireskip Boots (Infernal Fire effect on water) - Sov's Plate Carrier - (Headlamp Armors using Everburn Gold) diff --git a/src/main/java/com/acethewildfire/acesbs/datagen/ModItemTagProvider.java b/src/main/java/com/acethewildfire/acesbs/datagen/ModItemTagProvider.java index fc631de..7638183 100644 --- a/src/main/java/com/acethewildfire/acesbs/datagen/ModItemTagProvider.java +++ b/src/main/java/com/acethewildfire/acesbs/datagen/ModItemTagProvider.java @@ -48,7 +48,9 @@ public class ModItemTagProvider extends FabricTagProvider.ItemTagProvider { .add(PrismaSteelItems.PRISMA_STEEL_CHESTPLATE) .add(PrismaSteelItems.PRISMA_STEEL_LEGGINGS) .add(PrismaSteelItems.PRISMA_STEEL_BOOTS) - .add(ModItems.BERSERKERS_PAULDRON); + .add(ModItems.BERSERKERS_PAULDRON) + .add(ModItems.WILDFIRE_BOOTS) + .add(ModItems.SOVS_PLATE_CARRIER); getOrCreateTagBuilder(ItemTags.TRIM_MATERIALS) .add(PrismaSteelItems.PRISMA_STEEL); getOrCreateTagBuilder(ItemTags.TRIM_TEMPLATES) diff --git a/src/main/java/com/acethewildfire/acesbs/datagen/ModModelProvider.java b/src/main/java/com/acethewildfire/acesbs/datagen/ModModelProvider.java index 6c162d0..8a911fa 100644 --- a/src/main/java/com/acethewildfire/acesbs/datagen/ModModelProvider.java +++ b/src/main/java/com/acethewildfire/acesbs/datagen/ModModelProvider.java @@ -106,6 +106,7 @@ public class ModModelProvider extends FabricModelProvider { itemModelGenerator.registerArmor((ArmorItem) ModItems.BERSERKERS_PAULDRON); itemModelGenerator.registerArmor((ArmorItem) ModItems.WILDFIRE_BOOTS); + itemModelGenerator.registerArmor((ArmorItem) ModItems.SOVS_PLATE_CARRIER); itemModelGenerator.register(ModItems.FREN_SPAWN_EGG, new Model(Optional.of(Identifier.of("item/template_spawn_egg")), Optional.empty())); diff --git a/src/main/java/com/acethewildfire/acesbs/item/ModArmorMaterials.java b/src/main/java/com/acethewildfire/acesbs/item/ModArmorMaterials.java index 059fee1..9880f0c 100644 --- a/src/main/java/com/acethewildfire/acesbs/item/ModArmorMaterials.java +++ b/src/main/java/com/acethewildfire/acesbs/item/ModArmorMaterials.java @@ -35,9 +35,19 @@ public class ModArmorMaterials { map.put(ArmorItem.Type.CHESTPLATE, 8); map.put(ArmorItem.Type.HELMET, 3); map.put(ArmorItem.Type.BODY, 11); - }), 20, SoundEvents.ITEM_ARMOR_EQUIP_NETHERITE, () -> Ingredient.ofItems(ModItems.INFERNAL_ASHES), + }), 20, SoundEvents.ITEM_ARMOR_EQUIP_LEATHER, () -> Ingredient.ofItems(ModItems.INFERNAL_ASHES), List.of(new ArmorMaterial.Layer(Identifier.of(AcesBS.MOD_ID, "wildfire"))), 0, 0)); + public static final RegistryEntry PLATES = registerArmorMaterial("plates", + () -> new ArmorMaterial(Util.make(new EnumMap<>(ArmorItem.Type.class), map -> { + map.put(ArmorItem.Type.BOOTS, 0); + map.put(ArmorItem.Type.LEGGINGS, 0); + map.put(ArmorItem.Type.CHESTPLATE, 0); + map.put(ArmorItem.Type.HELMET, 0); + map.put(ArmorItem.Type.BODY, 0); + }), 20, SoundEvents.ITEM_ARMOR_EQUIP_NETHERITE, () -> Ingredient.ofItems(PrismaSteelItems.PRISMA_STEEL), + List.of(new ArmorMaterial.Layer(Identifier.of(AcesBS.MOD_ID, "plates"))), 0, 0)); + public static final RegistryEntry BERSERKERS = registerArmorMaterial("berserkers", () -> new ArmorMaterial(Util.make(new EnumMap<>(ArmorItem.Type.class), map -> { map.put(ArmorItem.Type.BOOTS, 2); diff --git a/src/main/java/com/acethewildfire/acesbs/item/ModItemGroups.java b/src/main/java/com/acethewildfire/acesbs/item/ModItemGroups.java index 01fd35b..ece2e1a 100644 --- a/src/main/java/com/acethewildfire/acesbs/item/ModItemGroups.java +++ b/src/main/java/com/acethewildfire/acesbs/item/ModItemGroups.java @@ -105,6 +105,7 @@ public class ModItemGroups { entries.add(ModItems.COMBUSTIBLE_LEMON); entries.add(ModItems.BERSERKERS_PAULDRON); entries.add(ModItems.WILDFIRE_BOOTS); + entries.add(ModItems.SOVS_PLATE_CARRIER); }) diff --git a/src/main/java/com/acethewildfire/acesbs/item/ModItems.java b/src/main/java/com/acethewildfire/acesbs/item/ModItems.java index efb1c28..49c32d2 100644 --- a/src/main/java/com/acethewildfire/acesbs/item/ModItems.java +++ b/src/main/java/com/acethewildfire/acesbs/item/ModItems.java @@ -144,6 +144,24 @@ public class ModItems { } ); + public static final Item SOVS_PLATE_CARRIER = ModItems.registerItem("sovs_plate_carrier", + new SovsPlateCarrierArmorItem(ModArmorMaterials.PLATES, ArmorItem.Type.CHESTPLATE, new Item.Settings() + .maxDamage(6)){ + @Override + public void appendTooltip(ItemStack stack, TooltipContext context, List tooltip, TooltipType type) { + if(!Screen.hasShiftDown()){ + tooltip.add(Text.translatable("tooltip.acesbs.sovs_plate_carrier_desc")); + tooltip.add(Text.translatable("tooltip.acesbs.generic.shift_more")); + } + else { + tooltip.add(Text.translatable("tooltip.acesbs.sovs_plate_carrier_thanks")); + tooltip.add(Text.translatable("tooltip.acesbs.sovs_plate_carrier_desc2")); + tooltip.add(Text.translatable("tooltip.acesbs.sovs_plate_carrier_desc3")); + } + super.appendTooltip(stack, context, tooltip, type); + } + }); + public static final Item WILDFIRE_BOOTS = registerItem("wildfire_boots", new WildfireArmorItem(ModArmorMaterials.WILDFIRE_ARMOR_MATERIAL, ArmorItem.Type.BOOTS, new Item.Settings() .maxDamage(ArmorItem.Type.BOOTS.getMaxDamage(15))){ diff --git a/src/main/java/com/acethewildfire/acesbs/item/custom/SovsPlateCarrierArmorItem.java b/src/main/java/com/acethewildfire/acesbs/item/custom/SovsPlateCarrierArmorItem.java new file mode 100644 index 0000000..f2c9344 --- /dev/null +++ b/src/main/java/com/acethewildfire/acesbs/item/custom/SovsPlateCarrierArmorItem.java @@ -0,0 +1,27 @@ +package com.acethewildfire.acesbs.item.custom; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EquipmentSlot; +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.ArmorItem; +import net.minecraft.item.ArmorMaterial; +import net.minecraft.item.ItemStack; +import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.world.World; + +public class SovsPlateCarrierArmorItem extends ArmorItem { + public SovsPlateCarrierArmorItem(RegistryEntry material, Type type, Settings settings) { + super(material, type, settings); + } + + + + public static float getDamageMultiplier(ItemStack stack) { + float durabilityRatio = + (float)(stack.getMaxDamage() - stack.getDamage()) / stack.getMaxDamage(); + + // 0 durability → 1.0x damage + // full durability → 0.01x damage (99% reduction) + return 1.0f - (durabilityRatio * 0.99f); + } +} diff --git a/src/main/java/com/acethewildfire/acesbs/mixin/ItemStackMixin.java b/src/main/java/com/acethewildfire/acesbs/mixin/ItemStackMixin.java new file mode 100644 index 0000000..12b534c --- /dev/null +++ b/src/main/java/com/acethewildfire/acesbs/mixin/ItemStackMixin.java @@ -0,0 +1,35 @@ +package com.acethewildfire.acesbs.mixin; + +import com.acethewildfire.acesbs.item.custom.SovsPlateCarrierArmorItem; +import net.minecraft.entity.EquipmentSlot; +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.ItemStack; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(ItemStack.class) +public abstract class ItemStackMixin { + + @Inject(method = "damage*", at = @At("HEAD"), cancellable = true) + private void preventChestplateBreak( + int amount, + LivingEntity entity, + EquipmentSlot slot, + CallbackInfo cir + ) { + ItemStack stack = (ItemStack)(Object)this; + + if (stack.getItem() instanceof SovsPlateCarrierArmorItem) { + + int newDamage = stack.getDamage() + amount; + + if (newDamage >= stack.getMaxDamage()) { + stack.setDamage(stack.getMaxDamage()); + cir.cancel(); // cancel breaking + } + } + } +} diff --git a/src/main/java/com/acethewildfire/acesbs/mixin/LivingEntityMixin.java b/src/main/java/com/acethewildfire/acesbs/mixin/LivingEntityMixin.java new file mode 100644 index 0000000..05d2ba5 --- /dev/null +++ b/src/main/java/com/acethewildfire/acesbs/mixin/LivingEntityMixin.java @@ -0,0 +1,40 @@ +package com.acethewildfire.acesbs.mixin; + +import com.acethewildfire.acesbs.item.custom.SovsPlateCarrierArmorItem; +import net.minecraft.entity.EquipmentSlot; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.damage.DamageSource; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyVariable; + +@Mixin(LivingEntity.class) +public abstract class LivingEntityMixin { + + @ModifyVariable( + method = "damage", + at = @At("HEAD"), + argsOnly = true + ) + private float modifyDamage(float amount) { + + LivingEntity entity = (LivingEntity)(Object)this; + + if (entity instanceof PlayerEntity player) { + + ItemStack chest = player.getEquippedStack(EquipmentSlot.CHEST); + + if (chest.getItem() instanceof SovsPlateCarrierArmorItem) { + + float multiplier = + SovsPlateCarrierArmorItem.getDamageMultiplier(chest); + + amount *= multiplier; + } + } + + return amount; + } +} diff --git a/src/main/resources/acesbs.mixins.json b/src/main/resources/acesbs.mixins.json index aed3c4d..7b0f6ce 100644 --- a/src/main/resources/acesbs.mixins.json +++ b/src/main/resources/acesbs.mixins.json @@ -7,6 +7,8 @@ "CreeperTickMixin", "CreeperTransformStateMixin", "EntityMixin", + "LivingEntityMixin", + "ItemStackMixin", "ExampleMixin" ], "injectors": { diff --git a/src/main/resources/assets/acesbs/lang/en_us.json b/src/main/resources/assets/acesbs/lang/en_us.json index 5b3c2e1..f51a58b 100644 --- a/src/main/resources/assets/acesbs/lang/en_us.json +++ b/src/main/resources/assets/acesbs/lang/en_us.json @@ -43,6 +43,7 @@ "item.acesbs.berserkers_pauldron": "Berserker's Pauldron", "item.acesbs.wildfire_boots": "Wildfire Boots", + "item.acesbs.sovs_plate_carrier": "Sov's Plate Carrier", "item.acesbs.kaupen_bow": "Kaupen Bow", @@ -165,6 +166,11 @@ "tooltip.acesbs.wildfire_boots_desc": "§c§oThere are no walls.§r", "tooltip.acesbs.wildfire_boots_thanks": "§7§oProgrammed with <3 by/for AceTheWildfire§r", + "tooltip.acesbs.sovs_plate_carrier_desc": "§c§oProtection from Ace... hopefully§r", + "tooltip.acesbs.sovs_plate_carrier_desc2": "Damage reduction scales with item durability.", + "tooltip.acesbs.sovs_plate_carrier_desc3": "Repair with Ballistic Plates.", + "tooltip.acesbs.sovs_plate_carrier_thanks": "§7§oProgrammed with <3 for Sovaeris§r", + "tooltip.acesbs.thanks_sov": "§7§oTextures by Sovaeris§r", "tooltip.acesbs.combustible_lemon1": "§7§oDo you know who I am?§r", diff --git a/src/main/resources/assets/acesbs/textures/item/sovs_plate_carrier.png b/src/main/resources/assets/acesbs/textures/item/sovs_plate_carrier.png new file mode 100644 index 0000000..bab5613 Binary files /dev/null and b/src/main/resources/assets/acesbs/textures/item/sovs_plate_carrier.png differ diff --git a/src/main/resources/assets/acesbs/textures/item/wildfire_boots.png b/src/main/resources/assets/acesbs/textures/item/wildfire_boots.png index ec4183e..d05bcb0 100644 Binary files a/src/main/resources/assets/acesbs/textures/item/wildfire_boots.png and b/src/main/resources/assets/acesbs/textures/item/wildfire_boots.png differ diff --git a/src/main/resources/assets/acesbs/textures/models/armor/plates_layer_1.png b/src/main/resources/assets/acesbs/textures/models/armor/plates_layer_1.png new file mode 100644 index 0000000..9c54e7e Binary files /dev/null and b/src/main/resources/assets/acesbs/textures/models/armor/plates_layer_1.png differ diff --git a/src/main/resources/assets/acesbs/textures/models/armor/wildfire_layer_1.png b/src/main/resources/assets/acesbs/textures/models/armor/wildfire_layer_1.png index 11c961e..3ea252e 100644 Binary files a/src/main/resources/assets/acesbs/textures/models/armor/wildfire_layer_1.png and b/src/main/resources/assets/acesbs/textures/models/armor/wildfire_layer_1.png differ