Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package ru.lisenochek.mcrust.objects.blockMechanic;
- import org.bukkit.Bukkit;
- import org.bukkit.ChatColor;
- import org.bukkit.Material;
- import org.bukkit.entity.Player;
- import org.bukkit.inventory.Inventory;
- import org.bukkit.inventory.ItemStack;
- import ru.lisenochek.mcrust.objects.misc.CustomBlock;
- import ru.lisenochek.mcrust.objects.misc.Sounds;
- import ru.lisenochek.mcrust.utils.ISBuilder;
- import ru.lisenochek.mcrust.utils.Utils;
- import java.util.Arrays;
- import java.util.Collections;
- import java.util.List;
- public class Constructions {
- private Buildings buildings;
- private Type type;
- private Constructions(Buildings buildings, Type type) {
- this.buildings = buildings;
- this.type = type;
- }
- public static Constructions getConstuction(Buildings buildings) {
- Type type = null;
- for (Constructions.Type types : Constructions.Type.values()) {
- if (types.getBlockType() != buildings.getType()) continue;
- type = types;
- break;
- }
- return type == null ? null : new Constructions(buildings, type);
- }
- public void openUpgradeGUI(Player player) {
- Inventory inventory = Bukkit.createInventory(null, 45, Utils.stripColor("&2&lУлучшение конструкции"));
- inventory.setItem(13, Type.WOOD.getUpgradeStack(buildings, type, player));
- inventory.setItem(23, Type.STONE.getUpgradeStack(buildings, type, player));
- inventory.setItem(31, Type.METAL.getUpgradeStack(buildings, type, player));
- inventory.setItem(22, type.getRepairStack(buildings, player));
- inventory.setItem(21, ISBuilder.getBuilder(Material.BARRIER, 0, 1, "&a&l» &c&lСломать",
- "",
- "&7Конструкция будет &aразрушена&7. Ресурсы",
- "&7возвращены не будут",
- "",
- "&aНажмите&7, чтобы разрушить конструкцию"
- ).setTag("location", Utils.serialiseLocation(buildings.getLocation())).getStack()
- );
- inventory.setItem(25, buildings.getDecayTime() == -1
- ?
- ISBuilder.getBuilder(Material.BOOK, 0, 1, "&a&l» &e&lИнформация",
- "",
- "&7&l&nПрочность&7&l » &a&l" + buildings.getHealth() + "&7&l/&a&l" + buildings.getType().getMaxHealth(),
- "",
- "&7- Если прочность будет равна &a0&7, то конструкция",
- "&aсломается"
- ).getStack()
- :
- ISBuilder.getBuilder(Material.BOOK, 0, 1, "&a&l» &e&lИнформация",
- "",
- "&7&l&nПрочность&7&l » &a&l" + buildings.getHealth() + "&7&l/&a&l" + buildings.getType().getMaxHealth(),
- "",
- "&7- Если прочность будет равна &a0&7, то конструкция",
- "&aсломается",
- "",
- "&7&l&nЗадержка перед гниением&7&l » &a&l" + Utils.getTimeFormat(buildings.getBlockDecayTime()),
- "",
- "&7- Задержка, в течение которого конструкция &aне &7гниет.",
- "&7Сбрасывается, если конструкция в &aзоне &7шкафа",
- "",
- "&7&l&nВремя гниения&7&l » &a&l" + Utils.getTimeFormat(buildings.getDecayTime()),
- "",
- "&7- Время, по &aистечении &7которого конструкция потеряет",
- "&a1 &7единицу прочности"
- ).getStack()
- );
- for (int freeSlot = 0; freeSlot < inventory.getSize(); freeSlot++) if (inventory.getItem(freeSlot) == null) inventory.setItem(freeSlot, ISBuilder.getBuilder(Material.STAINED_GLASS_PANE, 0, 1, " ").getStack());
- player.openInventory(inventory);
- }
- public enum Type {
- HAY(CustomBlock.Type.HAY_CONSTRUCTION),
- WOOD("&a&l» &e&lУлучшить в дерево",
- CustomBlock.Type.WOODEN_CONSTRUCTION,
- Sounds.UPGRADE_WOOD_1.getSoundName(),
- Sounds.UPGRADE_WOOD_2.getSoundName()
- ),
- STONE("&a&l» &e&lУлучшить в камень",
- CustomBlock.Type.STONE_CONSTRUCTION,
- Sounds.UPGRADE_STONE_1.getSoundName(),
- Sounds.UPGRADE_STONE_2.getSoundName()
- ),
- METAL("&a&l» &e&lУлучшить в металл",
- CustomBlock.Type.METAL_CONSTRUCTION,
- Sounds.UPGRADE_METAL_1.getSoundName(),
- Sounds.UPGRADE_METAL_2.getSoundName()
- );
- private String displayName;
- private CustomBlock.Type blockType;
- private String[] soundUpgrade;
- Type(CustomBlock.Type blockType) {
- this.blockType = blockType;
- }
- Type(String displayName, CustomBlock.Type blockType, String... soundUpgrade) {
- this.displayName = displayName;
- this.blockType = blockType;
- this.soundUpgrade = soundUpgrade;
- }
- public CustomBlock.Type getBlockType() {
- return blockType;
- }
- public String[] getSoundUpgrade() {
- return soundUpgrade;
- }
- public ItemStack getUpgradeStack(Buildings buildings, Type currectType, Player player) {
- List<Type> list;
- switch (currectType) {
- case HAY: {
- list = Arrays.asList(WOOD, STONE, METAL);
- break;
- }
- case WOOD: {
- list = Arrays.asList(STONE, METAL);
- break;
- }
- case STONE: {
- list = Collections.singletonList(METAL);
- break;
- }
- default: {
- list = Collections.emptyList();
- break;
- }
- }
- if (!list.contains(this)) return ISBuilder.getBuilder(blockType.getMaterialData().getItemType(), blockType.getMaterialData().getData(), 1, "&a&l» &c&lУже улучшено").getStack();
- int resourceAmount = Utils.getStacksAmount(player, blockType.getResourceStack());
- ISBuilder builder = ISBuilder.getBuilder(blockType.getMaterialData().getItemType(), blockType.getMaterialData().getData(), 1, displayName,
- "",
- "&7&l&nДля улучшения нужны ресурсы&7&l:",
- "",
- "&7- " + ChatColor.stripColor(blockType.getResourceStack().getItemMeta().getDisplayName().toLowerCase()) + " (" + (resourceAmount >= 2 ? "&a" : "&c") + 2 + "&7) - " + (resourceAmount < 2 ? "не хватает - &c" + (2 - resourceAmount) : "у вас - &a" + resourceAmount)
- );
- return (resourceAmount < 2
- ?
- builder.addLore(
- "",
- "&cНедостаточно &7ресурсов для улучшения"
- )
- :
- builder.addLore(
- "",
- "&aНажмите&7, чтобы улучшить конструкцию"
- ).setTag("location", Utils.serialiseLocation(buildings.getLocation())).setTag("upgradeType", name())
- ).getStack();
- }
- public ItemStack getRepairStack(Buildings buildings, Player player) {
- if (buildings.getHealth() == buildings.getType().getMaxHealth()) return ISBuilder.getBuilder(Material.WOOD_SPADE, 0, 1, "&a&l» &c&lКонструкция целая").hideFlags().getStack();
- int resourceAmount = Utils.getStacksAmount(player, buildings.getType().getResourceStack());
- int repairCost = buildings.getRepairCost(player);
- ISBuilder builder = ISBuilder.getBuilder(Material.WOOD_SPADE, 0, 1, "&a&l» &e&lОтремонтировать",
- "",
- "&7&l&nДля ремонта нужны ресурсы&7&l:",
- "",
- "&7- " + ChatColor.stripColor(buildings.getType().getResourceStack().getItemMeta().getDisplayName().toLowerCase()) + " (" + (resourceAmount >= repairCost ? "&a" : "&c") + repairCost + "&7) - " + (resourceAmount < repairCost ? "не хватает - &c" + (repairCost - resourceAmount) : "у вас - &a" + resourceAmount)
- );
- return (resourceAmount < repairCost
- ?
- builder.addLore(
- "",
- "&cНедостаточно &7ресурсов для починки"
- ).hideFlags()
- :
- builder.addLore(
- "",
- "&aНажмите&7, чтобы починить конструкцию"
- ).hideFlags().setTag("location", Utils.serialiseLocation(buildings.getLocation())).setTag("repairCost", repairCost)
- ).getStack();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement