From 982f0bbbd7564b6f292a0890dd862149d9f710a9 Mon Sep 17 00:00:00 2001 From: Uko Kokņevičs Date: Wed, 10 Jan 2024 00:26:04 +0100 Subject: Some refactoring --- src/main/java/lv/enes/mc/eris_alchemy/EMC.java | 12 +- .../java/lv/enes/mc/eris_alchemy/ErisAlchemy.java | 24 ++-- .../lv/enes/mc/eris_alchemy/ErisAlchemyItems.java | 44 ------ .../enes/mc/eris_alchemy/ErisAlchemyRegistry.java | 147 +++++++++++++++++++++ .../eris_alchemy/block/AlchemicalChestBlock.java | 53 ++++++-- .../mc/eris_alchemy/block/ErisAlchemyBlocks.java | 29 ---- .../block/entity/AlchemicalChestBlockEntity.java | 14 +- .../block/entity/ErisAlchemyBlockEntities.java | 33 ----- .../mc/eris_alchemy/client/ErisAlchemyClient.java | 17 +-- .../client/ErisAlchemyClientRegistry.java | 116 ++++++++++++++++ .../mc/eris_alchemy/menu/AlchemicalChestMenu.java | 3 +- .../mc/eris_alchemy/menu/ErisAlchemyMenus.java | 29 ---- .../mc/eris_alchemy/mixin/client/SheetsMixin.java | 13 +- .../mc/eris_alchemy/recipe/CovalenceRepair.java | 15 ++- .../recipe/ErisAlchemyRecipeSerializers.java | 27 ---- 15 files changed, 366 insertions(+), 210 deletions(-) delete mode 100644 src/main/java/lv/enes/mc/eris_alchemy/ErisAlchemyItems.java create mode 100644 src/main/java/lv/enes/mc/eris_alchemy/ErisAlchemyRegistry.java delete mode 100644 src/main/java/lv/enes/mc/eris_alchemy/block/ErisAlchemyBlocks.java delete mode 100644 src/main/java/lv/enes/mc/eris_alchemy/block/entity/ErisAlchemyBlockEntities.java create mode 100644 src/main/java/lv/enes/mc/eris_alchemy/client/ErisAlchemyClientRegistry.java delete mode 100644 src/main/java/lv/enes/mc/eris_alchemy/menu/ErisAlchemyMenus.java delete mode 100644 src/main/java/lv/enes/mc/eris_alchemy/recipe/ErisAlchemyRecipeSerializers.java (limited to 'src/main/java') diff --git a/src/main/java/lv/enes/mc/eris_alchemy/EMC.java b/src/main/java/lv/enes/mc/eris_alchemy/EMC.java index b8d5557..e34d28f 100644 --- a/src/main/java/lv/enes/mc/eris_alchemy/EMC.java +++ b/src/main/java/lv/enes/mc/eris_alchemy/EMC.java @@ -154,7 +154,11 @@ public class EMC { return res; } - private OptionalDouble calculateEmcForRecipe(List recipes, Set configured, SimplifiedRecipe recipe) { + private OptionalDouble calculateEmcForRecipe( + List recipes, + Set configured, + SimplifiedRecipe recipe + ) { try { if (recipe.inputs.isEmpty()) { return OptionalDouble.empty(); @@ -191,7 +195,11 @@ public class EMC { } } - private OptionalDouble calculateEmcForIngredient(List recipes, Set configured, Ingredient ingredient) { + private OptionalDouble calculateEmcForIngredient( + List recipes, + Set configured, + Ingredient ingredient + ) { return Arrays.stream(ingredient.getItems()) .map(stack -> configEmc(recipes, configured, stack.getItem()).stream() .map(x -> x * stack.getCount()) diff --git a/src/main/java/lv/enes/mc/eris_alchemy/ErisAlchemy.java b/src/main/java/lv/enes/mc/eris_alchemy/ErisAlchemy.java index 83cef8c..bb804b3 100644 --- a/src/main/java/lv/enes/mc/eris_alchemy/ErisAlchemy.java +++ b/src/main/java/lv/enes/mc/eris_alchemy/ErisAlchemy.java @@ -1,9 +1,5 @@ package lv.enes.mc.eris_alchemy; -import lv.enes.mc.eris_alchemy.block.ErisAlchemyBlocks; -import lv.enes.mc.eris_alchemy.block.entity.ErisAlchemyBlockEntities; -import lv.enes.mc.eris_alchemy.menu.ErisAlchemyMenus; -import lv.enes.mc.eris_alchemy.recipe.ErisAlchemyRecipeSerializers; import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup; import net.minecraft.core.Registry; import net.minecraft.core.registries.BuiltInRegistries; @@ -21,9 +17,11 @@ public class ErisAlchemy implements ModInitializer { public static final Logger LOGGER = LoggerFactory.getLogger(ID); public static final CreativeModeTab ITEM_GROUP = FabricItemGroup.builder() - .icon(() -> new ItemStack(ErisAlchemyItems.LOW_COVALENCE_DUST)) + .icon(() -> new ItemStack(ErisAlchemyRegistry.Items.LOW_COVALENCE_DUST)) .title(Component.translatable("itemGroup.eris_alchemy.item_group")) - .displayItems((context, entries) -> ErisAlchemyItems.consumeItems((id, item) -> entries.accept(item))) + .displayItems( + (context, entries) -> ErisAlchemyRegistry.Items.consume((id, item) -> entries.accept(item)) + ) .build(); @Override @@ -35,10 +33,14 @@ public class ErisAlchemy implements ModInitializer { Registry.register(BuiltInRegistries.CREATIVE_MODE_TAB, new ResourceLocation(ID, "item_group"), ITEM_GROUP); - ErisAlchemyBlocks.consumeBlocks((id, block) -> Registry.register(BuiltInRegistries.BLOCK, id, block)); - ErisAlchemyBlockEntities.consumeBlockEntities((id, block) -> Registry.register(BuiltInRegistries.BLOCK_ENTITY_TYPE, id, block)); - ErisAlchemyItems.consumeItems((id, item) -> Registry.register(BuiltInRegistries.ITEM, id, item)); - ErisAlchemyMenus.consumeMenus((id, menu) -> Registry.register(BuiltInRegistries.MENU, id, menu)); - ErisAlchemyRecipeSerializers.consumeSerializers((id, serializer) -> Registry.register(BuiltInRegistries.RECIPE_SERIALIZER, id, serializer)); + ErisAlchemyRegistry.BlockEntities.consume( + (id, block) -> Registry.register(BuiltInRegistries.BLOCK_ENTITY_TYPE, id, block) + ); + ErisAlchemyRegistry.Blocks.consume((id, block) -> Registry.register(BuiltInRegistries.BLOCK, id, block)); + ErisAlchemyRegistry.Items.consume((id, item) -> Registry.register(BuiltInRegistries.ITEM, id, item)); + ErisAlchemyRegistry.Menus.consume((id, menu) -> Registry.register(BuiltInRegistries.MENU, id, menu)); + ErisAlchemyRegistry.RecipeSerializers.consume( + (id, serializer) -> Registry.register(BuiltInRegistries.RECIPE_SERIALIZER, id, serializer) + ); } } diff --git a/src/main/java/lv/enes/mc/eris_alchemy/ErisAlchemyItems.java b/src/main/java/lv/enes/mc/eris_alchemy/ErisAlchemyItems.java deleted file mode 100644 index 21bcc7f..0000000 --- a/src/main/java/lv/enes/mc/eris_alchemy/ErisAlchemyItems.java +++ /dev/null @@ -1,44 +0,0 @@ -package lv.enes.mc.eris_alchemy; - -import lv.enes.mc.eris_alchemy.block.ErisAlchemyBlocks; -import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.Rarity; -import net.minecraft.world.level.block.Block; -import org.quiltmc.qsl.item.setting.api.QuiltItemSettings; - -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.function.BiConsumer; - -public final class ErisAlchemyItems { - private static final Map items = new LinkedHashMap<>(); - - public static final Item ALCHEMICAL_CHEST = register(ErisAlchemyBlocks.ALCHEMICAL_CHEST, new QuiltItemSettings().rarity(Rarity.RARE)); - public static final Item LOW_COVALENCE_DUST = register("low_covalence_dust", new Item(new QuiltItemSettings().rarity(Rarity.COMMON))); - @SuppressWarnings("unused") - public static final Item MEDIUM_COVALENCE_DUST = register("medium_covalence_dust", new Item(new QuiltItemSettings().rarity(Rarity.UNCOMMON))); - @SuppressWarnings("unused") - public static final Item HIGH_COVALENCE_DUST = register("high_covalence_dust", new Item(new QuiltItemSettings().rarity(Rarity.RARE))); - - public static void consumeItems(BiConsumer consumer) { - items.forEach(consumer); - } - - private static BlockItem register(Block block, QuiltItemSettings settings) { - return register(BuiltInRegistries.BLOCK.getKey(block), new BlockItem(block, settings)); - } - - private static T register(String id, T item) { - return register(new ResourceLocation(ErisAlchemy.ID, id), item); - } - - private static T register(ResourceLocation id, T item) { - items.putIfAbsent(id, item); - return item; - } - - private ErisAlchemyItems() {} -} diff --git a/src/main/java/lv/enes/mc/eris_alchemy/ErisAlchemyRegistry.java b/src/main/java/lv/enes/mc/eris_alchemy/ErisAlchemyRegistry.java new file mode 100644 index 0000000..c02a1e6 --- /dev/null +++ b/src/main/java/lv/enes/mc/eris_alchemy/ErisAlchemyRegistry.java @@ -0,0 +1,147 @@ +package lv.enes.mc.eris_alchemy; + +import lv.enes.mc.eris_alchemy.block.AlchemicalChestBlock; +import lv.enes.mc.eris_alchemy.block.entity.AlchemicalChestBlockEntity; +import lv.enes.mc.eris_alchemy.menu.AlchemicalChestMenu; +import lv.enes.mc.eris_alchemy.recipe.CovalenceRepair; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.flag.FeatureFlags; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Rarity; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import org.quiltmc.qsl.block.entity.api.QuiltBlockEntityTypeBuilder; +import org.quiltmc.qsl.block.extensions.api.QuiltBlockSettings; +import org.quiltmc.qsl.item.setting.api.QuiltItemSettings; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.function.BiConsumer; + +import static net.minecraft.world.level.block.Blocks.ENDER_CHEST; + +public final class ErisAlchemyRegistry { + private ErisAlchemyRegistry() {} + + public static final class BlockEntities { + private BlockEntities() {} + + private static final Map> data = new LinkedHashMap<>(); + + public static final BlockEntityType ALCHEMICAL_CHEST = register( + "alchemical_chest", + QuiltBlockEntityTypeBuilder.create(AlchemicalChestBlockEntity::new, Blocks.ALCHEMICAL_CHEST) + .build() + ); + + public static void consume(BiConsumer> consumer) { + data.forEach(consumer); + } + + private static BlockEntityType register(String id, BlockEntityType type) { + data.put(new ResourceLocation(ErisAlchemy.ID, id), type); + return type; + } + } + + public static final class Blocks { + private Blocks() {} + + private static final Map data = new LinkedHashMap<>(); + + public static final AlchemicalChestBlock ALCHEMICAL_CHEST = register( + "alchemical_chest", + new AlchemicalChestBlock(QuiltBlockSettings.copy(ENDER_CHEST)) + ); + + public static void consume(BiConsumer consumer) { + data.forEach(consumer); + } + + private static T register(String id, T block) { + data.put(new ResourceLocation(ErisAlchemy.ID, id), block); + return block; + } + } + + public static final class Items { + private Items() {} + + private static final Map data = new LinkedHashMap<>(); + + public static final Item ALCHEMICAL_CHEST = + register(Blocks.ALCHEMICAL_CHEST, new QuiltItemSettings().rarity(Rarity.RARE)); + public static final Item LOW_COVALENCE_DUST = + register("low_covalence_dust", new Item(new QuiltItemSettings().rarity(Rarity.COMMON))); + @SuppressWarnings("unused") + public static final Item MEDIUM_COVALENCE_DUST = + register("medium_covalence_dust", new Item(new QuiltItemSettings().rarity(Rarity.UNCOMMON))); + @SuppressWarnings("unused") + public static final Item HIGH_COVALENCE_DUST = + register("high_covalence_dust", new Item(new QuiltItemSettings().rarity(Rarity.RARE))); + + public static void consume(BiConsumer consumer) { + data.forEach(consumer); + } + + private static BlockItem register(Block block, QuiltItemSettings settings) { + return register(BuiltInRegistries.BLOCK.getKey(block), new BlockItem(block, settings)); + } + + private static T register(String id, T item) { + return register(new ResourceLocation(ErisAlchemy.ID, id), item); + } + + private static T register(ResourceLocation id, T item) { + data.put(id, item); + return item; + } + } + + public static final class Menus { + private Menus() {} + + private static final Map> data = new LinkedHashMap<>(); + + public static final MenuType ALCHEMICAL_CHEST = + register("alchemy_chest", AlchemicalChestMenu::new); + + public static void consume(BiConsumer> consumer) { + data.forEach(consumer); + } + + private static MenuType register( + String id, + MenuType.MenuSupplier supplier + ) { + var menuType = new MenuType<>(supplier, FeatureFlags.VANILLA_SET); + data.put(new ResourceLocation(ErisAlchemy.ID, id), menuType); + return menuType; + } + } + + public static final class RecipeSerializers { + private RecipeSerializers() {} + + private static final Map> data = new LinkedHashMap<>(); + + public static final RecipeSerializer COVALENCE_REPAIR = + register("covalence_repair", new CovalenceRepair.Serializer()); + + public static void consume(BiConsumer> consumer) { + data.forEach(consumer); + } + + private static > RecipeSerializer register(String id, RecipeSerializer serializer) { + data.put(new ResourceLocation(ErisAlchemy.ID, id), serializer); + return serializer; + } + } +} diff --git a/src/main/java/lv/enes/mc/eris_alchemy/block/AlchemicalChestBlock.java b/src/main/java/lv/enes/mc/eris_alchemy/block/AlchemicalChestBlock.java index 9a3b413..1d8698a 100644 --- a/src/main/java/lv/enes/mc/eris_alchemy/block/AlchemicalChestBlock.java +++ b/src/main/java/lv/enes/mc/eris_alchemy/block/AlchemicalChestBlock.java @@ -2,8 +2,8 @@ package lv.enes.mc.eris_alchemy.block; import jakarta.annotation.Nonnull; import jakarta.annotation.Nullable; +import lv.enes.mc.eris_alchemy.ErisAlchemyRegistry; import lv.enes.mc.eris_alchemy.block.entity.AlchemicalChestBlockEntity; -import lv.enes.mc.eris_alchemy.block.entity.ErisAlchemyBlockEntities; import lv.enes.mc.eris_alchemy.menu.AlchemicalChestMenu; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -32,12 +32,18 @@ import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; -public class AlchemicalChestBlock extends AbstractChestBlock implements SimpleWaterloggedBlock { +public class AlchemicalChestBlock + extends AbstractChestBlock + implements SimpleWaterloggedBlock +{ public static final DirectionProperty FACING = BlockStateProperties.HORIZONTAL_FACING; public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; public static final Component CONTAINER_TITLE = Component.translatable("container.eris_alchemy.alchemical_chest"); - public static final VoxelShape SHAPE = Block.box(1.0, 0.0, 1.0, 15.0, 14.0, 15.0); + public static final VoxelShape SHAPE = Block.box( + 1.0, 0.0, 1.0, + 15.0, 14.0, 15.0 + ); public static Container getContainer(Level world, BlockPos pos) { if (world.getBlockEntity(pos) instanceof AlchemicalChestBlockEntity container) { @@ -47,7 +53,7 @@ public class AlchemicalChestBlock extends AbstractChestBlock ErisAlchemyBlockEntities.ALCHEMICAL_CHEST); + super(properties, () -> ErisAlchemyRegistry.BlockEntities.ALCHEMICAL_CHEST); registerDefaultState(getStateDefinition().any() .setValue(FACING, Direction.NORTH) .setValue(WATERLOGGED, false) @@ -56,7 +62,12 @@ public class AlchemicalChestBlock extends AbstractChestBlock combine(BlockState state, Level world, BlockPos pos, boolean ignoreBlocked) { + public DoubleBlockCombiner.NeighborCombineResult combine( + BlockState state, + Level world, + BlockPos pos, + boolean ignoreBlocked + ) { return DoubleBlockCombiner.Combiner::acceptNone; } @@ -102,8 +113,16 @@ public class AlchemicalChestBlock extends AbstractChestBlock BlockEntityTicker getTicker(Level ignoredWorld, BlockState ignoredState, BlockEntityType type) { - return createTickerHelper(type, blockEntityType.get(), (world, pos, state, entity) -> entity.tick(world, pos, state)); + public BlockEntityTicker getTicker( + Level ignoredWorld, + BlockState ignoredState, + BlockEntityType type + ) { + return createTickerHelper( + type, + blockEntityType.get(), + (world, pos, state, entity) -> entity.tick(world, pos, state) + ); } @SuppressWarnings("deprecation") @@ -155,7 +174,14 @@ public class AlchemicalChestBlock extends AbstractChestBlock blocks = new LinkedHashMap<>(); - - public static final AlchemicalChestBlock ALCHEMICAL_CHEST = register("alchemical_chest", new AlchemicalChestBlock(QuiltBlockSettings.copy(Blocks.ENDER_CHEST))); - - public static void consumeBlocks(BiConsumer consumer) { - blocks.forEach(consumer); - } - - private static T register(String id, T block) { - blocks.putIfAbsent(new ResourceLocation(ErisAlchemy.ID, id), block); - return block; - } - - private ErisAlchemyBlocks() {} - -} diff --git a/src/main/java/lv/enes/mc/eris_alchemy/block/entity/AlchemicalChestBlockEntity.java b/src/main/java/lv/enes/mc/eris_alchemy/block/entity/AlchemicalChestBlockEntity.java index 9c9942f..1e881f8 100644 --- a/src/main/java/lv/enes/mc/eris_alchemy/block/entity/AlchemicalChestBlockEntity.java +++ b/src/main/java/lv/enes/mc/eris_alchemy/block/entity/AlchemicalChestBlockEntity.java @@ -1,7 +1,7 @@ package lv.enes.mc.eris_alchemy.block.entity; import jakarta.annotation.Nonnull; -import lv.enes.mc.eris_alchemy.block.ErisAlchemyBlocks; +import lv.enes.mc.eris_alchemy.ErisAlchemyRegistry; import lv.enes.mc.eris_alchemy.menu.AlchemicalChestMenu; import net.minecraft.core.BlockPos; import net.minecraft.core.NonNullList; @@ -62,8 +62,14 @@ public class AlchemicalChestBlockEntity extends BaseContainerBlockEntity impleme } @Override - protected void openerCountChanged(Level world, BlockPos pos, BlockState state, int oldViewerCount, int newViewerCount) { - world.blockEvent(worldPosition, ErisAlchemyBlocks.ALCHEMICAL_CHEST, EVENT, newViewerCount); + protected void openerCountChanged( + Level world, + BlockPos pos, + BlockState state, + int oldViewerCount, + int newViewerCount + ) { + world.blockEvent(worldPosition, ErisAlchemyRegistry.Blocks.ALCHEMICAL_CHEST, EVENT, newViewerCount); } @Override @@ -76,7 +82,7 @@ public class AlchemicalChestBlockEntity extends BaseContainerBlockEntity impleme }; public AlchemicalChestBlockEntity(BlockPos pos, BlockState state) { - super(ErisAlchemyBlockEntities.ALCHEMICAL_CHEST, pos, state); + super(ErisAlchemyRegistry.BlockEntities.ALCHEMICAL_CHEST, pos, state); } @Override diff --git a/src/main/java/lv/enes/mc/eris_alchemy/block/entity/ErisAlchemyBlockEntities.java b/src/main/java/lv/enes/mc/eris_alchemy/block/entity/ErisAlchemyBlockEntities.java deleted file mode 100644 index a95ac58..0000000 --- a/src/main/java/lv/enes/mc/eris_alchemy/block/entity/ErisAlchemyBlockEntities.java +++ /dev/null @@ -1,33 +0,0 @@ -package lv.enes.mc.eris_alchemy.block.entity; - -import lv.enes.mc.eris_alchemy.ErisAlchemy; -import lv.enes.mc.eris_alchemy.block.ErisAlchemyBlocks; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.entity.BlockEntityType; -import org.quiltmc.qsl.block.entity.api.QuiltBlockEntityTypeBuilder; - -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.function.BiConsumer; - -public final class ErisAlchemyBlockEntities { - private static final Map> entities = new LinkedHashMap<>(); - - public static final BlockEntityType ALCHEMICAL_CHEST = register( - "alchemical_chest", - QuiltBlockEntityTypeBuilder.create(AlchemicalChestBlockEntity::new, ErisAlchemyBlocks.ALCHEMICAL_CHEST) - .build() - ); - - public static void consumeBlockEntities(BiConsumer> consumer) { - entities.forEach(consumer); - } - - private static BlockEntityType register(String id, BlockEntityType type) { - entities.putIfAbsent(new ResourceLocation(ErisAlchemy.ID, id), type); - return type; - } - - private ErisAlchemyBlockEntities() {} -} diff --git a/src/main/java/lv/enes/mc/eris_alchemy/client/ErisAlchemyClient.java b/src/main/java/lv/enes/mc/eris_alchemy/client/ErisAlchemyClient.java index bb5de4f..86cc467 100644 --- a/src/main/java/lv/enes/mc/eris_alchemy/client/ErisAlchemyClient.java +++ b/src/main/java/lv/enes/mc/eris_alchemy/client/ErisAlchemyClient.java @@ -1,15 +1,9 @@ package lv.enes.mc.eris_alchemy.client; import lv.enes.mc.eris_alchemy.EMC; -import lv.enes.mc.eris_alchemy.ErisAlchemyItems; -import lv.enes.mc.eris_alchemy.block.ErisAlchemyBlocks; -import lv.enes.mc.eris_alchemy.block.entity.AlchemicalChestBlockEntity; -import lv.enes.mc.eris_alchemy.block.entity.ErisAlchemyBlockEntities; -import lv.enes.mc.eris_alchemy.menu.ErisAlchemyMenus; import net.fabricmc.fabric.api.client.rendering.v1.BuiltinItemRendererRegistry; import net.minecraft.client.gui.screens.MenuScreens; import net.minecraft.client.renderer.blockentity.BlockEntityRenderers; -import net.minecraft.client.renderer.blockentity.ChestRenderer; import net.minecraft.network.chat.Component; import org.quiltmc.loader.api.ModContainer; import org.quiltmc.qsl.base.api.entrypoint.client.ClientModInitializer; @@ -21,14 +15,11 @@ import java.text.DecimalFormat; public class ErisAlchemyClient implements ClientModInitializer { @Override public void onInitializeClient(ModContainer mod) { - BlockEntityRenderers.register(ErisAlchemyBlockEntities.ALCHEMICAL_CHEST, ChestRenderer::new); + ErisAlchemyClientRegistry.BlockEntityRenderers.consume(BlockEntityRenderers::register); + ErisAlchemyClientRegistry.ItemRenderers.consume(BuiltinItemRendererRegistry.INSTANCE::register); + ErisAlchemyClientRegistry.MenuScreens.consume(MenuScreens::register); - BuiltinItemRendererRegistry.INSTANCE.register( - ErisAlchemyItems.ALCHEMICAL_CHEST, - new ChestItemRenderer<>(ErisAlchemyBlocks.ALCHEMICAL_CHEST, AlchemicalChestBlockEntity::new)::renderByItem - ); - - MenuScreens.register(ErisAlchemyMenus.ALCHEMICAL_CHEST, AlchemicalChestScreen::new); + // MenuScreens.register(ErisAlchemyRegistry.Menus.ALCHEMICAL_CHEST, AlchemicalChestScreen::new); var doubleFormat = new DecimalFormat("0"); doubleFormat.setMaximumFractionDigits(1); diff --git a/src/main/java/lv/enes/mc/eris_alchemy/client/ErisAlchemyClientRegistry.java b/src/main/java/lv/enes/mc/eris_alchemy/client/ErisAlchemyClientRegistry.java new file mode 100644 index 0000000..3680fd5 --- /dev/null +++ b/src/main/java/lv/enes/mc/eris_alchemy/client/ErisAlchemyClientRegistry.java @@ -0,0 +1,116 @@ +package lv.enes.mc.eris_alchemy.client; + +import lv.enes.mc.eris_alchemy.block.entity.AlchemicalChestBlockEntity; +import net.fabricmc.fabric.api.client.rendering.v1.BuiltinItemRendererRegistry.DynamicItemRenderer; +import net.minecraft.client.gui.screens.MenuScreens.ScreenConstructor; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.inventory.MenuAccess; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; +import net.minecraft.client.renderer.blockentity.ChestRenderer; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.level.ItemLike; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.function.BiConsumer; + +import static lv.enes.mc.eris_alchemy.ErisAlchemyRegistry.*; + +public final class ErisAlchemyClientRegistry { + private ErisAlchemyClientRegistry() {} + + public static final class BlockEntityRenderers { + private BlockEntityRenderers() {} + + @FunctionalInterface + public interface Consumer { + void consume(BlockEntityType type, BlockEntityRendererProvider provider); + } + + public static void consume(Consumer consumer) { + data.values().forEach(pair -> pair.beConsumed(consumer)); + } + + private record Pair( + BlockEntityType type, + BlockEntityRendererProvider provider + ) { + public void beConsumed(Consumer consumer) { + consumer.consume(type, provider); + } + } + + private static final Map, Pair> data = new LinkedHashMap<>(); + + private static void register( + BlockEntityType type, + BlockEntityRendererProvider provider + ) { + data.put(type, new Pair<>(type, provider)); + } + + static { + register(BlockEntities.ALCHEMICAL_CHEST, ChestRenderer::new); + } + } + + public static final class ItemRenderers { + private ItemRenderers() {} + + public static void consume(BiConsumer consumer) { + data.forEach(consumer); + } + + private static final Map data = new LinkedHashMap<>(); + + private static void register(ItemLike item, DynamicItemRenderer renderer) { + data.put(item, renderer); + } + + static { + register( + Items.ALCHEMICAL_CHEST, + new ChestItemRenderer<>(Blocks.ALCHEMICAL_CHEST, AlchemicalChestBlockEntity::new)::renderByItem + ); + } + } + + public static final class MenuScreens { + private MenuScreens() {} + + @FunctionalInterface + public interface Consumer { + > + void consume(MenuType menu, ScreenConstructor constructor); + } + + public static void consume(Consumer consumer) { + data.values().forEach(pair -> pair.beConsumed(consumer)); + } + + private record Pair>( + MenuType menu, + ScreenConstructor constructor + ) { + public void beConsumed(Consumer consumer) { + consumer.consume(menu, constructor); + } + } + + private static final Map, Pair> data = new LinkedHashMap<>(); + + private static > void register( + MenuType menu, + ScreenConstructor constructor + ) { + data.put(menu, new Pair<>(menu, constructor)); + } + + static { + register(Menus.ALCHEMICAL_CHEST, AlchemicalChestScreen::new); + } + } +} diff --git a/src/main/java/lv/enes/mc/eris_alchemy/menu/AlchemicalChestMenu.java b/src/main/java/lv/enes/mc/eris_alchemy/menu/AlchemicalChestMenu.java index e4135c9..a464f3f 100644 --- a/src/main/java/lv/enes/mc/eris_alchemy/menu/AlchemicalChestMenu.java +++ b/src/main/java/lv/enes/mc/eris_alchemy/menu/AlchemicalChestMenu.java @@ -1,6 +1,7 @@ package lv.enes.mc.eris_alchemy.menu; import jakarta.annotation.Nonnull; +import lv.enes.mc.eris_alchemy.ErisAlchemyRegistry; import net.minecraft.world.Container; import net.minecraft.world.SimpleContainer; import net.minecraft.world.entity.player.Inventory; @@ -20,7 +21,7 @@ public class AlchemicalChestMenu extends AbstractContainerMenu { } public AlchemicalChestMenu(int syncId, Inventory playerInventory, Container inventory) { - super(ErisAlchemyMenus.ALCHEMICAL_CHEST, syncId); + super(ErisAlchemyRegistry.Menus.ALCHEMICAL_CHEST, syncId); checkContainerSize(inventory, WIDTH * HEIGHT); this.container = inventory; diff --git a/src/main/java/lv/enes/mc/eris_alchemy/menu/ErisAlchemyMenus.java b/src/main/java/lv/enes/mc/eris_alchemy/menu/ErisAlchemyMenus.java deleted file mode 100644 index 5e3b54a..0000000 --- a/src/main/java/lv/enes/mc/eris_alchemy/menu/ErisAlchemyMenus.java +++ /dev/null @@ -1,29 +0,0 @@ -package lv.enes.mc.eris_alchemy.menu; - -import lv.enes.mc.eris_alchemy.ErisAlchemy; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.flag.FeatureFlags; -import net.minecraft.world.inventory.AbstractContainerMenu; -import net.minecraft.world.inventory.MenuType; - -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.function.BiConsumer; - -public final class ErisAlchemyMenus { - private static final Map> menus = new LinkedHashMap<>(); - - public static final MenuType ALCHEMICAL_CHEST = register("alchemy_chest", AlchemicalChestMenu::new); - - public static void consumeMenus(BiConsumer> consumer) { - menus.forEach(consumer); - } - - private static MenuType register(String id, MenuType.MenuSupplier supplier) { - var menuType = new MenuType<>(supplier, FeatureFlags.VANILLA_SET); - menus.putIfAbsent(new ResourceLocation(ErisAlchemy.ID, id), menuType); - return menuType; - } - - private ErisAlchemyMenus() {} -} diff --git a/src/main/java/lv/enes/mc/eris_alchemy/mixin/client/SheetsMixin.java b/src/main/java/lv/enes/mc/eris_alchemy/mixin/client/SheetsMixin.java index 544dcef..46f7720 100644 --- a/src/main/java/lv/enes/mc/eris_alchemy/mixin/client/SheetsMixin.java +++ b/src/main/java/lv/enes/mc/eris_alchemy/mixin/client/SheetsMixin.java @@ -13,8 +13,17 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(Sheets.class) public abstract class SheetsMixin { - @Inject(method = "chooseMaterial(Lnet/minecraft/world/level/block/entity/BlockEntity;Lnet/minecraft/world/level/block/state/properties/ChestType;Z)Lnet/minecraft/client/resources/model/Material;", at = @At("RETURN"), cancellable = true) - private static void chooseMaterial(BlockEntity entity, ChestType type, boolean christmas, CallbackInfoReturnable cir) { + @Inject( + method = "chooseMaterial(Lnet/minecraft/world/level/block/entity/BlockEntity;Lnet/minecraft/world/level/block/state/properties/ChestType;Z)Lnet/minecraft/client/resources/model/Material;", + at = @At("RETURN"), + cancellable = true + ) + private static void chooseMaterial( + BlockEntity entity, + ChestType type, + boolean christmas, + CallbackInfoReturnable cir + ) { if (entity instanceof AlchemicalChestBlockEntity) { cir.setReturnValue(ErisAlchemyMaterials.ALCHEMICAL_CHEST); } diff --git a/src/main/java/lv/enes/mc/eris_alchemy/recipe/CovalenceRepair.java b/src/main/java/lv/enes/mc/eris_alchemy/recipe/CovalenceRepair.java index dca464a..7fbdc17 100644 --- a/src/main/java/lv/enes/mc/eris_alchemy/recipe/CovalenceRepair.java +++ b/src/main/java/lv/enes/mc/eris_alchemy/recipe/CovalenceRepair.java @@ -5,6 +5,7 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonSyntaxException; import jakarta.annotation.Nonnull; +import lv.enes.mc.eris_alchemy.ErisAlchemyRegistry; import net.minecraft.core.RegistryAccess; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; @@ -21,7 +22,7 @@ import java.util.ArrayList; import java.util.Arrays; public class CovalenceRepair extends CustomRecipe { - static class Serializer implements QuiltRecipeSerializer { + public static class Serializer implements QuiltRecipeSerializer { private static class Json { CraftingBookCategory category = CraftingBookCategory.MISC; JsonElement dust; @@ -29,8 +30,6 @@ public class CovalenceRepair extends CustomRecipe { JsonElement tools = new JsonObject(); } - Serializer() {} - @Override public JsonObject toJson(CovalenceRepair recipe) { var res = new JsonObject(); @@ -86,7 +85,13 @@ public class CovalenceRepair extends CustomRecipe { /** What tools can this dust repair. */ private final Ingredient tools; - public CovalenceRepair(ResourceLocation id, CraftingBookCategory category, Ingredient dust, Ingredient materials, Ingredient tools) { + public CovalenceRepair( + ResourceLocation id, + CraftingBookCategory category, + Ingredient dust, + Ingredient materials, + Ingredient tools + ) { super(id, category); this.dust = dust; @@ -121,7 +126,7 @@ public class CovalenceRepair extends CustomRecipe { @Nonnull @Override public RecipeSerializer getSerializer() { - return ErisAlchemyRecipeSerializers.COVALENCE_REPAIR; + return ErisAlchemyRegistry.RecipeSerializers.COVALENCE_REPAIR; } private boolean isTool(ItemStack stack) { diff --git a/src/main/java/lv/enes/mc/eris_alchemy/recipe/ErisAlchemyRecipeSerializers.java b/src/main/java/lv/enes/mc/eris_alchemy/recipe/ErisAlchemyRecipeSerializers.java deleted file mode 100644 index c5a6676..0000000 --- a/src/main/java/lv/enes/mc/eris_alchemy/recipe/ErisAlchemyRecipeSerializers.java +++ /dev/null @@ -1,27 +0,0 @@ -package lv.enes.mc.eris_alchemy.recipe; - -import lv.enes.mc.eris_alchemy.ErisAlchemy; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.crafting.Recipe; -import net.minecraft.world.item.crafting.RecipeSerializer; - -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.function.BiConsumer; - -public final class ErisAlchemyRecipeSerializers { - private static final Map> serializers = new LinkedHashMap<>(); - - public static final RecipeSerializer COVALENCE_REPAIR = register("covalence_repair", new CovalenceRepair.Serializer()); - - public static void consumeSerializers(BiConsumer> consumer) { - serializers.forEach(consumer); - } - - private static > RecipeSerializer register(String id, RecipeSerializer serializer) { - serializers.putIfAbsent(new ResourceLocation(ErisAlchemy.ID, id), serializer); - return serializer; - } - - private ErisAlchemyRecipeSerializers() {} -} -- cgit v1.2.3