Aeronautics Гайд 🌀 Телепорт на ендерперлах + ComputerCraft

5 перегляд

xGIGABAITx
xGIGABAITx
Адміністратор

  • Обговорення: 1
  • Публікації: 2
  • Вподобання: 0
17 вересня, 2026 о 18:37

🌀 Телепорт на ендерперлах + ComputerCraft

Цей гайд показує, як зробити систему телепортації через стазис-камери з ендерперлинами за допомогою Advanced Ender Server та Advanced Pocket Computer.

Система працює так:

Pocket Computer → Rednet → Advanced Ender Server → Поршень → Ендерперлина


📦 Що потрібно

  • Advanced Ender Server
  • Advanced Pocket Computer
  • поршень
  • стазис-камера
  • ендерперлина

Окремий Wireless Modem не потрібен — Advanced Ender Server та Advanced Pocket Computer вже мають вбудований бездротовий зв’язок.

Advanced Ender Server встановлюється прямо на поршень, який під час активації рухається та активує ендерперлину в стазис-камері.


📡 Власний канал для кожного гравця

Для кожного гравця бажано використовувати свій унікальний канал, щоб телепорти різних гравців не конфліктували між собою.

Рекомендований формат:

нік_гравця.tp

Наприклад:

local channel = "gigabait.tp"

Для іншого гравця:

local channel = "alex.tp"

Важливо: на Advanced Pocket Computer і на всіх Advanced Ender Server одного гравця channel повинен бути однаковим.

Наприклад:

GIGABAIT

Канал:

gigabait.tp

Точки:

  • home
  • mine
  • end
  • factory

Alex

Канал:

alex.tp

Точки:

  • home
  • base
  • mine

Навіть якщо обидва гравці мають точку home, конфлікту не буде, оскільки використовуються різні канали.


🖥️ Advanced Ender Server

Кожен Advanced Ender Server керує однією окремою стазис-камерою.

Для кожної камери задається своя унікальна назва:

local name = "home"

Наприклад:

home
mine
end
factory
spawn
base

Назви телепортів одного гравця повинні бути різними.


🧾 Код Advanced Ender Server

local channel = "username.tp" -- Твій особистий канал
local name = "home"           -- Назва цього телепорту
local side = "back"           -- Сторона, де стоїть поршень
local delay = 2               -- Тривалість сигналу

redstone.setOutput(side, false)

local modem = peripheral.find("modem")

if not modem then
    error("Built-in modem not found", 0)
end

rednet.open(peripheral.getName(modem))

local function tp()
    redstone.setOutput(side, true)

    local ok, err = pcall(sleep, delay)

    redstone.setOutput(side, false)

    if not ok then
        error(err, 0)
    end
end

print("Teleport: " .. name)
print("Protocol: " .. channel)
print("Waiting...")

while true do
    local _, msg = rednet.receive(channel)

    if msg == name then
        print("Activated: " .. name)
        tp()
    end
end

⚙️ Налаштування Advanced Ender Server

channel

Твій особистий Rednet-канал:

local channel = "username.tp"

Наприклад:

local channel = "gigabait.tp"

name

Назва конкретної точки телепортації:

local name = "home"

Для камери в Енді, наприклад:

local name = "end"

side

Сторона Advanced Ender Server, на якій знаходиться поршень:

local side = "back"

Можливі значення:

  • top
  • bottom
  • left
  • right
  • front
  • back

delay

Тривалість Redstone-сигналу:

local delay = 2

За замовчуванням поршень залишається активним 2 секунди.


📱 Advanced Pocket Computer

Advanced Pocket Computer використовується як меню керування всіма твоїми телепортами.

Через нього можна:

  • вибирати потрібний телепорт;
  • додавати нові точки;
  • видаляти старі точки;
  • активувати телепортацію;
  • керувати меню клавіатурою;
  • керувати меню мишкою.

🧾 Код Advanced Pocket Computer

-- Teleport menu.

local channel = "username.tp"
local store = "tp.names"
local list = settings.get(store, { "home" })

local pos, top = 1, 1
local info = "Ready"
local w, h, rows
local accent = term.isColor() and colors.cyan or colors.white

local function valid(name)
    return type(name) == "string" and #name > 0 and #name <= 32
        and name:match("^[A-Za-z0-9_-]+$") ~= nil
end

if type(list) ~= "table" then
    error("Invalid tp.names setting", 0)
end

for _, name in ipairs(list) do
    if not valid(name) then
        error("Invalid saved name", 0)
    end
end

local function clear()
    term.setBackgroundColor(colors.black)
    term.setTextColor(colors.white)
    term.setCursorBlink(false)
    term.clear()
    term.setCursorPos(1, 1)
end

local function line(y, text, fg, bg)
    term.setBackgroundColor(bg or colors.black)
    term.setTextColor(fg or colors.white)
    term.setCursorPos(1, y)
    term.clearLine()
    term.write(text:sub(1, w))
end

local function save()
    settings.set(store, list)

    if not settings.save("/.settings") then
        error("Cannot save /.settings", 0)
    end
end

local function ask(title)
    clear()
    print(title)
    print("Empty = cancel")
    write("> ")

    return read():match("^%s*(.-)%s*$")
end

local function add()
    local name = ask("New name (e.g. mine):")

    if name == "" then
        return
    end

    if not valid(name) then
        info = "Use A-Z, 0-9, _- (1-32)"
        return
    end

    for _, item in ipairs(list) do
        if item == name then
            info = "Name already exists"
            return
        end
    end

    list[#list + 1] = name
    save()

    pos = #list
    info = "Added: " .. name
end

local function remove()
    local name = list[pos]

    if not name then
        return
    end

    if ask("Delete " .. name .. "? y/N"):lower() ~= "y" then
        return
    end

    table.remove(list, pos)
    save()

    info = "Deleted: " .. name
end

local function send()
    local name = list[pos]

    if not name then
        return
    end

    local modem = peripheral.find("modem", function(_, m)
        return m.isWireless()
    end)

    if not modem then
        info = "No wireless modem!"
        return
    end

    local ok = pcall(function()
        rednet.open(peripheral.getName(modem))
        rednet.broadcast(name, channel)
    end)

    info = ok and ("Sent: " .. name) or "Send failed!"
end

local function draw()
    w, h = term.getSize()

    if w < 22 or h < 12 then
        error("Screen too small", 0)
    end

    rows = h - 8

    pos = math.max(1, math.min(pos, #list))
    top = math.max(1, math.min(top, math.max(1, #list - rows + 1)))

    if pos < top then
        top = pos
    end

    if pos >= top + rows then
        top = pos - rows + 1
    end

    clear()

    local count = #list > 0 and pos or 0

    line(
        1,
        (" TELEPORTS [%d/%d]"):format(count, #list),
        colors.black,
        accent
    )

    line(2, "Channel: " .. channel)
    line(3, string.rep("-", w))

    for i = 0, rows - 1 do
        local n = top + i

        if list[n] then
            local selected = n == pos

            line(
                4 + i,
                (selected and "> " or "  ") .. list[n],
                selected and colors.black or colors.white,
                selected and accent or colors.black
            )
        end
    end

    if #list == 0 then
        line(4, "No teleports. Press N.")
    end

    line(h - 4, string.rep("-", w))
    line(h - 3, info, accent)
    line(h - 2, "[Enter] Go  [N] Add")
    line(h - 1, "[D] Delete  [Q] Exit")
    line(h, "Up/Down / scroll: select")
end

local function run()
    while true do
        draw()

        local event, a, b, c = os.pullEvent()

        if event == "key" then
            if a == keys.up then
                pos = pos - 1

            elseif a == keys.down then
                pos = pos + 1

            elseif a == keys.enter and not b then
                send()
            end

        elseif event == "char" then
            a = a:lower()

            if a == "n" then
                add()

            elseif a == "d" then
                remove()

            elseif a == "q" then
                break
            end

        elseif event == "mouse_scroll" then
            pos = pos + a

        elseif event == "mouse_click" and a == 1 then
            if c >= 4 and c < 4 + rows then
                local n = top + c - 4

                if list[n] then
                    pos = n
                end

            elseif c == h - 2 then
                if b <= 10 then
                    send()

                elseif b >= 13 and b <= 19 then
                    add()
                end

            elseif c == h - 1 then
                if b <= 10 then
                    remove()

                elseif b >= 13 and b <= 20 then
                    break
                end
            end
        end
    end
end

local ok, err = pcall(run)

clear()

if not ok then
    printError(err)
end

⚙️ Налаштування Pocket Computer

На початку коду потрібно змінити:

local channel = "username.tp"

на свій канал.

Наприклад:

local channel = "gigabait.tp"

Канал має бути точно таким самим, як на всіх твоїх Advanced Ender Server.


🎮 Керування

Клавіша Дія
↑ / ↓ Вибрати телепорт
Enter Активувати телепорт
N Додати нову точку
D Видалити вибрану точку
Q Закрити програму
Mouse Scroll Прокручувати список
Mouse Click Керувати меню мишкою

➕ Як додати новий телепорт

Наприклад, потрібно створити точку:

factory

На Advanced Ender Server біля цієї стазис-камери встанови:

local name = "factory"

На Pocket Computer натисни:

N

і введи:

factory

Після цього точка автоматично з’явиться у списку.

Назва на Pocket Computer повинна точно збігатися з name на відповідному Advanced Ender Server.


💾 Збереження телепортів

Додані точки автоматично зберігаються в налаштуваннях Pocket Computer.

Після перезапуску комп’ютера список телепортів не зникне.


🚀 Автозапуск

Щоб програма автоматично запускалася після ввімкнення або перезапуску комп’ютера, файл із програмою потрібно назвати:

startup.lua

Це потрібно зробити:

  • на кожному Advanced Ender Server;
  • на Advanced Pocket Computer.

⚠️ Назви телепортів

Рекомендується використовувати короткі та зрозумілі назви:

home
mine
end
factory
spawn
base

Дозволені символи:

A-Z
a-z
0-9
_
-

Приклади:

base-2
main_base
factory1

⚙️ Як працює система

Наприклад, у гравця використовується канал:

gigabait.tp

І створено три точки:

home
mine
end

На Advanced Ender Server біля камери в Енді встановлено:

local name = "end"

Коли на Pocket Computer вибирається end, він надсилає назву через канал gigabait.tp.

Усі Advanced Ender Server цього гравця отримують повідомлення, але активується тільки той, у якого:

local name = "end"

Після цього Advanced Ender Server подає Redstone-сигнал на поршень.

Поршень активує ендерперлину в стазис-камері, після чого відбувається телепортація.


📐 Схематика стазис-камери

Готова схематика:

Відкрити схематику стазис-камери

Після встановлення схематики:

  1. Встанови Advanced Ender Server на поршень.
  2. Налаштуй свій channel.
  3. Задай унікальний name.
  4. Вкажи правильний side.
  5. Закинь ендерперлину в стазис-камеру.
  6. Додай цю саму назву в Pocket Computer.

✅ Після цього система готова до використання.