Перейти к содержимому

Путешествия Xytabich'а

  • записей
    12
  • комментарий
    31
  • просмотров
    7 249

OpenPeripheral: Integration #1 Ванилла (и Чокола)

Xytabich

1 859 просмотров

Расширение для работы с minecraft.

Если вы ещё не прочитали вступительную статью - рекомендуется сделать это сейчас, так как описания данных предметов/жидкостей/сущностей здесь нет.

 

Содержание:

Скрытый текст
  1. Адаптеры блоков
    • Инвентарь
    • Инвентарь в мире
    • Жидкостный бак
    • Контроллер жидкостей
    • Датчик дневного света
    • Табличка
    • Нотный блок
    • Маяк
    • Варочная стока
    • Компаратор
    • Цветочный горшок
    • Печь
    • Спавнер мобов
    • Проигрыватель пластинок
    • Череп/голова
  2. Провайдеры предметов
    • Ore Dictionary
    • Хэш-сумма NBT
    • Контейнер жидкости
    • Зачарованная книга
    • Зачарованный предмет
    • Класс инструмента
    • Зелье
    • Броня
    • Меч
    • Инструмент
    • Время горения предмета
  3. Провайдеры сущностей
    • Инвентарь
    • Живое существо
    • Полоска босса
    • Рамка для предметов
    • Картина
    • Предмет
    • Приручаемое существо
  4. Индивидуальные провайдеры существ
    • Игрок
    • Летучая мышь
    • Крипер
    • Лошадь/осёл/мул
    • Свинья
    • Овца
    • Житель
    • Ведьма
    • Волк
    • Зомби

 

Адаптеры блоков

 Инвентарь - предоставляет возможность управлять внутренними ячейками любого инвентаря.

Идентификатор: inventory
getInventoryName():string - название инвентаря
getInventorySize():string - количество ячеек в инвентаре
getStackInSlot(slotNumber:number[, proxy:bool]):object - получить предмет в ячейке, если proxy не задан или false - возвращает всю информацию о предмете
destroyStack(slotNumber:number) - уничтожить стек в ячейке
expandStack(stack:table):object - узнать всю информацию о предмете  любом предмете, даже если такого нет в инвентаре), необходимо передать id и мету
swapStacks(fromSlot:number, intoSlot:number[, fromDirection:string[, toDirection:string]]) - поменять местами предметы в слотах
-- fromDirection и toDirection используются для инвентарей, с которыми можно взаимодействовать через стороны, например - печь.
-- Если передать в эти параметры сторону, то можно расширить поведение подобных инвентарей.
-- Например печь swapStacks(1,2) без использования сторон, можно менять верхний и нижние слоты, если в них находится что-то горючее.
-- Если передать вторым параметром "DOWN" swapStacks(1,2,nil,"DOWN") - то вынуть топливо уже не возможно.
-- Но если в этом слоте есть пустое ведро (от лавы), то поменять слоты становится возможным.
condenseItems() - собрать в кучу разбросанные в инвентаре предметы
-- использовать с ОСТОРОЖНОСТЬЮ - если первые ячейки инвентаря не смогут принять предмет - он уничтожится

 

Инвентарь в мире - предоставляет возможность взаимодействовать с соседними блоками-инвентарями.

Идентификатор: inventory-world
pullItem|pullItemIntoSlot(direction:string, slot:number[, maxAmount[, intoSlot]]):number - забрать предмет из соседнего инвентаря. Возвращает количество перемещенных предметов.
pushItem|pushItemIntoSlot(direction:string, slot:number[, maxAmount[, intoSlot]]):number - поместить предмет в соседний инвентарь. Возвращает количество перемещенных предметов.

 

Жидкостный бак - можно получить информацию о жидкости в баке.

Идентификатор: fluid_tank
getInfo():table - информация о хранилище жидкости

 

Жидкостный контроллер - можно получить информацию о жидкостных хранилищах в блоке.

Идентификатор: fluid_handler
getTankInfo([direction]):table[] - информация о всех хранилищах жидкостей, можно передать конкретную сторону для получения бака

 

Датчик дневного света - позволяет узнать информацию о небе и солнце.

Идентификатор: vanilla_daylight_sensor
hasSky():bool - имеется ли небо в этом биоме (его нет в энде, например)
getSkyLight():number - освещенность неба, 0-15 (работает только в биомах с небом)
getBlockLight():number - получить освещенность датчика, 0-15
getCelestialAngle():number - получить угол солнца, 0 это зенит, 0.0-360.0

 

Табличка - предоставляет управление табличкой.

Идентификатор: vanilla_sign
getText():string - получить текст таблички
setText(text:string) - установить текст
getLines():string[] - получить линии таблички
setLines(lines:string[]) - установить линии таблички
getLine(line:number):string - получить линию таблички
setLine(line:number, text:string) - установить линию таблички

 

Нотный блок - предоставляет управление нотным блоком.

Идентификатор: vanilla_note
getNote():number - получить текущую ноту
setPitch(note):bool - установить ноту, 0-25
triggerNote() - проиграть текущую ноту
incrementPitch() - увеличить текущую ноту на единицу
playSound(sound:string, pitch:number, volume:number[, x:number, y:number, z:number]) - проигрывает ЛЮБОЙ звук из игры
-- pitch и volume 0.0-1.0
-- x,y,z - относительно нотного блока
-- список основных звуков можно узнать тут - https://minecraft-ru.gamepedia.com/Sounds.json

 

Маяк - можно получить информацию о маяке и эффектах, но выставить необходимый эффект невозможно.

Идентификатор: vanilla_beacon
getPrimaryEffect():string - имя основного эффекта
getSecondaryEffect():string - имя дополнительного эффекта
int getLevels():number - количество уровней маяка

 

Варочная стойка - можно получить информацию о времени варки. Для автоматической варки можно воспользоваться методами инвентаря.

Идентификатор: vanilla_brewing
getBrewTime():number - оставшееся время варки в тиках

 

Компаратор - можно узнать уровень исходящего сигнала... и всё.

Идентификатор: vanilla_comparator
getOutputSignal():number - сила сигнала, 0-15

 

Цветочный горшок - можно узнать что в нём.

Идентификатор: flower_pot
getContents():table - получить информацию о предмете в горшке

 

Печь - информация о состоянии печи.

Идентификатор: vanilla_furnace
getBurnTime():number - оставшееся время горения, в тиках
getCookTime():number - сколько тиков прошло с момента начала обжарки предмета, в тиках
getCurrentItemBurnTime():number - полное время обжарки предмета, в тиках
isBurning():bool - активна ли печь

 

Спавнер мобов - информация о мобе.

Идентификатор: vanilla_spawner
getSpawningMobName():string - имя моба

 

Проигрыватель пластинок - можно узнать текущую пластинку.

Идентификатор: vanilla_player
getRecord():string - получить текущую пластинку

 

Череп/голова - получить информацию о черепе или голове.

Идентификатор: skull
getType():string - тип головы/черепа
getPlayer():string, string - информация о игроке: уникальный идентификатор и имя

 

Провайдеры предметов

 Ore Dictionary

Ключ: ore_dict
Значение: table {имя_ore_dict=true}

 

Хэш-сумма всех nbt-данных предмета

Ключ: nbt_hash
Значение: string

 

Контейнер жидкости - информация о хранилище жидкости

Ключ: fluid_container
Значение: table

 

Зачарованная книга - список зачарований на книге

Ключ: enchanted_book
Значение: table
    - name:string - имя зачарования
    - level:number - уровень зачарования
    - fullName:string - название зачарования, зависит от языка сервера

 

Зачарованный предмет - список зачарований на предмете

Ключ: ench
Значение: table
    - name:string - имя зачарования
    - level:number - уровень зачарования
    - fullName:string - название зачарования, зависит от языка сервера

 

Класс инструмента

Ключ: tool_class
Значение: table {тип_инструмента=уровень_добычи:number}

 

Зелье

Ключ: potion
Значение: table
    - splash:bool - взрывное ли зелье
    - effects:table - список эффектов зелья
        - duration:number - длительность эффекта
        - amplifier:number - сила эффекта
        - effect - информация о эффекте, структура:
            - name:string - имя эффекта
            - instant:bool - моментальный ли эффект от зелья
            - color:number - цвет частиц зелья, 0xRRGGBB

 

Броня

Ключ: armor
Значение: table
    - material:string - материал брони
    - type:string - тип части брони
    - color:number? - цвет окрашенной брони, 0xRRGGBB

 

Меч

Ключ: sword
Значение: table
    - material:string - материал меча

 

Инструмент

Ключ: tool
Значение: table
    - material:string - материал инструмента

 

Время горения предмета в тиках

Ключ: burn_time
Значение: number

 

Провайдеры сущностей

Список предметов в инвентаре сущности

Ключ: inventory|inventory-provider
Значение: table[] - список proxy

 

Информация о живом существе - огромное количество данных, может съесть память

Ключ: living
Значение: table
    - health:number - текущее здоровье
    - maxHealth:number - максимальное здоровье
    - yaw:number - поворот тела, вертикальная ось, -360 - 360
    - yawHead:number - поворот головы, вертикальная ось, -360 - 360
    - pitch:number - поворот головы, поперечная ось, -360 - 360
    - heldItem:table - предмет в руке
    - armor:table - броня сущности
        - boots:table - предмет ботинок
        - leggings:table - предмет поножей
        - chestplate:table - предмет нагрудника
        - helmet:table - предмет шлема
    - potionEffects:string[] - список имён действующих эффектов
    - potion_effects:table[] - подробный список действующих эффектов
        - duration:number - длительность эффекта, в секундах
        - amplifier:number - сила эффекта
        - is_ambient:bool - эффект области, например в зоне действия маяка
        - effect:table - информация о эффекте
            - name:string - имя эффекта
            - instant:bool - моментальный ли эффект от зелья
            - color:number - цвет частиц зелья, 0xRRGGBB
    - lookingAt:table - на что смотрит существо
        - type:string - block или entity
        - id:number? - индекс сущности, для типа entity
        - position:number? - абсолютная или относительная(не относительно существа, а относительно сканера, например) позиция блока, для типа block
    - isAirborne:bool - существо находится в воздухе, т.е. летает или падает
    - isBurning:bool - существо горит
    - isAlive:bool - существо живо
    - isDead:bool - существо мертво, если было сохранено proxy существа - то при смерти значение выставится в true
    - isInWater:bool - существо в воде
    - isOnLadder:bool - существо на лестнице
    - isSleeping:bool - игрок спит
    - isRiding:bool - существо оседлало другую сущность
    - isSneaking:bool - существо приседает
    - isSprinting:bool - существо бежит
    - isWet:bool - существо мокрое, например после нахождения в воде
    - isChild:bool - существо-ребёнок

 

Полоска здоровья босса

Ключ: boss
Значение: table
    - name:string - имя босса
    - health:number - текущее здоровье босса
    - maxHealth:number - максимальное здоровье босса

 

Рамка для предметов

Ключ: item_frame
Значение: table
    - item:table - информация о предмете
    - rotation:number - поворота предмета, 0-3

 

Картина

Ключ: painting
Значение: table
    - title:string - название картины
    - width:number - ширина картины в блоках
    - height:number - высота картины в блоках

 

Предмет на земле

Ключ: item
Значение: table
    - stack:table - информация о предмете
    - age:number - какое время предмет находится на земле, в тиках
    - lifespan:number - общее время "жизни" предмета, в тиках

 

Приручаемое существо, например оцелот

Ключ: tameable
Значение: table
    - isTamed:bool - приручено ли существо
    - isSitting:bool? - сидит ли существо
    - ownerUUID:string? - uuid игрока, приручившего существо

 

Индивидуальные провайдеры существ

Игрок

Ключ: player
Значение: table
    - inventory:table[] - список proxy предметов инвентаре
    - isAirBorne:bool - находится ли в воздухе
    - isBlocking:bool - блок мечом
    - profile:table - профиль игрока
    - foodLevel:number - уровень сытости
    - isCreativeMode:bool - находится ли в креативе
    - experience:table - информация о опыте
        - level:number - уровень игрока
        - levelProgress:number - прогресс уровня, 0.0-1.0
        - nextLevelXp:number - общее количество опыта до следующего уровня

 

Летучая мышь

Ключ: bat
Значение: table
    - isHanging:bool - висит ли мышь

 

Крипер

Ключ: creeper
Значение: table
    - isCharged:bool - заряженный ли крипер

 

Лошадь, осёл или мул

Ключ: horse
Значение: table
    - eatingHaystack:bool - лошать ест сено
    - hasReproduced:bool - имеет ли потомство, не используется, всегда false
    - bred:bool - возможно ли размножение
    - horseType:number - тип лошади, 0-4
    - horseVariant:number - раскраска лошади: текстура - первые 8 бит, пятна - следующие 8 бит
    - horseTemper:number - характер лошади, 0-100, чем больше значение - тем быстрее приручается
    - horseTame:bool - приручена ли лошадь
    - ownerUUID:string - uuid владельца лошади
    - chestedHorse:bool - если сундук на осле/муле
    - chest:table[]? - список proxy предметов в сундуке

 

Свинья

Ключ: pig
Значение: table
    - isSaddled:bool - есть ли седло на свинье

 

Овца

Ключ: sheep
Значение: table
    - sheepColor:number - цвет овцы, индекс 0-15
    - isSheared:bool - пострижена ли овца

 

Житель

Ключ: villager
Значение: table
    - profession:number - профессия жителя, 0-4
    - isMating:bool - житель размножается
    - isPlaying:bool - ребёнок жителя играет
    - isTrading:bool - сейчас торгует с игроком
    - customer:table? - профиль игрока-покупателя

 

Ведьма

Ключ: witch
Значение: table
    - isAggressive:bool - агрессивна ли ведьма

 

Волк

Ключ: wolf
Значение: table
    - isShaking:bool - волк отряхивается
    - isAngry:bool - волк злой
    - collarColor:bool - цвет ошейника, индекс 0-15

 

Зомби

Ключ: zombie
Значение: table
    - isVillagerZombie:bool - является ли зомби-жителем
    - convertingToVillager:bool - сейчас превращается в жителя

 

На этом функционал ванилы окончен.

  • Нравится 3
  • Одобряю 1
  • Спасибо 1


11 комментариев


Рекомендуемые комментарии

В 09.05.2020 в 16:11, eu_tomat сказал:

Что такое Чокола?

Это "кто". Слева Чокола, справа Ванилла. :D

Скрытый текст

7H3DEF.jpg

 

Поделиться комментарием


Ссылка на комментарий

@eu_tomat эээ из сорцов и сорцов сорцов. Поковырял код перифералки, код майна, код модов + тесты в майне, как-то так.

Изменено пользователем Xytabich

Поделиться комментарием


Ссылка на комментарий
6 минут назад, Xytabich сказал:

@eu_tomat эээ из сорцов и сорцов сорцов.

С удовольствием почитаю гайд о том, как доставать сорцы. И сорцы сорцов тоже. У меня мало опыта в этом.

Поделиться комментарием


Ссылка на комментарий

@eu_tomat с помощью гугла и гитхаба) На гитхабе практически у всех модов есть сорцы, а если в нём нет - то гугл поможет.

Например, искал я зачем функции swapStacks нужны стороны, посмотрел название интерфейса, нашёл в гугле файл интерфейса, и реализующих его функционал, накопал печку.

Поделиться комментарием


Ссылка на комментарий

Да, точно же! Я почему-то думал, что нет у него исходников. Просто я иногда пытался что-то из модов декомпилировать, и не всегда получалось.

Поделиться комментарием


Ссылка на комментарий
13 минуты назад, eu_tomat сказал:

Да, точно же! Я почему-то думал, что нет у него исходников. Просто я иногда пытался что-то из модов декомпилировать, и не всегда получалось.

В названии OpenPeripheral первые 4 буквы недвусмысленно намекают на то, что в исходниках можно легко покопаться. :P

Поделиться комментарием


Ссылка на комментарий

А типа PushItem и PushItemIntoSlot это тупо алиас? Я вот уже несколько лет юзаю инвентари и никогда не понимал разницы между этими двумя методами.

Поделиться комментарием


Ссылка на комментарий
Гость
Добавить комментарий...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...