BlockExplosion.java 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package me.km.effects.active;
  2. import me.km.KajetansMod;
  3. import me.km.effects.ActiveEffectBase;
  4. import me.km.effects.EffectAirBlockChanger;
  5. import me.km.effects.EffectUtils;
  6. import net.minecraft.entity.item.EntityItem;
  7. import net.minecraft.entity.player.EntityPlayerMP;
  8. import net.minecraft.init.Blocks;
  9. import net.minecraft.item.ItemStack;
  10. import net.minecraft.util.EnumParticleTypes;
  11. import net.minecraft.util.math.BlockPos;
  12. import net.minecraft.world.WorldServer;
  13. public class BlockExplosion extends ActiveEffectBase
  14. {
  15. @Override
  16. protected boolean executeEffect(EntityPlayerMP p, int power)
  17. {
  18. WorldServer w = p.getServerWorld();
  19. EntityItem item = new EntityItem(w, p.posX, p.posY, p.posZ, new ItemStack(Blocks.TNT));
  20. item.setInfinitePickupDelay();
  21. w.spawnEntity(item);
  22. BlockPos mid = p.getPosition();
  23. EffectAirBlockChanger e = new EffectAirBlockChanger(w);
  24. power = Math.max(0, Math.min(power, 6));
  25. int radius2 = power * power;
  26. for(int x = -power; x <= power; x++)
  27. {
  28. for(int y = -power; y <= power; y++)
  29. {
  30. for(int z = -power; z <= power; z++)
  31. {
  32. if(x * x + y * y + z * z <= radius2)
  33. {
  34. e.addBlock(mid.add(x, y, z));
  35. }
  36. }
  37. }
  38. }
  39. KajetansMod.scheduler.scheduleTask(() ->
  40. {
  41. item.setDead();
  42. EffectUtils.spawnParticle(w, EnumParticleTypes.EXPLOSION_LARGE, item, 1);
  43. e.run(300);
  44. }, 60);
  45. return true;
  46. }
  47. }