package gregtech.common.metatileentities.multi.multiblockpart; import gregtech.api.GTValues; import gregtech.api.capability.DualHandler; import gregtech.api.capability.impl.FluidTankList; import gregtech.api.capability.impl.ItemHandlerList; import gregtech.api.capability.impl.NotifiableFluidTank; import gregtech.api.capability.impl.NotifiableItemStackHandler; import gregtech.api.gui.GuiTextures; import gregtech.api.gui.ModularUI; import gregtech.api.gui.widgets.SlotWidget; import gregtech.api.gui.widgets.TankWidget; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.interfaces.IGregTechTileEntity; import gregtech.api.metatileentity.multiblock.IMultiblockAbilityPart; import gregtech.api.metatileentity.multiblock.MultiblockAbility; import gregtech.api.util.GTUtility; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fluids.IFluidTank; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandlerModifiable; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class MetaTileEntityDistinctInputDual extends MetaTileEntityMultiblockNotifiablePart implements IMultiblockAbilityPart { private DualHandler[] dualHandlers; public MetaTileEntityDistinctInputDual(ResourceLocation metaTileEntityId) { super(metaTileEntityId, GTValues.LuV, false); } @Override public MetaTileEntity createMetaTileEntity(IGregTechTileEntity tileEntity) { return new MetaTileEntityDistinctInputDual(metaTileEntityId); } @Override protected void initializeInventory() { dualHandlers = new DualHandler[2]; for (int i = 0; i < dualHandlers.length; i++) { var itemStackHandler = new NotifiableItemStackHandler(this, 4, getController(), false); var fluidStackHandler = new FluidTankList(false, createTanks()); dualHandlers[i] = new DualHandler(itemStackHandler, fluidStackHandler, this.isExportHatch); } super.initializeInventory(); } private IFluidTank[] createTanks() { return new IFluidTank[] { new NotifiableFluidTank(32000, null, isExportHatch), new NotifiableFluidTank(32000, null, isExportHatch) }; } @Override protected IItemHandlerModifiable createImportItemHandler() { return new ItemHandlerList(Arrays.asList(dualHandlers)); } @Override protected FluidTankList createImportFluidHandler() { return new FluidTankList(dualHandlers[0].allowSameFluidFill(), dualHandlers[0], dualHandlers[1].getFluidTanks().toArray(new IFluidTank[0])); } @SuppressWarnings("deprecation") @Override protected ModularUI createUI(EntityPlayer entityPlayer) { ModularUI.Builder builder = ModularUI.builder(GuiTextures.BACKGROUND, 176, 18 + 54 + 94) .label(10, 5, getMetaFullName()); //First set int xStart = 7; int yStart = 20; builder.widget(new SlotWidget(dualHandlers[0], 0, xStart, yStart) .setBackgroundTexture(GuiTextures.SLOT)); builder.widget(new SlotWidget(dualHandlers[0], 1, xStart + 18, yStart). setBackgroundTexture(GuiTextures.SLOT)); builder.widget(new SlotWidget(dualHandlers[0], 2, xStart, yStart + 18) .setBackgroundTexture(GuiTextures.SLOT)); builder.widget(new SlotWidget(dualHandlers[0], 3, xStart + 18, yStart + 18) .setBackgroundTexture(GuiTextures.SLOT)); builder.widget(new TankWidget(dualHandlers[0].getTankAt(0), xStart, yStart + 18 * 2, 18, 18) .setBackgroundTexture(GuiTextures.FLUID_SLOT) .setAlwaysShowFull(true) .setContainerClicking(true, true)); builder.widget(new TankWidget(dualHandlers[0].getTankAt(1), xStart + 18, yStart + 18 * 2, 18, 18) .setBackgroundTexture(GuiTextures.FLUID_SLOT) .setAlwaysShowFull(true) .setContainerClicking(true, true)); //Second set int xOffset = xStart + 18 * 3; builder.widget(new SlotWidget(dualHandlers[1], 0, xOffset, yStart) .setBackgroundTexture(GuiTextures.SLOT)); builder.widget(new SlotWidget(dualHandlers[1], 1, xOffset + 18, yStart) .setBackgroundTexture(GuiTextures.SLOT)); builder.widget(new SlotWidget(dualHandlers[1], 2, xOffset, yStart + 18) .setBackgroundTexture(GuiTextures.SLOT)); builder.widget(new SlotWidget(dualHandlers[1], 3, xOffset + 18, yStart + 18) .setBackgroundTexture(GuiTextures.SLOT)); builder.widget(new TankWidget(dualHandlers[1].getTankAt(0), xOffset, yStart + 18 * 2, 18, 18) .setBackgroundTexture(GuiTextures.FLUID_SLOT) .setAlwaysShowFull(true) .setContainerClicking(true, true)); builder.widget(new TankWidget(dualHandlers[1].getTankAt(1), xOffset + 18, yStart + 18 * 2, 18, 18) .setBackgroundTexture(GuiTextures.FLUID_SLOT) .setAlwaysShowFull(true) .setContainerClicking(true, true)); builder.bindPlayerInventory(entityPlayer.inventory, GuiTextures.SLOT, 7, 84); return builder.build(getHolder(), entityPlayer); } @Override public MultiblockAbility getAbility() { return MultiblockAbility.IMPORT_ITEMS; } @Override public void registerAbilities(@NotNull MultiblockAbility key, @NotNull List abilities) { abilities.addAll(Arrays.asList(dualHandlers)); } }