Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Plugin properties
repo=https://github.com/JouTak/TemplatePlugin-Java
repo=https://github.com/gafrus06/TemplatePlugin-Java
group=ru.joutak
name=Template-Java
version=1.0.0
name=JoyBank
version=0.1.0

# Gradle properties
org.gradle.parallel=true
20 changes: 20 additions & 0 deletions resourcepack/JoyBankPack/assets/minecraft/items/gold_nugget.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"model": {
"type": "minecraft:range_dispatch",
"property": "minecraft:custom_model_data",
"index": 0,
"entries": [
{
"threshold": 1001.0,
"model": {
"type": "minecraft:model",
"model": "minecraft:item/joy_coin"
}
}
],
"fallback": {
"type": "minecraft:model",
"model": "minecraft:item/gold_nugget"
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "minecraft:item/joy_coin"
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 6 additions & 0 deletions resourcepack/JoyBankPack/pack.mcmeta
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"pack": {
"pack_format": 55,
"description": "JoyBank Resource Pack"
}
}
23 changes: 0 additions & 23 deletions src/main/java/ru/joutak/template/EmptyPlugin.java

This file was deleted.

90 changes: 90 additions & 0 deletions src/main/java/ru/joutak/template/JoyBankPlugin.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
package ru.joutak.template;

import lombok.Getter;
import org.bukkit.plugin.java.JavaPlugin;
import ru.joutak.template.atm.AtmService;
import ru.joutak.template.atm.listener.AtmMenuListener;
import ru.joutak.template.coin.CoinService;
import ru.joutak.template.command.JoyCommand;
import ru.joutak.template.bank.BankService;
import ru.joutak.template.storage.AccountRepository;
import ru.joutak.template.storage.YamlAccountRepository;
import ru.joutak.template.storage.AtmRepository;
import ru.joutak.template.storage.YamlAtmRepository;
import ru.joutak.template.atm.listener.AtmCreationListener;
import ru.joutak.template.gui.AtmMenu;
import ru.joutak.template.atm.listener.AtmProtectionListener;

import ru.joutak.template.atm.listener.AtmInteractionListener;

public final class JoyBankPlugin extends JavaPlugin {
@Getter
private static JoyBankPlugin instance;
private CoinService coinService;
private BankService bankService;
private AtmService atmService;
private AtmMenu atmMenu;

@Override
public void onEnable() {
instance = this;
coinService = new CoinService(this);
AccountRepository accountRepository =
new YamlAccountRepository(this);
bankService = new BankService(accountRepository);

AtmRepository atmRepository =
new YamlAtmRepository(this);

atmService =
new AtmService(atmRepository);

atmMenu = new AtmMenu(bankService);

getCommand("joy")
.setExecutor(
new JoyCommand(coinService, bankService)
);
getLogger().info(
String.format("Плагин %s версии %s включен!", getPluginMeta().getName(), getPluginMeta().getVersion())
);

getServer()
.getPluginManager()
.registerEvents(
new AtmCreationListener(atmService),
this
);
getServer()
.getPluginManager()
.registerEvents(
new AtmInteractionListener(
atmService,
atmMenu
),
this
);
getServer()
.getPluginManager()
.registerEvents(
new AtmMenuListener(
coinService,
bankService,
atmService,
atmMenu
),
this
);
getServer()
.getPluginManager()
.registerEvents(
new AtmProtectionListener(atmService),
this
);
}

@Override
public void onDisable() {

}
}
15 changes: 15 additions & 0 deletions src/main/java/ru/joutak/template/atm/Atm.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package ru.joutak.template.atm;

import java.util.UUID;

public record Atm(
UUID id,
UUID worldId,
int barrelX,
int barrelY,
int barrelZ,
int signX,
int signY,
int signZ
) {
}
102 changes: 102 additions & 0 deletions src/main/java/ru/joutak/template/atm/AtmService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
package ru.joutak.template.atm;

import org.bukkit.Location;
import org.bukkit.World;
import ru.joutak.template.storage.AtmRepository;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.UUID;

public class AtmService {

private final AtmRepository atmRepository;
private final Map<UUID, Atm> atms = new HashMap<>();

public AtmService(AtmRepository atmRepository) {
this.atmRepository = atmRepository;

for (Atm atm : atmRepository.findAll()) {
atms.put(atm.id(), atm);
}
}

public Atm register(
Location barrelLocation,
Location signLocation
) {
Atm atm = new Atm(
UUID.randomUUID(),
barrelLocation.getWorld().getUID(),

barrelLocation.getBlockX(),
barrelLocation.getBlockY(),
barrelLocation.getBlockZ(),

signLocation.getBlockX(),
signLocation.getBlockY(),
signLocation.getBlockZ()
);
atmRepository.save(atm);
atms.put(atm.id(), 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.

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

return atm;
}

public Optional<Atm> findByBlock(Location location) {
World world = location.getWorld();

if (world == null) {
return Optional.empty();
}

for (Atm atm : atms.values()) {

if (!atm.worldId().equals(world.getUID())) {
continue;
}

int x = location.getBlockX();
int y = location.getBlockY();
int z = location.getBlockZ();

boolean isBarrel =
x == atm.barrelX()
&& y == atm.barrelY()
&& z == atm.barrelZ();

boolean isSign =
x == atm.signX()
&& y == atm.signY()
&& z == atm.signZ();

boolean isBase =
x == atm.barrelX()
&& y == atm.barrelY() - 1
&& z == atm.barrelZ();

if (isBarrel || isSign || isBase) {
return Optional.of(atm);
}
}

return Optional.empty();
}

public Collection<Atm> getAll() {
return atms.values();
}

public void unregister(UUID atmId) {

atmRepository.delete(atmId);
atms.remove(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.

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

public Optional<Atm> findById(UUID atmId) {
return Optional.ofNullable(
atms.get(atmId)
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
package ru.joutak.template.atm.listener;

import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.data.BlockData;
import org.bukkit.block.data.type.WallSign;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.SignChangeEvent;
import ru.joutak.template.atm.AtmService;

public class AtmCreationListener implements Listener {

private final AtmService atmService;

public AtmCreationListener(AtmService atmService) {
this.atmService = atmService;
}

@EventHandler
public void onSignChange(SignChangeEvent event) {

String firstLine = event.getLine(0);

if (firstLine == null
|| !firstLine.equalsIgnoreCase("[joybank]")) {
return;
}

if (!event.getPlayer()
.hasPermission("joybank.atm.create")) {

event.getPlayer().sendMessage(
"У вас нет прав на создание банкомата."
);

return;
}

Block signBlock = event.getBlock();

BlockData blockData = signBlock.getBlockData();

if (!(blockData instanceof WallSign wallSign)) {
event.getPlayer().sendMessage(
"Табличка должна быть прикреплена к боку бочки."
);
return;
}

Block barrel = signBlock.getRelative(
wallSign.getFacing().getOppositeFace()
);

if (barrel.getType() != Material.BARREL) {
event.getPlayer().sendMessage(
"Табличка должна быть прикреплена к бочке."
);
return;
}

Block base = barrel.getRelative(0, -1, 0);

if (base.getType() != Material.IRON_BLOCK) {
event.getPlayer().sendMessage(
"Под бочкой должен находиться железный блок."
);
return;
}

if (atmService.findByBlock(barrel.getLocation()).isPresent()) {
event.getPlayer().sendMessage(
"Этот банкомат уже зарегистрирован."
);
return;
}

atmService.register(
barrel.getLocation(),
signBlock.getLocation()
);

event.setLine(0, "JOY BANK");
event.setLine(1, "Банкомат");
event.setLine(2, "");
event.setLine(3, "");

event.getPlayer().sendMessage(
"Банкомат успешно зарегистрирован."
);
}
}
Loading
Loading