Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
- import com.gmail.nossr50.events.experience.McMMOPlayerXpGainEvent;
- import com.gmail.nossr50.util.player.UserManager;
- import org.bukkit.Bukkit;
- import org.bukkit.Material;
- import org.bukkit.command.Command;
- import org.bukkit.command.CommandExecutor;
- import org.bukkit.command.CommandSender;
- import org.bukkit.command.PluginCommand;
- import org.bukkit.enchantments.Enchantment;
- import org.bukkit.entity.Player;
- import org.bukkit.event.Event;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.Listener;
- import org.bukkit.event.entity.EntityShootBowEvent;
- import org.bukkit.event.inventory.InventoryClickEvent;
- import org.bukkit.event.player.PlayerJoinEvent;
- import org.bukkit.inventory.Inventory;
- import org.bukkit.inventory.ItemStack;
- import org.bukkit.inventory.meta.ItemMeta;
- import org.bukkit.plugin.java.JavaPlugin;
- import org.jetbrains.annotations.NotNull;
- import java.util.HashMap;
- import java.util.UUID;
- @SuppressWarnings("unused")
- class Plugin extends JavaPlugin {
- public static PlayerManager playerManager;
- @Override
- public void onEnable() {
- PluginCommand mainCmd = getCommand("class");
- mainCmd.setExecutor(new PretendThisIsACommand());
- playerManager = new PlayerManager();
- getServer().getPluginManager().registerEvents(new SomeListener(), this);
- }
- }
- class PretendThisIsACommand implements CommandExecutor {
- @Override
- public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
- if (!(sender instanceof Player))
- return true;
- Player player = (Player) sender;
- if (Plugin.playerManager.playerIsSet(player)) {
- player.sendMessage("You have already set your class");
- return true;
- }
- String input = args[0].toUpperCase();
- try {
- Class targetClass = Class.valueOf(input);
- Plugin.playerManager.setPlayersClass(player, targetClass);
- } catch (IllegalArgumentException ex) {
- sender.sendMessage("Not a class name");
- }
- return true;
- }
- }
- class SomeListener implements Listener {
- public SomeListener() {
- classPickGui = new ClassPickGui();
- }
- ClassPickGui classPickGui;
- @EventHandler
- void join(PlayerJoinEvent event) {
- if (!event.getPlayer().hasPlayedBefore()) {
- classPickGui.show(event.getPlayer());
- }
- }
- @EventHandler
- void click(InventoryClickEvent event) {
- classPickGui.click(event);
- }
- @EventHandler
- void Damage(EntityShootBowEvent event) {
- if (!(event.getEntity() instanceof Player)) return;
- Player player = (Player) event.getEntity();
- Class targetClass = Plugin.playerManager.getPlayersClass(player);
- if (targetClass == null) {
- player.sendMessage("You must choose a class before shooting");
- event.setCancelled(true);
- return;
- }
- if (event.getBow().getEnchantmentLevel(Enchantment.DAMAGE_ALL) > targetClass.powerMax) {
- player.sendMessage("This bow is too powerful for you to use");
- event.setCancelled(true);
- }
- }
- @EventHandler
- void playerGain(McMMOPlayerXpGainEvent event) {
- Player player = event.getPlayer();
- Class targetClass = Plugin.playerManager.getPlayersClass(player);
- if (targetClass == null) {
- player.sendMessage("You must choose a class before levelling mcmmo");
- return;
- }
- switch (event.getSkill()) {
- case SWORDS: {
- if (targetClass.swordMax >= UserManager.getPlayer(player).getSkillLevel(PrimarySkillType.SWORDS)) {
- player.sendMessage("You class does not allow your skill to go beyond this level");
- event.setCancelled(true);
- return;
- }
- break;
- }
- default:
- // idk do the rest of you checks
- }
- }
- }
- class PlayerManager {
- private HashMap<UUID, Class> players = new HashMap<>();
- Class getPlayersClass(Player player) {
- return players.getOrDefault(player.getUniqueId(), null);
- }
- void setPlayersClass(Player player, Class targetClass) {
- players.put(player.getUniqueId(), targetClass);
- }
- boolean playerIsSet(Player player) {
- return players.containsKey(player.getUniqueId());
- }
- }
- class ClassPickGui {
- private Inventory inventory;
- private HashMap<Integer, Class> placements;
- public ClassPickGui() {
- inventory = Bukkit.createInventory(null, 36, "Pick your class");
- placements = new HashMap<>();
- Class[] values = Class.values();
- for (int i = 0; i < values.length; i++) {
- Class target = values[i];
- placements.put(i, target);
- ItemStack item = new ItemStack(target.icon, 1);
- ItemMeta meta = item.getItemMeta();
- meta.setDisplayName(target.name());
- item.setItemMeta(meta);
- inventory.setItem(i, item);
- }
- }
- void show(Player player) {
- player.openInventory(inventory);
- }
- void click(InventoryClickEvent event) {
- if (event.getClickedInventory() != inventory) return;
- Class target = placements.getOrDefault(event.getSlot(), null);
- if (target != null) {
- Player player = (Player) event.getWhoClicked();
- event.setCancelled(true);
- Plugin.playerManager.setPlayersClass((Player) event.getWhoClicked(), target);
- player.closeInventory();
- }
- }
- }
- enum Class {
- WARRIOR(1000, 1, Material.DIAMOND_SWORD), RANGER(500, 3, Material.BOW);
- int swordMax;
- int powerMax;
- Material icon;
- Class(int swordMax, int powerMax, Material icon) {
- this.swordMax = swordMax;
- this.powerMax = powerMax;
- this.icon = icon;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement