// Path: src/main/java/org/cyclops/integratedtunnels/IntegratedTunnels.java
// @Mod(Reference.MOD_ID)
// public class IntegratedTunnels extends ModBaseVersionable<IntegratedTunnels> {
//     
//     /**
//      * The unique instance of this mod.
//      */
//     public static IntegratedTunnels _instance;
// 
//     public IntegratedTunnels() {
//         super(Reference.MOD_ID, (instance) -> _instance = instance);
// 
//         // Registries
//         getRegistryManager().addRegistry(IBlockBreakHandlerRegistry.class, BlockBreakHandlerRegistry.getInstance());
//         getRegistryManager().addRegistry(IBlockPlaceHandlerRegistry.class, BlockBreakPlaceRegistry.getInstance());
// 
//         FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onRegistriesCreate);
//     }
// 
//     public void onRegistriesCreate(RegistryEvent.NewRegistry event) {
//         TunnelIngredientComponentCapabilities.load();
//         TunnelAspects.load();
//         PartTypes.load();
//         BlockBreakHandlers.load();
//         BlockPlaceHandlers.load();
//     }
// 
//     @Override
//     protected void setup(FMLCommonSetupEvent event) {
//         super.setup(event);
// 
//         MinecraftForge.EVENT_BUS.register(new TunnelNetworkCapabilityConstructors());
// 
//         // Initialize info book
//         IntegratedDynamics._instance.getRegistryManager().getRegistry(IInfoBookRegistry.class)
//                 .registerSection(
//                         OnTheDynamicsOfIntegrationBook.getInstance(), "info_book.integrateddynamics.manual",
//                         "/data/" + Reference.MOD_ID + "/info/tunnels_info.xml");
//         IntegratedDynamics._instance.getRegistryManager().getRegistry(IInfoBookRegistry.class)
//                 .registerSection(
//                         OnTheDynamicsOfIntegrationBook.getInstance(), "info_book.integrateddynamics.tutorials",
//                         "/data/" + Reference.MOD_ID + "/info/tunnels_tutorials.xml");
// 
//         // Register value list proxies
//         TunnelValueTypeListProxyFactories.load();
// 
//         // Inject aspects into ID parts
//         AspectRegistry.getInstance().register(org.cyclops.integrateddynamics.core.part.PartTypes.NETWORK_READER, Lists.newArrayList(
//                 TunnelAspects.Read.Item.LONG_COUNT,
//                 TunnelAspects.Read.Item.LONG_COUNTMAX,
//                 TunnelAspects.Read.Item.LIST_ITEMSTACKS,
//                 TunnelAspects.Read.Item.OPERATOR_GETITEMCOUNT,
//                 TunnelAspects.Read.Item.INTEGER_INTERFACES,
// 
//                 TunnelAspects.Read.Fluid.LONG_COUNT,
//                 TunnelAspects.Read.Fluid.LONG_COUNTMAX,
//                 TunnelAspects.Read.Fluid.LIST_FLUIDSTACKS,
//                 TunnelAspects.Read.Fluid.OPERATOR_GETFLUIDCOUNT,
//                 TunnelAspects.Read.Fluid.INTEGER_INTERFACES
//         ));
//     }
// 
//     @Override
//     public ItemGroup constructDefaultItemGroup() {
//         return new ItemGroupMod(this, () -> RegistryEntries.ITEM_PART_INTERFACE);
//     }
// 
//     @Override
//     public void onConfigsRegister(ConfigHandler configHandler) {
//         super.onConfigsRegister(configHandler);
// 
//         configHandler.addConfigurable(new GeneralConfig());
// 
//         configHandler.addConfigurable(new ItemNetworkConfig());
//         configHandler.addConfigurable(new FluidNetworkConfig());
// 
//         configHandler.addConfigurable(new ItemDummyPickAxeConfig());
// 
//         configHandler.addConfigurable(new ContainerInterfaceSettingsConfig());
//     }
// 
//     @Override
//     @OnlyIn(Dist.CLIENT)
//     protected IClientProxy constructClientProxy() {
//         return new ClientProxy();
//     }
// 
//     @Override
//     protected ICommonProxy constructCommonProxy() {
//         return new CommonProxy();
//     }
// 
//     /**
//      * Log a new info message for this mod.
//      * @param message The message to show.
//      */
//     public static void clog(String message) {
//         clog(Level.INFO, message);
//     }
//     
//     /**
//      * Log a new message of the given level for this mod.
//      * @param level The level in which the message must be shown.
//      * @param message The message to show.
//      */
//     public static void clog(Level level, String message) {
//         IntegratedTunnels._instance.getLoggerHelper().log(level, message);
//     }
//     
// }


import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.Inventory;
import net.minecraft.inventory.container.Container;
import net.minecraft.inventory.container.INamedContainerProvider;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TranslationTextComponent;
import org.apache.commons.lang3.tuple.Triple;
import org.cyclops.cyclopscore.init.ModBase;
import org.cyclops.integrateddynamics.api.part.IPartContainer;
import org.cyclops.integrateddynamics.api.part.IPartState;
import org.cyclops.integrateddynamics.api.part.IPartType;
import org.cyclops.integrateddynamics.api.part.PartPos;
import org.cyclops.integrateddynamics.api.part.PartRenderPosition;
import org.cyclops.integrateddynamics.api.part.PartTarget;
import org.cyclops.integrateddynamics.core.helper.PartHelpers;
import org.cyclops.integrateddynamics.core.part.PartTypeBase;
import org.cyclops.integratedtunnels.IntegratedTunnels;
import javax.annotation.Nullable;
import java.util.Optional;
package org.cyclops.integratedtunnels.core.part;



/**
 * Base part for a tunnel.
 * @author rubensworks
 */
public abstract class PartTypeTunnel<P extends IPartType<P, S>, S extends IPartState<P>> extends PartTypeBase<P, S> {

    public PartTypeTunnel(String name) {
        super(name, new PartRenderPosition(0.25F, 0.25F, 0.375F, 0.375F));
    }

    @Override
    public ModBase getMod() {
// Path: src/main/java/org/cyclops/integratedtunnels/IntegratedTunnels.java
// @Mod(Reference.MOD_ID)
// public class IntegratedTunnels extends ModBaseVersionable<IntegratedTunnels> {
//     
//     /**
//      * The unique instance of this mod.
//      */
//     public static IntegratedTunnels _instance;
// 
//     public IntegratedTunnels() {
//         super(Reference.MOD_ID, (instance) -> _instance = instance);
// 
//         // Registries
//         getRegistryManager().addRegistry(IBlockBreakHandlerRegistry.class, BlockBreakHandlerRegistry.getInstance());
//         getRegistryManager().addRegistry(IBlockPlaceHandlerRegistry.class, BlockBreakPlaceRegistry.getInstance());
// 
//         FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onRegistriesCreate);
//     }
// 
//     public void onRegistriesCreate(RegistryEvent.NewRegistry event) {
//         TunnelIngredientComponentCapabilities.load();
//         TunnelAspects.load();
//         PartTypes.load();
//         BlockBreakHandlers.load();
//         BlockPlaceHandlers.load();
//     }
// 
//     @Override
//     protected void setup(FMLCommonSetupEvent event) {
//         super.setup(event);
// 
//         MinecraftForge.EVENT_BUS.register(new TunnelNetworkCapabilityConstructors());
// 
//         // Initialize info book
//         IntegratedDynamics._instance.getRegistryManager().getRegistry(IInfoBookRegistry.class)
//                 .registerSection(
//                         OnTheDynamicsOfIntegrationBook.getInstance(), "info_book.integrateddynamics.manual",
//                         "/data/" + Reference.MOD_ID + "/info/tunnels_info.xml");
//         IntegratedDynamics._instance.getRegistryManager().getRegistry(IInfoBookRegistry.class)
//                 .registerSection(
//                         OnTheDynamicsOfIntegrationBook.getInstance(), "info_book.integrateddynamics.tutorials",
//                         "/data/" + Reference.MOD_ID + "/info/tunnels_tutorials.xml");
// 
//         // Register value list proxies
//         TunnelValueTypeListProxyFactories.load();
// 
//         // Inject aspects into ID parts
//         AspectRegistry.getInstance().register(org.cyclops.integrateddynamics.core.part.PartTypes.NETWORK_READER, Lists.newArrayList(
//                 TunnelAspects.Read.Item.LONG_COUNT,
//                 TunnelAspects.Read.Item.LONG_COUNTMAX,
//                 TunnelAspects.Read.Item.LIST_ITEMSTACKS,
//                 TunnelAspects.Read.Item.OPERATOR_GETITEMCOUNT,
//                 TunnelAspects.Read.Item.INTEGER_INTERFACES,
// 
//                 TunnelAspects.Read.Fluid.LONG_COUNT,
//                 TunnelAspects.Read.Fluid.LONG_COUNTMAX,
//                 TunnelAspects.Read.Fluid.LIST_FLUIDSTACKS,
//                 TunnelAspects.Read.Fluid.OPERATOR_GETFLUIDCOUNT,
//                 TunnelAspects.Read.Fluid.INTEGER_INTERFACES
//         ));
//     }
// 
//     @Override
//     public ItemGroup constructDefaultItemGroup() {
//         return new ItemGroupMod(this, () -> RegistryEntries.ITEM_PART_INTERFACE);
//     }
// 
//     @Override
//     public void onConfigsRegister(ConfigHandler configHandler) {
//         super.onConfigsRegister(configHandler);
// 
//         configHandler.addConfigurable(new GeneralConfig());
// 
//         configHandler.addConfigurable(new ItemNetworkConfig());
//         configHandler.addConfigurable(new FluidNetworkConfig());
// 
//         configHandler.addConfigurable(new ItemDummyPickAxeConfig());
// 
//         configHandler.addConfigurable(new ContainerInterfaceSettingsConfig());
//     }
// 
//     @Override
//     @OnlyIn(Dist.CLIENT)
//     protected IClientProxy constructClientProxy() {
//         return new ClientProxy();
//     }
// 
//     @Override
//     protected ICommonProxy constructCommonProxy() {
//         return new CommonProxy();
//     }
// 
//     /**
//      * Log a new info message for this mod.
//      * @param message The message to show.
//      */
//     public static void clog(String message) {
//         clog(Level.INFO, message);
//     }
//     
//     /**
//      * Log a new message of the given level for this mod.
//      * @param level The level in which the message must be shown.
//      * @param message The message to show.
//      */
//     public static void clog(Level level, String message) {
//         IntegratedTunnels._instance.getLoggerHelper().log(level, message);
//     }
//     
// }


// Path: src/main/java/org/cyclops/integratedtunnels/core/part/PartTypeTunnel.java
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.PlayerInventory;
import net.minecraft.inventory.Inventory;
import net.minecraft.inventory.container.Container;
import net.minecraft.inventory.container.INamedContainerProvider;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TranslationTextComponent;
import org.apache.commons.lang3.tuple.Triple;
import org.cyclops.cyclopscore.init.ModBase;
import org.cyclops.integrateddynamics.api.part.IPartContainer;
import org.cyclops.integrateddynamics.api.part.IPartState;
import org.cyclops.integrateddynamics.api.part.IPartType;
import org.cyclops.integrateddynamics.api.part.PartPos;
import org.cyclops.integrateddynamics.api.part.PartRenderPosition;
import org.cyclops.integrateddynamics.api.part.PartTarget;
import org.cyclops.integrateddynamics.core.helper.PartHelpers;
import org.cyclops.integrateddynamics.core.part.PartTypeBase;
import org.cyclops.integratedtunnels.IntegratedTunnels;
import javax.annotation.Nullable;
import java.util.Optional;

package org.cyclops.integratedtunnels.core.part;



/**
 * Base part for a tunnel.
 * @author rubensworks
 */
public abstract class PartTypeTunnel<P extends IPartType<P, S>, S extends IPartState<P>> extends PartTypeBase<P, S> {

    public PartTypeTunnel(String name) {
        super(name, new PartRenderPosition(0.25F, 0.25F, 0.375F, 0.375F));
    }

    @Override
    public ModBase getMod() {
        return IntegratedTunnels._instance;