From 35ac79bf3d84753ad497fc5d6fd57fbe3e0b9769 Mon Sep 17 00:00:00 2001 From: Sollace Date: Mon, 23 Oct 2023 23:11:13 +0100 Subject: [PATCH] Added horseshoes --- .../com/minelittlepony/unicopia/UTags.java | 1 + .../unicopia/item/HorseShoeItem.java | 112 ++++++++++++++++++ .../unicopia/item/PolearmItem.java | 2 +- .../unicopia/item/ProjectileItem.java | 2 +- .../minelittlepony/unicopia/item/UItems.java | 5 + .../PhysicsBodyProjectileEntity.java | 29 ++++- .../resources/assets/unicopia/lang/en_us.json | 7 ++ .../models/item/copper_horse_shoe.json | 6 + .../models/item/golden_horse_shoe.json | 6 + .../unicopia/models/item/iron_horse_shoe.json | 6 + .../models/item/netherite_horse_shoe.json | 6 + .../textures/item/copper_horse_shoe.png | Bin 0 -> 7466 bytes .../textures/item/golden_horse_shoe.png | Bin 0 -> 7461 bytes .../textures/item/iron_horse_shoe.png | Bin 0 -> 7149 bytes .../textures/item/netherite_horse_shoe.png | Bin 0 -> 7403 bytes .../unicopia/recipes/copper_horse_shoe.json | 16 +++ .../unicopia/recipes/golden_horse_shoe.json | 16 +++ .../unicopia/recipes/iron_horse_shoe.json | 16 +++ .../recipes/netherite_horse_shoe.json | 16 +++ .../data/unicopia/tags/items/horse_shoes.json | 9 ++ 20 files changed, 251 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/minelittlepony/unicopia/item/HorseShoeItem.java create mode 100644 src/main/resources/assets/unicopia/models/item/copper_horse_shoe.json create mode 100644 src/main/resources/assets/unicopia/models/item/golden_horse_shoe.json create mode 100644 src/main/resources/assets/unicopia/models/item/iron_horse_shoe.json create mode 100644 src/main/resources/assets/unicopia/models/item/netherite_horse_shoe.json create mode 100644 src/main/resources/assets/unicopia/textures/item/copper_horse_shoe.png create mode 100644 src/main/resources/assets/unicopia/textures/item/golden_horse_shoe.png create mode 100644 src/main/resources/assets/unicopia/textures/item/iron_horse_shoe.png create mode 100644 src/main/resources/assets/unicopia/textures/item/netherite_horse_shoe.png create mode 100644 src/main/resources/data/unicopia/recipes/copper_horse_shoe.json create mode 100644 src/main/resources/data/unicopia/recipes/golden_horse_shoe.json create mode 100644 src/main/resources/data/unicopia/recipes/iron_horse_shoe.json create mode 100644 src/main/resources/data/unicopia/recipes/netherite_horse_shoe.json create mode 100644 src/main/resources/data/unicopia/tags/items/horse_shoes.json diff --git a/src/main/java/com/minelittlepony/unicopia/UTags.java b/src/main/java/com/minelittlepony/unicopia/UTags.java index fb924166..c6ba480c 100644 --- a/src/main/java/com/minelittlepony/unicopia/UTags.java +++ b/src/main/java/com/minelittlepony/unicopia/UTags.java @@ -29,6 +29,7 @@ public interface UTags { TagKey FLOATS_ON_CLOUDS = item("floats_on_clouds"); TagKey POLEARMS = item("polearms"); + TagKey HORSE_SHOES = item("horse_shoes"); TagKey APPLE_SEEDS = item("apple_seeds"); TagKey ACORNS = item("acorns"); diff --git a/src/main/java/com/minelittlepony/unicopia/item/HorseShoeItem.java b/src/main/java/com/minelittlepony/unicopia/item/HorseShoeItem.java new file mode 100644 index 00000000..a7899e8d --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/item/HorseShoeItem.java @@ -0,0 +1,112 @@ +package com.minelittlepony.unicopia.item; + +import java.util.List; + +import org.jetbrains.annotations.Nullable; + +import com.google.common.collect.ImmutableMultimap; +import com.google.common.collect.Multimap; +import com.minelittlepony.unicopia.Race; +import com.minelittlepony.unicopia.USounds; +import com.minelittlepony.unicopia.Unicopia; +import com.minelittlepony.unicopia.entity.mob.UEntityAttributes; +import com.minelittlepony.unicopia.entity.player.Pony; +import com.minelittlepony.unicopia.projectile.PhysicsBodyProjectileEntity; + +import net.minecraft.client.item.TooltipContext; +import net.minecraft.entity.EquipmentSlot; +import net.minecraft.entity.attribute.EntityAttribute; +import net.minecraft.entity.attribute.EntityAttributeModifier; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.sound.SoundEvent; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; +import net.minecraft.world.World; + +public class HorseShoeItem extends HeavyProjectileItem { + + private final float projectileInnacuracy; + private final float baseProjectileSpeed; + + private final Multimap attributeModifiers; + + public HorseShoeItem(Settings settings, float projectileDamage, float projectileInnacuracy, float baseProjectileSpeed) { + super(settings, projectileDamage); + this.projectileInnacuracy = projectileInnacuracy; + this.baseProjectileSpeed = baseProjectileSpeed; + + ImmutableMultimap.Builder builder = ImmutableMultimap.builder(); + builder.put(UEntityAttributes.EXTENDED_ATTACK_DISTANCE, new EntityAttributeModifier(PolearmItem.ATTACK_RANGE_MODIFIER_ID, "Weapon modifier", -3F, EntityAttributeModifier.Operation.ADDITION)); + attributeModifiers = builder.build(); + } + + @Override + public boolean canRepair(ItemStack stack, ItemStack ingredient) { + return ingredient.isOf(this); + } + + @Override + public void appendTooltip(ItemStack stack, @Nullable World world, List tooltip, TooltipContext context) { + float degradation = (stack.getDamage() / (float)stack.getMaxDamage()); + float inaccuracy = projectileInnacuracy + degradation * 30; + tooltip.add(Text.empty()); + + Pony pony = Unicopia.SIDE.getPony().orElse(null); + float speed = baseProjectileSpeed; + if (pony != null) { + var race = pony.getCompositeRace(); + + if (race.any(Race::canUseEarth)) { + speed += 0.5F; + } + if (!race.includes(Race.ALICORN) && race.physical().canFly()) { + speed /= 1.5F; + } + + } + speed /= 1.5F; + speed *= 1 - (0.6F * degradation); + + tooltip.add(Text.translatable("item.unicopia.horse_shoe.accuracy", 100 * (30 - inaccuracy) / 30).formatted(Formatting.GRAY)); + tooltip.add(Text.translatable("item.unicopia.horse_shoe.speed", Math.max(0.2F, speed)).formatted(Formatting.GRAY)); + } + + @Override + protected PhysicsBodyProjectileEntity createProjectile(ItemStack stack, World world, @Nullable PlayerEntity player) { + PhysicsBodyProjectileEntity projectile = super.createProjectile(stack, world, player); + + float degradation = (stack.getDamage() / (float)stack.getMaxDamage()); + + if (player != null) { + Pony pony = Pony.of(player); + var race = pony.getCompositeRace(); + float speed = baseProjectileSpeed + 0.1F; + if (race.any(Race::canUseEarth)) { + speed += 0.5F; + } + if (!race.includes(Race.ALICORN) && race.physical().canFly()) { + speed /= 1.5F; + } + speed /= 1.5F; + speed *= 1 - (0.6F * degradation); + float inaccuracy = projectileInnacuracy + degradation * 30; + projectile.setVelocity(player, player.getPitch(), player.getYaw(), 0, Math.max(0.2F, speed), inaccuracy); + } + return projectile; + } + + @Override + protected SoundEvent getThrowSound(ItemStack stack) { + return USounds.Vanilla.ITEM_TRIDENT_THROW; + } + + @Override + public Multimap getAttributeModifiers(EquipmentSlot slot) { + if (slot == EquipmentSlot.MAINHAND) { + return attributeModifiers; + } + return super.getAttributeModifiers(slot); + } + +} diff --git a/src/main/java/com/minelittlepony/unicopia/item/PolearmItem.java b/src/main/java/com/minelittlepony/unicopia/item/PolearmItem.java index 2658cb01..a7f430c4 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/PolearmItem.java +++ b/src/main/java/com/minelittlepony/unicopia/item/PolearmItem.java @@ -15,7 +15,7 @@ import net.minecraft.entity.attribute.*; import net.minecraft.item.*; public class PolearmItem extends SwordItem { - protected static final UUID ATTACK_RANGE_MODIFIER_ID = UUID.fromString("A7B3659C-AA74-469C-963A-09A391DCAA0F"); + static final UUID ATTACK_RANGE_MODIFIER_ID = UUID.fromString("A7B3659C-AA74-469C-963A-09A391DCAA0F"); private final Multimap attributeModifiers; diff --git a/src/main/java/com/minelittlepony/unicopia/item/ProjectileItem.java b/src/main/java/com/minelittlepony/unicopia/item/ProjectileItem.java index 767d098c..5e7a643d 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/ProjectileItem.java +++ b/src/main/java/com/minelittlepony/unicopia/item/ProjectileItem.java @@ -40,7 +40,7 @@ abstract class ProjectileItem extends Item { 0.4F / (world.random.nextFloat() * 0.4F + 0.8F)); if (!world.isClient) { - world.spawnEntity(createProjectile(stack, world, player)); + world.spawnEntity(createProjectile(stack.copyWithCount(1), world, player)); } player.incrementStat(Stats.USED.getOrCreateStat(this)); diff --git a/src/main/java/com/minelittlepony/unicopia/item/UItems.java b/src/main/java/com/minelittlepony/unicopia/item/UItems.java index 9604ea65..8da9d346 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/UItems.java +++ b/src/main/java/com/minelittlepony/unicopia/item/UItems.java @@ -127,6 +127,11 @@ public interface UItems { Item MEADOWBROOKS_STAFF = register("meadowbrooks_staff", new StaffItem(new Settings().rarity(Rarity.UNCOMMON).maxCount(1).maxDamage(120)), ItemGroups.TOOLS); Item MAGIC_STAFF = register("magic_staff", new EnchantedStaffItem(new Settings().rarity(Rarity.UNCOMMON).maxCount(1).maxDamage(120)), ItemGroups.TOOLS); + Item IRON_HORSE_SHOE = register("iron_horse_shoe", new HorseShoeItem(new Item.Settings().maxDamage(200), 4, 0.6F, 1), ItemGroups.COMBAT); + Item GOLDEN_HORSE_SHOE = register("golden_horse_shoe", new HorseShoeItem(new Item.Settings().maxDamage(100), 5, 0.1F, 0.5F), ItemGroups.COMBAT); + Item COPPER_HORSE_SHOE = register("copper_horse_shoe", new HorseShoeItem(new Item.Settings().maxDamage(250), 6, 0.5F, 0.8F), ItemGroups.COMBAT); + Item NETHERITE_HORSE_SHOE = register("netherite_horse_shoe", new HorseShoeItem(new Item.Settings().maxDamage(800), 3, 0.7F, 1.2F), ItemGroups.COMBAT); + Item WOODEN_POLEARM = register("wooden_polearm", new PolearmItem(ToolMaterials.WOOD, 2, -3.6F, 2, new Item.Settings()), ItemGroups.COMBAT); Item STONE_POLEARM = register("stone_polearm", new PolearmItem(ToolMaterials.STONE, 2, -3.6F, 2, new Item.Settings()), ItemGroups.COMBAT); Item IRON_POLEARM = register("iron_polearm", new PolearmItem(ToolMaterials.IRON, 2, -3.6F, 3, new Item.Settings()), ItemGroups.COMBAT); diff --git a/src/main/java/com/minelittlepony/unicopia/projectile/PhysicsBodyProjectileEntity.java b/src/main/java/com/minelittlepony/unicopia/projectile/PhysicsBodyProjectileEntity.java index 93eb890f..13d49ce9 100644 --- a/src/main/java/com/minelittlepony/unicopia/projectile/PhysicsBodyProjectileEntity.java +++ b/src/main/java/com/minelittlepony/unicopia/projectile/PhysicsBodyProjectileEntity.java @@ -7,7 +7,6 @@ import com.minelittlepony.unicopia.UTags; import com.minelittlepony.unicopia.ability.magic.Caster; import com.minelittlepony.unicopia.entity.damage.UDamageTypes; import com.minelittlepony.unicopia.entity.mob.UEntities; - import net.minecraft.block.BlockState; import net.minecraft.block.ButtonBlock; import net.minecraft.block.HopperBlock; @@ -131,6 +130,16 @@ public class PhysicsBodyProjectileEntity extends PersistentProjectileEntity impl setYaw(getYaw() + 180); prevYaw += 180; return; + } else { + ItemStack stack = asItemStack(); + if (stack.isIn(UTags.HORSE_SHOES)) { + if (stack.damage(1 + random.nextInt(10), random, null)) { + playSound(USounds.Vanilla.ENTITY_ITEM_BREAK, 1, 1); + } else { + dropStack(stack); + } + setStack(ItemStack.EMPTY); + } } super.onEntityHit(hit); } @@ -221,12 +230,28 @@ public class PhysicsBodyProjectileEntity extends PersistentProjectileEntity impl } setSound(state.getSoundGroup().getStepSound()); - getWorld().playSoundFromEntity(null, this, state.getSoundGroup().getStepSound(), SoundCategory.BLOCKS, 1, 1); emitGameEvent(GameEvent.STEP); + + if (!isBouncy()) { + if (stack.isIn(UTags.HORSE_SHOES)) { + if (stack.damage(1 + random.nextInt(10), random, null)) { + playSound(USounds.Vanilla.ENTITY_ITEM_BREAK, 1, 1); + discard(); + return; + } + } + + getWorld().playSoundFromEntity(null, this, getHitSound(), SoundCategory.BLOCKS, 0.6F, 1); + } else { + getWorld().playSoundFromEntity(null, this, state.getSoundGroup().getStepSound(), SoundCategory.BLOCKS, 1, 1); + } } @Override protected SoundEvent getHitSound() { + if (getStack().isIn(UTags.HORSE_SHOES)) { + return USounds.Vanilla.ITEM_TRIDENT_HIT_GROUND; + } return isBouncy() ? USounds.ITEM_MUFFIN_BOUNCE.value() : USounds.ITEM_ROCK_LAND; } diff --git a/src/main/resources/assets/unicopia/lang/en_us.json b/src/main/resources/assets/unicopia/lang/en_us.json index b8ee61f3..59154b94 100644 --- a/src/main/resources/assets/unicopia/lang/en_us.json +++ b/src/main/resources/assets/unicopia/lang/en_us.json @@ -141,6 +141,13 @@ "item.unicopia.alicorn_amulet": "Alicorn Amulet", "item.unicopia.alicorn_amulet.lore": "Time worn: %d", + "item.unicopia.horse_shoe.accuracy": "Accuracy: %d%%", + "item.unicopia.horse_shoe.speed": "Speed: %d", + "item.unicopia.iron_horse_shoe": "Iron Horse Shoe", + "item.unicopia.golden_horse_shoe": "Golden Horse Shoe", + "item.unicopia.copper_horse_shoe": "Copper Horse Shoe", + "item.unicopia.netherite_horse_shoe": "Netherite Horse Shoe", + "item.unicopia.broken_alicorn_amulet": "Broken Alicorn Amulet", "item.unicopia.unicorn_amulet": "Unicorn Amulet", "item.unicopia.unicorn_amulet.lore": "Grants magical abilities to whoever wears it", diff --git a/src/main/resources/assets/unicopia/models/item/copper_horse_shoe.json b/src/main/resources/assets/unicopia/models/item/copper_horse_shoe.json new file mode 100644 index 00000000..a395cc95 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/copper_horse_shoe.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "unicopia:item/copper_horse_shoe" + } +} diff --git a/src/main/resources/assets/unicopia/models/item/golden_horse_shoe.json b/src/main/resources/assets/unicopia/models/item/golden_horse_shoe.json new file mode 100644 index 00000000..0b035f8a --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/golden_horse_shoe.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "unicopia:item/golden_horse_shoe" + } +} diff --git a/src/main/resources/assets/unicopia/models/item/iron_horse_shoe.json b/src/main/resources/assets/unicopia/models/item/iron_horse_shoe.json new file mode 100644 index 00000000..1d8fc483 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/iron_horse_shoe.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "unicopia:item/iron_horse_shoe" + } +} diff --git a/src/main/resources/assets/unicopia/models/item/netherite_horse_shoe.json b/src/main/resources/assets/unicopia/models/item/netherite_horse_shoe.json new file mode 100644 index 00000000..3138e8d6 --- /dev/null +++ b/src/main/resources/assets/unicopia/models/item/netherite_horse_shoe.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "unicopia:item/netherite_horse_shoe" + } +} diff --git a/src/main/resources/assets/unicopia/textures/item/copper_horse_shoe.png b/src/main/resources/assets/unicopia/textures/item/copper_horse_shoe.png new file mode 100644 index 0000000000000000000000000000000000000000..b16bfd05b9f6c32bbb1949e8db0b50ca22965718 GIT binary patch literal 7466 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 r3Coy&# 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/item/iron_horse_shoe.png b/src/main/resources/assets/unicopia/textures/item/iron_horse_shoe.png new file mode 100644 index 0000000000000000000000000000000000000000..1f1f55ec9f19809a7038ca795a3f5655c879e62a GIT binary patch literal 7149 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 G7x_Qot^;oX literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/unicopia/textures/item/netherite_horse_shoe.png b/src/main/resources/assets/unicopia/textures/item/netherite_horse_shoe.png new file mode 100644 index 0000000000000000000000000000000000000000..60d88ec8e879aa8fcc118cc61f952d9e9ac1fedb GIT binary patch literal 7403 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