Search in sources :

Example 1 with ChannelClientInfo

use of mcjty.xnet.clientinfo.ChannelClientInfo in project XNet by McJty.

the class TileEntityController method findChannelInfo.

@Nonnull
private List<ChannelClientInfo> findChannelInfo() {
    WorldBlob worldBlob = XNetBlobData.getBlobData(getWorld()).getWorldBlob(getWorld());
    List<ChannelClientInfo> chanList = new ArrayList<>();
    for (ChannelInfo channel : channels) {
        if (channel != null) {
            ChannelClientInfo clientInfo = new ChannelClientInfo(channel.getChannelName(), channel.getType(), channel.getChannelSettings(), channel.isEnabled());
            for (Map.Entry<SidedConsumer, ConnectorInfo> entry : channel.getConnectors().entrySet()) {
                SidedConsumer sidedConsumer = entry.getKey();
                ConnectorInfo info = entry.getValue();
                if (info.getConnectorSettings() != null) {
                    BlockPos consumerPos = findConsumerPosition(worldBlob, sidedConsumer.getConsumerId());
                    if (consumerPos != null) {
                        SidedPos pos = new SidedPos(consumerPos.offset(sidedConsumer.getSide()), sidedConsumer.getSide().getOpposite());
                        boolean advanced = getWorld().getBlockState(consumerPos).getBlock() == NetCableSetup.advancedConnectorBlock;
                        ConnectorClientInfo ci = new ConnectorClientInfo(pos, sidedConsumer.getConsumerId(), channel.getType(), info.getConnectorSettings());
                        clientInfo.getConnectors().put(sidedConsumer, ci);
                    } else {
                    // Consumer was possibly removed. We might want to remove the entry from our list here?
                    // @todo
                    }
                }
            }
            chanList.add(clientInfo);
        } else {
            chanList.add(null);
        }
    }
    return chanList;
}
Also used : ConnectorInfo(mcjty.xnet.clientinfo.ConnectorInfo) SidedConsumer(mcjty.xnet.api.keys.SidedConsumer) ChannelInfo(mcjty.xnet.logic.ChannelInfo) ChannelClientInfo(mcjty.xnet.clientinfo.ChannelClientInfo) SidedPos(mcjty.xnet.api.keys.SidedPos) WorldBlob(mcjty.xnet.multiblock.WorldBlob) BlockPos(net.minecraft.util.math.BlockPos) ConnectorClientInfo(mcjty.xnet.clientinfo.ConnectorClientInfo) Nonnull(javax.annotation.Nonnull)

Example 2 with ChannelClientInfo

use of mcjty.xnet.clientinfo.ChannelClientInfo in project XNet by McJty.

the class GuiController method drawGuiContainerBackgroundLayer.

@Override
protected void drawGuiContainerBackgroundLayer(float v, int x1, int x2) {
    requestListsIfNeeded();
    populateList();
    refreshChannelEditor();
    refreshConnectorEditor();
    if (fromServer_channels != null) {
        for (int i = 0; i < MAX_CHANNELS; i++) {
            String channel = String.valueOf(i + 1);
            ChannelClientInfo info = fromServer_channels.get(i);
            if (info != null) {
                IndicatorIcon icon = info.getChannelSettings().getIndicatorIcon();
                if (icon != null) {
                    channelButtons[i].setImage(icon.getImage(), icon.getU(), icon.getV(), icon.getIw(), icon.getIh());
                }
                String indicator = info.getChannelSettings().getIndicator();
                if (indicator != null) {
                    channelButtons[i].setText(indicator + channel);
                } else {
                    channelButtons[i].setText(channel);
                }
            } else {
                channelButtons[i].setImage(null, 0, 0, 0, 0);
                channelButtons[i].setText(channel);
            }
        }
    }
    drawWindow();
    int channel = getSelectedChannel();
    if (channel != -1) {
        int x = (int) window.getToplevel().getBounds().getX();
        int y = (int) window.getToplevel().getBounds().getY();
        RenderHelper.drawVerticalGradientRect(x + channel * 14 + 41, y + 22, x + channel * 14 + 41 + 12, y + 230, 0x33aaffff, 0x33aaffff);
    }
    int currentRF = GenericEnergyStorageTileEntity.getCurrentRF();
    energyBar.setValue(currentRF);
    tileEntity.requestRfFromServer(XNet.MODID);
}
Also used : ChannelClientInfo(mcjty.xnet.clientinfo.ChannelClientInfo) IndicatorIcon(mcjty.xnet.api.gui.IndicatorIcon)

Example 3 with ChannelClientInfo

use of mcjty.xnet.clientinfo.ChannelClientInfo in project XNet by McJty.

the class GuiController method populateList.

private void populateList() {
    if (!listsReady()) {
        return;
    }
    if (!needsRefresh) {
        return;
    }
    needsRefresh = false;
    connectorList.removeChildren();
    int sel = connectorList.getSelected();
    BlockPos prevPos = null;
    String selectedText = searchBar.getText().trim().toLowerCase();
    for (ConnectedBlockClientInfo connectedBlock : fromServer_connectedBlocks) {
        SidedPos sidedPos = connectedBlock.getPos();
        BlockPos coordinate = sidedPos.getPos();
        String name = connectedBlock.getName();
        String blockUnlocName = connectedBlock.getBlockUnlocName();
        String blockName = I18n.format(blockUnlocName).trim();
        int color = StyleConfig.colorTextInListNormal;
        Panel panel = new Panel(mc, this).setLayout(new HorizontalLayout().setHorizontalMargin(0).setSpacing(0));
        if (!selectedText.isEmpty()) {
            if (blockName.toLowerCase().contains(selectedText)) {
                panel.setFilledBackground(0xffddeeaa);
            }
        }
        BlockRender br;
        if (coordinate.equals(prevPos)) {
            br = new BlockRender(mc, this);
        } else {
            br = new BlockRender(mc, this).setRenderItem(connectedBlock.getConnectedBlock());
            prevPos = coordinate;
        }
        br.setUserObject("block");
        panel.addChild(br);
        if (!name.isEmpty()) {
            br.setTooltips(TextFormatting.GREEN + "Connector: " + TextFormatting.WHITE + name, TextFormatting.GREEN + "Block: " + TextFormatting.WHITE + blockName, TextFormatting.GREEN + "Position: " + TextFormatting.WHITE + BlockPosTools.toString(coordinate), TextFormatting.WHITE + "(doubleclick to highlight)");
        } else {
            br.setTooltips(TextFormatting.GREEN + "Block: " + TextFormatting.WHITE + blockName, TextFormatting.GREEN + "Position: " + TextFormatting.WHITE + BlockPosTools.toString(coordinate), TextFormatting.WHITE + "(doubleclick to highlight)");
        }
        panel.addChild(new Label(mc, this).setText(sidedPos.getSide().getName().substring(0, 1).toUpperCase()).setColor(color).setDesiredWidth(18));
        for (int i = 0; i < MAX_CHANNELS; i++) {
            Button but = new Button(mc, this).setDesiredWidth(14);
            ChannelClientInfo info = fromServer_channels.get(i);
            if (info != null) {
                ConnectorClientInfo clientInfo = findClientInfo(info, sidedPos);
                if (clientInfo != null) {
                    IndicatorIcon icon = clientInfo.getConnectorSettings().getIndicatorIcon();
                    if (icon != null) {
                        but.setImage(icon.getImage(), icon.getU(), icon.getV(), icon.getIw(), icon.getIh());
                    }
                    String indicator = clientInfo.getConnectorSettings().getIndicator();
                    but.setText(indicator != null ? indicator : "");
                }
            }
            int finalI = i;
            but.addButtonEvent(parent -> {
                selectConnectorEditor(sidedPos, finalI);
            });
            panel.addChild(but);
        }
        connectorList.addChild(panel);
    }
    connectorList.setSelected(sel);
}
Also used : Label(mcjty.lib.gui.widgets.Label) HorizontalLayout(mcjty.lib.gui.layout.HorizontalLayout) Panel(mcjty.lib.gui.widgets.Panel) ConnectedBlockClientInfo(mcjty.xnet.clientinfo.ConnectedBlockClientInfo) ChannelClientInfo(mcjty.xnet.clientinfo.ChannelClientInfo) SidedPos(mcjty.xnet.api.keys.SidedPos) Button(mcjty.lib.gui.widgets.Button) BlockPos(net.minecraft.util.math.BlockPos) IndicatorIcon(mcjty.xnet.api.gui.IndicatorIcon) ConnectorClientInfo(mcjty.xnet.clientinfo.ConnectorClientInfo)

Example 4 with ChannelClientInfo

use of mcjty.xnet.clientinfo.ChannelClientInfo in project XNet by McJty.

the class GuiController method refreshChannelEditor.

private void refreshChannelEditor() {
    if (!listsReady()) {
        return;
    }
    if (editingChannel != -1 && showingChannel != editingChannel) {
        showingChannel = editingChannel;
        channelButtons[editingChannel].setPressed(true);
        channelEditPanel.removeChildren();
        if (channelButtons[editingChannel].isPressed()) {
            ChannelClientInfo info = fromServer_channels.get(editingChannel);
            if (info != null) {
                ChannelEditorPanel editor = new ChannelEditorPanel(channelEditPanel, mc, this, editingChannel);
                editor.label("Channel " + (editingChannel + 1)).shift(5).toggle(TAG_ENABLED, "Enable processing on this channel", info.isEnabled()).shift(5).text(TAG_NAME, "Channel name", info.getChannelName(), 65);
                info.getChannelSettings().createGui(editor);
                Button remove = new Button(mc, this).setText("x").setTextOffset(0, -1).setTooltips("Remove this channel").setLayoutHint(new PositionalLayout.PositionalHint(151, 1, 9, 10)).addButtonEvent(parent -> removeChannel());
                channelEditPanel.addChild(remove);
                editor.setState(info.getChannelSettings());
            } else {
                ChoiceLabel type = new ChoiceLabel(mc, this).setLayoutHint(new PositionalLayout.PositionalHint(5, 12, 95, 14));
                for (IChannelType channelType : XNet.xNetApi.getChannels().values()) {
                    // Show names?
                    type.addChoices(channelType.getID());
                }
                Button create = new Button(mc, this).setText("Create").setLayoutHint(new PositionalLayout.PositionalHint(100, 12, 53, 14)).addButtonEvent(parent -> createChannel(type.getCurrentChoice()));
                channelEditPanel.addChild(type).addChild(create);
            }
        }
    } else if (showingChannel != -1 && editingChannel == -1) {
        showingChannel = -1;
        channelEditPanel.removeChildren();
    }
}
Also used : ChannelClientInfo(mcjty.xnet.clientinfo.ChannelClientInfo) Button(mcjty.lib.gui.widgets.Button) PositionalLayout(mcjty.lib.gui.layout.PositionalLayout) IChannelType(mcjty.xnet.api.channels.IChannelType)

Example 5 with ChannelClientInfo

use of mcjty.xnet.clientinfo.ChannelClientInfo in project XNet by McJty.

the class GuiController method refreshConnectorEditor.

private void refreshConnectorEditor() {
    if (!listsReady()) {
        return;
    }
    if (editingConnector != null && !editingConnector.equals(showingConnector)) {
        showingConnector = editingConnector;
        connectorEditPanel.removeChildren();
        ChannelClientInfo info = fromServer_channels.get(editingChannel);
        if (info != null) {
            ConnectorClientInfo clientInfo = findClientInfo(info, editingConnector);
            if (clientInfo != null) {
                EnumFacing side = clientInfo.getPos().getSide();
                SidedConsumer sidedConsumer = new SidedConsumer(clientInfo.getConsumerId(), side.getOpposite());
                ConnectorClientInfo connectorInfo = info.getConnectors().get(sidedConsumer);
                Button remove = new Button(mc, this).setText("x").setTextOffset(0, -1).setTooltips("Remove this connector").setLayoutHint(new PositionalLayout.PositionalHint(151, 1, 9, 10)).addButtonEvent(parent -> removeConnector(editingConnector));
                ConnectorEditorPanel editor = new ConnectorEditorPanel(connectorEditPanel, mc, this, editingChannel, editingConnector);
                connectorInfo.getConnectorSettings().createGui(editor);
                connectorEditPanel.addChild(remove);
                editor.setState(connectorInfo.getConnectorSettings());
            } else {
                Button create = new Button(mc, this).setText("Create").setLayoutHint(new PositionalLayout.PositionalHint(85, 20, 60, 14)).addButtonEvent(parent -> createConnector(editingConnector));
                connectorEditPanel.addChild(create);
            }
        }
    } else if (showingConnector != null && editingConnector == null) {
        showingConnector = null;
        connectorEditPanel.removeChildren();
    }
}
Also used : ChannelClientInfo(mcjty.xnet.clientinfo.ChannelClientInfo) Button(mcjty.lib.gui.widgets.Button) SidedConsumer(mcjty.xnet.api.keys.SidedConsumer) EnumFacing(net.minecraft.util.EnumFacing) ConnectorClientInfo(mcjty.xnet.clientinfo.ConnectorClientInfo)

Aggregations

ChannelClientInfo (mcjty.xnet.clientinfo.ChannelClientInfo)5 Button (mcjty.lib.gui.widgets.Button)3 ConnectorClientInfo (mcjty.xnet.clientinfo.ConnectorClientInfo)3 IndicatorIcon (mcjty.xnet.api.gui.IndicatorIcon)2 SidedConsumer (mcjty.xnet.api.keys.SidedConsumer)2 SidedPos (mcjty.xnet.api.keys.SidedPos)2 BlockPos (net.minecraft.util.math.BlockPos)2 Nonnull (javax.annotation.Nonnull)1 HorizontalLayout (mcjty.lib.gui.layout.HorizontalLayout)1 PositionalLayout (mcjty.lib.gui.layout.PositionalLayout)1 Label (mcjty.lib.gui.widgets.Label)1 Panel (mcjty.lib.gui.widgets.Panel)1 IChannelType (mcjty.xnet.api.channels.IChannelType)1 ConnectedBlockClientInfo (mcjty.xnet.clientinfo.ConnectedBlockClientInfo)1 ConnectorInfo (mcjty.xnet.clientinfo.ConnectorInfo)1 ChannelInfo (mcjty.xnet.logic.ChannelInfo)1 WorldBlob (mcjty.xnet.multiblock.WorldBlob)1 EnumFacing (net.minecraft.util.EnumFacing)1