diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..5adf394 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,41 @@ +# Automatically build the project and run any configured tests for every push +# and submitted pull request. This can help catch issues that only occur on +# certain platforms or Java versions, and provides a first line of defence +# against bad commits. + +name: build +on: [pull_request, push] + +jobs: + build: + strategy: + matrix: + # Use these Java versions + java: [ + 17, # Current Java LTS & minimum supported by Minecraft + 21, # Current Java LTS + ] + # and run on both Linux and Windows + os: [ubuntu-22.04, windows-2022] + runs-on: ${{ matrix.os }} + steps: + - name: checkout repository + uses: actions/checkout@v4 + - name: validate gradle wrapper + uses: gradle/wrapper-validation-action@v1 + - name: setup jdk ${{ matrix.java }} + uses: actions/setup-java@v4 + with: + java-version: ${{ matrix.java }} + distribution: 'microsoft' + - name: make gradle wrapper executable + if: ${{ runner.os != 'Windows' }} + run: chmod +x ./gradlew + - name: build + run: ./gradlew build + - name: capture build artifacts + if: ${{ runner.os == 'Linux' && matrix.java == '21' }} # Only upload artifacts built from latest java on one OS + uses: actions/upload-artifact@v3 + with: + name: Artifacts + path: build/libs/ \ No newline at end of file diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index ddc6093..97a3f08 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -30,8 +30,9 @@ jobs: if: endswith(github.ref_name, 'master') && github.ref_protected && github.ref_type == 'branch' runs-on: ubuntu-latest env: - APPVEYOR_BUILD_VERSION: '3.2.1' + APPVEYOR_BUILD_VERSION: '3.2.3' CURSETOKEN: ${{ secrets.CURSETOKEN }} + MODRINTHTOKEN: ${{ secrets.MODRINTHTOKEN }} steps: - uses: actions/checkout@v3 with: diff --git a/build.gradle b/build.gradle index ca6aab8..b56fdec 100644 --- a/build.gradle +++ b/build.gradle @@ -1,13 +1,17 @@ plugins { id 'fabric-loom' version '1.5-SNAPSHOT' id 'maven-publish' + id "com.matthewprenger.cursegradle" version "1.4.0" + id "com.modrinth.minotaur" version "2.+" } -version = project.mod_version -group = project.maven_group - +def ver = System.getenv("APPVEYOR_BUILD_VERSION") +if(ver == null) + ver = "dev" +version = ver +group = 'com.troblecodings' base { - archivesName = project.archives_base_name + archivesName = 'TC-Redstone-1.20.4-Fabric' } sourceSets{ @@ -18,19 +22,50 @@ sourceSets{ } } -repositories { - // Add repositories to retrieve artifacts from in here. - // You should only use this when depending on other mods because - // Loom adds the essential maven repositories to download Minecraft and libraries from automatically. - // See https://docs.gradle.org/current/userguide/declaring_repositories.html - // for more information about repositories. +def key = System.getenv("CURSETOKEN") +if(key == null) + key = 'dev' +curseforge { + apiKey = key + project { + id = '503143' + changelog = file('changelog.md') + changelogType = 'markdown' + releaseType = 'release' + addGameVersion 'Java 17' + mainArtifact(remapJar) { + displayName = "Example $project.version" + } + } + options { + forgeGradleIntegration = false + } +} + +afterEvaluate { + tasks.curseforge503143.dependsOn remapJar +} + + +def token = System.getenv("MODRINTHTOKEN") +if(key == null) + key = 'dev' +modrinth { + token = token + projectId = 'rMlghquR' + versionNumber = ver + versionType = 'release' + versionName = 'TC-Redstone-1.20.4-Fabric' + uploadFile = remapJar + gameVersions = ['1.20.4'] + loaders = ['fabric'] } loom { splitEnvironmentSourceSets() mods { - "modid" { + "tcredstone" { sourceSet sourceSets.main sourceSet sourceSets.client } @@ -38,19 +73,17 @@ loom { } +task publishToModSites { + publishToModSites.dependsOn modrinth + publishToModSites.dependsOn curseforge +} + dependencies { - // 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}" - - // Fabric API. This is technically optional, but you probably want it anyway. - modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" - - // Uncomment the following line to enable the deprecated Fabric API modules. - // These are included in the Fabric API production distribution and allow you to update your mod to the latest modules at a later more convenient time. - - // modImplementation "net.fabricmc.fabric-api:fabric-api-deprecated:${project.fabric_version}" + minecraft "com.mojang:minecraft:1.20.4" + mappings "net.fabricmc:yarn:1.20.4+build.1:v2" + modImplementation "net.fabricmc:fabric-loader:0.15.0" + + modImplementation "net.fabricmc.fabric-api:fabric-api:0.91.1+1.20.4" } processResources { @@ -66,9 +99,6 @@ tasks.withType(JavaCompile).configureEach { } java { - // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task - // if it is present. - // If you remove this line, sources will not be generated. withSourcesJar() sourceCompatibility = JavaVersion.VERSION_17 @@ -81,7 +111,6 @@ jar { } } -// configure the maven publication publishing { publications { mavenJava(MavenPublication) { @@ -89,11 +118,9 @@ publishing { } } - // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing. repositories { - // Add repositories to publish to here. - // Notice: This block does NOT have the same function as the block in the top level. - // The repositories here will be used for publishing your artifact, not for - // retrieving dependencies. + maven { + url "file:///${project.projectDir}/mcmodsrepo" + } } } \ No newline at end of file diff --git a/changelog.md b/changelog.md index d1fc535..04b09b1 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,9 @@ # Changelog +## [1.20.4 Fabric - 3.2.3] + +* port to fabric + ## [1.20.1-3.2.1] * added multi linking tool diff --git a/linkableapi b/linkableapi index ea4b744..9ce3692 160000 --- a/linkableapi +++ b/linkableapi @@ -1 +1 @@ -Subproject commit ea4b7448623daec4423e2d881b4454b6fa7bb1a5 +Subproject commit 9ce36924c8223ddf7abf5c947218b0a439354d29 diff --git a/src/client/java/com/troblecodings/tcredstone/TCRedstoneMainClient.java b/src/client/java/com/troblecodings/tcredstone/TCRedstoneMainClient.java deleted file mode 100644 index 69eb37b..0000000 --- a/src/client/java/com/troblecodings/tcredstone/TCRedstoneMainClient.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.troblecodings.tcredstone; - -import net.fabricmc.api.ClientModInitializer; - -public class TCRedstoneMainClient implements ClientModInitializer { - @Override - public void onInitializeClient() { - // This entrypoint is suitable for setting up client-specific logic, such as rendering. - } -} \ No newline at end of file diff --git a/src/client/java/com/troblecodings/tcredstone/mixin/client/TCRedstoneClientMixin.java b/src/client/java/com/troblecodings/tcredstone/mixin/client/TCRedstoneClientMixin.java deleted file mode 100644 index 3975e0e..0000000 --- a/src/client/java/com/troblecodings/tcredstone/mixin/client/TCRedstoneClientMixin.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.troblecodings.tcredstone.mixin.client; - -import net.minecraft.client.MinecraftClient; -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(MinecraftClient.class) -public class TCRedstoneClientMixin { - @Inject(at = @At("HEAD"), method = "run") - private void run(CallbackInfo info) { - // This code is injected into the start of MinecraftClient.run()V - } -} \ No newline at end of file diff --git a/src/client/resources/tcredstone.client.mixins.json b/src/client/resources/tcredstone.client.mixins.json deleted file mode 100644 index b34d0b9..0000000 --- a/src/client/resources/tcredstone.client.mixins.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "required": true, - "package": "com.troblecodings.tcredstone.mixin.client", - "compatibilityLevel": "JAVA_17", - "client": [ - "TCRedstoneClientMixin" - ], - "injectors": { - "defaultRequire": 1 - } -} \ No newline at end of file diff --git a/src/main/java/com/troblecodings/tcredstone/init/TCInit.java b/src/main/java/com/troblecodings/tcredstone/init/TCInit.java index 5fc465b..6b0f31e 100644 --- a/src/main/java/com/troblecodings/tcredstone/init/TCInit.java +++ b/src/main/java/com/troblecodings/tcredstone/init/TCInit.java @@ -29,51 +29,61 @@ public class TCInit { - public static final Item RS_LINKER = registerItem("linker", new Linkingtool(null, TCInit::acceptAcceptor), - ItemGroups.REDSTONE); - public static final Item RS_MULTILINKER = registerItem("multilinker", - new MultiLinkingTool(null, TCInit::acceptAcceptor), ItemGroups.REDSTONE); - public static final Item REMOTE_ACTIVATOR = registerItem("activator", new RemoteActivator(), ItemGroups.REDSTONE); + public static final Item RS_LINKER = registerItem("linker", + new Linkingtool(null, TCInit::acceptAcceptor), ItemGroups.REDSTONE); + public static final Item RS_MULTILINKER = registerItem("multilinker", + new MultiLinkingTool(null, TCInit::acceptAcceptor), ItemGroups.REDSTONE); + public static final Item REMOTE_ACTIVATOR = registerItem("activator", + new RemoteActivator(TCInit::acceptAcceptor), ItemGroups.REDSTONE); - @SuppressWarnings("deprecation") - public static final Block RS_ACCEPTOR = registerBlock("acceptor", - new BlockRedstoneAcceptor(FabricBlockSettings.of().strength(1.5f, 6.0f)), ItemGroups.REDSTONE); - @SuppressWarnings("deprecation") - public static final Block RS_EMITTER = registerBlock("emitter", - new BlockRedstoneEmitter(FabricBlockSettings.of().strength(1.5f, 6.0f)), ItemGroups.REDSTONE); - @SuppressWarnings("deprecation") - public static final Block RS_MULTI_EMITTER = registerBlock("multiemitter", - new BlockRedstoneMultiEmitter(FabricBlockSettings.of().strength(1.5f, 6.0f)), ItemGroups.REDSTONE); + @SuppressWarnings("deprecation") + public static final Block RS_ACCEPTOR = registerBlock("acceptor", + new BlockRedstoneAcceptor(FabricBlockSettings.of().strength(1.5f, 6.0f)), + ItemGroups.REDSTONE); + @SuppressWarnings("deprecation") + public static final Block RS_EMITTER = registerBlock("emitter", + new BlockRedstoneEmitter(FabricBlockSettings.of().strength(1.5f, 6.0f)), + ItemGroups.REDSTONE); + @SuppressWarnings("deprecation") + public static final Block RS_MULTI_EMITTER = registerBlock("multiemitter", + new BlockRedstoneMultiEmitter(FabricBlockSettings.of().strength(1.5f, 6.0f)), + ItemGroups.REDSTONE); - public static final BlockEntityType EMITER_TILE = Registry.register( - Registries.BLOCK_ENTITY_TYPE, new Identifier(TCRedstoneMain.MODID, "emitter"), - FabricBlockEntityTypeBuilder.create(TileRedstoneEmitter::new, RS_EMITTER).build()); - public static final BlockEntityType MULTI_EMITER_TILE = Registry.register( - Registries.BLOCK_ENTITY_TYPE, new Identifier(TCRedstoneMain.MODID, "multiemitter"), - FabricBlockEntityTypeBuilder.create(TileRedstoneMultiEmitter::new, RS_MULTI_EMITTER).build()); + public static final BlockEntityType EMITER_TILE = Registry.register( + Registries.BLOCK_ENTITY_TYPE, new Identifier(TCRedstoneMain.MODID, "emitter"), + FabricBlockEntityTypeBuilder.create(TileRedstoneEmitter::new, RS_EMITTER).build()); + public static final BlockEntityType MULTI_EMITER_TILE = + Registry.register(Registries.BLOCK_ENTITY_TYPE, + new Identifier(TCRedstoneMain.MODID, "multiemitter"), + FabricBlockEntityTypeBuilder + .create(TileRedstoneMultiEmitter::new, RS_MULTI_EMITTER).build()); - public static boolean acceptAcceptor(final World level, final BlockPos pos) { - return level.getBlockState(pos).getBlock() instanceof BlockRedstoneAcceptor; - } + public static boolean acceptAcceptor(final World level, final BlockPos pos) { + return level.getBlockState(pos).getBlock() instanceof BlockRedstoneAcceptor; + } - private static Block registerBlock(String name, Block block, RegistryKey group) { - registerBlockItem(name, block, group); - return Registry.register(Registries.BLOCK, new Identifier(TCRedstoneMain.MODID, name), block); - } + private static Block registerBlock(final String name, final Block block, + final RegistryKey group) { + registerBlockItem(name, block, group); + return Registry.register(Registries.BLOCK, new Identifier(TCRedstoneMain.MODID, name), + block); + } - private static Item registerBlockItem(String name, Block block, RegistryKey group) { - Item item = Registry.register(Registries.ITEM, new Identifier(TCRedstoneMain.MODID, name), - new BlockItem(block, new FabricItemSettings())); - ItemGroupEvents.modifyEntriesEvent(group).register(entries -> entries.add(item)); - return item; - } + private static Item registerBlockItem(final String name, final Block block, + final RegistryKey group) { + Item item = Registry.register(Registries.ITEM, new Identifier(TCRedstoneMain.MODID, name), + new BlockItem(block, new FabricItemSettings())); + ItemGroupEvents.modifyEntriesEvent(group).register(entries -> entries.add(item)); + return item; + } - private static Item registerItem(String name, Item item, RegistryKey group) { - ItemGroupEvents.modifyEntriesEvent(group).register(entries -> entries.add(item)); - return Registry.register(Registries.ITEM, new Identifier(TCRedstoneMain.MODID, name), item); - } + private static Item registerItem(final String name, final Item item, + final RegistryKey group) { + ItemGroupEvents.modifyEntriesEvent(group).register(entries -> entries.add(item)); + return Registry.register(Registries.ITEM, new Identifier(TCRedstoneMain.MODID, name), item); + } - public static void init() { - } + public static void init() { + } } diff --git a/src/main/java/com/troblecodings/tcredstone/item/RemoteActivator.java b/src/main/java/com/troblecodings/tcredstone/item/RemoteActivator.java index bc0b0a6..31221f5 100644 --- a/src/main/java/com/troblecodings/tcredstone/item/RemoteActivator.java +++ b/src/main/java/com/troblecodings/tcredstone/item/RemoteActivator.java @@ -1,7 +1,8 @@ package com.troblecodings.tcredstone.item; +import java.util.function.BiPredicate; + import com.troblecodings.linkableapi.Linkingtool; -import com.troblecodings.tcredstone.init.TCInit; import com.troblecodings.tcredstone.tile.TileRedstoneEmitter; import net.minecraft.entity.player.PlayerEntity; @@ -15,20 +16,28 @@ public class RemoteActivator extends Linkingtool { - public RemoteActivator() { - super(null, TCInit::acceptAcceptor, _u1 -> false); - } - - @Override - public TypedActionResult use(final World level, final PlayerEntity player, final Hand hand) { - final ItemStack itemstack = player.getStackInHand(hand); - if (!hand.equals(Hand.MAIN_HAND) || level.isClient()) - return TypedActionResult.pass(itemstack); - final NbtCompound comp = itemstack.getNbt(); - final BlockPos linkpos = NbtHelper.toBlockPos(comp); - final boolean state = TileRedstoneEmitter.redstoneUpdate(linkpos, level); - message(player, "ra.state", String.valueOf(state)); - return TypedActionResult.success(itemstack); - } + public RemoteActivator(final BiPredicate predicate) { + super(null, predicate, _u1 -> false); + } + @Override + public TypedActionResult use(final World level, final PlayerEntity player, + final Hand hand) { + final ItemStack itemstack = player.getStackInHand(hand); + final NbtCompound tag = itemstack.getOrCreateNbt(); + if (tag.contains(LINKINGTOOL_TAG)) { + if (!hand.equals(Hand.MAIN_HAND) || level.isClient()) + return TypedActionResult.pass(itemstack); + final NbtCompound comp = tag.getCompound(LINKINGTOOL_TAG); + final boolean containsPos = + comp.contains("X") && comp.contains("Y") && comp.contains("Z"); + if (containsPos) { + final BlockPos linkpos = NbtHelper.toBlockPos(comp); + final boolean state = TileRedstoneEmitter.redstoneUpdate(linkpos, level); + message(player, "ra.state", String.valueOf(state)); + return TypedActionResult.success(itemstack); + } + } + return TypedActionResult.success(itemstack); + } } diff --git a/src/main/java/com/troblecodings/tcredstone/mixin/TCRedstoneMixin.java b/src/main/java/com/troblecodings/tcredstone/mixin/TCRedstoneMixin.java deleted file mode 100644 index af3be51..0000000 --- a/src/main/java/com/troblecodings/tcredstone/mixin/TCRedstoneMixin.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.troblecodings.tcredstone.mixin; - -import net.minecraft.server.MinecraftServer; -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(MinecraftServer.class) -public class TCRedstoneMixin { - @Inject(at = @At("HEAD"), method = "loadWorld") - private void init(CallbackInfo info) { - // This code is injected into the start of MinecraftServer.loadWorld()V - } -} \ No newline at end of file diff --git a/src/main/java/com/troblecodings/tcredstone/tile/TileRedstoneMultiEmitter.java b/src/main/java/com/troblecodings/tcredstone/tile/TileRedstoneMultiEmitter.java index 013bbaa..f8e1670 100644 --- a/src/main/java/com/troblecodings/tcredstone/tile/TileRedstoneMultiEmitter.java +++ b/src/main/java/com/troblecodings/tcredstone/tile/TileRedstoneMultiEmitter.java @@ -34,8 +34,6 @@ public NbtCompound writeBlockPosToNBT(final List pos, final NbtCompoun list.add(item); }); compound.put(LINKED_POS_LIST, list); - System.out.println("List: " + listOfPositions); - System.out.println("Comp: " + compound); } return compound; } diff --git a/src/main/resources/tcredstone.mixins.json b/src/main/resources/tcredstone.mixins.json deleted file mode 100644 index 285fa50..0000000 --- a/src/main/resources/tcredstone.mixins.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "required": true, - "package": "com.troblecodings.tcredstone.mixin", - "compatibilityLevel": "JAVA_17", - "mixins": [ - "TCRedstoneMixin" - ], - "injectors": { - "defaultRequire": 1 - } -} \ No newline at end of file