diff --git a/src/main/java/net/Chipperfluff/chipi/ChipiMod.java b/src/main/java/net/Chipperfluff/chipi/ChipiMod.java index 627e5b7..fe6b3fa 100644 --- a/src/main/java/net/Chipperfluff/chipi/ChipiMod.java +++ b/src/main/java/net/Chipperfluff/chipi/ChipiMod.java @@ -17,6 +17,7 @@ import net.Chipperfluff.chipi.sound.ModSounds; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry; import net.Chipperfluff.chipi.util.TickScheduler; +import net.Chipperfluff.chipi.item.music.ModMusicDiscs; public class ChipiMod implements ModInitializer { @@ -36,6 +37,7 @@ public class ChipiMod implements ModInitializer { SpawnLogic.register(); ModSounds.register(); + ModMusicDiscs.registerAll(); TickScheduler.init(); CommandHandler.register(); diff --git a/src/main/java/net/Chipperfluff/chipi/item/ModItemGroups.java b/src/main/java/net/Chipperfluff/chipi/item/ModItemGroups.java index 5e94c10..9e8abb2 100644 --- a/src/main/java/net/Chipperfluff/chipi/item/ModItemGroups.java +++ b/src/main/java/net/Chipperfluff/chipi/item/ModItemGroups.java @@ -2,6 +2,7 @@ package net.Chipperfluff.chipi.item; import net.Chipperfluff.chipi.ChipiMod; import net.Chipperfluff.chipi.block.ModBlocks; +import net.Chipperfluff.chipi.item.music.ModMusicDiscs; import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; @@ -50,6 +51,10 @@ public class ModItemGroups { entries.add(ModItems.CHIPPER_SHOVEL); entries.add(ModItems.CHIPPER_HOE); + // Music discs + for (var disc : ModMusicDiscs.getAll().values()) { + entries.add(disc); + } }) .build() ); diff --git a/src/main/java/net/Chipperfluff/chipi/item/music/ModMusicDiscs.java b/src/main/java/net/Chipperfluff/chipi/item/music/ModMusicDiscs.java new file mode 100644 index 0000000..c3b839f --- /dev/null +++ b/src/main/java/net/Chipperfluff/chipi/item/music/ModMusicDiscs.java @@ -0,0 +1,67 @@ +package net.Chipperfluff.chipi.item.music; + +import net.Chipperfluff.chipi.ChipiMod; +import net.minecraft.item.Item; +import net.minecraft.item.MusicDiscItem; +import net.minecraft.registry.Registries; +import net.minecraft.registry.Registry; +import net.minecraft.sound.SoundEvent; +import net.minecraft.util.Identifier; + +import java.util.LinkedHashMap; +import java.util.Map; + +public class ModMusicDiscs { + + private static final Map DISCS = new LinkedHashMap<>(); + + private static final MusicDiscDef[] DEFINITIONS = { + new MusicDiscDef("aa9", 7, 5, 0), + new MusicDiscDef("abc", 7, 2, 11), + new MusicDiscDef("fs", 7, 2, 0), + new MusicDiscDef("phone", 7, 2, 11), + new MusicDiscDef("wha", 7, 1, 48), + new MusicDiscDef("who", 7, 2, 27), + new MusicDiscDef("working_as_intented", 7, 3, 45) + }; + + private static Item registerDisc(MusicDiscDef def) { + String id = "chipi_record_" + def.name(); + Identifier identifier = new Identifier(ChipiMod.MOD_ID, id); + + SoundEvent sound = Registry.register( + Registries.SOUND_EVENT, + identifier, + SoundEvent.of(identifier) + ); + + Item item = Registry.register( + Registries.ITEM, + identifier, + new MusicDiscItem( + def.comparatorOutput(), + sound, + new Item.Settings().maxCount(1), + toTicks(def.minutes(), def.seconds()) + ) + ); + + DISCS.put(def.name(), item); + return item; + } + + public static Map getAll() { + return DISCS; + } + + public static void registerAll() { + for (MusicDiscDef def : DEFINITIONS) { + registerDisc(def); + } + } + + private static int toTicks(int minutes, int seconds) { + int totalSeconds = Math.max(0, minutes) * 60 + Math.max(0, seconds); + return totalSeconds * 20; + } +} diff --git a/src/main/java/net/Chipperfluff/chipi/item/music/MusicDiscDef.java b/src/main/java/net/Chipperfluff/chipi/item/music/MusicDiscDef.java new file mode 100644 index 0000000..08495da --- /dev/null +++ b/src/main/java/net/Chipperfluff/chipi/item/music/MusicDiscDef.java @@ -0,0 +1,8 @@ +package net.Chipperfluff.chipi.item.music; + +public record MusicDiscDef( + String name, + int comparatorOutput, + int minutes, + int seconds +) {} diff --git a/src/main/resources/assets/chipi/lang/en_us.json b/src/main/resources/assets/chipi/lang/en_us.json index 7624236..f8ef243 100644 --- a/src/main/resources/assets/chipi/lang/en_us.json +++ b/src/main/resources/assets/chipi/lang/en_us.json @@ -2,12 +2,30 @@ "death.attack.void_block": "§8%1$s stepped beyond safety — the Outside answered.", "death.attack.chipi.void_block_fire": "§c%1$s tried to save themselves.§r §8It got worse.", + "effect.chipi.chipi_blessing": "§bChipi's Blessing", + "effect.chipi.pregnant": "§dyou are Pregnant", + "block.chipi.void_block": "Void Block", "block.chipi.chipper_frame": "Chipper Frame", "block.chipi.chipper_portal": "Chipper Portal", "block.chipi.chipper_ore": "Chipper Ore", "block.chipi.chipper_alloy_block": "Chipper Alloy Block", + "item.chipi.chipi_record_aa9": "Chipi Record – Aa9", + "item.chipi.chipi_record_aa9.desc": "Chipi Record – Aa9", + "item.chipi.chipi_record_abc": "Chipi Record – Abc", + "item.chipi.chipi_record_abc.desc": "Chipi Record – Abc", + "item.chipi.chipi_record_fs": "Chipi Record – Fs", + "item.chipi.chipi_record_fs.desc": "Chipi Record – Fs", + "item.chipi.chipi_record_phone": "Chipi Record – Phone", + "item.chipi.chipi_record_phone.desc": "Chipi Record – Phone", + "item.chipi.chipi_record_wha": "Chipi Record – Wha", + "item.chipi.chipi_record_wha.desc": "Chipi Record – Wha", + "item.chipi.chipi_record_who": "Chipi Record – Who", + "item.chipi.chipi_record_who.desc": "Chipi Record – Who", + "item.chipi.chipi_record_working_as_intented": "Chipi Record – Working As Intented", + "item.chipi.chipi_record_working_as_intented.desc": "Chipi Record – Working As Intented", + "itemGroup.chipi.chipi": "Chipi", "item.chipi.void_block": "Void Block", diff --git a/src/main/resources/assets/chipi/models/item/chipi_record_aa9.json b/src/main/resources/assets/chipi/models/item/chipi_record_aa9.json new file mode 100644 index 0000000..1af258c --- /dev/null +++ b/src/main/resources/assets/chipi/models/item/chipi_record_aa9.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "chipi:item/chipi_record_aa9" + } +} diff --git a/src/main/resources/assets/chipi/models/item/chipi_record_abc.json b/src/main/resources/assets/chipi/models/item/chipi_record_abc.json new file mode 100644 index 0000000..ddece50 --- /dev/null +++ b/src/main/resources/assets/chipi/models/item/chipi_record_abc.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "chipi:item/chipi_record_abc" + } +} diff --git a/src/main/resources/assets/chipi/models/item/chipi_record_fs.json b/src/main/resources/assets/chipi/models/item/chipi_record_fs.json new file mode 100644 index 0000000..8110d00 --- /dev/null +++ b/src/main/resources/assets/chipi/models/item/chipi_record_fs.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "chipi:item/chipi_record_fs" + } +} diff --git a/src/main/resources/assets/chipi/models/item/chipi_record_phone.json b/src/main/resources/assets/chipi/models/item/chipi_record_phone.json new file mode 100644 index 0000000..c369035 --- /dev/null +++ b/src/main/resources/assets/chipi/models/item/chipi_record_phone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "chipi:item/chipi_record_phone" + } +} diff --git a/src/main/resources/assets/chipi/models/item/chipi_record_wha.json b/src/main/resources/assets/chipi/models/item/chipi_record_wha.json new file mode 100644 index 0000000..08a93c3 --- /dev/null +++ b/src/main/resources/assets/chipi/models/item/chipi_record_wha.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "chipi:item/chipi_record_wha" + } +} diff --git a/src/main/resources/assets/chipi/models/item/chipi_record_who.json b/src/main/resources/assets/chipi/models/item/chipi_record_who.json new file mode 100644 index 0000000..047c217 --- /dev/null +++ b/src/main/resources/assets/chipi/models/item/chipi_record_who.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "chipi:item/chipi_record_who" + } +} diff --git a/src/main/resources/assets/chipi/models/item/chipi_record_working_as_intented.json b/src/main/resources/assets/chipi/models/item/chipi_record_working_as_intented.json new file mode 100644 index 0000000..6b62f47 --- /dev/null +++ b/src/main/resources/assets/chipi/models/item/chipi_record_working_as_intented.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "chipi:item/chipi_record_working_as_intented" + } +} diff --git a/src/main/resources/assets/chipi/sounds.json b/src/main/resources/assets/chipi/sounds.json index e53a013..2e91d63 100644 --- a/src/main/resources/assets/chipi/sounds.json +++ b/src/main/resources/assets/chipi/sounds.json @@ -8,5 +8,26 @@ "sounds": [ "chipi:player_milk" ] + }, + "chipi_record_aa9": { + "sounds": [{ "name": "chipi:chipi_record_aa9", "stream": true }] + }, + "chipi_record_abc": { + "sounds": [{ "name": "chipi:chipi_record_abc", "stream": true }] + }, + "chipi_record_fs": { + "sounds": [{ "name": "chipi:chipi_record_fs", "stream": true }] + }, + "chipi_record_phone": { + "sounds": [{ "name": "chipi:chipi_record_phone", "stream": true }] + }, + "chipi_record_wha": { + "sounds": [{ "name": "chipi:chipi_record_wha", "stream": true }] + }, + "chipi_record_who": { + "sounds": [{ "name": "chipi:chipi_record_who", "stream": true }] + }, + "chipi_record_working_as_intented": { + "sounds": [{ "name": "chipi:chipi_record_working_as_intented", "stream": true }] } } diff --git a/src/main/resources/assets/chipi/sounds/chipi_record_aa9.ogg b/src/main/resources/assets/chipi/sounds/chipi_record_aa9.ogg new file mode 100644 index 0000000..7cdfcce Binary files /dev/null and b/src/main/resources/assets/chipi/sounds/chipi_record_aa9.ogg differ diff --git a/src/main/resources/assets/chipi/sounds/chipi_record_abc.ogg b/src/main/resources/assets/chipi/sounds/chipi_record_abc.ogg new file mode 100644 index 0000000..98a0dce Binary files /dev/null and b/src/main/resources/assets/chipi/sounds/chipi_record_abc.ogg differ diff --git a/src/main/resources/assets/chipi/sounds/chipi_record_fs.ogg b/src/main/resources/assets/chipi/sounds/chipi_record_fs.ogg new file mode 100644 index 0000000..33d40fa Binary files /dev/null and b/src/main/resources/assets/chipi/sounds/chipi_record_fs.ogg differ diff --git a/src/main/resources/assets/chipi/sounds/chipi_record_phone.ogg b/src/main/resources/assets/chipi/sounds/chipi_record_phone.ogg new file mode 100644 index 0000000..5acb5a2 Binary files /dev/null and b/src/main/resources/assets/chipi/sounds/chipi_record_phone.ogg differ diff --git a/src/main/resources/assets/chipi/sounds/chipi_record_wha.ogg b/src/main/resources/assets/chipi/sounds/chipi_record_wha.ogg new file mode 100644 index 0000000..30759c5 Binary files /dev/null and b/src/main/resources/assets/chipi/sounds/chipi_record_wha.ogg differ diff --git a/src/main/resources/assets/chipi/sounds/chipi_record_who.ogg b/src/main/resources/assets/chipi/sounds/chipi_record_who.ogg new file mode 100644 index 0000000..6d6b0c6 Binary files /dev/null and b/src/main/resources/assets/chipi/sounds/chipi_record_who.ogg differ diff --git a/src/main/resources/assets/chipi/sounds/chipi_record_working_as_intented.ogg b/src/main/resources/assets/chipi/sounds/chipi_record_working_as_intented.ogg new file mode 100644 index 0000000..3375b90 Binary files /dev/null and b/src/main/resources/assets/chipi/sounds/chipi_record_working_as_intented.ogg differ diff --git a/src/main/resources/assets/chipi/textures/item/chipi_record_aa9.png b/src/main/resources/assets/chipi/textures/item/chipi_record_aa9.png new file mode 100644 index 0000000..046f79f Binary files /dev/null and b/src/main/resources/assets/chipi/textures/item/chipi_record_aa9.png differ diff --git a/src/main/resources/assets/chipi/textures/item/chipi_record_abc.png b/src/main/resources/assets/chipi/textures/item/chipi_record_abc.png new file mode 100644 index 0000000..046f79f Binary files /dev/null and b/src/main/resources/assets/chipi/textures/item/chipi_record_abc.png differ diff --git a/src/main/resources/assets/chipi/textures/item/chipi_record_fs.png b/src/main/resources/assets/chipi/textures/item/chipi_record_fs.png new file mode 100644 index 0000000..046f79f Binary files /dev/null and b/src/main/resources/assets/chipi/textures/item/chipi_record_fs.png differ diff --git a/src/main/resources/assets/chipi/textures/item/chipi_record_phone.png b/src/main/resources/assets/chipi/textures/item/chipi_record_phone.png new file mode 100644 index 0000000..046f79f Binary files /dev/null and b/src/main/resources/assets/chipi/textures/item/chipi_record_phone.png differ diff --git a/src/main/resources/assets/chipi/textures/item/chipi_record_wha.png b/src/main/resources/assets/chipi/textures/item/chipi_record_wha.png new file mode 100644 index 0000000..046f79f Binary files /dev/null and b/src/main/resources/assets/chipi/textures/item/chipi_record_wha.png differ diff --git a/src/main/resources/assets/chipi/textures/item/chipi_record_who.png b/src/main/resources/assets/chipi/textures/item/chipi_record_who.png new file mode 100644 index 0000000..046f79f Binary files /dev/null and b/src/main/resources/assets/chipi/textures/item/chipi_record_who.png differ diff --git a/src/main/resources/assets/chipi/textures/item/chipi_record_working_as_intented.png b/src/main/resources/assets/chipi/textures/item/chipi_record_working_as_intented.png new file mode 100644 index 0000000..046f79f Binary files /dev/null and b/src/main/resources/assets/chipi/textures/item/chipi_record_working_as_intented.png differ diff --git a/src/main/resources/data/chipi/recipes/chipi_record_aa9.json b/src/main/resources/data/chipi/recipes/chipi_record_aa9.json new file mode 100644 index 0000000..b3c7774 --- /dev/null +++ b/src/main/resources/data/chipi/recipes/chipi_record_aa9.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "xxx", + "xyx", + "xxx" + ], + "key": { + "x": { "item": "chipi:raw_chipper_ore" }, + "y": { "item": "minecraft:emerald" } + }, + "result": { "item": "chipi:chipi_record_aa9" } +} diff --git a/src/main/resources/data/chipi/recipes/chipi_record_abc.json b/src/main/resources/data/chipi/recipes/chipi_record_abc.json new file mode 100644 index 0000000..a6472e9 --- /dev/null +++ b/src/main/resources/data/chipi/recipes/chipi_record_abc.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "xxx", + "xyx", + "xxx" + ], + "key": { + "x": { "item": "minecraft:orange_wool" }, + "y": { "item": "minecraft:emerald" } + }, + "result": { "item": "chipi:chipi_record_abc" } +} diff --git a/src/main/resources/data/chipi/recipes/chipi_record_fs.json b/src/main/resources/data/chipi/recipes/chipi_record_fs.json new file mode 100644 index 0000000..a7b3cc1 --- /dev/null +++ b/src/main/resources/data/chipi/recipes/chipi_record_fs.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "xxx", + "xyx", + "xxx" + ], + "key": { + "x": { "item": "minecraft:sweet_berries" }, + "y": { "item": "minecraft:emerald" } + }, + "result": { "item": "chipi:chipi_record_fs" } +} diff --git a/src/main/resources/data/chipi/recipes/chipi_record_phone.json b/src/main/resources/data/chipi/recipes/chipi_record_phone.json new file mode 100644 index 0000000..74375fe --- /dev/null +++ b/src/main/resources/data/chipi/recipes/chipi_record_phone.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "xxx", + "xyx", + "xxx" + ], + "key": { + "x": { "item": "minecraft:iron_ingot" }, + "y": { "item": "minecraft:emerald" } + }, + "result": { "item": "chipi:chipi_record_phone" } +} diff --git a/src/main/resources/data/chipi/recipes/chipi_record_wha.json b/src/main/resources/data/chipi/recipes/chipi_record_wha.json new file mode 100644 index 0000000..5d44fde --- /dev/null +++ b/src/main/resources/data/chipi/recipes/chipi_record_wha.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "xxx", + "xyx", + "xxx" + ], + "key": { + "x": { "item": "chipi:chipper_alloy" }, + "y": { "item": "minecraft:emerald" } + }, + "result": { "item": "chipi:chipi_record_wha" } +} diff --git a/src/main/resources/data/chipi/recipes/chipi_record_who.json b/src/main/resources/data/chipi/recipes/chipi_record_who.json new file mode 100644 index 0000000..a23487d --- /dev/null +++ b/src/main/resources/data/chipi/recipes/chipi_record_who.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "xxx", + "xyx", + "xxx" + ], + "key": { + "x": { "item": "minecraft:blue_wool" }, + "y": { "item": "minecraft:emerald" } + }, + "result": { "item": "chipi:chipi_record_who" } +} diff --git a/src/main/resources/data/chipi/recipes/chipi_record_working_as_intented.json b/src/main/resources/data/chipi/recipes/chipi_record_working_as_intented.json new file mode 100644 index 0000000..d830b10 --- /dev/null +++ b/src/main/resources/data/chipi/recipes/chipi_record_working_as_intented.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "xxx", + "xyx", + "xxx" + ], + "key": { + "x": { "item": "minecraft:glass" }, + "y": { "item": "minecraft:emerald" } + }, + "result": { "item": "chipi:chipi_record_working_as_intented" } +} diff --git a/src/main/resources/data/minecraft/tags/items/music_discs.json b/src/main/resources/data/minecraft/tags/items/music_discs.json new file mode 100644 index 0000000..dd2b68f --- /dev/null +++ b/src/main/resources/data/minecraft/tags/items/music_discs.json @@ -0,0 +1,12 @@ +{ + "replace": false, + "values": [ + "chipi:chipi_record_aa9", + "chipi:chipi_record_abc", + "chipi:chipi_record_fs", + "chipi:chipi_record_phone", + "chipi:chipi_record_wha", + "chipi:chipi_record_who", + "chipi:chipi_record_working_as_intented" + ] +}