diff --git a/README.md b/README.md index 3e01b64..4de308b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# 版本 0.0.3.9.7.5 提前介绍c[最终版本对于0.0.4] 【注意:本解釋簡繁混寫,因爲趕時間,所以並不怎麽規範,請諒解】 +# 版本 0.0.3.9.8 提前介绍c[最终版本对于0.0.4] 【注意:本解釋簡繁混寫,因爲趕時間,所以並不怎麽規範,請諒解】 ## 简介 现在开始你可以用拴绳拴住玩家,也可以拴住自己了,不如尝试拴住彼此来通关我的世界吧( @@ -19,7 +19,7 @@ 获得飞一样的感觉(操作不当可能会摔死 + 拴绳箭可以拴其它可拴LivingEntity了( ### 紫水晶剪刀 - 剪断拴绳链接,在发射器里可使用 + 剪断拴绳链接,在发射器里可使用,对自己也可使用,但耗费更多耐久 #### 射中实体时,会将射击者拴绳绑定在改实体上(该实体父类必须是有LivingEntity类型),同时拴绳箭会以普通的箭矢掉落 #### 射中栅栏时,会自动将玩家拴在上面 ,同时拴绳箭会以普通的箭矢掉落 #### 在地面上的箭可以通过按Shift靠近来捡起,如果捡起实体为发射箭矢玩家,则直接获取拴绳箭矢,如果捡起者为非发射者则成为发送者的拴绳持有者,并获得普通箭矢 @@ -57,4 +57,4 @@ * `LP.KeepLeashNotDropTime` - 此规则决定,当拴绳关系创建时一段时间里,即是距离已经达到了断裂距离,也保持其不断裂 [默认值: 240ticks ,可设置范围[80, 1200]ticks] -* `LP.DefaultTalkArea` - 此规则决定,聊天半径最小正值 \ No newline at end of file +* `LP.DefaultTalkArea` - 此规则决定,聊天半径最小正值 [默认值: -1] \ No newline at end of file diff --git a/build.gradle b/build.gradle index 58bcbe4..a9400d6 100644 --- a/build.gradle +++ b/build.gradle @@ -59,7 +59,6 @@ runs { server { systemProperty 'forge.enabledGameTestNamespaces', project.mod_id - programArgument '--nogui' } // This run config launches GameTestServer and runs all registered gametests, then exits. diff --git a/gradle.properties b/gradle.properties index 379a319..7f8ab5d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -32,7 +32,7 @@ mod_name=Leashed Player # The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default. mod_license=MIT # The mod version. See https://semver.org/ -mod_version=0.0.3.9.7.5 +mod_version=0.0.3.9.8 # The group ID for the mod. It is only important when publishing as an artifact to a Maven repository. # This should match the base package used for the mod sources. # See https://maven.apache.org/guides/mini/guide-naming-conventions.html diff --git a/src/generated/resources/.cache/0aef4464247e697f9a7226f384437b478152c21c b/src/generated/resources/.cache/0aef4464247e697f9a7226f384437b478152c21c index 3456ff1..60f7765 100644 --- a/src/generated/resources/.cache/0aef4464247e697f9a7226f384437b478152c21c +++ b/src/generated/resources/.cache/0aef4464247e697f9a7226f384437b478152c21c @@ -1,4 +1,4 @@ -// 1.21 2024-11-03T11:56:02.1200385 Item Models: leashedplayer +// 1.21 2024-11-05T22:44:13.1744327 Item Models: leashedplayer 766c487fbf0c59e9045eeaf81daf583eb679b0e1 assets/leashedplayer/models/item/amethyst_shears.json 5846df9d85726428905701120ef34c9324c20faf assets/leashedplayer/models/item/bow_lra_pulling_0.json 845a7316b86e26f88c6932d4ef2656126503727a assets/leashedplayer/models/item/bow_lra_pulling_1.json @@ -7,4 +7,5 @@ bb0d76077719c83c8a8bd4346a24ea1766175125 assets/leashedplayer/models/item/fabric.json 63ec6c618a3a23eab4cab9c52d7d3250de9b516e assets/leashedplayer/models/item/kid_spawn_egg.json 114d3cc5832ef047403114504483c6f3ea07e77c assets/leashedplayer/models/item/leash_rope_arrow.json +39b631c9dacf0481bfe8b84c7e7dd5841baf4ff7 assets/leashedplayer/models/item/neoforge.json c4748995a5fe190d20e3bd16f4b2244164ec0f83 assets/leashedplayer/models/item/spectral_leash_rope_arrow.json diff --git a/src/generated/resources/.cache/103d9f3f36b01595f1aa5172191e60eff02e6924 b/src/generated/resources/.cache/103d9f3f36b01595f1aa5172191e60eff02e6924 index fa93094..75ede73 100644 --- a/src/generated/resources/.cache/103d9f3f36b01595f1aa5172191e60eff02e6924 +++ b/src/generated/resources/.cache/103d9f3f36b01595f1aa5172191e60eff02e6924 @@ -1,2 +1,3 @@ -// 1.21 2024-10-23T13:15:06.1082841 Registries +// 1.21 2024-11-05T23:00:18.5223698 Registries +f2536789df7f06362718a59ba4a96890e2f9b8aa data/leashedplayer/jukebox_song/what_does_the_fox_say.json 6f79a674215db9f9d2820b1c7f052c60ce729fee data/leashedplayer/painting_variant/group_photo.json diff --git a/src/generated/resources/.cache/211976637bfb5e111401ad2bfb58570ef2fb3dff b/src/generated/resources/.cache/211976637bfb5e111401ad2bfb58570ef2fb3dff index a76415c..7086cd0 100644 --- a/src/generated/resources/.cache/211976637bfb5e111401ad2bfb58570ef2fb3dff +++ b/src/generated/resources/.cache/211976637bfb5e111401ad2bfb58570ef2fb3dff @@ -1,2 +1,2 @@ -// 1.21 2024-11-03T11:56:02.1210394 Languages: en_us for mod: leashedplayer -e37115e9e6433f0d2a2748efc9749b10204119c7 assets/leashedplayer/lang/en_us.json +// 1.21 2024-11-05T22:44:13.1744327 Languages: en_us for mod: leashedplayer +61c2bbb33f4814254ffdcd122aab49c0cdaf3d83 assets/leashedplayer/lang/en_us.json diff --git a/src/generated/resources/.cache/735031f3addf80804addae5e3f53249900116f1e b/src/generated/resources/.cache/735031f3addf80804addae5e3f53249900116f1e new file mode 100644 index 0000000..ae42c16 --- /dev/null +++ b/src/generated/resources/.cache/735031f3addf80804addae5e3f53249900116f1e @@ -0,0 +1,2 @@ +// 1.21 2024-11-05T22:44:13.1754334 Sound Definitions +81f1cc9f404c2670bf7cc679107177ffb0b48c77 assets/leashedplayer/sounds.json diff --git a/src/generated/resources/.cache/a1129211d3ad6d65c101bb152ae8c66c8256bccb b/src/generated/resources/.cache/a1129211d3ad6d65c101bb152ae8c66c8256bccb index 64a1867..21d90e9 100644 --- a/src/generated/resources/.cache/a1129211d3ad6d65c101bb152ae8c66c8256bccb +++ b/src/generated/resources/.cache/a1129211d3ad6d65c101bb152ae8c66c8256bccb @@ -1,2 +1,2 @@ -// 1.21 2024-11-03T11:56:02.119039 Languages: zh_cn for mod: leashedplayer -bc7e4095ad9239d38aff0e14e4eb8be3903980ec assets/leashedplayer/lang/zh_cn.json +// 1.21 2024-11-05T22:44:13.1704334 Languages: zh_cn for mod: leashedplayer +c92526831cd149866543a1c10dd6a2b59fe1b36b assets/leashedplayer/lang/zh_cn.json diff --git a/src/generated/resources/.cache/ed628fd843215c1bf29a07b9cbd1b26a6af0636d b/src/generated/resources/.cache/ed628fd843215c1bf29a07b9cbd1b26a6af0636d index 7c31627..e202482 100644 --- a/src/generated/resources/.cache/ed628fd843215c1bf29a07b9cbd1b26a6af0636d +++ b/src/generated/resources/.cache/ed628fd843215c1bf29a07b9cbd1b26a6af0636d @@ -1,2 +1,2 @@ -// 1.21 2024-11-03T11:56:02.1180379 Languages: zh_tw for mod: leashedplayer -a4e3c3350a1a38b98fa7d7c0c2305a2c79440a50 assets/leashedplayer/lang/zh_tw.json +// 1.21 2024-11-05T22:44:13.1684263 Languages: zh_tw for mod: leashedplayer +12fe78d40c45b07ceb0b72ee9439fa132649e670 assets/leashedplayer/lang/zh_tw.json diff --git a/src/generated/resources/assets/leashedplayer/lang/en_us.json b/src/generated/resources/assets/leashedplayer/lang/en_us.json index 6a844e8..2638502 100644 --- a/src/generated/resources/assets/leashedplayer/lang/en_us.json +++ b/src/generated/resources/assets/leashedplayer/lang/en_us.json @@ -35,11 +35,13 @@ "item.leashedplayer.fabric": "Fabric", "item.leashedplayer.kid_spawn_egg": "Kid Spawn Egg", "item.leashedplayer.leash_rope_arrow": "Leash Rope Arrow", + "item.leashedplayer.neoforge": "NeoForge", "item.leashedplayer.spectral_leash_rope_arrow": "Spectral Leash Rope Arrow", "item.minecraft.lingering_potion.effect.no_leash": "Splash No Leash Potion", "item.minecraft.potion.effect.no_leash": "No Leash Potion", "item.minecraft.splash_potion.effect.no_leash": "Splash No Leash Potion", "item.minecraft.tipped_arrow.effect.no_leash": "Arrow of No Leash", + "jukebox_song.leashedplayer.what_does_the_fox_say": "What does the fox say?", "leashedplayer.chat.none_heard_you": "Nobody heard your message", "leashedplayer.command.chat.message.talkarea.current_config": "%s 's §6TalkArea Current§7:§e %d §6blocks §f(§aPrefence§7:§e %d §ablocks§f)§r", "leashedplayer.command.chat.message.talkarea.preference.set": "%s 's §atalk area preference set to §e%d§a blocks!§r", @@ -67,5 +69,6 @@ "leashedplayer.command.motion.message.multiply.successful": "§bMultiply Successfully.§a%s§7:§f[§eVec§7: §a(§f%f§7,§f%f§7,§f%f§a)§f]§r", "leashedplayer.command.motion.message.setter.successful": "§bSet Successfully.§a%s§7:§f[§eVec§7: §a(§f%f§7,§f%f§7,§f%f§a)§f]§r", "painting.leashedplayer.group_photo.author": "§9Leisure §4Time §eDock§r", - "painting.leashedplayer.group_photo.title": "§dGroup Photo §7[§6memorable§7]§r" + "painting.leashedplayer.group_photo.title": "§dGroup Photo §7[§6memorable§7]§r", + "sound.leashedplayer.subtitle.what_does_the_fox_say": "Great Chu will rise again! Chen She will be king!" } \ No newline at end of file diff --git a/src/generated/resources/assets/leashedplayer/lang/zh_cn.json b/src/generated/resources/assets/leashedplayer/lang/zh_cn.json index 58cca36..4f0848b 100644 --- a/src/generated/resources/assets/leashedplayer/lang/zh_cn.json +++ b/src/generated/resources/assets/leashedplayer/lang/zh_cn.json @@ -35,11 +35,13 @@ "item.leashedplayer.fabric": "Fabric", "item.leashedplayer.kid_spawn_egg": "小孩生成蛋", "item.leashedplayer.leash_rope_arrow": "拴绳箭", + "item.leashedplayer.neoforge": "NeoForge", "item.leashedplayer.spectral_leash_rope_arrow": "拴绳光灵箭", "item.minecraft.lingering_potion.effect.no_leash": "滞留型禁拴药水", "item.minecraft.potion.effect.no_leash": "禁拴药水", "item.minecraft.splash_potion.effect.no_leash": "喷溅型禁拴药水", "item.minecraft.tipped_arrow.effect.no_leash": "禁拴之箭", + "jukebox_song.leashedplayer.what_does_the_fox_say": "狐狸是怎么叫的?", "leashedplayer.chat.none_heard_you": "沒有人接收到你的消息", "leashedplayer.command.chat.message.talkarea.current_config": "%s§6目前聊天区域可见半径设置§7:§e %d §6格 §f(§a默认值§7:§e %d §a格§f)§r", "leashedplayer.command.chat.message.talkarea.preference.set": "%s§a默认聊天区域可见消息半径设置为 §e%d §a格!§r", @@ -67,5 +69,6 @@ "leashedplayer.command.motion.message.multiply.successful": "§b倍乘成功.§a%s§7:§f[§e加速度§7:§a(§f%f§7,§f%f§7,§f%f§a)§f]§r", "leashedplayer.command.motion.message.setter.successful": "§b设置成功.§a%s§7:§f[§e加速度§7:§a(§f%f§7,§f%f§7,§f%f§a)§f]§r", "painting.leashedplayer.group_photo.author": "§9闲趣§4时§e坞§r", - "painting.leashedplayer.group_photo.title": "§d集体照 §7[§6纪念§7]§r" + "painting.leashedplayer.group_photo.title": "§d集体照 §7[§6纪念§7]§r", + "sound.leashedplayer.subtitle.what_does_the_fox_say": "大楚兴~ 陈胜王~~" } \ No newline at end of file diff --git a/src/generated/resources/assets/leashedplayer/lang/zh_tw.json b/src/generated/resources/assets/leashedplayer/lang/zh_tw.json index 1f4f95e..b6c9c13 100644 --- a/src/generated/resources/assets/leashedplayer/lang/zh_tw.json +++ b/src/generated/resources/assets/leashedplayer/lang/zh_tw.json @@ -35,11 +35,13 @@ "item.leashedplayer.fabric": "Fabric", "item.leashedplayer.kid_spawn_egg": "小孩生成蛋", "item.leashedplayer.leash_rope_arrow": "拴繩箭", + "item.leashedplayer.neoforge": "NeoForge", "item.leashedplayer.spectral_leash_rope_arrow": "拴繩光靈箭", "item.minecraft.lingering_potion.effect.no_leash": "滯留型禁拴藥水", "item.minecraft.potion.effect.no_leash": "禁拴藥水", "item.minecraft.splash_potion.effect.no_leash": "噴濺型禁拴藥水", "item.minecraft.tipped_arrow.effect.no_leash": "禁拴之箭", + "jukebox_song.leashedplayer.what_does_the_fox_say": "狐狸是怎麽叫的?", "leashedplayer.chat.none_heard_you": "無人接收到你的訊息", "leashedplayer.command.chat.message.talkarea.current_config": "%s§6目前可見訊息聊天半徑設置§7:§e%d §6格 §f(§a默認值§7:§e%d §a格§f)§r", "leashedplayer.command.chat.message.talkarea.preference.set": "%s§a默認聊天區域可見訊息半徑設置為 §e%d §a格!§r", @@ -67,5 +69,6 @@ "leashedplayer.command.motion.message.multiply.successful": "§b倍乘成功.§a%s§7:§f[§e加速度§7:§a(§f%f§7,§f%f§7,§f%f§a)§f]§r", "leashedplayer.command.motion.message.setter.successful": "§b設置成功.§a%s§7:§f[§e加速度§7:§a(§f%f§7,§f%f§7,§f%f§a)§f]§r", "painting.leashedplayer.group_photo.author": "§9閑趣§4時§e塢§r", - "painting.leashedplayer.group_photo.title": "§d集體照 §7[§6紀念§7]§r" + "painting.leashedplayer.group_photo.title": "§d集體照 §7[§6紀念§7]§r", + "sound.leashedplayer.subtitle.what_does_the_fox_say": "大楚興~ 陳勝王~~" } \ No newline at end of file diff --git a/src/generated/resources/assets/leashedplayer/models/item/neoforge.json b/src/generated/resources/assets/leashedplayer/models/item/neoforge.json new file mode 100644 index 0000000..36b780c --- /dev/null +++ b/src/generated/resources/assets/leashedplayer/models/item/neoforge.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "leashedplayer:item/neoforge" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/leashedplayer/sounds.json b/src/generated/resources/assets/leashedplayer/sounds.json new file mode 100644 index 0000000..7f87818 --- /dev/null +++ b/src/generated/resources/assets/leashedplayer/sounds.json @@ -0,0 +1,8 @@ +{ + "music/what_does_the_fox_say": { + "sounds": [ + "leashedplayer:music/what_does_the_fox_say" + ], + "subtitle": "sound.leashedplayer.subtitle.what_does_the_fox_say" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/leashedplayer/jukebox_song/what_does_the_fox_say.json b/src/generated/resources/data/leashedplayer/jukebox_song/what_does_the_fox_say.json new file mode 100644 index 0000000..ca1236d --- /dev/null +++ b/src/generated/resources/data/leashedplayer/jukebox_song/what_does_the_fox_say.json @@ -0,0 +1,8 @@ +{ + "comparator_output": 15, + "description": { + "translate": "jukebox_song.leashedplayer.what_does_the_fox_say" + }, + "length_in_seconds": 121.0, + "sound_event": "leashedplayer:what_does_the_fox_say" +} \ No newline at end of file diff --git a/src/main/java/com/r3944realms/leashedplayer/LeashedPlayer.java b/src/main/java/com/r3944realms/leashedplayer/LeashedPlayer.java index a6b6d8e..c2ad138 100644 --- a/src/main/java/com/r3944realms/leashedplayer/LeashedPlayer.java +++ b/src/main/java/com/r3944realms/leashedplayer/LeashedPlayer.java @@ -8,6 +8,7 @@ import com.r3944realms.leashedplayer.content.entities.ModEntityRegister; import com.r3944realms.leashedplayer.content.items.ModCreativeTab; import com.r3944realms.leashedplayer.content.items.ModItemRegister; import com.r3944realms.leashedplayer.content.paintings.ModPaintingsRegister; +import com.r3944realms.leashedplayer.content.sounds.ModSoundRegister; import com.r3944realms.leashedplayer.utils.Util; import net.neoforged.bus.api.IEventBus; import net.neoforged.fml.ModLoadingContext; @@ -23,6 +24,7 @@ public class LeashedPlayer { public LeashedPlayer(IEventBus event) { ModItemRegister.register(event); ModPaintingsRegister.register(event); + ModSoundRegister.register(event); ModEffectRegister.register(event); ModPotionRegister.register(event); ModEntityRegister.register(event); diff --git a/src/main/java/com/r3944realms/leashedplayer/client/renders/entities/KidPlayerRenderer.java b/src/main/java/com/r3944realms/leashedplayer/client/renders/entities/KidPlayerRenderer.java index 8bc70ba..8ffa29c 100644 --- a/src/main/java/com/r3944realms/leashedplayer/client/renders/entities/KidPlayerRenderer.java +++ b/src/main/java/com/r3944realms/leashedplayer/client/renders/entities/KidPlayerRenderer.java @@ -6,7 +6,8 @@ import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.model.PlayerModel; import net.minecraft.client.model.geom.ModelLayers; import net.minecraft.client.renderer.MultiBufferSource; -import net.minecraft.client.renderer.entity.*; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.entity.HumanoidMobRenderer; import net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.InteractionHand; diff --git a/src/main/java/com/r3944realms/leashedplayer/content/items/ModItemRegister.java b/src/main/java/com/r3944realms/leashedplayer/content/items/ModItemRegister.java index a026bba..22e22b5 100644 --- a/src/main/java/com/r3944realms/leashedplayer/content/items/ModItemRegister.java +++ b/src/main/java/com/r3944realms/leashedplayer/content/items/ModItemRegister.java @@ -6,9 +6,13 @@ import com.r3944realms.leashedplayer.content.items.type.LeadBreakerItem; import com.r3944realms.leashedplayer.content.items.type.LeashRopeArrowItem; import com.r3944realms.leashedplayer.content.items.type.SpectralLeashRopeArrowItem; import com.r3944realms.leashedplayer.content.items.type.TestItem; +import com.r3944realms.leashedplayer.datagen.provider.attributes.ModJukeboxSongs; import net.minecraft.core.component.DataComponents; import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceKey; import net.minecraft.world.item.Item; +import net.minecraft.world.item.JukeboxSong; +import net.minecraft.world.item.Rarity; import net.neoforged.bus.api.IEventBus; import net.neoforged.neoforge.common.DeferredSpawnEggItem; import net.neoforged.neoforge.registries.DeferredRegister; @@ -35,6 +39,11 @@ public class ModItemRegister { .stacksTo(1))); public static final Supplier KID_SPAWN_EGG = ModItemRegister.register("kid_spawn_egg", () -> new DeferredSpawnEggItem(ModEntityRegister.KID, 0x3F4F1F, 0x3D0D4D, new Item.Properties())); + public static final Supplier NEOFORGE = ModItemRegister.register("neoforge", + () -> new Item(DistProperties(ModJukeboxSongs.FOX_MUSIC))); + public static Item.Properties DistProperties(ResourceKey song) { + return new Item.Properties().stacksTo(1).rarity(Rarity.RARE).jukeboxPlayable(song); + } public static Supplier register(String name, Supplier supplier) { return register(name, supplier, true); } diff --git a/src/main/java/com/r3944realms/leashedplayer/content/items/type/LeadBreakerItem.java b/src/main/java/com/r3944realms/leashedplayer/content/items/type/LeadBreakerItem.java index be9259a..92ad6a9 100644 --- a/src/main/java/com/r3944realms/leashedplayer/content/items/type/LeadBreakerItem.java +++ b/src/main/java/com/r3944realms/leashedplayer/content/items/type/LeadBreakerItem.java @@ -2,18 +2,17 @@ package com.r3944realms.leashedplayer.content.items.type; import com.r3944realms.leashedplayer.content.entities.LeashRopeArrow; import com.r3944realms.leashedplayer.modInterface.PlayerLeashable; -import net.minecraft.core.HolderGetter; -import net.minecraft.core.HolderSet; -import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.tags.BlockTags; +import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; import net.minecraft.world.entity.Leashable; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ShearsItem; import net.minecraft.world.item.component.Tool; -import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Blocks; import org.jetbrains.annotations.NotNull; @@ -63,4 +62,18 @@ public class LeadBreakerItem extends ShearsItem { return InteractionResult.PASS; } + @Override + public @NotNull InteractionResultHolder use(@NotNull Level pLevel, @NotNull Player pPlayer, @NotNull InteractionHand pUsedHand) { + if (!pLevel.isClientSide && pUsedHand == InteractionHand.MAIN_HAND) { + PlayerLeashable playerLeashable = (PlayerLeashable) pPlayer; + if (playerLeashable.isLeashed()) { + if(!(playerLeashable.getLeashHolder() instanceof LeashRopeArrow)) { + playerLeashable.dropLeash(true, true); + pPlayer.getItemInHand(pUsedHand).hurtAndBreak(10, pPlayer, LivingEntity.getSlotForHand(pUsedHand)); + return InteractionResultHolder.success(pPlayer.getItemInHand(pUsedHand)); + } + } + } + return super.use(pLevel, pPlayer, pUsedHand); + } } diff --git a/src/main/java/com/r3944realms/leashedplayer/content/sounds/ModSoundRegister.java b/src/main/java/com/r3944realms/leashedplayer/content/sounds/ModSoundRegister.java new file mode 100644 index 0000000..d9e1359 --- /dev/null +++ b/src/main/java/com/r3944realms/leashedplayer/content/sounds/ModSoundRegister.java @@ -0,0 +1,35 @@ +package com.r3944realms.leashedplayer.content.sounds; + +import com.r3944realms.leashedplayer.LeashedPlayer; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.registries.DeferredHolder; +import net.neoforged.neoforge.registries.DeferredRegister; + +import java.util.function.Supplier; + +public class ModSoundRegister { + public static DeferredRegister SOUNDS = DeferredRegister.create(BuiltInRegistries.SOUND_EVENT, LeashedPlayer.MOD_ID); + public static ResourceLocation RL_FOX_MUSIC = ResourceLocation.fromNamespaceAndPath(LeashedPlayer.MOD_ID, "music/what_does_the_fox_say"); + public static final DeferredHolder FOX_MUSIC = + ModSoundRegister.register("what_does_the_fox_say", () -> SoundEvent.createFixedRangeEvent( + RL_FOX_MUSIC, + 128 + )); + + public static DeferredHolder register(String name, Supplier supplier){ + return SOUNDS.register(name, supplier); + + } + public static void register(IEventBus modBus){ + SOUNDS.register(modBus); + } + public static String getJukeboxSongTranslateKey(String name) { + return "jukebox_song." + LeashedPlayer.MOD_ID + "." + name; + } + public static String getSubTitleTranslateKey(String name) { + return "sound." + LeashedPlayer.MOD_ID + ".subtitle." + name; + } +} diff --git a/src/main/java/com/r3944realms/leashedplayer/datagen/LanguageAndOtherData/ModLangKeyValue.java b/src/main/java/com/r3944realms/leashedplayer/datagen/LanguageAndOtherData/ModLangKeyValue.java index 43a93e5..1e4dc5b 100644 --- a/src/main/java/com/r3944realms/leashedplayer/datagen/LanguageAndOtherData/ModLangKeyValue.java +++ b/src/main/java/com/r3944realms/leashedplayer/datagen/LanguageAndOtherData/ModLangKeyValue.java @@ -13,6 +13,7 @@ import com.r3944realms.leashedplayer.content.gamerules.Server.TeleportWithLeashe import com.r3944realms.leashedplayer.content.items.ModCreativeTab; import com.r3944realms.leashedplayer.content.items.ModItemRegister; import com.r3944realms.leashedplayer.content.items.type.LeashRopeArrowItem; +import com.r3944realms.leashedplayer.content.sounds.ModSoundRegister; import com.r3944realms.leashedplayer.datagen.provider.attributes.ModPaintingVariants; import com.r3944realms.leashedplayer.utils.Enum.LanguageEnum; import com.r3944realms.leashedplayer.utils.Enum.ModPartEnum; @@ -32,6 +33,7 @@ public enum ModLangKeyValue { TEST_FABRIC_ITEM(ModItemRegister.FABRIC, ModPartEnum.ITEM, "Fabric", "Fabric", "Fabric", true), AMETHYST_SHEARS(ModItemRegister.AMETHYST_SHEARS, ModPartEnum.ITEM, "Amethyst Shears", "紫水晶剪刀", "紫水晶剪刀", true), KID_SPAWN_EGG(ModItemRegister.KID_SPAWN_EGG, ModPartEnum.ITEM, "Kid Spawn Egg", "小孩生成蛋", "小孩生成蛋", false), + NEO_FORGE(ModItemRegister.NEOFORGE, ModPartEnum.ITEM, "NeoForge", "NeoForge", "NeoForge", true), //ITEM_DESC DESC_ITEM_LEASH_ROPE_ARROW(LeashRopeArrowItem.descKey, ModPartEnum.DESCRIPTION, "Arrows with ropes attached?","带有拴绳的箭矢?", "帶有拴繩的箭矢?", false), //PAINTING @@ -41,6 +43,9 @@ public enum ModLangKeyValue { LEASH_ROPE_ARROW(ModEntityRegister.getEntityNameKey("leash_rope_arrow"), ModPartEnum.ENTITY, "Leash Rope Arrow", "拴绳箭", "拴繩箭", false), SPECTRAL_LEASH_ROPE_ARROW(ModEntityRegister.getEntityNameKey("spectral_leash_rope_arrow"), ModPartEnum.ENTITY, "Spectral Leash Rope Arrow", "拴绳光灵箭", "拴繩光靈箭", false), kID(ModEntityRegister.getEntityNameKey("kid_player"), ModPartEnum.ENTITY, "Kid", "小孩", "小孩", "幼", false), + //DIST + ST_WHAT_DOES_THE_FOX_SAY(ModSoundRegister.getSubTitleTranslateKey("what_does_the_fox_say"), ModPartEnum.TITLE, "Great Chu will rise again! Chen She will be king!", "大楚兴~ 陈胜王~~", "大楚興~ 陳勝王~~", false), + JB_WHAT_DOES_THE_FOX_SAY(ModSoundRegister.getJukeboxSongTranslateKey("what_does_the_fox_say"), ModPartEnum.DESCRIPTION, "What does the fox say?", "狐狸是怎么叫的?", "狐狸是怎麽叫的?", false), //CREATIVE_TAB CREATIVE_TAB_NAME(ModCreativeTab.getCreativeMod(LEASHED_PLAYER_ITEM), ModPartEnum.CREATIVE_TAB, "Leashed Player","可拴玩家", "可拴玩家", false), //COMMAND_MESSAGE @@ -114,7 +119,6 @@ public enum ModLangKeyValue { NO_LEASH_ARROW(ModPotionRegister.getTippedArrowNameKey("no_leash"), ModPartEnum.ITEM, "Arrow of No Leash", "禁拴之箭", "禁拴之箭", false), //INFO_MESSAGE CHAT_NONE_HEARD_YOU(DefaultTalkArea.CHAT_NONE_HEARD_YOU, ModPartEnum.MESSAGE, "Nobody heard your message", "沒有人接收到你的消息", "無人接收到你的訊息", "无人受子问",false), - ; private final Supplier supplier; private String key; diff --git a/src/main/java/com/r3944realms/leashedplayer/datagen/ModDataGeneratorHandler.java b/src/main/java/com/r3944realms/leashedplayer/datagen/ModDataGeneratorHandler.java index 1590c94..0a6ae96 100644 --- a/src/main/java/com/r3944realms/leashedplayer/datagen/ModDataGeneratorHandler.java +++ b/src/main/java/com/r3944realms/leashedplayer/datagen/ModDataGeneratorHandler.java @@ -29,6 +29,7 @@ public class ModDataGeneratorHandler { ItemModelGenerator(event, existingFileHelper); RecipeGenerator(event, holderFolder); ModTagsProvider(event, event.getLookupProvider(), existingFileHelper); + ModSoundProvider(event, existingFileHelper); ModAdvancementProvider(event, holderFolder, existingFileHelper); } private static void addLanguage(GatherDataEvent event, LanguageEnum language){ @@ -68,6 +69,13 @@ public class ModDataGeneratorHandler { (DataProvider.Factory) pOutput -> new ModDataPackBuiltInEntriesProvider(pOutput, future) ); } + private static void ModSoundProvider(GatherDataEvent event, ExistingFileHelper helper) { + event.getGenerator().addProvider( + event.includeServer(), + (DataProvider.Factory) pOutput -> + new ModSoundDefinitionsProvider(pOutput,LeashedPlayer.MOD_ID, helper) + ); + } private static void ModAdvancementProvider(GatherDataEvent event, CompletableFuture pLookUpProvider, ExistingFileHelper helper) { event.getGenerator().addProvider( event.includeServer(), diff --git a/src/main/java/com/r3944realms/leashedplayer/datagen/provider/ModDataPackBuiltInEntriesProvider.java b/src/main/java/com/r3944realms/leashedplayer/datagen/provider/ModDataPackBuiltInEntriesProvider.java index a531797..0f1b4d9 100644 --- a/src/main/java/com/r3944realms/leashedplayer/datagen/provider/ModDataPackBuiltInEntriesProvider.java +++ b/src/main/java/com/r3944realms/leashedplayer/datagen/provider/ModDataPackBuiltInEntriesProvider.java @@ -1,6 +1,7 @@ package com.r3944realms.leashedplayer.datagen.provider; import com.r3944realms.leashedplayer.LeashedPlayer; +import com.r3944realms.leashedplayer.datagen.provider.attributes.ModJukeboxSongs; import com.r3944realms.leashedplayer.datagen.provider.attributes.ModPaintingVariants; import net.minecraft.core.HolderLookup; import net.minecraft.core.RegistrySetBuilder; @@ -13,7 +14,8 @@ import java.util.concurrent.CompletableFuture; public class ModDataPackBuiltInEntriesProvider extends DatapackBuiltinEntriesProvider { public static final RegistrySetBuilder BUILDER = new RegistrySetBuilder() - .add(Registries.PAINTING_VARIANT, ModPaintingVariants::bootstrap); + .add(Registries.PAINTING_VARIANT, ModPaintingVariants::bootstrap) + .add(Registries.JUKEBOX_SONG, ModJukeboxSongs::bootstrap); public ModDataPackBuiltInEntriesProvider(PackOutput output, CompletableFuture registries) { super(output, registries, BUILDER, Set.of(LeashedPlayer.MOD_ID)); CompletableFuture registryProvider = getRegistryProvider(); diff --git a/src/main/java/com/r3944realms/leashedplayer/datagen/provider/ModSoundDefinitionsProvider.java b/src/main/java/com/r3944realms/leashedplayer/datagen/provider/ModSoundDefinitionsProvider.java new file mode 100644 index 0000000..829a52a --- /dev/null +++ b/src/main/java/com/r3944realms/leashedplayer/datagen/provider/ModSoundDefinitionsProvider.java @@ -0,0 +1,37 @@ +package com.r3944realms.leashedplayer.datagen.provider; + + +import com.r3944realms.leashedplayer.content.sounds.ModSoundRegister; +import net.minecraft.data.PackOutput; +import net.neoforged.neoforge.common.data.ExistingFileHelper; +import net.neoforged.neoforge.common.data.SoundDefinition; +import net.neoforged.neoforge.common.data.SoundDefinitionsProvider; + +public class ModSoundDefinitionsProvider extends SoundDefinitionsProvider { + /** + * Creates a new instance of this data provider. + * + * @param output The {@linkplain PackOutput} instance provided by the data generator. + * @param modId The mod ID of the current mod. + * @param helper The existing file helper provided by the event you are initializing this provider in. + */ + public ModSoundDefinitionsProvider(PackOutput output, String modId, ExistingFileHelper helper) { + super(output, modId, helper); + } + + public SoundDefinition getSoundDefinition(String subTitle, SoundDefinition.Sound... sounds) { + return SoundDefinition.definition().subtitle(subTitle).with(sounds); + } + + @Override + public void registerSounds() { + add( + ModSoundRegister.FOX_MUSIC, + getSoundDefinition( + ModSoundRegister.getSubTitleTranslateKey("what_does_the_fox_say"), + sound(ModSoundRegister.RL_FOX_MUSIC, SoundDefinition.SoundType.SOUND) + ) + ); + + } +} diff --git a/src/main/java/com/r3944realms/leashedplayer/datagen/provider/attributes/ModJukeboxSongs.java b/src/main/java/com/r3944realms/leashedplayer/datagen/provider/attributes/ModJukeboxSongs.java new file mode 100644 index 0000000..c2f944a --- /dev/null +++ b/src/main/java/com/r3944realms/leashedplayer/datagen/provider/attributes/ModJukeboxSongs.java @@ -0,0 +1,39 @@ +package com.r3944realms.leashedplayer.datagen.provider.attributes; + +import com.r3944realms.leashedplayer.LeashedPlayer; +import com.r3944realms.leashedplayer.content.sounds.ModSoundRegister; +import net.minecraft.Util; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; +import net.minecraft.data.worldgen.BootstrapContext; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.world.item.JukeboxSong; + +public class ModJukeboxSongs { + public static ResourceKey FOX_MUSIC = create("what_does_the_fox_say"); + + public static void bootstrap(BootstrapContext pContext) { + JukeboxSongBootstrap(pContext); + } + + public static void JukeboxSongBootstrap(BootstrapContext pContext) { + register(pContext, FOX_MUSIC, ModSoundRegister.FOX_MUSIC, 121, 15); + + } + + private static void register( + BootstrapContext pContext, ResourceKey pKey, Holder pSoundEvent, int pLengthInSeconds, int pComparatorOutput + ) { + pContext.register( + pKey, + new JukeboxSong(pSoundEvent, Component.translatable(Util.makeDescriptionId("jukebox_song", pKey.location())), (float)pLengthInSeconds, pComparatorOutput) + ); + } + private static ResourceKey create(String pName) { + return ResourceKey.create(Registries.JUKEBOX_SONG, ResourceLocation.fromNamespaceAndPath(LeashedPlayer.MOD_ID, pName)); + } + +} diff --git a/src/main/java/com/r3944realms/leashedplayer/mixin/registry/MixinJukeboxSongs.java b/src/main/java/com/r3944realms/leashedplayer/mixin/registry/MixinJukeboxSongs.java new file mode 100644 index 0000000..b49fc35 --- /dev/null +++ b/src/main/java/com/r3944realms/leashedplayer/mixin/registry/MixinJukeboxSongs.java @@ -0,0 +1,18 @@ +package com.r3944realms.leashedplayer.mixin.registry; + +import com.r3944realms.leashedplayer.datagen.provider.attributes.ModJukeboxSongs; +import net.minecraft.data.worldgen.BootstrapContext; +import net.minecraft.world.item.JukeboxSong; +import net.minecraft.world.item.JukeboxSongs; +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; + +@Mixin(JukeboxSongs.class) +public interface MixinJukeboxSongs { + @Inject(method = {"bootstrap"}, at = @At("TAIL")) + private static void bootstrap(BootstrapContext pContext, CallbackInfo ci) { + ModJukeboxSongs.JukeboxSongBootstrap(pContext); + } +} diff --git a/src/main/resources/assets/leashedplayer/sounds/music/what_does_the_fox_say.ogg b/src/main/resources/assets/leashedplayer/sounds/music/what_does_the_fox_say.ogg new file mode 100644 index 0000000..3029305 Binary files /dev/null and b/src/main/resources/assets/leashedplayer/sounds/music/what_does_the_fox_say.ogg differ diff --git a/src/main/resources/assets/leashedplayer/textures/item/neoforge.png b/src/main/resources/assets/leashedplayer/textures/item/neoforge.png new file mode 100644 index 0000000..9a58fc6 Binary files /dev/null and b/src/main/resources/assets/leashedplayer/textures/item/neoforge.png differ diff --git a/src/main/resources/leashedplayer.mixins.json b/src/main/resources/leashedplayer.mixins.json index ff05275..5579e47 100644 --- a/src/main/resources/leashedplayer.mixins.json +++ b/src/main/resources/leashedplayer.mixins.json @@ -5,6 +5,7 @@ "both.MixinLivingEntity", "both.MixinPlayer", "item.MixinLeadItem", + "registry.MixinJukeboxSongs", "registry.MixinPaintingVariants", "server.MixinPlayerList", "server.MixinServerGamePacketListenerImpl",