diff --git a/build.gradle b/build.gradle index 00e40de..9f5a600 100644 --- a/build.gradle +++ b/build.gradle @@ -17,10 +17,13 @@ minecraft { repositories { maven { url = "http://maven.fabricmc.net/" } + + // for Patchouli + maven { url 'https://maven.blamejared.com' } } dependencies { - //to change the versions see the gradle.properties file + // to change the versions see the gradle.properties file minecraft "com.mojang:minecraft:${project.minecraft_version}" mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" @@ -30,8 +33,9 @@ dependencies { modImplementation "net.fabricmc:fabric-language-kotlin:${project.fabric_kotlin_version}" - // PSA: Some older mods, compiled on Loom 0.2.1, might have outdated Maven POMs. - // You may need to force-disable transitiveness on them. + // Patchouli + // modCompileOnly "vazkii.patchouli:Patchouli:1.16.4-48-FABRIC:api" + modImplementation "vazkii.patchouli:Patchouli:1.16.4-48-FABRIC" } processResources { diff --git a/gradle.properties b/gradle.properties index 0ef48b1..cb3cda3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ org.gradle.jvmargs=-Xmx1G loader_version=0.10.8 #Fabric api - fabric_version=0.26.1+1.16 + fabric_version=0.28.1+1.16 loom_version=0.5-SNAPSHOT @@ -18,5 +18,5 @@ org.gradle.jvmargs=-Xmx1G archives_base_name = monadmachines # Kotlin - kotlin_version=1.4.0 - fabric_kotlin_version=1.4.0+build.1 + kotlin_version=1.4.21 + fabric_kotlin_version=1.4.21+build.1 diff --git a/src/main/java/tf/bug/monadmachines/mixin/ExampleMixin.java b/src/main/java/tf/bug/monadmachines/mixin/ExampleMixin.java deleted file mode 100644 index be3ead3..0000000 --- a/src/main/java/tf/bug/monadmachines/mixin/ExampleMixin.java +++ /dev/null @@ -1,16 +0,0 @@ -package tf.bug.monadmachines.mixin; - -import net.minecraft.client.gui.screen.TitleScreen; -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(TitleScreen.class) -// Mixins HAVE to be written in java due to constraints in the mixin system. -public class ExampleMixin { - @Inject(at = @At("HEAD"), method = "init()V") - private void init(CallbackInfo info) { - System.out.println("This line is printed by an example mod mixin!"); - } -} diff --git a/src/main/kotlin/tf/bug/monadmachines/ExampleMod.kt b/src/main/kotlin/tf/bug/monadmachines/ExampleMod.kt deleted file mode 100644 index bec161b..0000000 --- a/src/main/kotlin/tf/bug/monadmachines/ExampleMod.kt +++ /dev/null @@ -1,25 +0,0 @@ -package tf.bug.monadmachines - -import net.fabricmc.fabric.api.`object`.builder.v1.block.FabricBlockSettings -import net.minecraft.block.Block -import net.minecraft.block.Material -import net.minecraft.item.BlockItem -import net.minecraft.item.Item -import net.minecraft.item.ItemGroup -import net.minecraft.util.Identifier -import net.minecraft.util.registry.Registry - -val EXAMPLE_BLOCK: Block = Block(FabricBlockSettings.of(Material.METAL)) -val EXAMPLE_BLOCKITEM: BlockItem = BlockItem(EXAMPLE_BLOCK, Item.Settings().group(ItemGroup.MISC)) - -@Suppress("unused") -fun init() { - // This code runs as soon as Minecraft is in a mod-load-ready state. - // However, some things (like resources) may still be uninitialized. - // Proceed with mild caution. - - println("Hello Fabric world!") - - Registry.register(Registry.BLOCK, Identifier("monadmachines", "example"), EXAMPLE_BLOCK) - Registry.register(Registry.ITEM, Identifier("monadmachines", "example"), EXAMPLE_BLOCKITEM) -} diff --git a/src/main/kotlin/tf/bug/monadmachines/MonadMachines.kt b/src/main/kotlin/tf/bug/monadmachines/MonadMachines.kt new file mode 100644 index 0000000..a1bef1b --- /dev/null +++ b/src/main/kotlin/tf/bug/monadmachines/MonadMachines.kt @@ -0,0 +1,24 @@ +package tf.bug.monadmachines + +import net.fabricmc.fabric.api.client.itemgroup.FabricItemGroupBuilder +import net.minecraft.item.ItemGroup +import net.minecraft.item.ItemStack +import net.minecraft.util.Identifier +import net.minecraft.util.registry.Registry +import tf.bug.monadmachines.books.IntroToComputing + +val MONADMACHINES_ITEMGROUP: ItemGroup = FabricItemGroupBuilder.build( + Identifier("monadmachines", "group") +) { ItemStack(ProgramWorkstation) } + +@Suppress("unused") +fun init() { + Registry.register(Registry.ITEM, IntroToComputing.id, IntroToComputing) + + Registry.register(Registry.BLOCK, ProgramWorkstation.id, ProgramWorkstation) + Registry.register(Registry.ITEM, ProgramWorkstation.id, ProgramWorkstation.item) + + Registry.register(Registry.ITEM, ProgramCard.id, ProgramCard) + + +} diff --git a/src/main/kotlin/tf/bug/monadmachines/ProgramCard.kt b/src/main/kotlin/tf/bug/monadmachines/ProgramCard.kt new file mode 100644 index 0000000..c4ad449 --- /dev/null +++ b/src/main/kotlin/tf/bug/monadmachines/ProgramCard.kt @@ -0,0 +1,11 @@ +package tf.bug.monadmachines + +import net.fabricmc.fabric.api.item.v1.FabricItemSettings +import net.minecraft.item.Item +import net.minecraft.util.Identifier + +object ProgramCard : Item(FabricItemSettings().group(MONADMACHINES_ITEMGROUP)) { + + val id = Identifier("monadmachines", "program_card") + +} diff --git a/src/main/kotlin/tf/bug/monadmachines/ProgramWorkstation.kt b/src/main/kotlin/tf/bug/monadmachines/ProgramWorkstation.kt new file mode 100644 index 0000000..d5aa287 --- /dev/null +++ b/src/main/kotlin/tf/bug/monadmachines/ProgramWorkstation.kt @@ -0,0 +1,15 @@ +package tf.bug.monadmachines + +import net.fabricmc.fabric.api.`object`.builder.v1.block.FabricBlockSettings +import net.minecraft.block.Block +import net.minecraft.block.Material +import net.minecraft.item.BlockItem +import net.minecraft.item.Item +import net.minecraft.util.Identifier + +object ProgramWorkstation : Block(FabricBlockSettings.of(Material.METAL)) { + + val id = Identifier("monadmachines", "program_workstation") + val item = BlockItem(this, Item.Settings().group(MONADMACHINES_ITEMGROUP)) + +} diff --git a/src/main/kotlin/tf/bug/monadmachines/books/IntroToComputing.kt b/src/main/kotlin/tf/bug/monadmachines/books/IntroToComputing.kt new file mode 100644 index 0000000..4e7cae9 --- /dev/null +++ b/src/main/kotlin/tf/bug/monadmachines/books/IntroToComputing.kt @@ -0,0 +1,58 @@ +package tf.bug.monadmachines.books + +import net.fabricmc.loader.api.FabricLoader +import net.minecraft.client.item.TooltipContext +import net.minecraft.entity.player.PlayerEntity +import net.minecraft.item.Item +import net.minecraft.item.ItemStack +import net.minecraft.server.network.ServerPlayerEntity +import net.minecraft.text.Text +import net.minecraft.text.TextColor +import net.minecraft.text.TranslatableText +import net.minecraft.util.* +import net.minecraft.world.World +import tf.bug.monadmachines.MONADMACHINES_ITEMGROUP +import vazkii.patchouli.api.PatchouliAPI + +object IntroToComputing : Item(Settings().group(MONADMACHINES_ITEMGROUP)) { + + val id = Identifier("monadmachines", "intro_to_computing") + + fun getEdition(): Text { + return if(FabricLoader.getInstance().isModLoaded("patchouli")) { + PatchouliAPI.get().getSubtitle(id) + } else { + val text = TranslatableText("monadmachines.no_patchouli_tooltip") + text.style = text.style.withColor(TextColor.fromFormatting(Formatting.RED)) + text + } + } + + override fun appendTooltip( + stack: ItemStack, + world: World?, + tooltip: MutableList, + context: TooltipContext + ) { + super.appendTooltip(stack, world, tooltip, context) + + tooltip.add(getEdition().shallowCopy().formatted(Formatting.GRAY)) + } + + override fun use(world: World, user: PlayerEntity, hand: Hand): TypedActionResult { + val itemStack = user.getStackInHand(hand) + + if(user is ServerPlayerEntity) { + if(FabricLoader.getInstance().isModLoaded("patchouli")) { + PatchouliAPI.get().openBookGUI(user, id) + } else { + val text = TranslatableText("monadmachines.no_patchouli_message") + text.style = text.style.withColor(TextColor.fromFormatting(Formatting.RED)) + user.sendSystemMessage(text, Util.NIL_UUID) + } + } + + return TypedActionResult(ActionResult.SUCCESS, itemStack) + } + +} \ No newline at end of file diff --git a/src/main/resources/assets/monadmachines/blockstates/program_workstation.json b/src/main/resources/assets/monadmachines/blockstates/program_workstation.json new file mode 100644 index 0000000..0c23256 --- /dev/null +++ b/src/main/resources/assets/monadmachines/blockstates/program_workstation.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": { "model": "monadmachines:block/program_workstation" } + } +} diff --git a/src/main/resources/assets/monadmachines/lang/en_us.json b/src/main/resources/assets/monadmachines/lang/en_us.json new file mode 100644 index 0000000..9b43668 --- /dev/null +++ b/src/main/resources/assets/monadmachines/lang/en_us.json @@ -0,0 +1,13 @@ +{ + "monadmachines.no_patchouli_tooltip": "Patchouli not found!", + "monadmachines.no_patchouli_message": "Patchouli was not detected to be loaded! Please install the mod, or check your logs for any errors that might cause it to not load.", + + "item.monadmachines.intro_to_computing": "Intro to Computing", + "monadmachines.intro_to_computing.landing": "Getting Started with MonadMachines", + + "itemGroup.monadmachines.group": "MonadMachines", + + "block.monadmachines.program_workstation": "Program Workstation", + + "item.monadmachines.program_card": "Program Card" +} diff --git a/src/main/resources/assets/monadmachines/models/block/program_workstation.json b/src/main/resources/assets/monadmachines/models/block/program_workstation.json new file mode 100644 index 0000000..e38ed01 --- /dev/null +++ b/src/main/resources/assets/monadmachines/models/block/program_workstation.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "monadmachines:block/program_workstation" + } +} diff --git a/src/main/resources/assets/monadmachines/models/item/intro_to_computing.json b/src/main/resources/assets/monadmachines/models/item/intro_to_computing.json new file mode 100644 index 0000000..72afbb2 --- /dev/null +++ b/src/main/resources/assets/monadmachines/models/item/intro_to_computing.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "monadmachines:item/intro_to_computing" + } +} diff --git a/src/main/resources/assets/monadmachines/models/item/program_card.json b/src/main/resources/assets/monadmachines/models/item/program_card.json new file mode 100644 index 0000000..4ca5c50 --- /dev/null +++ b/src/main/resources/assets/monadmachines/models/item/program_card.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "monadmachines:item/program_card" + } +} diff --git a/src/main/resources/assets/monadmachines/models/item/program_workstation.json b/src/main/resources/assets/monadmachines/models/item/program_workstation.json new file mode 100644 index 0000000..cf2ff3b --- /dev/null +++ b/src/main/resources/assets/monadmachines/models/item/program_workstation.json @@ -0,0 +1,3 @@ +{ + "parent": "monadmachines:block/program_workstation" +} diff --git a/src/main/resources/assets/monadmachines/textures/block/program_workstation.png b/src/main/resources/assets/monadmachines/textures/block/program_workstation.png new file mode 100644 index 0000000..1061930 Binary files /dev/null and b/src/main/resources/assets/monadmachines/textures/block/program_workstation.png differ diff --git a/src/main/resources/assets/monadmachines/textures/item/intro_to_computing.png b/src/main/resources/assets/monadmachines/textures/item/intro_to_computing.png new file mode 100644 index 0000000..78e252e Binary files /dev/null and b/src/main/resources/assets/monadmachines/textures/item/intro_to_computing.png differ diff --git a/src/main/resources/assets/monadmachines/textures/item/program_card.png b/src/main/resources/assets/monadmachines/textures/item/program_card.png new file mode 100644 index 0000000..5d941b3 Binary files /dev/null and b/src/main/resources/assets/monadmachines/textures/item/program_card.png differ diff --git a/src/main/resources/data/monadmachines/patchouli_books/intro_to_computing/book.json b/src/main/resources/data/monadmachines/patchouli_books/intro_to_computing/book.json new file mode 100644 index 0000000..f4bb9a5 --- /dev/null +++ b/src/main/resources/data/monadmachines/patchouli_books/intro_to_computing/book.json @@ -0,0 +1,8 @@ +{ + "name": "item.monadmachines.intro_to_computing", + "landing_text": "monadmachines.intro_to_computing.landing", + "version": 1, + "dont_generate_book": true, + "custom_book_item": "monadmachines:intro_to_computing", + "creative_tab": "monadmachines.group" +} diff --git a/src/main/resources/data/monadmachines/recipes/intro_to_computing.json b/src/main/resources/data/monadmachines/recipes/intro_to_computing.json new file mode 100644 index 0000000..e5c88b5 --- /dev/null +++ b/src/main/resources/data/monadmachines/recipes/intro_to_computing.json @@ -0,0 +1,14 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:book" + }, + { + "item": "minecraft:iron_ingot" + } + ], + "result": { + "item": "monadmachines:intro_to_computing" + } +} diff --git a/src/main/resources/data/monadmachines/recipes/program_card.json b/src/main/resources/data/monadmachines/recipes/program_card.json new file mode 100644 index 0000000..d4e625f --- /dev/null +++ b/src/main/resources/data/monadmachines/recipes/program_card.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "EII", + "II " + ], + "key": { + "E": { + "item": "minecraft:end_crystal" + }, + "I": { + "item": "minecraft:iron_ingot" + } + }, + "result": { + "item": "monadmachines:program_card" + } +} diff --git a/src/main/resources/data/monadmachines/recipes/program_workstation.json b/src/main/resources/data/monadmachines/recipes/program_workstation.json new file mode 100644 index 0000000..06ef745 --- /dev/null +++ b/src/main/resources/data/monadmachines/recipes/program_workstation.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shapeless", + "ingredients": [ + { + "item": "minecraft:cartography_table" + }, + { + "item": "minecraft:writable_book" + }, + { + "item": "minecraft:gold_block" + } + ], + "result": { + "item": "monadmachines:program_workstation" + } +} diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index c539e3e..91244a5 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -19,16 +19,24 @@ "environment": "*", "entrypoints": { "main": [ - "tf.bug.monadmachines.ExampleModKt::init" + { + "adapter": "kotlin", + "value": "tf.bug.monadmachines.MonadMachinesKt::init" + } ] }, - "mixins": [ - "monadmachines.mixins.json" - ], + "mixins": [], "depends": { "fabricloader": ">=0.8.7", "fabric": "*", "fabric-language-kotlin": "*", "minecraft": "1.16.x" + }, + "recommends": { + "patchouli": "*" + }, + "suggests": { + "modmenu": "*", + "polymorph": "*" } } diff --git a/src/main/resources/monadmachines.mixins.json b/src/main/resources/monadmachines.mixins.json deleted file mode 100644 index 217a98e..0000000 --- a/src/main/resources/monadmachines.mixins.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "required": true, - "package": "tf.bug.monadmachines.mixin", - "compatibilityLevel": "JAVA_8", - "mixins": [ - ], - "client": [ - "ExampleMixin" - ], - "injectors": { - "defaultRequire": 1 - } -}