- Баллы
- 78
- Имя в Minecraft
- MYXOMOPX
Пожалуйста. (код также лежит на pastebin)Можно ли на этом плагин сделать аномалии как в сталкере? А именно: игрок наступает на какой-нибудь блок, сверху блока появляется огонь, как от зажигалки, или же простой урон.
Код:
import org.bukkit.Bukkit
import org.bukkit.Location
import org.bukkit.Material
import org.bukkit.block.Block
import org.bukkit.block.BlockFace
import org.bukkit.command.Command
import org.bukkit.command.CommandSender
import org.bukkit.entity.Player
import org.bukkit.event.player.PlayerMoveEvent
import org.yaml.snakeyaml.DumperOptions
import org.yaml.snakeyaml.Yaml
import java.util.logging.Level
List<Block> traps = []
Yaml yaml = new Yaml(new DumperOptions(defaultFlowStyle: DumperOptions.FlowStyle.BLOCK))
File playerStatsFile = new File(workspace.directory,"traps.yml")
/** При старте загружаем все статы из файла **/
playerStatsFile.createNewFile()
playerStatsFile.withInputStream {
try {
List<HashMap<String,Object>> loadedList = yaml.load(it) as List<HashMap<String,Object>>;
loadedList.each { HashMap<String,Object> el ->
traps.add(new Location(Bukkit.getWorld(el.world as String),
el.x as double,
el.y as double,
el.z as double)
.block) ;
};
}catch (ignored){
Bukkit.getLogger().log(Level.WARNING,"[Traps] Can't load traps file!",ignored)
workspace.stop()
}
}
workspace.addFinisher({
List<HashMap<String,Object>> listToSave = []
traps.each {
listToSave.add([x:it.location.x,y:it.location.y,z:it.location.z,world:it.location.world.name])
}
playerStatsFile.withOutputStream {
String dump = yaml.dump(listToSave)
try {
it.write(dump.getBytes("UTF8"))
} catch (ignored) {
Bukkit.getLogger().log(Level.WARNING,"[Traps] Can't save traps to file!",ignored)
}
}
})
List<Player> damagedPalyers = [];
workspace.addEvent({PlayerMoveEvent event ->
if(damagedPalyers.contains(event.player) && !(traps.contains(event.to.block))){
damagedPalyers.remove(event.player)
return
}
if(traps.contains(event.to.block) && !(damagedPalyers.contains(event.player))){
Player plr = event.player
plr.setFireTicks(20*7)
damagedPalyers.add(plr)
plr.sendMessage("\u00A74You been trapped!")
}
},PlayerMoveEvent)
workspace.addCommand("addtrap",{ CommandSender commandSender, Command command, String s, String[] strings ->
if(!(commandSender instanceof Player)) return false;
Player player = commandSender
if(!player.hasPermission("trap.add")){
player.sendMessage("\u00A74You have not permissions!")
return true;
}
Block bl = player.getTargetBlock(null,10)
if(bl == null){
player.sendMessage("\u00A74Block not selected!")
return true;
}
bl = bl.getRelative(BlockFace.UP)
if(traps.contains(bl)){
player.sendMessage("\u00A76This block already have trap!")
return true;
}
traps.add(bl)
player.sendMessage("\u00A7aTrap successful created!")
return true;
})
workspace.addCommand("removetrap",{ CommandSender commandSender, Command command, String s, String[] strings ->
if(!(commandSender instanceof Player)) return false;
Player player = commandSender
if(!player.hasPermission("trap.remove")){
player.sendMessage("\u00A74You have not permissions!")
return true;
}
Block bl = player.getTargetBlock(null,10)
if(bl == null){
player.sendMessage("\u00A74Block not selected!")
return true;
}
bl = bl.getRelative(BlockFace.UP)
if(traps.contains(bl)) {
player.sendMessage("\u00A7aTrap successful removed!")
traps.remove(bl);
}else {
player.sendMessage("\u00A76This block not trapped!")
}
return true
})
(при отсутствии какой-либо директории - создать ее)
Для добавления ловушки команда: /addtrap
Для удаления - /removetrap
В обоих случаях берется блок на 1 выше чем тот, на который смотрит игрок.
Пермиты:
trap.add - для добавления ловушки
trap.remove - для удаление ловушки
Все ловушки хранятся в traps.yml
Если будет в консоль вываливаться "[Traps] Can't load traps file!" - думаю поможет удалить этот файл.
Если будет в консоль вываливаться "[Traps] Can't load traps file!" - думаю поможет удалить этот файл.
"
