LeaveDecay.java 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package me.km.effects.passive;
  2. import java.util.List;
  3. import me.km.KajetansMod;
  4. import me.km.api.Module;
  5. import me.km.api.ModuleListener;
  6. import me.km.api.Utils;
  7. import me.km.effects.Effect;
  8. import me.km.effects.EffectUtils;
  9. import me.km.utils.ItemStackBuilder;
  10. import net.minecraft.block.Block;
  11. import net.minecraft.block.state.IBlockState;
  12. import net.minecraft.entity.player.EntityPlayer;
  13. import net.minecraft.init.Blocks;
  14. import net.minecraft.util.math.BlockPos;
  15. import net.minecraft.world.World;
  16. import net.minecraftforge.event.world.BlockEvent;
  17. import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
  18. public class LeaveDecay extends ModuleListener
  19. {
  20. public LeaveDecay(Module m)
  21. {
  22. super(m);
  23. }
  24. @SubscribeEvent(receiveCanceled = false)
  25. public void onLeaveDecay(BlockEvent.HarvestDropsEvent e)
  26. {
  27. if(!KajetansMod.worldManager.getWorldPreferences(e.getWorld()).skills)
  28. {
  29. return;
  30. }
  31. IBlockState state = e.getState();
  32. Block b = state.getBlock();
  33. if(b == Blocks.LEAVES)
  34. {
  35. World w = e.getWorld();
  36. BlockPos pos = e.getPos();
  37. List<EntityPlayer> players = Utils.getNearbyPlayers(w, pos.getX(), pos.getY(), pos.getZ(), 15);
  38. int i = (int) players.stream().filter((p) -> Utils.randomInt(1, 25) <= EffectUtils.getEffectLevel(p, Effect.MORE_SAPLINGS)).count();
  39. if(i >= 1)
  40. {
  41. new ItemStackBuilder(Blocks.SAPLING, i, (Blocks.LEAVES.getMetaFromState(state) % 4)).drop(w, pos);
  42. }
  43. if(players.stream().anyMatch((p) -> Utils.randomInt(1, 25) <= EffectUtils.getEffectLevel(p, Effect.TREE_PICKER)))
  44. {
  45. Utils.dropRandomTreeItem(w, pos, state);
  46. }
  47. }
  48. else if(b == Blocks.LEAVES2)
  49. {
  50. World w = e.getWorld();
  51. BlockPos pos = e.getPos();
  52. List<EntityPlayer> players = Utils.getNearbyPlayers(w, pos.getX(), pos.getY(), pos.getZ(), 15);
  53. int i = (int) players.stream().filter((p) -> Utils.randomInt(1, 25) <= EffectUtils.getEffectLevel(p, Effect.MORE_SAPLINGS)).count();
  54. if(i >= 1)
  55. {
  56. new ItemStackBuilder(Blocks.SAPLING, i, (Blocks.LEAVES.getMetaFromState(state) % 4) + 4).drop(w, pos);
  57. }
  58. if(players.stream().anyMatch((p) -> Utils.randomInt(1, 25) <= EffectUtils.getEffectLevel(p, Effect.TREE_PICKER)))
  59. {
  60. Utils.dropRandomTreeItem(w, pos, state);
  61. }
  62. }
  63. }
  64. }