Advertisement
Ghaz-ranka

Untitled

Jun 1st, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.97 KB | None | 0 0
  1. public class AnvilStone {
  2. boolean isCrafting = false;
  3. public Config config;
  4. private Esinia plugin;
  5. public AnvilStone(Esinia plugin){
  6. this.plugin = plugin;
  7. }
  8.  
  9.  
  10. Map<UUID, Task> tasks = new HashMap<>();
  11. Map<UUID, Scoreboard> boards = new HashMap<>();
  12. //listener for the following event
  13. @Listener
  14. //event that occurs when a block is interacted with via right click
  15. public void onRightClickMainHand(InteractBlockEvent.Secondary.MainHand event){
  16.  
  17. Player player = event.getCause().last(Player.class).get();
  18. //Sponge.getServer().getBroadcastChannel().send(Text.of("Right Click Event"));
  19. if (player != null){
  20. //Sponge.getServer().getBroadcastChannel().send(Text.of("Player Exists"));
  21. if (event.getTargetBlock().getState().getType() == BlockTypes.ANVIL){
  22. //Sponge.getServer().getBroadcastChannel().send(Text.of("Cancelled and Anvil"));
  23.  
  24. player.getItemInHand(HandTypes.MAIN_HAND).ifPresent(mainhanditem -> {
  25.  
  26. if (mainhanditem.get(Keys.DISPLAY_NAME).get().equals(Text.of("Wooden Hammer"))){
  27. event.setCancelled(true);
  28. //Sponge.getServer().getBroadcastChannel().send(Text.of("Has Wooden Hammer"));
  29.  
  30. Sponge.getGame().getRegistry().getType(ItemType.class, "forgecraft:wootzshovel").ifPresent(modstoneshoveltype -> {
  31.  
  32.  
  33. Sponge.getGame().getRegistry().getType(ItemType.class, "forgecraft:wootzaxe").ifPresent(modstoneaxetype -> {
  34.  
  35. Sponge.getGame().getRegistry().getType(ItemType.class, "forgecraft:wootzpickaxe").ifPresent(modstonepickaxetype -> {
  36.  
  37. Inventory BasicAnvilInventory = Inventory.builder().of(InventoryArchetypes.DOUBLE_CHEST)
  38. .property(InventoryDimension.PROPERTY_NAME, new InventoryDimension(9, 1))
  39. .property(InventoryTitle.PROPERTY_NAME, InventoryTitle.of(Text.of("Stone Working")))
  40. .build(this.plugin);
  41.  
  42. ItemStack stoneshovel = ItemStack.of(modstoneshoveltype, 1);
  43. stoneshovel.offer(Keys.DISPLAY_NAME, Text.of("Stone Shovel"));
  44. List<Text> itemShovelLore = new ArrayList<Text>();
  45. itemShovelLore.add(Text.of(TextColors.GOLD, "Crafting Requirements:"));
  46. itemShovelLore.add(Text.of(TextColors.GOLD, "1 Flat Stone"));
  47. itemShovelLore.add(Text.of(TextColors.GOLD, "1 Tool Handle"));
  48. stoneshovel.offer(Keys.ITEM_LORE , itemShovelLore);
  49. BasicAnvilInventory.query(new SlotPos(0,0)).set(stoneshovel);
  50.  
  51. ItemStack stoneaxe = ItemStack.of(modstoneaxetype, 1);
  52. stoneaxe.offer(Keys.DISPLAY_NAME, Text.of("Stone Axe"));
  53. List<Text> itemAxeLore = new ArrayList<Text>();
  54. itemAxeLore.add(Text.of(TextColors.GOLD, "Crafting Requirements:"));
  55. itemAxeLore.add(Text.of(TextColors.GOLD, "1 Stone Axehead"));
  56. itemAxeLore.add(Text.of(TextColors.GOLD, "1 Wooden Tool Handle"));
  57. stoneaxe.offer(Keys.ITEM_LORE , itemAxeLore);
  58. BasicAnvilInventory.query(new SlotPos(1,0)).set(stoneaxe);
  59.  
  60. ItemStack stonepickaxe = ItemStack.of(modstonepickaxetype, 1);
  61. stonepickaxe.offer(Keys.DISPLAY_NAME, Text.of("Stone Pickaxe"));
  62. List<Text> itemPickaxeLore = new ArrayList<Text>();
  63. itemPickaxeLore.add(Text.of(TextColors.GOLD, "Crafting Requirements:"));
  64. itemPickaxeLore.add(Text.of(TextColors.GOLD, "1 Stone Pickaxehead"));
  65. itemPickaxeLore.add(Text.of(TextColors.GOLD, "1 Wooden Tool Handle"));
  66. stonepickaxe.offer(Keys.ITEM_LORE , itemPickaxeLore);
  67. BasicAnvilInventory.query(new SlotPos(2,0)).set(stonepickaxe);
  68.  
  69. ItemStack stonesword = ItemStack.of(ItemTypes.STONE_SWORD, 1);
  70. stonesword.offer(Keys.DISPLAY_NAME, Text.of("Stone Sword"));
  71. List<Text> itemSwordLore = new ArrayList<Text>();
  72. itemSwordLore.add(Text.of(TextColors.GOLD, "Crafting Requirements:"));
  73. itemSwordLore.add(Text.of(TextColors.GOLD, "1 Stone Blade"));
  74. itemSwordLore.add(Text.of(TextColors.GOLD, "1 Wooden Tool Handle"));
  75. stonesword.offer(Keys.ITEM_LORE , itemPickaxeLore);
  76. BasicAnvilInventory.query(new SlotPos(3,0)).set(stonesword);
  77.  
  78. player.openInventory(BasicAnvilInventory, Cause.of(NamedCause.source(player)));
  79.  
  80. });
  81. });
  82. });
  83. }
  84. });
  85. }
  86. }
  87. }
  88. @Listener
  89. public void onInventoryClick(ClickInventoryEvent event, @Root Player player, @Getter("getTargetInventory") Inventory inventory) {
  90.  
  91. ConfigurationNode nodeStone = plugin.root.getNode("Stoneworking", player.getUniqueId().toString());
  92. int level = nodeStone.getNode("Level").getInt();
  93. int XP = nodeStone.getNode("XP").getInt();
  94. Location<World> p_loc = player.getLocation();
  95. UUID id = player.getUniqueId();
  96. if (isCrafting){
  97. event.setCancelled(true);
  98. player.sendMessage(Text.of("You are currently crafting"));
  99. } else if (inventory.getName().get().contains("Stone Working")){
  100. event.setCancelled(true);
  101. ItemStackSnapshot clicked = event.getCursorTransaction().getFinal();
  102. String name = clicked.get(Keys.DISPLAY_NAME).orElse(Text.EMPTY).toPlain();
  103. //if (!name.startsWith("&f")) {
  104. // it does not have the correct name
  105. //}
  106. //name = name.replaceAll("^&f", "");
  107. ItemType itemID = clicked.getType();
  108. Optional<ItemEntry> itemEntry_ = config.items.stream().filter(f -> f.name.equals(name) && f.id.equals(itemID)).findFirst();
  109. if (itemEntry_.isPresent()) {
  110. boolean hasReagents = true;
  111. ItemEntry itemEntry = itemEntry_.get();
  112. String itemName = itemEntry.name;
  113. int itemQuantity = itemEntry.quantity;
  114. List<CraftingEntry> craftingReagents = itemEntry.crafting;
  115. reagents: for (CraftingEntry craftingReagent : craftingReagents) {
  116. ItemType reagentID = craftingReagent.id;
  117. String reagentName = craftingReagent.name;
  118. int reagentQuantity = craftingReagent.quantity;
  119. int inventoryreagentQuantity = 0;
  120. for (Inventory slot : player.getInventory().query(reagentID).slots()){
  121. ItemStack stack = slot.peek().get();
  122. if (!stack.get(Keys.DISPLAY_NAME).orElse(Text.EMPTY).toPlain().equals(reagentName)){
  123. player.sendMessage(Text.of("You need " + reagentName + " to craft " + itemName + "."));
  124. hasReagents = false;
  125. break reagents;
  126. } else {
  127. inventoryreagentQuantity += stack.getQuantity();
  128. }
  129. }
  130. if (inventoryreagentQuantity < reagentQuantity){
  131. player.sendMessage(Text.of("You need " + reagentQuantity + " " + reagentName + " to craft " + itemQuantity + " " + itemName + "."));
  132. hasReagents = false;
  133. break reagents;
  134. }
  135. }
  136. if (hasReagents){
  137. Integer time = 1 - (level/100);
  138. Objective obj = Objective.builder()
  139. .criterion(Criteria.DUMMY)
  140. .name("timer")
  141. .displayName(Text.of(TextColors.DARK_BLUE, "[ ]"))
  142. .build();
  143. Scoreboard board = Scoreboard.builder()
  144. .objectives(ImmutableList.of(obj))
  145. .build();
  146. obj.getOrCreateScore(Text.of(player.getName())).setScore(0);
  147. player.setScoreboard(board);
  148. board.updateDisplaySlot(obj, DisplaySlots.SIDEBAR);
  149. boards.put(player.getUniqueId(), board);
  150. AtomicInteger integer = new AtomicInteger(10);
  151. tasks.put(id, Task.builder()
  152. .delay(time, TimeUnit.SECONDS)
  153. .interval(time, TimeUnit.SECONDS)
  154. .execute(() -> {
  155. isCrafting = true;
  156. if (player.getLocation() == p_loc){
  157. player.setScoreboard(board);
  158. char[] arr = new char[10];
  159. Arrays.fill(arr, 0, 11 - integer.decrementAndGet(), '|');
  160. obj.setDisplayName(Text.of(TextColors.DARK_BLUE, "[", String.valueOf(arr), "]"));
  161.  
  162. if (integer.get() == 0) {
  163. obj.setDisplayName(Text.of(TextColors.DARK_BLUE, "[||||||||||]"));
  164. for (CraftingEntry craftingReagent : craftingReagents) {
  165. ItemType reagentID = craftingReagent.id;
  166. String reagentName = craftingReagent.name;
  167. int reagentQuantity = craftingReagent.quantity;
  168. inventory: for (Inventory slot : player.getInventory().query(reagentID).slots()){
  169. ItemStack stack = slot.peek().get();
  170. if (stack.get(Keys.DISPLAY_NAME).orElse(Text.EMPTY).toPlain().equals(reagentName)){
  171. if (stack.getQuantity() >= reagentQuantity) {
  172. slot.poll(reagentQuantity);
  173. break inventory;
  174. }
  175. }
  176. }
  177. }
  178. ItemStack reward = ItemStack.of(itemID, itemQuantity);
  179. reward.offer(Keys.DISPLAY_NAME, Text.of(itemName));
  180. //List<Text> itemShovelLore = new ArrayList<Text>();
  181. //itemShovelLore.add(Text.of(TextColors.GOLD, "Crafting Requirements:"));
  182. //itemShovelLore.add(Text.of(TextColors.GOLD, "1 Flat Stone"));
  183. //itemShovelLore.add(Text.of(TextColors.GOLD, "1 Tool Handle"));
  184. //stoneshovel.offer(Keys.ITEM_LORE, itemShovelLore);
  185. player.getInventory().offer(reward);
  186. int rxp = (int) Math.round(100 * Math.exp(0.6931 * level));
  187. int fxp = XP + 1;
  188. if (fxp >= rxp){
  189. int newXP = fxp - rxp;
  190. int fLevel = level + 1;
  191. nodeStone.getNode("XP").setValue(newXP);
  192. nodeStone.getNode("Level").setValue(fLevel);
  193. plugin.saveConfig();
  194. isCrafting = false;
  195. tasks.remove(id).cancel();
  196. boards.remove(id);
  197. } else{
  198. nodeStone.getNode("XP").setValue(fxp);
  199. plugin.saveConfig();
  200. isCrafting = false;
  201. tasks.remove(id).cancel();
  202. boards.remove(id);
  203. }
  204. }
  205. } else{
  206. player.sendMessage(Text.of("Don't move while crafting."));
  207. isCrafting = false;
  208. tasks.remove(id).cancel();
  209. boards.remove(id);
  210. }
  211. })
  212. .submit(this));
  213. }
  214. }
  215. }
  216. }
  217. @Listener
  218. public void onItemDrop(SpawnEntityEvent event){
  219. if (event.getCause().root() instanceof Player){
  220. if (isCrafting){
  221. event.setCancelled(true);
  222. }
  223. }
  224. }
  225. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement