diff --git a/fabric-api-lookup-api-v1/src/testmod/java/net/fabricmc/fabric/test/lookup/FabricApiLookupTest.java b/fabric-api-lookup-api-v1/src/testmod/java/net/fabricmc/fabric/test/lookup/FabricApiLookupTest.java index e581d52c4..ef71b835d 100644 --- a/fabric-api-lookup-api-v1/src/testmod/java/net/fabricmc/fabric/test/lookup/FabricApiLookupTest.java +++ b/fabric-api-lookup-api-v1/src/testmod/java/net/fabricmc/fabric/test/lookup/FabricApiLookupTest.java @@ -42,17 +42,17 @@ public class FabricApiLookupTest implements ModInitializer { public static final String MOD_ID = "fabric-lookup-api-v1-testmod"; // Chute - Block without model that transfers item from the container above to the container below. // It's meant to work with unsided containers: chests, dispensers, droppers and hoppers. - public static final ChuteBlock CHUTE_BLOCK = new ChuteBlock(FabricBlockSettings.of(Material.field_44489)); + public static final ChuteBlock CHUTE_BLOCK = new ChuteBlock(FabricBlockSettings.of(Material.GENERIC)); public static final BlockItem CHUTE_ITEM = new BlockItem(CHUTE_BLOCK, new Item.Settings()); public static BlockEntityType<ChuteBlockEntity> CHUTE_BLOCK_ENTITY_TYPE; // Cobble gen - Block without model that can generate infinite cobblestone when placed above a chute. // It's meant to test BlockApiLookup#registerSelf. - public static final CobbleGenBlock COBBLE_GEN_BLOCK = new CobbleGenBlock(FabricBlockSettings.of(Material.field_44489)); + public static final CobbleGenBlock COBBLE_GEN_BLOCK = new CobbleGenBlock(FabricBlockSettings.of(Material.GENERIC)); public static final BlockItem COBBLE_GEN_ITEM = new BlockItem(COBBLE_GEN_BLOCK, new Item.Settings()); public static BlockEntityType<CobbleGenBlockEntity> COBBLE_GEN_BLOCK_ENTITY_TYPE; // Testing for item api lookups is done in the `item` package. - public static final InspectorBlock INSPECTOR_BLOCK = new InspectorBlock(FabricBlockSettings.of(Material.field_44489)); + public static final InspectorBlock INSPECTOR_BLOCK = new InspectorBlock(FabricBlockSettings.of(Material.GENERIC)); public static final BlockItem INSPECTOR_ITEM = new BlockItem(INSPECTOR_BLOCK, new Item.Settings()); @Override diff --git a/fabric-content-registries-v0/src/main/java/net/fabricmc/fabric/api/registry/SculkSensorFrequencyRegistry.java b/fabric-content-registries-v0/src/main/java/net/fabricmc/fabric/api/registry/SculkSensorFrequencyRegistry.java index b7ee2fa11..d927d73b2 100644 --- a/fabric-content-registries-v0/src/main/java/net/fabricmc/fabric/api/registry/SculkSensorFrequencyRegistry.java +++ b/fabric-content-registries-v0/src/main/java/net/fabricmc/fabric/api/registry/SculkSensorFrequencyRegistry.java @@ -16,12 +16,13 @@ package net.fabricmc.fabric.api.registry; +import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import net.minecraft.class_8514; import net.minecraft.registry.tag.GameEventTags; import net.minecraft.world.event.GameEvent; -import net.minecraft.world.event.listener.VibrationListener; /** * Provides a method for registering sculk sensor frequencies. @@ -51,7 +52,8 @@ public final class SculkSensorFrequencyRegistry { throw new IllegalArgumentException("Attempted to register Sculk Sensor frequency for event "+event.getId()+" with frequency "+frequency+". Sculk Sensor frequencies must be between 1 and 15 inclusive."); } - int replaced = VibrationListener.FREQUENCIES.put(event, frequency); + final Object2IntOpenHashMap<GameEvent> map = (Object2IntOpenHashMap<GameEvent>) class_8514.field_44639; + int replaced = map.put(event, frequency); if (replaced != 0) { LOGGER.debug("Replaced old frequency mapping for {} - was {}, now {}", event.getId(), replaced, frequency); diff --git a/fabric-content-registries-v0/src/main/java/net/fabricmc/fabric/api/registry/VillagerPlantableRegistry.java b/fabric-content-registries-v0/src/main/java/net/fabricmc/fabric/api/registry/VillagerPlantableRegistry.java deleted file mode 100644 index 8b855e888..000000000 --- a/fabric-content-registries-v0/src/main/java/net/fabricmc/fabric/api/registry/VillagerPlantableRegistry.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright (c) 2016, 2017, 2018, 2019 FabricMC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.fabricmc.fabric.api.registry; - -import java.util.Collections; -import java.util.HashMap; -import java.util.Objects; -import java.util.Set; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import net.minecraft.block.BlockState; -import net.minecraft.block.CropBlock; -import net.minecraft.item.BlockItem; -import net.minecraft.item.Item; -import net.minecraft.item.ItemConvertible; -import net.minecraft.item.Items; -import net.minecraft.registry.Registries; - -/** - * Registry of items that farmer villagers can plant on farmland. - */ -public final class VillagerPlantableRegistry { - private static final Logger LOGGER = LoggerFactory.getLogger(VillagerPlantableRegistry.class); - private static final HashMap<Item, BlockState> PLANTABLES = new HashMap<>(); - static { - register(Items.WHEAT_SEEDS); - register(Items.CARROT); - register(Items.POTATO); - register(Items.BEETROOT_SEEDS); - } - - private VillagerPlantableRegistry() { - } - - /** - * Registers a BlockItem to be plantable by farmer villagers. - * This will use the default state of the associated block. - * For the crop to be harvestable, the block should extend CropBlock, so the - * farmer can test the {@link CropBlock#isMature(BlockState)} method. - * @param item the BlockItem to register - */ - public static void register(ItemConvertible item) { - Objects.requireNonNull(item.asItem(), "Item cannot be null!"); - - if (!(item.asItem() instanceof BlockItem)) { - throw new IllegalArgumentException("item is not a BlockItem"); - } - - register(item, ((BlockItem) item.asItem()).getBlock().getDefaultState()); - } - - /** - * Register an item with an associated to be plantable by farmer villagers. - * For the crop to be harvestable, the block should extend CropBlock, so the - * farmer can test the {@link CropBlock#isMature(BlockState)} method. - * @param item the seed item - * @param plantState the state that will be planted - */ - public static void register(ItemConvertible item, BlockState plantState) { - Objects.requireNonNull(item.asItem(), "Item cannot be null!"); - Objects.requireNonNull(plantState, "Plant block state cannot be null!"); - - PLANTABLES.put(item.asItem(), plantState); - - if (!(plantState.getBlock() instanceof CropBlock)) { - LOGGER.info("Registered a block ({}) that does not extend CropBlock, this block will not be villager harvestable by default.", Registries.BLOCK.getId(plantState.getBlock())); - } - } - - /** - * Tests if the item is a registered seed item. - * @param item the item to test - * @return true if the item is registered as a seed - */ - public static boolean contains(ItemConvertible item) { - Objects.requireNonNull(item.asItem(), "Item cannot be null!"); - return PLANTABLES.containsKey(item.asItem()); - } - - /** - * Get the state that is associated with the provided seed item. - * @param item the seed item - * @return the state associated with the seed item - */ - public static BlockState getPlantState(ItemConvertible item) { - Objects.requireNonNull(item.asItem(), "Item cannot be null!"); - return PLANTABLES.get(item.asItem()); - } - - /** - * Get all currently registered seed items. - * @return all currently registered seed items. - */ - public static Set<Item> getItems() { - return Collections.unmodifiableSet(PLANTABLES.keySet()); - } -} diff --git a/fabric-content-registries-v0/src/main/java/net/fabricmc/fabric/mixin/content/registry/FarmerVillagerTaskMixin.java b/fabric-content-registries-v0/src/main/java/net/fabricmc/fabric/mixin/content/registry/FarmerVillagerTaskMixin.java deleted file mode 100644 index 85f3dbb80..000000000 --- a/fabric-content-registries-v0/src/main/java/net/fabricmc/fabric/mixin/content/registry/FarmerVillagerTaskMixin.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2016, 2017, 2018, 2019 FabricMC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.fabricmc.fabric.mixin.content.registry; - -import org.jetbrains.annotations.Nullable; -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.ModifyArg; -import org.spongepowered.asm.mixin.injection.ModifyVariable; - -import net.minecraft.entity.ai.brain.task.FarmerVillagerTask; -import net.minecraft.entity.passive.VillagerEntity; -import net.minecraft.inventory.SimpleInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.util.math.BlockPos; - -import net.fabricmc.fabric.api.registry.VillagerPlantableRegistry; - -@Mixin(FarmerVillagerTask.class) -public class FarmerVillagerTaskMixin { - @Nullable - @Shadow private BlockPos currentTarget; - - private int fabric_currentInventorySlot = -1; - - @ModifyArg(method = "keepRunning", at = @At(value = "INVOKE", target = "Lnet/minecraft/inventory/SimpleInventory;getStack(I)Lnet/minecraft/item/ItemStack;"), index = 0) - private int fabric_storeCurrentSlot(int slot) { - return this.fabric_currentInventorySlot = slot; - } - - @ModifyVariable(method = "keepRunning", at = @At("LOAD")) - private boolean fabric_useRegistryForPlace(boolean current, ServerWorld serverWorld, VillagerEntity villagerEntity, long l) { - if (current) { - return true; - } - - SimpleInventory simpleInventory = villagerEntity.getInventory(); - ItemStack currentStack = simpleInventory.getStack(this.fabric_currentInventorySlot); - - if (!currentStack.isEmpty() && VillagerPlantableRegistry.contains(currentStack.getItem())) { - serverWorld.setBlockState(this.currentTarget, VillagerPlantableRegistry.getPlantState(currentStack.getItem()), 3); - return true; - } - - return false; - } -} diff --git a/fabric-content-registries-v0/src/main/java/net/fabricmc/fabric/mixin/content/registry/VibrationListenerMixin.java b/fabric-content-registries-v0/src/main/java/net/fabricmc/fabric/mixin/content/registry/VibrationListenerMixin.java deleted file mode 100644 index a9433dfea..000000000 --- a/fabric-content-registries-v0/src/main/java/net/fabricmc/fabric/mixin/content/registry/VibrationListenerMixin.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2016, 2017, 2018, 2019 FabricMC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.fabricmc.fabric.mixin.content.registry; - -import it.unimi.dsi.fastutil.objects.Object2IntMap; -import it.unimi.dsi.fastutil.objects.Object2IntMaps; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -import net.minecraft.block.SculkSensorBlock; -import net.minecraft.world.event.listener.VibrationListener; - -@Mixin(VibrationListener.class) -public class VibrationListenerMixin { - /** - * Redirects the call to {@linkplain Object2IntMaps#unmodifiable(Object2IntMap)} in initialization of {@linkplain SculkSensorBlock#FREQUENCIES}. - */ - @Redirect(method = "<clinit>", at = @At(value = "INVOKE", target = "Lit/unimi/dsi/fastutil/objects/Object2IntMaps;unmodifiable(Lit/unimi/dsi/fastutil/objects/Object2IntMap;)Lit/unimi/dsi/fastutil/objects/Object2IntMap;", remap = false)) - private static <K> Object2IntMap<K> makeFrequenciesMapModifiable(Object2IntMap<? extends K> m) { - return (Object2IntMap<K>) m; - } -} diff --git a/fabric-content-registries-v0/src/main/java/net/fabricmc/fabric/mixin/content/registry/VillagerEntityMixin.java b/fabric-content-registries-v0/src/main/java/net/fabricmc/fabric/mixin/content/registry/VillagerEntityMixin.java deleted file mode 100644 index eb24c3528..000000000 --- a/fabric-content-registries-v0/src/main/java/net/fabricmc/fabric/mixin/content/registry/VillagerEntityMixin.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2016, 2017, 2018, 2019 FabricMC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.fabricmc.fabric.mixin.content.registry; - -import java.util.Set; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; - -import net.minecraft.entity.passive.VillagerEntity; -import net.minecraft.inventory.SimpleInventory; -import net.minecraft.item.Item; - -import net.fabricmc.fabric.api.registry.VillagerPlantableRegistry; - -@Mixin(VillagerEntity.class) -public class VillagerEntityMixin { - @Redirect(method = "hasSeedToPlant", at = @At(value = "INVOKE", target = "Lnet/minecraft/inventory/SimpleInventory;containsAny(Ljava/util/Set;)Z")) - private boolean fabric_useRegistry(SimpleInventory inventory, Set<Item> items) { - return inventory.containsAny(VillagerPlantableRegistry.getItems()); - } -} diff --git a/fabric-content-registries-v0/src/main/resources/fabric-content-registries-v0.mixins.json b/fabric-content-registries-v0/src/main/resources/fabric-content-registries-v0.mixins.json index f9eaf7dd0..65fc58d41 100644 --- a/fabric-content-registries-v0/src/main/resources/fabric-content-registries-v0.mixins.json +++ b/fabric-content-registries-v0/src/main/resources/fabric-content-registries-v0.mixins.json @@ -4,7 +4,6 @@ "compatibilityLevel": "JAVA_16", "mixins": [ "AxeItemAccessor", - "FarmerVillagerTaskMixin", "FarmerWorkTaskAccessor", "GiveGiftsToHeroTaskAccessor", "HoeItemAccessor", @@ -13,10 +12,8 @@ "AbstractFurnaceBlockEntityMixin", "FireBlockMixin", "OxidizableMixin", - "VibrationListenerMixin", "ShovelItemAccessor", - "VillagerEntityAccessor", - "VillagerEntityMixin" + "VillagerEntityAccessor" ], "injectors": { "defaultRequire": 1 diff --git a/fabric-content-registries-v0/src/testmod/java/net/fabricmc/fabric/test/content/registry/ContentRegistryTest.java b/fabric-content-registries-v0/src/testmod/java/net/fabricmc/fabric/test/content/registry/ContentRegistryTest.java index 7e2554349..b4864b3e0 100644 --- a/fabric-content-registries-v0/src/testmod/java/net/fabricmc/fabric/test/content/registry/ContentRegistryTest.java +++ b/fabric-content-registries-v0/src/testmod/java/net/fabricmc/fabric/test/content/registry/ContentRegistryTest.java @@ -58,7 +58,6 @@ import net.fabricmc.fabric.api.registry.SculkSensorFrequencyRegistry; import net.fabricmc.fabric.api.registry.StrippableBlockRegistry; import net.fabricmc.fabric.api.registry.TillableBlockRegistry; import net.fabricmc.fabric.api.registry.VillagerInteractionRegistries; -import net.fabricmc.fabric.api.registry.VillagerPlantableRegistry; import net.fabricmc.fabric.test.mixin.content.registry.BrewingRecipeRegistryAccessor; public final class ContentRegistryTest implements ModInitializer { @@ -137,17 +136,6 @@ public final class ContentRegistryTest implements ModInitializer { VillagerInteractionRegistries.registerCompostable(Items.APPLE); VillagerInteractionRegistries.registerCollectable(Items.OAK_SAPLING); - VillagerPlantableRegistry.register(Items.OAK_SAPLING); - - // assert that VillagerPlantablesRegistry throws when getting a non-BlockItem - try { - VillagerPlantableRegistry.register(Items.STICK); - - throw new AssertionError("VillagerPlantablesRegistry didn't throw when item is not BlockItem!"); - } catch (Exception e) { - // expected behavior - LOGGER.info("VillagerPlantablesRegistry test passed!"); - } VillagerInteractionRegistries.registerGiftLootTable(VillagerProfession.NITWIT, new Identifier("fake_loot_table")); diff --git a/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/api/datagen/v1/provider/FabricLanguageProvider.java b/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/api/datagen/v1/provider/FabricLanguageProvider.java index 1eb0011e1..5454389a4 100644 --- a/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/api/datagen/v1/provider/FabricLanguageProvider.java +++ b/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/api/datagen/v1/provider/FabricLanguageProvider.java @@ -39,6 +39,8 @@ import net.minecraft.entity.attribute.EntityAttribute; import net.minecraft.entity.effect.StatusEffect; import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; +import net.minecraft.registry.Registries; +import net.minecraft.registry.RegistryKey; import net.minecraft.stat.StatType; import net.minecraft.text.TextContent; import net.minecraft.text.TranslatableTextContent; @@ -145,10 +147,11 @@ public abstract class FabricLanguageProvider implements DataProvider { /** * Adds a translation for an {@link ItemGroup}. * - * @param group The {@link ItemGroup} to get the translation key from. + * @param registryKey The {@link RegistryKey} to get the translation key from. * @param value The value of the entry. */ - default void add(ItemGroup group, String value) { + default void add(RegistryKey<ItemGroup> registryKey, String value) { + final ItemGroup group = Registries.ITEM_GROUP.getOrThrow(registryKey); final TextContent content = group.getDisplayName().getContent(); if (content instanceof TranslatableTextContent translatableTextContent) { diff --git a/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/api/datagen/v1/provider/FabricLootTableProvider.java b/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/api/datagen/v1/provider/FabricLootTableProvider.java index 358f33554..cf362cbf2 100644 --- a/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/api/datagen/v1/provider/FabricLootTableProvider.java +++ b/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/api/datagen/v1/provider/FabricLootTableProvider.java @@ -30,7 +30,7 @@ import com.google.common.collect.Maps; import com.google.gson.JsonObject; import org.jetbrains.annotations.ApiStatus; -import net.minecraft.class_8490; +import net.minecraft.loot.LootDataType; import net.minecraft.data.DataOutput; import net.minecraft.data.DataProvider; import net.minecraft.data.DataWriter; @@ -87,7 +87,7 @@ public interface FabricLootTableProvider extends Consumer<BiConsumer<Identifier, final List<CompletableFuture<?>> futures = new ArrayList<>(); for (Map.Entry<Identifier, LootTable> entry : builders.entrySet()) { - JsonObject tableJson = (JsonObject) class_8490.LOOT_TABLES.method_51203().toJsonTree(entry.getValue()); + JsonObject tableJson = (JsonObject) LootDataType.LOOT_TABLES.getGson().toJsonTree(entry.getValue()); ConditionJsonProvider.write(tableJson, conditionMap.remove(entry.getKey())); futures.add(DataProvider.writeToPath(writer, tableJson, getOutputPath(entry.getKey()))); diff --git a/fabric-data-generation-api-v1/src/main/resources/fabric-data-generation-api-v1.accesswidener b/fabric-data-generation-api-v1/src/main/resources/fabric-data-generation-api-v1.accesswidener index fca5b7dcf..aade7bb94 100644 --- a/fabric-data-generation-api-v1/src/main/resources/fabric-data-generation-api-v1.accesswidener +++ b/fabric-data-generation-api-v1/src/main/resources/fabric-data-generation-api-v1.accesswidener @@ -163,15 +163,12 @@ transitive-accessible method net/minecraft/data/client/BlockStateModelGenerator transitive-accessible method net/minecraft/data/client/BlockStateModelGenerator createUvLockedColumnBlockState (Lnet/minecraft/block/Block;Lnet/minecraft/data/client/TextureMap;Ljava/util/function/BiConsumer;)Lnet/minecraft/data/client/BlockStateSupplier; transitive-accessible method net/minecraft/data/client/BlockStateModelGenerator createAxisRotatedBlockState (Lnet/minecraft/block/Block;Lnet/minecraft/util/Identifier;)Lnet/minecraft/data/client/BlockStateSupplier; transitive-accessible method net/minecraft/data/client/BlockStateModelGenerator registerAxisRotated (Lnet/minecraft/block/Block;Lnet/minecraft/util/Identifier;)V -transitive-accessible method net/minecraft/data/client/BlockStateModelGenerator registerAxisRotated (Lnet/minecraft/block/Block;Lnet/minecraft/data/client/TexturedModel$Factory;)V transitive-accessible method net/minecraft/data/client/BlockStateModelGenerator registerNorthDefaultHorizontalRotated (Lnet/minecraft/block/Block;Lnet/minecraft/data/client/TexturedModel$Factory;)V transitive-accessible method net/minecraft/data/client/BlockStateModelGenerator createAxisRotatedBlockState (Lnet/minecraft/block/Block;Lnet/minecraft/util/Identifier;Lnet/minecraft/util/Identifier;)Lnet/minecraft/data/client/BlockStateSupplier; transitive-accessible method net/minecraft/data/client/BlockStateModelGenerator registerAxisRotated (Lnet/minecraft/block/Block;Lnet/minecraft/data/client/TexturedModel$Factory;Lnet/minecraft/data/client/TexturedModel$Factory;)V transitive-accessible method net/minecraft/data/client/BlockStateModelGenerator createSubModel (Lnet/minecraft/block/Block;Ljava/lang/String;Lnet/minecraft/data/client/Model;Ljava/util/function/Function;)Lnet/minecraft/util/Identifier; transitive-accessible method net/minecraft/data/client/BlockStateModelGenerator createPressurePlateBlockState (Lnet/minecraft/block/Block;Lnet/minecraft/util/Identifier;Lnet/minecraft/util/Identifier;)Lnet/minecraft/data/client/BlockStateSupplier; transitive-accessible method net/minecraft/data/client/BlockStateModelGenerator createSlabBlockState (Lnet/minecraft/block/Block;Lnet/minecraft/util/Identifier;Lnet/minecraft/util/Identifier;Lnet/minecraft/util/Identifier;)Lnet/minecraft/data/client/BlockStateSupplier; -transitive-accessible method net/minecraft/data/client/BlockStateModelGenerator registerSimpleCubeAll (Lnet/minecraft/block/Block;)V -transitive-accessible method net/minecraft/data/client/BlockStateModelGenerator registerSingleton (Lnet/minecraft/block/Block;Lnet/minecraft/data/client/TexturedModel$Factory;)V transitive-accessible method net/minecraft/data/client/BlockStateModelGenerator registerSingleton (Lnet/minecraft/block/Block;Lnet/minecraft/data/client/TextureMap;Lnet/minecraft/data/client/Model;)V transitive-accessible method net/minecraft/data/client/BlockStateModelGenerator registerCubeAllModelTexturePool (Lnet/minecraft/block/Block;)Lnet/minecraft/data/client/BlockStateModelGenerator$BlockTexturePool; transitive-accessible method net/minecraft/data/client/BlockStateModelGenerator registerDoor (Lnet/minecraft/block/Block;)V diff --git a/fabric-data-generation-api-v1/src/testmod/java/net/fabricmc/fabric/test/datagen/DataGeneratorTestContent.java b/fabric-data-generation-api-v1/src/testmod/java/net/fabricmc/fabric/test/datagen/DataGeneratorTestContent.java index 3e3c37db2..11d7dd20d 100644 --- a/fabric-data-generation-api-v1/src/testmod/java/net/fabricmc/fabric/test/datagen/DataGeneratorTestContent.java +++ b/fabric-data-generation-api-v1/src/testmod/java/net/fabricmc/fabric/test/datagen/DataGeneratorTestContent.java @@ -25,10 +25,12 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; -import net.minecraft.text.Text; -import net.minecraft.util.Identifier; import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; +import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.RegistryKeys; +import net.minecraft.text.Text; +import net.minecraft.util.Identifier; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup; @@ -43,20 +45,22 @@ public class DataGeneratorTestContent implements ModInitializer { public static Block BLOCK_WITH_VANILLA_LOOT_TABLE; public static Block BLOCK_THAT_DROPS_NOTHING; - public static final ItemGroup SIMPLE_ITEM_GROUP = FabricItemGroup.builder(new Identifier(MOD_ID, "simple")) - .icon(() -> new ItemStack(Items.DIAMOND_PICKAXE)) - .displayName(Text.translatable("fabric-data-gen-api-v1-testmod.simple_item_group")) - .build(); + public static final RegistryKey<ItemGroup> SIMPLE_ITEM_GROUP = RegistryKey.of(RegistryKeys.ITEM_GROUP, new Identifier(MOD_ID, "simple")); @Override public void onInitialize() { - SIMPLE_BLOCK = createBlock("simple_block", true, AbstractBlock.Settings.of(Material.STONE)); - BLOCK_WITHOUT_ITEM = createBlock("block_without_item", false, AbstractBlock.Settings.of(Material.STONE)); - BLOCK_WITHOUT_LOOT_TABLE = createBlock("block_without_loot_table", false, AbstractBlock.Settings.of(Material.STONE)); - BLOCK_WITH_VANILLA_LOOT_TABLE = createBlock("block_with_vanilla_loot_table", false, AbstractBlock.Settings.of(Material.STONE).dropsLike(Blocks.STONE)); - BLOCK_THAT_DROPS_NOTHING = createBlock("block_that_drops_nothing", false, AbstractBlock.Settings.of(Material.STONE).dropsNothing()); + SIMPLE_BLOCK = createBlock("simple_block", true, AbstractBlock.Settings.of(Material.GENERIC)); + BLOCK_WITHOUT_ITEM = createBlock("block_without_item", false, AbstractBlock.Settings.of(Material.GENERIC)); + BLOCK_WITHOUT_LOOT_TABLE = createBlock("block_without_loot_table", false, AbstractBlock.Settings.of(Material.GENERIC)); + BLOCK_WITH_VANILLA_LOOT_TABLE = createBlock("block_with_vanilla_loot_table", false, AbstractBlock.Settings.of(Material.GENERIC).dropsLike(Blocks.STONE)); + BLOCK_THAT_DROPS_NOTHING = createBlock("block_that_drops_nothing", false, AbstractBlock.Settings.of(Material.GENERIC).dropsNothing()); ItemGroupEvents.modifyEntriesEvent(SIMPLE_ITEM_GROUP).register(entries -> entries.add(SIMPLE_BLOCK)); + + Registry.register(Registries.ITEM_GROUP, SIMPLE_ITEM_GROUP, FabricItemGroup.builder() + .icon(() -> new ItemStack(Items.DIAMOND_PICKAXE)) + .displayName(Text.translatable("fabric-data-gen-api-v1-testmod.simple_item_group")) + .build()); } private static Block createBlock(String name, boolean hasItem, AbstractBlock.Settings settings) { diff --git a/fabric-entity-events-v1/src/testmod/java/net/fabricmc/fabric/test/entity/event/EntityEventTests.java b/fabric-entity-events-v1/src/testmod/java/net/fabricmc/fabric/test/entity/event/EntityEventTests.java index a75fe383e..f12f3bf32 100644 --- a/fabric-entity-events-v1/src/testmod/java/net/fabricmc/fabric/test/entity/event/EntityEventTests.java +++ b/fabric-entity-events-v1/src/testmod/java/net/fabricmc/fabric/test/entity/event/EntityEventTests.java @@ -51,7 +51,7 @@ import net.fabricmc.fabric.api.entity.event.v1.ServerPlayerEvents; public final class EntityEventTests implements ModInitializer { private static final Logger LOGGER = LoggerFactory.getLogger(EntityEventTests.class); - public static final Block TEST_BED = new TestBedBlock(AbstractBlock.Settings.of(Material.field_44489).strength(1, 1)); + public static final Block TEST_BED = new TestBedBlock(AbstractBlock.Settings.of(Material.GENERIC).strength(1, 1)); public static final Item DIAMOND_ELYTRA = new DiamondElytraItem(); @Override diff --git a/fabric-game-rule-api-v1/src/client/java/net/fabricmc/fabric/impl/gamerule/widget/DoubleRuleWidget.java b/fabric-game-rule-api-v1/src/client/java/net/fabricmc/fabric/impl/gamerule/widget/DoubleRuleWidget.java index dc22bdbc7..6295beacd 100644 --- a/fabric-game-rule-api-v1/src/client/java/net/fabricmc/fabric/impl/gamerule/widget/DoubleRuleWidget.java +++ b/fabric-game-rule-api-v1/src/client/java/net/fabricmc/fabric/impl/gamerule/widget/DoubleRuleWidget.java @@ -19,9 +19,9 @@ package net.fabricmc.fabric.impl.gamerule.widget; import java.util.List; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.gui.screen.world.EditGameRulesScreen; import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.OrderedText; import net.minecraft.text.Text; @@ -57,11 +57,11 @@ public final class DoubleRuleWidget extends EditGameRulesScreen.NamedRuleWidget } @Override - public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { + public void render(DrawableHelper drawableHelper, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { // FIXME: Param names nightmare - this.drawName(matrices, y, x); + this.drawName(drawableHelper, y, x); this.textFieldWidget.setPosition(x + entryWidth - 44, y); - this.textFieldWidget.render(matrices, mouseX, mouseY, tickDelta); + this.textFieldWidget.render(drawableHelper, mouseX, mouseY, tickDelta); } } diff --git a/fabric-game-rule-api-v1/src/client/java/net/fabricmc/fabric/impl/gamerule/widget/EnumRuleWidget.java b/fabric-game-rule-api-v1/src/client/java/net/fabricmc/fabric/impl/gamerule/widget/EnumRuleWidget.java index 0a215aed4..0832d55ea 100644 --- a/fabric-game-rule-api-v1/src/client/java/net/fabricmc/fabric/impl/gamerule/widget/EnumRuleWidget.java +++ b/fabric-game-rule-api-v1/src/client/java/net/fabricmc/fabric/impl/gamerule/widget/EnumRuleWidget.java @@ -20,10 +20,10 @@ import java.util.List; import java.util.Locale; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.gui.screen.world.EditGameRulesScreen; import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.resource.language.I18n; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.OrderedText; import net.minecraft.text.Text; @@ -59,11 +59,12 @@ public final class EnumRuleWidget<E extends Enum<E>> extends EditGameRulesScreen return Text.literal(value.toString()); } - public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { + @Override + public void render(DrawableHelper drawableHelper, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { // FIXME: Param names nightmare - this.drawName(matrices, y, x); + this.drawName(drawableHelper, y, x); this.buttonWidget.setPosition(x + entryWidth - 89, y); - this.buttonWidget.render(matrices, mouseX, mouseY, tickDelta); + this.buttonWidget.render(drawableHelper, mouseX, mouseY, tickDelta); } } diff --git a/fabric-item-api-v1/src/main/java/net/fabricmc/fabric/mixin/item/RecipeMixin.java b/fabric-item-api-v1/src/main/java/net/fabricmc/fabric/mixin/item/RecipeMixin.java index 95a73b109..b7da96eec 100644 --- a/fabric-item-api-v1/src/main/java/net/fabricmc/fabric/mixin/item/RecipeMixin.java +++ b/fabric-item-api-v1/src/main/java/net/fabricmc/fabric/mixin/item/RecipeMixin.java @@ -26,6 +26,7 @@ import org.spongepowered.asm.mixin.injection.callback.LocalCapture; import net.minecraft.inventory.Inventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; import net.minecraft.recipe.Recipe; import net.minecraft.util.collection.DefaultedList; @@ -43,6 +44,11 @@ public interface RecipeMixin<C extends Inventory> { return !RecipeRemainderHandler.REMAINDER_STACK.get().isEmpty(); } + @Redirect(method = "getRemainder", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/Item;getRecipeRemainder()Lnet/minecraft/item/Item;")) + private Item replaceGetRecipeRemainder(Item instance) { + return Items.AIR; + } + @Redirect(method = "getRemainder", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/collection/DefaultedList;set(ILjava/lang/Object;)Ljava/lang/Object;")) private Object getStackRemainder(DefaultedList<ItemStack> inventory, int index, Object element) { Object remainder = inventory.set(index, RecipeRemainderHandler.REMAINDER_STACK.get()); diff --git a/fabric-item-group-api-v1/src/client/java/net/fabricmc/fabric/impl/client/itemgroup/FabricCreativeGuiComponents.java b/fabric-item-group-api-v1/src/client/java/net/fabricmc/fabric/impl/client/itemgroup/FabricCreativeGuiComponents.java index 61299b515..9c93f4a67 100644 --- a/fabric-item-group-api-v1/src/client/java/net/fabricmc/fabric/impl/client/itemgroup/FabricCreativeGuiComponents.java +++ b/fabric-item-group-api-v1/src/client/java/net/fabricmc/fabric/impl/client/itemgroup/FabricCreativeGuiComponents.java @@ -18,20 +18,23 @@ package net.fabricmc.fabric.impl.client.itemgroup; import java.util.Set; import java.util.function.Consumer; +import java.util.stream.Collectors; -import com.mojang.blaze3d.systems.RenderSystem; - +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.gui.screen.ingame.CreativeInventoryScreen; import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemGroups; +import net.minecraft.registry.Registries; import net.minecraft.text.Text; import net.minecraft.util.Identifier; public class FabricCreativeGuiComponents { private static final Identifier BUTTON_TEX = new Identifier("fabric", "textures/gui/creative_buttons.png"); - public static final Set<ItemGroup> COMMON_GROUPS = Set.of(ItemGroups.SEARCH, ItemGroups.INVENTORY, ItemGroups.HOTBAR); + public static final Set<ItemGroup> COMMON_GROUPS = Set.of(ItemGroups.SEARCH, ItemGroups.INVENTORY, ItemGroups.HOTBAR).stream() + .map(Registries.ITEM_GROUP::getOrThrow) + .collect(Collectors.toSet()); public static class ItemGroupButtonWidget extends ButtonWidget { final CreativeGuiExtensions extensions; @@ -46,7 +49,7 @@ public class FabricCreativeGuiComponents { } @Override - public void render(MatrixStack matrixStack, int mouseX, int mouseY, float float_1) { + public void render(DrawableHelper drawableHelper, int mouseX, int mouseY, float float_1) { this.hovered = mouseX >= this.getX() && mouseY >= this.getY() && mouseX < this.getX() + this.width && mouseY < this.getY() + this.height; this.visible = extensions.fabric_isButtonVisible(type); this.active = extensions.fabric_isButtonEnabled(type); @@ -55,13 +58,11 @@ public class FabricCreativeGuiComponents { int u = active && this.isHovered() ? 22 : 0; int v = active ? 0 : 12; - RenderSystem.setShaderTexture(0, BUTTON_TEX); - RenderSystem.setShaderColor(1F, 1F, 1F, 1F); - this.drawTexture(matrixStack, this.getX(), this.getY(), u + (type == Type.NEXT ? 11 : 0), v, 11, 12); + drawableHelper.drawTexture(BUTTON_TEX, this.getX(), this.getY(), u + (type == Type.NEXT ? 11 : 0), v, 11, 12); if (this.hovered) { int pageCount = (int) Math.ceil((ItemGroups.getGroupsToDisplay().size() - COMMON_GROUPS.size()) / 9D); - gui.renderTooltip(matrixStack, Text.translatable("fabric.gui.creativeTabPage", extensions.fabric_currentPage() + 1, pageCount), mouseX, mouseY); + drawableHelper.method_51438(MinecraftClient.getInstance().textRenderer, Text.translatable("fabric.gui.creativeTabPage", extensions.fabric_currentPage() + 1, pageCount), mouseX, mouseY); } } } diff --git a/fabric-item-group-api-v1/src/client/java/net/fabricmc/fabric/mixin/itemgroup/client/CreativeInventoryScreenMixin.java b/fabric-item-group-api-v1/src/client/java/net/fabricmc/fabric/mixin/itemgroup/client/CreativeInventoryScreenMixin.java index f5db710e7..d0826d1dc 100644 --- a/fabric-item-group-api-v1/src/client/java/net/fabricmc/fabric/mixin/itemgroup/client/CreativeInventoryScreenMixin.java +++ b/fabric-item-group-api-v1/src/client/java/net/fabricmc/fabric/mixin/itemgroup/client/CreativeInventoryScreenMixin.java @@ -25,9 +25,9 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.gui.screen.ingame.AbstractInventoryScreen; import net.minecraft.client.gui.screen.ingame.CreativeInventoryScreen; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemGroups; @@ -37,7 +37,6 @@ import net.minecraft.text.Text; import net.fabricmc.fabric.impl.client.itemgroup.CreativeGuiExtensions; import net.fabricmc.fabric.impl.client.itemgroup.FabricCreativeGuiComponents; import net.fabricmc.fabric.impl.itemgroup.FabricItemGroup; -import net.fabricmc.fabric.impl.itemgroup.ItemGroupHelper; @Mixin(CreativeInventoryScreen.class) public abstract class CreativeInventoryScreenMixin<T extends ScreenHandler> extends AbstractInventoryScreen<T> implements CreativeGuiExtensions { @@ -94,9 +93,13 @@ public abstract class CreativeInventoryScreenMixin<T extends ScreenHandler> exte private void fabric_updateSelection() { if (!fabric_isGroupVisible(selectedTab)) { - ItemGroupHelper.sortedGroups.stream() + ItemGroups.getGroups().stream() .filter(this::fabric_isGroupVisible) - .findFirst() + .min((a, b) -> { + if (a.isSpecial() && !b.isSpecial()) return 1; + if (!a.isSpecial() && b.isSpecial()) return -1; + return 0; + }) .ifPresent(this::setSelectedTab); } } @@ -120,7 +123,7 @@ public abstract class CreativeInventoryScreenMixin<T extends ScreenHandler> exte } @Inject(method = "renderTabTooltipIfHovered", at = @At("HEAD"), cancellable = true) - private void renderTabTooltipIfHovered(MatrixStack matrixStack, ItemGroup itemGroup, int mx, int my, CallbackInfoReturnable<Boolean> info) { + private void renderTabTooltipIfHovered(DrawableHelper drawableHelper, ItemGroup itemGroup, int mx, int my, CallbackInfoReturnable<Boolean> info) { if (!fabric_isGroupVisible(itemGroup)) { info.setReturnValue(false); } @@ -134,7 +137,7 @@ public abstract class CreativeInventoryScreenMixin<T extends ScreenHandler> exte } @Inject(method = "renderTabIcon", at = @At("HEAD"), cancellable = true) - private void renderTabIcon(MatrixStack matrixStack, ItemGroup itemGroup, CallbackInfo info) { + private void renderTabIcon(DrawableHelper drawableHelper, ItemGroup itemGroup, CallbackInfo info) { if (!fabric_isGroupVisible(itemGroup)) { info.cancel(); } diff --git a/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/api/itemgroup/v1/FabricItemGroup.java b/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/api/itemgroup/v1/FabricItemGroup.java index 2ceba91a6..739a92679 100644 --- a/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/api/itemgroup/v1/FabricItemGroup.java +++ b/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/api/itemgroup/v1/FabricItemGroup.java @@ -17,9 +17,8 @@ package net.fabricmc.fabric.api.itemgroup.v1; import net.minecraft.item.ItemGroup; -import net.minecraft.item.ItemGroups; +import net.minecraft.registry.Registries; import net.minecraft.text.Text; -import net.minecraft.util.Identifier; import net.fabricmc.fabric.impl.itemgroup.FabricItemGroupBuilderImpl; @@ -34,25 +33,31 @@ public final class FabricItemGroup { * Creates a new builder for {@link ItemGroup}. Item groups are used to group items in the creative * inventory. * - * <p>Each new {@link ItemGroup} instance of this class is automatically appended to {@link ItemGroups#getGroups()} when - * {@link ItemGroup.Builder#build()} is invoked. + * <p>You must register the newly created {@link ItemGroup} to the {@link Registries#ITEM_GROUP} registry. + * + * <p>You must also set a display name by calling {@link ItemGroup.Builder#displayName(Text)} * * <p>Example: * * <pre>{@code - * private static final ItemGroup ITEM_GROUP = FabricItemGroup.builder(new Identifier(MOD_ID, "test_group")) - * .icon(() -> new ItemStack(Items.DIAMOND)) - * .entries((enabledFeatures, entries, operatorEnabled) -> { - * entries.add(TEST_ITEM); - * }) - * .build(); + * private static final RegistryKey<ItemGroup> ITEM_GROUP = RegistryKey.of(RegistryKeys.ITEM_GROUP, new Identifier(MOD_ID, "test_group")); + * + * @Override + * public void onInitialize() { + * Registry.register(Registries.ITEM_GROUP, ITEM_GROUP, FabricItemGroup.builder() + * .displayName(Text.translatable("modid.test_group")) + * .icon(() -> new ItemStack(Items.DIAMOND)) + * .entries((context, entries) -> { + * entries.add(TEST_ITEM); + * }) + * .build() + * ); + * } * }</pre> * - * @param identifier the id of the ItemGroup, to be used as the default translation key - * @return a new {@link ItemGroup} instance + * @return a new {@link ItemGroup.Builder} instance */ - public static ItemGroup.Builder builder(Identifier identifier) { - return new FabricItemGroupBuilderImpl(identifier) - .displayName(Text.translatable("itemGroup.%s.%s".formatted(identifier.getNamespace(), identifier.getPath()))); + public static ItemGroup.Builder builder() { + return new FabricItemGroupBuilderImpl(); } } diff --git a/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/api/itemgroup/v1/IdentifiableItemGroup.java b/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/api/itemgroup/v1/IdentifiableItemGroup.java deleted file mode 100644 index 13aabe23b..000000000 --- a/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/api/itemgroup/v1/IdentifiableItemGroup.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (c) 2016, 2017, 2018, 2019 FabricMC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.fabricmc.fabric.api.itemgroup.v1; - -import net.minecraft.item.ItemGroup; -import net.minecraft.util.Identifier; - -/** - * This interface is automatically injected to {@link ItemGroup}. - */ -public interface IdentifiableItemGroup { - /** - * {@return the unique identifier of this {@link ItemGroup}}. - */ - default Identifier getId() { - throw new AssertionError("Not implemented"); - } -} diff --git a/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/api/itemgroup/v1/ItemGroupEvents.java b/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/api/itemgroup/v1/ItemGroupEvents.java index 9bebab395..e1a6a1199 100644 --- a/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/api/itemgroup/v1/ItemGroupEvents.java +++ b/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/api/itemgroup/v1/ItemGroupEvents.java @@ -18,7 +18,7 @@ package net.fabricmc.fabric.api.itemgroup.v1; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemGroups; -import net.minecraft.util.Identifier; +import net.minecraft.registry.RegistryKey; import net.fabricmc.fabric.api.event.Event; import net.fabricmc.fabric.api.event.EventFactory; @@ -26,8 +26,6 @@ import net.fabricmc.fabric.impl.itemgroup.ItemGroupEventsImpl; /** * Holds events related to {@link ItemGroups}. - * - * @see FabricItemGroup */ public final class ItemGroupEvents { private ItemGroupEvents() { @@ -36,8 +34,7 @@ public final class ItemGroupEvents { /** * This event allows the entries of any item group to be modified. * <p/> - * If you know beforehand which item group you'd like to modify, use {@link #modifyEntriesEvent(ItemGroup)} - * or {@link #modifyEntriesEvent(Identifier)} instead. + * Use {@link #modifyEntriesEvent(RegistryKey)} to get the event for a specific item group. * <p/> * This event is invoked after those two more specific events. */ @@ -47,23 +44,14 @@ public final class ItemGroupEvents { } }); - /** - * Returns the modify entries event for a specific item group. - * @param itemGroup the item group to modify - * @return the event - */ - public static Event<ModifyEntries> modifyEntriesEvent(ItemGroup itemGroup) { - return modifyEntriesEvent(itemGroup.getId()); - } - /** * Returns the modify entries event for a specific item group. This uses the group ID and * is suitable for modifying a modded item group that might not exist. - * @param groupId the ID of the item group to modify + * @param registryKey the {@link RegistryKey} of the item group to modify * @return the event */ - public static Event<ModifyEntries> modifyEntriesEvent(Identifier groupId) { - return ItemGroupEventsImpl.getOrCreateModifyEntriesEvent(groupId); + public static Event<ModifyEntries> modifyEntriesEvent(RegistryKey<ItemGroup> registryKey) { + return ItemGroupEventsImpl.getOrCreateModifyEntriesEvent(registryKey); } @FunctionalInterface diff --git a/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/impl/itemgroup/FabricItemGroup.java b/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/impl/itemgroup/FabricItemGroup.java index 0bda89940..acfb84044 100644 --- a/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/impl/itemgroup/FabricItemGroup.java +++ b/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/impl/itemgroup/FabricItemGroup.java @@ -16,12 +16,8 @@ package net.fabricmc.fabric.impl.itemgroup; -import net.minecraft.util.Identifier; - public interface FabricItemGroup { int getPage(); void setPage(int page); - - void setId(Identifier identifier); } diff --git a/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/impl/itemgroup/FabricItemGroupBuilderImpl.java b/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/impl/itemgroup/FabricItemGroupBuilderImpl.java index 86d36bc08..0b9233ced 100644 --- a/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/impl/itemgroup/FabricItemGroupBuilderImpl.java +++ b/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/impl/itemgroup/FabricItemGroupBuilderImpl.java @@ -16,26 +16,29 @@ package net.fabricmc.fabric.impl.itemgroup; -import java.util.Objects; - import net.minecraft.item.ItemGroup; -import net.minecraft.util.Identifier; +import net.minecraft.text.Text; public final class FabricItemGroupBuilderImpl extends ItemGroup.Builder { - private final Identifier identifier; + private boolean hasDisplayName = false; - public FabricItemGroupBuilderImpl(Identifier identifier) { + public FabricItemGroupBuilderImpl() { // Set when building. super(null, -1); - this.identifier = Objects.requireNonNull(identifier); + } + + @Override + public ItemGroup.Builder displayName(Text displayName) { + hasDisplayName = true; + return super.displayName(displayName); } @Override public ItemGroup build() { - final ItemGroup itemGroup = super.build(); - final FabricItemGroup fabricItemGroup = (FabricItemGroup) itemGroup; - fabricItemGroup.setId(identifier); - ItemGroupHelper.appendItemGroup(itemGroup); - return itemGroup; + if (!hasDisplayName) { + throw new IllegalStateException("No display name set for ItemGroup"); + } + + return super.build(); } } diff --git a/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/impl/itemgroup/ItemGroupEventsImpl.java b/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/impl/itemgroup/ItemGroupEventsImpl.java index e4d976d89..bbf1f48d6 100644 --- a/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/impl/itemgroup/ItemGroupEventsImpl.java +++ b/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/impl/itemgroup/ItemGroupEventsImpl.java @@ -21,22 +21,23 @@ import java.util.Map; import org.jetbrains.annotations.Nullable; -import net.minecraft.util.Identifier; +import net.minecraft.item.ItemGroup; +import net.minecraft.registry.RegistryKey; import net.fabricmc.fabric.api.event.Event; import net.fabricmc.fabric.api.event.EventFactory; import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents; public class ItemGroupEventsImpl { - private static final Map<Identifier, Event<ItemGroupEvents.ModifyEntries>> IDENTIFIER_EVENT_MAP = new HashMap<>(); + private static final Map<RegistryKey<ItemGroup>, Event<ItemGroupEvents.ModifyEntries>> ITEM_GROUP_EVENT_MAP = new HashMap<>(); - public static Event<ItemGroupEvents.ModifyEntries> getOrCreateModifyEntriesEvent(Identifier identifier) { - return IDENTIFIER_EVENT_MAP.computeIfAbsent(identifier, (g -> createModifyEvent())); + public static Event<ItemGroupEvents.ModifyEntries> getOrCreateModifyEntriesEvent(RegistryKey<ItemGroup> registryKey) { + return ITEM_GROUP_EVENT_MAP.computeIfAbsent(registryKey, (g -> createModifyEvent())); } @Nullable - public static Event<ItemGroupEvents.ModifyEntries> getModifyEntriesEvent(Identifier identifier) { - return IDENTIFIER_EVENT_MAP.get(identifier); + public static Event<ItemGroupEvents.ModifyEntries> getModifyEntriesEvent(RegistryKey<ItemGroup> registryKey) { + return ITEM_GROUP_EVENT_MAP.get(registryKey); } private static Event<ItemGroupEvents.ModifyEntries> createModifyEvent() { diff --git a/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/impl/itemgroup/ItemGroupHelper.java b/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/impl/itemgroup/ItemGroupHelper.java deleted file mode 100644 index ea2423efc..000000000 --- a/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/impl/itemgroup/ItemGroupHelper.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2016, 2017, 2018, 2019 FabricMC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.fabricmc.fabric.impl.itemgroup; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.item.ItemGroup; -import net.minecraft.item.ItemGroups; - -import net.fabricmc.fabric.mixin.itemgroup.ItemGroupsAccessor; - -public final class ItemGroupHelper { - private ItemGroupHelper() { - } - - /** - * A list of item groups, but with special groups grouped at the end. - */ - public static List<ItemGroup> sortedGroups = ItemGroups.getGroups(); - - public static void appendItemGroup(ItemGroup itemGroup) { - for (ItemGroup existingGroup : ItemGroups.getGroups()) { - if (existingGroup.getId().equals(itemGroup.getId())) { - throw new IllegalStateException("Duplicate item group: " + itemGroup.getId()); - } - } - - var itemGroups = new ArrayList<>(ItemGroups.getGroups()); - itemGroups.add(itemGroup); - - List<ItemGroup> validated = ItemGroupsAccessor.invokeCollect(itemGroups.toArray(ItemGroup[]::new)); - ItemGroupsAccessor.setGroups(validated); - sortedGroups = validated.stream().sorted((a, b) -> { - if (a.isSpecial() && !b.isSpecial()) return 1; - if (!a.isSpecial() && b.isSpecial()) return -1; - return 0; - }).toList(); - } -} diff --git a/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/impl/itemgroup/MinecraftItemGroups.java b/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/impl/itemgroup/MinecraftItemGroups.java deleted file mode 100644 index 8f2213c6e..000000000 --- a/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/impl/itemgroup/MinecraftItemGroups.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2016, 2017, 2018, 2019 FabricMC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.fabricmc.fabric.impl.itemgroup; - -import java.util.Map; - -import com.google.common.collect.ImmutableMap; - -import net.minecraft.item.ItemGroup; -import net.minecraft.item.ItemGroups; -import net.minecraft.util.Identifier; - -public final class MinecraftItemGroups { - public static final Identifier BUILDING_BLOCKS_ID = new Identifier("minecraft:building_blocks"); - public static final Identifier COLOURED_BLOCKS_ID = new Identifier("minecraft:colored_blocks"); - public static final Identifier NATURAL_ID = new Identifier("minecraft:natural"); - public static final Identifier FUNCTIONAL_ID = new Identifier("minecraft:functional"); - public static final Identifier REDSTONE_ID = new Identifier("minecraft:redstone"); - public static final Identifier HOTBAR_ID = new Identifier("minecraft:hotbar"); - public static final Identifier SEARCH_ID = new Identifier("minecraft:search"); - public static final Identifier TOOLS_ID = new Identifier("minecraft:tools"); - public static final Identifier COMBAT_ID = new Identifier("minecraft:combat"); - public static final Identifier FOOD_AND_DRINK_ID = new Identifier("minecraft:food_and_drink"); - public static final Identifier INGREDIENTS_ID = new Identifier("minecraft:ingredients"); - public static final Identifier SPAWN_EGGS_ID = new Identifier("minecraft:spawn_eggs"); - public static final Identifier OP_ID = new Identifier("minecraft:op"); - public static final Identifier INVENTORY_ID = new Identifier("minecraft:inventory"); - - public static final Map<ItemGroup, Identifier> GROUP_ID_MAP = new ImmutableMap.Builder<ItemGroup, Identifier>() - .put(ItemGroups.BUILDING_BLOCKS, MinecraftItemGroups.BUILDING_BLOCKS_ID) - .put(ItemGroups.COLORED_BLOCKS, MinecraftItemGroups.COLOURED_BLOCKS_ID) - .put(ItemGroups.NATURAL, MinecraftItemGroups.NATURAL_ID) - .put(ItemGroups.FUNCTIONAL, MinecraftItemGroups.FUNCTIONAL_ID) - .put(ItemGroups.REDSTONE, MinecraftItemGroups.REDSTONE_ID) - .put(ItemGroups.HOTBAR, MinecraftItemGroups.HOTBAR_ID) - .put(ItemGroups.SEARCH, MinecraftItemGroups.SEARCH_ID) - .put(ItemGroups.TOOLS, MinecraftItemGroups.TOOLS_ID) - .put(ItemGroups.COMBAT, MinecraftItemGroups.COMBAT_ID) - .put(ItemGroups.FOOD_AND_DRINK, MinecraftItemGroups.FOOD_AND_DRINK_ID) - .put(ItemGroups.INGREDIENTS, MinecraftItemGroups.INGREDIENTS_ID) - .put(ItemGroups.SPAWN_EGGS, MinecraftItemGroups.SPAWN_EGGS_ID) - .put(ItemGroups.OPERATOR, MinecraftItemGroups.OP_ID) - .put(ItemGroups.INVENTORY, MinecraftItemGroups.INVENTORY_ID) - .build(); - - private MinecraftItemGroups() { - } -} diff --git a/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/mixin/itemgroup/ItemGroupMixin.java b/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/mixin/itemgroup/ItemGroupMixin.java index 6c9140a87..0418ac7f4 100644 --- a/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/mixin/itemgroup/ItemGroupMixin.java +++ b/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/mixin/itemgroup/ItemGroupMixin.java @@ -20,9 +20,7 @@ import java.util.Collection; import java.util.LinkedList; import java.util.Objects; import java.util.Set; -import java.util.UUID; -import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; @@ -33,18 +31,17 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemGroups; import net.minecraft.item.ItemStack; -import net.minecraft.util.Identifier; +import net.minecraft.registry.Registries; +import net.minecraft.registry.RegistryKey; import net.fabricmc.fabric.api.event.Event; import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroupEntries; -import net.fabricmc.fabric.api.itemgroup.v1.IdentifiableItemGroup; import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents; import net.fabricmc.fabric.impl.itemgroup.FabricItemGroup; import net.fabricmc.fabric.impl.itemgroup.ItemGroupEventsImpl; -import net.fabricmc.fabric.impl.itemgroup.MinecraftItemGroups; @Mixin(ItemGroup.class) -abstract class ItemGroupMixin implements IdentifiableItemGroup, FabricItemGroup { +abstract class ItemGroupMixin implements FabricItemGroup { @Shadow private Collection<ItemStack> displayStacks; @@ -54,22 +51,16 @@ abstract class ItemGroupMixin implements IdentifiableItemGroup, FabricItemGroup @Unique private int fabric_page = -1; - @Unique - private Identifier identifier; - - @Unique - @Nullable - private UUID fabric_fallbackUUID; - @SuppressWarnings("ConstantConditions") @Inject(method = "updateEntries", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemGroup;reloadSearchProvider()V")) public void getStacks(ItemGroup.DisplayContext context, CallbackInfo ci) { - ItemGroup self = (ItemGroup) (Object) this; + final ItemGroup self = (ItemGroup) (Object) this; + final RegistryKey<ItemGroup> registryKey = Registries.ITEM_GROUP.getKey(self).orElseThrow(() -> new IllegalStateException("Unregistered item group : " + self)); // Do not modify special item groups (except Operator Blocks) at all. // Special item groups include Saved Hotbars, Search, and Survival Inventory. // Note, search gets modified as part of the parent item group. - if (self.isSpecial() && self != ItemGroups.OPERATOR) return; + if (self.isSpecial() && registryKey != ItemGroups.OPERATOR) return; // Sanity check for the injection point. It should be after these fields are set. Objects.requireNonNull(displayStacks, "displayStacks"); @@ -80,14 +71,14 @@ abstract class ItemGroupMixin implements IdentifiableItemGroup, FabricItemGroup var mutableSearchTabStacks = new LinkedList<>(searchTabStacks); var entries = new FabricItemGroupEntries(context, mutableDisplayStacks, mutableSearchTabStacks); - final Event<ItemGroupEvents.ModifyEntries> modifyEntriesEvent = ItemGroupEventsImpl.getModifyEntriesEvent(getId()); + final Event<ItemGroupEvents.ModifyEntries> modifyEntriesEvent = ItemGroupEventsImpl.getModifyEntriesEvent(registryKey); if (modifyEntriesEvent != null) { modifyEntriesEvent.invoker().modifyEntries(entries); } // Now trigger the global event - if (self != ItemGroups.OPERATOR || context.hasPermissions()) { + if (registryKey != ItemGroups.OPERATOR || context.hasPermissions()) { ItemGroupEvents.MODIFY_ENTRIES_ALL.invoker().modifyEntries(self, entries); } @@ -99,26 +90,6 @@ abstract class ItemGroupMixin implements IdentifiableItemGroup, FabricItemGroup searchTabStacks.addAll(mutableSearchTabStacks); } - @Override - public Identifier getId() { - if (this.identifier != null) { - return identifier; - } - - final Identifier vanillaId = MinecraftItemGroups.GROUP_ID_MAP.get((ItemGroup) (Object) this); - - if (vanillaId != null) { - return vanillaId; - } - - // No id known, generate a random one - if (identifier == null) { - setId(new Identifier("minecraft", "unidentified_" + UUID.randomUUID())); - } - - return identifier; - } - @Override public int getPage() { if (fabric_page < 0) { @@ -132,13 +103,4 @@ abstract class ItemGroupMixin implements IdentifiableItemGroup, FabricItemGroup public void setPage(int page) { this.fabric_page = page; } - - @Override - public void setId(Identifier identifier) { - if (this.identifier != null) { - throw new IllegalStateException("Cannot set id to (%s) as item group already has id (%s)".formatted(identifier, this.identifier)); - } - - this.identifier = identifier; - } } diff --git a/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/mixin/itemgroup/ItemGroupsAccessor.java b/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/mixin/itemgroup/ItemGroupsAccessor.java deleted file mode 100644 index 1e4b13f1b..000000000 --- a/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/mixin/itemgroup/ItemGroupsAccessor.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2016, 2017, 2018, 2019 FabricMC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.fabricmc.fabric.mixin.itemgroup; - -import java.util.List; - -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Mutable; -import org.spongepowered.asm.mixin.gen.Accessor; -import org.spongepowered.asm.mixin.gen.Invoker; - -import net.minecraft.item.ItemGroup; -import net.minecraft.item.ItemGroups; - -@Mixin(ItemGroups.class) -public interface ItemGroupsAccessor { - @Accessor("GROUPS") - @Final - @Mutable - static void setGroups(List<ItemGroup> groups) { - throw new AssertionError(); - } - - @Invoker("collect") - static List<ItemGroup> invokeCollect(ItemGroup[] groups) { - throw new AssertionError(); - } -} diff --git a/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/mixin/itemgroup/ItemGroupsMixin.java b/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/mixin/itemgroup/ItemGroupsMixin.java index 88187e46a..3caa9a660 100644 --- a/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/mixin/itemgroup/ItemGroupsMixin.java +++ b/fabric-item-group-api-v1/src/main/java/net/fabricmc/fabric/mixin/itemgroup/ItemGroupsMixin.java @@ -16,85 +16,53 @@ package net.fabricmc.fabric.mixin.itemgroup; +import static net.minecraft.item.ItemGroups.BUILDING_BLOCKS; +import static net.minecraft.item.ItemGroups.COLORED_BLOCKS; +import static net.minecraft.item.ItemGroups.COMBAT; +import static net.minecraft.item.ItemGroups.FOOD_AND_DRINK; +import static net.minecraft.item.ItemGroups.FUNCTIONAL; +import static net.minecraft.item.ItemGroups.HOTBAR; +import static net.minecraft.item.ItemGroups.INGREDIENTS; +import static net.minecraft.item.ItemGroups.INVENTORY; +import static net.minecraft.item.ItemGroups.NATURAL; +import static net.minecraft.item.ItemGroups.OPERATOR; +import static net.minecraft.item.ItemGroups.REDSTONE; +import static net.minecraft.item.ItemGroups.SEARCH; +import static net.minecraft.item.ItemGroups.SPAWN_EGGS; +import static net.minecraft.item.ItemGroups.TOOLS; + import java.util.HashMap; import java.util.List; -import java.util.Objects; -import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; 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 org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemGroups; +import net.minecraft.registry.Registries; +import net.minecraft.registry.RegistryKey; import net.fabricmc.fabric.impl.itemgroup.FabricItemGroup; @Mixin(ItemGroups.class) public class ItemGroupsMixin { - @Shadow - @Final - private static ItemGroup BUILDING_BLOCKS; - @Shadow - @Final - private static ItemGroup COLORED_BLOCKS; - @Shadow - @Final - private static ItemGroup NATURAL; - @Shadow - @Final - private static ItemGroup FUNCTIONAL; - @Shadow - @Final - private static ItemGroup REDSTONE; - @Shadow - @Final - private static ItemGroup HOTBAR; - @Shadow - @Final - private static ItemGroup SEARCH; - @Shadow - @Final - private static ItemGroup TOOLS; - @Shadow - @Final - private static ItemGroup COMBAT; - @Shadow - @Final - private static ItemGroup FOOD_AND_DRINK; - @Shadow - @Final - private static ItemGroup INGREDIENTS; - @Shadow - @Final - private static ItemGroup SPAWN_EGGS; - @Shadow - @Final - private static ItemGroup OPERATOR; - @Shadow - @Final - private static ItemGroup INVENTORY; - @Unique private static final int TABS_PER_PAGE = 10; @Inject(method = "collect", at = @At("HEAD"), cancellable = true) - private static void collect(ItemGroup[] groups, CallbackInfoReturnable<List<ItemGroup>> cir) { - final List<ItemGroup> vanillaGroups = List.of(BUILDING_BLOCKS, COLORED_BLOCKS, NATURAL, FUNCTIONAL, REDSTONE, HOTBAR, SEARCH, TOOLS, COMBAT, FOOD_AND_DRINK, INGREDIENTS, SPAWN_EGGS, OPERATOR, INVENTORY); - - for (ItemGroup vanillaGroup : vanillaGroups) { - Objects.requireNonNull(vanillaGroup); - } + private static void collect(CallbackInfo ci) { + final List<RegistryKey<ItemGroup>> vanillaGroups = List.of(BUILDING_BLOCKS, COLORED_BLOCKS, NATURAL, FUNCTIONAL, REDSTONE, HOTBAR, SEARCH, TOOLS, COMBAT, FOOD_AND_DRINK, INGREDIENTS, SPAWN_EGGS, OPERATOR, INVENTORY); int count = 0; - for (ItemGroup itemGroup : groups) { + for (RegistryKey<ItemGroup> registryKey : Registries.ITEM_GROUP.getKeys()) { + final ItemGroup itemGroup = Registries.ITEM_GROUP.getOrThrow(registryKey); final FabricItemGroup fabricItemGroup = (FabricItemGroup) itemGroup; - if (vanillaGroups.contains(itemGroup)) { + if (vanillaGroups.contains(registryKey)) { // Vanilla group goes on the first page. fabricItemGroup.setPage(0); continue; @@ -114,7 +82,8 @@ public class ItemGroupsMixin { record ItemGroupPosition(ItemGroup.Row row, int column, int page) { } var map = new HashMap<ItemGroupPosition, String>(); - for (ItemGroup itemGroup : groups) { + for (RegistryKey<ItemGroup> registryKey : Registries.ITEM_GROUP.getKeys()) { + final ItemGroup itemGroup = Registries.ITEM_GROUP.getOrThrow(registryKey); final FabricItemGroup fabricItemGroup = (FabricItemGroup) itemGroup; final String displayName = itemGroup.getDisplayName().getString(); final var position = new ItemGroupPosition(itemGroup.getRow(), itemGroup.getColumn(), fabricItemGroup.getPage()); @@ -125,6 +94,6 @@ public class ItemGroupsMixin { } } - cir.setReturnValue(List.of(groups)); + ci.cancel(); } } diff --git a/fabric-item-group-api-v1/src/main/resources/fabric-item-group-api-v1.accesswidener b/fabric-item-group-api-v1/src/main/resources/fabric-item-group-api-v1.accesswidener index b99ebd956..37fb42263 100644 --- a/fabric-item-group-api-v1/src/main/resources/fabric-item-group-api-v1.accesswidener +++ b/fabric-item-group-api-v1/src/main/resources/fabric-item-group-api-v1.accesswidener @@ -1,19 +1,19 @@ accessWidener v2 named -transitive-accessible field net/minecraft/item/ItemGroups BUILDING_BLOCKS Lnet/minecraft/item/ItemGroup; -transitive-accessible field net/minecraft/item/ItemGroups COLORED_BLOCKS Lnet/minecraft/item/ItemGroup; -transitive-accessible field net/minecraft/item/ItemGroups NATURAL Lnet/minecraft/item/ItemGroup; -transitive-accessible field net/minecraft/item/ItemGroups FUNCTIONAL Lnet/minecraft/item/ItemGroup; -transitive-accessible field net/minecraft/item/ItemGroups REDSTONE Lnet/minecraft/item/ItemGroup; -transitive-accessible field net/minecraft/item/ItemGroups HOTBAR Lnet/minecraft/item/ItemGroup; -transitive-accessible field net/minecraft/item/ItemGroups SEARCH Lnet/minecraft/item/ItemGroup; -transitive-accessible field net/minecraft/item/ItemGroups TOOLS Lnet/minecraft/item/ItemGroup; -transitive-accessible field net/minecraft/item/ItemGroups COMBAT Lnet/minecraft/item/ItemGroup; -transitive-accessible field net/minecraft/item/ItemGroups FOOD_AND_DRINK Lnet/minecraft/item/ItemGroup; -transitive-accessible field net/minecraft/item/ItemGroups INGREDIENTS Lnet/minecraft/item/ItemGroup; -transitive-accessible field net/minecraft/item/ItemGroups SPAWN_EGGS Lnet/minecraft/item/ItemGroup; -transitive-accessible field net/minecraft/item/ItemGroups OPERATOR Lnet/minecraft/item/ItemGroup; -transitive-accessible field net/minecraft/item/ItemGroups INVENTORY Lnet/minecraft/item/ItemGroup; +transitive-accessible field net/minecraft/item/ItemGroups BUILDING_BLOCKS Lnet/minecraft/registry/RegistryKey; +transitive-accessible field net/minecraft/item/ItemGroups COLORED_BLOCKS Lnet/minecraft/registry/RegistryKey; +transitive-accessible field net/minecraft/item/ItemGroups NATURAL Lnet/minecraft/registry/RegistryKey; +transitive-accessible field net/minecraft/item/ItemGroups FUNCTIONAL Lnet/minecraft/registry/RegistryKey; +transitive-accessible field net/minecraft/item/ItemGroups REDSTONE Lnet/minecraft/registry/RegistryKey; +transitive-accessible field net/minecraft/item/ItemGroups HOTBAR Lnet/minecraft/registry/RegistryKey; +transitive-accessible field net/minecraft/item/ItemGroups SEARCH Lnet/minecraft/registry/RegistryKey; +transitive-accessible field net/minecraft/item/ItemGroups TOOLS Lnet/minecraft/registry/RegistryKey; +transitive-accessible field net/minecraft/item/ItemGroups COMBAT Lnet/minecraft/registry/RegistryKey; +transitive-accessible field net/minecraft/item/ItemGroups FOOD_AND_DRINK Lnet/minecraft/registry/RegistryKey; +transitive-accessible field net/minecraft/item/ItemGroups INGREDIENTS Lnet/minecraft/registry/RegistryKey; +transitive-accessible field net/minecraft/item/ItemGroups SPAWN_EGGS Lnet/minecraft/registry/RegistryKey; +transitive-accessible field net/minecraft/item/ItemGroups OPERATOR Lnet/minecraft/registry/RegistryKey; +transitive-accessible field net/minecraft/item/ItemGroups INVENTORY Lnet/minecraft/registry/RegistryKey; accessible field net/minecraft/item/ItemGroups displayContext Lnet/minecraft/item/ItemGroup$DisplayContext; transitive-accessible class net/minecraft/item/ItemGroup$StackVisibility diff --git a/fabric-item-group-api-v1/src/main/resources/fabric-item-group-api-v1.mixins.json b/fabric-item-group-api-v1/src/main/resources/fabric-item-group-api-v1.mixins.json index d366eeb13..7f0ffba3c 100644 --- a/fabric-item-group-api-v1/src/main/resources/fabric-item-group-api-v1.mixins.json +++ b/fabric-item-group-api-v1/src/main/resources/fabric-item-group-api-v1.mixins.json @@ -4,7 +4,6 @@ "compatibilityLevel": "JAVA_17", "mixins": [ "ItemGroupAccessor", - "ItemGroupsAccessor", "ItemGroupMixin", "ItemGroupsMixin" ], diff --git a/fabric-item-group-api-v1/src/main/resources/fabric.mod.json b/fabric-item-group-api-v1/src/main/resources/fabric.mod.json index dbcba828d..429c8b58c 100644 --- a/fabric-item-group-api-v1/src/main/resources/fabric.mod.json +++ b/fabric-item-group-api-v1/src/main/resources/fabric.mod.json @@ -30,9 +30,6 @@ ], "accessWidener": "fabric-item-group-api-v1.accesswidener", "custom": { - "fabric-api:module-lifecycle": "stable", - "loom:injected_interfaces": { - "net/minecraft/class_1761": ["net/fabricmc/fabric/api/itemgroup/v1/IdentifiableItemGroup"] - } + "fabric-api:module-lifecycle": "stable" } } diff --git a/fabric-item-group-api-v1/src/testmod/java/net/fabricmc/fabric/test/item/group/ItemGroupTest.java b/fabric-item-group-api-v1/src/testmod/java/net/fabricmc/fabric/test/item/group/ItemGroupTest.java index 298814709..338bf03d2 100644 --- a/fabric-item-group-api-v1/src/testmod/java/net/fabricmc/fabric/test/item/group/ItemGroupTest.java +++ b/fabric-item-group-api-v1/src/testmod/java/net/fabricmc/fabric/test/item/group/ItemGroupTest.java @@ -16,8 +16,6 @@ package net.fabricmc.fabric.test.item.group; -import java.util.Objects; - import com.google.common.base.Supplier; import net.minecraft.block.Blocks; @@ -28,6 +26,8 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.Items; import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; +import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.RegistryKeys; import net.minecraft.text.Text; import net.minecraft.util.Identifier; @@ -39,22 +39,23 @@ public class ItemGroupTest implements ModInitializer { private static final String MOD_ID = "fabric-item-group-api-v1-testmod"; private static Item TEST_ITEM; - //Adds an item group with all items in it - private static final ItemGroup ITEM_GROUP = FabricItemGroup.builder(new Identifier(MOD_ID, "test_group")) - .displayName(Text.literal("Test Item Group")) - .icon(() -> new ItemStack(Items.DIAMOND)) - .entries((context, entries) -> { - entries.addAll(Registries.ITEM.stream() - .map(ItemStack::new) - .filter(input -> !input.isEmpty()) - .toList()); - }) - .build(); + private static final RegistryKey<ItemGroup> ITEM_GROUP = RegistryKey.of(RegistryKeys.ITEM_GROUP, new Identifier(MOD_ID, "test_group")); @Override public void onInitialize() { TEST_ITEM = Registry.register(Registries.ITEM, new Identifier("fabric-item-groups-v0-testmod", "item_test_group"), new Item(new Item.Settings())); + Registry.register(Registries.ITEM_GROUP, ITEM_GROUP, FabricItemGroup.builder() + .displayName(Text.literal("Test Item Group")) + .icon(() -> new ItemStack(Items.DIAMOND)) + .entries((context, entries) -> { + entries.addAll(Registries.ITEM.stream() + .map(ItemStack::new) + .filter(input -> !input.isEmpty()) + .toList()); + }) + .build()); + ItemGroupEvents.modifyEntriesEvent(ItemGroups.BUILDING_BLOCKS).register((content) -> { content.add(TEST_ITEM); @@ -79,7 +80,8 @@ public class ItemGroupTest implements ModInitializer { for (int i = 0; i < 100; i++) { final int index = i; - FabricItemGroup.builder(new Identifier(MOD_ID, "test_group_" + i)) + + Registry.register(Registries.ITEM_GROUP, new Identifier(MOD_ID, "test_group_" + i), FabricItemGroup.builder() .displayName(Text.literal("Test Item Group: " + i)) .icon((Supplier<ItemStack>) () -> new ItemStack(Registries.BLOCK.get(index))) .entries((context, entries) -> { @@ -89,10 +91,15 @@ public class ItemGroupTest implements ModInitializer { entries.add(itemStack); } }) - .build(); + .build()); } - assert Objects.equals(ItemGroups.HOTBAR.getId().toString(), "minecraft:hotbar"); - assert Objects.equals(ITEM_GROUP.getId().toString(), "fabric-item-group-api-v1-testmod:test_group"); + try { + // Test to make sure that item groups must have a display name. + FabricItemGroup.builder().build(); + throw new AssertionError(); + } catch (IllegalStateException ignored) { + // Ignored + } } } diff --git a/fabric-loot-api-v2/src/main/java/net/fabricmc/fabric/mixin/loot/LootManagerMixin.java b/fabric-loot-api-v2/src/main/java/net/fabricmc/fabric/mixin/loot/LootManagerMixin.java index 0796e09b1..aa684722b 100644 --- a/fabric-loot-api-v2/src/main/java/net/fabricmc/fabric/mixin/loot/LootManagerMixin.java +++ b/fabric-loot-api-v2/src/main/java/net/fabricmc/fabric/mixin/loot/LootManagerMixin.java @@ -28,7 +28,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import net.minecraft.class_8488; +import net.minecraft.loot.LootDataKey; import net.minecraft.loot.LootManager; import net.minecraft.loot.LootTable; import net.minecraft.resource.ResourceManager; @@ -46,7 +46,7 @@ import net.fabricmc.fabric.impl.loot.LootUtil; @Mixin(LootManager.class) abstract class LootManagerMixin { @Shadow - private Map<class_8488<?>, ?> field_44492; + private Map<LootDataKey<?>, ?> keyToValue; @Inject(method = "reload", at = @At("RETURN"), cancellable = true) private void reload(ResourceReloader.Synchronizer synchronizer, ResourceManager manager, Profiler prepareProfiler, Profiler applyProfiler, Executor prepareExecutor, Executor applyExecutor, CallbackInfoReturnable<CompletableFuture<Void>> cir) { @@ -59,25 +59,25 @@ abstract class LootManagerMixin { private void applyLootTableEvents(ResourceManager resourceManager, LootManager lootManager) { // The builder for the new LootManager.tables map with modified loot tables. // We're using an immutable map to match vanilla. - ImmutableMap.Builder<class_8488<?>, Object> newTables = ImmutableMap.builder(); + ImmutableMap.Builder<LootDataKey<?>, Object> newTables = ImmutableMap.builder(); - this.field_44492.forEach((id, entry) -> { - if (id == LootManager.field_44491) { + this.keyToValue.forEach((dataKey, entry) -> { + if (dataKey == LootManager.EMPTY_LOOT_TABLE) { // This is a special table and cannot be modified. // Vanilla also warns about that. - newTables.put(id, entry); + newTables.put(dataKey, entry); return; } if (!(entry instanceof LootTable table)) { // We only want to modify loot tables - newTables.put(id, entry); + newTables.put(dataKey, entry); return; } - LootTableSource source = LootUtil.determineSource(id.location(), resourceManager); + LootTableSource source = LootUtil.determineSource(dataKey.id(), resourceManager); // Invoke the REPLACE event for the current loot table. - LootTable replacement = LootTableEvents.REPLACE.invoker().replaceLootTable(resourceManager, lootManager, id.location(), table, source); + LootTable replacement = LootTableEvents.REPLACE.invoker().replaceLootTable(resourceManager, lootManager, dataKey.id(), table, source); if (replacement != null) { // Set the loot table to MODIFY to be the replacement loot table. @@ -88,12 +88,12 @@ abstract class LootManagerMixin { // Turn the current table into a modifiable builder and invoke the MODIFY event. LootTable.Builder builder = FabricLootTableBuilder.copyOf(table); - LootTableEvents.MODIFY.invoker().modifyLootTable(resourceManager, lootManager, id.location(), builder, source); + LootTableEvents.MODIFY.invoker().modifyLootTable(resourceManager, lootManager, dataKey.id(), builder, source); // Turn the builder back into a loot table and store it in the new table. - newTables.put(id, builder.build()); + newTables.put(dataKey, builder.build()); }); - this.field_44492 = newTables.build(); + this.keyToValue = newTables.build(); } } diff --git a/fabric-mining-level-api-v1/src/testmod/java/net/fabricmc/fabric/test/mininglevel/MiningLevelTest.java b/fabric-mining-level-api-v1/src/testmod/java/net/fabricmc/fabric/test/mininglevel/MiningLevelTest.java index d7f5677b3..472dff571 100644 --- a/fabric-mining-level-api-v1/src/testmod/java/net/fabricmc/fabric/test/mininglevel/MiningLevelTest.java +++ b/fabric-mining-level-api-v1/src/testmod/java/net/fabricmc/fabric/test/mininglevel/MiningLevelTest.java @@ -47,21 +47,21 @@ public final class MiningLevelTest implements ModInitializer { /// Tagged blocks // sword + dynamic mining level tag - public static final Block NEEDS_NETHERITE_SWORD = new Block(AbstractBlock.Settings.of(Material.STONE).strength(2, 3).requiresTool()); + public static final Block NEEDS_NETHERITE_SWORD = new Block(AbstractBlock.Settings.of(Material.GENERIC).strength(2, 3).requiresTool()); // sword + vanilla mining level tag - public static final Block NEEDS_STONE_SWORD = new Block(AbstractBlock.Settings.of(Material.STONE).strength(2, 3).requiresTool()); + public static final Block NEEDS_STONE_SWORD = new Block(AbstractBlock.Settings.of(Material.GENERIC).strength(2, 3).requiresTool()); // any sword - public static final Block NEEDS_ANY_SWORD = new Block(AbstractBlock.Settings.of(Material.STONE).strength(2, 3).requiresTool()); + public static final Block NEEDS_ANY_SWORD = new Block(AbstractBlock.Settings.of(Material.GENERIC).strength(2, 3).requiresTool()); // shears - public static final Block NEEDS_SHEARS = new Block(AbstractBlock.Settings.of(Material.STONE).strength(2, 3).requiresTool()); + public static final Block NEEDS_SHEARS = new Block(AbstractBlock.Settings.of(Material.GENERIC).strength(2, 3).requiresTool()); // vanilla mineable tag + dynamic mining level tag - public static final Block NEEDS_NETHERITE_PICKAXE = new Block(AbstractBlock.Settings.of(Material.STONE).strength(2, 3).requiresTool()); + public static final Block NEEDS_NETHERITE_PICKAXE = new Block(AbstractBlock.Settings.of(Material.GENERIC).strength(2, 3).requiresTool()); // vanilla mineable tag, requires tool (this type of block doesn't exist in vanilla) - public static final Block NEEDS_AXE = new Block(AbstractBlock.Settings.of(Material.STONE).strength(2, 3).requiresTool()); + public static final Block NEEDS_AXE = new Block(AbstractBlock.Settings.of(Material.GENERIC).strength(2, 3).requiresTool()); // vanilla mineable tag, requires tool (this type of block doesn't exist in vanilla) - public static final Block NEEDS_HOE = new Block(AbstractBlock.Settings.of(Material.STONE).strength(2, 3).requiresTool()); + public static final Block NEEDS_HOE = new Block(AbstractBlock.Settings.of(Material.GENERIC).strength(2, 3).requiresTool()); // vanilla mineable tag, requires tool (this type of block doesn't exist in vanilla) - public static final Block NEEDS_SHOVEL = new Block(AbstractBlock.Settings.of(Material.STONE).strength(2, 3).requiresTool()); + public static final Block NEEDS_SHOVEL = new Block(AbstractBlock.Settings.of(Material.GENERIC).strength(2, 3).requiresTool()); @Override public void onInitialize() { diff --git a/fabric-networking-api-v1/src/testmod/java/net/fabricmc/fabric/test/networking/channeltest/ChannelList.java b/fabric-networking-api-v1/src/testmod/java/net/fabricmc/fabric/test/networking/channeltest/ChannelList.java index 838a7308c..1a5cca6cd 100644 --- a/fabric-networking-api-v1/src/testmod/java/net/fabricmc/fabric/test/networking/channeltest/ChannelList.java +++ b/fabric-networking-api-v1/src/testmod/java/net/fabricmc/fabric/test/networking/channeltest/ChannelList.java @@ -17,9 +17,9 @@ package net.fabricmc.fabric.test.networking.channeltest; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder; import net.minecraft.client.gui.widget.EntryListWidget; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; import net.minecraft.util.Formatting; import net.minecraft.util.Identifier; @@ -51,8 +51,8 @@ final class ChannelList extends EntryListWidget<ChannelList.Entry> { } @Override - public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { - ChannelList.this.client.textRenderer.draw(matrices, Text.literal(this.channel.toString()), x, y, Formatting.WHITE.getColorValue()); + public void render(DrawableHelper drawableHelper, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { + drawableHelper.method_51438(ChannelList.this.client.textRenderer, Text.literal(this.channel.toString()).formatted(Formatting.WHITE), x, y); } } } diff --git a/fabric-networking-api-v1/src/testmod/java/net/fabricmc/fabric/test/networking/channeltest/ChannelScreen.java b/fabric-networking-api-v1/src/testmod/java/net/fabricmc/fabric/test/networking/channeltest/ChannelScreen.java index a82741b84..1627a9b63 100644 --- a/fabric-networking-api-v1/src/testmod/java/net/fabricmc/fabric/test/networking/channeltest/ChannelScreen.java +++ b/fabric-networking-api-v1/src/testmod/java/net/fabricmc/fabric/test/networking/channeltest/ChannelScreen.java @@ -16,10 +16,10 @@ package net.fabricmc.fabric.test.networking.channeltest; +import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.tooltip.Tooltip; import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; import net.minecraft.util.Formatting; import net.minecraft.util.Identifier; @@ -58,22 +58,20 @@ final class ChannelScreen extends Screen { } @Override - public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { - this.renderBackgroundTexture(matrices); - this.channelList.render(matrices, mouseX, mouseY, delta); - super.render(matrices, mouseX, mouseY, delta); + public void render(DrawableHelper drawableHelper, int mouseX, int mouseY, float delta) { + this.renderBackgroundTexture(drawableHelper); + this.channelList.render(drawableHelper, mouseX, mouseY, delta); + super.render(drawableHelper, mouseX, mouseY, delta); if (this.s2cButton.active && this.c2sButton.active) { - final Text clickMe = Text.literal("Click S2C or C2S to view supported channels"); + final Text clickMe = Text.literal("Click S2C or C2S to view supported channels").formatted(Formatting.YELLOW); final int textWidth = this.textRenderer.getWidth(clickMe); - //noinspection ConstantConditions - this.textRenderer.draw( - matrices, + drawableHelper.method_51438( + this.textRenderer, clickMe, - this.width / 2.0F - (textWidth / 2.0F), - 60, - Formatting.YELLOW.getColorValue() + (int) (this.width / 2.0F - (textWidth / 2.0F)), + 60 ); } } diff --git a/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/api/object/builder/v1/block/FabricMaterialBuilder.java b/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/api/object/builder/v1/block/FabricMaterialBuilder.java deleted file mode 100644 index 5b969b8f4..000000000 --- a/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/api/object/builder/v1/block/FabricMaterialBuilder.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2016, 2017, 2018, 2019 FabricMC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.fabricmc.fabric.api.object.builder.v1.block; - -import net.minecraft.block.MapColor; -import net.minecraft.block.Material; -import net.minecraft.util.DyeColor; - -import net.fabricmc.fabric.mixin.object.builder.MaterialBuilderAccessor; - -public class FabricMaterialBuilder extends Material.Builder { - public FabricMaterialBuilder(MapColor color) { - super(color); - } - - public FabricMaterialBuilder(DyeColor color) { - this(color.getMapColor()); - } - - public FabricMaterialBuilder lightPassesThrough() { - ((MaterialBuilderAccessor) this).invokeLightPassesThrough(); - return this; - } - - @Override - public FabricMaterialBuilder allowsMovement() { - super.allowsMovement(); - return this; - } - - @Override - public FabricMaterialBuilder notSolid() { - super.notSolid(); - return this; - } - - @Override - public FabricMaterialBuilder replaceable() { - super.replaceable(); - return this; - } -} diff --git a/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/mixin/object/builder/MaterialBuilderAccessor.java b/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/mixin/object/builder/MaterialBuilderAccessor.java deleted file mode 100644 index 1fac90c2a..000000000 --- a/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/mixin/object/builder/MaterialBuilderAccessor.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright (c) 2016, 2017, 2018, 2019 FabricMC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.fabricmc.fabric.mixin.object.builder; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Invoker; - -import net.minecraft.block.Material; - -@Mixin(Material.Builder.class) -public interface MaterialBuilderAccessor { - @Invoker - Material.Builder invokeLightPassesThrough(); -} diff --git a/fabric-object-builder-api-v1/src/main/resources/fabric-object-builder-v1.mixins.json b/fabric-object-builder-api-v1/src/main/resources/fabric-object-builder-v1.mixins.json index 597c657ef..1f92b1196 100644 --- a/fabric-object-builder-api-v1/src/main/resources/fabric-object-builder-v1.mixins.json +++ b/fabric-object-builder-api-v1/src/main/resources/fabric-object-builder-v1.mixins.json @@ -9,7 +9,6 @@ "DefaultAttributeRegistryAccessor", "DefaultAttributeRegistryMixin", "DetectorRailBlockMixin", - "MaterialBuilderAccessor", "TradeOffersTypeAwareBuyForOneEmeraldFactoryMixin" ], "injectors": { diff --git a/fabric-registry-sync-v0/src/client/java/net/fabricmc/fabric/mixin/registry/sync/client/MinecraftClientMixin.java b/fabric-registry-sync-v0/src/client/java/net/fabricmc/fabric/mixin/registry/sync/client/MinecraftClientMixin.java index b3a621f6c..5d3de75d2 100644 --- a/fabric-registry-sync-v0/src/client/java/net/fabricmc/fabric/mixin/registry/sync/client/MinecraftClientMixin.java +++ b/fabric-registry-sync-v0/src/client/java/net/fabricmc/fabric/mixin/registry/sync/client/MinecraftClientMixin.java @@ -26,6 +26,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.Screen; +import net.minecraft.item.ItemGroups; import net.minecraft.registry.Registries; import net.fabricmc.fabric.impl.registry.sync.RegistrySyncManager; @@ -53,5 +54,6 @@ public class MinecraftClientMixin { FABRIC_LOGGER.debug("Freezing registries"); Registries.bootstrap(); BlockInitTracker.postFreeze(); + ItemGroups.collect(); } } diff --git a/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/mixin/registry/sync/MinecraftServerMixin.java b/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/mixin/registry/sync/MinecraftServerMixin.java index f7c9604bb..f48f9e5a2 100644 --- a/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/mixin/registry/sync/MinecraftServerMixin.java +++ b/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/mixin/registry/sync/MinecraftServerMixin.java @@ -24,8 +24,9 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import net.minecraft.server.MinecraftServer; +import net.minecraft.item.ItemGroups; import net.minecraft.registry.Registries; +import net.minecraft.server.MinecraftServer; import net.fabricmc.api.EnvType; import net.fabricmc.fabric.impl.registry.sync.trackers.vanilla.BlockInitTracker; @@ -44,6 +45,7 @@ public class MinecraftServerMixin { Registries.bootstrap(); BlockInitTracker.postFreeze(); + ItemGroups.collect(); } } } diff --git a/fabric-registry-sync-v0/src/testmod/java/net/fabricmc/fabric/test/registry/sync/RegistrySyncTest.java b/fabric-registry-sync-v0/src/testmod/java/net/fabricmc/fabric/test/registry/sync/RegistrySyncTest.java index ce61d08da..b0f13861a 100644 --- a/fabric-registry-sync-v0/src/testmod/java/net/fabricmc/fabric/test/registry/sync/RegistrySyncTest.java +++ b/fabric-registry-sync-v0/src/testmod/java/net/fabricmc/fabric/test/registry/sync/RegistrySyncTest.java @@ -132,7 +132,7 @@ public class RegistrySyncTest implements ModInitializer { private static void registerBlocks(String namespace, int amount, int startingId) { for (int i = 0; i < amount; i++) { - Block block = new Block(AbstractBlock.Settings.of(Material.STONE)); + Block block = new Block(AbstractBlock.Settings.of(Material.GENERIC)); Registry.register(Registries.BLOCK, new Identifier(namespace, "block_" + (i + startingId)), block); if (REGISTER_ITEMS) { diff --git a/fabric-renderer-api-v1/src/testmod/java/net/fabricmc/fabric/test/renderer/simple/RendererTest.java b/fabric-renderer-api-v1/src/testmod/java/net/fabricmc/fabric/test/renderer/simple/RendererTest.java index c772022a9..13a2e7aa5 100644 --- a/fabric-renderer-api-v1/src/testmod/java/net/fabricmc/fabric/test/renderer/simple/RendererTest.java +++ b/fabric-renderer-api-v1/src/testmod/java/net/fabricmc/fabric/test/renderer/simple/RendererTest.java @@ -45,7 +45,7 @@ public final class RendererTest implements ModInitializer { public static final BlockEntityType<FrameBlockEntity> FRAME_BLOCK_ENTITY = FabricBlockEntityTypeBuilder.create(FrameBlockEntity::new, FRAMES).build(null); public static final Identifier PILLAR_ID = id("pillar"); - public static final Block PILLAR = new Block(FabricBlockSettings.of(Material.STONE)); + public static final Block PILLAR = new Block(FabricBlockSettings.of(Material.GENERIC)); @Override public void onInitialize() { diff --git a/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/HudRenderCallback.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/HudRenderCallback.java index 2770c6c44..743fec173 100644 --- a/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/HudRenderCallback.java +++ b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/HudRenderCallback.java @@ -16,7 +16,7 @@ package net.fabricmc.fabric.api.client.rendering.v1; -import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.client.gui.DrawableHelper; import net.fabricmc.fabric.api.event.Event; import net.fabricmc.fabric.api.event.EventFactory; @@ -31,8 +31,8 @@ public interface HudRenderCallback { /** * Called after rendering the whole hud, which is displayed in game, in a world. * - * @param matrixStack the matrixStack + * @param drawableHelper the {@link DrawableHelper} instance * @param tickDelta Progress for linearly interpolating between the previous and current game state */ - void onHudRender(MatrixStack matrixStack, float tickDelta); + void onHudRender(DrawableHelper drawableHelper, float tickDelta); } diff --git a/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/ScreenMixin.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/DrawableHelperMixin.java similarity index 89% rename from fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/ScreenMixin.java rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/DrawableHelperMixin.java index 3666df150..90fbf0a2e 100644 --- a/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/ScreenMixin.java +++ b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/DrawableHelperMixin.java @@ -23,16 +23,16 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.gui.tooltip.TooltipComponent; import net.minecraft.client.item.TooltipData; import net.fabricmc.fabric.api.client.rendering.v1.TooltipComponentCallback; -@Mixin(Screen.class) -public class ScreenMixin { +@Mixin(DrawableHelper.class) +public class DrawableHelperMixin { // Synthetic lambda body in renderTooltip - @Inject(at = @At("HEAD"), method = "method_32635(Ljava/util/List;Lnet/minecraft/client/item/TooltipData;)V", cancellable = true) + @Inject(at = @At("HEAD"), method = "method_51442(Ljava/util/List;Lnet/minecraft/client/item/TooltipData;)V", cancellable = true) private static void injectRenderTooltipLambda(List<TooltipComponent> components, TooltipData data, CallbackInfo ci) { TooltipComponent component = TooltipComponentCallback.EVENT.invoker().getComponent(data); diff --git a/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/InGameHudMixin.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/InGameHudMixin.java index 6f96f660b..7225ef33b 100644 --- a/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/InGameHudMixin.java +++ b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/InGameHudMixin.java @@ -22,15 +22,15 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Slice; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.gui.hud.InGameHud; import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback; @Mixin(InGameHud.class) public class InGameHudMixin { - @Inject(method = "render", at = @At(value = "TAIL"), slice = @Slice(from = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/hud/PlayerListHud;render(Lnet/minecraft/client/util/math/MatrixStack;ILnet/minecraft/scoreboard/Scoreboard;Lnet/minecraft/scoreboard/ScoreboardObjective;)V"))) - public void render(MatrixStack matrixStack, float tickDelta, CallbackInfo callbackInfo) { - HudRenderCallback.EVENT.invoker().onHudRender(matrixStack, tickDelta); + @Inject(method = "render", at = @At(value = "TAIL"), slice = @Slice(from = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/hud/PlayerListHud;render(Lnet/minecraft/client/gui/DrawableHelper;ILnet/minecraft/scoreboard/Scoreboard;Lnet/minecraft/scoreboard/ScoreboardObjective;)V"))) + public void render(DrawableHelper drawableHelper, float tickDelta, CallbackInfo callbackInfo) { + HudRenderCallback.EVENT.invoker().onHudRender(drawableHelper, tickDelta); } } diff --git a/fabric-rendering-v1/src/client/resources/fabric-rendering-v1.mixins.json b/fabric-rendering-v1/src/client/resources/fabric-rendering-v1.mixins.json index 9e3fa01d7..b6c1e08f9 100644 --- a/fabric-rendering-v1/src/client/resources/fabric-rendering-v1.mixins.json +++ b/fabric-rendering-v1/src/client/resources/fabric-rendering-v1.mixins.json @@ -15,7 +15,7 @@ "LivingEntityRendererAccessor", "BlockEntityRendererFactoriesMixin", "EntityRenderersMixin", - "ScreenMixin", + "DrawableHelperMixin", "DimensionEffectsAccessor", "shader.GameRendererMixin", "shader.ShaderProgramImportProcessorMixin", diff --git a/fabric-rendering-v1/src/testmod/java/net/fabricmc/fabric/test/rendering/client/HudAndShaderTest.java b/fabric-rendering-v1/src/testmod/java/net/fabricmc/fabric/test/rendering/client/HudAndShaderTest.java index 986d664e1..c7448dd91 100644 --- a/fabric-rendering-v1/src/testmod/java/net/fabricmc/fabric/test/rendering/client/HudAndShaderTest.java +++ b/fabric-rendering-v1/src/testmod/java/net/fabricmc/fabric/test/rendering/client/HudAndShaderTest.java @@ -48,14 +48,14 @@ public class HudAndShaderTest implements ClientModInitializer { context.register(id, VertexFormats.POSITION, program -> testShader = program); }); - HudRenderCallback.EVENT.register((matrices, tickDelta) -> { + HudRenderCallback.EVENT.register((drawableHelper, tickDelta) -> { MinecraftClient client = MinecraftClient.getInstance(); Window window = client.getWindow(); int x = window.getScaledWidth() - 15; int y = window.getScaledHeight() - 15; RenderSystem.setShader(() -> testShader); RenderSystem.setShaderColor(0f, 1f, 0f, 1f); - Matrix4f positionMatrix = matrices.peek().getPositionMatrix(); + Matrix4f positionMatrix = drawableHelper.method_51448().peek().getPositionMatrix(); BufferBuilder buffer = Tessellator.getInstance().getBuffer(); buffer.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION); buffer.vertex(positionMatrix, x, y, 50).next(); diff --git a/fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/api/client/screen/v1/ScreenEvents.java b/fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/api/client/screen/v1/ScreenEvents.java index 33be5e91c..927efb24c 100644 --- a/fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/api/client/screen/v1/ScreenEvents.java +++ b/fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/api/client/screen/v1/ScreenEvents.java @@ -19,8 +19,8 @@ package net.fabricmc.fabric.api.client.screen.v1; import java.util.Objects; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.util.math.MatrixStack; import net.fabricmc.fabric.api.event.Event; import net.fabricmc.fabric.api.event.EventFactory; @@ -91,7 +91,7 @@ public final class ScreenEvents { * }</pre> * * <p>Note that by adding an element to a screen, the element is not automatically {@link net.minecraft.client.gui.Drawable drawn}. - * Unless the element is button, you need to call the specific {@link net.minecraft.client.gui.Drawable#render(MatrixStack, int, int, float) render} methods in the corresponding screen events. + * Unless the element is button, you need to call the specific {@link net.minecraft.client.gui.Drawable#render(DrawableHelper, int, int, float) render} methods in the corresponding screen events. * * <p>This event can also indicate that the previous screen has been closed. * @see ScreenEvents#BEFORE_INIT @@ -176,12 +176,12 @@ public final class ScreenEvents { @FunctionalInterface public interface BeforeRender { - void beforeRender(Screen screen, MatrixStack matrices, int mouseX, int mouseY, float tickDelta); + void beforeRender(Screen screen, DrawableHelper drawableHelper, int mouseX, int mouseY, float tickDelta); } @FunctionalInterface public interface AfterRender { - void afterRender(Screen screen, MatrixStack matrices, int mouseX, int mouseY, float tickDelta); + void afterRender(Screen screen, DrawableHelper drawableHelper, int mouseX, int mouseY, float tickDelta); } @FunctionalInterface diff --git a/fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/api/client/screen/v1/Screens.java b/fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/api/client/screen/v1/Screens.java index ed878d520..07155cd93 100644 --- a/fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/api/client/screen/v1/Screens.java +++ b/fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/api/client/screen/v1/Screens.java @@ -23,7 +23,6 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.widget.ClickableWidget; -import net.minecraft.client.render.item.ItemRenderer; import net.fabricmc.fabric.impl.client.screen.ScreenExtensions; import net.fabricmc.fabric.mixin.screen.ScreenAccessor; @@ -47,17 +46,6 @@ public final class Screens { return ScreenExtensions.getExtensions(screen).fabric_getButtons(); } - /** - * Gets a screen's item renderer. - * - * @return the screen's item renderer - */ - public static ItemRenderer getItemRenderer(Screen screen) { - Objects.requireNonNull(screen, "Screen cannot be null"); - - return ((ScreenAccessor) screen).getItemRenderer(); - } - /** * Gets a screen's text renderer. * diff --git a/fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/mixin/screen/GameRendererMixin.java b/fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/mixin/screen/GameRendererMixin.java index d21bd662f..1a1d1983b 100644 --- a/fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/mixin/screen/GameRendererMixin.java +++ b/fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/mixin/screen/GameRendererMixin.java @@ -26,6 +26,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.LocalCapture; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.render.GameRenderer; import net.minecraft.client.util.math.MatrixStack; @@ -41,18 +42,18 @@ abstract class GameRendererMixin { @Unique private Screen renderingScreen; - @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/Screen;renderWithTooltip(Lnet/minecraft/client/util/math/MatrixStack;IIF)V"), locals = LocalCapture.CAPTURE_FAILEXCEPTION) - private void onBeforeRenderScreen(float tickDelta, long startTime, boolean tick, CallbackInfo ci, int mouseX, int mouseY, MatrixStack matrices) { + @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/Screen;renderWithTooltip(Lnet/minecraft/client/gui/DrawableHelper;IIF)V"), locals = LocalCapture.CAPTURE_FAILEXCEPTION) + private void onBeforeRenderScreen(float tickDelta, long startTime, boolean tick, CallbackInfo ci, int mouseX, int mouseY, MatrixStack matrixStack, DrawableHelper drawableHelper) { // Store the screen in a variable in case someone tries to change the screen during this before render event. // If someone changes the screen, the after render event will likely have class cast exceptions or an NPE. this.renderingScreen = this.client.currentScreen; - ScreenEvents.beforeRender(this.renderingScreen).invoker().beforeRender(this.renderingScreen, matrices, mouseX, mouseY, tickDelta); + ScreenEvents.beforeRender(this.renderingScreen).invoker().beforeRender(this.renderingScreen, drawableHelper, mouseX, mouseY, tickDelta); } // This injection should end up in the try block so exceptions are caught - @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/Screen;renderWithTooltip(Lnet/minecraft/client/util/math/MatrixStack;IIF)V", shift = At.Shift.AFTER), locals = LocalCapture.CAPTURE_FAILEXCEPTION) - private void onAfterRenderScreen(float tickDelta, long startTime, boolean tick, CallbackInfo ci, int mouseX, int mouseY, MatrixStack matrices) { - ScreenEvents.afterRender(this.renderingScreen).invoker().afterRender(this.renderingScreen, matrices, mouseX, mouseY, tickDelta); + @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/Screen;renderWithTooltip(Lnet/minecraft/client/gui/DrawableHelper;IIF)V", shift = At.Shift.AFTER), locals = LocalCapture.CAPTURE_FAILEXCEPTION) + private void onAfterRenderScreen(float tickDelta, long startTime, boolean tick, CallbackInfo ci, int mouseX, int mouseY, MatrixStack matrixStack, DrawableHelper drawableHelper) { + ScreenEvents.afterRender(this.renderingScreen).invoker().afterRender(this.renderingScreen, drawableHelper, mouseX, mouseY, tickDelta); // Finally set the currently rendering screen to null this.renderingScreen = null; } diff --git a/fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/mixin/screen/ScreenAccessor.java b/fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/mixin/screen/ScreenAccessor.java index 6f4de1e9f..c029e754d 100644 --- a/fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/mixin/screen/ScreenAccessor.java +++ b/fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/mixin/screen/ScreenAccessor.java @@ -22,13 +22,9 @@ import org.spongepowered.asm.mixin.gen.Accessor; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.render.item.ItemRenderer; @Mixin(Screen.class) public interface ScreenAccessor { - @Accessor - ItemRenderer getItemRenderer(); - @Accessor TextRenderer getTextRenderer(); diff --git a/fabric-screen-api-v1/src/testmod/java/net/fabricmc/fabric/test/screen/ScreenTests.java b/fabric-screen-api-v1/src/testmod/java/net/fabricmc/fabric/test/screen/ScreenTests.java index 85cd77733..0e65cec8f 100644 --- a/fabric-screen-api-v1/src/testmod/java/net/fabricmc/fabric/test/screen/ScreenTests.java +++ b/fabric-screen-api-v1/src/testmod/java/net/fabricmc/fabric/test/screen/ScreenTests.java @@ -18,16 +18,14 @@ package net.fabricmc.fabric.test.screen; import java.util.List; -import com.mojang.blaze3d.systems.RenderSystem; -import org.slf4j.LoggerFactory; import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawableHelper; -import net.minecraft.client.gui.hud.InGameHud; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.TitleScreen; import net.minecraft.client.gui.widget.ClickableWidget; +import net.minecraft.util.Identifier; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.EnvType; @@ -38,6 +36,7 @@ import net.fabricmc.fabric.api.client.screen.v1.Screens; @Environment(EnvType.CLIENT) public final class ScreenTests implements ClientModInitializer { + public static final Identifier GUI_ICONS_TEXTURE = new Identifier("textures/gui/icons.png"); private static final Logger LOGGER = LoggerFactory.getLogger("FabricScreenApiTests"); @Override @@ -78,10 +77,9 @@ public final class ScreenTests implements ClientModInitializer { .orElseThrow(() -> new AssertionError("Failed to find the \"Stop Sound\" button in the screen's elements")); // Register render event to draw an icon on the screen - ScreenEvents.afterRender(screen).register((_screen, matrices, mouseX, mouseY, tickDelta) -> { + ScreenEvents.afterRender(screen).register((_screen, drawableHelper, mouseX, mouseY, tickDelta) -> { // Render an armor icon to test - RenderSystem.setShaderTexture(0, InGameHud.GUI_ICONS_TEXTURE); - DrawableHelper.drawTexture(matrices, (screen.width / 2) - 124, (screen.height / 4) + 96, 20, 20, 34, 9, 9, 9, 256, 256); + drawableHelper.drawTexture(ScreenTests.GUI_ICONS_TEXTURE, (screen.width / 2) - 124, (screen.height / 4) + 96, 20, 20, 34, 9, 9, 9, 256, 256); }); ScreenKeyboardEvents.allowKeyPress(screen).register((_screen, key, scancode, modifiers) -> { diff --git a/fabric-screen-api-v1/src/testmod/java/net/fabricmc/fabric/test/screen/StopSoundButton.java b/fabric-screen-api-v1/src/testmod/java/net/fabricmc/fabric/test/screen/StopSoundButton.java index 34ce142b6..d8390f203 100644 --- a/fabric-screen-api-v1/src/testmod/java/net/fabricmc/fabric/test/screen/StopSoundButton.java +++ b/fabric-screen-api-v1/src/testmod/java/net/fabricmc/fabric/test/screen/StopSoundButton.java @@ -16,17 +16,15 @@ package net.fabricmc.fabric.test.screen; -import com.mojang.blaze3d.systems.RenderSystem; - import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawableHelper; -import net.minecraft.client.gui.hud.InGameHud; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder; import net.minecraft.client.gui.widget.PressableWidget; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; +import net.fabricmc.fabric.api.client.screen.v1.Screens; + class StopSoundButton extends PressableWidget { private final Screen screen; @@ -36,13 +34,12 @@ class StopSoundButton extends PressableWidget { } @Override - public void render(MatrixStack matrices, int mouseX, int mouseY, float tickDelta) { + public void render(DrawableHelper drawableHelper, int mouseX, int mouseY, float tickDelta) { // Render the armor icon to test - RenderSystem.setShaderTexture(0, InGameHud.GUI_ICONS_TEXTURE); - DrawableHelper.drawTexture(matrices, this.getX(), this.getY(), this.width, this.height, 43, 27, 9, 9, 256, 256); + drawableHelper.drawTexture(ScreenTests.GUI_ICONS_TEXTURE, this.getX(), this.getY(), this.width, this.height, 43, 27, 9, 9, 256, 256); if (this.isMouseOver(mouseX, mouseY)) { - this.screen.renderTooltip(matrices, Text.literal("Click to stop all sounds"), this.getX(), this.getY()); + drawableHelper.method_51438(Screens.getTextRenderer(this.screen), Text.literal("Click to stop all sounds"), this.getX(), this.getY()); } } diff --git a/fabric-screen-handler-api-v1/src/testmod/java/net/fabricmc/fabric/test/screenhandler/client/PositionedScreen.java b/fabric-screen-handler-api-v1/src/testmod/java/net/fabricmc/fabric/test/screenhandler/client/PositionedScreen.java index ec3b361a2..c24b0aa32 100644 --- a/fabric-screen-handler-api-v1/src/testmod/java/net/fabricmc/fabric/test/screenhandler/client/PositionedScreen.java +++ b/fabric-screen-handler-api-v1/src/testmod/java/net/fabricmc/fabric/test/screenhandler/client/PositionedScreen.java @@ -20,8 +20,8 @@ import java.util.Optional; import com.mojang.blaze3d.systems.RenderSystem; +import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.gui.screen.ingame.HandledScreen; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.screen.ScreenHandler; import net.minecraft.text.Text; @@ -47,10 +47,10 @@ public class PositionedScreen extends HandledScreen<ScreenHandler> { } @Override - public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { - renderBackground(matrices); - super.render(matrices, mouseX, mouseY, delta); - drawMouseoverTooltip(matrices, mouseX, mouseY); + public void render(DrawableHelper drawableHelper, int mouseX, int mouseY, float delta) { + renderBackground(drawableHelper); + super.render(drawableHelper, mouseX, mouseY, delta); + drawMouseoverTooltip(drawableHelper, mouseX, mouseY); } @Override @@ -61,11 +61,10 @@ public class PositionedScreen extends HandledScreen<ScreenHandler> { } @Override - protected void drawBackground(MatrixStack matrices, float delta, int mouseX, int mouseY) { + protected void drawBackground(DrawableHelper drawableHelper, float delta, int mouseX, int mouseY) { RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); - RenderSystem.setShaderTexture(0, TEXTURE); int x = (width - backgroundWidth) / 2; int y = (height - backgroundHeight) / 2; - drawTexture(matrices, x, y, 0, 0, backgroundWidth, backgroundHeight); + drawableHelper.drawTexture(TEXTURE, x, y, 0, 0, backgroundWidth, backgroundHeight); } } diff --git a/fabric-transfer-api-v1/src/testmod/java/net/fabricmc/fabric/test/transfer/ingame/FluidChuteBlock.java b/fabric-transfer-api-v1/src/testmod/java/net/fabricmc/fabric/test/transfer/ingame/FluidChuteBlock.java index 0a061a35d..9e473b2db 100644 --- a/fabric-transfer-api-v1/src/testmod/java/net/fabricmc/fabric/test/transfer/ingame/FluidChuteBlock.java +++ b/fabric-transfer-api-v1/src/testmod/java/net/fabricmc/fabric/test/transfer/ingame/FluidChuteBlock.java @@ -42,7 +42,7 @@ import net.fabricmc.fabric.api.transfer.v1.fluid.FluidVariantAttributes; public class FluidChuteBlock extends Block implements BlockEntityProvider { public FluidChuteBlock() { - super(Settings.of(Material.field_44489)); + super(Settings.of(Material.GENERIC)); } private static final VoxelShape SHAPE = VoxelShapes.cuboid( diff --git a/fabric-transfer-api-v1/src/testmod/java/net/fabricmc/fabric/test/transfer/ingame/TransferTestInitializer.java b/fabric-transfer-api-v1/src/testmod/java/net/fabricmc/fabric/test/transfer/ingame/TransferTestInitializer.java index 0c4635511..1fa1e3b61 100644 --- a/fabric-transfer-api-v1/src/testmod/java/net/fabricmc/fabric/test/transfer/ingame/TransferTestInitializer.java +++ b/fabric-transfer-api-v1/src/testmod/java/net/fabricmc/fabric/test/transfer/ingame/TransferTestInitializer.java @@ -35,8 +35,8 @@ import net.fabricmc.fabric.api.transfer.v1.item.ItemStorage; public class TransferTestInitializer implements ModInitializer { public static final String MOD_ID = "fabric-transfer-api-v1-testmod"; - private static final Block INFINITE_WATER_SOURCE = new Block(AbstractBlock.Settings.of(Material.field_44483)); - private static final Block INFINITE_LAVA_SOURCE = new Block(AbstractBlock.Settings.of(Material.field_44483)); + private static final Block INFINITE_WATER_SOURCE = new Block(AbstractBlock.Settings.of(Material.GENERIC)); + private static final Block INFINITE_LAVA_SOURCE = new Block(AbstractBlock.Settings.of(Material.GENERIC)); private static final Block FLUID_CHUTE = new FluidChuteBlock(); private static final Item EXTRACT_STICK = new ExtractStickItem(); public static BlockEntityType<FluidChuteBlockEntity> FLUID_CHUTE_TYPE; diff --git a/fabric-transfer-api-v1/src/testmod/java/net/fabricmc/fabric/test/transfer/ingame/client/FluidVariantRenderTest.java b/fabric-transfer-api-v1/src/testmod/java/net/fabricmc/fabric/test/transfer/ingame/client/FluidVariantRenderTest.java index ddf72b9e3..cb69350b8 100644 --- a/fabric-transfer-api-v1/src/testmod/java/net/fabricmc/fabric/test/transfer/ingame/client/FluidVariantRenderTest.java +++ b/fabric-transfer-api-v1/src/testmod/java/net/fabricmc/fabric/test/transfer/ingame/client/FluidVariantRenderTest.java @@ -23,6 +23,7 @@ import org.joml.Matrix4f; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gui.DrawableHelper; import net.minecraft.client.render.BufferBuilder; import net.minecraft.client.render.BufferRenderer; import net.minecraft.client.render.GameRenderer; @@ -31,7 +32,6 @@ import net.minecraft.client.render.VertexFormat; import net.minecraft.client.render.VertexFormats; import net.minecraft.client.texture.Sprite; import net.minecraft.client.texture.SpriteAtlasTexture; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.fluid.Fluids; import net.minecraft.text.Text; @@ -50,7 +50,7 @@ public class FluidVariantRenderTest implements ClientModInitializer { public void onInitializeClient() { FluidVariantAttributes.enableColoredVanillaFluidNames(); - HudRenderCallback.EVENT.register((matrices, tickDelta) -> { + HudRenderCallback.EVENT.register((drawableHelper, tickDelta) -> { PlayerEntity player = MinecraftClient.getInstance().player; if (player == null) return; @@ -64,9 +64,9 @@ public class FluidVariantRenderTest implements ClientModInitializer { int color = FluidVariantRendering.getColor(variant, player.world, player.getBlockPos()); if (sprites != null) { - drawFluidInGui(matrices, sprites[0], color, 0, renderY); + drawFluidInGui(drawableHelper, sprites[0], color, 0, renderY); renderY += 16; - drawFluidInGui(matrices, sprites[1], color, 0, renderY); + drawFluidInGui(drawableHelper, sprites[1], color, 0, renderY); renderY += 16; } @@ -76,14 +76,14 @@ public class FluidVariantRenderTest implements ClientModInitializer { renderY += 2; for (Text line : tooltip) { - textRenderer.draw(matrices, line, 4, renderY, -1); renderY += 10; + drawableHelper.method_51438(textRenderer, line, -8, renderY); } } }); } - private static void drawFluidInGui(MatrixStack ms, Sprite sprite, int color, int i, int j) { + private static void drawFluidInGui(DrawableHelper drawableHelper, Sprite sprite, int color, int i, int j) { if (sprite == null) return; RenderSystem.setShaderTexture(0, SpriteAtlasTexture.BLOCK_ATLAS_TEXTURE); @@ -105,7 +105,7 @@ public class FluidVariantRenderTest implements ClientModInitializer { float v0 = sprite.getMinV(); float u1 = sprite.getMaxU(); float v1 = sprite.getMaxV(); - Matrix4f model = ms.peek().getPositionMatrix(); + Matrix4f model = drawableHelper.method_51448().peek().getPositionMatrix(); bufferBuilder.vertex(model, x0, y1, z).color(r, g, b, 1).texture(u0, v1).next(); bufferBuilder.vertex(model, x1, y1, z).color(r, g, b, 1).texture(u1, v1).next(); bufferBuilder.vertex(model, x1, y0, z).color(r, g, b, 1).texture(u1, v0).next(); diff --git a/gradle.properties b/gradle.properties index e43075956..2c4e2b48f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,9 +2,9 @@ org.gradle.jvmargs=-Xmx2560M org.gradle.parallel=true fabric.loom.multiProjectOptimisation=true -version=0.78.0 -minecraft_version=23w14a -yarn_version=+build.1 +version=0.78.1 +minecraft_version=23w16a +yarn_version=+build.4 loader_version=0.14.18 installer_version=0.11.1 @@ -12,52 +12,52 @@ prerelease=true # Do not manually update, use the bumpversions task: fabric-api-base-version=0.4.23 -fabric-api-lookup-api-v1-version=1.6.25 +fabric-api-lookup-api-v1-version=1.6.26 fabric-biome-api-v1-version=13.0.6 fabric-block-api-v1-version=1.0.5 fabric-blockrenderlayer-v1-version=1.1.33 fabric-command-api-v1-version=1.2.26 fabric-command-api-v2-version=2.2.5 fabric-commands-v0-version=0.2.43 -fabric-containers-v0-version=0.1.54 -fabric-content-registries-v0-version=3.5.8 +fabric-containers-v0-version=0.1.55 +fabric-content-registries-v0-version=4.0.0 fabric-crash-report-info-v1-version=0.2.14 -fabric-data-generation-api-v1-version=11.3.10 +fabric-data-generation-api-v1-version=12.0.0 fabric-dimensions-v1-version=2.1.44 -fabric-entity-events-v1-version=1.5.13 +fabric-entity-events-v1-version=1.5.14 fabric-events-interaction-v0-version=0.4.42 -fabric-events-lifecycle-v0-version=0.2.52 -fabric-game-rule-api-v1-version=1.0.32 +fabric-events-lifecycle-v0-version=0.2.53 +fabric-game-rule-api-v1-version=1.0.33 fabric-gametest-api-v1-version=1.2.3 -fabric-item-api-v1-version=2.1.17 -fabric-item-group-api-v1-version=3.0.4 +fabric-item-api-v1-version=2.1.18 +fabric-item-group-api-v1-version=4.0.0 fabric-key-binding-api-v1-version=1.0.32 fabric-keybindings-v0-version=0.2.30 fabric-lifecycle-events-v1-version=2.2.14 -fabric-loot-api-v2-version=1.1.28 -fabric-loot-tables-v1-version=1.1.32 +fabric-loot-api-v2-version=1.1.29 +fabric-loot-tables-v1-version=1.1.33 fabric-message-api-v1-version=5.1.0 -fabric-mining-level-api-v1-version=2.1.38 +fabric-mining-level-api-v1-version=2.1.39 fabric-models-v0-version=0.3.29 -fabric-networking-api-v1-version=1.3.1 -fabric-networking-v0-version=0.3.41 -fabric-object-builder-api-v1-version=9.0.1 +fabric-networking-api-v1-version=1.3.2 +fabric-networking-v0-version=0.3.42 +fabric-object-builder-api-v1-version=10.0.0 fabric-particles-v1-version=1.0.22 -fabric-recipe-api-v1-version=1.0.8 -fabric-registry-sync-v0-version=2.1.4 -fabric-renderer-api-v1-version=2.2.4 -fabric-renderer-indigo-version=1.1.0 -fabric-renderer-registries-v1-version=3.2.37 +fabric-recipe-api-v1-version=1.0.9 +fabric-registry-sync-v0-version=2.1.5 +fabric-renderer-api-v1-version=2.2.5 +fabric-renderer-indigo-version=1.1.1 +fabric-renderer-registries-v1-version=3.2.38 fabric-rendering-data-attachment-v1-version=0.3.27 fabric-rendering-fluids-v1-version=3.0.20 -fabric-rendering-v0-version=1.1.40 -fabric-rendering-v1-version=2.1.0 +fabric-rendering-v0-version=1.1.41 +fabric-rendering-v1-version=3.0.0 fabric-resource-conditions-api-v1-version=2.3.0 fabric-resource-loader-v0-version=0.11.1 -fabric-screen-api-v1-version=1.0.44 -fabric-screen-handler-api-v1-version=1.3.20 +fabric-screen-api-v1-version=2.0.0 +fabric-screen-handler-api-v1-version=1.3.21 fabric-sound-api-v1-version=1.0.8 -fabric-transfer-api-v1-version=3.1.0 -fabric-transitive-access-wideners-v1-version=4.0.0 +fabric-transfer-api-v1-version=3.1.1 +fabric-transitive-access-wideners-v1-version=4.0.1 fabric-convention-tags-v1-version=1.4.0 fabric-client-tags-api-v1-version=1.0.14