Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 20 additions & 10 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
4 changes: 2 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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/[email protected]
with:
curseforge-id: 515415
Expand All @@ -30,4 +30,4 @@ jobs:
version-type: release
loaders: |
fabric
quilt
quilt
30 changes: 23 additions & 7 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -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.+"
}
Expand All @@ -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.
Expand All @@ -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
}
Expand Down
17 changes: 10 additions & 7 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -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
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -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
18 changes: 8 additions & 10 deletions src/main/java/io/github/Andrew6rant/stacker/Stacker.java
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand All @@ -40,13 +38,13 @@ public void onInitialize() {
public static void loadStacker(String configMsg) {
LOGGER.info("Stacker: Attempting to "+configMsg+" config...");
Set<String> 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) {
Expand Down Expand Up @@ -86,17 +84,17 @@ public static Integer overrideItem(Item item, List<String> overrideList, Set<Str
if (overrideEntry.startsWith("#")) {
String[] splitEntry = overrideEntry.trim().substring(1).split(":"); // split into three parts: tag id, item name, max count
if (isValid(overrideEntry, splitEntry, invalidSet)) {
List<TagKey<Item>> itemStream = item.getRegistryEntry().streamTags().collect(Collectors.toList());
List<TagKey<Item>> itemStream = item.getRegistryEntry().streamTags().toList();
for (TagKey<Item> 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]);
}
}
}
} else {
String[] splitEntry = overrideEntry.trim().split(":"); // split into three parts: tag id, item name, max count
if (isValid(overrideEntry, splitEntry, invalidSet)) {
if (Registry.ITEM.getId(item).toString().equalsIgnoreCase(splitEntry[0] + ":" + splitEntry[1])) {
if (Registries.ITEM.getId(item).toString().equalsIgnoreCase(splitEntry[0] + ":" + splitEntry[1])) {
return Integer.parseInt(splitEntry[2]);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import com.terraformersmc.modmenu.api.ConfigScreenFactory;
import com.terraformersmc.modmenu.api.ModMenuApi;
import io.github.Andrew6rant.stacker.StackerConfig;
import me.shedaniel.autoconfig.AutoConfig;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,44 @@
package io.github.Andrew6rant.stacker.mixin;

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.CallbackInfoReturnable;

import io.github.Andrew6rant.stacker.Stacker;
import net.minecraft.item.BundleItem;
import net.minecraft.item.ItemStack;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.Constant;
import org.spongepowered.asm.mixin.injection.ModifyConstant;

/**
* Modifies BundleItem's magic numbers to use Stacker's configured 'maxStacker' value
*/
@Mixin(BundleItem.class)
public class BundleItemMixin {
// The following mixin was backported from Stacc API 1.3.3. Thanks to Devan-Kerman for the code.
@Inject(at = @At("RETURN"), method = "getItemOccupancy", cancellable = true)
private static void getItemOccupancyFix(ItemStack stack, CallbackInfoReturnable<Integer> 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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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 {
Expand All @@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -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<Float> cir) {
float intToFloat = (float) (Stacker.getStacker().getStackerConfig().itemCountScaleInt+50)/100;
if (Stacker.getStacker().getStackerConfig().fontOverride) {
Expand Down
Original file line number Diff line number Diff line change
@@ -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)
Expand Down
Original file line number Diff line number Diff line change
@@ -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 {
Expand All @@ -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);
}
Expand Down
Loading