From 668dd13db7e39ae754863b26625dcaad26e1b384 Mon Sep 17 00:00:00 2001 From: Sollace Date: Mon, 30 Sep 2024 15:18:47 +0100 Subject: [PATCH] Update items and music discs --- .../com/minelittlepony/unicopia/USounds.java | 13 ++++-- .../unicopia/datagen/Datagen.java | 2 + .../providers/UJukeboxSongProvider.java | 43 +++++++++++++++++++ .../entity/damage/MagicalDamageSource.java | 5 ++- .../unicopia/item/BluntWeaponItem.java | 30 ------------- .../unicopia/item/FilledJarItem.java | 3 +- .../unicopia/item/OatmealItem.java | 2 +- .../unicopia/item/UFoodComponents.java | 4 +- .../unicopia/item/UItemModifierIds.java | 10 +++++ .../minelittlepony/unicopia/item/UItems.java | 38 ++++++++-------- .../unicopia/item/UJukeboxSongs.java | 18 ++++++++ 11 files changed, 111 insertions(+), 57 deletions(-) create mode 100644 src/main/java/com/minelittlepony/unicopia/datagen/providers/UJukeboxSongProvider.java delete mode 100644 src/main/java/com/minelittlepony/unicopia/item/BluntWeaponItem.java create mode 100644 src/main/java/com/minelittlepony/unicopia/item/UItemModifierIds.java create mode 100644 src/main/java/com/minelittlepony/unicopia/item/UJukeboxSongs.java diff --git a/src/main/java/com/minelittlepony/unicopia/USounds.java b/src/main/java/com/minelittlepony/unicopia/USounds.java index df7900f7..88dcf351 100644 --- a/src/main/java/com/minelittlepony/unicopia/USounds.java +++ b/src/main/java/com/minelittlepony/unicopia/USounds.java @@ -148,16 +148,21 @@ public interface USounds { SoundEvent GUI_SPELL_CRAFT_SUCCESS = register("gui.spellcraft.success"); RegistryEntry.Reference GUI_SPELL_EQUIP = UI_BUTTON_CLICK; - SoundEvent RECORD_CRUSADE = register("music_disc.crusade"); - SoundEvent RECORD_PET = register("music_disc.pet"); - SoundEvent RECORD_POPULAR = register("music_disc.popular"); - SoundEvent RECORD_FUNK = register("music_disc.funk"); + RegistryEntry.Reference RECORD_CRUSADE = registerReference("music_disc.crusade"); + RegistryEntry.Reference RECORD_PET = registerReference("music_disc.pet"); + RegistryEntry.Reference RECORD_POPULAR = registerReference("music_disc.popular"); + RegistryEntry.Reference RECORD_FUNK = registerReference("music_disc.funk"); static SoundEvent register(String name) { Identifier id = Unicopia.id(name); return Registry.register(Registries.SOUND_EVENT, id, SoundEvent.of(id)); } + static RegistryEntry.Reference registerReference(String name) { + Identifier id = Unicopia.id(name); + return Registry.registerReference(Registries.SOUND_EVENT, id, SoundEvent.of(id)); + } + static SoundEvent register(String name, float range) { Identifier id = Unicopia.id(name); return Registry.register(Registries.SOUND_EVENT, id, SoundEvent.of(id, range)); diff --git a/src/main/java/com/minelittlepony/unicopia/datagen/Datagen.java b/src/main/java/com/minelittlepony/unicopia/datagen/Datagen.java index 94131585..6d669289 100644 --- a/src/main/java/com/minelittlepony/unicopia/datagen/Datagen.java +++ b/src/main/java/com/minelittlepony/unicopia/datagen/Datagen.java @@ -7,6 +7,7 @@ import com.minelittlepony.unicopia.block.EdibleBlock; import com.minelittlepony.unicopia.datagen.providers.DietsProvider; import com.minelittlepony.unicopia.datagen.providers.SeasonsGrowthRatesProvider; import com.minelittlepony.unicopia.datagen.providers.UAdvancementsProvider; +import com.minelittlepony.unicopia.datagen.providers.UJukeboxSongProvider; import com.minelittlepony.unicopia.datagen.providers.UModelProvider; import com.minelittlepony.unicopia.datagen.providers.UPaintingVariantProvider; import com.minelittlepony.unicopia.datagen.providers.loot.UBlockAdditionsLootTableProvider; @@ -66,6 +67,7 @@ public class Datagen implements DataGeneratorEntrypoint { final var paintingVariantProvider = pack.addProvider(UPaintingVariantProvider::new); pack.addProvider((output, registries) -> new UPaintingVariantTagProvider(output, registries, paintingVariantProvider)); + pack.addProvider(UJukeboxSongProvider::new); pack.addProvider(UModelProvider::new); pack.addProvider(URecipeProvider::new); pack.addProvider(UBlockLootTableProvider::new); diff --git a/src/main/java/com/minelittlepony/unicopia/datagen/providers/UJukeboxSongProvider.java b/src/main/java/com/minelittlepony/unicopia/datagen/providers/UJukeboxSongProvider.java new file mode 100644 index 00000000..e00b72d5 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/datagen/providers/UJukeboxSongProvider.java @@ -0,0 +1,43 @@ +package com.minelittlepony.unicopia.datagen.providers; + +import java.util.concurrent.CompletableFuture; + +import com.minelittlepony.unicopia.USounds; +import com.minelittlepony.unicopia.item.UJukeboxSongs; + +import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; +import net.fabricmc.fabric.api.datagen.v1.provider.FabricDynamicRegistryProvider; +import net.minecraft.block.jukebox.JukeboxSong; +import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.RegistryWrapper.WrapperLookup; +import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.sound.SoundEvent; +import net.minecraft.text.Text; +import net.minecraft.util.Util; + +public class UJukeboxSongProvider extends FabricDynamicRegistryProvider { + public UJukeboxSongProvider(FabricDataOutput output, CompletableFuture registriesFuture) { + super(output, registriesFuture); + } + + @Override + public String getName() { + return "Jukebox Songs"; + } + + @Override + protected void configure(WrapperLookup registries, Entries entries) { + register(entries, UJukeboxSongs.CRUSADE, USounds.RECORD_CRUSADE, 181, 1); + register(entries, UJukeboxSongs.PET, USounds.RECORD_PET, 221, 2); + register(entries, UJukeboxSongs.POPULAR, USounds.RECORD_POPULAR, 112, 3); + register(entries, UJukeboxSongs.FUNK, USounds.RECORD_FUNK, 91, 4); + } + + private void register( + Entries entries, + RegistryKey key, + RegistryEntry.Reference soundEvent, int lengthInSeconds, int comparatorOutput) { + entries.add(key, new JukeboxSong(soundEvent, Text.translatable(Util.createTranslationKey("jukebox_song", key.getValue())), lengthInSeconds, comparatorOutput)); + } + +} diff --git a/src/main/java/com/minelittlepony/unicopia/entity/damage/MagicalDamageSource.java b/src/main/java/com/minelittlepony/unicopia/entity/damage/MagicalDamageSource.java index fe12570a..2f3ac248 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/damage/MagicalDamageSource.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/damage/MagicalDamageSource.java @@ -7,6 +7,7 @@ import org.jetbrains.annotations.Nullable; import com.minelittlepony.unicopia.ability.magic.Caster; import com.minelittlepony.unicopia.entity.player.Pony; +import net.minecraft.component.DataComponentTypes; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.damage.DamageSource; @@ -60,11 +61,11 @@ public class MagicalDamageSource extends DamageSource { if (attacker == target) { basic += ".self"; - if (!item.isEmpty() && item.hasCustomName()) { + if (!item.isEmpty() && item.contains(DataComponentTypes.CUSTOM_NAME)) { basic += ".item"; params.add(item.toHoverableText()); } - } else if (!item.isEmpty() && item.hasCustomName()) { + } else if (!item.isEmpty() && item.contains(DataComponentTypes.CUSTOM_NAME)) { basic += ".item"; params.add(attacker.getDisplayName()); params.add(item.toHoverableText()); diff --git a/src/main/java/com/minelittlepony/unicopia/item/BluntWeaponItem.java b/src/main/java/com/minelittlepony/unicopia/item/BluntWeaponItem.java deleted file mode 100644 index 3fa3cb20..00000000 --- a/src/main/java/com/minelittlepony/unicopia/item/BluntWeaponItem.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.minelittlepony.unicopia.item; - -import java.util.UUID; - -import com.google.common.collect.Multimap; - -import net.minecraft.entity.EquipmentSlot; -import net.minecraft.entity.attribute.EntityAttribute; -import net.minecraft.entity.attribute.EntityAttributeModifier; -import net.minecraft.item.Item; - -public class BluntWeaponItem extends Item { - private final Multimap modifiers; - - public static final UUID KNOCKBACK_MODIFIER_ID = UUID.fromString("7b16994b-1edb-4381-be62-94317f39ec8f"); - public static final UUID LUCK_MODIFIER_ID = UUID.fromString("7b16994b-1edb-8431-be62-7f39ec94318f"); - - public BluntWeaponItem(Settings settings, Multimap modifiers) { - super(settings); - this.modifiers = modifiers; - } - - @Override - public Multimap getAttributeModifiers(EquipmentSlot slot) { - if (slot == EquipmentSlot.OFFHAND) { - return modifiers; - } - return super.getAttributeModifiers(slot); - } -} diff --git a/src/main/java/com/minelittlepony/unicopia/item/FilledJarItem.java b/src/main/java/com/minelittlepony/unicopia/item/FilledJarItem.java index fdd68996..f29188da 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/FilledJarItem.java +++ b/src/main/java/com/minelittlepony/unicopia/item/FilledJarItem.java @@ -17,6 +17,7 @@ import net.minecraft.entity.FlyingItemEntity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.attribute.EntityAttributeInstance; import net.minecraft.entity.attribute.EntityAttributes; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.particle.ParticleTypes; import net.minecraft.server.world.ServerWorld; @@ -27,7 +28,7 @@ import net.minecraft.util.math.MathHelper; import net.minecraft.world.WorldEvents; public class FilledJarItem extends ProjectileItem implements ProjectileDelegate.HitListener, ChameleonItem { - public FilledJarItem(Settings settings) { + public FilledJarItem(Item.Settings settings) { super(settings, 0); } diff --git a/src/main/java/com/minelittlepony/unicopia/item/OatmealItem.java b/src/main/java/com/minelittlepony/unicopia/item/OatmealItem.java index bb5c84d1..a166acb6 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/OatmealItem.java +++ b/src/main/java/com/minelittlepony/unicopia/item/OatmealItem.java @@ -5,7 +5,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.world.World; -public class OatmealItem extends StewItem { +public class OatmealItem extends Item { public OatmealItem(Item.Settings settings) { super(settings); diff --git a/src/main/java/com/minelittlepony/unicopia/item/UFoodComponents.java b/src/main/java/com/minelittlepony/unicopia/item/UFoodComponents.java index e5c9919c..298f62f4 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/UFoodComponents.java +++ b/src/main/java/com/minelittlepony/unicopia/item/UFoodComponents.java @@ -4,6 +4,7 @@ import net.minecraft.component.type.FoodComponent; import net.minecraft.component.type.FoodComponents; import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.entity.effect.StatusEffects; +import net.minecraft.item.Items; public interface UFoodComponents { FoodComponent OATS = builder(1, 0.7F).build(); @@ -12,6 +13,7 @@ public interface UFoodComponents { .statusEffect(new StatusEffectInstance(StatusEffects.HEALTH_BOOST, 1200, 1), 1) .statusEffect(new StatusEffectInstance(StatusEffects.STRENGTH, 1200, 1), 0.3F) .statusEffect(new StatusEffectInstance(StatusEffects.SPEED, 1200, 1), 0.2F) + .usingConvertsTo(Items.BOWL) .build(); FoodComponent DAFODIL_DAISY_SANDWICH = builder(3, 1.4F).build(); FoodComponent BURGER = builder(7, 1.4F).build(); @@ -24,7 +26,7 @@ public interface UFoodComponents { FoodComponent JUICE = builder(2, 1.8F).alwaysEdible().build(); FoodComponent BURNED_JUICE = builder(3, 1).build(); - FoodComponent NUT_BOWL = FoodComponents.BAKED_POTATO; //builder(4, 0.6F).build(); + FoodComponent NUT_BOWL = builder(5, 0.6F).usingConvertsTo(Items.BOWL).build();//FoodComponents.BAKED_POTATO; FoodComponent OATMEAL_COOKIE = FoodComponents.COOKIE; //builder(2, 0.1F).build(); FoodComponent CHOCOLATE_OATMEAL_COOKIE = builder(3, 0.4F).build(); diff --git a/src/main/java/com/minelittlepony/unicopia/item/UItemModifierIds.java b/src/main/java/com/minelittlepony/unicopia/item/UItemModifierIds.java new file mode 100644 index 00000000..3081200a --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/item/UItemModifierIds.java @@ -0,0 +1,10 @@ +package com.minelittlepony.unicopia.item; + +import com.minelittlepony.unicopia.Unicopia; + +import net.minecraft.util.Identifier; + +public interface UItemModifierIds { + Identifier KNOCKBACK_MODIFIER_ID = Unicopia.id("knockback_modifier"); + Identifier LUCK_MODIFIER_ID = Unicopia.id("luck_modifier"); +} diff --git a/src/main/java/com/minelittlepony/unicopia/item/UItems.java b/src/main/java/com/minelittlepony/unicopia/item/UItems.java index 96c8285e..199feeb9 100644 --- a/src/main/java/com/minelittlepony/unicopia/item/UItems.java +++ b/src/main/java/com/minelittlepony/unicopia/item/UItems.java @@ -1,6 +1,5 @@ package com.minelittlepony.unicopia.item; -import com.google.common.collect.ImmutableMultimap; import com.minelittlepony.unicopia.*; import com.minelittlepony.unicopia.block.FancyBedBlock.SheetPattern; import com.minelittlepony.unicopia.block.UBlocks; @@ -19,6 +18,9 @@ import com.terraformersmc.terraform.boat.api.TerraformBoatTypeRegistry; import com.terraformersmc.terraform.boat.api.item.TerraformBoatItemHelper; import net.minecraft.block.Blocks; +import net.minecraft.block.jukebox.JukeboxSong; +import net.minecraft.component.type.AttributeModifierSlot; +import net.minecraft.component.type.AttributeModifiersComponent; import net.minecraft.component.type.FoodComponents; import net.minecraft.entity.attribute.EntityAttributeModifier; import net.minecraft.entity.attribute.EntityAttributes; @@ -27,7 +29,6 @@ import net.minecraft.item.*; import net.minecraft.item.Item.Settings; import net.fabricmc.fabric.api.registry.CompostingChanceRegistry; import net.fabricmc.fabric.api.registry.FuelRegistry; -import net.minecraft.sound.SoundEvent; import net.minecraft.util.Rarity; import net.minecraft.util.UseAction; import net.minecraft.registry.Registry; @@ -45,10 +46,10 @@ public interface UItems { Item ROTTEN_APPLE = register("rotten_apple", new RottenAppleItem(new Item.Settings().food(FoodComponents.APPLE)), ItemGroups.FOOD_AND_DRINK); Item COOKED_ZAP_APPLE = register("cooked_zap_apple", new Item(new Item.Settings().food(FoodComponents.APPLE)), ItemGroups.FOOD_AND_DRINK); - Item MUSIC_DISC_CRUSADE = register("music_disc_crusade", USounds.RECORD_CRUSADE, 181); - Item MUSIC_DISC_PET = register("music_disc_pet", USounds.RECORD_PET, 221); - Item MUSIC_DISC_POPULAR = register("music_disc_popular", USounds.RECORD_POPULAR, 112); - Item MUSIC_DISC_FUNK = register("music_disc_funk", USounds.RECORD_FUNK, 91); + Item MUSIC_DISC_CRUSADE = register("music_disc_crusade", UJukeboxSongs.CRUSADE); + Item MUSIC_DISC_PET = register("music_disc_pet", UJukeboxSongs.PET); + Item MUSIC_DISC_POPULAR = register("music_disc_popular", UJukeboxSongs.POPULAR); + Item MUSIC_DISC_FUNK = register("music_disc_funk", UJukeboxSongs.FUNK); FriendshipBraceletItem FRIENDSHIP_BRACELET = register("friendship_bracelet", new FriendshipBraceletItem(new Item.Settings().rarity(Rarity.UNCOMMON)), ItemGroups.TOOLS); @@ -81,7 +82,7 @@ public interface UItems { Item OATMEAL_COOKIE = register("oatmeal_cookie", new Item(new Item.Settings().food(UFoodComponents.OATMEAL_COOKIE)), ItemGroups.FOOD_AND_DRINK); Item CHOCOLATE_OATMEAL_COOKIE = register("chocolate_oatmeal_cookie", new Item(new Item.Settings().food(UFoodComponents.CHOCOLATE_OATMEAL_COOKIE)), ItemGroups.FOOD_AND_DRINK); Item PINECONE_COOKIE = register("pinecone_cookie", new Item(new Item.Settings().food(FoodComponents.COOKIE)), ItemGroups.FOOD_AND_DRINK); - Item BOWL_OF_NUTS = register("bowl_of_nuts", new StewItem(new Item.Settings().food(UFoodComponents.NUT_BOWL).recipeRemainder(Items.BOWL)), ItemGroups.FOOD_AND_DRINK); + Item BOWL_OF_NUTS = register("bowl_of_nuts", new Item(new Item.Settings().food(UFoodComponents.NUT_BOWL).recipeRemainder(Items.BOWL)), ItemGroups.FOOD_AND_DRINK); Item SCONE = register("scone", new MuffinItem(new Item.Settings().maxCount(32).food(UFoodComponents.SCONE), 0), ItemGroups.FOOD_AND_DRINK); Item DAFFODIL_DAISY_SANDWICH = register("daffodil_daisy_sandwich", new Item(new Item.Settings().food(UFoodComponents.DAFODIL_DAISY_SANDWICH)), ItemGroups.FOOD_AND_DRINK); @@ -106,13 +107,13 @@ public interface UItems { Item PEBBLES = register("pebbles", new AliasedBlockItem(UBlocks.ROCKS, new Item.Settings()), ItemGroups.NATURAL); Item ROCK = register("rock", new HeavyProjectileItem(new Item.Settings(), 3), ItemGroups.NATURAL); - Item WEIRD_ROCK = register("weird_rock", new BluntWeaponItem(new Item.Settings(), ImmutableMultimap.of( - EntityAttributes.GENERIC_LUCK, new EntityAttributeModifier(BluntWeaponItem.LUCK_MODIFIER_ID, "Weapon modifier", 9, EntityAttributeModifier.Operation.ADD_VALUE) - )), ItemGroups.NATURAL); - Item TOM = register("tom", new BluntWeaponItem(new Item.Settings(), ImmutableMultimap.of( - EntityAttributes.GENERIC_KNOCKBACK_RESISTANCE, new EntityAttributeModifier(BluntWeaponItem.KNOCKBACK_MODIFIER_ID, "Weapon modifier", 0.9, EntityAttributeModifier.Operation.ADD_VALUE) - )), ItemGroups.NATURAL); - Item ROCK_STEW = register("rock_stew", new StewItem(new Item.Settings().food(FoodComponents.MUSHROOM_STEW).maxCount(1).recipeRemainder(Items.BOWL)), ItemGroups.FOOD_AND_DRINK); + Item WEIRD_ROCK = register("weird_rock", new Item(new Item.Settings().attributeModifiers(AttributeModifiersComponent.builder() + .add(EntityAttributes.GENERIC_LUCK, new EntityAttributeModifier(UItemModifierIds.LUCK_MODIFIER_ID, 9, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND) + .build())), ItemGroups.NATURAL); + Item TOM = register("tom", new Item(new Item.Settings().attributeModifiers(AttributeModifiersComponent.builder() + .add(EntityAttributes.GENERIC_KNOCKBACK_RESISTANCE, new EntityAttributeModifier(UItemModifierIds.KNOCKBACK_MODIFIER_ID, 0.9, EntityAttributeModifier.Operation.ADD_VALUE), AttributeModifierSlot.MAINHAND) + .build())), ItemGroups.NATURAL); + Item ROCK_STEW = register("rock_stew", new Item(new Item.Settings().food(FoodComponents.MUSHROOM_STEW).maxCount(1).recipeRemainder(Items.BOWL)), ItemGroups.FOOD_AND_DRINK); Item ROCK_CANDY = register("rock_candy", new Item(new Item.Settings().food(UFoodComponents.CANDY).maxCount(16)), ItemGroups.FOOD_AND_DRINK); Item SALT_CUBE = register("salt_cube", new Item(new Item.Settings().food(UFoodComponents.SALT_CUBE)), ItemGroups.FOOD_AND_DRINK); @@ -267,11 +268,12 @@ public interface UItems { return ItemGroupRegistry.register(Unicopia.id(name), item); } - static MusicDiscItem register(String name, SoundEvent sound, int seconds) { - return register(name, new MusicDiscItem(1, sound, new Settings() + static Item register(String name, RegistryKey song) { + return register(name, new Item(new Settings() + .jukeboxPlayable(song) .maxCount(1) - .rarity(Rarity.RARE), seconds - ) {}, ItemGroups.TOOLS); + .rarity(Rarity.RARE) + ), ItemGroups.TOOLS); } static Item register(Race race) { diff --git a/src/main/java/com/minelittlepony/unicopia/item/UJukeboxSongs.java b/src/main/java/com/minelittlepony/unicopia/item/UJukeboxSongs.java new file mode 100644 index 00000000..9e206f65 --- /dev/null +++ b/src/main/java/com/minelittlepony/unicopia/item/UJukeboxSongs.java @@ -0,0 +1,18 @@ +package com.minelittlepony.unicopia.item; + +import com.minelittlepony.unicopia.Unicopia; + +import net.minecraft.block.jukebox.JukeboxSong; +import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.RegistryKeys; + +public interface UJukeboxSongs { + RegistryKey CRUSADE = of("crusade"); + RegistryKey PET = of("pet"); + RegistryKey POPULAR = of("popular"); + RegistryKey FUNK = of("funk"); + + private static RegistryKey of(String name) { + return RegistryKey.of(RegistryKeys.JUKEBOX_SONG, Unicopia.id(name)); + } +}