Skip to content

JoyBank - банковская система - #13

Open
gafrus06 wants to merge 7 commits into
JouTak:masterfrom
gafrus06:bank-terminal
Open

gafrus06 wants to merge 7 commits into
JouTak:masterfrom
gafrus06:bank-terminal

Conversation

@gafrus06

Copy link
Copy Markdown

Что реализовано

  • Добавлена физическая валюта «Джой» со стаками до 64.
  • Монеты имеют кастомную текстуру через resource pack.
  • Добавлена админская команда для выдачи монет.
  • Реализована регистрация банкомата из бочки, таблички и железного блока.
  • Добавлен GUI банкомата с просмотром баланса, внесением и снятием средств.
  • Реализована история операций DEPOSIT / WITHDRAW.
  • Добавлена защита GUI от shift-click, drag и других стандартных способов перемещения предметов.
  • Добавлена защита ATM от разрушения, взрывов и поршней.

Хранение данных

Баланс игроков и история операций сохраняются в YAML через AccountRepository.

Зарегистрированные банкоматы сохраняются отдельно через AtmRepository.

Бизнес-логика не зависит напрямую от конкретного способа хранения, поэтому позже YAML можно заменить на БД без переписывания GUI и основной банковской логики.

Как распознаются монеты

Монета основана на GOLD_NUGGET, но настоящие монеты помечаются через PersistentDataContainer.

Название или переименование предмета на наковальне не делает обычный предмет настоящей валютой.

CustomModelData используется только для отображения кастомной текстуры.

Проверка

Проверил:

  • выдачу и стаки монет;
  • внесение и снятие;
  • недостаточный баланс;
  • полный инвентарь при снятии;
  • поддельные переименованные предметы;
  • сохранение баланса, истории и ATM после перезапуска;
  • shift-click и drag в GUI;
  • разрушение и взрывы рядом с ATM.

Демонстрация

Видео: https://drive.google.com/file/d/1DTjinDu64Tq_K873yMK-wAvahhgzC3ML/view?usp=sharing

@EnderDissa
EnderDissa self-requested a review September 12, 2026 21:42
@EnderDissa EnderDissa linked an issue Sep 12, 2026 that may be closed by this pull request

Atm atm = optionalAtm.get();

atmService.unregister(atm.id());

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Похоже, здесь осталась старая реализация обработки BlockBreakEvent. Ниже та же логика уже нормально разделена между HIGHEST (onBlockBreakProtection) и MONITOR (onBlockBreakCleanup).
Текущий onBlockBreak() вызывается по идее на NORMAL, а значит делает unregister() до завершения обработки события другими плагинами. Если после него другой listener отменит ломание, блок останется, а ATM уже исчезнет из реестра


atms.put(atm.id(), atm);
atmRepository.save(atm);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Здесь стоит поменять порядок: если по какой-либо причине не удастся сохранить банкомат в репозиторий, то в памяти он останется до перезагрузки

public void unregister(UUID atmId) {
atms.remove(atmId);
atmRepository.delete(atmId);
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

тот же момент, что выше

ItemStack coin = coinService.createCoin(amount);

player.getInventory().addItem(coin);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

есть coinService, который уже используется в предыдущей строке, и в нём есть addCoins, поэтому я бы использовал его

Comment thread src/main/resources/plugin.yml Outdated
description: 'A template plugin'
authors: ['EnderDissa', 'Stunnerer', 's4dnex']
authors: ['russlan_1esse']
contributors: ['technosimp']

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

технически, стоило добавить авторов шаблона хотя бы в контрибьютеры, но это поправим при создании репозитория, как и gradle инфу

@@ -0,0 +1,286 @@
package ru.joutak.template.gui;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

забыл поменять

@gafrus06 gafrus06 mentioned this pull request Sep 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

(Тестовое russlan_1esse) Economic

2 participants