Skip to content

Latest commit

 

History

9 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

🎮 NUnReal

Мощный плагин для Paper/Spigot Minecraft, добавляющий систему способностей по чанкам и пользовательские генераторы мобов.

Версия: 1.0.2 | API: Minecraft 1.21 | Разработчик: noloverme
Статус: Активно поддерживается

📋 Содержание


🎯 Обзор

NUnReal преобразует геймплей Minecraft, предоставляя систему активируемых по чанкам способностей. Игроки могут размещать специальные блоки способностей в чанках, чтобы разблокировать мощные модификаторы, влияющие на:

  • Скорость добычи и ломания блоков
  • Полёты и передвижение
  • Сбор предметов и ресурсов
  • Взаимодействие с сущностями
  • Рост растений и урожайность
  • И многое другое...

⚡ Основные возможности

Функция Описание
15+ Способностей От добычи до полёта, от магнита до вечной сытости
27+ Мобов Все враждебные и мирные мобы с кастомными рецептами
Система Чанков Один блок на чанк с постоянным сохранением данных
Полная конфигурируемость Все параметры регулируются через config.yml
Продвинутая обработка событий Кастомный крафт, взаимодействие, состояния игрока
Асинхронные задачи Магнит предметов и проверка чанков работают без лагов

💻 Установка

Требования

Java 21+
Paper/Spigot Server (протестировано на 1.21.8)
Maven 3.6+ (для сборки)

Пошаговая установка

Шаг 1: Подготовка кода

git clone https://github.com/noloverme/NUnReal/
cd NUnReal

Шаг 2: Сборка проекта

mvn clean package

Скомпилированный JAR появится по пути: target/NUnReal-1.0.2.jar

Шаг 3: Установка на сервер

cp target/NUnReal-1.0.2.jar /path/to/server/plugins/

Шаг 4: Перезагрузка сервера

/restart

Или просто перезагрузите сервер полностью.

Шаг 5: Проверка

/nunreal give

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


⚙️ Конфигурация

Плагин полностью настраивается через config.yml. При первом запуске автоматически создаётся файл конфигурации со значениями по умолчанию.

Основные секции конфигурации

1. Крафт (craft)

Определяет рецепт создания блока способностей:

craft:
  enabled: true
  shape:
    - "C D E"
    - "F L F"
    - "M N O"
  slots:
    C: CRYING_OBSIDIAN
    D: AMETHYST_CLUSTER
    E: OBSIDIAN
    F: TINTED_GLASS
    L: TOTEM_OF_UNDYING
    M: ENCHANTED_GOLDEN_APPLE
    N: END_CRYSTAL
    O: TURTLE_HELMET
  result-name: "§6Блок Способностей"
  result-lore:
    - "§7Поставьте и нажмите ПКМ"
    - "§7чтобы выбрать способность"

2. Параметры блоков (blocks)

Управляет поведением блоков способностей:

blocks:
  one-per-chunk: true         # Один блок на чанк
  require-pickaxe: true       # Требует кирку для разрушения
  break-time-ticks: 20        # Время разрушения (20 тиков = 1 сек)
  insta-break: false          # Моментальное разрушение
  drop-item: true             # Выпускает предмет при разрушении
  messages:
    placed: "§aБлок способностей установлен!"
    already-exists: "§cВ этом чанке уже есть блок!"
    broken: "§eБлок способностей разрушен."
    need-pickaxe: "§cИспользуйте кирку!"

3. Экономика (economy)

Система стоимости способностей:

economy:
  default-cost:
    material: DIAMOND
    amount: 1
  
  ability-costs:
    MINING:           # Копание: 20 алмазов
      material: DIAMOND
      amount: 20
    
    FLIGHT:           # Полёт: 10 незеритовых слитков
      material: NETHERITE_INGOT
      amount: 10
    
    KEEP_RESOURCES:   # Сохранение ресурсов: 32 алмаза
      material: DIAMOND
      amount: 32
    
    # ... остальные способности

Логика стоимости: Когда игрок активирует способность, из его инвентаря удаляются предметы согласно конфигурации.

4. Меню (menu)

Настройка интерфейса выбора способностей:

menu:
  title: "§8Выбор способности"
  size: 18              # Размер инвентаря (должен быть кратен 9)
  filler:
    enabled: true
    material: GRAY_STAINED_GLASS_PANE
    name: " "
  
  abilities:
    MINING:
      slot: 0           # Слот в меню (0-17)
      material: GOLDEN_PICKAXE
      name: "§eКопание"
      lore:
        - "§7+30.0 к скорости ломания"
        - ""
        - "§eЦена: 20 алмазов"
      active-lore-line: "§aАктивно"

5. Способности (abilities)

Детальные параметры каждой способности:

abilities:
  # Способности на основе атрибутов
  MINING:
    attribute: BLOCK_BREAK_SPEED
    value: 30.0
  
  # Специальные способности
  MAGNET:
    radius: 8.0               # Радиус сбора (блоки)
    speed: 0.30               # Скорость притягивания
    interval-ticks: 5         # Частота проверки
    max-items-per-tick: 100   # Максимум предметов за тик
  
  FLIGHT:
    fly-speed: 0.1            # Скорость полёта
    exit-protection: SLOW_FALLING
    slow-falling-seconds: 5   # Длительность защиты при выходе

6. Генераторы мобов (spawners)

Система крафта для спавнеров:

spawners:
  enabled: true
  require-silk-touch: true    # Требует "Шёлковое касание"
  
  recipes:
    SKELETON:
      enabled: true
      shape:
        - "G C G"             # Строки рецепта (3x3)
        - "D B D"
        - "A A A"
      ingredients:
        G: "BONE"             # G = BONE
        C: "BOW"              # C = BOW
        B: "NETHERITE_INGOT"  # B = NETHERITE_INGOT
        D: "ARROW"            # D = ARROW
        A: "DIAMOND"          # A = DIAMOND

Логика рецепта: Верстак будет требовать расстановку предметов в виде:

[BONE]        [BOW]         [BONE]
[ARROW]       [NETHERITE]   [ARROW]
[DIAMOND]     [DIAMOND]     [DIAMOND]

⭐ Способности

В плагине доступно 15 уникальных способностей:

Способности на основе атрибутов

Способность Эффект Стоимость Как работает
MINING +30 к скорости ломания 20 💎 Ускоряет добычу всех блоков в чанке
LONG_ARM +15 к дальности взаимодействия 20 💎 Позволяет взаимодействовать с блоками издалека
ANTI_KNOCKBACK +30 к сопротивлению отдаче 1 💎 Защита от отброса при попадании
LUCK +30 к удаче 5 💎 Больше дропа, чаще редкие предметы
DWARF -0.75 к масштабу 1 💎 Игрок становится меньше ростом
FALL_RESIST +10 к безопасной высоте падения 1 💎 Можно падать без урона с большей высоты

Специальные способности

Способность Эффект Стоимость Как работает
GROWTH Растения растут на 50% быстрее 5 💎 Ускоряет рост пшеницы, тыквы и т.д.
MAGNET Автосбор выброшенных предметов 10 💎 Предметы притягиваются к игроку
FLIGHT Полёт в чанке 10 🔷 Игроки могут летать внутри чанка
INFINITE_TRADES Жители не исчерпывают сделки 10 🔷 Бесконечные трейды с жителями
KEEP_RESOURCES Сохранение ресурсов при смерти 32 💎 Предметы и опыт не теряются
SATURATION Голод не уменьшается 3 💎 Полоса голода "замораживается"
AUTO_SMELT Руда переплавляется автоматически 15 💎 Железо, золото, медь → слитки
HOLY_GROUND Блокировка спавна враждебных мобов 20 💎 Натуральный спавн мобов невозможен
THRIFTY_CRAFT 15% шанс вернуть ингредиент 2 🔷 При крафте на верстаке может вернуться 1 ингредиент

Обозначения: 💎 = Алмаз | 🔷 = Незеритовый слиток


🎮 Команды

Команды администратора

Все команды требуют права nunreal.admin (по умолчанию = OP).

/nunreal reload

Описание: Перезагружает конфигурацию и переинициализирует все рецепты.

Использование: /nunreal reload
Результат:
  ✓ Конфиг перезагружен
  ✓ Рецепты способностей обновлены
  ✓ Рецепты спавнеров обновлены
  ✓ Меню переинициализировано

Когда использовать: После редактирования config.yml

/nunreal give [игрок]

Описание: Выдаёт блок способностей игроку. Если игрок не указан, выдаёт себе.

Примеры:
  /nunreal give
  /nunreal give PlayerName

/nunreal givespawner <моб> [игрок]

Описание: Выдаёт спавнер определённого моба.

Примеры:
  /nunreal givespawner SKELETON
  /nunreal givespawner SKELETON PlayerName

Доступные мобы:

Враждебные:    SKELETON, ZOMBIE, WITHER_SKELETON, GHAST, CREEPER,
               HOGLIN, SHULKER, SPIDER, BLAZE, VINDICATOR,
               MAGMA_CUBE, SLIME, ENDERMAN, DROWNED

Мирные:        COW, MOOSHROOM, BREEZE, SNIFFER, IRON_GOLEM,
               ARMADILLO, WOLF, TURTLE, VILLAGER, SALMON,
               COD, CAT, SNOW_GOLEM

Взаимодействие игроков

  1. Поместите блок способностей в чанк (ПКМ)
  2. Нажмите ПКМ по блоку → откроется меню способностей
  3. Кликните на способность в меню
  4. Проверьте стоимость и подтвердите активацию

🔐 Права доступа

Право Описание По умолчанию
nunreal.admin Доступ к командам администратора OP
nunreal.craft Право крафтить блоки способностей TRUE
nunreal.use Право использовать меню способностей TRUE
nunreal.spawner.place Право устанавливать блоки способностей TRUE
nunreal.spawner.break Право разрушать блоки способностей OP

Примеры установки прав

Через LuckPerms:

/lp user PlayerName permission set nunreal.admin true
/lp user PlayerName permission set nunreal.craft true

Через командный блок:

/execute as @a unless entity @s[tag=nunreal.verified] run function nunreal:check_perms

📂 Структура проекта

NUnReal/
│
├── src/main/java/com/noloverme/nunreal/
│   │
│   ├── NUnReal.java
│   │   └─ Главный класс плагина, управление жизненным циклом
│   │
│   ├── ability/
│   │   ├─ AbilityType.java (перечисление типов способностей)
│   │   ├─ AbilityManager.java (управление состоянием игроков)
│   │   ├─ AbilityApplier.java (применение атрибутов)
│   │   └─ FlightManager.java (управление полётом)
│   │
│   ├── block/
│   │   ├─ CommandBlockData.java (структура данных блока)
│   │   └─ CommandBlockManager.java (сохранение/загрузка блоков)
│   │
│   ├── chunk/
│   │   └─ ChunkManager.java (отслеживание состояния чанков)
│   │
│   ├── spawner/
│   │   ├─ SpawnerType.java (перечисление мобов)
│   │   ├─ SpawnerItemFactory.java (создание предметов спавнеров)
│   │   └─ SpawnerRecipeManager.java (управление рецептами)
│   │
│   ├── craft/
│   │   └─ CommandBlockRecipe.java (рецепт блока способностей)
│   │
│   ├── config/
│   │   └─ ConfigManager.java (загрузка и доступ к конфигурации)
│   │
│   ├── command/
│   │   └─ NUnRealCommand.java (обработка команд)
│   │
│   ├── menu/
│   │   ├─ AbilityMenu.java (GUI меню выбора способностей)
│   │   └─ MenuListener.java (обработка событий инвентаря)
│   │
│   ├── listener/ (15+ слушателей событий)
│   │   ├─ BlockPlaceListener.java
│   │   ├─ BlockBreakListener.java
│   │   ├─ BlockInteractListener.java
│   │   ├─ FlightListener.java
│   │   ├─ PlayerDeathListener.java
│   │   ├─ AutoSmeltListener.java
│   │   ├─ HolyGroundListener.java
│   │   ├─ SaturationListener.java
│   │   ├─ ThriftyCraftListener.java
│   │   └─ ... (и другие)
│   │
│   └── task/
│       ├─ ChunkCheckTask.java (проверка чанков)
│       └─ MagnetTask.java (магнит предметов)
│
├── src/main/resources/
│   ├── plugin.yml (метаданные плагина)
│   └── config.yml (конфигурация по умолчанию)
│
├── pom.xml (конфигурация Maven)
│
└── target/
    └── NUnReal-1.0.2.jar (скомпилированный плагин)

🔧 Как это работает

Логика активации способности

1. Крафт → Игрок создаёт блок способностей по рецепту
   ↓
2. Установка → Игрок размещает блок в чанке (ПКМ)
   ↓
3. Взаимодействие → Игрок нажимает ПКМ по блоку
   ↓
4. Меню → Открывается GUI с выбором способностей
   ↓
5. Активация → Игрок выбирает способность
   ↓
6. Проверка → Система проверяет стоимость
   ↓
7. Применение → Если хватает ресурсов:
              - Ресурсы удаляются из инвентаря
              - Способность применяется ко ВСЕМ игрокам в чанке
              - Данные сохраняются

Система сохранения данных

  • Загрузка: При старте плагина все данные блоков загружаются из памяти
  • Хранение: Во время работы данные хранятся в памяти (быстро)
  • Сохранение: При остановке плагина данные записываются на диск
  • Восстановление: При следующем старте данные восстанавливаются

Асинхронные задачи

Два фоновых процесса работают отдельно от основного потока:

ChunkCheckTask (каждые 20 тиков = 1 сек по умолчанию)

  • Проверяет, в каком чанке находится игрок
  • Если чанк изменился, переприменяет способности
  • Предотвращает "застревание" способностей при движении

MagnetTask (каждые 5 тиков по умолчанию)

  • Ищет выброшенные предметы в радиусе 8 блоков
  • Притягивает их к игроку со скоростью 0.30
  • Обрабатывает до 100 предметов за тик (для оптимизации)

💡 Примеры использования

Пример 1: Создание "Зоны добычи"

Цель: Создать чанк, где добыча происходит в 2 раза быстрее.

Конфигурация:

economy:
  ability-costs:
    MINING:
      material: DIAMOND
      amount: 10

Действия:

1. /nunreal give          # Получить блок способностей
2. Поместить блок в чанк
3. ПКМ по блоку → выбрать MINING
4. Подтвердить (10 алмазов)
5. Готово! Добыча ускорена в чанке

Пример 2: "Ферма с автоплавкой"

Цель: Руда переплавляется сразу в слитки.

Конфигурация:

abilities:
  AUTO_SMELT:
    affected-blocks:
      IRON_ORE: IRON_INGOT
      GOLD_ORE: GOLD_INGOT
      COPPER_ORE: COPPER_INGOT
    respect-silk-touch: true
    respect-fortune: true

Действия:

1. Активировать способность AUTO_SMELT в чанке (15 💎)
2. Копать руду в чанке
3. Вместо руды падают сразу слитки
4. Экономия времени на плавку

Пример 3: "Зона безопасности"

Цель: Создать зону, где враги не спауняются и игрок не падает.

Конфигурация:

abilities:
  HOLY_GROUND:
    block-raids: false
    blocked-spawn-reasons:
      - NATURAL
      - JOCKEY
      - PATROL
  
  FALL_RESIST:
    attribute: SAFE_FALL_DISTANCE
    value: 10.0

Действия:

1. Активировать HOLY_GROUND (20 💎)
2. Активировать FALL_RESIST (1 💎)
3. В чанке враги не спауняются
4. Можно безопасно падать с высоты

Пример 4: Кастомный спавнер

Цель: Создать кастомный рецепт для спавнера скелета.

Конфигурация:

spawners:
  recipes:
    SKELETON:
      enabled: true
      shape:
        - "B B B"
        - "B S B"
        - "B B B"
      ingredients:
        B: "BONE"
        S: "SPAWNER"

Логика:

Рецепт требует:
[BONE] [BONE] [BONE]
[BONE] [SPAWNER] [BONE]
[BONE] [BONE] [BONE]

Просто вкладываешь ингредиенты на верстак - получаешь спавнер скелета!

🔍 Решение проблем

❌ Плагин не загружается

Симптомы: В логе консоли ошибки при загрузке.

Решение:

1. Проверить версию Java: java -version
   → Должно быть Java 21 или выше

2. Проверить plugin.yml:
   main: com.noloverme.nunreal.NUnReal

3. Посмотреть логи:
   tail -f logs/latest.log

4. Пересоздать конфиг:
   rm plugins/NUnReal/config.yml
   /reload

❌ Блок способностей не появляется в крафте

Симптомы: Даже с правильными ингредиентами блок не крафтится.

Решение:

# Проверить в config.yml:
craft:
  enabled: true  # Должно быть true!

# Запустить команду:
/nunreal reload

# Проверить права:
# Игрок должен иметь nunreal.craft

❌ Способность не активируется

Симптомы: Выбираю способность, но эффект не применяется.

Проверочный список:

□ Достаточно ресурсов в инвентаре?
□ Права nunreal.use установлены?
□ Блок находится в правильном чанке?
□ В чанке уже есть другой блок способностей?
  (система ограничивает: один блок на чанк)
□ Способность включена в config.yml?

Решение:

# Перезагрузить конфиг
/nunreal reload

# Снова попробовать
/nunreal give

# Если не помогает - проверить логи
tail -f logs/latest.log | grep -i nunreal

❌ Полёт не работает

Симптомы: Активирована способность FLIGHT, но полёт не включается.

Решение:

# В config.yml проверить:
abilities:
  FLIGHT:
    fly-speed: 0.1  # Не должна быть 0!
    exit-protection: SLOW_FALLING

# Убедиться что:
□ Вы находитесь в чанке с активированной способностью
□ Нижняя часть вашего тела в этом чанке
□ Нет конфликтов с другими плагинами полёта

Отладка:

1. Смена чанка: ПКМ ПКМ ПКМ (нажимайте края чанка)
2. Переход в спектром режим: /gamemode spectator
3. Возврат: /gamemode survival
4. Переподключение: /disconnect → повторное подключение

❌ Кастомный рецепт спавнера не работает

Симптомы: Вкладываю ингредиенты на верстак, но спавнер не создаётся.

Проверка:

# Убедитесь что:
spawners:
  enabled: true
  recipes:
    SKELETON:
      enabled: true  # true = включен!
      shape:
        - "G C G"
        - "D B D"
        - "A A A"
      ingredients:
        G: "BONE"          # Точные названия!
        C: "BOW"
        B: "NETHERITE_INGOT"
        D: "ARROW"
        A: "DIAMOND"

Проверка ингредиентов:

1. Все ли ингредиенты существуют в Minecraft?
   /give @s BONE 1
   
2. Все ли буквы используются в shape?
   shape:
     - "G C G"   # Используется: G, C
     - "D B D"   # Используется: D, B
     - "A A A"   # Используется: A
   
   Итого используется: G, C, D, B, A ✓

3. Все ли используемые буквы определены в ingredients?
   ingredients:
     G: "BONE" ✓
     C: "BOW" ✓
     D: "ARROW" ✓
     B: "NETHERITE_INGOT" ✓
     A: "DIAMOND" ✓

Решение:

# Перезагрузить конфиг
/nunreal reload

# Проверить в логах
tail -f logs/latest.log | grep -i "recipe"

# Выдать спавнер командой
/nunreal givespawner SKELETON

📈 Производительность

Оптимизация для больших серверов

Уменьшить нагрузку ChunkCheckTask:

task:
  interval-ticks: 40  # Вместо 20 (проверка каждые 2 сек)

Оптимизировать магнит:

abilities:
  MAGNET:
    radius: 6.0              # Вместо 8.0
    interval-ticks: 10       # Вместо 5 (проверка реже)
    max-items-per-tick: 50   # Вместо 100

Ускорить разрушение блока:

blocks:
  break-time-ticks: 10  # Вместо 20

Мониторинг TPS

# Посмотреть TPS прямо в игре
/tps

# Если TPS падает при активации способностей:
1. Отключить асинхронные задачи (временно)
2. Уменьшить radius магнита
3. Увеличить interval-ticks

📦 Сборка и разработка

Требования для разработки

Java 21 JDK
Maven 3.6+
Git
IntelliJ IDEA или VS Code (рекомендуется)

Команды Maven

# Полная сборка с очисткой
mvn clean package

# Быстрая сборка (без тестов)
mvn package -DskipTests

# Компиляция без упаковки
mvn compile

# Очистка
mvn clean

Структура Maven

<properties>
  <maven.compiler.source>21</maven.compiler.source>
  <maven.compiler.target>21</maven.compiler.target>
</properties>

<dependencies>
  <dependency>
    <groupId>io.papermc.paper</groupId>
    <artifactId>paper-api</artifactId>
    <version>26.1.2.build.66-stable</version>
    <scope>provided</scope>
  </dependency>
</dependencies>

📝 Заметки

  • Все сообщения в игре на русском языке - настраиваются через config.yml
  • Плагин использует Bukkit Attribute System для применения модификаторов
  • Обнаружение чанков автоматическое через Bukkit API
  • Все стоимости настраиваются отдельно для каждой способности
  • Рецепты спавнеров поддерживают 3×3 сетку (9 ингредиентов максимум)
  • Данные сохраняются при выключении плагина и загружаются при включении

ℹ️ Информация

Параметр Значение
Версия 1.0.2
Разработчик noloverme
API версия 1.21
Java 21+
Статус Активно поддерживается
Девиз "Невозможное возможно, наверное"

Спасибо за использование NUnReal! Для вопросов и предложений обратитесь к разработчику или оставьте issue в репозитории.

Извините что начал заливать с 1.0.2. Пока тестил не закидывал на GitHub. Делал для одного сервера, решил выложить сюда. Может будет кто-то пользоваться. Не знаю.

About

Невозможное возможно?

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages