EffectBlockChanger.java 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package me.km.effects;
  2. import me.km.KajetansMod;
  3. import java.util.ArrayList;
  4. import java.util.function.Consumer;
  5. import me.km.api.Location;
  6. import net.minecraft.block.Block;
  7. import net.minecraft.block.state.IBlockState;
  8. import net.minecraft.util.math.BlockPos;
  9. import net.minecraft.world.World;
  10. public class EffectBlockChanger
  11. {
  12. private final World w;
  13. private final ArrayList<ChangeBlock> list;
  14. public EffectBlockChanger(World w)
  15. {
  16. this.w = w;
  17. list = new ArrayList<>();
  18. }
  19. public void addBlock(BlockPos pos, Block b, int s)
  20. {
  21. if(w.isAirBlock(pos))
  22. {
  23. list.add(new ChangeBlock(pos, b, s));
  24. }
  25. }
  26. public void addBlock(BlockPos pos, Block b)
  27. {
  28. addBlock(pos, b, 0);
  29. }
  30. public void run(int clean)
  31. {
  32. list.forEach(c -> c.run());
  33. KajetansMod.scheduler.scheduleTask(() -> list.forEach(c -> c.clear()), clean);
  34. }
  35. public World getWorld()
  36. {
  37. return w;
  38. }
  39. public void forEachLocation(Consumer<? super Location> c)
  40. {
  41. list.stream().map(l -> new Location(w, l.pos)).forEach(c);
  42. }
  43. private class ChangeBlock
  44. {
  45. private BlockPos pos;
  46. private IBlockState state;
  47. public ChangeBlock(BlockPos pos, Block b, int s)
  48. {
  49. if(s != 0)
  50. {
  51. this.state = b.getStateFromMeta(s);
  52. }
  53. else
  54. {
  55. this.state = b.getDefaultState();
  56. }
  57. this.pos = pos;
  58. }
  59. public ChangeBlock(BlockPos pos, Block b)
  60. {
  61. this(pos, b, 0);
  62. }
  63. public void run()
  64. {
  65. w.setBlockState(pos, state);
  66. }
  67. public void clear()
  68. {
  69. w.setBlockToAir(pos);
  70. }
  71. }
  72. }