diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f7478a9..251b1ce 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,28 +12,38 @@ jobs: matrix: # Use these Java versions java: [ - 17 # Minimum supported by Minecraft + 17, # Minimum supported by Minecraft + 21, ] # and run on both Linux and Windows - os: [ubuntu-20.04, windows-latest] + os: [ubuntu-20.04] runs-on: ${{ matrix.os }} steps: - name: checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: validate gradle wrapper uses: gradle/wrapper-validation-action@v1 - name: setup jdk ${{ matrix.java }} - uses: actions/setup-java@v1 + uses: actions/setup-java@v4 with: java-version: ${{ matrix.java }} + distribution: 'temurin' + - uses: actions/cache@v3 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + ./.gradle/loom-cache + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + restore-keys: | + ${{ runner.os }}-gradle- - name: make gradle wrapper executable - if: ${{ runner.os != 'Windows' }} run: chmod +x ./gradlew - name: build - run: ./gradlew build + run: ./gradlew build --no-daemon - name: capture build artifacts - if: ${{ runner.os == 'Linux' && matrix.java == '17' }} # Only upload artifacts built from latest java on one OS - uses: actions/upload-artifact@v2 + if: ${{ matrix.java == '21' }} # Only upload artifacts built from latest java version + uses: actions/upload-artifact@v3 with: - name: Artifacts - path: build/libs/ + name: stacker-artifacts + path: build/libs/*.jar diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5a82397..b617c88 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -18,7 +18,7 @@ jobs: - name: make gradle wrapper executable run: chmod +x ./gradlew - name: build - run: ./gradlew build + run: ./gradlew build --no-daemon - uses: Kir-Antipov/mc-publish@v3.0 with: curseforge-id: 515415 @@ -30,4 +30,4 @@ jobs: version-type: release loaders: | fabric - quilt \ No newline at end of file + quilt diff --git a/build.gradle b/build.gradle index 97ee024..51b37ab 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'fabric-loom' version '0.10-SNAPSHOT' + id 'fabric-loom' version '1.5-SNAPSHOT' id 'maven-publish' id "me.shedaniel.unified-publishing" version "0.1.+" } @@ -12,9 +12,21 @@ version = project.mod_version group = project.maven_group repositories { - maven { url("https://storage.googleapis.com/devan-maven/") } - maven { url "https://maven.shedaniel.me/" } - maven { url "https://maven.terraformersmc.com/releases/" } + maven { url 'https://jitpack.io' } + maven { url = "https://storage.googleapis.com/devan-maven/" } + maven { url = "https://maven.shedaniel.me/" } + maven { url = "https://maven.terraformersmc.com/releases/" } + exclusiveContent { + forRepository { + maven { + name = "Modrinth" + url = "https://api.modrinth.com/maven" + } + } + filter { + includeGroup "maven.modrinth" + } + } // 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. @@ -31,13 +43,17 @@ dependencies { // Fabric API. This is technically optional, but you probably want it anyway. modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" - include "net.devtech:Stacc:1.3.2" - modRuntime(include("net.devtech:Stacc:1.3.2")) + //include "net.devtech:Stacc:${project.stacc_version}" + //modRuntimeOnly(include("net.devtech:Stacc:${project.stacc_version}")) + + include "maven.modrinth:stacc-api:${project.stacc_version}" + modRuntimeOnly(include "maven.modrinth:stacc-api:${project.stacc_version}") - modApi("me.shedaniel.cloth:cloth-config-fabric:5.0.38") { + modApi("me.shedaniel.cloth:cloth-config-fabric:${project.cloth_config_version}") { exclude(group: "net.fabricmc.fabric-api") } + modRuntimeOnly("com.terraformersmc:modmenu:${project.modmenu_version}") modCompileOnly("com.terraformersmc:modmenu:${project.modmenu_version}") { transitive = false } diff --git a/gradle.properties b/gradle.properties index 596b8f7..af573f5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,18 +1,21 @@ # Done to increase the memory available to gradle. org.gradle.jvmargs=-Xmx1G +org.gradle.parallel=true +org.gradle.caching=true # Fabric Properties # check these on https://fabricmc.net/versions.html - minecraft_version=1.18.2 - yarn_mappings=1.18.2+build.3 - loader_version=0.14.5 + minecraft_version=1.20.2 + yarn_mappings=1.20.2+build.4 + loader_version=0.14.19 # Mod Properties - mod_version = 3.0.2-1.18.2 + mod_version = 3.1.1-1.20.2 maven_group = io.github.Andrew6rant archives_base_name = stacker # Dependencies - fabric_version=0.51.1+1.18.2 - modmenu_version=2.0.6 - cloth_config_version=5.0.34 + fabric_version=0.91.6+1.20.2 + modmenu_version=8.0.1 + cloth_config_version=12.0.119 + stacc_version=1.8.0 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 84d1f85..a595206 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/java/io/github/Andrew6rant/stacker/Stacker.java b/src/main/java/io/github/Andrew6rant/stacker/Stacker.java index e9da716..2731e5b 100644 --- a/src/main/java/io/github/Andrew6rant/stacker/Stacker.java +++ b/src/main/java/io/github/Andrew6rant/stacker/Stacker.java @@ -7,19 +7,17 @@ import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; import net.minecraft.item.Item; -import net.minecraft.tag.TagKey; +import net.minecraft.registry.Registries; +import net.minecraft.registry.RegistryKeys; +import net.minecraft.registry.tag.TagKey; import net.minecraft.util.ActionResult; import net.minecraft.util.Identifier; -import net.minecraft.util.registry.Registry; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.util.HashSet; import java.util.List; import java.util.Set; -import java.util.stream.Collectors; - -import static net.minecraft.util.registry.Registry.ITEM_KEY; public class Stacker implements ModInitializer { private static final Logger LOGGER = LogManager.getLogger("Stacker"); @@ -40,13 +38,13 @@ public void onInitialize() { public static void loadStacker(String configMsg) { LOGGER.info("Stacker: Attempting to "+configMsg+" config..."); Set invalidSet = new HashSet<>(); - for (Item item : Registry.ITEM) { + for (Item item : Registries.ITEM) { if (!item.isDamageable()) { Stacker.setMax(item, stackerConfig.getConfig().maxStacker); } Stacker.setMax(item, Stacker.overrideItem(item, stackerConfig.getConfig().itemOverride, invalidSet)); } - if (invalidSet.size() > 0) { + if (!invalidSet.isEmpty()) { LOGGER.error("Stacker: Invalid override entries!"); LOGGER.warn("Stacker: The following entries were invalid:"); for (String invalid : invalidSet) { @@ -86,9 +84,9 @@ public static Integer overrideItem(Item item, List overrideList, Set> itemStream = item.getRegistryEntry().streamTags().collect(Collectors.toList()); + List> itemStream = item.getRegistryEntry().streamTags().toList(); for (TagKey tagKey : itemStream) { - if (item.getRegistryEntry().isIn(TagKey.of(ITEM_KEY, new Identifier(splitEntry[0], splitEntry[1])))) { + if (item.getRegistryEntry().isIn(TagKey.of(RegistryKeys.ITEM, new Identifier(splitEntry[0], splitEntry[1])))) { return Integer.parseInt(splitEntry[2]); } } @@ -96,7 +94,7 @@ public static Integer overrideItem(Item item, List overrideList, Set c) { - if (c.getReturnValue() <= 0) { - c.setReturnValue(1); - } +public abstract class BundleItemMixin { + + @ModifyConstant(method = "getAmountFilled", constant = @Constant(floatValue = 64.0f)) + private static float replaceAmountFilled(float constant) { + return (float) Stacker.getStacker().getStackerConfig().maxStacker; + } + + @ModifyConstant(method = "onStackClicked", constant = @Constant(intValue = 64)) + private int replaceOnStackClicked(int constant) { + return Stacker.getStacker().getStackerConfig().maxStacker; + } + + @ModifyConstant(method = "getItemBarStep", constant = @Constant(intValue = 64)) + private int replaceGetItemBarStep(int constant) { + return Stacker.getStacker().getStackerConfig().maxStacker; + } + + @ModifyConstant(method = "addToBundle", constant = @Constant(intValue = 64)) + private static int replaceAddToBundle(int constant) { + return Stacker.getStacker().getStackerConfig().maxStacker; + } + + @ModifyConstant(method = "getItemOccupancy", constant = @Constant(intValue = 64)) + private static int replaceGetItemOccupancy(int constant) { + return Stacker.getStacker().getStackerConfig().maxStacker; + } + + @ModifyConstant(method = "appendTooltip", constant = @Constant(intValue = 64)) + private int replaceAppendTooltip(int constant) { + return Stacker.getStacker().getStackerConfig().maxStacker; } } diff --git a/src/main/java/io/github/Andrew6rant/stacker/mixin/DispenserBehaviorMixin.java b/src/main/java/io/github/Andrew6rant/stacker/mixin/DispenserBehaviorMixin.java index 04beda4..3a07658 100644 --- a/src/main/java/io/github/Andrew6rant/stacker/mixin/DispenserBehaviorMixin.java +++ b/src/main/java/io/github/Andrew6rant/stacker/mixin/DispenserBehaviorMixin.java @@ -2,7 +2,6 @@ import net.minecraft.block.DispenserBlock; import net.minecraft.block.dispenser.ItemDispenserBehavior; -import net.minecraft.block.entity.DispenserBlockEntity; import net.minecraft.item.FluidModificationItem; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; @@ -11,7 +10,6 @@ import net.minecraft.world.World; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; -import org.spongepowered.asm.mixin.Shadow; @Mixin(targets = "net/minecraft/block/dispenser/DispenserBehavior$8") public class DispenserBehaviorMixin { @@ -24,15 +22,15 @@ public ItemStack dispenseSilently(BlockPointer pointer, ItemStack stack) { ItemDispenserBehavior fallbackBehavior = new ItemDispenserBehavior(); ItemStack emptyBucketStack = new ItemStack(Items.BUCKET); FluidModificationItem fluidModificationItem = (FluidModificationItem) stack.getItem(); - BlockPos blockPos = pointer.getPos().offset(pointer.getBlockState().get(DispenserBlock.FACING)); - World world = pointer.getWorld(); + BlockPos blockPos = pointer.blockEntity().getPos().offset(pointer.state().get(DispenserBlock.FACING)); + World world = pointer.blockEntity().getWorld(); if (fluidModificationItem.placeFluid( null, world, blockPos, null)) { fluidModificationItem.onEmptied( null, world, stack, blockPos); if (stack.getCount() > 1) { ItemStack newStack = stack.copy(); newStack.decrement(1); - if (((DispenserBlockEntity)pointer.getBlockEntity()).addToFirstFreeSlot(emptyBucketStack.copy()) < 0) { + if (pointer.blockEntity().addToFirstFreeSlot(emptyBucketStack.copy()) < 0) { fallbackBehavior.dispense(pointer, emptyBucketStack.copy()); } return newStack; diff --git a/src/main/java/io/github/Andrew6rant/stacker/mixin/ItemRenderScaleMixin.java b/src/main/java/io/github/Andrew6rant/stacker/mixin/ItemRenderScaleMixin.java index 19261e5..59dd91e 100644 --- a/src/main/java/io/github/Andrew6rant/stacker/mixin/ItemRenderScaleMixin.java +++ b/src/main/java/io/github/Andrew6rant/stacker/mixin/ItemRenderScaleMixin.java @@ -1,22 +1,18 @@ package io.github.Andrew6rant.stacker.mixin; import io.github.Andrew6rant.stacker.Stacker; -import io.github.Andrew6rant.stacker.StackerConfig; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.minecraft.item.Item; -import org.apache.commons.lang3.Validate; import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.ModifyVariable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Environment(EnvType.CLIENT) @Pseudo @Mixin(targets = "net.devtech.stacc.ItemCountRenderHandler") public class ItemRenderScaleMixin { - @Inject(method = "scale", at = @At("RETURN"), cancellable = true) + @Inject(method = "scale", at = @At("RETURN"), cancellable = true, remap = false) private void forceScale(CallbackInfoReturnable cir) { float intToFloat = (float) (Stacker.getStacker().getStackerConfig().itemCountScaleInt+50)/100; if (Stacker.getStacker().getStackerConfig().fontOverride) { diff --git a/src/main/java/io/github/Andrew6rant/stacker/mixin/ItemStackMixin.java b/src/main/java/io/github/Andrew6rant/stacker/mixin/ItemStackMixin.java index 21ffea2..b860c0e 100644 --- a/src/main/java/io/github/Andrew6rant/stacker/mixin/ItemStackMixin.java +++ b/src/main/java/io/github/Andrew6rant/stacker/mixin/ItemStackMixin.java @@ -1,11 +1,7 @@ package io.github.Andrew6rant.stacker.mixin; -import io.github.Andrew6rant.stacker.Stacker; -import io.github.Andrew6rant.stacker.StackerConfig; import net.minecraft.item.Item; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.*; @Mixin(Item.Settings.class) diff --git a/src/main/java/io/github/Andrew6rant/stacker/mixin/LimitFurnaceStackMixin.java b/src/main/java/io/github/Andrew6rant/stacker/mixin/LimitFurnaceStackMixin.java index 54d3773..020fda7 100644 --- a/src/main/java/io/github/Andrew6rant/stacker/mixin/LimitFurnaceStackMixin.java +++ b/src/main/java/io/github/Andrew6rant/stacker/mixin/LimitFurnaceStackMixin.java @@ -1,13 +1,12 @@ package io.github.Andrew6rant.stacker.mixin; + import net.minecraft.inventory.Inventory; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; -import net.minecraft.screen.AbstractFurnaceScreenHandler; import net.minecraft.screen.slot.FurnaceFuelSlot; import net.minecraft.screen.slot.Slot; import org.spongepowered.asm.mixin.Mixin; - -import net.fabricmc.loader.api.FabricLoader; +import org.spongepowered.asm.mixin.Unique; @Mixin(FurnaceFuelSlot.class) public abstract class LimitFurnaceStackMixin extends Slot { @@ -24,6 +23,8 @@ public boolean canInsert(ItemStack stack) { // I know this is a kinda gross over public int getMaxItemCount(ItemStack stack) { return isBucket(stack) ? 1 : super.getMaxItemCount(stack); } + + @Unique public boolean isBucket(ItemStack stack) { return stack.isOf(Items.BUCKET) || stack.isOf(Items.LAVA_BUCKET); } diff --git a/src/main/java/io/github/Andrew6rant/stacker/mixin/JukeboxBlockMixin.java b/src/main/java/io/github/Andrew6rant/stacker/mixin/MusicDiscItemMixin.java similarity index 55% rename from src/main/java/io/github/Andrew6rant/stacker/mixin/JukeboxBlockMixin.java rename to src/main/java/io/github/Andrew6rant/stacker/mixin/MusicDiscItemMixin.java index d5e92c8..40dd19f 100644 --- a/src/main/java/io/github/Andrew6rant/stacker/mixin/JukeboxBlockMixin.java +++ b/src/main/java/io/github/Andrew6rant/stacker/mixin/MusicDiscItemMixin.java @@ -1,19 +1,18 @@ package io.github.Andrew6rant.stacker.mixin; -import net.minecraft.block.JukeboxBlock; import net.minecraft.block.entity.JukeboxBlockEntity; import net.minecraft.item.ItemStack; +import net.minecraft.item.MusicDiscItem; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(JukeboxBlock.class) -public class JukeboxBlockMixin { - // Credit to ZoeyTheEgoist for this mixin - @Redirect(method = "setRecord", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/entity/JukeboxBlockEntity;setRecord(Lnet/minecraft/item/ItemStack;)V")) +@Mixin(MusicDiscItem.class) +public class MusicDiscItemMixin { + @Redirect(method = "useOnBlock", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/entity/JukeboxBlockEntity;setStack(Lnet/minecraft/item/ItemStack;)V")) public void setCountToOne(JukeboxBlockEntity jukeboxBlockEntity, ItemStack stack) { ItemStack newStack = stack.copy(); newStack.setCount(1); - jukeboxBlockEntity.setRecord(newStack); + jukeboxBlockEntity.setStack(newStack); } -} \ No newline at end of file +} diff --git a/src/main/java/io/github/Andrew6rant/stacker/util/ItemsHelper.java b/src/main/java/io/github/Andrew6rant/stacker/util/ItemsHelper.java index daa5436..2ac7738 100644 --- a/src/main/java/io/github/Andrew6rant/stacker/util/ItemsHelper.java +++ b/src/main/java/io/github/Andrew6rant/stacker/util/ItemsHelper.java @@ -1,7 +1,7 @@ package io.github.Andrew6rant.stacker.util; + import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; -import net.minecraft.util.Hand; public class ItemsHelper { diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index b54b8f3..b0fcff3 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -4,7 +4,7 @@ "version": "${version}", "name": "Stacker", - "description": "Change the stack size of all items!", + "description": "Change the stack size of all items! (1.20.2 Port by Fesuoy)", "authors": [ "Andrew6rant (Andrew Grant)" ], @@ -31,13 +31,13 @@ ], "depends": { - "fabricloader": ">=0.11.3", + "fabricloader": ">=0.14.8", "fabric": "*", "minecraft": [ - "1.18.2" + "1.20.2" ], "java": ">=17", - "cloth-config2": ">=5.0.34" + "cloth-config2": ">=12.0.0" }, "custom": { "modmenu": [ diff --git a/src/main/resources/stacker.mixins.json b/src/main/resources/stacker.mixins.json index 012993f..ac104b8 100644 --- a/src/main/resources/stacker.mixins.json +++ b/src/main/resources/stacker.mixins.json @@ -11,9 +11,9 @@ "HorseScreenHandlerMixin", "ItemAccess", "ItemStackMixin", - "JukeboxBlockMixin", "LimitFurnaceStackMixin", "MilkBucketItemMixin", + "MusicDiscItemMixin", "StewItemMixin" ], "client": [