From 80cca6ee4dcd177eba99d30043da60b43dce48b6 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Sat, 30 Nov 2024 22:03:21 +0100 Subject: [PATCH] feat: chemical storage block --- CHANGELOG.md | 1 + build.gradle.kts | 2 +- gradle.properties | 4 +- .../mekanism/ChemicalResourceFactory.java | 4 +- .../mekanism/ClientModInitializer.java | 32 +++- .../refinedstorage/mekanism/Config.java | 102 +++++++++++ .../mekanism/ModInitializer.java | 166 ++++++++++++++++-- .../mekanism/content/BlockEntities.java | 32 ++++ .../mekanism/content/Blocks.java | 26 +++ .../mekanism/{ => content}/Items.java | 12 +- .../mekanism/content/Menus.java | 25 +++ .../mekanism/content/package-info.java | 7 + .../grid/ChemicalGridInsertionHint.java | 11 +- .../mekanism/grid/ChemicalGridResource.java | 4 +- .../ChemicalStorageBlockBlockItem.java | 120 +++++++++++++ .../storage/ChemicalStorageBlockProvider.java | 66 +++++++ .../storage/ChemicalStorageDiskItem.java | 5 +- .../storage/ChemicalStorageVariant.java | 12 +- .../1024b_chemical_storage_block.json | 7 + .../256b_chemical_storage_block.json | 7 + .../64b_chemical_storage_block.json | 7 + .../8192b_chemical_storage_block.json | 7 + .../creative_chemical_storage_block.json | 7 + .../lang/en_us.json | 26 ++- .../block/1024b_chemical_storage_block.json | 6 + .../block/256b_chemical_storage_block.json | 6 + .../block/64b_chemical_storage_block.json | 6 + .../block/8192b_chemical_storage_block.json | 6 + .../creative_chemical_storage_block.json | 6 + .../item/1024b_chemical_storage_block.json | 3 + .../item/256b_chemical_storage_block.json | 3 + .../item/64b_chemical_storage_block.json | 3 + .../item/8192b_chemical_storage_block.json | 3 + .../item/creative_chemical_storage_block.json | 3 + .../1024b_chemical_storage_block.png | Bin 0 -> 2128 bytes .../256b_chemical_storage_block.png | Bin 0 -> 2115 bytes .../64b_chemical_storage_block.png | Bin 0 -> 2126 bytes .../8192b_chemical_storage_block.png | Bin 0 -> 2119 bytes .../creative_chemical_storage_block.png | Bin 0 -> 2826 bytes .../blocks/1024b_chemical_storage_block.json | 26 +++ .../blocks/256b_chemical_storage_block.json | 26 +++ .../blocks/64b_chemical_storage_block.json | 26 +++ .../blocks/8192b_chemical_storage_block.json | 26 +++ .../creative_chemical_storage_block.json | 26 +++ .../recipe/1024b_chemical_storage_block.json | 25 +++ .../1024b_chemical_storage_block_upgrade.json | 4 + .../recipe/256b_chemical_storage_block.json | 25 +++ .../256b_chemical_storage_block_upgrade.json | 4 + .../recipe/64b_chemical_storage_block.json | 25 +++ .../recipe/8192b_chemical_storage_block.json | 25 +++ .../8192b_chemical_storage_block_upgrade.json | 4 + .../templates/META-INF/neoforge.mods.toml | 2 +- 52 files changed, 948 insertions(+), 33 deletions(-) create mode 100644 src/main/java/com/refinedmods/refinedstorage/mekanism/Config.java create mode 100644 src/main/java/com/refinedmods/refinedstorage/mekanism/content/BlockEntities.java create mode 100644 src/main/java/com/refinedmods/refinedstorage/mekanism/content/Blocks.java rename src/main/java/com/refinedmods/refinedstorage/mekanism/{ => content}/Items.java (69%) create mode 100644 src/main/java/com/refinedmods/refinedstorage/mekanism/content/Menus.java create mode 100644 src/main/java/com/refinedmods/refinedstorage/mekanism/content/package-info.java create mode 100644 src/main/java/com/refinedmods/refinedstorage/mekanism/storage/ChemicalStorageBlockBlockItem.java create mode 100644 src/main/java/com/refinedmods/refinedstorage/mekanism/storage/ChemicalStorageBlockProvider.java create mode 100644 src/main/resources/assets/refinedstorage_mekanism_integration/blockstates/1024b_chemical_storage_block.json create mode 100644 src/main/resources/assets/refinedstorage_mekanism_integration/blockstates/256b_chemical_storage_block.json create mode 100644 src/main/resources/assets/refinedstorage_mekanism_integration/blockstates/64b_chemical_storage_block.json create mode 100644 src/main/resources/assets/refinedstorage_mekanism_integration/blockstates/8192b_chemical_storage_block.json create mode 100644 src/main/resources/assets/refinedstorage_mekanism_integration/blockstates/creative_chemical_storage_block.json create mode 100644 src/main/resources/assets/refinedstorage_mekanism_integration/models/block/1024b_chemical_storage_block.json create mode 100644 src/main/resources/assets/refinedstorage_mekanism_integration/models/block/256b_chemical_storage_block.json create mode 100644 src/main/resources/assets/refinedstorage_mekanism_integration/models/block/64b_chemical_storage_block.json create mode 100644 src/main/resources/assets/refinedstorage_mekanism_integration/models/block/8192b_chemical_storage_block.json create mode 100644 src/main/resources/assets/refinedstorage_mekanism_integration/models/block/creative_chemical_storage_block.json create mode 100644 src/main/resources/assets/refinedstorage_mekanism_integration/models/item/1024b_chemical_storage_block.json create mode 100644 src/main/resources/assets/refinedstorage_mekanism_integration/models/item/256b_chemical_storage_block.json create mode 100644 src/main/resources/assets/refinedstorage_mekanism_integration/models/item/64b_chemical_storage_block.json create mode 100644 src/main/resources/assets/refinedstorage_mekanism_integration/models/item/8192b_chemical_storage_block.json create mode 100644 src/main/resources/assets/refinedstorage_mekanism_integration/models/item/creative_chemical_storage_block.json create mode 100644 src/main/resources/assets/refinedstorage_mekanism_integration/textures/block/chemical_storage_block/1024b_chemical_storage_block.png create mode 100644 src/main/resources/assets/refinedstorage_mekanism_integration/textures/block/chemical_storage_block/256b_chemical_storage_block.png create mode 100644 src/main/resources/assets/refinedstorage_mekanism_integration/textures/block/chemical_storage_block/64b_chemical_storage_block.png create mode 100644 src/main/resources/assets/refinedstorage_mekanism_integration/textures/block/chemical_storage_block/8192b_chemical_storage_block.png create mode 100644 src/main/resources/assets/refinedstorage_mekanism_integration/textures/block/chemical_storage_block/creative_chemical_storage_block.png create mode 100644 src/main/resources/data/refinedstorage_mekanism_integration/loot_table/blocks/1024b_chemical_storage_block.json create mode 100644 src/main/resources/data/refinedstorage_mekanism_integration/loot_table/blocks/256b_chemical_storage_block.json create mode 100644 src/main/resources/data/refinedstorage_mekanism_integration/loot_table/blocks/64b_chemical_storage_block.json create mode 100644 src/main/resources/data/refinedstorage_mekanism_integration/loot_table/blocks/8192b_chemical_storage_block.json create mode 100644 src/main/resources/data/refinedstorage_mekanism_integration/loot_table/blocks/creative_chemical_storage_block.json create mode 100644 src/main/resources/data/refinedstorage_mekanism_integration/recipe/1024b_chemical_storage_block.json create mode 100644 src/main/resources/data/refinedstorage_mekanism_integration/recipe/1024b_chemical_storage_block_upgrade.json create mode 100644 src/main/resources/data/refinedstorage_mekanism_integration/recipe/256b_chemical_storage_block.json create mode 100644 src/main/resources/data/refinedstorage_mekanism_integration/recipe/256b_chemical_storage_block_upgrade.json create mode 100644 src/main/resources/data/refinedstorage_mekanism_integration/recipe/64b_chemical_storage_block.json create mode 100644 src/main/resources/data/refinedstorage_mekanism_integration/recipe/8192b_chemical_storage_block.json create mode 100644 src/main/resources/data/refinedstorage_mekanism_integration/recipe/8192b_chemical_storage_block_upgrade.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 2b6ee17..c0e4243 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## Added - Chemical Storage Disk +- Chemical Storage blocks - Chemical support in the Grid. - Chemical support in the Storage Monitor. - Chemical support in the Importer. diff --git a/build.gradle.kts b/build.gradle.kts index 425b67c..bb7403c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -52,7 +52,7 @@ val emiVersion: String by project dependencies { api("com.refinedmods.refinedstorage:refinedstorage-neoforge:${refinedstorageVersion}") - runtimeOnly("com.refinedmods.refinedstorage:refinedstorage-jei-integration-neoforge:${refinedstorageJeiIntegrationVersion}") + // runtimeOnly("com.refinedmods.refinedstorage:refinedstorage-jei-integration-neoforge:${refinedstorageJeiIntegrationVersion}") // runtimeOnly("com.refinedmods.refinedstorage:refinedstorage-emi-integration-neoforge:0.5.0") compileOnlyApi("mekanism:Mekanism:${minecraftVersion}-${mekanismVersion}:api") runtimeOnly("mekanism:Mekanism:${minecraftVersion}-${mekanismVersion}:all") { diff --git a/gradle.properties b/gradle.properties index 2d77d61..29c4ee9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ refinedarchitectVersion=0.20.0 -refinedstorageVersion=2.0.0-milestone.4.10 -refinedstorageJeiIntegrationVersion=0.6.0 +refinedstorageVersion=2.0.0-milestone.4.11 +refinedstorageJeiIntegrationVersion=0.7.0 # https://www.curseforge.com/minecraft/mc-mods/mekanism/files/all mekanismVersion=10.7.7.64 jeiVersion=19.20.0.241 diff --git a/src/main/java/com/refinedmods/refinedstorage/mekanism/ChemicalResourceFactory.java b/src/main/java/com/refinedmods/refinedstorage/mekanism/ChemicalResourceFactory.java index dca6ad7..0bbcd83 100644 --- a/src/main/java/com/refinedmods/refinedstorage/mekanism/ChemicalResourceFactory.java +++ b/src/main/java/com/refinedmods/refinedstorage/mekanism/ChemicalResourceFactory.java @@ -11,7 +11,9 @@ import static com.refinedmods.refinedstorage.mekanism.ChemicalResource.ofChemicalStack; -class ChemicalResourceFactory implements ResourceFactory { +public enum ChemicalResourceFactory implements ResourceFactory { + INSTANCE; + @Override public Optional create(final ItemStack stack) { return Optional.ofNullable(stack.getCapability(ChemicalUtil.ITEM_CAPABILITY)) diff --git a/src/main/java/com/refinedmods/refinedstorage/mekanism/ClientModInitializer.java b/src/main/java/com/refinedmods/refinedstorage/mekanism/ClientModInitializer.java index a08c199..0ab1ff8 100644 --- a/src/main/java/com/refinedmods/refinedstorage/mekanism/ClientModInitializer.java +++ b/src/main/java/com/refinedmods/refinedstorage/mekanism/ClientModInitializer.java @@ -1,12 +1,20 @@ package com.refinedmods.refinedstorage.mekanism; -import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; +import com.refinedmods.refinedstorage.common.api.RefinedStorageClientApi; +import com.refinedmods.refinedstorage.mekanism.content.Items; +import com.refinedmods.refinedstorage.mekanism.content.Menus; import com.refinedmods.refinedstorage.mekanism.grid.ChemicalGridInsertionHint; import com.refinedmods.refinedstorage.mekanism.storage.ChemicalStorageVariant; +import net.minecraft.client.gui.screens.MenuScreens; +import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; +import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Inventory; +import net.minecraft.world.inventory.AbstractContainerMenu; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; +import net.neoforged.neoforge.client.event.RegisterMenuScreensEvent; import static com.refinedmods.refinedstorage.mekanism.MekanismIntegrationIdentifierUtil.createMekanismIntegrationIdentifier; @@ -16,17 +24,33 @@ private ClientModInitializer() { @SubscribeEvent public static void onClientSetup(final FMLClientSetupEvent e) { - RefinedStorageApi.INSTANCE.registerResourceRendering( + RefinedStorageClientApi.INSTANCE.registerResourceRendering( ChemicalResource.class, new ChemicalResourceRendering() ); - RefinedStorageApi.INSTANCE.addAlternativeGridInsertionHint(new ChemicalGridInsertionHint()); + RefinedStorageClientApi.INSTANCE.addAlternativeGridInsertionHint(new ChemicalGridInsertionHint()); final ResourceLocation diskModel = createMekanismIntegrationIdentifier("block/disk/chemical_disk"); for (final ChemicalStorageVariant variant : ChemicalStorageVariant.values()) { - RefinedStorageApi.INSTANCE.getStorageContainerItemHelper().registerDiskModel( + RefinedStorageClientApi.INSTANCE.registerDiskModel( Items.getChemicalStorageDisk(variant), diskModel ); } } + + @SubscribeEvent + public static void onRegisterMenuScreens(final RegisterMenuScreensEvent e) { + e.register( + Menus.getChemicalStorage(), + new MenuScreens.ScreenConstructor>() { + @Override + public AbstractContainerScreen create(final AbstractContainerMenu menu, + final Inventory inventory, + final Component title) { + return RefinedStorageClientApi.INSTANCE.createStorageBlockScreen(menu, inventory, title, + ChemicalResource.class); + } + } + ); + } } diff --git a/src/main/java/com/refinedmods/refinedstorage/mekanism/Config.java b/src/main/java/com/refinedmods/refinedstorage/mekanism/Config.java new file mode 100644 index 0000000..30aa75b --- /dev/null +++ b/src/main/java/com/refinedmods/refinedstorage/mekanism/Config.java @@ -0,0 +1,102 @@ +package com.refinedmods.refinedstorage.mekanism; + +import net.neoforged.neoforge.common.ModConfigSpec; + +import static com.refinedmods.refinedstorage.mekanism.MekanismIntegrationIdentifierUtil.createMekanismIntegrationTranslationKey; + +public final class Config { + private final ModConfigSpec.Builder builder = new ModConfigSpec.Builder(); + private final ModConfigSpec spec; + + private final ChemicalStorageBlockEntry chemicalStorageBlock; + + public Config() { + chemicalStorageBlock = new ChemicalStorageBlockEntry(); + spec = builder.build(); + } + + private static String translationKey(final String value) { + return createMekanismIntegrationTranslationKey("config", "option." + value); + } + + public ChemicalStorageBlockEntry getChemicalStorageBlock() { + return chemicalStorageBlock; + } + + public ModConfigSpec getSpec() { + return spec; + } + + public class ChemicalStorageBlockEntry { + private final ModConfigSpec.LongValue sixtyFourBEnergyUsage; + private final ModConfigSpec.LongValue twoHundredFiftySixBEnergyUsage; + private final ModConfigSpec.LongValue thousandTwentyFourBEnergyUsage; + private final ModConfigSpec.LongValue eightThousandHundredNinetyTwoBEnergyUsage; + private final ModConfigSpec.LongValue creativeEnergyUsage; + + ChemicalStorageBlockEntry() { + builder.translation(translationKey("chemicalStorageBlock")).push("chemicalStorageBlock"); + sixtyFourBEnergyUsage = builder + .translation(translationKey("chemicalStorageBlock.sixtyFourBEnergyUsage")) + .defineInRange( + "64bEnergyUsage", + 2, + 0, + Long.MAX_VALUE + ); + twoHundredFiftySixBEnergyUsage = builder + .translation(translationKey("chemicalStorageBlock.twoHundredFiftySixBEnergyUsage")) + .defineInRange( + "256bEnergyUsage", + 4, + 0, + Long.MAX_VALUE + ); + thousandTwentyFourBEnergyUsage = builder + .translation(translationKey("chemicalStorageBlock.thousandTwentyFourBEnergyUsage")) + .defineInRange( + "1024bEnergyUsage", + 6, + 0, + Long.MAX_VALUE + ); + eightThousandHundredNinetyTwoBEnergyUsage = builder + .translation(translationKey("chemicalStorageBlock.eightThousandHundredNinetyTwoBEnergyUsage")) + .defineInRange( + "8192bEnergyUsage", + 8, + 0, + Long.MAX_VALUE + ); + creativeEnergyUsage = builder + .translation(translationKey("chemicalStorageBlock.creativeEnergyUsage")) + .defineInRange( + "creativeEnergyUsage", + 16, + 0, + Long.MAX_VALUE + ); + builder.pop(); + } + + public long get64bEnergyUsage() { + return sixtyFourBEnergyUsage.get(); + } + + public long get256bEnergyUsage() { + return twoHundredFiftySixBEnergyUsage.get(); + } + + public long get1024bEnergyUsage() { + return thousandTwentyFourBEnergyUsage.get(); + } + + public long get8192bEnergyUsage() { + return eightThousandHundredNinetyTwoBEnergyUsage.get(); + } + + public long getCreativeEnergyUsage() { + return creativeEnergyUsage.get(); + } + } +} diff --git a/src/main/java/com/refinedmods/refinedstorage/mekanism/ModInitializer.java b/src/main/java/com/refinedmods/refinedstorage/mekanism/ModInitializer.java index 9b38d85..7b60e00 100644 --- a/src/main/java/com/refinedmods/refinedstorage/mekanism/ModInitializer.java +++ b/src/main/java/com/refinedmods/refinedstorage/mekanism/ModInitializer.java @@ -1,9 +1,15 @@ package com.refinedmods.refinedstorage.mekanism; import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; +import com.refinedmods.refinedstorage.common.content.BlockConstants; +import com.refinedmods.refinedstorage.common.content.ExtendedMenuTypeFactory; import com.refinedmods.refinedstorage.common.storage.StorageContainerUpgradeRecipe; import com.refinedmods.refinedstorage.common.storage.StorageContainerUpgradeRecipeSerializer; import com.refinedmods.refinedstorage.common.support.SimpleItem; +import com.refinedmods.refinedstorage.mekanism.content.BlockEntities; +import com.refinedmods.refinedstorage.mekanism.content.Blocks; +import com.refinedmods.refinedstorage.mekanism.content.Items; +import com.refinedmods.refinedstorage.mekanism.content.Menus; import com.refinedmods.refinedstorage.mekanism.exporter.ChemicalExporterTransferStrategyFactory; import com.refinedmods.refinedstorage.mekanism.externalstorage.ChemicalPlatformExternalStorageProviderFactory; import com.refinedmods.refinedstorage.mekanism.grid.ChemicalGridExtractionStrategy; @@ -11,23 +17,40 @@ import com.refinedmods.refinedstorage.mekanism.importer.ChemicalImporterTransferStrategyFactory; import com.refinedmods.refinedstorage.mekanism.recipemod.EmiChemicalResourceModIngredientConverter; import com.refinedmods.refinedstorage.mekanism.recipemod.JeiChemicalRecipeModIngredientConverter; +import com.refinedmods.refinedstorage.mekanism.storage.ChemicalStorageBlockBlockItem; +import com.refinedmods.refinedstorage.mekanism.storage.ChemicalStorageBlockProvider; import com.refinedmods.refinedstorage.mekanism.storage.ChemicalStorageDiskItem; import com.refinedmods.refinedstorage.mekanism.storage.ChemicalStorageVariant; import com.refinedmods.refinedstorage.mekanism.storagemonitor.ChemicalStorageMonitorInsertionStrategy; +import com.refinedmods.refinedstorage.neoforge.api.RefinedStorageNeoForgeApi; + +import java.util.Set; import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.core.registries.Registries; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.MenuType; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.Item; import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntityType; import net.neoforged.api.distmarker.Dist; import net.neoforged.bus.api.IEventBus; +import net.neoforged.fml.ModContainer; import net.neoforged.fml.ModList; import net.neoforged.fml.common.Mod; +import net.neoforged.fml.config.ModConfig; import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent; import net.neoforged.fml.loading.FMLEnvironment; +import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent; +import net.neoforged.neoforge.client.gui.ConfigurationScreen; +import net.neoforged.neoforge.client.gui.IConfigScreenFactory; +import net.neoforged.neoforge.common.extensions.IMenuTypeExtension; import net.neoforged.neoforge.event.BuildCreativeModeTabContentsEvent; import net.neoforged.neoforge.registries.DeferredRegister; @@ -37,39 +60,135 @@ public final class ModInitializer { private static final ResourceLocation CHEMICAL_ID = createMekanismIntegrationIdentifier("chemical"); - public ModInitializer(final IEventBus eventBus) { + private static final Config CONFIG = new Config(); + + public ModInitializer(final IEventBus eventBus, final ModContainer modContainer) { + modContainer.registerConfig(ModConfig.Type.COMMON, CONFIG.getSpec()); if (FMLEnvironment.dist == Dist.CLIENT) { eventBus.addListener(ClientModInitializer::onClientSetup); + eventBus.addListener(ClientModInitializer::onRegisterMenuScreens); + modContainer.registerExtensionPoint(IConfigScreenFactory.class, ConfigurationScreen::new); } eventBus.addListener(this::setup); eventBus.addListener(this::registerCreativeModeTabListener); + eventBus.addListener(this::registerCapabilities); final DeferredRegister itemRegistry = DeferredRegister.create( BuiltInRegistries.ITEM, MekanismIntegrationIdentifierUtil.MOD_ID ); + registerItems(itemRegistry); + itemRegistry.register(eventBus); + + final DeferredRegister blockRegistry = DeferredRegister.create( + BuiltInRegistries.BLOCK, + MekanismIntegrationIdentifierUtil.MOD_ID + ); + registerBlocks(blockRegistry); + blockRegistry.register(eventBus); + + final DeferredRegister> blockEntityRegistry = DeferredRegister.create( + BuiltInRegistries.BLOCK_ENTITY_TYPE, + MekanismIntegrationIdentifierUtil.MOD_ID + ); + registerBlockEntities(blockEntityRegistry); + blockEntityRegistry.register(eventBus); + + final DeferredRegister> menuRegistry = DeferredRegister.create( + BuiltInRegistries.MENU, + MekanismIntegrationIdentifierUtil.MOD_ID + ); + final ExtendedMenuTypeFactory extendedMenuTypeFactory = new ExtendedMenuTypeFactory() { + @Override + public MenuType create(final MenuSupplier supplier, + final StreamCodec + streamCodec) { + return IMenuTypeExtension.create((syncId, inventory, buf) -> { + final D data = streamCodec.decode(buf); + return supplier.create(syncId, inventory, data); + }); + } + }; + registerMenus(menuRegistry, extendedMenuTypeFactory); + menuRegistry.register(eventBus); + + final DeferredRegister> recipeSerializerRegistry = DeferredRegister.create( + BuiltInRegistries.RECIPE_SERIALIZER, + MekanismIntegrationIdentifierUtil.MOD_ID + ); + registerRecipeSerializers(recipeSerializerRegistry); + recipeSerializerRegistry.register(eventBus); + } + + private static void registerBlocks(final DeferredRegister registry) { + for (final ChemicalStorageVariant variant : ChemicalStorageVariant.values()) { + Blocks.setChemicalStorageBlock( + variant, + registry.register(variant.getStorageBlockId().getPath(), + () -> RefinedStorageApi.INSTANCE.createStorageBlock(BlockConstants.PROPERTIES, + new ChemicalStorageBlockProvider(variant) + ))); + } + } + + private static void registerItems(final DeferredRegister registry) { for (final ChemicalStorageVariant variant : ChemicalStorageVariant.values()) { if (variant.getStoragePartId() != null) { Items.setChemicalStoragePart( variant, - itemRegistry.register(variant.getStoragePartId().getPath(), SimpleItem::new) + registry.register(variant.getStoragePartId().getPath(), SimpleItem::new) ); } Items.setChemicalStorageDisk( variant, - itemRegistry.register(variant.getStorageDiskId().getPath(), () -> new ChemicalStorageDiskItem( + registry.register(variant.getStorageDiskId().getPath(), () -> new ChemicalStorageDiskItem( RefinedStorageApi.INSTANCE.getStorageContainerItemHelper(), variant )) ); + Items.setChemicalStorageBlock( + variant, + registry.register(variant.getStorageBlockId().getPath(), () -> new ChemicalStorageBlockBlockItem( + Blocks.getChemicalStorageBlock(variant), + variant + )) + ); } - itemRegistry.register(eventBus); + } - final DeferredRegister> recipeSerializerRegistry = DeferredRegister.create( - BuiltInRegistries.RECIPE_SERIALIZER, - MekanismIntegrationIdentifierUtil.MOD_ID - ); - recipeSerializerRegistry.register( + @SuppressWarnings("DataFlowIssue") + private static void registerBlockEntities(final DeferredRegister> blockEntityRegistry) { + for (final ChemicalStorageVariant variant : ChemicalStorageVariant.values()) { + BlockEntities.setChemicalStorageBlock( + variant, + blockEntityRegistry.register(variant.getStorageBlockId().getPath(), () -> new BlockEntityType<>( + (pos, state) -> RefinedStorageApi.INSTANCE.createStorageBlockEntity( + pos, + state, + new ChemicalStorageBlockProvider(variant) + ), + Set.of(Blocks.getChemicalStorageBlock(variant)), + null + )) + ); + } + } + + private static void registerMenus(final DeferredRegister> menuRegistry, + final ExtendedMenuTypeFactory extendedMenuTypeFactory) { + Menus.setChemicalStorage(menuRegistry.register( + "chemical_storage_block", + () -> extendedMenuTypeFactory.create((syncId, playerInventory, data) -> + RefinedStorageApi.INSTANCE.createStorageBlockContainerMenu( + syncId, + playerInventory.player, + data, + ChemicalResourceFactory.INSTANCE, + Menus.getChemicalStorage()), RefinedStorageApi.INSTANCE.getStorageBlockDataStreamCodec()))); + } + + private static void registerRecipeSerializers(final DeferredRegister> registry) { + registry.register( "chemical_storage_disk_upgrade", () -> new StorageContainerUpgradeRecipeSerializer<>( ChemicalStorageVariant.values(), @@ -78,12 +197,20 @@ public ModInitializer(final IEventBus eventBus) { ) ) ); - recipeSerializerRegistry.register(eventBus); + registry.register( + "chemical_storage_block_upgrade", + () -> new StorageContainerUpgradeRecipeSerializer<>( + ChemicalStorageVariant.values(), + to -> new StorageContainerUpgradeRecipe<>( + ChemicalStorageVariant.values(), to, Items::getChemicalStorageBlock + ) + ) + ); } private void setup(final FMLCommonSetupEvent e) { RefinedStorageApi.INSTANCE.getResourceTypeRegistry().register(CHEMICAL_ID, ChemicalResourceType.INSTANCE); - RefinedStorageApi.INSTANCE.getAlternativeResourceFactories().add(new ChemicalResourceFactory()); + RefinedStorageApi.INSTANCE.getAlternativeResourceFactories().add(ChemicalResourceFactory.INSTANCE); RefinedStorageApi.INSTANCE.getStorageTypeRegistry().register(CHEMICAL_ID, ChemicalResourceType.STORAGE_TYPE); RefinedStorageApi.INSTANCE.addGridInsertionStrategyFactory(ChemicalGridInsertionStrategy::new); RefinedStorageApi.INSTANCE.addGridExtractionStrategyFactory(ChemicalGridExtractionStrategy::new); @@ -123,5 +250,22 @@ private void registerCreativeModeTabListener(final BuildCreativeModeTabContentsE for (final ChemicalStorageVariant variant : ChemicalStorageVariant.values()) { e.accept(Items.getChemicalStorageDisk(variant)); } + for (final ChemicalStorageVariant variant : ChemicalStorageVariant.values()) { + e.accept(Items.getChemicalStorageBlock(variant)); + } + } + + private void registerCapabilities(final RegisterCapabilitiesEvent event) { + for (final ChemicalStorageVariant variant : ChemicalStorageVariant.values()) { + event.registerBlockEntity( + RefinedStorageNeoForgeApi.INSTANCE.getNetworkNodeContainerProviderCapability(), + BlockEntities.getChemicalStorageBlock(variant), + (be, side) -> be.getContainerProvider() + ); + } + } + + public static Config getConfig() { + return CONFIG; } } diff --git a/src/main/java/com/refinedmods/refinedstorage/mekanism/content/BlockEntities.java b/src/main/java/com/refinedmods/refinedstorage/mekanism/content/BlockEntities.java new file mode 100644 index 0000000..38d8882 --- /dev/null +++ b/src/main/java/com/refinedmods/refinedstorage/mekanism/content/BlockEntities.java @@ -0,0 +1,32 @@ +package com.refinedmods.refinedstorage.mekanism.content; + +import com.refinedmods.refinedstorage.common.api.support.network.AbstractNetworkNodeContainerBlockEntity; +import com.refinedmods.refinedstorage.mekanism.storage.ChemicalStorageVariant; + +import java.util.EnumMap; +import java.util.Map; +import java.util.function.Supplier; + +import net.minecraft.world.level.block.entity.BlockEntityType; + +public final class BlockEntities { + private static final Map>>> CHEMICAL_STORAGE_BLOCKS = + new EnumMap<>(ChemicalStorageVariant.class); + + private BlockEntities() { + } + + public static BlockEntityType> getChemicalStorageBlock( + final ChemicalStorageVariant variant + ) { + return CHEMICAL_STORAGE_BLOCKS.get(variant).get(); + } + + public static void setChemicalStorageBlock( + final ChemicalStorageVariant variant, + final Supplier>> supplier + ) { + CHEMICAL_STORAGE_BLOCKS.put(variant, supplier); + } +} diff --git a/src/main/java/com/refinedmods/refinedstorage/mekanism/content/Blocks.java b/src/main/java/com/refinedmods/refinedstorage/mekanism/content/Blocks.java new file mode 100644 index 0000000..82cf96f --- /dev/null +++ b/src/main/java/com/refinedmods/refinedstorage/mekanism/content/Blocks.java @@ -0,0 +1,26 @@ +package com.refinedmods.refinedstorage.mekanism.content; + +import com.refinedmods.refinedstorage.mekanism.storage.ChemicalStorageVariant; + +import java.util.EnumMap; +import java.util.Map; +import java.util.function.Supplier; + +import net.minecraft.world.level.block.Block; + +public final class Blocks { + private static final Map> CHEMICAL_STORAGE_BLOCKS = new EnumMap<>( + ChemicalStorageVariant.class + ); + + private Blocks() { + } + + public static Block getChemicalStorageBlock(final ChemicalStorageVariant variant) { + return CHEMICAL_STORAGE_BLOCKS.get(variant).get(); + } + + public static void setChemicalStorageBlock(final ChemicalStorageVariant variant, final Supplier supplier) { + CHEMICAL_STORAGE_BLOCKS.put(variant, supplier); + } +} diff --git a/src/main/java/com/refinedmods/refinedstorage/mekanism/Items.java b/src/main/java/com/refinedmods/refinedstorage/mekanism/content/Items.java similarity index 69% rename from src/main/java/com/refinedmods/refinedstorage/mekanism/Items.java rename to src/main/java/com/refinedmods/refinedstorage/mekanism/content/Items.java index 3a43873..9fba53f 100644 --- a/src/main/java/com/refinedmods/refinedstorage/mekanism/Items.java +++ b/src/main/java/com/refinedmods/refinedstorage/mekanism/content/Items.java @@ -1,4 +1,4 @@ -package com.refinedmods.refinedstorage.mekanism; +package com.refinedmods.refinedstorage.mekanism.content; import com.refinedmods.refinedstorage.mekanism.storage.ChemicalStorageVariant; @@ -13,6 +13,8 @@ public final class Items { new EnumMap<>(ChemicalStorageVariant.class); private static final Map> CHEMICAL_STORAGE_DISKS = new EnumMap<>(ChemicalStorageVariant.class); + private static final Map> CHEMICAL_STORAGE_BLOCKS = + new EnumMap<>(ChemicalStorageVariant.class); private Items() { } @@ -32,4 +34,12 @@ public static Item getChemicalStorageDisk(final ChemicalStorageVariant variant) public static void setChemicalStorageDisk(final ChemicalStorageVariant variant, final Supplier supplier) { CHEMICAL_STORAGE_DISKS.put(variant, supplier); } + + public static Item getChemicalStorageBlock(final ChemicalStorageVariant variant) { + return CHEMICAL_STORAGE_BLOCKS.get(variant).get(); + } + + public static void setChemicalStorageBlock(final ChemicalStorageVariant variant, final Supplier supplier) { + CHEMICAL_STORAGE_BLOCKS.put(variant, supplier); + } } diff --git a/src/main/java/com/refinedmods/refinedstorage/mekanism/content/Menus.java b/src/main/java/com/refinedmods/refinedstorage/mekanism/content/Menus.java new file mode 100644 index 0000000..05f5e20 --- /dev/null +++ b/src/main/java/com/refinedmods/refinedstorage/mekanism/content/Menus.java @@ -0,0 +1,25 @@ +package com.refinedmods.refinedstorage.mekanism.content; + +import java.util.function.Supplier; +import javax.annotation.Nullable; + +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.inventory.MenuType; + +import static java.util.Objects.requireNonNull; + +public final class Menus { + @Nullable + private static Supplier> chemicalStorage; + + private Menus() { + } + + public static MenuType getChemicalStorage() { + return requireNonNull(chemicalStorage).get(); + } + + public static void setChemicalStorage(final Supplier> supplier) { + chemicalStorage = supplier; + } +} diff --git a/src/main/java/com/refinedmods/refinedstorage/mekanism/content/package-info.java b/src/main/java/com/refinedmods/refinedstorage/mekanism/content/package-info.java new file mode 100644 index 0000000..4c1f342 --- /dev/null +++ b/src/main/java/com/refinedmods/refinedstorage/mekanism/content/package-info.java @@ -0,0 +1,7 @@ +@ParametersAreNonnullByDefault +@FieldsAndMethodsAreNonnullByDefault +package com.refinedmods.refinedstorage.mekanism.content; + +import com.refinedmods.refinedstorage.api.core.FieldsAndMethodsAreNonnullByDefault; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/main/java/com/refinedmods/refinedstorage/mekanism/grid/ChemicalGridInsertionHint.java b/src/main/java/com/refinedmods/refinedstorage/mekanism/grid/ChemicalGridInsertionHint.java index 1d59b55..bcbc0d3 100644 --- a/src/main/java/com/refinedmods/refinedstorage/mekanism/grid/ChemicalGridInsertionHint.java +++ b/src/main/java/com/refinedmods/refinedstorage/mekanism/grid/ChemicalGridInsertionHint.java @@ -1,7 +1,7 @@ package com.refinedmods.refinedstorage.mekanism.grid; import com.refinedmods.refinedstorage.common.Platform; -import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; +import com.refinedmods.refinedstorage.common.api.RefinedStorageClientApi; import com.refinedmods.refinedstorage.common.api.grid.GridInsertionHint; import com.refinedmods.refinedstorage.common.support.tooltip.MouseClientTooltipComponent; import com.refinedmods.refinedstorage.mekanism.ChemicalResource; @@ -27,9 +27,12 @@ public Optional getHint(final ItemStack stack) { private ClientTooltipComponent createComponent(final ChemicalStack result) { final ChemicalResource chemicalResource = ofChemicalStack(result); - final String amount = result.getAmount() == Platform.INSTANCE.getBucketAmount() - ? null - : RefinedStorageApi.INSTANCE.getResourceRendering(ChemicalResource.class).formatAmount(result.getAmount()); + final String amount = result.getAmount() == Platform.INSTANCE.getBucketAmount() ? null : doFormat(result); return MouseClientTooltipComponent.resource(MouseClientTooltipComponent.Type.RIGHT, chemicalResource, amount); } + + private static String doFormat(final ChemicalStack result) { + return RefinedStorageClientApi.INSTANCE.getResourceRendering(ChemicalResource.class) + .formatAmount(result.getAmount()); + } } diff --git a/src/main/java/com/refinedmods/refinedstorage/mekanism/grid/ChemicalGridResource.java b/src/main/java/com/refinedmods/refinedstorage/mekanism/grid/ChemicalGridResource.java index 13b0d58..d360bb1 100644 --- a/src/main/java/com/refinedmods/refinedstorage/mekanism/grid/ChemicalGridResource.java +++ b/src/main/java/com/refinedmods/refinedstorage/mekanism/grid/ChemicalGridResource.java @@ -5,7 +5,7 @@ import com.refinedmods.refinedstorage.api.grid.view.GridView; import com.refinedmods.refinedstorage.api.resource.ResourceAmount; import com.refinedmods.refinedstorage.common.Platform; -import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; +import com.refinedmods.refinedstorage.common.api.RefinedStorageClientApi; import com.refinedmods.refinedstorage.common.api.grid.GridScrollMode; import com.refinedmods.refinedstorage.common.api.grid.strategy.GridExtractionStrategy; import com.refinedmods.refinedstorage.common.api.grid.strategy.GridScrollingStrategy; @@ -44,7 +44,7 @@ public ChemicalGridResource(final ChemicalResource resource, final boolean autocraftable) { super(resource, name, attributes, autocraftable); this.id = MekanismAPI.CHEMICAL_REGISTRY.getId(resource.chemical()); - this.rendering = RefinedStorageApi.INSTANCE.getResourceRendering(ChemicalResource.class); + this.rendering = RefinedStorageClientApi.INSTANCE.getResourceRendering(ChemicalResource.class); this.tooltip = List.of(resource.chemical().getTextComponent()); } diff --git a/src/main/java/com/refinedmods/refinedstorage/mekanism/storage/ChemicalStorageBlockBlockItem.java b/src/main/java/com/refinedmods/refinedstorage/mekanism/storage/ChemicalStorageBlockBlockItem.java new file mode 100644 index 0000000..dda3c39 --- /dev/null +++ b/src/main/java/com/refinedmods/refinedstorage/mekanism/storage/ChemicalStorageBlockBlockItem.java @@ -0,0 +1,120 @@ +package com.refinedmods.refinedstorage.mekanism.storage; + +import com.refinedmods.refinedstorage.common.api.RefinedStorageApi; +import com.refinedmods.refinedstorage.common.api.RefinedStorageClientApi; +import com.refinedmods.refinedstorage.common.api.storage.AbstractStorageContainerBlockItem; +import com.refinedmods.refinedstorage.common.api.storage.SerializableStorage; +import com.refinedmods.refinedstorage.common.api.storage.StorageRepository; +import com.refinedmods.refinedstorage.common.api.support.HelpTooltipComponent; +import com.refinedmods.refinedstorage.common.content.Blocks; +import com.refinedmods.refinedstorage.common.storage.StorageVariant; +import com.refinedmods.refinedstorage.common.storage.UpgradeableStorageContainer; +import com.refinedmods.refinedstorage.mekanism.ChemicalResource; +import com.refinedmods.refinedstorage.mekanism.ChemicalResourceType; +import com.refinedmods.refinedstorage.mekanism.content.Items; + +import java.util.Optional; +import javax.annotation.Nullable; + +import net.minecraft.network.chat.Component; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.inventory.tooltip.TooltipComponent; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; + +import static com.refinedmods.refinedstorage.common.util.IdentifierUtil.format; +import static com.refinedmods.refinedstorage.mekanism.MekanismIntegrationIdentifierUtil.createMekanismIntegrationTranslation; + +public class ChemicalStorageBlockBlockItem extends AbstractStorageContainerBlockItem + implements UpgradeableStorageContainer { + private static final Component CREATIVE_HELP = + createMekanismIntegrationTranslation("item", "creative_chemical_storage_block.help"); + + private final ChemicalStorageVariant variant; + private final Component helpText; + + public ChemicalStorageBlockBlockItem(final Block block, final ChemicalStorageVariant variant) { + super( + block, + new Item.Properties().stacksTo(1).fireResistant(), + RefinedStorageApi.INSTANCE.getStorageContainerItemHelper() + ); + this.variant = variant; + this.helpText = getHelpText(variant); + } + + private static Component getHelpText(final ChemicalStorageVariant variant) { + if (variant.getCapacityInBuckets() == null) { + return CREATIVE_HELP; + } + return createMekanismIntegrationTranslation( + "item", + "chemical_storage_block.help", + format(variant.getCapacityInBuckets()) + ); + } + + @Nullable + @Override + protected Long getCapacity() { + return variant.getCapacity(); + } + + @Override + protected String formatAmount(final long amount) { + return RefinedStorageClientApi.INSTANCE.getResourceRendering(ChemicalResource.class).formatAmount(amount); + } + + @Override + protected SerializableStorage createStorage(final StorageRepository storageRepository) { + return createStorage(variant, storageRepository::markAsChanged); + } + + static SerializableStorage createStorage(final ChemicalStorageVariant variant, final Runnable listener) { + return ChemicalResourceType.STORAGE_TYPE.create(variant.getCapacity(), listener); + } + + @Override + protected ItemStack createPrimaryDisassemblyByproduct(final int count) { + return new ItemStack(Blocks.INSTANCE.getMachineCasing(), count); + } + + @Override + @Nullable + protected ItemStack createSecondaryDisassemblyByproduct(final int count) { + if (variant == ChemicalStorageVariant.CREATIVE) { + return null; + } + return new ItemStack(Items.getChemicalStoragePart(variant), count); + } + + @Override + protected boolean placeBlock(final BlockPlaceContext ctx, final BlockState state) { + if (ctx.getPlayer() instanceof ServerPlayer serverPlayer && !(RefinedStorageApi.INSTANCE.canPlaceNetworkNode( + serverPlayer, + ctx.getLevel(), + ctx.getClickedPos(), + state))) { + return false; + } + return super.placeBlock(ctx, state); + } + + @Override + public Optional getTooltipImage(final ItemStack stack) { + return Optional.of(new HelpTooltipComponent(helpText)); + } + + @Override + public StorageVariant getVariant() { + return variant; + } + + @Override + public void transferTo(final ItemStack from, final ItemStack to) { + helper.markAsToTransfer(from, to); + } +} diff --git a/src/main/java/com/refinedmods/refinedstorage/mekanism/storage/ChemicalStorageBlockProvider.java b/src/main/java/com/refinedmods/refinedstorage/mekanism/storage/ChemicalStorageBlockProvider.java new file mode 100644 index 0000000..03d50d1 --- /dev/null +++ b/src/main/java/com/refinedmods/refinedstorage/mekanism/storage/ChemicalStorageBlockProvider.java @@ -0,0 +1,66 @@ +package com.refinedmods.refinedstorage.mekanism.storage; + +import com.refinedmods.refinedstorage.common.api.storage.SerializableStorage; +import com.refinedmods.refinedstorage.common.api.storage.StorageBlockProvider; +import com.refinedmods.refinedstorage.common.api.support.resource.ResourceFactory; +import com.refinedmods.refinedstorage.mekanism.ChemicalResourceFactory; +import com.refinedmods.refinedstorage.mekanism.ChemicalResourceType; +import com.refinedmods.refinedstorage.mekanism.ModInitializer; +import com.refinedmods.refinedstorage.mekanism.content.BlockEntities; +import com.refinedmods.refinedstorage.mekanism.content.Menus; + +import net.minecraft.network.chat.Component; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.level.block.entity.BlockEntityType; + +import static com.refinedmods.refinedstorage.mekanism.MekanismIntegrationIdentifierUtil.createMekanismIntegrationTranslation; + +public class ChemicalStorageBlockProvider implements StorageBlockProvider { + private final ChemicalStorageVariant variant; + private final Component displayName; + + public ChemicalStorageBlockProvider(final ChemicalStorageVariant variant) { + this.variant = variant; + this.displayName = createMekanismIntegrationTranslation( + "block", + String.format("%s_chemical_storage_block", variant.getName()) + ); + } + + @Override + public SerializableStorage createStorage(final Runnable runnable) { + return ChemicalResourceType.STORAGE_TYPE.create(variant.getCapacity(), runnable); + } + + @Override + public Component getDisplayName() { + return displayName; + } + + @Override + public long getEnergyUsage() { + return switch (this.variant) { + case SIXTY_FOUR_B -> ModInitializer.getConfig().getChemicalStorageBlock().get64bEnergyUsage(); + case TWO_HUNDRED_FIFTY_SIX_B -> ModInitializer.getConfig().getChemicalStorageBlock().get256bEnergyUsage(); + case THOUSAND_TWENTY_FOUR_B -> ModInitializer.getConfig().getChemicalStorageBlock().get1024bEnergyUsage(); + case EIGHT_THOUSAND_NINETY_TWO_B -> + ModInitializer.getConfig().getChemicalStorageBlock().get8192bEnergyUsage(); + case CREATIVE -> ModInitializer.getConfig().getChemicalStorageBlock().getCreativeEnergyUsage(); + }; + } + + @Override + public ResourceFactory getResourceFactory() { + return ChemicalResourceFactory.INSTANCE; + } + + @Override + public BlockEntityType getBlockEntityType() { + return BlockEntities.getChemicalStorageBlock(variant); + } + + @Override + public MenuType getMenuType() { + return Menus.getChemicalStorage(); + } +} diff --git a/src/main/java/com/refinedmods/refinedstorage/mekanism/storage/ChemicalStorageDiskItem.java b/src/main/java/com/refinedmods/refinedstorage/mekanism/storage/ChemicalStorageDiskItem.java index e607238..ddcc53a 100644 --- a/src/main/java/com/refinedmods/refinedstorage/mekanism/storage/ChemicalStorageDiskItem.java +++ b/src/main/java/com/refinedmods/refinedstorage/mekanism/storage/ChemicalStorageDiskItem.java @@ -8,8 +8,7 @@ import com.refinedmods.refinedstorage.common.storage.StorageVariant; import com.refinedmods.refinedstorage.common.storage.UpgradeableStorageContainer; import com.refinedmods.refinedstorage.mekanism.ChemicalResourceRendering; -import com.refinedmods.refinedstorage.mekanism.ChemicalResourceType; -import com.refinedmods.refinedstorage.mekanism.Items; +import com.refinedmods.refinedstorage.mekanism.content.Items; import java.util.Optional; import javax.annotation.Nullable; @@ -63,7 +62,7 @@ protected String formatAmount(final long amount) { @Override protected SerializableStorage createStorage(final StorageRepository storageRepository) { - return ChemicalResourceType.STORAGE_TYPE.create(getCapacity(), storageRepository::markAsChanged); + return ChemicalStorageBlockBlockItem.createStorage(variant, storageRepository::markAsChanged); } @Override diff --git a/src/main/java/com/refinedmods/refinedstorage/mekanism/storage/ChemicalStorageVariant.java b/src/main/java/com/refinedmods/refinedstorage/mekanism/storage/ChemicalStorageVariant.java index 42b97bc..4763e87 100644 --- a/src/main/java/com/refinedmods/refinedstorage/mekanism/storage/ChemicalStorageVariant.java +++ b/src/main/java/com/refinedmods/refinedstorage/mekanism/storage/ChemicalStorageVariant.java @@ -2,7 +2,7 @@ import com.refinedmods.refinedstorage.common.Platform; import com.refinedmods.refinedstorage.common.storage.StorageVariant; -import com.refinedmods.refinedstorage.mekanism.Items; +import com.refinedmods.refinedstorage.mekanism.content.Items; import javax.annotation.Nullable; @@ -21,6 +21,7 @@ public enum ChemicalStorageVariant implements StringRepresentable, StorageVarian private final String name; private final ResourceLocation storageDiskId; + private final ResourceLocation storageBlockId; @Nullable private final ResourceLocation storagePartId; @Nullable @@ -32,6 +33,7 @@ public enum ChemicalStorageVariant implements StringRepresentable, StorageVarian ? createMekanismIntegrationIdentifier(name + "_chemical_storage_part") : null; this.storageDiskId = createMekanismIntegrationIdentifier(name + "_chemical_storage_disk"); + this.storageBlockId = createMekanismIntegrationIdentifier(name + "_chemical_storage_block"); this.capacityInBuckets = capacityInBuckets; } @@ -62,11 +64,19 @@ public ResourceLocation getStorageDiskId() { return storageDiskId; } + public ResourceLocation getStorageBlockId() { + return storageBlockId; + } + @Nullable public ResourceLocation getStoragePartId() { return storagePartId; } + public String getName() { + return name; + } + @Override public String getSerializedName() { return name; diff --git a/src/main/resources/assets/refinedstorage_mekanism_integration/blockstates/1024b_chemical_storage_block.json b/src/main/resources/assets/refinedstorage_mekanism_integration/blockstates/1024b_chemical_storage_block.json new file mode 100644 index 0000000..0adb168 --- /dev/null +++ b/src/main/resources/assets/refinedstorage_mekanism_integration/blockstates/1024b_chemical_storage_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "refinedstorage_mekanism_integration:block/1024b_chemical_storage_block" + } + } +} diff --git a/src/main/resources/assets/refinedstorage_mekanism_integration/blockstates/256b_chemical_storage_block.json b/src/main/resources/assets/refinedstorage_mekanism_integration/blockstates/256b_chemical_storage_block.json new file mode 100644 index 0000000..8143e79 --- /dev/null +++ b/src/main/resources/assets/refinedstorage_mekanism_integration/blockstates/256b_chemical_storage_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "refinedstorage_mekanism_integration:block/256b_chemical_storage_block" + } + } +} diff --git a/src/main/resources/assets/refinedstorage_mekanism_integration/blockstates/64b_chemical_storage_block.json b/src/main/resources/assets/refinedstorage_mekanism_integration/blockstates/64b_chemical_storage_block.json new file mode 100644 index 0000000..5ebe8e4 --- /dev/null +++ b/src/main/resources/assets/refinedstorage_mekanism_integration/blockstates/64b_chemical_storage_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "refinedstorage_mekanism_integration:block/64b_chemical_storage_block" + } + } +} diff --git a/src/main/resources/assets/refinedstorage_mekanism_integration/blockstates/8192b_chemical_storage_block.json b/src/main/resources/assets/refinedstorage_mekanism_integration/blockstates/8192b_chemical_storage_block.json new file mode 100644 index 0000000..67c3beb --- /dev/null +++ b/src/main/resources/assets/refinedstorage_mekanism_integration/blockstates/8192b_chemical_storage_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "refinedstorage_mekanism_integration:block/8192b_chemical_storage_block" + } + } +} diff --git a/src/main/resources/assets/refinedstorage_mekanism_integration/blockstates/creative_chemical_storage_block.json b/src/main/resources/assets/refinedstorage_mekanism_integration/blockstates/creative_chemical_storage_block.json new file mode 100644 index 0000000..911feb2 --- /dev/null +++ b/src/main/resources/assets/refinedstorage_mekanism_integration/blockstates/creative_chemical_storage_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "refinedstorage_mekanism_integration:block/creative_chemical_storage_block" + } + } +} diff --git a/src/main/resources/assets/refinedstorage_mekanism_integration/lang/en_us.json b/src/main/resources/assets/refinedstorage_mekanism_integration/lang/en_us.json index 59a357e..68d24b5 100644 --- a/src/main/resources/assets/refinedstorage_mekanism_integration/lang/en_us.json +++ b/src/main/resources/assets/refinedstorage_mekanism_integration/lang/en_us.json @@ -9,8 +9,30 @@ "item.refinedstorage_mekanism_integration.1024b_chemical_storage_disk": "1024B Chemical Storage Disk", "item.refinedstorage_mekanism_integration.8192b_chemical_storage_disk": "8192B Chemical Storage Disk", "item.refinedstorage_mekanism_integration.creative_chemical_storage_disk": "Creative Chemical Storage Disk", - "item.refinedstorage_mekanism_integration.chemical_storage_disk.help": "Stores %s buckets.", + "item.refinedstorage_mekanism_integration.chemical_storage_disk.help": "Stores %s buckets. When empty, use while holding to return the Chemical Storage Part. Upgradeable to a higher tier by combining with a Chemical Storage Part.", "item.refinedstorage_mekanism_integration.creative_chemical_storage_disk.help": "Stores an infinite amount of buckets.", + "item.refinedstorage_mekanism_integration.chemical_storage_block.help": "Stores %s buckets. When empty, use while holding to return the Chemical Storage Part and Machine Casing. Upgradeable to a higher tier by combining with a Chemical Storage Part.", + "item.refinedstorage_mekanism_integration.creative_chemical_storage_block.help": "Stores an infinite amount of buckets.", + "block.refinedstorage_mekanism_integration.64b_chemical_storage_block": "64B Chemical Storage Block", + "block.refinedstorage_mekanism_integration.256b_chemical_storage_block": "256B Chemical Storage Block", + "block.refinedstorage_mekanism_integration.1024b_chemical_storage_block": "1024B Chemical Storage Block", + "block.refinedstorage_mekanism_integration.8192b_chemical_storage_block": "8192B Chemical Storage Block", + "block.refinedstorage_mekanism_integration.creative_chemical_storage_block": "Creative Chemical Storage Block", "advancements.refinedstorage_mekanism_integration.storing_chemicals": "Storing chemicals", - "advancements.refinedstorage_mekanism_integration.storing_chemicals.description": "Craft a Chemical Storage Disk and put it in your Disk Drive" + "advancements.refinedstorage_mekanism_integration.storing_chemicals.description": "Craft a Chemical Storage Disk and put it in your Disk Drive", + "refinedstorage_mekanism_integration.configuration.title": "Refined Storage - Mekanism Integration Configuration", + "refinedstorage_mekanism_integration.configuration.section.refinedstorage_mekanism_integration.common.toml": "Refined Storage - Mekanism Integration Configuration", + "refinedstorage_mekanism_integration.configuration.section.refinedstorage_mekanism_integration.common.toml.title": "Refined Storage - Mekanism Integration Configuration", + "config.refinedstorage_mekanism_integration.option.chemicalStorageBlock": "Chemical Storage Block", + "config.refinedstorage_mekanism_integration.option.chemicalStorageBlock.tooltip": "Configuration for the Chemical Storage Blocks.", + "config.refinedstorage_mekanism_integration.option.chemicalStorageBlock.sixtyFourBEnergyUsage": "64B energy usage", + "config.refinedstorage_mekanism_integration.option.chemicalStorageBlock.sixtyFourBEnergyUsage.tooltip": "The energy used by the 64B Chemical Storage Block.", + "config.refinedstorage_mekanism_integration.option.chemicalStorageBlock.twoHundredFiftySixBEnergyUsage": "256B energy usage", + "config.refinedstorage_mekanism_integration.option.chemicalStorageBlock.twoHundredFiftySixBEnergyUsage.tooltip": "The energy used by the 256B Chemical Storage Block.", + "config.refinedstorage_mekanism_integration.option.chemicalStorageBlock.thousandTwentyFourBEnergyUsage": "1024B energy usage", + "config.refinedstorage_mekanism_integration.option.chemicalStorageBlock.thousandTwentyFourBEnergyUsage.tooltip": "The energy used by the 1024B Chemical Storage Block.", + "config.refinedstorage_mekanism_integration.option.chemicalStorageBlock.eightThousandHundredNinetyTwoBEnergyUsage": "8192B energy usage", + "config.refinedstorage_mekanism_integration.option.chemicalStorageBlock.eightThousandHundredNinetyTwoBEnergyUsage.tooltip": "The energy used by the 8192B Chemical Storage Block.", + "config.refinedstorage_mekanism_integration.option.chemicalStorageBlock.creativeEnergyUsage": "Creative energy usage", + "config.refinedstorage_mekanism_integration.option.chemicalStorageBlock.creativeEnergyUsage.tooltip": "The energy used by the Creative Chemical Storage Block." } \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage_mekanism_integration/models/block/1024b_chemical_storage_block.json b/src/main/resources/assets/refinedstorage_mekanism_integration/models/block/1024b_chemical_storage_block.json new file mode 100644 index 0000000..bc1922e --- /dev/null +++ b/src/main/resources/assets/refinedstorage_mekanism_integration/models/block/1024b_chemical_storage_block.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "refinedstorage_mekanism_integration:block/chemical_storage_block/1024b_chemical_storage_block" + } +} diff --git a/src/main/resources/assets/refinedstorage_mekanism_integration/models/block/256b_chemical_storage_block.json b/src/main/resources/assets/refinedstorage_mekanism_integration/models/block/256b_chemical_storage_block.json new file mode 100644 index 0000000..77cc199 --- /dev/null +++ b/src/main/resources/assets/refinedstorage_mekanism_integration/models/block/256b_chemical_storage_block.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "refinedstorage_mekanism_integration:block/chemical_storage_block/256b_chemical_storage_block" + } +} diff --git a/src/main/resources/assets/refinedstorage_mekanism_integration/models/block/64b_chemical_storage_block.json b/src/main/resources/assets/refinedstorage_mekanism_integration/models/block/64b_chemical_storage_block.json new file mode 100644 index 0000000..f998136 --- /dev/null +++ b/src/main/resources/assets/refinedstorage_mekanism_integration/models/block/64b_chemical_storage_block.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "refinedstorage_mekanism_integration:block/chemical_storage_block/64b_chemical_storage_block" + } +} diff --git a/src/main/resources/assets/refinedstorage_mekanism_integration/models/block/8192b_chemical_storage_block.json b/src/main/resources/assets/refinedstorage_mekanism_integration/models/block/8192b_chemical_storage_block.json new file mode 100644 index 0000000..5e3ddce --- /dev/null +++ b/src/main/resources/assets/refinedstorage_mekanism_integration/models/block/8192b_chemical_storage_block.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "refinedstorage_mekanism_integration:block/chemical_storage_block/8192b_chemical_storage_block" + } +} diff --git a/src/main/resources/assets/refinedstorage_mekanism_integration/models/block/creative_chemical_storage_block.json b/src/main/resources/assets/refinedstorage_mekanism_integration/models/block/creative_chemical_storage_block.json new file mode 100644 index 0000000..c83e3b5 --- /dev/null +++ b/src/main/resources/assets/refinedstorage_mekanism_integration/models/block/creative_chemical_storage_block.json @@ -0,0 +1,6 @@ +{ + "parent": "block/cube_all", + "textures": { + "all": "refinedstorage_mekanism_integration:block/chemical_storage_block/creative_chemical_storage_block" + } +} diff --git a/src/main/resources/assets/refinedstorage_mekanism_integration/models/item/1024b_chemical_storage_block.json b/src/main/resources/assets/refinedstorage_mekanism_integration/models/item/1024b_chemical_storage_block.json new file mode 100644 index 0000000..588bcb6 --- /dev/null +++ b/src/main/resources/assets/refinedstorage_mekanism_integration/models/item/1024b_chemical_storage_block.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage_mekanism_integration:block/1024b_chemical_storage_block" +} diff --git a/src/main/resources/assets/refinedstorage_mekanism_integration/models/item/256b_chemical_storage_block.json b/src/main/resources/assets/refinedstorage_mekanism_integration/models/item/256b_chemical_storage_block.json new file mode 100644 index 0000000..74dbd14 --- /dev/null +++ b/src/main/resources/assets/refinedstorage_mekanism_integration/models/item/256b_chemical_storage_block.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage_mekanism_integration:block/256b_chemical_storage_block" +} diff --git a/src/main/resources/assets/refinedstorage_mekanism_integration/models/item/64b_chemical_storage_block.json b/src/main/resources/assets/refinedstorage_mekanism_integration/models/item/64b_chemical_storage_block.json new file mode 100644 index 0000000..2556b10 --- /dev/null +++ b/src/main/resources/assets/refinedstorage_mekanism_integration/models/item/64b_chemical_storage_block.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage_mekanism_integration:block/64b_chemical_storage_block" +} diff --git a/src/main/resources/assets/refinedstorage_mekanism_integration/models/item/8192b_chemical_storage_block.json b/src/main/resources/assets/refinedstorage_mekanism_integration/models/item/8192b_chemical_storage_block.json new file mode 100644 index 0000000..7533e0c --- /dev/null +++ b/src/main/resources/assets/refinedstorage_mekanism_integration/models/item/8192b_chemical_storage_block.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage_mekanism_integration:block/8192b_chemical_storage_block" +} diff --git a/src/main/resources/assets/refinedstorage_mekanism_integration/models/item/creative_chemical_storage_block.json b/src/main/resources/assets/refinedstorage_mekanism_integration/models/item/creative_chemical_storage_block.json new file mode 100644 index 0000000..9834a5e --- /dev/null +++ b/src/main/resources/assets/refinedstorage_mekanism_integration/models/item/creative_chemical_storage_block.json @@ -0,0 +1,3 @@ +{ + "parent": "refinedstorage_mekanism_integration:block/creative_chemical_storage_block" +} diff --git a/src/main/resources/assets/refinedstorage_mekanism_integration/textures/block/chemical_storage_block/1024b_chemical_storage_block.png b/src/main/resources/assets/refinedstorage_mekanism_integration/textures/block/chemical_storage_block/1024b_chemical_storage_block.png new file mode 100644 index 0000000000000000000000000000000000000000..82c8c9ae78da123c7c7588a6a0134558085dd00e GIT binary patch literal 2128 zcmbVN4NMbP96xkAWz(S;!?w)SbIy->y}Mqor8f%-MX0gJM+3D6!|UBEEwsJTJD@;> z%;|_zHop;d%gm7J2+l8NoN>6JsGHLaBTL+LF&mIgr5ck>CiIXpRr8Bu;=2H8H4TEm4IPm z&bh5N*=AY7@uF7^1knN2L9ZX7F>HQv&=2?$D61T>$n7)Yq2uki$}Jf2eAYr){Hf68 z&Zr8&+^S3~Usb{z1UxxOH9yE90xy(-D(Ln2Bra&g!@L~YE3Zjh6^6(qMtq@SP-U}Z zsZzxNR2kGX!Bdn*r8lSr2Vexi%u{J74MWlzl4b~s8lglwJiWoyr zM%*RKevTw7Dk{_!j9Ls7k+i{JASn&0(GUnhNR>Vr1PPxsV~D{7B|hNx%Wl!9QW$|l zER&5mk~-*v*B_=0yCuudM_!I^Td=%#|3wXlD1)hW+=!HI6LRdPA^}9q_ zlw9ItsH30%VF1O}Vu{)qQH$3bH6h7q<;aalKt@DM)=EDlbD$)a1$dZNj%3bIyzz6X z0SIIBrP^PkmB&#&6TCbX&@Ae5|g*0c_0cZj;G~y_0T7uG{lv!ztV`+|M2};jV z)F9L%3T|iRFeptE8U)pH6wPTUf=YY@MKvP;89Wgz@SIZ&cmZO z#I`ixMi&iuhO;WF1Vt4EX-6Vp2$rQFLD5<#0klXYgYJm|0EQ8uR;lK2fp8ga38k(w zazAomX=LYdtHL$G0bZ$fBhD*Hh5{aW?H(x}Ph&Z9zQP3&>3<}D(7Gf#*MuKH=7n(XK#d?+KU|vr*yV6QvcrZuYKtEs)H?Y z8C^|_XPOS2ec5I^cKM4p*X&tyI_a&gFC4geXzMqtN+zvtT30sjREo!x)t^}V+4h?d zwEy<=^MCg0>vo?xla6=U-{{-^;({q@-S$=%!zZWg%A7TQ^&czdoW`!)D&J@AvZrTT z)eW;YpSyLdHK$m&v!I~hm5FsJyEnkboMP^M4c1z=&${DcABHXA3Ycjz_Xd8I!2H+_ zduwxBxBYNV>`9Mqr~Em#!@a(z^Y>~j<$l|bn5#a$p`pQa>cX*;uI5s3Z_LT~q%O_d zjmtZq*|ude7N6~!UcYGcL*e+1yq}d%tcpR(Q~Mv;6o~-%;DV_4M_? z51|w7?W5zmuRM5AZAciKkC``73^U8TDfgGc;L4R2(^rP0KZQE9xBpsNxHisNQ(b*{ zU&;Xj=5GHGFFGA^G%n$&37*LG&gom-mcbvtG&>$d&}IZ z>&~C=3Ec1P9a~!)!xb13diRXM_FCt5CWKBbxpXA21uiQ`qo$^&v~<$Iy=||q%~@RY z(EjQ7uWx-P4u6*q4OE?IUi8uQJ@N%ZU(=S(1pH9<)ODwCkHx=kTN77{Wn?^?ay`$! i0R6E~gf_F&V!`I3{Wvt0(UrSdS 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

+t z4#l^}K?|6Ktet=Uxa0Pu1&zx(i&C%E9;U^sLdvDGM i$NDs(z$V)5&|EN&(aw2royn`$2HV0M>)wpjHU9u(QSU_n literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/refinedstorage_mekanism_integration/textures/block/chemical_storage_block/8192b_chemical_storage_block.png b/src/main/resources/assets/refinedstorage_mekanism_integration/textures/block/chemical_storage_block/8192b_chemical_storage_block.png new file mode 100644 index 0000000000000000000000000000000000000000..0a8a1e0ffc2ce1aaa86777a9af4642fe4c76a03d GIT binary patch literal 2119 zcmbVNeN5D59Ig_aFm>Rfxw&POx;Sz6+FtLo^Hk(eP>(N(GRBl%``%r>kDhIh1B?sK zpdikVsbiV=F*pA(OwpmiNdimIxv7)HA!;_k4UO3%xQPid8{6I<$H^A_$S&#iZTq~> z^ZY*gYjsZ6qKWa-;t>Ryn3-YAgXaYG7(W*NZ{OiI!c$xz<1HCMo_|q2#vmWpX%Hm# zTOq$dDX=ePIMJtNdC>v1rM>_}BgmY2r2&@n00ngbm*BTz_nKQVRN$@H3WJ@r2hxCB z$S9YKWbWSM)34B0d(Ndq+FEgc9EX>QmwR)St&@e>tSg}-95G}Ch zplPB6P>YtrIg-?&CX1GLur$xovr!$XqX|k!P&7^&7}Ch-EokJ2K{<(cGI_Rz5ixjW z#oUS#UMR+L->WwBTYQb*`?I7HxbnO|W`albr$n85~QP7(r&Ao@|2k#&ec z#fm|zLoxUQQChzo$rH>NQOX7gN=vFSg@HU5#RYeM@GCOJQc-NcEh?hy z79T?$ef%#0m|MF&sxhh;pD!vQE9oULj7UO8Ma%hR0YKydSqw@XNH2jlr>oHfm^2Bn ziYVoaqIbAbIm4Dwok43tXRZ+Zycm*GMr;5!RsmKFR!xtSMp&|ZiewBFV=&;Pi6O}$ zs9od*XW0lSMd3OKr5S^X(L<>D5ft_e&noOw!92$}Majp)fCV4x0z|;?!q8|MnKaQW zN>CWOqr)!jb|%v=E3BUbnKmm1W7Y}+&o~@rk~W*oxXHlrxRZu<90nK-N9vts67UYQ z&N;l_CUQZwvg-b!F6TuKay(MyDPT0yW*8D>;Bm84Pvfis=x_(mQ!GzYMxKnaWlI8l z(OB*+7|exZX@VaNeYMKpuw)Hvp5i}vuhZ}^+5M)@ovdH_f z46KQ)yaF2T35Mm=UbkYLT4cauk=w#3`FJMf$o`NUK+-1^e@I;xol1z6K&lJo?y1d1 zJkGq#mOR<|vz2nl(+KOMH{<`Y9!U%5X8kSzCntfa!4T?*87d0#-+G0gjTlG6a5&@C zWpuj2i|Bj?en>6B>HB_yl!_o@<1=lk`7?I}KRE8eQZ;A0O@H*Bo{F8RnEGM$_!+3N zcJZ+<7N=bMtoi5DZ@gB-9j^>jUi-0?UDLb%Y;wxvlu|-)(K@b(`9fHy`{(Iggy^yzVVA?iquSpTFMJ9#@gHzh!OA zfr8nqkDTo6@HaIyG~DTbcx)e%bH}^NwwFf4yEVwEby@cx{@KzdTTXWmaN}r`O-q-?(p}Va}2= zs^4*36CBs_5>kKV*TKPct=$dF>rZUUb^Z3>0ly{JrUZk#7ed*}1*x_zRON!?-cL<^ zt5&WYTg)w;7WY+852x99$&zS!bz9PO%bhy;Zru{9t^9uLrkI5E+*i(By!d6&(dG4n zgR$+J&YfMS?hUMsxq0iB%~mH*C~mx-kb5{^x|DKg?%#ivmz2!FOsy>)t52G@c6W7U zWoL()-_dOB@ESLu$2to=8_9pIC aS#UjG{lLTDPzFs2fE?XO$iU3*+R?gmB; zJ^+<4m>LjC90{19f?{}yFbS`iMW+zwdp;(dN^n7<6A8v&@3qYU692GC+h2d**XR4} zZ$(Y@ebbB`SbpY5xg-S9OoRyof?kitXGUGPG2;mrs#cAFk* zup5H+ONtqF$*LI!u4FU@xe=taEE$uP7GR@c(4-q4Y+!E}hU%&Zo67~sV9W=a^~%L@ zP`9``q%3YxL=`KWiIyfMs2~b#8BInbh9xCESX!?H*UmP9p=lPo#e;brgJ?sr2KAY7 zfQl{(S4fgZdC{eYWk!{m5|k!shM;JIVsMg^NVmj_X!gROxwxuHwf>5%G5F=dnr%BK z5kw-9a3vU*8E+yeQ4|T1CTJRm9JtkH*m4p#tlM%L{J>J;dd${M19ddYVYAitU=V7? zhiELX*08d1f)OKASU^Af7_ z)KE_M@T!A z5x787zXYp8$+N~JUmVD`84sCeB$xl1Tp&=N52l;q(4x7zp_&P6hJz$41N^cLJQ$?A zaZ-S_5TXQ$;w6U0NnRq!3~SI-b*(MOO0zgc;S3p~Xo+JahJ%trtgskW*_Qv6Syd#> zj7Mb{Nj)kz0U~BJVQ4--lFy8oacCH#W6~&sL8;2HY}rsimEVIw7hJloN^X_sL6{?P zS`}nm6Il`$X~vC*HP#JOK1_3zn3MOLN~=>cj(nzlR8xUEhOCkrNwcKJ;TpyBI2mR& zT;zEY*GQ5DvZ_!(U~}5$#C6!ga%8wx2bBsnaw1R5ZdJfJ1t>VDvI-uiXa#3kH>(N? z14z-0p-#djs0Kokoi6cURCcq$shvn`W>e%uiew3jgjbe6?_cOc)-@}VRdsH!)5nt^dyKh_;nZ^D+2_=OG~6F^F~tOgcu50&V4UTj0KC(%Fd5+xhcDf z=reP1VJVFll`z2F3KPZ!mSylTBha{_xiwi4WKsq~Dd7wYD3qB)!=(KJ#drmw!pC}P ziVCoTm!t%y-0P#=0kVQ+E+grq0_C)y9+LF?Dkxt?fE2xCd7xsLWZHTLJaKt1p;NFZ zD|N@~wk+B@urQAsO-~9*Rx)W+oF)Y-mfhAbQp{IYHW{^vW&jK3GM$@YvrNrS$Z_Cp zf>m}U!-2RIeoJ0-dGwkJG=}F`oDK^xuYl!nQ3NdPCD?^BFLSg2TX7`%OAeDOLQiup ze)wF=2r137(FEWxmB9YHGgmfO{)tMf2o-qzC3xp7)AXVk}hKg24+xNBnS~K}@k9GEkhmDVy7QB7c7n`uqq`U6wZ11c~ z{k7rqLnYtWjJjq0p4kg0Oqw`qPv5G--m|K21+V*Hq=dN8mcC7K9)Y>WcPCeS& z_y&hyH^)5=AAzYf3EUOTOD+2@hoou?O&KfY5v zYtJ_WQy%Y?s@A--wE!vVJ~nyug1uiCUj0ODEm+sv*z!T`EM(ci&XU>4tQkms{Zonh z`W?}0zU}YtKXYdF^3TLczdT<%Ffg#YgL-=1N@{xXGZ=Ee|G=22d;R&c)Y)^VP8I*L z_0-E&dCNnew)P;e=r47ji0^surOo5Ii#Bc9^5=yMW6;-ky!OeKqG#S4kM>xacCxhR z{PP=&PM#Gfj!S*@+v3xmXUd)`nf~O2rR&b6Qm<}3_0jc@cXf4@biX_J>hT%D