@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
	public void onSignChange(final SignChangeEvent event){
		Player player = event.getPlayer();
		Block block = event.getBlock();
		BlockState state = event.getBlock().getState();

		if (state instanceof Sign){
			Sign sign = (Sign)state;

			/* [PistonJump] 特殊看板 */

			if (event.getLine(0).toLowerCase().indexOf("[pistonjump]") != -1){
				// 権限チェック
				if (!player.hasPermission("pistonjump.placesign")){
					event.setLine(0, "§c[PistonJump]");
					event.setLine(1, "Perm Denied :(");
					Actions.message(null, player, "&cYou don't have permission to use this!");
					return;
				}
				// 権限あり 入力内容チェック
				else{
					boolean err = false; // エラーフラグ

					String line2s = event.getLine(1).trim();
					if (line2s.length() <= 0){
						Actions.message(null, player, "&aThe 2nd line is empty! Use default player ejection power!");
						event.setLine(1, String.format("%.1f", plugin.getConfigs().playerDefaultPower));
					}
					else if (!Util.isDouble(line2s)){
						Actions.message(null, player, "&cThe 2nd line must be numeric (double)!");
						err = true;
					}
					else{
						Double line2d = Double.parseDouble(line2s);
						if (line2d < 0.0D){
							Actions.message(null, player, "&cThe 2nd numeric cannot be negative! Changed to 0.0!");
							event.setLine(1, "0.0");
						}else if(line2d > 8.0D){
							Actions.message(null, player, "&cThe 2nd value is too big! Changed to max value!");
							event.setLine(1, "8.0");
						}
					}

					// 1行目の文字色
					if (err){
						event.setLine(0, "§c[PistonJump]");
					}else{
						event.setLine(0, "§a[PistonJump]");
					}
				}
			}
		}
	}