diff --git a/src/main/java/de/fanta/challenges/Challenges.java b/src/main/java/de/fanta/challenges/Challenges.java index 455dc51..ebf8a81 100644 --- a/src/main/java/de/fanta/challenges/Challenges.java +++ b/src/main/java/de/fanta/challenges/Challenges.java @@ -217,12 +217,6 @@ } } - File texturepackdownload = new File("/var/www/html/AdventureMap-TexturePacks/" + texturepackid); - if (texturepackdownload.isDirectory()) { - System.out.println("Delete File " + texturepackdownload.getAbsolutePath()); - texturepackdownload.delete(); - } - saveConfig(); getLogger().info("Plugin unloaded"); } @@ -354,6 +348,14 @@ resetTaskId = -1; } + public void delteTexturePack() { + File texturepackdownload = new File("/var/www/html/AdventureMap-TexturePacks/" + texturepackid); + if (texturepackdownload.isDirectory()) { + System.out.println("Delete File " + texturepackdownload.getAbsolutePath()); + texturepackdownload.delete(); + } + } + public Timer getTimer() { return timer; } diff --git a/src/main/java/de/fanta/challenges/challenges/RandomEffectChallenge.java b/src/main/java/de/fanta/challenges/challenges/RandomEffectChallenge.java new file mode 100644 index 0000000..113bf8a --- /dev/null +++ b/src/main/java/de/fanta/challenges/challenges/RandomEffectChallenge.java @@ -0,0 +1,45 @@ +package de.fanta.challenges.challenges; + +import de.fanta.challenges.Challenges; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Random; + +public class RandomEffectChallenge implements Listener { + + private final Challenges plugin = Challenges.getPlugin(); + + private final HashMap chunkPotionEffectMap = new HashMap<>(); + private final HashMap playerPotionEffectMap = new HashMap<>(); + + @EventHandler + public void onPlayerMove(PlayerMoveEvent e) { + if (plugin.getConfig().getBoolean("randomeffect")) { + if (plugin.getTimer().isRunning()) { + Player p = e.getPlayer(); + long chunkkey = p.getLocation().getChunk().getChunkKey(); + Random random = new Random(); + PotionEffectType[] values = Arrays.stream(PotionEffectType.values()).filter(effect -> (!effect.equals(PotionEffectType.HARM))).toArray(PotionEffectType[]::new); + PotionEffect randomEffect = new PotionEffect(values[random.nextInt((int) Arrays.stream(values).count())], 999999, random.nextInt(1 + 4) + 1 - 1); + if (!chunkPotionEffectMap.containsKey(chunkkey)) { + chunkPotionEffectMap.put(chunkkey, randomEffect); + } + if (chunkPotionEffectMap.get(chunkkey) != playerPotionEffectMap.get(p)) { + if (playerPotionEffectMap.get(p) != null) { + p.removePotionEffect(playerPotionEffectMap.get(p).getType()); + } + p.addPotionEffect(chunkPotionEffectMap.get(chunkkey)); + playerPotionEffectMap.put(p, chunkPotionEffectMap.get(chunkkey)); + } + + } + } + } +} diff --git a/src/main/java/de/fanta/challenges/commands/CommandRegistration.java b/src/main/java/de/fanta/challenges/commands/CommandRegistration.java index b3069a3..0a4906c 100644 --- a/src/main/java/de/fanta/challenges/commands/CommandRegistration.java +++ b/src/main/java/de/fanta/challenges/commands/CommandRegistration.java @@ -7,6 +7,7 @@ import de.fanta.challenges.commands.challenges.ChallengesMemoryCommand; import de.fanta.challenges.commands.challenges.ChallengesPingCommand; import de.fanta.challenges.commands.challenges.ChallengesSaveCommand; +import de.fanta.challenges.commands.challenges.ChallengesSpeedCommand; import de.fanta.challenges.commands.coords.CoordsCommand; import de.fanta.challenges.commands.coords.CoordsDeleteCommand; import de.fanta.challenges.commands.coords.CoordsGetCommand; @@ -47,6 +48,7 @@ challengesRouter.addCommandMapping(new ChallengesSaveCommand(plugin), "save"); challengesRouter.addCommandMapping(new ChallengesPingCommand(), "ping"); challengesRouter.addCommandMapping(new ChallengesMemoryCommand(plugin), "mem"); + challengesRouter.addCommandMapping(new ChallengesSpeedCommand(), "speed"); CommandRouter resetRouter = new CommandRouter(plugin.getCommand("reset")); resetRouter.addCommandMapping(new ResetCommand(plugin)); diff --git a/src/main/java/de/fanta/challenges/commands/challenges/ChallengesSaveCommand.java b/src/main/java/de/fanta/challenges/commands/challenges/ChallengesSaveCommand.java index 62ade08..517967e 100644 --- a/src/main/java/de/fanta/challenges/commands/challenges/ChallengesSaveCommand.java +++ b/src/main/java/de/fanta/challenges/commands/challenges/ChallengesSaveCommand.java @@ -58,7 +58,7 @@ String next = args.getNext(); ChatUtil.sendNormalMessage(sender, "Welt wird gespeichert!"); try { - SaveWorldUtils.saveWorld(next); + SaveWorldUtils.saveWorld(next.toLowerCase()); } catch (Exception ex) { Bukkit.getLogger().log(Level.SEVERE, "Could not save world ", ex); ChatUtil.sendErrorMessage(sender, "Welt konnte nicht gespeichert werden!"); diff --git a/src/main/java/de/fanta/challenges/commands/challenges/ChallengesSpeedCommand.java b/src/main/java/de/fanta/challenges/commands/challenges/ChallengesSpeedCommand.java new file mode 100644 index 0000000..de61796 --- /dev/null +++ b/src/main/java/de/fanta/challenges/commands/challenges/ChallengesSpeedCommand.java @@ -0,0 +1,48 @@ +package de.fanta.challenges.commands.challenges; + +import com.google.common.primitives.Doubles; +import de.fanta.challenges.utils.ChatUtil; +import de.iani.cubesideutils.bukkit.commands.SubCommand; +import de.iani.cubesideutils.commands.ArgsParser; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +public class ChallengesSpeedCommand extends SubCommand { + public ChallengesSpeedCommand() { + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String alias, String commandString, ArgsParser args) { + if (!(sender instanceof Player p)) { + ChatUtil.sendErrorMessage(sender, "You are not a Player :>"); + return true; + } + if (!p.hasPermission("Challenges.editor.override")) { + ChatUtil.sendErrorMessage(p, "Keine rechte"); + return true; + } + + if (args.hasNext()) { + String next = args.getNext(); + if (Doubles.tryParse(next) != null) { + float speed; + if (!next.equals("10")) { + speed = Doubles.tryParse("0." + next).floatValue(); + } else { + speed = Doubles.tryParse("1").floatValue(); + } + + if (p.isFlying()) { + p.setFlySpeed(speed); + } else { + p.setWalkSpeed(speed); + } + } + + } else { + ChatUtil.sendWarningMessage(p, "/challneges speed 0 - 10"); + } + return true; + } +} diff --git a/src/main/java/de/fanta/challenges/commands/reset/ResetConfirmCommand.java b/src/main/java/de/fanta/challenges/commands/reset/ResetConfirmCommand.java index 636f2a4..120a4dc 100644 --- a/src/main/java/de/fanta/challenges/commands/reset/ResetConfirmCommand.java +++ b/src/main/java/de/fanta/challenges/commands/reset/ResetConfirmCommand.java @@ -71,6 +71,7 @@ p.sendTitle(ChatColor.of("#0ddead") + "Server wird gestoppt!", ChatColor.RED + "Bitte warte einen Moment" + ChatColor.of("#0ddead") + "." + ChatColor.AQUA + "." + ChatColor.YELLOW + ".", 10, 220, 10); GlobalApi.portOnlinePlayerToLocation(p.getName(), "adventure"); } + plugin.delteTexturePack(); } plugin.getConfig().set("World_Name", Bukkit.getWorlds().get(0).getName()); plugin.getConfig().set("World_Reset", true); diff --git a/src/main/java/de/fanta/challenges/guis/settingsgui/ServerSettingsGui.java b/src/main/java/de/fanta/challenges/guis/settingsgui/ServerSettingsGui.java index 4f2dfdc..ccdf9ef 100644 --- a/src/main/java/de/fanta/challenges/guis/settingsgui/ServerSettingsGui.java +++ b/src/main/java/de/fanta/challenges/guis/settingsgui/ServerSettingsGui.java @@ -26,6 +26,7 @@ private static final int PVP_INDEX = 16; private static final int BACK_INDEX = 18; private static final int CLOSE_INDEX = 26; + private static final int ULTRA_HARDCORE_INDEX = 13; private static final int ONE_LIFE_INDEX = 14; private static final int RESPAWN_INDEX = 15; @@ -54,6 +55,11 @@ } else { SERVER_SETTINGS_GUI.setItem(RESPAWN_INDEX, GUIUtils.createGuiItem(Material.TOTEM_OF_UNDYING, ChatColor.RED + "Wiederbeleben deaktiviert")); } + if (plugin.getConfig().getBoolean("ultrahardcore")) { + SERVER_SETTINGS_GUI.setItem(ULTRA_HARDCORE_INDEX, GUIUtils.createGuiItem(Material.SUSPICIOUS_STEW, ChatColor.GREEN + "Ultra Hardcore aktiviert", true)); + } else { + SERVER_SETTINGS_GUI.setItem(ULTRA_HARDCORE_INDEX, GUIUtils.createGuiItem(Material.SUSPICIOUS_STEW, ChatColor.RED + "Ultra Hardcore deaktiviert")); + } if (plugin.getServer().getWorld("world").getGameRuleValue(GameRule.KEEP_INVENTORY)) { SERVER_SETTINGS_GUI.setItem(KEEP_INVENTORY_INDEX, GUIUtils.createGuiItem(Material.CHEST_MINECART,ChatColor.GREEN + "Keep Inventory aktiviert", true)); } else { @@ -135,6 +141,15 @@ GUIUtils.sendTitleToAll("Server Einstellungen", "Wiederbeleben aktiviert", ChatColor.GREEN); } break; + case ULTRA_HARDCORE_INDEX: + if (plugin.getConfig().getBoolean("ultrahardcore")) { + GUIUtils.setConfig("ultrahardcore", false); + GUIUtils.sendTitleToAll("Server Einstellungen", "Ultra Hardcore deaktiviert", ChatColor.RED); + } else { + GUIUtils.setConfig("ultrahardcore", true); + GUIUtils.sendTitleToAll("Server Einstellungen", "Ultra Hardcore aktiviert", ChatColor.GREEN); + } + break; case KEEP_INVENTORY_INDEX: if (plugin.getServer().getWorld("world").getGameRuleValue(GameRule.KEEP_INVENTORY)) { plugin.getServer().getWorld("world").setGameRule(GameRule.KEEP_INVENTORY, false); diff --git a/src/main/java/de/fanta/challenges/guis/settingsgui/SettingsGui.java b/src/main/java/de/fanta/challenges/guis/settingsgui/SettingsGui.java index 3780ea7..f1c4923 100644 --- a/src/main/java/de/fanta/challenges/guis/settingsgui/SettingsGui.java +++ b/src/main/java/de/fanta/challenges/guis/settingsgui/SettingsGui.java @@ -30,12 +30,13 @@ private static final int DEATH_ON_SPRINT_INDEX = 39; private static final int DEATH_ON_JUMP_INDEX = 40; private static final int CLEANR_INV_BY_DAMAGE_INDEX = 41; - private static final int MLG_INDEX = 30; + private static final int MLG_INDEX = 31; private static final int RANDOM_DROP_INDEX = 8; private static final int SHUFFLE_RANDOM_DROP_INDEX = 17; private static final int TARGET_INDEX = 4; private static final int SHARE_DMG_INDEX = 28; private static final int LAVA_FLOOR_INDEX = 29; + private static final int CHUNK_RANDOM_EFFEKT_INDEX = 30; private static final int TIED_TOGETHER_INDEX = 42; private static final int RANGE_ON_TIED_TOGETHER_ADD_INDEX = 33; @@ -116,6 +117,11 @@ } else { SETTINGS_GUI.setItem(LAVA_FLOOR_INDEX, GUIUtils.createGuiItem(Material.MAGMA_BLOCK, ChatColor.RED + "Der Boden ist Lava deaktiviert")); } + if (plugin.getConfig().getBoolean("randomeffect")) { + SETTINGS_GUI.setItem(CHUNK_RANDOM_EFFEKT_INDEX, GUIUtils.createGuiItem(Material.SPLASH_POTION, ChatColor.GREEN + "Chunk Random Effekt aktiviert", true)); + } else { + SETTINGS_GUI.setItem(CHUNK_RANDOM_EFFEKT_INDEX, GUIUtils.createGuiItem(Material.SPLASH_POTION, ChatColor.RED + "Chunk Random Effekt deaktiviert")); + } if (plugin.getConfig().getBoolean("tiedtogether")) { SETTINGS_GUI.setItem(TIED_TOGETHER_INDEX, GUIUtils.createGuiItem(Material.DIAMOND_BOOTS, ChatColor.GREEN + "Zusammengebunden aktiviert", true, ChatColor.GREEN + "Maximale Entfernung der Spieler: " + plugin.getConfig().getDouble("playerrange"))); SETTINGS_GUI.setItem(RANGE_ON_TIED_TOGETHER_ADD_INDEX, CustomHeads.QUARTZ_ARROW_UP.getHead()); @@ -275,6 +281,15 @@ GUIUtils.sendTitleToAll("Challenge", "Der Boden ist Lava aktiviert", ChatColor.GREEN); } break; + case CHUNK_RANDOM_EFFEKT_INDEX: + if (plugin.getConfig().getBoolean("randomeffect")) { + GUIUtils.setConfig("randomeffect", false); + GUIUtils.sendTitleToAll("Challenge", "Chunk Random Effekt deaktiviert", ChatColor.RED); + } else { + GUIUtils.setConfig("randomeffect", true); + GUIUtils.sendTitleToAll("Challenge", "Chunk Random Effekt aktiviert", ChatColor.GREEN); + } + break; case TIED_TOGETHER_INDEX: if (plugin.getConfig().getBoolean("tiedtogether")) { GUIUtils.setConfig("tiedtogether", false); diff --git a/src/main/java/de/fanta/challenges/listeners/DamageListener.java b/src/main/java/de/fanta/challenges/listeners/DamageListener.java index 25efefa..45f9d4a 100644 --- a/src/main/java/de/fanta/challenges/listeners/DamageListener.java +++ b/src/main/java/de/fanta/challenges/listeners/DamageListener.java @@ -39,17 +39,17 @@ if (e.getEntity() instanceof Player p) { String dmg = new DecimalFormat("#.##").format(e.getFinalDamage()); - if (e.getFinalDamage() > 0) { + if ((e.getFinalDamage() > 0) && (e.getFinalDamage() < 10000)) { if (e.getCause() == DamageCause.FALL) { if (plugin.getConfig().getBoolean("deathonfall")) { if (plugin.getConfig().getBoolean("dmginchat")) { - if (!e.getCause().name().equals("ENTITY_ATTACK")) { + if (!e.getCause().name().startsWith("ENTITY_")) { ChatUtil.sendBrodcastMessage(ChatUtil.BLUE + p.getName() + ChatUtil.GREEN + " hat " + ChatUtil.ORANGE + dmg + ChatUtil.GREEN + " HP Schaden genommen durch " + ChatUtil.ORANGE + e.getCause()); } } Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> p.setHealth(0), 1); } else if (plugin.getConfig().getBoolean("dmginchat")) { - if (!e.getCause().name().equals("ENTITY_ATTACK")) { + if (!e.getCause().name().startsWith("ENTITY_")) { ChatUtil.sendBrodcastMessage(ChatUtil.BLUE + p.getName() + ChatUtil.GREEN + " hat " + ChatUtil.ORANGE + dmg + ChatUtil.GREEN + " HP Schaden genommen durch " + ChatUtil.ORANGE + e.getCause()); } @@ -59,7 +59,7 @@ ChatUtil.sendBrodcastMessage(ChatUtil.BLUE + p.getName() + ChatUtil.GREEN + " hat " + ChatUtil.ORANGE + plugin.getConfig().getDouble("sneakdmg") + ChatUtil.GREEN + " HP Schaden genommen durch" + ChatUtil.ORANGE + " Server"); } } else if (plugin.getConfig().getBoolean("dmginchat")) { - if (!e.getCause().name().equals("ENTITY_ATTACK")) { + if (!e.getCause().name().startsWith("ENTITY_")) { ChatUtil.sendBrodcastMessage(ChatUtil.BLUE + p.getName() + ChatUtil.GREEN + " hat " + ChatUtil.ORANGE + dmg + ChatUtil.GREEN + " HP Schaden genommen durch " + ChatUtil.ORANGE + e.getCause()); } diff --git a/src/main/java/de/fanta/challenges/listeners/EventRegistration.java b/src/main/java/de/fanta/challenges/listeners/EventRegistration.java index 0a6a06e..43e8e75 100644 --- a/src/main/java/de/fanta/challenges/listeners/EventRegistration.java +++ b/src/main/java/de/fanta/challenges/listeners/EventRegistration.java @@ -1,6 +1,7 @@ package de.fanta.challenges.listeners; import de.fanta.challenges.Challenges; +import de.fanta.challenges.challenges.RandomEffectChallenge; import de.fanta.challenges.guis.ResetGui; import de.fanta.challenges.guis.TimerGui; import de.fanta.challenges.guis.eventgui.EventGui; @@ -35,5 +36,6 @@ pM.registerEvents(new EventItemsGui(), plugin); pM.registerEvents(new FurnaceListener(), plugin); pM.registerEvents(new CommandBlockListener(), plugin); + pM.registerEvents(new RandomEffectChallenge(), plugin); } } diff --git a/src/main/java/de/fanta/challenges/listeners/PlayerListener.java b/src/main/java/de/fanta/challenges/listeners/PlayerListener.java index a97573a..61bb190 100644 --- a/src/main/java/de/fanta/challenges/listeners/PlayerListener.java +++ b/src/main/java/de/fanta/challenges/listeners/PlayerListener.java @@ -7,19 +7,26 @@ import de.fanta.challenges.guis.eventgui.EventItemsGui; import de.fanta.challenges.utils.ChatUtil; import org.bukkit.Bukkit; +import org.bukkit.Effect; import org.bukkit.GameMode; +import org.bukkit.GameRule; import org.bukkit.Location; import org.bukkit.Material; +import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.event.entity.EntityPotionEffectEvent; +import org.bukkit.event.entity.EntityRegainHealthEvent; import org.bukkit.event.entity.EntityTargetLivingEntityEvent; import org.bukkit.event.entity.FoodLevelChangeEvent; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.player.*; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; import org.bukkit.scheduler.BukkitRunnable; import org.kitteh.vanish.event.VanishStatusChangeEvent; import org.spigotmc.event.player.PlayerSpawnLocationEvent; @@ -61,15 +68,18 @@ if (bingo.isRunning()) { bingo.addDiscoveredItem(player, itemStack); } + if (!plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL) { + e.setCancelled(true); + } } - @SuppressWarnings("deprecation") +/* @SuppressWarnings("deprecation") //TODO Geht das jetzt auch ohne ? @EventHandler public void onPickItem(PlayerPickupItemEvent e) { if (!plugin.getTimer().isRunning() && e.getPlayer().getGameMode() == GameMode.SURVIVAL) { e.setCancelled(true); } - } + }*/ @EventHandler public void onDropItem(PlayerDropItemEvent e) { @@ -234,4 +244,37 @@ } Bukkit.getPluginManager().callEvent(new PlayerCountChangedEvent(Bukkit.getOnlinePlayers().size() - plugin.getVanish().countVanishPlayers())); } + + @EventHandler + public void onHealing(EntityRegainHealthEvent e) { + if (plugin.getConfig().getBoolean("ultrahardcore")) { + e.setCancelled(true); + } + } + + @EventHandler + public void onEat(PlayerItemConsumeEvent e) { + if (plugin.getConfig().getBoolean("ultrahardcore")) { + if (e.getItem().getType() == Material.ENCHANTED_GOLDEN_APPLE || e.getItem().getType() == Material.GOLDEN_APPLE) { + e.setCancelled(true); + ChatUtil.sendErrorMessage(e.getPlayer(), "Goldäpfel sind in Ultra Hardcore nicht erlaubt!"); + } + } + } + + @EventHandler + public void onDamage(EntityDamageEvent e) { + if (e.getEntity() instanceof Player p) { + if (plugin.getConfig().getBoolean("deathrun")) { + Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, () -> { + ChatUtil.sendDebugMessage(p, (float) (p.getHealth() / 100f)); + p.setWalkSpeed((float) (p.getHealth() / 100f)); + }, 1L); + } + } + } + + @EventHandler + public void onEffekt(EntityPotionEffectEvent e) { + } } diff --git a/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java b/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java index 6eb8d12..e3f6ff7 100644 --- a/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java +++ b/src/main/java/de/fanta/challenges/listeners/QuitJoinListener.java @@ -96,12 +96,12 @@ public void onPlayerQuit(PlayerQuitEvent e) { Player player = e.getPlayer(); - if (Bukkit.getOnlinePlayers().size() - plugin.getVanish().countVanishPlayers() == 0) { + if (Bukkit.getOnlinePlayers().size() - 1 == 0) { plugin.getTimer().stopTimer(); Challenges.LOGGER.info("Stop Timer " + (Bukkit.getOnlinePlayers().size() - plugin.getVanish().countVanishPlayers())); } - if (Bukkit.getServer().getOnlinePlayers().size() == 0) { + if (Bukkit.getServer().getOnlinePlayers().size() - 1 == 0) { plugin.startResetTask(); Challenges.LOGGER.info("Player Reset Task " + (Bukkit.getServer().getOnlinePlayers().size())); } diff --git a/src/main/java/de/fanta/challenges/utils/ChatUtil.java b/src/main/java/de/fanta/challenges/utils/ChatUtil.java index f6c36d9..0543969 100644 --- a/src/main/java/de/fanta/challenges/utils/ChatUtil.java +++ b/src/main/java/de/fanta/challenges/utils/ChatUtil.java @@ -4,6 +4,7 @@ import de.iani.cubesideutils.bukkit.ChatUtilBukkit; import net.md_5.bungee.api.ChatColor; import org.bukkit.Bukkit; +import org.bukkit.Color; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -34,6 +35,12 @@ sendMessage(sender, RED.toString(), messageParts); } + public static void sendDebugMessage(CommandSender sender, Object... messageParts) { + if (sender.hasPermission("fanta.debug")) { + sendMessage(sender, ChatColor.of("#FF04F7").toString(), messageParts); + } + } + public static void sendBrodcastMessage(Object... messageParts) { for (Player player : Bukkit.getOnlinePlayers()) { sendMessage(player, GREEN.toString(), messageParts); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index f2ef5b5..c55bd4b 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -3,11 +3,12 @@ deathonfall: false damageonsneak: false sneakdmg: 2 +randomeffect: false rnddrops: false sharedmg: false respawn: true onelife: false -dmginchat: true +dmginchat: false deathonsprint: false deathonjump: false xpdeath: false @@ -32,6 +33,7 @@ World_Reset: false 1-18-datapack: false silkore: false +ultrahardcore: false speedfurnace: enabled: false multiplier: 10.0