diff --git a/common/src/main/java/me/shedaniel/architectury/registry/BlockEntityRenderers.java b/common/src/main/java/me/shedaniel/architectury/registry/BlockEntityRenderers.java index 45d91b7e..fce3a163 100644 --- a/common/src/main/java/me/shedaniel/architectury/registry/BlockEntityRenderers.java +++ b/common/src/main/java/me/shedaniel/architectury/registry/BlockEntityRenderers.java @@ -34,7 +34,7 @@ public final class BlockEntityRenderers { private BlockEntityRenderers() {} @ExpectPlatform - public static void registerRenderer(BlockEntityType type, Function> provider) { + public static void registerRenderer(BlockEntityType type, Function> provider) { throw new AssertionError(); } } diff --git a/common/src/main/java/me/shedaniel/architectury/registry/fuel/FuelRegistry.java b/common/src/main/java/me/shedaniel/architectury/registry/fuel/FuelRegistry.java new file mode 100644 index 00000000..b2b0a0dd --- /dev/null +++ b/common/src/main/java/me/shedaniel/architectury/registry/fuel/FuelRegistry.java @@ -0,0 +1,51 @@ +/* + * This file is part of architectury. + * Copyright (C) 2020, 2021 architectury + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package me.shedaniel.architectury.registry.fuel; + +import me.shedaniel.architectury.annotations.ExpectPlatform; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.ItemLike; + +public final class FuelRegistry { + private FuelRegistry() {} + + /** + * Registers a burn time for items. + * + * @param time the new burn time, use {@code 0} for non-fuel items, + * and {@code -1} to use vanilla logic + * @param items the array of items to register for + */ + @ExpectPlatform + public static void register(int time, ItemLike... items) { + throw new AssertionError(); + } + + /** + * Returns the burn time of an {@link ItemStack}. + * + * @param stack the stack + * @return the burn time of the stack, returns {@code 0} if not a fuel + */ + @ExpectPlatform + public static int get(ItemStack stack) { + throw new AssertionError(); + } +} diff --git a/fabric/src/main/java/me/shedaniel/architectury/registry/fabric/BlockEntityRenderersImpl.java b/fabric/src/main/java/me/shedaniel/architectury/registry/fabric/BlockEntityRenderersImpl.java index c61e0d8e..0f9ac2b8 100644 --- a/fabric/src/main/java/me/shedaniel/architectury/registry/fabric/BlockEntityRenderersImpl.java +++ b/fabric/src/main/java/me/shedaniel/architectury/registry/fabric/BlockEntityRenderersImpl.java @@ -28,7 +28,7 @@ import net.minecraft.world.level.block.entity.BlockEntityType; import java.util.function.Function; public class BlockEntityRenderersImpl { - public static void registerRenderer(BlockEntityType type, Function> provider) { + public static void registerRenderer(BlockEntityType type, Function> provider) { BlockEntityRendererRegistry.INSTANCE.register(type, provider); } } diff --git a/fabric/src/main/java/me/shedaniel/architectury/registry/fuel/fabric/FuelRegistryImpl.java b/fabric/src/main/java/me/shedaniel/architectury/registry/fuel/fabric/FuelRegistryImpl.java new file mode 100644 index 00000000..e0981f55 --- /dev/null +++ b/fabric/src/main/java/me/shedaniel/architectury/registry/fuel/fabric/FuelRegistryImpl.java @@ -0,0 +1,41 @@ +/* + * This file is part of architectury. + * Copyright (C) 2020, 2021 architectury + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package me.shedaniel.architectury.registry.fuel.fabric; + +import net.fabricmc.fabric.api.registry.FuelRegistry; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.ItemLike; + +public class FuelRegistryImpl { + public static void register(int time, ItemLike... items) { + for (ItemLike item : items) { + if (time >= 0) { + FuelRegistry.INSTANCE.add(item, time); + } else { + FuelRegistry.INSTANCE.remove(item); + } + } + } + + public static int get(ItemStack stack) { + Integer time = FuelRegistry.INSTANCE.get(stack.getItem()); + return time == null ? 0 : time; + } +} diff --git a/forge/src/main/java/me/shedaniel/architectury/registry/forge/BlockEntityRenderersImpl.java b/forge/src/main/java/me/shedaniel/architectury/registry/forge/BlockEntityRenderersImpl.java index 109b784c..3bdd56b0 100644 --- a/forge/src/main/java/me/shedaniel/architectury/registry/forge/BlockEntityRenderersImpl.java +++ b/forge/src/main/java/me/shedaniel/architectury/registry/forge/BlockEntityRenderersImpl.java @@ -28,7 +28,7 @@ import net.minecraftforge.fml.client.registry.ClientRegistry; import java.util.function.Function; public class BlockEntityRenderersImpl { - public static void registerRenderer(BlockEntityType type, Function> provider) { + public static void registerRenderer(BlockEntityType type, Function> provider) { ClientRegistry.bindTileEntityRenderer(type, provider); } } diff --git a/forge/src/main/java/me/shedaniel/architectury/registry/fuel/forge/FuelRegistryImpl.java b/forge/src/main/java/me/shedaniel/architectury/registry/fuel/forge/FuelRegistryImpl.java new file mode 100644 index 00000000..aae8ee5b --- /dev/null +++ b/forge/src/main/java/me/shedaniel/architectury/registry/fuel/forge/FuelRegistryImpl.java @@ -0,0 +1,56 @@ +/* + * This file is part of architectury. + * Copyright (C) 2020, 2021 architectury + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package me.shedaniel.architectury.registry.fuel.forge; + +import it.unimi.dsi.fastutil.objects.Object2IntLinkedOpenHashMap; +import it.unimi.dsi.fastutil.objects.Object2IntMap; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.ItemLike; +import net.minecraftforge.common.ForgeHooks; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.furnace.FurnaceFuelBurnTimeEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; + +public class FuelRegistryImpl { + private static final Object2IntMap ITEMS = new Object2IntLinkedOpenHashMap<>(); + + static { + MinecraftForge.EVENT_BUS.register(FuelRegistryImpl.class); + } + + public static void register(int time, ItemLike... items) { + for (ItemLike item : items) { + ITEMS.put(item, time); + } + } + + public static int get(ItemStack stack) { + return ForgeHooks.getBurnTime(stack); + } + + @SubscribeEvent + public static void event(FurnaceFuelBurnTimeEvent event) { + if (event.getItemStack().isEmpty()) return; + int time = ITEMS.getOrDefault(event.getItemStack().getItem(), Integer.MIN_VALUE); + if (time != Integer.MIN_VALUE) { + event.setBurnTime(time); + } + } +} diff --git a/gradle.properties b/gradle.properties index b438a099..2d278f6f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,11 +6,11 @@ supported_version=1.16.4/5 archives_base_name=architectury archives_base_name_snapshot=architectury-snapshot -base_version=1.12 +base_version=1.13 maven_group=me.shedaniel fabric_loader_version=0.11.1 -fabric_api_version=0.30.3+1.16 +fabric_api_version=0.34.2+1.16 mod_menu_version=1.14.6+ forge_version=36.0.42