Skip to content
Draft
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
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ public ItemMenuBuilder(Menu itemMenu, ItemStack item, Consumer<ItemMeta> itemMet
* modification of properties such as the display name, lore, enchantments, and more.
*/
public ItemMenuBuilder(Menu itemMenu, CustomItem customitem, Consumer<ItemMeta> itemMeta) {
super(customitem.getBest());
super(customitem.getBest(), itemMeta);
this.itemMenu = itemMenu;
}

Expand Down
4 changes: 3 additions & 1 deletion src/main/java/fr/openmc/core/OMCPlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import fr.openmc.core.features.displays.holograms.HologramLoader;
import fr.openmc.core.features.displays.scoreboards.ScoreboardManager;
import fr.openmc.core.features.dream.DreamManager;
import fr.openmc.core.features.dungeons.DungeonsManager;
import fr.openmc.core.features.economy.BankManager;
import fr.openmc.core.features.economy.EconomyManager;
import fr.openmc.core.features.economy.TransactionsManager;
Expand Down Expand Up @@ -114,7 +115,8 @@ public class OMCPlugin extends JavaPlugin {
new LeaderboardManager(),
new MainMenu(),
new HologramLoader(),
new HomeIconCacheManager()
new HomeIconCacheManager(),
new DungeonsManager()
));

// ** Registry of OMC Plugin Hooks
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package fr.openmc.core.features.dungeons;

import org.bukkit.entity.Player;
import revxrsal.commands.annotation.Command;
import revxrsal.commands.annotation.CommandPlaceholder;

@Command({"keyvault", "kv", "vault", "keys"})
public class DungeonsCommand {
@CommandPlaceholder
public void dungeonsCommands(Player player) {
new DungeonsMenu(player).open();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package fr.openmc.core.features.dungeons;

import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.dao.DaoManager;
import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.table.TableUtils;
import fr.openmc.core.bootstrap.features.Feature;
import fr.openmc.core.bootstrap.features.types.DatabaseFeature;
import fr.openmc.core.bootstrap.features.types.HasCommands;
import fr.openmc.core.bootstrap.integration.OMCLogger;
import fr.openmc.core.features.dungeons.db.DBKeyVault;
import lombok.Getter;

import java.sql.SQLException;
import java.util.*;

public class DungeonsManager extends Feature implements DatabaseFeature, HasCommands {

@Getter
public static Map<UUID, List<DBKeyVault>> dataKeyVault = new HashMap<>();
private static Dao<DBKeyVault, String> keyVaultDao;

@Override
public void init() {



}



@Override
public void initDB(ConnectionSource connectionSource) throws SQLException {

TableUtils.createTableIfNotExists(connectionSource, DBKeyVault.class);
keyVaultDao = DaoManager.createDao(connectionSource, DBKeyVault.class);

}

public static void loadKeyVaultPlayerData() {
try {
keyVaultDao.queryForAll().forEach(keyVault -> dataKeyVault.computeIfAbsent(keyVault.getPlayerUUID(), l->
new ArrayList<>()
).add(keyVault));
} catch (SQLException e) {
throw new RuntimeException(e);
}
}

/**
* Sauvegarde les données des joueurs (points, camp, etc.) dans la DB.
*/
public static void saveKeyVaultPlayerData() {
OMCLogger.info("Saving Key vault data...");
dataKeyVault.forEach((player, data) -> {
data.forEach(keyVault -> {
try {
keyVaultDao.createOrUpdate(keyVault);
} catch (SQLException e) {
OMCLogger.error("Cannot register key vault : ", e);
}
});
});
OMCLogger.info("Key vault data saved successfully.");
}

@Override
public Set<Object> getCommands() {
return Set.of(new DungeonsCommand());
}
}
131 changes: 131 additions & 0 deletions src/main/java/fr/openmc/core/features/dungeons/DungeonsMenu.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
package fr.openmc.core.features.dungeons;

import com.mojang.brigadier.Message;
import fr.openmc.api.menulib.Menu;
import fr.openmc.api.menulib.utils.InventorySize;
import fr.openmc.api.menulib.utils.ItemMenuBuilder;
import fr.openmc.core.OMCRegistry;
import fr.openmc.core.features.dungeons.db.DBKeyVault;
import fr.openmc.core.features.dungeons.registry.items.Key;
import fr.openmc.core.registry.items.CustomItem;
import fr.openmc.core.utils.bukkit.ItemUtils;
import fr.openmc.core.utils.text.messages.MessageType;
import fr.openmc.core.utils.text.messages.MessagesManager;
import fr.openmc.core.utils.text.messages.Prefix;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.format.TextDecoration;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;

public class DungeonsMenu extends Menu {

private final List<DBKeyVault> playerKeyVaults;

protected DungeonsMenu(Player owner) {
super(owner);
playerKeyVaults = DungeonsManager.getDataKeyVault().get(owner.getUniqueId());
}

@Override
public @NotNull Component getName() {
return Component.text("Dungeon Vault");
}

@Override
public String getTexture() {
return "";
}

@Override
public @NotNull InventorySize getInventorySize() {
return InventorySize.LARGEST;
}

@Override
public void onInventoryClick(InventoryClickEvent e) {

}

@Override
public void onClose(InventoryCloseEvent event) {

}

@Override
public @NotNull Map<Integer, ItemMenuBuilder> getContent() {
Map <Integer, ItemMenuBuilder> map = new HashMap<>();

for (int i = 1; i <= 4; i++) {
final int level = i;
for (Rarity rarity : Rarity.values()) {
if (rarity == Rarity.ABSOLUTE_MASTER) continue;
Key key = (Key) OMCRegistry.CUSTOM_ITEMS.getOrThrow("omc_dungeons:key_level_" + i + "_" + rarity.name().toLowerCase());
map.put(2 * i + rarity.ordinal() * 9 - 1, new ItemMenuBuilder(this, key.getBest(), itemMeta -> {
itemMeta.lore(List.of(
Component.text("§fLevel " + level),
Component.text(rarity.getName()).color(rarity.getColor()).decoration(TextDecoration.ITALIC, TextDecoration.State.FALSE).decorate(TextDecoration.BOLD)
));

}).setOnClick(keyOnClick(key)));


}
}

map.put(45, new ItemMenuBuilder(this, Material.SMITHING_TABLE, itemMeta -> {
itemMeta.displayName(Component.text("Collisionneur de Hadrons"));
itemMeta.lore(List.of(
Component.text("Permet de fusionner deux clé de niveau identique pour obtenir une clé de rareté supérieure."),
Component.text("Fusionnez deux exemplaires de chaque clé de niveau Maître pour obtenir la clé de Maître Absolu.")
));
}));

map.put(49, new ItemMenuBuilder(this, OMCRegistry.CUSTOM_ITEMS.KEY_L5_R6.getBest(), itemMeta -> {
itemMeta.lore(List.of(
Component.text(Rarity.ABSOLUTE_MASTER.getName()).color(Rarity.ABSOLUTE_MASTER.getColor()).decoration(TextDecoration.ITALIC, TextDecoration.State.FALSE).decorate(TextDecoration.BOLD)
));
}).setOnClick(keyOnClick((Key) OMCRegistry.CUSTOM_ITEMS.KEY_L5_R6)));

return map;
}

@Override
public List<Integer> getTakableSlot() {
return List.of();
}

private Consumer<InventoryClickEvent> keyOnClick(Key key) {
return event -> {

if (event.isLeftClick()) {
if (ItemUtils.hasEnoughItems(getOwner(), key.getBest(), 1)) {
MessagesManager.sendMessage(getOwner(), Component.text("Vous ne possédez pas assez de cet item"), Prefix.DUNGEONS, MessageType.ERROR, true);
return;
};

Check warning on line 114 in src/main/java/fr/openmc/core/features/dungeons/DungeonsMenu.java

View check run for this annotation

codefactor.io / CodeFactor

src/main/java/fr/openmc/core/features/dungeons/DungeonsMenu.java#L114

Empty statement. (com.puppycrawl.tools.checkstyle.checks.coding.EmptyStatementCheck)
ItemUtils.removeItemsFromInventory(getOwner(), key.getBest(), 1);
} else if (event.isRightClick()) {
if (!ItemUtils.hasEnoughItems(getOwner(), key.getBest(), 1)) {
MessagesManager.sendMessage(getOwner(), Component.text("Vous n'avez pas assez de de cet item dans votre vault"), Prefix.DUNGEONS, MessageType.ERROR, true);
return;
}
if (!ItemUtils.hasEnoughSpace(getOwner(), key.getBest())) {
MessagesManager.sendMessage(getOwner(), Component.text("Vous n'avez pas assez de place dans votre inventaire."), Prefix.DUNGEONS, MessageType.ERROR, true);
return;
}

}
};

};

}
23 changes: 23 additions & 0 deletions src/main/java/fr/openmc/core/features/dungeons/Rarity.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package fr.openmc.core.features.dungeons;

import lombok.Getter;
import net.kyori.adventure.text.format.NamedTextColor;

@Getter
public enum Rarity {
COMMON("COMMUN", NamedTextColor.GREEN),
RARE("RARE", NamedTextColor.BLUE),
EPIC("ÉPIQUE", NamedTextColor.DARK_PURPLE),
LEGENDARY("LÉGENDAIRE", NamedTextColor.GOLD),
MASTER("MAÎTRE", NamedTextColor.RED),
ABSOLUTE_MASTER("GRAND MAÎTRE" ,NamedTextColor.LIGHT_PURPLE);

private String name;
private NamedTextColor color;


Rarity(String name, NamedTextColor color) {
this.name = name;
this.color = color;
}
}
44 changes: 44 additions & 0 deletions src/main/java/fr/openmc/core/features/dungeons/db/DBKeyVault.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package fr.openmc.core.features.dungeons.db;

import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
import com.sun.jna.WString;
import fr.openmc.core.features.dungeons.Rarity;
import lombok.Getter;

import java.util.UUID;

@DatabaseTable(tableName = "db_key_vault")
@Getter
public class DBKeyVault {
@DatabaseField(columnName = "player_uuid")
private UUID playerUUID;

@DatabaseField(columnName = "key_level")
private int keyLevel;

@DatabaseField(columnName = "rarity_key")
private String rarityKeyStr;

@DatabaseField(columnName = "key_number")
private int keyNumber;

private Rarity rarity;

DBKeyVault() {

}

public DBKeyVault(UUID playerUUID, int keyLevel, int keyNumber, Rarity rarity) {
this.playerUUID = playerUUID;
this.keyLevel = keyLevel;
this.keyNumber = keyNumber;
this.rarity = rarity;
}

public DBKeyVault serialize() {
this.rarityKeyStr = rarity.name();
return this;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package fr.openmc.core.features.dungeons.registry.items;

import fr.openmc.core.features.dungeons.Rarity;
import fr.openmc.core.registry.items.CustomItem;
import fr.openmc.core.registry.items.CustomItemMeta;
import lombok.Getter;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;

@Getter
public class Key extends CustomItem {

private final int level;
private final Rarity rarity;


public Key(int level, Rarity rarity) {
super("omc_dungeons:key_level_" + level + "_" + rarity.name().toLowerCase());
this.level = level;
this.rarity = rarity;
}

@Override
public ItemStack getVanilla() {
return new ItemStack(Material.TRIPWIRE_HOOK);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import fr.openmc.core.CommandsManager;
import fr.openmc.core.bootstrap.registries.KeyedRegistry;
import fr.openmc.core.bootstrap.registries.Registry;
import fr.openmc.core.features.dungeons.Rarity;
import fr.openmc.core.features.dungeons.registry.items.*;
import fr.openmc.core.hooks.itemsadder.ItemsAdderHook;
import fr.openmc.core.registry.items.contents.AywenCap;
import fr.openmc.core.registry.items.contents.Hammer;
Expand Down Expand Up @@ -86,6 +88,33 @@ public class CustomItemRegistry extends Registry<String, CustomItem> implements
public final CustomItem DIAMOND_HAMMER = register(new Hammer("omc_items:diamond_hammer", Material.DIAMOND_PICKAXE, 1, 1));
public final CustomItem NETHERITE_HAMMER = register(new Hammer("omc_items:netherite_hammer", Material.NETHERITE_PICKAXE, 1, 2));

/* DUNGEONS */
public final CustomItem KEY_L1_R1 = register (new Key(1, Rarity.COMMON));
public final CustomItem KEY_L1_R2 = register (new Key(1, Rarity.RARE));
public final CustomItem KEY_L1_R3 = register (new Key(1, Rarity.EPIC));
public final CustomItem KEY_L1_R4 = register (new Key(1, Rarity.LEGENDARY));
public final CustomItem KEY_L1_R5 = register (new Key(1, Rarity.MASTER));

public final CustomItem KEY_L2_R1 = register (new Key(2, Rarity.COMMON));
public final CustomItem KEY_L2_R2 = register (new Key(2, Rarity.RARE));
public final CustomItem KEY_L2_R3 = register (new Key(2, Rarity.EPIC));
public final CustomItem KEY_L2_R4 = register (new Key(2, Rarity.LEGENDARY));
public final CustomItem KEY_L2_R5 = register (new Key(2, Rarity.MASTER));

public final CustomItem KEY_L3_R1 = register (new Key(3, Rarity.COMMON));
public final CustomItem KEY_L3_R2 = register (new Key(3, Rarity.RARE));
public final CustomItem KEY_L3_R3 = register (new Key(3, Rarity.EPIC));
public final CustomItem KEY_L3_R4 = register (new Key(3, Rarity.LEGENDARY));
public final CustomItem KEY_L3_R5 = register (new Key(3, Rarity.MASTER));

public final CustomItem KEY_L4_R1 = register (new Key(4, Rarity.COMMON));
public final CustomItem KEY_L4_R2 = register (new Key(4, Rarity.RARE));
public final CustomItem KEY_L4_R3 = register (new Key(4, Rarity.EPIC));
public final CustomItem KEY_L4_R4 = register (new Key(4, Rarity.LEGENDARY));
public final CustomItem KEY_L4_R5 = register (new Key(4, Rarity.MASTER));

public final CustomItem KEY_L5_R6 = register (new Key(5, Rarity.ABSOLUTE_MASTER));

@Override
public void postInit() {
CommandsManager.getHandler().register(new CustomItemsDebugCommand());
Expand Down
Loading