Aeronautics Гайд 🌀 Телепорт на ендерперлах + ComputerCraft
5 перегляд
🌀 Телепорт на ендерперлах + 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
Точки:
homemineendfactory
Alex
Канал:
alex.tp
Точки:
homebasemine
Навіть якщо обидва гравці мають точку 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"
Можливі значення:
topbottomleftrightfrontback
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-сигнал на поршень.
Поршень активує ендерперлину в стазис-камері, після чого відбувається телепортація.
📐 Схематика стазис-камери
Готова схематика:
Відкрити схематику стазис-камери
Після встановлення схематики:
- Встанови Advanced Ender Server на поршень.
- Налаштуй свій
channel. - Задай унікальний
name. - Вкажи правильний
side. - Закинь ендерперлину в стазис-камеру.
- Додай цю саму назву в Pocket Computer.
✅ Після цього система готова до використання.