package me.km.effects; import me.km.KajetansMod; import java.util.ArrayList; import java.util.function.Consumer; import me.km.api.Location; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; public class EffectBlockChanger { private final World w; private final ArrayList list; public EffectBlockChanger(World w) { this.w = w; list = new ArrayList<>(); } public void addBlock(BlockPos pos, Block b, int s) { if(w.isAirBlock(pos)) { list.add(new ChangeBlock(pos, b, s)); } } public void addBlock(BlockPos pos, Block b) { addBlock(pos, b, 0); } public void run(int clean) { list.forEach(c -> c.run()); KajetansMod.scheduler.scheduleTask(() -> list.forEach(c -> c.clear()), clean); } public World getWorld() { return w; } public void forEachLocation(Consumer c) { list.stream().map(l -> new Location(w, l.pos)).forEach(c); } private class ChangeBlock { private BlockPos pos; private IBlockState state; public ChangeBlock(BlockPos pos, Block b, int s) { if(s != 0) { this.state = b.getStateFromMeta(s); } else { this.state = b.getDefaultState(); } this.pos = pos; } public ChangeBlock(BlockPos pos, Block b) { this(pos, b, 0); } public void run() { w.setBlockState(pos, state); } public void clear() { w.setBlockToAir(pos); } } }