MySoulIsCry

Untitled

Mar 22nd, 2022
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.28 KB | None | 0 0
  1. package com.lairon.diamondworld.percent;
  2.  
  3. import com.destroystokyo.paper.ParticleBuilder;
  4. import com.lairon.diamondworld.DiamondWorld;
  5. import com.lairon.diamondworld.event.OnDisableEvent;
  6. import com.lairon.diamondworld.utils.ItemStackUtils;
  7. import com.lairon.diamondworld.utils.LocationUtils;
  8. import net.citizensnpcs.api.CitizensAPI;
  9. import net.citizensnpcs.api.npc.NPC;
  10. import net.md_5.bungee.api.chat.BaseComponent;
  11. import net.md_5.bungee.api.chat.ClickEvent;
  12. import net.md_5.bungee.api.chat.ComponentBuilder;
  13. import org.bukkit.*;
  14. import org.bukkit.block.Block;
  15. import org.bukkit.entity.EntityType;
  16. import org.bukkit.entity.Player;
  17. import org.bukkit.event.EventHandler;
  18. import org.bukkit.event.Listener;
  19. import org.bukkit.event.player.PlayerInteractAtEntityEvent;
  20. import org.bukkit.event.player.PlayerInteractEvent;
  21. import org.bukkit.event.player.PlayerItemConsumeEvent;
  22. import org.bukkit.inventory.ItemStack;
  23. import org.bukkit.inventory.ShapedRecipe;
  24. import org.bukkit.potion.PotionEffect;
  25. import org.bukkit.potion.PotionEffectType;
  26.  
  27. import java.util.Collection;
  28. import java.util.HashMap;
  29. import java.util.HashSet;
  30.  
  31. public class ZeroPercent implements Percent, Listener, OnDisableEvent {
  32.  
  33.     private ItemStack diamondBread = new ItemStack(Material.BREAD);
  34.     private ItemStack diamondWheat = new ItemStack(Material.YELLOW_DYE);
  35.     private ItemStack diamondTable = new ItemStack(Material.DEAD_HORN_CORAL_BLOCK);
  36.     private HashSet<Material> notReplaceableMaterials = new HashSet<>();
  37.     private HashMap<Material, ItemStack> replaceableItems = new HashMap<>();
  38.     private DiamondWorld main = DiamondWorld.getInstance();
  39.     private NPC diamondHelper;
  40.     private boolean isHelperStarted = false;
  41.     private String[] helperMessagesClick = {
  42.             "§7[§3Алмазный Король§7]: §fФуух.. наконец-то кто-то пришел ко мне на помощь..",
  43.             "§7[§3Алмазный Король§7]: §fКогда-то моя деревня была самой красивой и.. АЛМАЗНОЙ..",
  44.             "§7[§3Алмазный Король§7]: §fНо, сейчас она абсолютно пустая…",
  45.             "§7[§3Алмазный Король§7]: §fОкажи мне услуги, преврати все деревню в ее алмазный вид и тогда, я помогу заполнить тебе твой босс бар.. Идет?"
  46.     };
  47.  
  48.     private ZeroPercent() {
  49.         initItems();
  50.         Bukkit.getScheduler().runTaskTimer(DiamondWorld.getInstance(), () -> {
  51.             Collection<? extends Player> onlinePlayers = Bukkit.getOnlinePlayers();
  52.             onlinePlayers.forEach(this::setDiamondBlockOnGround);
  53.             onlinePlayers.forEach(this::replaceItem);
  54.         }, 1, 1);
  55.         addNotReplaceableMaterials(Material.DIAMOND_BLOCK,
  56.                 Material.DIAMOND, Material.DIAMOND_AXE,
  57.                 Material.DIAMOND_SHOVEL, Material.DIAMOND_PICKAXE,
  58.                 Material.DIAMOND_SWORD, Material.DIAMOND_HOE,
  59.                 Material.DIAMOND_CHESTPLATE, Material.DIAMOND_BOOTS,
  60.                 Material.DIAMOND_LEGGINGS, Material.DIAMOND_HELMET,
  61.                 Material.DIAMOND_HORSE_ARMOR, Material.DIAMOND_ORE,
  62.                 Material.BREAD);
  63.         addReplaceableItems(Material.WHEAT, diamondWheat);
  64.         addReplaceableItems(Material.CRAFTING_TABLE, diamondTable);
  65.         Bukkit.getPluginCommand("diamondHelperSpawn").setExecutor((sender, command, label, args) -> {
  66.             Player player = (Player) sender;
  67.  
  68.             if(diamondHelper != null){
  69.                 diamondHelper.despawn();
  70.                 diamondHelper.destroy();
  71.             }
  72.  
  73.             diamondHelper = CitizensAPI.getNPCRegistry().createNPC(EntityType.PLAYER, "Алмазный Король");
  74.             diamondHelper.spawn(player.getLocation());
  75.             return false;
  76.         });
  77.     }
  78.  
  79.     private void initItems() {
  80.         //Алмазный Хлеб
  81.         ItemStackUtils.setDisplayName(diamondBread, "§x§0§6§8§5§f§bА§x§1§1§6§d§f§bл§x§1§c§5§5§f§cм§x§2§7§3§c§f§cа§x§3§2§2§4§f§cз§x§3§d§0§c§f§dн§x§3§d§0§e§f§aы§x§3§2§2§a§f§3й §x§2§8§4§6§e§cХ§x§1§e§6§1§e§5л§x§1§3§7§d§d§eе§x§0§9§9§9§d§7б");
  82.         //Алмазная пшеница
  83.         ItemStackUtils.setDisplayName(diamondWheat, "§x§0§6§8§5§f§bА§x§0§f§7§2§f§bл§x§1§7§5§f§f§cм§x§2§0§4§c§f§cа§x§2§8§3§9§f§cз§x§3§1§2§6§f§cн§x§3§9§1§3§f§dа§x§4§2§0§0§f§dя §x§3§a§1§6§f§8п§x§3§2§2§c§f§2ш§x§2§a§4§2§e§dе§x§2§1§5§7§e§7н§x§1§9§6§d§e§2и§x§1§1§8§3§d§cц§x§0§9§9§9§d§7а");
  84.         //Алмазный верстак
  85.         ItemStackUtils.setDisplayName(diamondTable, "§x§0§6§8§5§f§bА§x§0§f§7§2§f§bл§x§1§7§5§f§f§cм§x§2§0§4§c§f§cа§x§2§8§3§9§f§cз§x§3§1§2§6§f§cн§x§3§9§1§3§f§dы§x§4§2§0§0§f§dй §x§3§a§1§6§f§8в§x§3§2§2§c§f§2е§x§2§a§4§2§e§dр§x§2§1§5§7§e§7с§x§1§9§6§d§e§2т§x§1§1§8§3§d§cа§x§0§9§9§9§d§7к");
  86.  
  87.     }
  88.  
  89.     @EventHandler
  90.     public void onInteractAtDiamondHelperEvent(PlayerInteractAtEntityEvent e){
  91. //        if(diamondHelper == null) return;
  92.  
  93.         if(e.getRightClicked() != diamondHelper.getEntity()) return;
  94.         if(!isHelperStarted) return;
  95.         isHelperStarted = true;
  96.  
  97.         final int[] messageTime = {0};
  98.  
  99.         for (int i = 0; i < helperMessagesClick.length; i++) {
  100.             int finalI = i;
  101.             Bukkit.getScheduler().runTaskLater(main, ()-> {
  102.                 messageTime[0] += 100;
  103.                 e.getPlayer().sendMessage(helperMessagesClick[finalI]);
  104.             }, messageTime[0]);
  105.         }
  106.         Bukkit.getScheduler().runTaskLater(main, ()->{
  107.             BaseComponent[] yesOrNo = new ComponentBuilder("§7[§aДА§7] [§cНЕТ§7]")
  108.                     .event(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "diamondHelperSpawn yes"))
  109.                     .create();
  110.             e.getPlayer().sendMessage(yesOrNo);
  111.         }, messageTime[0]);
  112.     }
  113.  
  114.     @EventHandler
  115.     public void onTable(PlayerInteractEvent e){
  116.         if(e.getClickedBlock() == null) return;
  117.         if(e.getClickedBlock().getType() != diamondTable.getType()) return;
  118.         e.getPlayer().openWorkbench(e.getClickedBlock().getLocation(), true);
  119.     }
  120.  
  121.     @EventHandler
  122.     public void onItemConsume(PlayerItemConsumeEvent e) {
  123.         if (!e.getItem().isSimilar(diamondBread)) return;
  124.         Collection<Location> locations = LocationUtils.blockRadiusH(e.getPlayer().getLocation().clone().add(0, 1.7f, 0), 1, 10);
  125.         locations.forEach((location ->
  126.                 new ParticleBuilder(Particle.FLAME)
  127.                         .location(location)
  128.                         .spawn()));
  129.         e.getPlayer().addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 200, 2));
  130.     }
  131.  
  132.     private void setDiamondBlockOnGround(Player player) {
  133.         if (!player.isOnGround()) return;
  134.         Block block = player.getLocation().clone().subtract(0, 1, 0).getBlock();
  135.         if (block.getType() == Material.AIR
  136.                 || block.getType() == Material.WATER
  137.                 || block.getType() == Material.LAVA
  138.                 || block.getType() == Material.DIAMOND_BLOCK
  139.         ) return;
  140.         main.getProgressManager().addBlockComplete(player);
  141.         block.setType(Material.DIAMOND_BLOCK);
  142.     }
  143.  
  144.     private void replaceItem(Player player) {
  145.         ItemStack itemInMainHand = player.getInventory().getItemInMainHand();
  146.         if (itemInMainHand.getType() == Material.AIR) return;
  147.         if (notReplaceableMaterials.contains(itemInMainHand.getType())) return;
  148.         if (replaceableItems.containsKey(itemInMainHand.getType()))
  149.             player.getInventory().setItem(player.getInventory().getHeldItemSlot(), replaceableItems.get(itemInMainHand.getType()));
  150.         else player.getInventory().setItem(player.getInventory().getHeldItemSlot(), new ItemStack(Material.DIAMOND));
  151.     }
  152.  
  153.     public void addReplaceableItems(Material material, ItemStack itemStack) {
  154.         replaceableItems.put(material, itemStack);
  155.         addNotReplaceableMaterials(itemStack.getType());
  156.     }
  157.  
  158.  
  159.  
  160.     public void addNotReplaceableMaterials(Material... materials) {
  161.         for (Material material :
  162.                 materials) {
  163.             notReplaceableMaterials.add(material);
  164.         }
  165.  
  166.     }
  167.  
  168.     @Override
  169.     public HashSet<ShapedRecipe> shapedRecipes() {
  170.         HashSet<ShapedRecipe> shapedRecipes = new HashSet<>();
  171.  
  172.         NamespacedKey breadKey = new NamespacedKey(main, "DiamondBread");
  173.         ShapedRecipe breadRecipe = new ShapedRecipe(breadKey, diamondBread);
  174.         breadRecipe.shape("   ", "www", "   ");
  175.         breadRecipe.setIngredient('w', diamondWheat.getType());
  176.         shapedRecipes.add(breadRecipe);
  177.  
  178.         return shapedRecipes;
  179.     }
  180.  
  181.     @Override
  182.     public Listener listener() {
  183.         return this;
  184.     }
  185.  
  186.     public static ZeroPercent getInstance() {
  187.         return new ZeroPercent();
  188.     }
  189.  
  190.     @Override
  191.     public void onDisable() {
  192.         if(diamondHelper != null){
  193.             diamondHelper.despawn();
  194.             diamondHelper.destroy();
  195.         }
  196.     }
  197. }
  198.  
Advertisement
Add Comment
Please, Sign In to add comment