2015-11-29 18:49:36 +00:00
package me.TheBukor.effects ;
import javax.annotation.Nullable ;
import org.bukkit.Location ;
import org.bukkit.event.Event ;
import org.bukkit.inventory.ItemStack ;
import com.sk89q.worldedit.EditSession ;
import com.sk89q.worldedit.MaxChangedBlocksException ;
2015-12-12 20:17:45 +00:00
import com.sk89q.worldedit.WorldEditException ;
2015-11-29 18:49:36 +00:00
import com.sk89q.worldedit.bukkit.BukkitUtil ;
2015-12-05 00:35:39 +00:00
import com.sk89q.worldedit.function.pattern.BlockPattern ;
2015-12-12 20:17:45 +00:00
import com.sk89q.worldedit.function.pattern.RandomPattern ;
2015-12-05 00:35:39 +00:00
import com.sk89q.worldedit.patterns.Pattern ;
2015-11-29 18:49:36 +00:00
import ch.njol.skript.lang.Effect ;
import ch.njol.skript.lang.Expression ;
import ch.njol.skript.lang.SkriptParser.ParseResult ;
import ch.njol.util.Kleenean ;
@SuppressWarnings ( " deprecation " )
public class EffDrawLineWE extends Effect {
private Expression < Location > location1 ;
private Expression < Location > location2 ;
private Expression < EditSession > editSession ;
2015-12-12 20:17:45 +00:00
private Expression < ItemStack > blockList ;
2015-11-29 18:49:36 +00:00
private Expression < Double > thickness ;
private boolean filled = true ;
@SuppressWarnings ( " unchecked " )
@Override
2015-12-12 20:17:45 +00:00
public boolean init ( Expression < ? > [ ] expr , int matchedPattern , Kleenean arg2 , ParseResult result ) {
2015-11-29 18:49:36 +00:00
location1 = ( Expression < Location > ) expr [ 0 ] ;
location2 = ( Expression < Location > ) expr [ 1 ] ;
editSession = ( Expression < EditSession > ) expr [ 2 ] ;
2015-12-12 20:17:45 +00:00
blockList = ( Expression < ItemStack > ) expr [ 3 ] ;
2015-11-29 18:49:36 +00:00
thickness = ( Expression < Double > ) expr [ 4 ] ;
2015-12-12 20:17:45 +00:00
if ( result . mark = = 1 ) filled = false ;
2015-11-29 18:49:36 +00:00
return true ;
}
@Override
public String toString ( @Nullable Event e , boolean arg1 ) {
2015-12-12 20:17:45 +00:00
return " draw a line from " + location1 . toString ( e , false ) + " to " + location2 . toString ( e , false ) + " using an edit session with " + blockList . toString ( e , false ) + " and thickness " + thickness . toString ( e , false ) ;
2015-11-29 18:49:36 +00:00
}
@Override
protected void execute ( Event e ) {
Location pos1 = location1 . getSingle ( e ) ;
Location pos2 = location2 . getSingle ( e ) ;
EditSession session = editSession . getSingle ( e ) ;
2015-12-12 20:17:45 +00:00
ItemStack [ ] blocks = blockList . getAll ( e ) ;
2015-11-29 18:49:36 +00:00
Double thick = thickness . getSingle ( e ) ;
2015-12-12 20:17:45 +00:00
RandomPattern random = new RandomPattern ( ) ;
for ( ItemStack b : blocks ) {
if ( b . getType ( ) . isBlock ( ) ) {
try {
random . add ( new BlockPattern ( BukkitUtil . toBlock ( BukkitUtil . getLocalWorld ( pos1 . getWorld ( ) ) , b ) ) , 50 ) ;
} catch ( WorldEditException ex ) {
ex . printStackTrace ( ) ;
}
2015-11-29 18:49:36 +00:00
}
}
2015-12-12 20:17:45 +00:00
try {
session . drawLine ( ( Pattern ) random , BukkitUtil . toVector ( pos1 ) , BukkitUtil . toVector ( pos2 ) , thick , filled ) ;
session . flushQueue ( ) ;
} catch ( MaxChangedBlocksException ex ) {
return ;
}
2015-11-29 18:49:36 +00:00
}
}