diff --git a/Extra/build.gradle.kts b/Extra/build.gradle.kts new file mode 100644 index 00000000..cc9aa0a5 --- /dev/null +++ b/Extra/build.gradle.kts @@ -0,0 +1,134 @@ +plugins { + id("fabric-loom") + kotlin("jvm") +} + +evaluationDependsOn(":OptiGUI") +evaluationDependsOn(":Api") +evaluationDependsOn(":Properties") + +base { archivesName.set(project.extra["archives_base_name"] as String) } + +version = project.extra["mod_version"] as String +group = project.extra["maven_group"] as String + +repositories { + mavenLocal() + exclusiveContent { + forRepository { + maven("https://api.modrinth.com/maven") { name = "Modrinth" } + } + filter { + includeGroup("maven.modrinth") + } + } + maven("https://cursemaven.com") { + name = "CurseForge" + content { + includeGroup("curse.maven") + } + } +} + +val extractNestedJars by configurations.creating +val nestedJarsDir = buildDir.resolve("nestedJars") + +dependencies { + minecraft("com.mojang", "minecraft", project.extra["minecraft_version"] as String) + mappings("net.fabricmc", "yarn", project.extra["yarn_mappings"] as String, classifier = "v2") + modImplementation("net.fabricmc", "fabric-loader", project.extra["loader_version"] as String) + modImplementation( + "net.fabricmc", "fabric-language-kotlin", project.extra["fabric_language_kotlin_version"] as String + ) + + modImplementation(fabricApi.module("fabric-events-interaction-v0", project.extra["fabric_version"] as String)) + modLocalRuntime("net.fabricmc.fabric-api", "fabric-api", project.extra["fabric_version"] as String) + + modImplementation(files(rootDir.resolve("lib/lilac-api-1.0.0-alpha.1-dev.jar"))) + modLocalRuntime(files(rootDir.resolve("lib/lilac-1.0.0-alpha.1-dev.jar"))) + + localRuntime(project(":OptiGUI", configuration = "namedElements")) + implementation(project(":Api", configuration = "namedElements")) + implementation(project(":Properties", configuration = "namedElements")) + + extractNestedJars(modImplementation("maven.modrinth", "quickshulker", "1.4.0-1.20")) + modImplementation("maven.modrinth", "more-chest-variants-lieonlion", "1.2.1-1.20.1-Fabric") + modLocalRuntime("curse.maven", "variant-barrels-fabric-576766", "4623658") + modLocalRuntime("curse.maven", "variant-crafting-tables-fabric-575271", "4723634") + extractNestedJars(modLocalRuntime("curse.maven", "variant-vanilla-blocks-866509", "4723107")) + + // Gradle has skill issue and doesn't pull transitive deps. + // But it pulls a newer version of DFU through mavenLocal, which crashes Minecraft. + // Just as the founding fathers intended. + localRuntime("org.apache.commons", "commons-text", "1.10.0") + localRuntime("org.ini4j", "ini4j", "0.5.4") + + modLocalRuntime(fileTree(nestedJarsDir)) +} + +tasks { + val javaVersion = JavaVersion.toVersion((project.extra["java_version"] as String).toInt()) + + withType { + options.encoding = "UTF-8" + sourceCompatibility = javaVersion.toString() + targetCompatibility = javaVersion.toString() + options.release.set(javaVersion.toString().toInt()) + } + + withType { + kotlinOptions { + jvmTarget = javaVersion.toString() + } + } + + jar { + from(rootDir.resolve("LICENSE")) { + rename { "${it}_${base.archivesName.get()}" } + } + } + + processResources { + filesMatching("fabric.mod.json") { + expand( + mutableMapOf( + "version" to version, + "fabricloader" to project.extra["loader_version"] as String, + "fabric_language_kotlin" to project.extra["fabric_language_kotlin_version"] as String, + "java" to project.extra["java_version"] as String + ) + ) + } + filesMatching("*.mixins.json") { + expand(mutableMapOf("java" to project.extra["java_version"] as String)) + } + } + + java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(javaVersion.toString())) + } + sourceCompatibility = javaVersion + targetCompatibility = javaVersion + withSourcesJar() + } +} + +val prepareClientRun by tasks.creating { + nestedJarsDir.mkdirs() + outputs.dir(nestedJarsDir) + + doLast { + val jars = extractNestedJars.files + + jars.forEach { jar -> + zipTree(jar).visit { + if (path.startsWith("META-INF/jars/")) { + copyTo(nestedJarsDir.resolve(name)) + } + } + } + } +} + +tasks["generateRemapClasspath"].dependsOn(prepareClientRun) diff --git a/Extra/gradle.properties b/Extra/gradle.properties new file mode 100644 index 00000000..a4c9447d --- /dev/null +++ b/Extra/gradle.properties @@ -0,0 +1,11 @@ +########################################################################## +# Standard Fabric Dependencies +# Check these on https://fabricmc.net/develop/ +minecraft_version=1.20.1 +yarn_mappings=1.20.1+build.1 +# Fabric API +fabric_version=0.87.0+1.20.1 +########################################################################## +# Mod Properties +archives_base_name=optigui-extra +########################################################################## diff --git a/Extra/src/main/java/opekope2/optigui/extra/Util.java b/Extra/src/main/java/opekope2/optigui/extra/Util.java new file mode 100644 index 00000000..e5759101 --- /dev/null +++ b/Extra/src/main/java/opekope2/optigui/extra/Util.java @@ -0,0 +1,16 @@ +package opekope2.optigui.extra; + +import java.util.HashMap; +import java.util.Map; +import java.util.function.Consumer; + +public class Util { + private Util() { + } + + public static Map buildMap(Consumer> mapFiller) { + Map map = new HashMap<>(); + mapFiller.accept(map); + return map; + } +} diff --git a/Extra/src/main/java/opekope2/optigui/extra/quickshulker/QuickShulkerCompat.java b/Extra/src/main/java/opekope2/optigui/extra/quickshulker/QuickShulkerCompat.java new file mode 100644 index 00000000..288afa54 --- /dev/null +++ b/Extra/src/main/java/opekope2/optigui/extra/quickshulker/QuickShulkerCompat.java @@ -0,0 +1,89 @@ +package opekope2.optigui.extra.quickshulker; + +import net.fabricmc.api.ClientModInitializer; +import net.fabricmc.fabric.api.event.player.UseItemCallback; +import net.fabricmc.loader.api.FabricLoader; +import net.kyrptonaught.quickshulker.QuickShulkerMod; +import net.kyrptonaught.quickshulker.api.Util; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.registry.Registries; +import net.minecraft.util.Hand; +import net.minecraft.util.Identifier; +import net.minecraft.util.TypedActionResult; +import net.minecraft.world.World; +import opekope2.lilac.api.registry.IRegistryLookup; +import opekope2.optigui.api.IOptiGuiApi; +import opekope2.optigui.api.interaction.IInteractionTarget; +import opekope2.optigui.api.interaction.IInteractor; +import opekope2.optigui.properties.impl.CommonProperties; +import opekope2.optigui.properties.impl.GeneralProperties; +import opekope2.optigui.properties.impl.IndependentProperties; + +import java.time.LocalDate; +import java.util.function.Consumer; + +public class QuickShulkerCompat implements ClientModInitializer, UseItemCallback { + private static final IInteractor interactor = IOptiGuiApi.getImplementation().getInteractor(); + private static final IRegistryLookup lookup = IRegistryLookup.getInstance(); + private static Consumer screenChangeHandler = QuickShulkerCompat::dummyScreenConsumer; + + @Override + public void onInitializeClient() { + if (!FabricLoader.getInstance().isModLoaded("quickshulker")) return; + + UseItemCallback.EVENT.register(this); + } + + @Override + public TypedActionResult interact(PlayerEntity player, World world, Hand hand) { + ItemStack stack = player.getStackInHand(hand); + if (world.isClient) { + if (QuickShulkerMod.getConfig().rightClickToOpen && Util.isOpenableItem(stack) && Util.canOpenInHand(stack)) { + triggerInteraction(player, world, hand, stack); + } + } + + return TypedActionResult.pass(stack); + } + + public static void waitForScreen(Consumer handler) { + screenChangeHandler = handler; + } + + public static void onScreenChanged(Screen screen) { + screenChangeHandler.accept(screen); + screenChangeHandler = QuickShulkerCompat::dummyScreenConsumer; + } + + private static void dummyScreenConsumer(Screen screen) { + } + + public static void triggerInteraction(PlayerEntity player, World world, Hand hand, ItemStack stack) { + interactor.interact( + player, + world, + hand, + new IInteractionTarget.ComputedTarget(getInteractionTargetData(player, world, stack)), + null + ); + } + + private static Object getInteractionTargetData(PlayerEntity player, World world, ItemStack stack) { + Identifier biome = lookup.lookupBiomeId(world, player.getBlockPos()); + String name = stack.hasCustomName() ? stack.getName().getString() : null; + + return new CommonProperties( + new GeneralProperties( + Registries.ITEM.getId(stack.getItem()), + name, + biome, + player.getBlockY() + ), + new IndependentProperties( + LocalDate.now() + ) + ); + } +} diff --git a/Extra/src/main/java/opekope2/optigui/extra/quickshulker/mixin/ClientUtilMixin.java b/Extra/src/main/java/opekope2/optigui/extra/quickshulker/mixin/ClientUtilMixin.java new file mode 100644 index 00000000..a482644b --- /dev/null +++ b/Extra/src/main/java/opekope2/optigui/extra/quickshulker/mixin/ClientUtilMixin.java @@ -0,0 +1,71 @@ +package opekope2.optigui.extra.quickshulker.mixin; + +import net.kyrptonaught.quickshulker.client.ClientUtil; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.screen.ingame.*; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Hand; +import net.minecraft.util.Identifier; +import opekope2.lilac.api.registry.IRegistryLookup; +import opekope2.optigui.extra.Util; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import java.util.Map; +import java.util.Objects; + +import static opekope2.optigui.extra.quickshulker.QuickShulkerCompat.triggerInteraction; +import static opekope2.optigui.extra.quickshulker.QuickShulkerCompat.waitForScreen; + +@Mixin(ClientUtil.class) +public abstract class ClientUtilMixin { + @Unique + private static final MinecraftClient mc = MinecraftClient.getInstance(); + @Unique + private static final IRegistryLookup lookup = IRegistryLookup.getInstance(); + + @Unique + private static final Map>> containerScreenMapping = Util.buildMap(map -> { + map.put(new Identifier("shulker_box"), ShulkerBoxScreen.class); + map.put(new Identifier("white_shulker_box"), ShulkerBoxScreen.class); + map.put(new Identifier("orange_shulker_box"), ShulkerBoxScreen.class); + map.put(new Identifier("magenta_shulker_box"), ShulkerBoxScreen.class); + map.put(new Identifier("light_blue_shulker_box"), ShulkerBoxScreen.class); + map.put(new Identifier("yellow_shulker_box"), ShulkerBoxScreen.class); + map.put(new Identifier("lime_shulker_box"), ShulkerBoxScreen.class); + map.put(new Identifier("pink_shulker_box"), ShulkerBoxScreen.class); + map.put(new Identifier("gray_shulker_box"), ShulkerBoxScreen.class); + map.put(new Identifier("light_gray_shulker_box"), ShulkerBoxScreen.class); + map.put(new Identifier("cyan_shulker_box"), ShulkerBoxScreen.class); + map.put(new Identifier("purple_shulker_box"), ShulkerBoxScreen.class); + map.put(new Identifier("blue_shulker_box"), ShulkerBoxScreen.class); + map.put(new Identifier("brown_shulker_box"), ShulkerBoxScreen.class); + map.put(new Identifier("green_shulker_box"), ShulkerBoxScreen.class); + map.put(new Identifier("red_shulker_box"), ShulkerBoxScreen.class); + map.put(new Identifier("black_shulker_box"), ShulkerBoxScreen.class); + map.put(new Identifier("ender_chest"), GenericContainerScreen.class); + map.put(new Identifier("crafting_table"), CraftingScreen.class); + map.put(new Identifier("stonecutter"), StonecutterScreen.class); + map.put(new Identifier("smithing_table"), SmithingScreen.class); + }); + + @Inject( + method = "CheckAndSend", + at = @At(value = "INVOKE", target = "Lnet/kyrptonaught/quickshulker/client/ClientUtil;SendOpenPacket(I)V") + ) + private static void handlePacketSendFromOffHand(ItemStack stack, int slot, CallbackInfoReturnable cir) { + var player = Objects.requireNonNull(mc.player); + var world = Objects.requireNonNull(mc.world); + var screenClass = containerScreenMapping.get(lookup.lookupItemId(stack.getItem())); + if (screenClass == null) return; + + waitForScreen(screen -> { + if (screenClass.equals(screen.getClass())) { + triggerInteraction(player, world, stack == mc.player.getOffHandStack() ? Hand.OFF_HAND : Hand.MAIN_HAND, stack); + } + }); + } +} diff --git a/Extra/src/main/java/opekope2/optigui/extra/quickshulker/mixin/MinecraftClientMixin.java b/Extra/src/main/java/opekope2/optigui/extra/quickshulker/mixin/MinecraftClientMixin.java new file mode 100644 index 00000000..07ef2e40 --- /dev/null +++ b/Extra/src/main/java/opekope2/optigui/extra/quickshulker/mixin/MinecraftClientMixin.java @@ -0,0 +1,19 @@ +package opekope2.optigui.extra.quickshulker.mixin; + +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.screen.Screen; +import opekope2.optigui.extra.quickshulker.QuickShulkerCompat; +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(value = MinecraftClient.class, priority = 925) +abstract class MinecraftClientMixin { + @Inject(method = "setScreen(Lnet/minecraft/client/gui/screen/Screen;)V", at = @At("TAIL")) + private void setScreenMixin(Screen screen, CallbackInfo ci) { + if (screen != null) { + QuickShulkerCompat.onScreenChanged(screen); + } + } +} diff --git a/Extra/src/main/kotlin/opekope2/optigui/extra/more_chest_variants/McvCompat.kt b/Extra/src/main/kotlin/opekope2/optigui/extra/more_chest_variants/McvCompat.kt new file mode 100644 index 00000000..4f105512 --- /dev/null +++ b/Extra/src/main/kotlin/opekope2/optigui/extra/more_chest_variants/McvCompat.kt @@ -0,0 +1,46 @@ +package opekope2.optigui.extra.more_chest_variants + +import io.github.lieonlion.mcv.block.MoreChestBlockEntity +import net.minecraft.block.enums.ChestType +import net.minecraft.client.MinecraftClient +import net.minecraft.client.gui.screen.ingame.HandledScreen +import net.minecraft.screen.GenericContainerScreenHandler +import net.minecraft.screen.ScreenHandler +import net.minecraft.state.property.EnumProperty +import opekope2.lilac.api.registry.IRegistryLookup +import opekope2.optigui.annotation.BlockEntityProcessor +import opekope2.optigui.api.interaction.IBlockEntityProcessor +import opekope2.optigui.properties.impl.* +import java.time.LocalDate + +@BlockEntityProcessor(MoreChestBlockEntity::class) +object McvCompat : IBlockEntityProcessor { + private val lookup = IRegistryLookup.getInstance() + private val chestTypeEnum = EnumProperty.of("type", ChestType::class.java) + + override fun apply(chest: MoreChestBlockEntity): Any? { + val world = chest.world ?: return null + val state = world.getBlockState(chest.pos) + val type = state.entries[chestTypeEnum] + val screen = MinecraftClient.getInstance().currentScreen + val screenHandler = (screen as? HandledScreen<*>)?.screenHandler as? GenericContainerScreenHandler + + return ChestProperties( + commonProperties = CommonProperties( + generalProperties = GeneralProperties( + container = lookup.lookupBlockId(state.block), + name = chest.customName?.string, + biome = lookup.lookupBiomeId(world, chest.pos), + height = chest.pos.y + ), + independentProperties = IndependentProperties( + date = LocalDate.now() + ) + ), + redstoneComparatorProperties = RedstoneComparatorProperties( + comparatorOutput = ScreenHandler.calculateComparatorOutput(screenHandler?.inventory) + ), + isLarge = type != ChestType.SINGLE + ) + } +} diff --git a/Extra/src/main/resources/assets/optigui-extra/icon.png b/Extra/src/main/resources/assets/optigui-extra/icon.png new file mode 100644 index 00000000..45717d26 Binary files /dev/null and b/Extra/src/main/resources/assets/optigui-extra/icon.png differ diff --git a/Extra/src/main/resources/fabric.mod.json b/Extra/src/main/resources/fabric.mod.json new file mode 100644 index 00000000..bac6beff --- /dev/null +++ b/Extra/src/main/resources/fabric.mod.json @@ -0,0 +1,202 @@ +{ + "schemaVersion": 1, + "id": "optigui-extra", + "version": "${version}", + "name": "OptiGUI Extra", + "description": "OptiGUI Compatibility mod for other mods", + "authors": [ + "opekope2" + ], + "contact": { + "homepage": "https://opekope2.github.io/OptiGUI", + "sources": "https://github.com/opekope2/OptiGUI", + "issues": "https://github.com/opekope2/OptiGUI/issues" + }, + "license": "MIT", + "icon": "assets/optigui-extra/icon.png", + "environment": "client", + "entrypoints": { + "client": [ + "opekope2.optigui.extra.quickshulker.QuickShulkerCompat" + ], + "optigui-blockentityprocessor": [ + { + "adapter": "kotlin", + "value": "opekope2.optigui.extra.more_chest_variants.McvCompat" + } + ] + }, + "mixins": [ + "optigui-extra.quickshulker.mixins.json" + ], + "depends": { + "fabricloader": ">=${fabricloader}", + "fabric-events-interaction-v0": "*", + "fabric-language-kotlin": ">=${fabric_language_kotlin}", + "minecraft": ">=1.18 <=1.20.1", + "java": ">=${java}", + "lilac": ">=1.0.0-alpha.1 <1.1.0", + "optigui": "=${version}" + }, + "suggests": { + "lolmcv": "*", + "quickshulker": "*", + "variantbarrels": "*", + "variantcraftingtables": "*", + "variantvanillablocks": "*" + }, + "custom": { + "optigui": { + "containerTextures": { + "lolmcv:acacia_chest": "minecraft:textures/gui/container/generic_54.png", + "lolmcv:bamboo_chest": "minecraft:textures/gui/container/generic_54.png", + "lolmcv:birch_chest": "minecraft:textures/gui/container/generic_54.png", + "lolmcv:cherry_chest": "minecraft:textures/gui/container/generic_54.png", + "lolmcv:dark_oak_chest": "minecraft:textures/gui/container/generic_54.png", + "lolmcv:jungle_chest": "minecraft:textures/gui/container/generic_54.png", + "lolmcv:mangrove_chest": "minecraft:textures/gui/container/generic_54.png", + "lolmcv:spruce_chest": "minecraft:textures/gui/container/generic_54.png", + "lolmcv:crimson_chest": "minecraft:textures/gui/container/generic_54.png", + "lolmcv:warped_chest": "minecraft:textures/gui/container/generic_54.png", + "variantbarrels:acacia_barrel": "minecraft:textures/gui/container/generic_54.png", + "variantbarrels:bamboo_barrel": "minecraft:textures/gui/container/generic_54.png", + "variantbarrels:birch_barrel": "minecraft:textures/gui/container/generic_54.png", + "variantbarrels:cherry_barrel": "minecraft:textures/gui/container/generic_54.png", + "variantbarrels:crimson_barrel": "minecraft:textures/gui/container/generic_54.png", + "variantbarrels:dark_oak_barrel": "minecraft:textures/gui/container/generic_54.png", + "variantbarrels:jungle_barrel": "minecraft:textures/gui/container/generic_54.png", + "variantbarrels:mangrove_barrel": "minecraft:textures/gui/container/generic_54.png", + "variantbarrels:oak_barrel": "minecraft:textures/gui/container/generic_54.png", + "variantbarrels:warped_barrel": "minecraft:textures/gui/container/generic_54.png", + "variantcraftingtables:acacia_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:bamboo_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:birch_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:cherry_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:crimson_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:dark_oak_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:jungle_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:mangrove_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:spruce_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:warped_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:aa_aeronos_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:aa_glacian_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:ldbp_palm_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:ba_rotten_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:bw_cypress_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:bw_dragons_blood_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:bw_elder_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:bw_juniper_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:dad_echo_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:prom_dark_amaranth_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:prom_maple_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:prom_palm_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:prom_sakura_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:ru_alpha_oak_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:ru_baobab_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:ru_black_painted_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:ru_blackwood_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:ru_blue_painted_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:ru_brown_painted_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:ru_cherry_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:ru_cyan_painted_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:ru_cypress_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:ru_dead_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:ru_eucalyptus_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:ru_green_painted_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:ru_gray_painted_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:ru_joshua_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:ru_larch_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:ru_light_blue_painted_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:ru_light_gray_painted_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:ru_lime_painted_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:ru_magenta_painted_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:ru_maple_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:ru_mauve_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:ru_orange_painted_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:ru_palm_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:ru_pine_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:ru_pink_painted_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:ru_purple_painted_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:ru_red_painted_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:ru_redwood_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:ru_sculkwood_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:ru_white_painted_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:ru_willow_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:ru_yellow_painted_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:sp_stone_pine_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:tr_rubber_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantcraftingtables:ldv_cherry_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantvanillablocks:acacia_barrel": "minecraft:textures/gui/container/generic_54.png", + "variantvanillablocks:bamboo_barrel": "minecraft:textures/gui/container/generic_54.png", + "variantvanillablocks:birch_barrel": "minecraft:textures/gui/container/generic_54.png", + "variantvanillablocks:cherry_barrel": "minecraft:textures/gui/container/generic_54.png", + "variantvanillablocks:crimson_barrel": "minecraft:textures/gui/container/generic_54.png", + "variantvanillablocks:dark_oak_barrel": "minecraft:textures/gui/container/generic_54.png", + "variantvanillablocks:jungle_barrel": "minecraft:textures/gui/container/generic_54.png", + "variantvanillablocks:mangrove_barrel": "minecraft:textures/gui/container/generic_54.png", + "variantvanillablocks:oak_barrel": "minecraft:textures/gui/container/generic_54.png", + "variantvanillablocks:warped_barrel": "minecraft:textures/gui/container/generic_54.png", + "variantvanillablocks:acacia_cartography_table": "minecraft:textures/gui/container/cartography_table.png", + "variantvanillablocks:bamboo_cartography_table": "minecraft:textures/gui/container/cartography_table.png", + "variantvanillablocks:birch_cartography_table": "minecraft:textures/gui/container/cartography_table.png", + "variantvanillablocks:cherry_cartography_table": "minecraft:textures/gui/container/cartography_table.png", + "variantvanillablocks:crimson_cartography_table": "minecraft:textures/gui/container/cartography_table.png", + "variantvanillablocks:jungle_cartography_table": "minecraft:textures/gui/container/cartography_table.png", + "variantvanillablocks:mangrove_cartography_table": "minecraft:textures/gui/container/cartography_table.png", + "variantvanillablocks:oak_cartography_table": "minecraft:textures/gui/container/cartography_table.png", + "variantvanillablocks:spruce_cartography_table": "minecraft:textures/gui/container/cartography_table.png", + "variantvanillablocks:warped_cartography_table": "minecraft:textures/gui/container/cartography_table.png", + "variantvanillablocks:acacia_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantvanillablocks:bamboo_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantvanillablocks:birch_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantvanillablocks:cherry_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantvanillablocks:crimson_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantvanillablocks:dark_oak_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantvanillablocks:jungle_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantvanillablocks:mangrove_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantvanillablocks:spruce_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantvanillablocks:warped_crafting_table": "minecraft:textures/gui/container/crafting_table.png", + "variantvanillablocks:acacia_grindstone": "minecraft:textures/gui/container/grindstone.png", + "variantvanillablocks:bamboo_grindstone": "minecraft:textures/gui/container/grindstone.png", + "variantvanillablocks:birch_grindstone": "minecraft:textures/gui/container/grindstone.png", + "variantvanillablocks:cherry_grindstone": "minecraft:textures/gui/container/grindstone.png", + "variantvanillablocks:crimson_grindstone": "minecraft:textures/gui/container/grindstone.png", + "variantvanillablocks:jungle_grindstone": "minecraft:textures/gui/container/grindstone.png", + "variantvanillablocks:mangrove_grindstone": "minecraft:textures/gui/container/grindstone.png", + "variantvanillablocks:oak_grindstone": "minecraft:textures/gui/container/grindstone.png", + "variantvanillablocks:spruce_grindstone": "minecraft:textures/gui/container/grindstone.png", + "variantvanillablocks:warped_grindstone": "minecraft:textures/gui/container/grindstone.png", + "variantvanillablocks:acacia_lectern": "minecraft:textures/gui/book.png", + "variantvanillablocks:bamboo_lectern": "minecraft:textures/gui/book.png", + "variantvanillablocks:birch_lectern": "minecraft:textures/gui/book.png", + "variantvanillablocks:cherry_lectern": "minecraft:textures/gui/book.png", + "variantvanillablocks:dark_oak_lectern": "minecraft:textures/gui/book.png", + "variantvanillablocks:crimson_lectern": "minecraft:textures/gui/book.png", + "variantvanillablocks:jungle_lectern": "minecraft:textures/gui/book.png", + "variantvanillablocks:mangrove_lectern": "minecraft:textures/gui/book.png", + "variantvanillablocks:spruce_lectern": "minecraft:textures/gui/book.png", + "variantvanillablocks:warped_lectern": "minecraft:textures/gui/book.png", + "variantvanillablocks:acacia_smithing_table": "minecraft:textures/gui/container/smithing.png", + "variantvanillablocks:bamboo_smithing_table": "minecraft:textures/gui/container/smithing.png", + "variantvanillablocks:birch_smithing_table": "minecraft:textures/gui/container/smithing.png", + "variantvanillablocks:cherry_smithing_table": "minecraft:textures/gui/container/smithing.png", + "variantvanillablocks:crimson_smithing_table": "minecraft:textures/gui/container/smithing.png", + "variantvanillablocks:dark_oak_smithing_table": "minecraft:textures/gui/container/smithing.png", + "variantvanillablocks:jungle_smithing_table": "minecraft:textures/gui/container/smithing.png", + "variantvanillablocks:oak_smithing_table": "minecraft:textures/gui/container/smithing.png", + "variantvanillablocks:spruce_smithing_table": "minecraft:textures/gui/container/smithing.png", + "variantvanillablocks:warped_smithing_table": "minecraft:textures/gui/container/smithing.png", + "variantvanillablocks:acacia_smoker": "minecraft:textures/gui/container/smoker.png", + "variantvanillablocks:bamboo_smoker": "minecraft:textures/gui/container/smoker.png", + "variantvanillablocks:birch_smoker": "minecraft:textures/gui/container/smoker.png", + "variantvanillablocks:cherry_smoker": "minecraft:textures/gui/container/smoker.png", + "variantvanillablocks:crimson_smoker": "minecraft:textures/gui/container/smoker.png", + "variantvanillablocks:dark_oak_smoker": "minecraft:textures/gui/container/smoker.png", + "variantvanillablocks:jungle_smoker": "minecraft:textures/gui/container/smoker.png", + "variantvanillablocks:mangrove_smoker": "minecraft:textures/gui/container/smoker.png", + "variantvanillablocks:spruce_smoker": "minecraft:textures/gui/container/smoker.png", + "variantvanillablocks:warped_smoker": "minecraft:textures/gui/container/smoker.png" + } + } + } +} diff --git a/Extra/src/main/resources/optigui-extra.quickshulker.mixins.json b/Extra/src/main/resources/optigui-extra.quickshulker.mixins.json new file mode 100644 index 00000000..ee474314 --- /dev/null +++ b/Extra/src/main/resources/optigui-extra.quickshulker.mixins.json @@ -0,0 +1,12 @@ +{ + "required": true, + "package": "opekope2.optigui.extra.quickshulker.mixin", + "compatibilityLevel": "JAVA_${java}", + "injectors": { + "defaultRequire": 1 + }, + "client": [ + "ClientUtilMixin", + "MinecraftClientMixin" + ] +} diff --git a/settings.gradle.kts b/settings.gradle.kts index a7d45baa..3e324277 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -14,6 +14,7 @@ pluginManagement { include( "OptiGUI", "Api", + "Extra", "Filters", "Properties", )