diff --git a/src/main/java/com/viaversion/viafabricplus/features/FeaturesLoading.java b/src/main/java/com/viaversion/viafabricplus/features/FeaturesLoading.java index d4c06cf2f..6e50cc261 100644 --- a/src/main/java/com/viaversion/viafabricplus/features/FeaturesLoading.java +++ b/src/main/java/com/viaversion/viafabricplus/features/FeaturesLoading.java @@ -24,17 +24,18 @@ import com.viaversion.viaaprilfools.api.AprilFoolsProtocolVersion; import com.viaversion.viafabricplus.ViaFabricPlus; import com.viaversion.viafabricplus.ViaFabricPlusImpl; -import com.viaversion.viafabricplus.features.global.CollisionShapes; -import com.viaversion.viafabricplus.features.global.ClassiCubeAccount; import com.viaversion.viafabricplus.features.c0_30cpe.CPEAdditions; -import com.viaversion.viafabricplus.features.v1_20_5.EnchantmentAttributesEmulation1_20_6; +import com.viaversion.viafabricplus.features.global.ClassiCubeAccount; +import com.viaversion.viafabricplus.features.global.CollisionShapes; import com.viaversion.viafabricplus.features.global.EntityDimensionDiff; import com.viaversion.viafabricplus.features.global.FontCacheReload; -import com.viaversion.viafabricplus.features.v1_12_2.RenderableGlyphDiff; -import com.viaversion.viafabricplus.features.v1_8.ArmorHudEmulation1_8; import com.viaversion.viafabricplus.features.global.ResourcePackHeaderDiff; +import com.viaversion.viafabricplus.features.v1_11_1.FurnaceFuels1_11_2; import com.viaversion.viafabricplus.features.v1_11_1.Recipes1_11_2; import com.viaversion.viafabricplus.features.v1_12_2.FootStepParticle1_12_2; +import com.viaversion.viafabricplus.features.v1_12_2.RenderableGlyphDiff; +import com.viaversion.viafabricplus.features.v1_20_5.EnchantmentAttributesEmulation1_20_6; +import com.viaversion.viafabricplus.features.v1_8.ArmorHudEmulation1_8; import com.viaversion.viafabricplus.util.network.SyncTasks; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import net.minecraft.client.Minecraft; @@ -63,6 +64,7 @@ public static void onPreLoading() { if (newVersion.olderThanOrEqualTo(ProtocolVersion.v1_11_1)) { Recipes1_11_2.reset(); } + FurnaceFuels1_11_2.reset(); EnvironmentAttributes.RESPAWN_ANCHOR_WORKS.isSyncable = newVersion.olderThanOrEqualTo(ProtocolVersion.v1_21_9); })); @@ -79,6 +81,7 @@ public static void onPostGameLoading() { EntityDimensionDiff.init(); EnchantmentAttributesEmulation1_20_6.init(); Recipes1_11_2.init(); + FurnaceFuels1_11_2.init(); ArmorHudEmulation1_8.init(); CPEAdditions.postInit(); } diff --git a/src/main/java/com/viaversion/viafabricplus/features/v1_11_1/FurnaceFuels1_11_2.java b/src/main/java/com/viaversion/viafabricplus/features/v1_11_1/FurnaceFuels1_11_2.java new file mode 100644 index 000000000..751d7b500 --- /dev/null +++ b/src/main/java/com/viaversion/viafabricplus/features/v1_11_1/FurnaceFuels1_11_2.java @@ -0,0 +1,104 @@ +/* + * This file is part of ViaFabricPlus - https://github.com/ViaVersion/ViaFabricPlus + * Copyright (C) 2021-2026 the original authors + * - Florian Reuth + * - RK_01/RaphiMC + * Copyright (C) 2023-2026 ViaVersion and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.viaversion.viafabricplus.features.v1_11_1; + +import com.mojang.datafixers.util.Pair; +import com.viaversion.viafabricplus.ViaFabricPlus; +import com.viaversion.viafabricplus.protocoltranslator.impl.ViaFabricPlusMappingDataLoader; +import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; +import com.viaversion.viaversion.api.protocol.version.ProtocolVersionRange; +import com.viaversion.viaversion.libs.gson.JsonArray; +import com.viaversion.viaversion.libs.gson.JsonElement; +import com.viaversion.viaversion.libs.gson.JsonObject; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.Identifier; +import net.minecraft.tags.TagKey; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import org.jspecify.annotations.Nullable; + +public final class FurnaceFuels1_11_2 { + + private static final List> LEGACY_FUELS = new ArrayList<>(); + private static Set FUELS; + + public static void init() { + if (!LEGACY_FUELS.isEmpty()) { + throw new IllegalStateException("FurnaceFuels1_11_2 is already initialized"); + } + + final JsonArray fuels = ViaFabricPlusMappingDataLoader.INSTANCE.loadData("furnace-fuels-1.11.2.json").getAsJsonArray(""); + for (JsonElement fuelElement : fuels) { + final JsonObject fuel = fuelElement.getAsJsonObject(); + final ProtocolVersionRange versionRange = ProtocolVersionRange.fromString(fuel.get("version").getAsString()); + if (fuel.has("tag")) { + LEGACY_FUELS.add(new Pair<>(new Fuel(null, TagKey.create(Registries.ITEM, Identifier.parse(fuel.get("tag").getAsString()))), versionRange)); + } else { + final Identifier id = Identifier.parse(fuel.get("item").getAsString()); + final Item item = BuiltInRegistries.ITEM.getOptional(id).orElseThrow(() -> new IllegalStateException("Unknown item: " + id)); + LEGACY_FUELS.add(new Pair<>(new Fuel(item, null), versionRange)); + } + } + } + + public static boolean isFuel(final ItemStack itemStack) { + if (FUELS == null) { + FUELS = resolveFuels(ViaFabricPlus.api().targetVersion()); + } + return FUELS.contains(itemStack.getItem()); + } + + public static void reset() { + FUELS = null; + } + + private static Set resolveFuels(final ProtocolVersion version) { + final Set fuels = new HashSet<>(); + for (Pair legacyFuel : LEGACY_FUELS) { + if (!legacyFuel.getSecond().contains(version)) { + continue; + } + + final Fuel fuel = legacyFuel.getFirst(); + if (fuel.item() != null) { + fuels.add(fuel.item()); + } else { + BuiltInRegistries.ITEM.get(fuel.tag()).ifPresent(items -> { + for (Holder item : items) { + fuels.add(item.value()); + } + }); + } + } + return fuels; + } + + private record Fuel(@Nullable Item item, @Nullable TagKey tag) { + } + +} diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/b1_5/MixinChestMenu.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/b1_5/MixinChestMenu.java new file mode 100644 index 000000000..390eca283 --- /dev/null +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/b1_5/MixinChestMenu.java @@ -0,0 +1,47 @@ +/* + * This file is part of ViaFabricPlus - https://github.com/ViaVersion/ViaFabricPlus + * Copyright (C) 2021-2026 the original authors + * - Florian Reuth + * - RK_01/RaphiMC + * Copyright (C) 2023-2026 ViaVersion and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.viaversion.viafabricplus.injection.mixin.features.b1_5; + +import com.viaversion.viafabricplus.ViaFabricPlus; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.ChestMenu; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.item.ItemStack; +import net.raphimc.vialegacy.api.LegacyProtocolVersion; +import org.jspecify.annotations.Nullable; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(ChestMenu.class) +public abstract class MixinChestMenu extends AbstractContainerMenu { + + protected MixinChestMenu(@Nullable final MenuType menuType, final int containerId) { + super(menuType, containerId); + } + + @Redirect(method = "quickMoveStack", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/inventory/ChestMenu;moveItemStackTo(Lnet/minecraft/world/item/ItemStack;IIZ)Z", ordinal = 0)) + private boolean reverseQuickMovePlacementOrder(ChestMenu instance, ItemStack itemStack, int startSlot, int endSlot, boolean backwards) { + return this.moveItemStackTo(itemStack, startSlot, endSlot, ViaFabricPlus.api().targetVersion().newerThan(LegacyProtocolVersion.b1_5tob1_5_2) && backwards); + } + +} diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/v1_6_1/MixinAbstractContainerScreen.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/v1_10/MixinBrewingStandMenu.java similarity index 54% rename from src/main/java/com/viaversion/viafabricplus/injection/mixin/features/v1_6_1/MixinAbstractContainerScreen.java rename to src/main/java/com/viaversion/viafabricplus/injection/mixin/features/v1_10/MixinBrewingStandMenu.java index 7af719768..71592f5fa 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/v1_6_1/MixinAbstractContainerScreen.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/v1_10/MixinBrewingStandMenu.java @@ -19,22 +19,33 @@ * along with this program. If not, see . */ -package com.viaversion.viafabricplus.injection.mixin.features.v1_6_1; +package com.viaversion.viafabricplus.injection.mixin.features.v1_10; import com.viaversion.viafabricplus.ViaFabricPlus; -import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; -import net.minecraft.client.input.MouseButtonEvent; -import net.raphimc.vialegacy.api.LegacyProtocolVersion; +import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; +import net.minecraft.world.inventory.BrewingStandMenu; +import net.minecraft.world.inventory.Slot; +import net.minecraft.world.item.ItemStack; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(AbstractContainerScreen.class) -public abstract class MixinAbstractContainerScreen { +@Mixin(BrewingStandMenu.class) +public abstract class MixinBrewingStandMenu { - @Redirect(method = {"mouseClicked", "mouseReleased"}, at = @At(value = "INVOKE", target = "Lnet/minecraft/client/input/MouseButtonEvent;hasShiftDown()Z")) - private boolean disableShiftClickItems(final MouseButtonEvent instance) { - return instance.hasShiftDown() && ViaFabricPlus.api().targetVersion().newerThanOrEqualTo(LegacyProtocolVersion.r1_6_1); + @Shadow + @Final + private Slot ingredientSlot; + + @Redirect(method = "quickMoveStack", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/inventory/BrewingStandMenu$FuelSlot;mayPlaceItem(Lnet/minecraft/world/item/ItemStack;)Z")) + private boolean disableQuickMoveFuelWhenIngredientEmpty(ItemStack itemStack) { + if (ViaFabricPlus.api().targetVersion().betweenInclusive(ProtocolVersion.v1_9, ProtocolVersion.v1_10)) { + return BrewingStandMenu.FuelSlot.mayPlaceItem(itemStack) && !this.ingredientSlot.getItem().isEmpty(); + } + + return BrewingStandMenu.FuelSlot.mayPlaceItem(itemStack); } } diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/v1_11_1/screen/MixinAbstractFurnaceMenu.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/v1_11_1/screen/MixinAbstractFurnaceMenu.java new file mode 100644 index 000000000..d775dd7f9 --- /dev/null +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/v1_11_1/screen/MixinAbstractFurnaceMenu.java @@ -0,0 +1,61 @@ +/* + * This file is part of ViaFabricPlus - https://github.com/ViaVersion/ViaFabricPlus + * Copyright (C) 2021-2026 the original authors + * - Florian Reuth + * - RK_01/RaphiMC + * Copyright (C) 2023-2026 ViaVersion and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package com.viaversion.viafabricplus.injection.mixin.features.v1_11_1.screen; + +import com.viaversion.viafabricplus.ViaFabricPlus; +import com.viaversion.viafabricplus.features.v1_11_1.FurnaceFuels1_11_2; +import com.viaversion.viafabricplus.features.v1_11_1.Recipes1_11_2; +import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; +import net.minecraft.world.inventory.AbstractFurnaceMenu; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraft.world.item.crafting.SingleRecipeInput; +import net.minecraft.world.level.Level; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(AbstractFurnaceMenu.class) +public abstract class MixinAbstractFurnaceMenu { + + @Final + @Shadow + protected Level level; + + @Inject(method = "canSmelt", at = @At("HEAD"), cancellable = true) + private void fixQuickMoveMaterial(ItemStack itemStack, CallbackInfoReturnable cir) { + if (ViaFabricPlus.api().targetVersion().olderThanOrEqualTo(ProtocolVersion.v1_11_1)) { + cir.setReturnValue(Recipes1_11_2.getRecipeManager(this.level.registryAccess().freeze()).getFirstMatch(RecipeType.SMELTING, new SingleRecipeInput(itemStack), this.level).isPresent()); + } + } + + @Inject(method = "isFuel", at = @At("HEAD"), cancellable = true) + private void fixQuickMoveFuel(ItemStack itemStack, CallbackInfoReturnable cir) { + if (ViaFabricPlus.api().targetVersion().olderThan(ProtocolVersion.v1_14)) { + cir.setReturnValue(FurnaceFuels1_11_2.isFuel(itemStack)); + } + } + +} diff --git a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/v1_15_2/MixinMultiPlayerGameMode.java b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/v1_15_2/MixinMultiPlayerGameMode.java index 815e3f3fb..c48403c3a 100644 --- a/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/v1_15_2/MixinMultiPlayerGameMode.java +++ b/src/main/java/com/viaversion/viafabricplus/injection/mixin/features/v1_15_2/MixinMultiPlayerGameMode.java @@ -29,7 +29,13 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.inventory.AbstractCraftingMenu; +import net.minecraft.world.inventory.BrewingStandMenu; +import net.minecraft.world.inventory.ChestMenu; import net.minecraft.world.inventory.ContainerInput; +import net.minecraft.world.inventory.DispenserMenu; +import net.minecraft.world.inventory.EnchantmentMenu; +import net.minecraft.world.inventory.InventoryMenu; import net.minecraft.world.level.block.Blocks; import net.raphimc.vialegacy.api.LegacyProtocolVersion; import org.spongepowered.asm.mixin.Final; @@ -59,14 +65,45 @@ private boolean checkFireBlock(MultiPlayerGameMode instance, BlockPos pos, @Loca @Inject(method = "handleContainerInput", at = @At("HEAD"), cancellable = true) private void removeClickActions(int containerId, int slotNum, int buttonNum, ContainerInput containerInput, Player player, CallbackInfo ci) { - if (ViaFabricPlus.api().targetVersion().olderThanOrEqualTo(LegacyProtocolVersion.b1_5tob1_5_2) && !containerInput.equals(ContainerInput.PICKUP)) { - ci.cancel(); - } else if (ViaFabricPlus.api().targetVersion().olderThanOrEqualTo(LegacyProtocolVersion.r1_4_6tor1_4_7) && !containerInput.equals(ContainerInput.PICKUP) && !containerInput.equals(ContainerInput.QUICK_MOVE) && !containerInput.equals(ContainerInput.SWAP) && !containerInput.equals(ContainerInput.CLONE)) { + if (this.viaFabricPlus$shouldCancel(slotNum, buttonNum, containerInput, player)) { ci.cancel(); } - if (ViaFabricPlus.api().targetVersion().olderThanOrEqualTo(ProtocolVersion.v1_15_2) && containerInput == ContainerInput.SWAP && buttonNum == 40) { // Pressing 'F' in inventory - ci.cancel(); + } + + @Unique + private boolean viaFabricPlus$shouldCancel(final int slotNum, final int buttonNum, final ContainerInput containerInput, final Player player) { + final ProtocolVersion version = ViaFabricPlus.api().targetVersion(); + if (version.olderThanOrEqualTo(LegacyProtocolVersion.b1_4tob1_4_1) && containerInput != ContainerInput.PICKUP) { + return true; + } + if (version.olderThanOrEqualTo(LegacyProtocolVersion.r1_4_6tor1_4_7) && containerInput != ContainerInput.PICKUP && containerInput != ContainerInput.QUICK_MOVE && containerInput != ContainerInput.SWAP && containerInput != ContainerInput.CLONE) { + return true; + } + if (version.olderThanOrEqualTo(ProtocolVersion.v1_15_2) && containerInput == ContainerInput.SWAP && buttonNum == 40) { // Pressing 'F' in inventory + return true; + } + if (containerInput != ContainerInput.QUICK_MOVE) { + return false; + } + + if (version.olderThanOrEqualTo(LegacyProtocolVersion.b1_5tob1_5_2)) { + final boolean allowed = player.containerMenu instanceof InventoryMenu ? slotNum >= 5 && slotNum <= 8 : player.containerMenu instanceof ChestMenu; + if (!allowed) { + return true; + } + } + if (version.olderThanOrEqualTo(LegacyProtocolVersion.b1_7tob1_7_3) && (player.containerMenu instanceof AbstractCraftingMenu && slotNum == 0 || player.containerMenu instanceof DispenserMenu)) { + return true; + } + if (version.olderThan(LegacyProtocolVersion.r1_3_1tor1_3_2)) { + if (player.containerMenu instanceof BrewingStandMenu) { // needs new legacy recipe entries for shift click to work properly still on 1.3.2+ + return true; + } + if (player.containerMenu instanceof EnchantmentMenu && slotNum != 0) { + return true; + } } + return version.olderThanOrEqualTo(LegacyProtocolVersion.r1_4_4tor1_4_5) && slotNum < 0; } @Unique diff --git a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/LimitationsImpl.java b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/LimitationsImpl.java index 06e446381..e4a264ad0 100644 --- a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/LimitationsImpl.java +++ b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/LimitationsImpl.java @@ -217,7 +217,6 @@ public Reference2ObjectMap, ProtocolVersionRange> getEn return enchantmentDiff; } - public Reference2ObjectMap, ProtocolVersionRange> getEffectDiff() { return effectDiff; } diff --git a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/ProtocolTranslationImpl.java b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/ProtocolTranslationImpl.java index e9b809163..934323ca2 100644 --- a/src/main/java/com/viaversion/viafabricplus/protocoltranslator/ProtocolTranslationImpl.java +++ b/src/main/java/com/viaversion/viafabricplus/protocoltranslator/ProtocolTranslationImpl.java @@ -142,7 +142,7 @@ public CompletableFuture init(final Path path) { } // Register command callback for /viafabricplus - ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> { + ClientCommandRegistrationCallback.EVENT.register((dispatcher, _) -> { final ViaFabricPlusCommandHandler commandHandler = (ViaFabricPlusCommandHandler) Via.getManager().getCommandHandler(); final RequiredArgumentBuilder executor = RequiredArgumentBuilder.argument("args", StringArgumentType.greedyString()).executes(commandHandler::execute).suggests(commandHandler::suggestion); diff --git a/src/main/resources/assets/viafabricplus/data/furnace-fuels-1.11.2.json b/src/main/resources/assets/viafabricplus/data/furnace-fuels-1.11.2.json new file mode 100644 index 000000000..bb73ca99b --- /dev/null +++ b/src/main/resources/assets/viafabricplus/data/furnace-fuels-1.11.2.json @@ -0,0 +1,152 @@ +{ + "": [ + { + "item": "minecraft:lava_bucket", + "version": "*" + }, + { + "item": "minecraft:coal_block", + "version": "*" + }, + { + "item": "minecraft:blaze_rod", + "version": "*" + }, + { + "item": "minecraft:coal", + "version": "*" + }, + { + "item": "minecraft:charcoal", + "version": "*" + }, + { + "tag": "minecraft:logs", + "version": "*" + }, + { + "tag": "minecraft:planks", + "version": "*" + }, + { + "tag": "minecraft:wooden_stairs", + "version": "*" + }, + { + "tag": "minecraft:wooden_trapdoors", + "version": "*" + }, + { + "tag": "minecraft:wooden_pressure_plates", + "version": "*" + }, + { + "tag": "minecraft:wooden_fences", + "version": "*" + }, + { + "tag": "minecraft:fence_gates", + "version": "*" + }, + { + "item": "minecraft:note_block", + "version": "*" + }, + { + "item": "minecraft:bookshelf", + "version": "*" + }, + { + "item": "minecraft:jukebox", + "version": "*" + }, + { + "item": "minecraft:chest", + "version": "*" + }, + { + "item": "minecraft:trapped_chest", + "version": "*" + }, + { + "item": "minecraft:crafting_table", + "version": "*" + }, + { + "item": "minecraft:daylight_detector", + "version": "*" + }, + { + "tag": "minecraft:banners", + "version": "*" + }, + { + "item": "minecraft:bow", + "version": ">= 1.11" + }, + { + "item": "minecraft:fishing_rod", + "version": ">= 1.11" + }, + { + "item": "minecraft:ladder", + "version": ">= 1.11" + }, + { + "item": "minecraft:stick", + "version": "*" + }, + { + "tag": "minecraft:saplings", + "version": "*" + }, + { + "item": "minecraft:bowl", + "version": ">= 1.11" + }, + { + "item": "minecraft:wooden_shovel", + "version": ">= 1.3.1-1.3.2" + }, + { + "item": "minecraft:wooden_sword", + "version": ">= 1.3.1-1.3.2" + }, + { + "item": "minecraft:wooden_hoe", + "version": ">= 1.3.1-1.3.2" + }, + { + "item": "minecraft:wooden_axe", + "version": ">= 1.3.1-1.3.2" + }, + { + "item": "minecraft:wooden_pickaxe", + "version": ">= 1.3.1-1.3.2" + }, + { + "tag": "minecraft:signs", + "version": ">= 1.11" + }, + { + "tag": "minecraft:wooden_doors", + "version": ">= 1.11" + }, + { + "tag": "minecraft:boats", + "version": ">= 1.11" + }, + { + "tag": "minecraft:wool", + "version": ">= 1.11" + }, + { + "tag": "minecraft:wooden_buttons", + "version": ">= 1.11" + }, + { + "tag": "minecraft:wool_carpets", + "version": ">= 1.11" + } + ] +} diff --git a/src/main/resources/viafabricplus.classtweaker b/src/main/resources/viafabricplus.classtweaker index 1219da0c2..46767aec3 100644 --- a/src/main/resources/viafabricplus.classtweaker +++ b/src/main/resources/viafabricplus.classtweaker @@ -54,3 +54,4 @@ accessible class net/minecraft/client/multiplayer/ClientPacketListener$CommandCh accessible class net/minecraft/world/entity/EntityFluidInteraction$CurrentAccumulator accessible class net/minecraft/client/gui/screens/debug/GameModeSwitcherScreen$GameModeIcon accessible class net/minecraft/client/gui/Font$PreparedTextBuilder +accessible class net/minecraft/world/inventory/BrewingStandMenu$FuelSlot diff --git a/src/main/resources/viafabricplus.mixins.json b/src/main/resources/viafabricplus.mixins.json index fa56620af..f935b9d36 100644 --- a/src/main/resources/viafabricplus.mixins.json +++ b/src/main/resources/viafabricplus.mixins.json @@ -39,6 +39,7 @@ "core.integration.sync_tasks.MixinClientCommonPacketListenerImpl", "core.performance.MixinServerStatusPinger", "features.b1_5.MixinLivingEntity", + "features.b1_5.MixinChestMenu", "features.b1_7.MixinBowItem", "features.b1_7.MixinHud", "features.b1_7.MixinMultiPlayerGameMode", @@ -67,6 +68,7 @@ "features.v1_0_0.MixinLivingEntity", "features.v1_1.MixinPistonBaseBlock", "features.v1_10.MixinBaseRailBlock", + "features.v1_10.MixinBrewingStandMenu", "features.v1_10.MixinFlowerPotBlock", "features.v1_10.MixinGuiGraphicsExtractor", "features.v1_10.MixinPlayer", @@ -76,6 +78,7 @@ "features.v1_11_1.MixinEntityPacketRewriter1_12", "features.v1_11_1.MixinMinecraft", "features.v1_11_1.screen.MixinCraftingMenu", + "features.v1_11_1.screen.MixinAbstractFurnaceMenu", "features.v1_11_1.screen.MixinInventoryMenu", "features.v1_11_1.screen.MixinScreen", "features.v1_12_2.MixinBlockPlaceContext", @@ -342,7 +345,6 @@ "features.v1_4_6.MixinBlockBehaviour", "features.v1_5.MixinAbstractContainerScreen", "features.v1_5_2.MixinLocalPlayer", - "features.v1_6_1.MixinAbstractContainerScreen", "features.v1_6_4.MixinEntityPacketRewriter1_20_5", "features.v1_7_6.MixinCarpetBlock", "features.v1_7_6.MixinLivingEntity",