Ghaz-ranka

Untitled

Jun 17th, 2017
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.38 KB | None | 0 0
  1. package zorg.esinia.server.gathering;
  2.  
  3. import java.time.Instant;
  4. import java.time.ZoneId;
  5. import java.time.format.DateTimeFormatter;
  6. import java.time.format.FormatStyle;
  7. import java.util.Arrays;
  8. import java.util.HashMap;
  9. import java.util.List;
  10. import java.util.Locale;
  11. import java.util.Map;
  12. import java.util.Optional;
  13. import java.util.Random;
  14. import java.util.UUID;
  15. import java.util.concurrent.TimeUnit;
  16. import java.util.concurrent.atomic.AtomicInteger;
  17. import java.util.stream.Collectors;
  18.  
  19. import org.spongepowered.api.block.BlockSnapshot;
  20. import org.spongepowered.api.block.BlockType;
  21. import org.spongepowered.api.block.BlockTypes;
  22. import org.spongepowered.api.data.key.Keys;
  23. import org.spongepowered.api.data.type.HandTypes;
  24. import org.spongepowered.api.data.type.TreeType;
  25. import org.spongepowered.api.entity.living.player.Player;
  26. import org.spongepowered.api.event.Listener;
  27. import org.spongepowered.api.event.block.InteractBlockEvent;
  28. import org.spongepowered.api.event.cause.Cause;
  29. import org.spongepowered.api.event.filter.cause.Last;
  30. import org.spongepowered.api.item.ItemType;
  31. import org.spongepowered.api.item.inventory.ItemStack;
  32. import org.spongepowered.api.scheduler.Task;
  33. import org.spongepowered.api.scoreboard.Scoreboard;
  34. import org.spongepowered.api.scoreboard.critieria.Criteria;
  35. import org.spongepowered.api.scoreboard.displayslot.DisplaySlots;
  36. import org.spongepowered.api.scoreboard.objective.Objective;
  37. import org.spongepowered.api.text.Text;
  38. import org.spongepowered.api.text.format.TextColor;
  39. import org.spongepowered.api.text.format.TextColors;
  40. import org.spongepowered.api.text.serializer.TextSerializers;
  41. import org.spongepowered.api.world.Location;
  42. import org.spongepowered.api.world.World;
  43.  
  44. import com.google.common.collect.ImmutableList;
  45.  
  46. import ninja.leaping.configurate.ConfigurationNode;
  47. import zorg.esinia.server.Config;
  48. import zorg.esinia.server.Esinia;
  49. import zorg.esinia.server.Config.GatheringBlocksEntry;
  50. import zorg.esinia.server.Config.RewardsEntry;
  51.  
  52. public class Lumbering {
  53. private Esinia plugin;
  54. public Config config;
  55. public Lumbering(Esinia plugin){
  56. this.plugin = plugin;
  57. this.config = plugin.config;
  58. }
  59.  
  60. Map<UUID, Task> tasks = new HashMap<>();
  61. Map<UUID, Scoreboard> boards = new HashMap<>();
  62. Map<UUID, Boolean> isCrafting = new HashMap<>();
  63. Random rand = new Random();
  64. @Listener
  65. public void onRightClickMainHand(InteractBlockEvent.Secondary.MainHand event, @Last Player player){
  66. DateTimeFormatter formatter =
  67. DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT)
  68. .withLocale(Locale.US)
  69. .withZone(ZoneId.systemDefault());
  70. Instant instant = Instant.now();
  71. String timeString = formatter.format(instant);
  72. ConfigurationNode iscraftingNode = plugin.root.getNode("isCrafting", player.getUniqueId().toString(), "isCrafting");
  73. boolean isHarvesting = iscraftingNode.getBoolean();
  74. int toolSpeed = 0;
  75. int toolDurability = 0;
  76. String variantName = "";
  77. UUID id = player.getUniqueId();
  78. Location<World > playerLocation = player.getLocation();
  79. Location<World> loc = event.getTargetBlock().getLocation().get();
  80. ConfigurationNode node = plugin.root.getNode("respawnblocks", loc.toString());
  81. if (loc.getBlockX() >= -1342 && loc.getBlockX() <= 1046 && loc.getBlockZ() >= -1254 && loc.getBlockY() <= 1198){
  82. plugin.getLogger().info("Lumbering: Proper Location");
  83. BlockType blockName = event.getTargetBlock().getState().getType();
  84. if (blockName.equals(BlockTypes.LOG)){
  85. plugin.getLogger().info("Lumbering: block is log");
  86. variantName = event.getTargetBlock().get(Keys.TREE_TYPE).get().getName();
  87. }
  88. String variantnameFinal = variantName;
  89. Optional<GatheringBlocksEntry> gatheringblocksEntry_ = config.gatheringBlocks.stream().filter(f -> f.blockName.equals(blockName) && f.variantName.equals(variantnameFinal)).findFirst();
  90. if (gatheringblocksEntry_.isPresent()) {
  91. plugin.getLogger().info("Lumbering: block is present");
  92. if (!isHarvesting){
  93. plugin.getLogger().info("Lumbering: player is not busy");
  94. GatheringBlocksEntry gatheringblocksEntry = gatheringblocksEntry_.get();
  95. int difficulty = gatheringblocksEntry.difficulty;
  96. int blockXP = gatheringblocksEntry.xp;
  97. String gatheringType = gatheringblocksEntry.type;
  98. ConfigurationNode nodeType = plugin.root.getNode(gatheringType, player.getUniqueId().toString());
  99. int level = nodeType.getNode("Level").getInt();
  100. int xp = nodeType.getNode("XP").getInt();
  101. Optional<ItemStack> playerTool_ = player.getItemInHand(HandTypes.MAIN_HAND);
  102. if (playerTool_.isPresent()){
  103. plugin.getLogger().info("Lumbering: Player has a tool");
  104. ItemStack playerTool = playerTool_.get();
  105. Optional<List<Text>> toolLore_ = playerTool.get(Keys.ITEM_LORE);
  106. if(toolLore_.isPresent()){
  107. plugin.getLogger().info("Lumbering: Tool has lore");
  108. List<Text> toolLore = toolLore_.get();
  109. for (Text lore : toolLore) {
  110. if (lore.toPlain().contains("Speed: ")){
  111. String speedLore = lore.toPlain().replace("Speed: ", "");
  112. toolSpeed += Integer.valueOf(speedLore);
  113. }
  114. if (lore.toPlain().contains("Durability: ")){
  115. String durabilityLore = lore.toPlain().replace("Durability: ", "");
  116. toolDurability += Integer.valueOf(durabilityLore);
  117. }
  118. }
  119. double tooldurabilityFinal = toolDurability/100;
  120. int toolspeedFinal = toolSpeed;
  121. Integer time = (1 - (level/100) + (difficulty/100) - (toolspeedFinal/100));
  122. Objective obj = Objective.builder()
  123. .criterion(Criteria.DUMMY)
  124. .name("timer")
  125. .displayName(Text.of(TextColors.DARK_BLUE, "[ ]"))
  126. .build();
  127. Scoreboard board = Scoreboard.builder()
  128. .objectives(ImmutableList.of(obj))
  129. .build();
  130. obj.getOrCreateScore(Text.of(player.getName())).setScore(0);
  131. player.setScoreboard(board);
  132. board.updateDisplaySlot(obj, DisplaySlots.SIDEBAR);
  133. boards.put(player.getUniqueId(), board);
  134. AtomicInteger integer = new AtomicInteger(10);
  135. plugin.getLogger().info("Lumbering: timer has started");
  136. tasks.put(id, Task.builder()
  137. .delay(time, TimeUnit.SECONDS)
  138. .interval(time, TimeUnit.SECONDS)
  139. .execute(() -> {
  140. if (player.getLocation().equals(playerLocation)) {
  141. iscraftingNode.setValue(true);
  142. plugin.saveConfig();
  143. char[] arr = new char[10];
  144. Arrays.fill(arr, 0, 11 - integer.getAndDecrement(), '|');
  145. obj.setDisplayName(Text.of(TextColors.DARK_BLUE, "[", String.valueOf(arr), "]"));
  146. if (integer.get() == 0) {
  147. obj.setDisplayName(Text.of(TextColors.DARK_BLUE, "[||||||||||]"));
  148. double random = rand.nextDouble();
  149. if (tooldurabilityFinal <= ((random - 0.15) + difficulty/150)) {
  150. player.sendMessage(Text.of("You failed at harvesting."));
  151. iscraftingNode.setValue(false);
  152. plugin.saveConfig();
  153. tasks.remove(id).cancel();
  154. boards.remove(id);
  155. //player.sendMessage(Text.of("Your tool broke while harvesting."));
  156. } else {
  157. List<RewardsEntry> rewards = gatheringblocksEntry.rewards;
  158. for (RewardsEntry reward : rewards) {
  159. ItemType rewardID = reward.type;
  160. String rewardName = reward.name;
  161. TextColor rewardColor = reward.color;
  162. List<String> rewardLore = reward.lore;
  163. int rewardQuantity = reward.quantity;
  164. TreeType treeType = reward.treeType;
  165. ItemStack rewardStack = ItemStack.of(rewardID, rewardQuantity);
  166. rewardStack.offer(Keys.DISPLAY_NAME, Text.of(rewardColor, rewardName));
  167. List<Text> rewardloreFinal = rewardLore.stream().map(TextSerializers.FORMATTING_CODE::deserialize).collect(Collectors.toList());
  168. rewardStack.offer(Keys.ITEM_LORE, rewardloreFinal);
  169. if (treeType != null){
  170. rewardStack.offer(Keys.TREE_TYPE, treeType);
  171. player.getInventory().offer(rewardStack);
  172. } else{
  173. player.getInventory().offer(rewardStack);
  174. }
  175. }
  176. BlockSnapshot block = event.getTargetBlock();
  177. node.getNode("Snapshot").setValue(block);
  178. node.getNode("Time").setValue(timeString);
  179. node.getNode("Location").setValue(block.getLocation().get());
  180. block.getLocation().get().setBlockType(BlockTypes.AIR, Cause.source(plugin).build());
  181. int rxp = (int) Math.round(100 * Math.exp(0.6931 * level));
  182. int fxp = xp + blockXP;
  183. if (fxp >= rxp){
  184. int newXP = fxp - rxp;
  185. int fLevel = level + 1;
  186. nodeType.getNode("XP").setValue(newXP);
  187. nodeType.getNode("Level").setValue(fLevel);
  188. player.sendMessage(Text.of("You gained one level."));
  189. iscraftingNode.setValue(false);
  190. plugin.saveConfig();
  191. } else {
  192. nodeType.getNode("XP").setValue(fxp);
  193. iscraftingNode.setValue(false);
  194. plugin.saveConfig();
  195. }
  196. tasks.remove(id).cancel();
  197. boards.remove(id);
  198. }
  199. }
  200. } else {
  201. player.sendMessage(Text.of("Don't move while harvesting."));
  202. iscraftingNode.setValue(false);
  203. plugin.saveConfig();
  204. tasks.remove(id).cancel();
  205. boards.remove(id);
  206. }
  207. })
  208. .submit(plugin));
  209. } else {
  210. plugin.getLogger().info("Lumbering: Why doesn't this tool have lore?");
  211. }
  212. }
  213. }
  214. }
  215. }
  216. //if (event.getTargetBlock().getState().getType().getName().equals("minecraft:log")){
  217. // BlockSnapshot block = event.getTargetBlock();
  218. // node.getNode("Snapshot").setValue(block);
  219. // node.getNode("Time").setValue(timeString);
  220. // String then_ = node.getNode("Time").getString();
  221. // Instant then = (Instant) formatter.parse(then_);
  222. // Duration timeElapsed = Duration.between(instant, then);
  223.  
  224.  
  225. // Location<World> blockLocation = block.getLocation().get();
  226. // blockLocation.setBlock(block.getState(), Cause.source(plugin).build());
  227. // }
  228. // player.sendMessage(Text.of("_______________________________________________________________"));
  229. //}
  230. }
  231. }
Advertisement
Add Comment
Please, Sign In to add comment