Search in sources :

Example 6 with BlockPosFace

use of gregtech.api.util.BlockPosFace in project GregTech by GregTechCEu.

the class MetaTileEntityMonitorScreen method createUI.

@Override
protected ModularUI createUI(EntityPlayer entityPlayer) {
    MultiblockControllerBase controller = this.getController();
    if (controller instanceof MetaTileEntityCentralMonitor && ((MetaTileEntityCentralMonitor) controller).isActive()) {
        int width = 330;
        int height = 260;
        ToggleButtonWidget[] buttons = new ToggleButtonWidget[5];
        buttons[0] = new ToggleButtonWidget(width - 135, 25, 20, 20, GuiTextures.BUTTON_FLUID, () -> this.mode == CoverDigitalInterface.MODE.FLUID, (isPressed) -> {
            if (isPressed)
                setMode(CoverDigitalInterface.MODE.FLUID);
        }).setTooltipText("metaitem.cover.digital.mode.fluid");
        buttons[1] = new ToggleButtonWidget(width - 115, 25, 20, 20, GuiTextures.BUTTON_ITEM, () -> this.mode == CoverDigitalInterface.MODE.ITEM, (isPressed) -> {
            if (isPressed)
                setMode(CoverDigitalInterface.MODE.ITEM);
        }).setTooltipText("metaitem.cover.digital.mode.item");
        buttons[2] = new ToggleButtonWidget(width - 95, 25, 20, 20, GuiTextures.BUTTON_ENERGY, () -> this.mode == CoverDigitalInterface.MODE.ENERGY, (isPressed) -> {
            if (isPressed)
                setMode(CoverDigitalInterface.MODE.ENERGY);
        }).setTooltipText("metaitem.cover.digital.mode.energy");
        buttons[3] = new ToggleButtonWidget(width - 75, 25, 20, 20, GuiTextures.BUTTON_MACHINE, () -> this.mode == CoverDigitalInterface.MODE.MACHINE, (isPressed) -> {
            if (isPressed)
                setMode(CoverDigitalInterface.MODE.MACHINE);
        }).setTooltipText("metaitem.cover.digital.mode.machine");
        buttons[4] = new ToggleButtonWidget(width - 35, 25, 20, 20, GuiTextures.BUTTON_INTERFACE, () -> this.mode == CoverDigitalInterface.MODE.PROXY, (isPressed) -> {
            if (isPressed)
                setMode(CoverDigitalInterface.MODE.PROXY);
        }).setTooltipText("metaitem.cover.digital.mode.proxy");
        List<CoverDigitalInterface> covers = new ArrayList<>();
        ((MetaTileEntityCentralMonitor) controller).getAllCovers().forEach(coverPos -> covers.add(getCoverFromPosSide(coverPos)));
        WidgetPluginConfig pluginWidget = new WidgetPluginConfig();
        WidgetPluginConfig mainGroup = new WidgetPluginConfig().setSize(width, height);
        mainGroup.widget(new LabelWidget(15, 55, "monitor.gui.title.scale", 0xFFFFFFFF)).widget(new ClickButtonWidget(50, 50, 20, 20, "-1", (data) -> setConfig(this.slot, ((float) Math.round((scale - (data.isShiftClick ? 1.0f : 0.1f)) * 10) / 10), this.frameColor))).widget(new ClickButtonWidget(130, 50, 20, 20, "+1", (data) -> setConfig(this.slot, ((float) Math.round((scale + (data.isShiftClick ? 1.0f : 0.1f)) * 10) / 10), this.frameColor))).widget(new ImageWidget(70, 50, 60, 20, GuiTextures.DISPLAY)).widget(new SimpleTextWidget(100, 60, "", 16777215, () -> Float.toString(scale))).widget(new LabelWidget(15, 85, "monitor.gui.title.argb", 0xFFFFFFFF)).widget(new WidgetARGB(50, 80, 20, this.frameColor, (color) -> setConfig(this.slot, this.scale, color))).widget(new LabelWidget(15, 110, "monitor.gui.title.slot", 0xFFFFFFFF)).widget(new ClickButtonWidget(50, 105, 20, 20, "-1", (data) -> setConfig(this.slot - 1, this.scale, this.frameColor))).widget(new ClickButtonWidget(130, 105, 20, 20, "+1", (data) -> setConfig(this.slot + 1, this.scale, this.frameColor))).widget(new ImageWidget(70, 105, 60, 20, GuiTextures.DISPLAY)).widget(new SimpleTextWidget(100, 115, "", 16777215, () -> Integer.toString(slot))).widget(new LabelWidget(15, 135, "monitor.gui.title.plugin", 0xFFFFFFFF)).widget(new SlotWidget(inventory, 0, 50, 130, true, true).setBackgroundTexture(GuiTextures.SLOT).setChangeListener(() -> {
            if (this.getWorld() != null && !this.getWorld().isRemote) {
                MonitorPluginBaseBehavior behavior = MonitorPluginBaseBehavior.getBehavior(inventory.getStackInSlot(0));
                if (behavior == null) {
                    unloadPlugin();
                } else {
                    loadPlugin(behavior);
                }
                writeCustomData(GregtechDataCodes.UPDATE_PLUGIN_ITEM, packetBuffer -> packetBuffer.writeItemStack(inventory.getStackInSlot(0)));
            }
        })).widget(new ClickButtonWidget(80, 130, 40, 20, "monitor.gui.title.config", (data) -> {
            if (plugin != null && mainGroup.isVisible()) {
                plugin.customUI(pluginWidget, this.getHolder(), entityPlayer);
                mainGroup.setVisible(false);
            }
        }) {

            @Override
            protected void triggerButton() {
                super.triggerButton();
                if (plugin != null && mainGroup.isVisible()) {
                    plugin.customUI(pluginWidget, getHolder(), entityPlayer);
                    mainGroup.setVisible(false);
                }
            }
        }).widget(new WidgetCoverList(width - 140, 50, 120, 11, covers, getCoverFromPosSide(this.coverPos), (coverPos) -> {
            if (coverPos == null) {
                this.setMode(null, this.mode);
            } else {
                this.setMode(new BlockPosFace(coverPos.coverHolder.getPos(), coverPos.attachedSide));
            }
        })).widget(buttons[0]).widget(buttons[1]).widget(buttons[2]).widget(buttons[3]).widget(buttons[4]).bindPlayerInventory(entityPlayer.inventory, GuiTextures.SLOT, 15, 170);
        return ModularUI.builder(GuiTextures.BOXED_BACKGROUND, width, height).widget(pluginWidget).widget(mainGroup).widget(new WidgetMonitorScreen(330, 0, 150, this)).widget(new LabelWidget(15, 13, "gregtech.machine.monitor_screen.name", 0XFFFFFFFF)).widget(new ClickButtonWidget(15, 25, 40, 20, "monitor.gui.title.back", data -> {
            if (mainGroup.isVisible() && ((MetaTileEntityCentralMonitor) controller).isActive() && controller.isValid()) {
                MetaTileEntityUIFactory.INSTANCE.openUI(controller.getHolder(), (EntityPlayerMP) entityPlayer);
            } else if (!mainGroup.isVisible()) {
                pluginWidget.removePluginWidget();
                mainGroup.setVisible(true);
                if (plugin != null) {
                    plugin.markAsDirty();
                }
            }
        }) {

            @Override
            protected void triggerButton() {
                super.triggerButton();
                if (!mainGroup.isVisible()) {
                    pluginWidget.removePluginWidget();
                    mainGroup.setVisible(true);
                    if (plugin != null) {
                        plugin.markAsDirty();
                    }
                }
            }
        }).bindCloseListener(() -> {
            if (plugin != null) {
                plugin.markAsDirty();
            }
        }).build(this.getHolder(), entityPlayer);
    }
    return null;
}
Also used : net.minecraft.util(net.minecraft.util) MetaTileEntities(gregtech.common.metatileentities.MetaTileEntities) CoverBehavior(gregtech.api.cover.CoverBehavior) CoverDigitalInterface(gregtech.common.covers.CoverDigitalInterface) WidgetMonitorScreen(gregtech.common.gui.widget.monitor.WidgetMonitorScreen) EntityPlayerMP(net.minecraft.entity.player.EntityPlayerMP) TileEntityPipeBase(gregtech.api.pipenet.tile.TileEntityPipeBase) I18n(net.minecraft.client.resources.I18n) gregtech.api.gui.widgets(gregtech.api.gui.widgets) Vec3d(net.minecraft.util.math.Vec3d) Pair(org.apache.commons.lang3.tuple.Pair) Side(net.minecraftforge.fml.relauncher.Side) CuboidRayTraceResult(codechicken.lib.raytracer.CuboidRayTraceResult) MultiblockControllerBase(gregtech.api.metatileentity.multiblock.MultiblockControllerBase) GregtechDataCodes(gregtech.api.capability.GregtechDataCodes) WidgetPluginConfig(gregtech.common.gui.widget.monitor.WidgetPluginConfig) MetaTileEntity(gregtech.api.metatileentity.MetaTileEntity) NBTTagCompound(net.minecraft.nbt.NBTTagCompound) ProxyHolderPluginBehavior(gregtech.api.items.behavior.ProxyHolderPluginBehavior) GlStateManager(net.minecraft.client.renderer.GlStateManager) ICoverable(gregtech.api.cover.ICoverable) GuiTextures(gregtech.api.gui.GuiTextures) Capability(net.minecraftforge.common.capabilities.Capability) GregtechCapabilities(gregtech.api.capability.GregtechCapabilities) ItemStackHandler(net.minecraftforge.items.ItemStackHandler) EntityPlayer(net.minecraft.entity.player.EntityPlayer) CapabilityItemHandler(net.minecraftforge.items.CapabilityItemHandler) ModularUI(gregtech.api.gui.ModularUI) NBTUtil(net.minecraft.nbt.NBTUtil) java.util(java.util) MetaTileEntityUIFactory(gregtech.api.metatileentity.MetaTileEntityUIFactory) ItemStack(net.minecraft.item.ItemStack) RayTraceResult(net.minecraft.util.math.RayTraceResult) MonitorPluginBaseBehavior(gregtech.api.items.behavior.MonitorPluginBaseBehavior) Minecraft(net.minecraft.client.Minecraft) RenderUtil(gregtech.client.utils.RenderUtil) BlockPosFace(gregtech.api.util.BlockPosFace) SideOnly(net.minecraftforge.fml.relauncher.SideOnly) Nonnull(javax.annotation.Nonnull) Nullable(javax.annotation.Nullable) MetaTileEntityHolder(gregtech.api.metatileentity.MetaTileEntityHolder) TextureAtlasSprite(net.minecraft.client.renderer.texture.TextureAtlasSprite) CapabilityFluidHandler(net.minecraftforge.fluids.capability.CapabilityFluidHandler) World(net.minecraft.world.World) BlockPos(net.minecraft.util.math.BlockPos) IOException(java.io.IOException) IBlockState(net.minecraft.block.state.IBlockState) WidgetARGB(gregtech.common.gui.widget.WidgetARGB) WidgetCoverList(gregtech.common.gui.widget.monitor.WidgetCoverList) TileEntity(net.minecraft.tileentity.TileEntity) MetaTileEntityMultiblockPart(gregtech.common.metatileentities.multi.multiblockpart.MetaTileEntityMultiblockPart) PacketBuffer(net.minecraft.network.PacketBuffer) BlockPosFace(gregtech.api.util.BlockPosFace) WidgetMonitorScreen(gregtech.common.gui.widget.monitor.WidgetMonitorScreen) CoverDigitalInterface(gregtech.common.covers.CoverDigitalInterface) WidgetARGB(gregtech.common.gui.widget.WidgetARGB) WidgetCoverList(gregtech.common.gui.widget.monitor.WidgetCoverList) MultiblockControllerBase(gregtech.api.metatileentity.multiblock.MultiblockControllerBase) MonitorPluginBaseBehavior(gregtech.api.items.behavior.MonitorPluginBaseBehavior) EntityPlayerMP(net.minecraft.entity.player.EntityPlayerMP) WidgetPluginConfig(gregtech.common.gui.widget.monitor.WidgetPluginConfig)

Example 7 with BlockPosFace

use of gregtech.api.util.BlockPosFace in project GregTech by GregTechCEu.

the class MachineSceneWidget method renderBlockOverLay.

@SideOnly(Side.CLIENT)
private void renderBlockOverLay(WorldSceneRenderer renderer) {
    hoverPosFace = null;
    if (isMouseOverElement(currentMouseX, currentMouseY)) {
        int x = getPosition().x;
        int y = getPosition().y;
        int width = getSize().width;
        int height = getSize().height;
        int resolutionWidth = worldSceneRenderer.getResolutionWidth();
        int resolutionHeight = worldSceneRenderer.getResolutionHeight();
        int mouseX = resolutionWidth * (currentMouseX - x) / width;
        int mouseY = (int) (resolutionHeight * (1 - (currentMouseY - y) / (float) height));
        Vector3f hitPos = renderer.unProject(mouseX, mouseY);
        World world = renderer.world;
        Vec3d eyePos = new Vec3d(renderer.getEyePos().x, renderer.getEyePos().y, renderer.getEyePos().z);
        // Double view range to ensure pos can be seen.
        hitPos.scale(2);
        Vec3d endPos = new Vec3d((hitPos.x - eyePos.x), (hitPos.y - eyePos.y), (hitPos.z - eyePos.z));
        double min = Float.MAX_VALUE;
        for (BlockPos core : cores) {
            IBlockState blockState = world.getBlockState(core);
            if (blockState.getBlock() == Blocks.AIR) {
                continue;
            }
            RayTraceResult hit = blockState.collisionRayTrace(world, core, eyePos, endPos);
            if (hit != null && hit.typeOfHit != RayTraceResult.Type.MISS) {
                double dist = eyePos.distanceTo(new Vec3d(hit.getBlockPos()));
                if (dist < min) {
                    min = dist;
                    hoverPosFace = new BlockPosFace(hit.getBlockPos(), hit.sideHit);
                }
            }
        }
    }
    if (selectedPosFace != null || hoverPosFace != null) {
        GlStateManager.pushMatrix();
        RenderUtil.useLightMap(240, 240, () -> {
            GlStateManager.disableDepth();
            if (selectedPosFace != null) {
                drawFacingBorder(selectedPosFace, 0xff00ff00);
            }
            if (hoverPosFace != null && !hoverPosFace.equals(selectedPosFace)) {
                drawFacingBorder(hoverPosFace, 0xffffffff);
            }
            GlStateManager.enableDepth();
        });
        GlStateManager.popMatrix();
    }
    GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f);
    GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO);
}
Also used : IBlockState(net.minecraft.block.state.IBlockState) BlockPosFace(gregtech.api.util.BlockPosFace) Vector3f(javax.vecmath.Vector3f) RayTraceResult(net.minecraft.util.math.RayTraceResult) BlockPos(net.minecraft.util.math.BlockPos) World(net.minecraft.world.World) Vec3d(net.minecraft.util.math.Vec3d) SideOnly(net.minecraftforge.fml.relauncher.SideOnly)

Aggregations

BlockPosFace (gregtech.api.util.BlockPosFace)7 BlockPos (net.minecraft.util.math.BlockPos)5 World (net.minecraft.world.World)3 CoverBehavior (gregtech.api.cover.CoverBehavior)2 MonitorPluginBaseBehavior (gregtech.api.items.behavior.MonitorPluginBaseBehavior)2 MetaTileEntity (gregtech.api.metatileentity.MetaTileEntity)2 MetaTileEntityHolder (gregtech.api.metatileentity.MetaTileEntityHolder)2 TileEntityPipeBase (gregtech.api.pipenet.tile.TileEntityPipeBase)2 CoverDigitalInterface (gregtech.common.covers.CoverDigitalInterface)2 IBlockState (net.minecraft.block.state.IBlockState)2 TileEntity (net.minecraft.tileentity.TileEntity)2 RayTraceResult (net.minecraft.util.math.RayTraceResult)2 Vec3d (net.minecraft.util.math.Vec3d)2 SideOnly (net.minecraftforge.fml.relauncher.SideOnly)2 CuboidRayTraceResult (codechicken.lib.raytracer.CuboidRayTraceResult)1 GregtechCapabilities (gregtech.api.capability.GregtechCapabilities)1 GregtechDataCodes (gregtech.api.capability.GregtechDataCodes)1 ICoverable (gregtech.api.cover.ICoverable)1 GuiTextures (gregtech.api.gui.GuiTextures)1 ModularUI (gregtech.api.gui.ModularUI)1