I got an code that works fine there is only one problem with it it places a block in another block it needs to be on top of anotherblock someone know a solution to this (Sorry for my bad english xD) The Code Code:java package me.jay.jenavaopnamens.Rainbow; import me.jay.jenavaopnamens.wands.FireworkEffectPlayer;import me.jay.jenavaopnamens.wands.Main;import me.jay.jenavaopnamens.wands.Spell;import org.bukkit.Bukkit;import org.bukkit.Color;import org.bukkit.Effect;import org.bukkit.FireworkEffect;import org.bukkit.FireworkEffect.Builder;import org.bukkit.FireworkEffect.Type;import org.bukkit.Location;import org.bukkit.Material;import org.bukkit.Server;import org.bukkit.World;import org.bukkit.block.Block;import org.bukkit.block.BlockFace;import org.bukkit.entity.FallingBlock;import org.bukkit.entity.Player;import org.bukkit.scheduler.BukkitRunnable;import org.bukkit.scheduler.BukkitScheduler;import org.bukkit.util.Vector; public class SandBlockimplements Spell{boolean alBlock = false;Location bl = null;Location bl1 = null; public void castSpell(Player player){if (this.alBlock){this.bl1 = player.getTargetBlock(null, 50).getLocation();final FallingBlock block = player.getWorld().spawnFallingBlock(this.bl, Material.SANDSTONE, (byte)0);block.setDropItem(false);block.setVelocity(new Vector(0, 2, 0));this.bl.getBlock().setType(Material.AIR); Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable(){public void run(){block.setVelocity(new Vector(0, 0, 0));block.setVelocity(SandBlock.this.bl1.subtract(block.getLocation()).toVector().normalize().multiply(1));new BukkitRunnable(){public int timer = 0; public void run(){if (this.timer++ > 100) {cancel();}Location loc = block.getLocation();try{int id = 55;loc.getWorld().playEffect(loc, Effect.STEP_SOUND, Material.SAND);loc.getWorld().playEffect(loc, Effect.STEP_SOUND, Material.SAND);loc.getWorld().playEffect(loc, Effect.STEP_SOUND, Material.SAND);loc.getWorld().playEffect(loc, Effect.STEP_SOUND, Material.SAND);block.setDropItem(false);}catch (Exception e){e.printStackTrace();}if (!block.isValid()) {cancel();}}}.runTaskTimer(Main.plugin, 5L, 2L);}}, 20L); Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(Main.plugin, new Runnable(){public void run(){new BukkitRunnable(){public int timer = 0; public void run(){if (this.timer++ > 300) {cancel();}if ((!block.getLocation().add(0.0D, -2.0D, 0.0D).getBlock().getRelative(BlockFace.DOWN).getType().equals(Material.AIR)) && (!block.getLocation().add(0.0D, -2.0D, 0.0D).getBlock().getRelative(BlockFace.DOWN).getType().equals(Material.WATER))){block.setDropItem(false);block.getWorld().createExplosion(block.getLocation().getX(), block.getLocation().getY() + 1.0D, block.getLocation().getZ(), 2.0F, false, false);block.remove();cancel();}}}.runTaskTimer(Main.plugin, 1L, 1L);}}, 20L);}else if (!this.alBlock){this.bl = player.getTargetBlock(null, 50).getLocation();Player p = player;final Block bl = p.getTargetBlock(null, 50);bl.setType(Material.SANDSTONE);new BukkitRunnable(){public int timer = 0; public void run(){if (this.timer++ > 60) {cancel();}if (bl.getType() == Material.SANDSTONE){bl.getWorld().playEffect(bl.getLocation(), Effect.STEP_SOUND, Material.SANDSTONE.getId());}else{cancel();SandBlock.this.alBlock = false;}}}.runTaskTimer(Main.plugin, 1L, 5L);}this.alBlock = (!this.alBlock);}}
ProxyZ I will try to create an example for you maybe tonight or tomorrow. Just tahg me tomorrow at some point to remind me if I forget.
On line 91 try this: Code: if ((!block.getLocation().add(0.0D, -2.0D, 0.0D).getBlock().getRelative(BlockFace.DOWN).getType().equals(Material.AIR)) && (!block.getLocation().add(0.0D, -2.0D, 0.0D).getBlock().getRelative(BlockFace.DOWN).getType().equals(Material.WATER)) || !(block.getLocation().getBlock().getRelative(BlockFace.WEST).getType() == Material.AIR) || !(block.getLocation().getBlock().getRelative(BlockFace.NORTH).getType() == Material.AIR) || !(block.getLocation().getBlock().getRelative(BlockFace.EAST).getType() == Material.AIR) || !(block.getLocation().getBlock().getRelative(BlockFace.SOUTH).getType() == Material.AIR) )