Ghaz-ranka

Untitled

Jun 4th, 2017
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.09 KB | None | 0 0
  1. public class AnvilStone {
  2. //private Config config;
  3. public Config config;
  4. private Esinia plugin;
  5. public AnvilStone(Esinia plugin){
  6. this.plugin = plugin;
  7. this.config = plugin.config;
  8. }
  9.  
  10. Map<UUID, Task> tasks = new HashMap<>();
  11. Map<UUID, Scoreboard> boards = new HashMap<>();
  12. Map<UUID, Boolean> isCrafting = new HashMap<>();
  13. //listener for the following event
  14. @Listener
  15. public void onRightClickMainHand(InteractBlockEvent.Secondary.MainHand event){
  16. Player player = event.getCause().first(Player.class).get();
  17. if (player != null){
  18. if (player.getItemInHand(HandTypes.MAIN_HAND).isPresent()){
  19. player.sendMessage(Text.of("Is present 1"));
  20. ItemStack mainhandItem = player.getItemInHand(HandTypes.MAIN_HAND).get();
  21. String toolName = mainhandItem.get(Keys.DISPLAY_NAME).orElse(Text.EMPTY).toPlain();
  22. String blockName = event.getTargetBlock().getState().getType().toString();
  23. Optional<CustomCraftingEntry> customcraftingEntry_ = config.customCrafting.stream().filter(f -> f.toolName.equals(toolName) && f.blockName.equals(blockName)).findFirst();
  24. if (customcraftingEntry_.isPresent()) {
  25. player.sendMessage(Text.of("Is present 2"));
  26. CustomCraftingEntry customcraftingEntry = customcraftingEntry_.get();
  27. String inventoryName = customcraftingEntry.name;
  28. int itemCounter = -1;
  29. int secondaryCounter = 0;
  30. event.setCancelled(true);
  31. Inventory craftingInventory = Inventory.builder().of(InventoryArchetypes.DOUBLE_CHEST)
  32. .property(InventoryDimension.PROPERTY_NAME, new InventoryDimension(9, 4))
  33. .property(InventoryTitle.PROPERTY_NAME, InventoryTitle.of(Text.of(inventoryName)))
  34. .build(this.plugin);
  35. List<ItemsEntry> craftingItems = customcraftingEntry.items;
  36. for (ItemsEntry craftingItem : craftingItems) {
  37. itemCounter = itemCounter + 1;
  38. if (itemCounter > 9){
  39. itemCounter = 0;
  40. secondaryCounter = secondaryCounter + 1;
  41. }
  42. TextColor itemColor = craftingItem.color;
  43. ItemType itemID = craftingItem.id;
  44. String itemName = craftingItem.name;
  45. List<String> itemLore_ = craftingItem.lore;
  46. List<Text> itemLore = itemLore_.stream().map(TextSerializers.FORMATTING_CODE::deserialize).collect(Collectors.toList());
  47. ItemStack item = ItemStack.of(itemID, 1);
  48. item.offer(Keys.DISPLAY_NAME, Text.of(itemColor, itemName));
  49. item.offer(Keys.ITEM_LORE, itemLore);
  50. craftingInventory.query(new SlotPos(secondaryCounter,itemCounter)).set(item);
  51. }
  52. player.openInventory(craftingInventory, Cause.of(NamedCause.source(player)));
  53. }
  54. } else {
  55. player.sendMessage(Text.of("You need a tool to use " + event.getTargetBlock().getState().getName() + "."));
  56. }
  57. }
  58. }
  59. //if (event.getTargetBlock().getState().getType() == BlockTypes.ANVIL){
  60. // if (mainhanditem.get(Keys.DISPLAY_NAME).get().equals(Text.of("Wooden Hammer"))){
  61. // event.setCancelled(true);
  62. // Optional<ItemType> Stoneshovel_ = Sponge.getGame().getRegistry().getType(ItemType.class, "forgecraft:wootzshovel");
  63. // ItemType StoneShovelType = Stoneshovel_.get();
  64. // ItemStack stoneShovel = ItemStack.of(StoneShovelType, 1);
  65. // stoneShovel.offer(Keys.DISPLAY_NAME, Text.of("Stone Shovel"));
  66. // List<Text> itemShovelLore = new ArrayList<Text>();
  67. // itemShovelLore.add(Text.of(TextColors.GOLD, "Crafting Requirements:"));
  68. // itemShovelLore.add(Text.of(TextColors.GOLD, "1 Flat Stone"));
  69. // itemShovelLore.add(Text.of(TextColors.GOLD, "1 Tool Handle"));
  70. // stoneShovel.offer(Keys.ITEM_LORE , itemShovelLore);
  71. //
  72. // Optional<ItemType> stoneAxe_ = Sponge.getGame().getRegistry().getType(ItemType.class, "forgecraft:wootzaxe");
  73. // ItemType stoneaxeType = stoneAxe_.get();
  74. // ItemStack stoneAxe = ItemStack.of(stoneaxeType, 1);
  75. // List<Text> itemAxeLore = new ArrayList<Text>();
  76. // itemAxeLore.add(Text.of(TextColors.GOLD, "Crafting Requirements:"));
  77. // itemAxeLore.add(Text.of(TextColors.GOLD, "1 Stone Axehead"));
  78. // itemAxeLore.add(Text.of(TextColors.GOLD, "1 Wooden Tool Handle"));
  79. // stoneAxe.offer(Keys.ITEM_LORE , itemAxeLore);
  80. //
  81. // Optional<ItemType> stonePickaxe_ = Sponge.getGame().getRegistry().getType(ItemType.class, "forgecraft:wootzpickaxe");
  82. // ItemType stonepickaxeType = stonePickaxe_.get();
  83. // ItemStack stonePickaxe = ItemStack.of(stonepickaxeType, 1);
  84. // List<Text> itemPickaxeLore = new ArrayList<Text>();
  85. // itemPickaxeLore.add(Text.of(TextColors.GOLD, "Crafting Requirements:"));
  86. // itemPickaxeLore.add(Text.of(TextColors.GOLD, "1 Stone Pickaxehead"));
  87. // itemPickaxeLore.add(Text.of(TextColors.GOLD, "1 Wooden Tool Handle"));
  88. // stonePickaxe.offer(Keys.ITEM_LORE , itemPickaxeLore);
  89. //
  90. // ItemStack stoneSword = ItemStack.of(ItemTypes.STONE_SWORD, 1);
  91. // stoneSword.offer(Keys.DISPLAY_NAME, Text.of("Stone Sword"));
  92. // List<Text> itemSwordLore = new ArrayList<Text>();
  93. // itemSwordLore.add(Text.of(TextColors.GOLD, "Crafting Requirements:"));
  94. // itemSwordLore.add(Text.of(TextColors.GOLD, "1 Stone Blade"));
  95. // itemSwordLore.add(Text.of(TextColors.GOLD, "1 Wooden Tool Handle"));
  96. // stoneSword.offer(Keys.ITEM_LORE , itemPickaxeLore);
  97. //
  98. // Inventory BasicAnvilInventory = Inventory.builder().of(InventoryArchetypes.DOUBLE_CHEST)
  99. // .property(InventoryDimension.PROPERTY_NAME, new InventoryDimension(9, 1))
  100. // .property(InventoryTitle.PROPERTY_NAME, InventoryTitle.of(Text.of("Stone Working")))
  101. // .build(this.plugin);
  102. //
  103. // BasicAnvilInventory.query(new SlotPos(0,0)).set(stoneShovel);
  104. // BasicAnvilInventory.query(new SlotPos(1,0)).set(stoneAxe);
  105. // BasicAnvilInventory.query(new SlotPos(2,0)).set(stonePickaxe);
  106. // BasicAnvilInventory.query(new SlotPos(3,0)).set(stoneSword);
  107. // player.openInventory(BasicAnvilInventory, Cause.of(NamedCause.source(player)));
  108. // }
  109. // });
  110. //}
  111. //}
  112.  
  113. @Listener
  114. public void onInventoryClick(ClickInventoryEvent event, @Root Player player, @Getter("getTargetInventory") Inventory inventory) {
  115.  
  116. Location<World> p_Loc = player.getLocation();
  117. UUID id = player.getUniqueId();
  118. if (isCrafting.get(id)){
  119. event.setCancelled(true);
  120. player.sendMessage(Text.of("You are currently crafting"));
  121. } else if (inventory.getName().get().contains("Stone Working")){
  122. event.setCancelled(true);
  123. ItemStackSnapshot clicked = event.getCursorTransaction().getFinal();
  124. String name = clicked.get(Keys.DISPLAY_NAME).orElse(Text.EMPTY).toPlain();
  125. //if (!name.startsWith("&f")) {
  126. // it does not have the correct name
  127. //}
  128. //name = name.replaceAll("^&f", "");
  129. ItemType itemID = clicked.getType();
  130. Optional<ItemEntry> itemEntry_ = config.items.stream().filter(f -> f.name.equals(name) && f.id.equals(itemID)).findFirst();
  131. if (itemEntry_.isPresent()) {
  132. boolean hasReagents = true;
  133. ItemEntry itemEntry = itemEntry_.get();
  134. String itemName = itemEntry.name;
  135. String craftingType = itemEntry.type;
  136. TextColor itemColor = itemEntry.color;
  137. List<String> itemLore = itemEntry.lore;
  138. int itemQuantity = itemEntry.quantity;
  139. int itemXP = itemEntry.xp;
  140. int itemDifficulty = itemEntry.difficulty;
  141. ConfigurationNode nodeType = plugin.root.getNode(craftingType, player.getUniqueId().toString());
  142. int level = nodeType.getNode("Level").getInt();
  143. int xp = nodeType.getNode("XP").getInt();
  144. List<CraftingEntry> craftingReagents = itemEntry.crafting;
  145. reagents: for (CraftingEntry craftingReagent : craftingReagents) {
  146. ItemType reagentID = craftingReagent.id;
  147. String reagentName = craftingReagent.name;
  148. int reagentQuantity = craftingReagent.quantity;
  149. int inventoryreagentQuantity = 0;
  150. for (Inventory slot : player.getInventory().query(reagentID).slots()){
  151. ItemStack stack = slot.peek().get();
  152. if (stack.get(Keys.DISPLAY_NAME).orElse(Text.EMPTY).toPlain().equals(reagentName)){
  153. inventoryreagentQuantity += stack.getQuantity();
  154. }
  155. }
  156. if (inventoryreagentQuantity < reagentQuantity){
  157. player.sendMessage(Text.of("You need " + reagentQuantity + " " + reagentName + " to craft " + itemQuantity + " " + itemName + "."));
  158. hasReagents = false;
  159. break reagents;
  160. }
  161. }
  162. if (hasReagents){
  163. Integer time = 1 - (level/100);
  164. Objective obj = Objective.builder()
  165. .criterion(Criteria.DUMMY)
  166. .name("timer")
  167. .displayName(Text.of(TextColors.DARK_BLUE, "[ ]"))
  168. .build();
  169. Scoreboard board = Scoreboard.builder()
  170. .objectives(ImmutableList.of(obj))
  171. .build();
  172. obj.getOrCreateScore(Text.of(player.getName())).setScore(0);
  173. player.setScoreboard(board);
  174. board.updateDisplaySlot(obj, DisplaySlots.SIDEBAR);
  175. boards.put(player.getUniqueId(), board);
  176. AtomicInteger integer = new AtomicInteger(10);
  177. tasks.put(id, Task.builder()
  178. .delay(time, TimeUnit.SECONDS)
  179. .interval(time, TimeUnit.SECONDS)
  180. .execute(() -> {
  181. isCrafting.put(id, true);
  182. if (player.getLocation() == p_Loc){
  183. player.setScoreboard(board);
  184. char[] arr = new char[10];
  185. Arrays.fill(arr, 0, 11 - integer.decrementAndGet(), '|');
  186. obj.setDisplayName(Text.of(TextColors.DARK_BLUE, "[", String.valueOf(arr), "]"));
  187.  
  188. if (integer.get() == 0) {
  189. obj.setDisplayName(Text.of(TextColors.DARK_BLUE, "[||||||||||]"));
  190. int max = itemDifficulty + (itemDifficulty/2);
  191. int min = level;
  192. int random = (int )(Math.random() * max + min);
  193. if (level >= random){
  194. for (CraftingEntry craftingReagent : craftingReagents) {
  195. ItemType reagentID = craftingReagent.id;
  196. String reagentName = craftingReagent.name;
  197. int reagentQuantity = craftingReagent.quantity;
  198. for (Inventory slot : player.getInventory().query(reagentID).slots()) {
  199. ItemStack stack = slot.peek().get();
  200. if (stack.get(Keys.DISPLAY_NAME).orElse(Text.EMPTY).toPlain().equals(reagentName)) {
  201. if (stack.getQuantity() >= reagentQuantity) {
  202. slot.poll(reagentQuantity);
  203. break;
  204. } else {
  205. reagentQuantity -= stack.getQuantity();
  206. slot.poll();
  207. }
  208. }
  209. }
  210. }
  211. ItemStack reward = ItemStack.of(itemID, itemQuantity);
  212. reward.offer(Keys.DISPLAY_NAME, Text.of(itemColor, itemName));
  213. List<Text> rewarditemLore = itemLore.stream().map(TextSerializers.FORMATTING_CODE::deserialize).collect(Collectors.toList());
  214. //itemShovelLore.add(Text.of(TextColors.GOLD, "Crafting Requirements:"));
  215. //itemShovelLore.add(Text.of(TextColors.GOLD, "1 Flat Stone"));
  216. //itemShovelLore.add(Text.of(TextColors.GOLD, "1 Tool Handle"));
  217. reward.offer(Keys.ITEM_LORE, rewarditemLore);
  218. player.getInventory().offer(reward);
  219. int rxp = (int) Math.round(100 * Math.exp(0.6931 * level));
  220. int fxp = xp + itemXP;
  221. if (fxp >= rxp){
  222. int newXP = fxp - rxp;
  223. int fLevel = level + 1;
  224. nodeType.getNode("XP").setValue(newXP);
  225. nodeType.getNode("Level").setValue(fLevel);
  226. player.sendMessage(Text.of("You gained one level."));
  227. plugin.saveConfig();
  228. isCrafting.put(id, false);
  229. tasks.remove(id).cancel();
  230. boards.remove(id);
  231. } else{
  232. nodeType.getNode("XP").setValue(fxp);
  233. plugin.saveConfig();
  234. isCrafting.put(id, false);
  235. tasks.remove(id).cancel();
  236. boards.remove(id);
  237. }
  238. } else {
  239. player.sendMessage(Text.of("You failed while crafting."));
  240. int rxp = (int) Math.round(100 * Math.exp(0.6931 * level));
  241. int fxp = xp + (itemXP/2);
  242. if (fxp >= rxp){
  243. int newXP = fxp - rxp;
  244. int fLevel = level + 1;
  245. nodeType.getNode("XP").setValue(newXP);
  246. nodeType.getNode("Level").setValue(fLevel);
  247. player.sendMessage(Text.of("You gained one level."));
  248. plugin.saveConfig();
  249. isCrafting.put(id, false);
  250. tasks.remove(id).cancel();
  251. boards.remove(id);
  252. } else{
  253. nodeType.getNode("XP").setValue(fxp);
  254. plugin.saveConfig();
  255. isCrafting.put(id, false);
  256. tasks.remove(id).cancel();
  257. boards.remove(id);
  258. }
  259. }
  260. }
  261. } else{
  262. player.sendMessage(Text.of("Don't move while crafting."));
  263. isCrafting.put(id, false);
  264. tasks.remove(id).cancel();
  265. boards.remove(id);
  266. }
  267. })
  268. .submit(this));
  269. }
  270. }
  271. }
  272. }
  273. @Listener
  274. public void onItemDrop(DropItemEvent event, @Root Player p){
  275. UUID id = p.getUniqueId();
  276. if (isCrafting.get(id)){
  277. event.setCancelled(true);
  278.  
  279. }
  280. }
  281. }
Advertisement
Add Comment
Please, Sign In to add comment