Advertisement
Guest User

Untitled

a guest
Feb 25th, 2020
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.10 KB | None | 0 0
  1. import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
  2. import com.gmail.nossr50.events.experience.McMMOPlayerXpGainEvent;
  3. import com.gmail.nossr50.util.player.UserManager;
  4. import org.bukkit.Bukkit;
  5. import org.bukkit.Material;
  6. import org.bukkit.command.Command;
  7. import org.bukkit.command.CommandExecutor;
  8. import org.bukkit.command.CommandSender;
  9. import org.bukkit.command.PluginCommand;
  10. import org.bukkit.enchantments.Enchantment;
  11. import org.bukkit.entity.Player;
  12. import org.bukkit.event.Event;
  13. import org.bukkit.event.EventHandler;
  14. import org.bukkit.event.Listener;
  15. import org.bukkit.event.entity.EntityShootBowEvent;
  16. import org.bukkit.event.inventory.InventoryClickEvent;
  17. import org.bukkit.event.player.PlayerJoinEvent;
  18. import org.bukkit.inventory.Inventory;
  19. import org.bukkit.inventory.ItemStack;
  20. import org.bukkit.inventory.meta.ItemMeta;
  21. import org.bukkit.plugin.java.JavaPlugin;
  22. import org.jetbrains.annotations.NotNull;
  23.  
  24. import java.util.HashMap;
  25. import java.util.UUID;
  26.  
  27. @SuppressWarnings("unused")
  28. class Plugin extends JavaPlugin {
  29.     public static PlayerManager playerManager;
  30.  
  31.     @Override
  32.     public void onEnable() {
  33.         PluginCommand mainCmd = getCommand("class");
  34.         mainCmd.setExecutor(new PretendThisIsACommand());
  35.  
  36.         playerManager = new PlayerManager();
  37.  
  38.         getServer().getPluginManager().registerEvents(new SomeListener(), this);
  39.     }
  40. }
  41.  
  42. class PretendThisIsACommand implements CommandExecutor {
  43.  
  44.     @Override
  45.     public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
  46.         if (!(sender instanceof Player))
  47.             return true;
  48.  
  49.         Player player = (Player) sender;
  50.  
  51.         if (Plugin.playerManager.playerIsSet(player)) {
  52.             player.sendMessage("You have already set your class");
  53.             return true;
  54.         }
  55.  
  56.         String input = args[0].toUpperCase();
  57.  
  58.         try {
  59.             Class targetClass = Class.valueOf(input);
  60.             Plugin.playerManager.setPlayersClass(player, targetClass);
  61.         } catch (IllegalArgumentException ex) {
  62.             sender.sendMessage("Not a class name");
  63.         }
  64.  
  65.         return true;
  66.     }
  67. }
  68.  
  69. class SomeListener implements Listener {
  70.     public SomeListener() {
  71.         classPickGui = new ClassPickGui();
  72.     }
  73.  
  74.     ClassPickGui classPickGui;
  75.  
  76.     @EventHandler
  77.     void join(PlayerJoinEvent event) {
  78.         if (!event.getPlayer().hasPlayedBefore()) {
  79.             classPickGui.show(event.getPlayer());
  80.         }
  81.     }
  82.  
  83.     @EventHandler
  84.     void click(InventoryClickEvent event) {
  85.         classPickGui.click(event);
  86.     }
  87.  
  88.     @EventHandler
  89.     void Damage(EntityShootBowEvent event) {
  90.         if (!(event.getEntity() instanceof Player)) return;
  91.  
  92.         Player player = (Player) event.getEntity();
  93.         Class targetClass = Plugin.playerManager.getPlayersClass(player);
  94.  
  95.         if (targetClass == null) {
  96.             player.sendMessage("You must choose a class before shooting");
  97.             event.setCancelled(true);
  98.             return;
  99.         }
  100.  
  101.         if (event.getBow().getEnchantmentLevel(Enchantment.DAMAGE_ALL) > targetClass.powerMax) {
  102.             player.sendMessage("This bow is too powerful for you to use");
  103.             event.setCancelled(true);
  104.         }
  105.     }
  106.  
  107.     @EventHandler
  108.     void playerGain(McMMOPlayerXpGainEvent event) {
  109.         Player player = event.getPlayer();
  110.         Class targetClass = Plugin.playerManager.getPlayersClass(player);
  111.  
  112.         if (targetClass == null) {
  113.             player.sendMessage("You must choose a class before levelling mcmmo");
  114.             return;
  115.         }
  116.  
  117.         switch (event.getSkill()) {
  118.             case SWORDS: {
  119.                 if (targetClass.swordMax >= UserManager.getPlayer(player).getSkillLevel(PrimarySkillType.SWORDS)) {
  120.                     player.sendMessage("You class does not allow your skill to go beyond this level");
  121.                     event.setCancelled(true);
  122.                     return;
  123.                 }
  124.                 break;
  125.             }
  126.  
  127.             default:
  128.                 // idk do the rest of you checks
  129.         }
  130.     }
  131. }
  132.  
  133. class PlayerManager {
  134.     private HashMap<UUID, Class> players = new HashMap<>();
  135.  
  136.     Class getPlayersClass(Player player) {
  137.         return players.getOrDefault(player.getUniqueId(), null);
  138.     }
  139.  
  140.     void setPlayersClass(Player player, Class targetClass) {
  141.         players.put(player.getUniqueId(), targetClass);
  142.     }
  143.  
  144.     boolean playerIsSet(Player player) {
  145.         return players.containsKey(player.getUniqueId());
  146.     }
  147. }
  148.  
  149. class ClassPickGui {
  150.     private Inventory inventory;
  151.     private HashMap<Integer, Class> placements;
  152.  
  153.     public ClassPickGui() {
  154.         inventory = Bukkit.createInventory(null, 36, "Pick your class");
  155.         placements = new HashMap<>();
  156.  
  157.         Class[] values = Class.values();
  158.  
  159.         for (int i = 0; i < values.length; i++) {
  160.             Class target = values[i];
  161.  
  162.             placements.put(i, target);
  163.  
  164.             ItemStack item = new ItemStack(target.icon, 1);
  165.             ItemMeta meta = item.getItemMeta();
  166.  
  167.             meta.setDisplayName(target.name());
  168.             item.setItemMeta(meta);
  169.  
  170.             inventory.setItem(i, item);
  171.         }
  172.     }
  173.  
  174.     void show(Player player) {
  175.         player.openInventory(inventory);
  176.     }
  177.  
  178.     void click(InventoryClickEvent event) {
  179.         if (event.getClickedInventory() != inventory) return;
  180.  
  181.         Class target = placements.getOrDefault(event.getSlot(), null);
  182.  
  183.         if (target != null) {
  184.             Player player = (Player) event.getWhoClicked();
  185.             event.setCancelled(true);
  186.  
  187.             Plugin.playerManager.setPlayersClass((Player) event.getWhoClicked(), target);
  188.             player.closeInventory();
  189.         }
  190.     }
  191. }
  192.  
  193. enum Class {
  194.     WARRIOR(1000, 1, Material.DIAMOND_SWORD), RANGER(500, 3, Material.BOW);
  195.  
  196.     int swordMax;
  197.     int powerMax;
  198.     Material icon;
  199.  
  200.     Class(int swordMax, int powerMax, Material icon) {
  201.         this.swordMax = swordMax;
  202.         this.powerMax = powerMax;
  203.         this.icon = icon;
  204.     }
  205. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement