RyanHub – file viewer
filename: common/src/main/java/rearth/oritech/client/init/ModScreens.java
branch: 1.21
back to repo
package rearth.oritech.client.init;

import dev.architectury.registry.menu.MenuRegistry;
import io.wispforest.endec.Endec;
import io.wispforest.endec.impl.StructEndecBuilder;
import io.wispforest.owo.serialization.CodecUtils;
import io.wispforest.owo.serialization.endec.MinecraftEndecs;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.network.codec.PacketCodec;
import net.minecraft.registry.Registry;
import net.minecraft.registry.RegistryKey;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.screen.ScreenHandlerType;
import net.minecraft.util.math.BlockPos;
import rearth.oritech.client.ui.*;
import rearth.oritech.util.MachineAddonController;
import rearth.oritech.util.registry.ArchitecturyRegistryContainer;

import static rearth.oritech.util.MachineAddonController.ADDON_UI_ENDEC;

public class ModScreens implements ArchitecturyRegistryContainer<ScreenHandlerType<?>> {
    
    public static final ScreenHandlerType<BasicMachineScreenHandler> TREEFELLER_SCREEN = MenuRegistry.ofExtended((BasicMachineScreenHandler::new));
    public static final ScreenHandlerType<BasicMachineScreenHandler> ATOMIC_FORGE_SCREEN = MenuRegistry.ofExtended((BasicMachineScreenHandler::new));
    public static final ScreenHandlerType<BasicMachineScreenHandler> TANK_SCREEN = MenuRegistry.ofExtended((BasicMachineScreenHandler::new));
    public static final ScreenHandlerType<BasicMachineScreenHandler> CHARGER_SCREEN = MenuRegistry.ofExtended((BasicMachineScreenHandler::new));
    public static final ScreenHandlerType<BasicMachineScreenHandler> FUEL_PORT_SCREEN = MenuRegistry.ofExtended((BasicMachineScreenHandler::new));
    public static final ScreenHandlerType<BasicMachineScreenHandler> AUGMENTER_INV_SCREEN = MenuRegistry.ofExtended((BasicMachineScreenHandler::new));
    
    public static final ScreenHandlerType<UpgradableMachineScreenHandler> LASER_SCREEN = MenuRegistry.ofExtended((UpgradableMachineScreenHandler::new));
    public static final ScreenHandlerType<UpgradableMachineScreenHandler> PULVERIZER_SCREEN = MenuRegistry.ofExtended((UpgradableMachineScreenHandler::new));
    public static final ScreenHandlerType<UpgradableMachineScreenHandler> GRINDER_SCREEN = MenuRegistry.ofExtended((UpgradableMachineScreenHandler::new));
    public static final ScreenHandlerType<UpgradableMachineScreenHandler> ASSEMBLER_SCREEN = MenuRegistry.ofExtended((UpgradableMachineScreenHandler::new));
    public static final ScreenHandlerType<UpgradableMachineScreenHandler> FOUNDRY_SCREEN = MenuRegistry.ofExtended((UpgradableMachineScreenHandler::new));
    public static final ScreenHandlerType<UpgradableMachineScreenHandler> COOLER_SCREEN = MenuRegistry.ofExtended((UpgradableMachineScreenHandler::new));
    public static final ScreenHandlerType<UpgradableMachineScreenHandler> STORAGE_SCREEN = MenuRegistry.ofExtended((UpgradableMachineScreenHandler::new));
    public static final ScreenHandlerType<UpgradableMachineScreenHandler> POWERED_FURNACE_SCREEN = MenuRegistry.ofExtended((UpgradableMachineScreenHandler::new));
    public static final ScreenHandlerType<UpgradableMachineScreenHandler> BIO_GENERATOR_SCREEN = MenuRegistry.ofExtended((UpgradableMachineScreenHandler::new));
    public static final ScreenHandlerType<UpgradableMachineScreenHandler> BASIC_GENERATOR_SCREEN = MenuRegistry.ofExtended((UpgradableMachineScreenHandler::new));
    public static final ScreenHandlerType<UpgradableMachineScreenHandler> LAVA_GENERATOR_SCREEN = MenuRegistry.ofExtended((UpgradableMachineScreenHandler::new));
    public static final ScreenHandlerType<UpgradableMachineScreenHandler> FUEL_GENERATOR_SCREEN = MenuRegistry.ofExtended((UpgradableMachineScreenHandler::new));
    public static final ScreenHandlerType<UpgradableMachineScreenHandler> STEAM_ENGINE_SCREEN = MenuRegistry.ofExtended((UpgradableMachineScreenHandler::new));
    public static final ScreenHandlerType<UpgradableMachineScreenHandler> DESTROYER_SCREEN = MenuRegistry.ofExtended((UpgradableMachineScreenHandler::new));
    public static final ScreenHandlerType<UpgradableMachineScreenHandler> PLACER_SCREEN = MenuRegistry.ofExtended((UpgradableMachineScreenHandler::new));
    public static final ScreenHandlerType<UpgradableMachineScreenHandler> FERTILIZER_SCREEN = MenuRegistry.ofExtended((UpgradableMachineScreenHandler::new));
    
    public static final ScreenHandlerType<ReactorScreenHandler> REACTOR_SCREEN = MenuRegistry.ofExtended((ReactorScreenHandler::new));
    public static final ScreenHandlerType<CatalystScreenHandler> CATALYST_SCREEN = MenuRegistry.ofExtended((CatalystScreenHandler::new));
    public static final ScreenHandlerType<EnchanterScreenHandler> ENCHANTER_SCREEN = MenuRegistry.ofExtended((EnchanterScreenHandler::new));
    public static final ScreenHandlerType<AcceleratorScreenHandler> ACCELERATOR_SCREEN = MenuRegistry.ofExtended((AcceleratorScreenHandler::new));
    public static final ScreenHandlerType<ItemFilterScreenHandler> ITEM_FILTER_SCREEN = MenuRegistry.ofExtended((ItemFilterScreenHandler::new));
    public static final ScreenHandlerType<PlayerModifierScreenHandler> MODIFIER_SCREEN = MenuRegistry.ofExtended((PlayerModifierScreenHandler::new));
    public static final ScreenHandlerType<RedstoneAddonScreenHandler> REDSTONE_ADDON_SCREEN = MenuRegistry.ofExtended((RedstoneAddonScreenHandler::new));
    
    public static final ScreenHandlerType<DroneScreenHandler> DRONE_SCREEN = MenuRegistry.ofExtended((DroneScreenHandler::new));
    public static final ScreenHandlerType<CentrifugeScreenHandler> CENTRIFUGE_SCREEN = MenuRegistry.ofExtended((CentrifugeScreenHandler::new));
    public static final ScreenHandlerType<InventoryProxyScreenHandler> INVENTORY_PROXY_SCREEN = MenuRegistry.ofExtended((InventoryProxyScreenHandler::new));
    
    public static void registerScreens() {
        MenuRegistry.registerScreenFactory(TREEFELLER_SCREEN, BasicMachineScreen<BasicMachineScreenHandler>::new);
        MenuRegistry.registerScreenFactory(TANK_SCREEN, TankScreen::new);
        MenuRegistry.registerScreenFactory(ATOMIC_FORGE_SCREEN, BasicMachineScreen<BasicMachineScreenHandler>::new);
        MenuRegistry.registerScreenFactory(CATALYST_SCREEN, CatalystScreen::new);
        MenuRegistry.registerScreenFactory(ENCHANTER_SCREEN, EnchanterScreen::new);
        MenuRegistry.registerScreenFactory(ACCELERATOR_SCREEN, AcceleratorScreen::new);
        MenuRegistry.registerScreenFactory(CHARGER_SCREEN, BasicMachineScreen<BasicMachineScreenHandler>::new);
        MenuRegistry.registerScreenFactory(FUEL_PORT_SCREEN, BasicMachineScreen<BasicMachineScreenHandler>::new);
        MenuRegistry.registerScreenFactory(AUGMENTER_INV_SCREEN, BasicMachineScreen<BasicMachineScreenHandler>::new);
        
        MenuRegistry.registerScreenFactory(PULVERIZER_SCREEN, UpgradableMachineScreen<UpgradableMachineScreenHandler>::new);
        MenuRegistry.registerScreenFactory(GRINDER_SCREEN, UpgradableMachineScreen<UpgradableMachineScreenHandler>::new);
        MenuRegistry.registerScreenFactory(ASSEMBLER_SCREEN, UpgradableMachineScreen<UpgradableMachineScreenHandler>::new);
        MenuRegistry.registerScreenFactory(FOUNDRY_SCREEN, UpgradableMachineScreen<UpgradableMachineScreenHandler>::new);
        MenuRegistry.registerScreenFactory(COOLER_SCREEN, UpgradableMachineScreen<UpgradableMachineScreenHandler>::new);
        MenuRegistry.registerScreenFactory(POWERED_FURNACE_SCREEN, UpgradableMachineScreen<UpgradableMachineScreenHandler>::new);
        MenuRegistry.registerScreenFactory(BIO_GENERATOR_SCREEN, UpgradableMachineScreen<UpgradableMachineScreenHandler>::new);
        MenuRegistry.registerScreenFactory(LAVA_GENERATOR_SCREEN, UpgradableMachineScreen<UpgradableMachineScreenHandler>::new);
        MenuRegistry.registerScreenFactory(FUEL_GENERATOR_SCREEN, UpgradableMachineScreen<UpgradableMachineScreenHandler>::new);
        MenuRegistry.registerScreenFactory(BASIC_GENERATOR_SCREEN, UpgradableMachineScreen<UpgradableMachineScreenHandler>::new);
        MenuRegistry.registerScreenFactory(STORAGE_SCREEN, EnergyStorageScreen::new);
        MenuRegistry.registerScreenFactory(DESTROYER_SCREEN, UpgradableMachineScreen<UpgradableMachineScreenHandler>::new);
        MenuRegistry.registerScreenFactory(PLACER_SCREEN, UpgradableMachineScreen<UpgradableMachineScreenHandler>::new);
        MenuRegistry.registerScreenFactory(FERTILIZER_SCREEN, UpgradableMachineScreen<UpgradableMachineScreenHandler>::new);
        MenuRegistry.registerScreenFactory(LASER_SCREEN, UpgradableMachineScreen<UpgradableMachineScreenHandler>::new);
        
        MenuRegistry.registerScreenFactory(INVENTORY_PROXY_SCREEN, InventoryProxyScreen::new);
        MenuRegistry.registerScreenFactory(REACTOR_SCREEN, ReactorScreen::new);
        MenuRegistry.registerScreenFactory(MODIFIER_SCREEN, PlayerModifierScreen::new);
        MenuRegistry.registerScreenFactory(ITEM_FILTER_SCREEN, ItemFilterScreen::new);
        MenuRegistry.registerScreenFactory(DRONE_SCREEN, DroneScreen::new);
        MenuRegistry.registerScreenFactory(REDSTONE_ADDON_SCREEN, RedstoneAddonScreen::new);
        MenuRegistry.registerScreenFactory(CENTRIFUGE_SCREEN, CentrifugeScreen::new);
        MenuRegistry.registerScreenFactory(STEAM_ENGINE_SCREEN, SteamEngineScreen::new);
    }
    
    @Override
    @SuppressWarnings("unchecked")
    public Class<ScreenHandlerType<?>> getTargetFieldType() {
        return (Class<ScreenHandlerType<?>>) (Object) ScreenHandlerType.class;
    }
    
    @Override
    public RegistryKey<Registry<ScreenHandlerType<?>>> getRegistryType() {
        return RegistryKeys.SCREEN_HANDLER;
    }
    
    public record UpgradableData(BlockPos pos, MachineAddonController.AddonUiData addonUiData, float coreQuality) {
        public static final Endec<UpgradableData> PACKET_ENDEC = StructEndecBuilder.of(
          MinecraftEndecs.BLOCK_POS.fieldOf("pos", UpgradableData::pos),
          ADDON_UI_ENDEC.fieldOf("addonUiData", UpgradableData::addonUiData),
          Endec.FLOAT.fieldOf("coreQuality", UpgradableData::coreQuality),
          UpgradableData::new);
        public static final PacketCodec<PacketByteBuf, UpgradableData> PACKET_CODEC = CodecUtils.toPacketCodec(PACKET_ENDEC);
    }
}