Advertisement
Guest User

Untitled

a guest
May 3rd, 2014
244
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.99 KB | None | 0 0
  1. package eu.thegamecube.Physics.regen;
  2.  
  3. import java.util.List;
  4.  
  5. import org.bukkit.block.BlockState;
  6. import org.bukkit.scheduler.BukkitRunnable;
  7.  
  8. import eu.thegamecube.Physics.Physics;
  9. import eu.thegamecube.Physics.util.Utilities;
  10.  
  11. public class RegenTask extends BukkitRunnable {
  12.  
  13. private List<BlockState> blocks;
  14. private int delayBetween;
  15.  
  16. public RegenTask(List<BlockState> blocks, int delayBetween,
  17. long delayToStart) {
  18. Physics.log("Scheduling "
  19. + blocks.size()
  20. + " Blocks for regeneration. Please do not shut down the server, or reload it.");
  21. this.blocks = blocks;
  22. this.delayBetween = delayBetween;
  23. runTaskLater(Physics.getInstance(), delayToStart);
  24. }
  25.  
  26. @Override
  27. public void run() {
  28. Physics.log("Regenerating " + blocks.size() + " Blocks.");
  29. Utilities.regen(blocks, true, delayBetween);
  30. }
  31.  
  32. }
  33. //////////////////// different class ////////////////////
  34. package eu.thegamecube.Physics.util;
  35.  
  36. import java.util.ArrayList;
  37. import java.util.List;
  38. import java.util.Random;
  39.  
  40. import org.bukkit.Bukkit;
  41. import org.bukkit.Effect;
  42. import org.bukkit.block.BlockState;
  43. import org.bukkit.scheduler.BukkitRunnable;
  44. import org.bukkit.util.Vector;
  45.  
  46. import eu.thegamecube.Physics.Physics;
  47.  
  48. /**
  49. * @author TryB4
  50. */
  51. public class Utilities {
  52.  
  53. private static List<BlockState> waiting = new ArrayList<BlockState>();
  54. private static List<Integer> tasks = new ArrayList<Integer>();
  55.  
  56. /**
  57. * Taken from
  58. * http://forums.bukkit.org/threads/lib-regenerating-blocks.209765/
  59. */
  60. public static void regen(final List<BlockState> blocks,
  61. final boolean effect, final int speed) {
  62. for (BlockState blockState : blocks) {
  63. waiting.add(blockState);
  64. }
  65. tasks.add(new BukkitRunnable() {
  66. int i = -1;
  67.  
  68. @SuppressWarnings("deprecation")
  69. public void run() {
  70. if (i != blocks.size() - 1) {
  71. i++;
  72. BlockState bs = blocks.get(i);
  73. bs.getBlock().setType(bs.getType());
  74. bs.getBlock().setData(bs.getData().getData());
  75. if (effect)
  76. bs.getBlock()
  77. .getWorld()
  78. .playEffect(bs.getLocation(),
  79. Effect.STEP_SOUND,
  80. bs.getBlock().getType());
  81.  
  82. if (waiting.contains(bs))
  83. waiting.remove(bs);
  84.  
  85. } else {
  86. for (BlockState bs : blocks) {
  87. bs.getBlock().setType(bs.getType());
  88. bs.getBlock().setData(bs.getBlock().getData());
  89. }
  90. blocks.clear();
  91. Physics.log("Successfully regenerated a total of "
  92. + (i + 1) + " Blocks.");
  93. this.cancel();
  94. }
  95. }
  96. }.runTaskTimer(Physics.getInstance(), speed, speed).getTaskId());
  97. }
  98. @SuppressWarnings("deprecation")
  99. /**
  100. * Incase the server stops during regeneration proccess.
  101. */
  102. public static void regenAll() {
  103. for (BlockState state : waiting) {
  104. state.getBlock().setType(state.getType());
  105. state.getBlock().setData(state.getData().getData());
  106. }
  107. for (Integer i : tasks) {
  108. Bukkit.getScheduler().cancelTask(i);
  109. }
  110. tasks.clear();
  111. waiting.clear();
  112. tasks = null;
  113. waiting = null;
  114. }
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement