Search in sources :

Example 1 with IMultiblockPart

use of gregtech.api.metatileentity.multiblock.IMultiblockPart in project GregTech by GregTechCEu.

the class MachineSceneWidget method updateScene.

private void updateScene() {
    if (!mte.isValid())
        return;
    World world = mte.getWorld();
    if (worldSceneRenderer != null) {
        worldSceneRenderer.releaseFBO();
    }
    worldSceneRenderer = new FBOWorldSceneRenderer(world, 1080, 1080);
    worldSceneRenderer.setAfterWorldRender(this::renderBlockOverLay);
    cores = new HashSet<>();
    around = new HashSet<>();
    cores.add(pos);
    if (mte instanceof MultiblockControllerBase) {
        PatternMatchContext context = ((MultiblockControllerBase) mte).structurePattern.checkPatternFastAt(world, pos, mte.getFrontFacing().getOpposite());
        if (context != null) {
            List<BlockPos> validPos = ((MultiblockControllerBase) mte).structurePattern.cache.keySet().stream().map(BlockPos::fromLong).collect(Collectors.toList());
            Set<IMultiblockPart> parts = context.getOrCreate("MultiblockParts", HashSet::new);
            for (IMultiblockPart part : parts) {
                if (part instanceof MetaTileEntity) {
                    cores.add(((MetaTileEntity) part).getPos());
                }
            }
            for (EnumFacing facing : EnumFacing.VALUES) {
                cores.forEach(pos -> around.add(pos.offset(facing)));
            }
            int minX = Integer.MAX_VALUE;
            int minY = Integer.MAX_VALUE;
            int minZ = Integer.MAX_VALUE;
            int maxX = Integer.MIN_VALUE;
            int maxY = Integer.MIN_VALUE;
            int maxZ = Integer.MIN_VALUE;
            for (BlockPos vPos : validPos) {
                around.add(vPos);
                minX = Math.min(minX, vPos.getX());
                minY = Math.min(minY, vPos.getY());
                minZ = Math.min(minZ, vPos.getZ());
                maxX = Math.max(maxX, vPos.getX());
                maxY = Math.max(maxY, vPos.getY());
                maxZ = Math.max(maxZ, vPos.getZ());
            }
            around.removeAll(cores);
            center = new Vector3f((minX + maxX) / 2f, (minY + maxY) / 2f, (minZ + maxZ) / 2f);
        } else {
            for (EnumFacing facing : EnumFacing.VALUES) {
                around.add(pos.offset(facing));
            }
            center = new Vector3f(pos.getX() + 0.5f, pos.getY() + 0.5f, pos.getZ() + 0.5f);
        }
    } else {
        for (EnumFacing facing : EnumFacing.VALUES) {
            around.add(pos.offset(facing));
        }
        center = new Vector3f(pos.getX() + 0.5f, pos.getY() + 0.5f, pos.getZ() + 0.5f);
    }
    worldSceneRenderer.addRenderedBlocks(cores, null);
    worldSceneRenderer.addRenderedBlocks(around, this::aroundBlocksRenderHook);
    worldSceneRenderer.setCameraLookAt(center, zoom, Math.toRadians(rotationPitch), Math.toRadians(rotationYaw));
}
Also used : FBOWorldSceneRenderer(gregtech.client.renderer.scene.FBOWorldSceneRenderer) EnumFacing(net.minecraft.util.EnumFacing) IMultiblockPart(gregtech.api.metatileentity.multiblock.IMultiblockPart) World(net.minecraft.world.World) PatternMatchContext(gregtech.api.pattern.PatternMatchContext) Vector3f(javax.vecmath.Vector3f) MultiblockControllerBase(gregtech.api.metatileentity.multiblock.MultiblockControllerBase) MetaTileEntity(gregtech.api.metatileentity.MetaTileEntity) BlockPos(net.minecraft.util.math.BlockPos) HashSet(java.util.HashSet)

Example 2 with IMultiblockPart

use of gregtech.api.metatileentity.multiblock.IMultiblockPart in project GregTech by GregTechCEu.

the class FakeGuiPluginBehavior method getRealMTE.

public MetaTileEntity getRealMTE() {
    MetaTileEntity target = this.holder.getMetaTileEntity();
    if (target instanceof MultiblockControllerBase && partIndex > 0) {
        if (partPos != null) {
            TileEntity entity = this.screen.getWorld().getTileEntity(partPos);
            if (entity instanceof MetaTileEntityHolder) {
                return ((MetaTileEntityHolder) entity).getMetaTileEntity();
            } else {
                partPos = null;
                return null;
            }
        }
        PatternMatchContext context = ((MultiblockControllerBase) target).structurePattern.checkPatternFastAt(target.getWorld(), target.getPos(), target.getFrontFacing().getOpposite());
        if (context == null) {
            return null;
        }
        Set<IMultiblockPart> rawPartsSet = context.getOrCreate("MultiblockParts", HashSet::new);
        List<IMultiblockPart> parts = new ArrayList<>(rawPartsSet);
        parts.sort(Comparator.comparing((it) -> ((MetaTileEntity) it).getPos().hashCode()));
        if (parts.size() > partIndex - 1 && parts.get(partIndex - 1) instanceof MetaTileEntity) {
            target = (MetaTileEntity) parts.get(partIndex - 1);
            partPos = target.getPos();
        } else {
            return null;
        }
    }
    return target;
}
Also used : MetaTileEntity(gregtech.api.metatileentity.MetaTileEntity) TileEntity(net.minecraft.tileentity.TileEntity) java.util(java.util) FakeModularGui(gregtech.api.gui.impl.FakeModularGui) EnumHand(net.minecraft.util.EnumHand) PatternMatchContext(gregtech.api.pattern.PatternMatchContext) EntityPlayerMP(net.minecraft.entity.player.EntityPlayerMP) PlayerMainInvWrapper(net.minecraftforge.items.wrapper.PlayerMainInvWrapper) RayTraceResult(net.minecraft.util.math.RayTraceResult) Widget(gregtech.api.gui.Widget) MonitorPluginBaseBehavior(gregtech.api.items.behavior.MonitorPluginBaseBehavior) IUIHolder(gregtech.api.gui.IUIHolder) gregtech.api.gui.widgets(gregtech.api.gui.widgets) ObfuscationReflectionHelper(net.minecraftforge.fml.common.ObfuscationReflectionHelper) Side(net.minecraftforge.fml.relauncher.Side) MultiblockControllerBase(gregtech.api.metatileentity.multiblock.MultiblockControllerBase) SideOnly(net.minecraftforge.fml.relauncher.SideOnly) GregtechDataCodes(gregtech.api.capability.GregtechDataCodes) Method(java.lang.reflect.Method) MetaTileEntityHolder(gregtech.api.metatileentity.MetaTileEntityHolder) WidgetPluginConfig(gregtech.common.gui.widget.monitor.WidgetPluginConfig) MetaTileEntity(gregtech.api.metatileentity.MetaTileEntity) NBTTagCompound(net.minecraft.nbt.NBTTagCompound) IMultiblockPart(gregtech.api.metatileentity.multiblock.IMultiblockPart) GTLog(gregtech.api.util.GTLog) ProxyHolderPluginBehavior(gregtech.api.items.behavior.ProxyHolderPluginBehavior) GlStateManager(net.minecraft.client.renderer.GlStateManager) EnumFacing(net.minecraft.util.EnumFacing) BlockPos(net.minecraft.util.math.BlockPos) InventoryPlayer(net.minecraft.entity.player.InventoryPlayer) GuiTextures(gregtech.api.gui.GuiTextures) FakeModularUIPluginContainer(gregtech.common.gui.impl.FakeModularUIPluginContainer) GregtechCapabilities(gregtech.api.capability.GregtechCapabilities) GregFakePlayer(gregtech.api.util.GregFakePlayer) EntityPlayer(net.minecraft.entity.player.EntityPlayer) IInventory(net.minecraft.inventory.IInventory) ModularUI(gregtech.api.gui.ModularUI) TileEntity(net.minecraft.tileentity.TileEntity) PacketBuffer(net.minecraft.network.PacketBuffer) MetaTileEntityHolder(gregtech.api.metatileentity.MetaTileEntityHolder) MultiblockControllerBase(gregtech.api.metatileentity.multiblock.MultiblockControllerBase) MetaTileEntity(gregtech.api.metatileentity.MetaTileEntity) IMultiblockPart(gregtech.api.metatileentity.multiblock.IMultiblockPart) PatternMatchContext(gregtech.api.pattern.PatternMatchContext)

Example 3 with IMultiblockPart

use of gregtech.api.metatileentity.multiblock.IMultiblockPart in project GregTech by GregTechCEu.

the class MetaTileEntityCentralMonitor method formStructure.

@Override
protected void formStructure(PatternMatchContext context) {
    super.formStructure(context);
    lastUpdate = 0;
    currentEnergyNet = new WeakReference<>(null);
    activeNodes = new ArrayList<>();
    netCovers = new HashSet<>();
    remoteCovers = new HashSet<>();
    inputEnergy = new EnergyContainerList(this.getAbilities(MultiblockAbility.INPUT_ENERGY));
    width = 0;
    checkCovers();
    for (IMultiblockPart part : this.getMultiblockParts()) {
        if (part instanceof MetaTileEntityMonitorScreen) {
            width++;
        }
    }
    width = width / height;
    screens = new MetaTileEntityMonitorScreen[width][height];
    for (IMultiblockPart part : this.getMultiblockParts()) {
        if (part instanceof MetaTileEntityMonitorScreen) {
            MetaTileEntityMonitorScreen screen = (MetaTileEntityMonitorScreen) part;
            screens[screen.getX()][screen.getY()] = screen;
        }
    }
    writeCustomData(GregtechDataCodes.UPDATE_ALL, packetBuffer -> {
        packetBuffer.writeInt(width);
        packetBuffer.writeInt(height);
        writeCovers(packetBuffer);
        writeParts(packetBuffer);
    });
}
Also used : IMultiblockPart(gregtech.api.metatileentity.multiblock.IMultiblockPart) EnergyContainerList(gregtech.api.capability.impl.EnergyContainerList)

Aggregations

IMultiblockPart (gregtech.api.metatileentity.multiblock.IMultiblockPart)3 MetaTileEntity (gregtech.api.metatileentity.MetaTileEntity)2 MultiblockControllerBase (gregtech.api.metatileentity.multiblock.MultiblockControllerBase)2 PatternMatchContext (gregtech.api.pattern.PatternMatchContext)2 EnumFacing (net.minecraft.util.EnumFacing)2 BlockPos (net.minecraft.util.math.BlockPos)2 GregtechCapabilities (gregtech.api.capability.GregtechCapabilities)1 GregtechDataCodes (gregtech.api.capability.GregtechDataCodes)1 EnergyContainerList (gregtech.api.capability.impl.EnergyContainerList)1 GuiTextures (gregtech.api.gui.GuiTextures)1 IUIHolder (gregtech.api.gui.IUIHolder)1 ModularUI (gregtech.api.gui.ModularUI)1 Widget (gregtech.api.gui.Widget)1 FakeModularGui (gregtech.api.gui.impl.FakeModularGui)1 gregtech.api.gui.widgets (gregtech.api.gui.widgets)1 MonitorPluginBaseBehavior (gregtech.api.items.behavior.MonitorPluginBaseBehavior)1 ProxyHolderPluginBehavior (gregtech.api.items.behavior.ProxyHolderPluginBehavior)1 MetaTileEntityHolder (gregtech.api.metatileentity.MetaTileEntityHolder)1 GTLog (gregtech.api.util.GTLog)1 GregFakePlayer (gregtech.api.util.GregFakePlayer)1