Shifted to separate block and config settings.

This commit is contained in:
tastybento 2020-04-19 10:46:41 -07:00
parent 5f5d2542d2
commit 6e64d274e8
12 changed files with 1203 additions and 991 deletions

View File

@ -1,5 +1,7 @@
package world.bentobox.level;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
@ -8,10 +10,13 @@ import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.YamlConfiguration;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import world.bentobox.bentobox.api.addons.Addon;
import world.bentobox.bentobox.api.configuration.Config;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.bentobox.database.Database;
import world.bentobox.bentobox.database.objects.Island;
@ -21,7 +26,8 @@ import world.bentobox.level.commands.admin.AdminTopCommand;
import world.bentobox.level.commands.island.IslandLevelCommand;
import world.bentobox.level.commands.island.IslandTopCommand;
import world.bentobox.level.commands.island.IslandValueCommand;
import world.bentobox.level.config.Settings;
import world.bentobox.level.config.BlockConfig;
import world.bentobox.level.config.ConfigSettings;
import world.bentobox.level.listeners.IslandTeamListeners;
import world.bentobox.level.listeners.JoinLeaveListener;
import world.bentobox.level.objects.LevelsData;
@ -35,8 +41,11 @@ import world.bentobox.level.requests.TopTenRequestHandler;
*/
public class Level extends Addon {
private static Addon addon;
// Settings
private Settings settings;
private ConfigSettings settings;
private Config<ConfigSettings> configObject = new Config<>(this, ConfigSettings.class);
// Database handler for level data
private Database<LevelsData> handler;
@ -50,6 +59,10 @@ public class Level extends Addon {
// Level calculator
private LevelPresenter levelPresenter;
private BlockConfig blockConfig;
/**
* Calculates a user's island
* @param world - the world where this island is
@ -93,7 +106,7 @@ public class Level extends Addon {
/**
* @return the settings
*/
public Settings getSettings() {
public ConfigSettings getSettings() {
return settings;
}
@ -119,10 +132,45 @@ public class Level extends Addon {
}
}
@Override
public void onLoad() {
// Save the default config from config.yml
saveDefaultConfig();
// Load settings from config.yml. This will check if there are any issues with it too.
loadSettings();
}
private void loadSettings() {
// Load settings again to get worlds
settings = configObject.loadConfigObject();
if (settings == null) {
// Disable
logError("Level settings could not load! Addon disabled.");
setState(State.DISABLED);
}
}
private void loadBlockSettings() {
// Save the default blockconfig.yml
this.saveResource("blockconfig.yml", false);
YamlConfiguration blockValues = new YamlConfiguration();
try {
blockValues.load(new File(this.getDataFolder(), "blockconfig.yml"));
} catch (IOException | InvalidConfigurationException e) {
// Disable
logError("Level blockconfig.yml settings could not load! Addon disabled.");
setState(State.DISABLED);
return;
}
// Load the block config class
blockConfig = new BlockConfig(this, blockValues);
}
@Override
public void onEnable() {
// Load the plugin's config
settings = new Settings(this);
addon = this;
loadBlockSettings();
// Get the BSkyBlock database
// Set up the database handler to store and retrieve Island classes
// Note that these are saved by the BSkyBlock database
@ -275,4 +323,15 @@ public class Level extends Addon {
levelsCache.remove(uniqueId);
}
public static Addon getInstance() {
return addon;
}
/**
* @return the blockConfig
*/
public BlockConfig getBlockConfig() {
return blockConfig;
}
}

View File

@ -89,7 +89,7 @@ public class LevelPresenter {
public String getLevelString(long lvl) {
String level = String.valueOf(lvl);
// Asking for the level of another player
if(addon.getSettings().isShortHand()) {
if(addon.getSettings().isShorthand()) {
BigInteger levelValue = BigInteger.valueOf(lvl);
Map.Entry<BigInteger, String> stage = LEVELS.floorEntry(levelValue);

View File

@ -72,7 +72,7 @@ public class CalcIslandLevel {
this.addon = addon;
this.island = island;
this.world = island.getWorld();
this.limitCount = new HashMap<>(addon.getSettings().getBlockLimits());
this.limitCount = new HashMap<>(addon.getBlockConfig().getBlockLimits());
this.onExit = onExit;
this.worlds = new ArrayList<>();
this.worlds.add(world);
@ -113,7 +113,7 @@ public class CalcIslandLevel {
Chunk c = q.remove();
getChunk(c);
}
}, addon.getSettings().getTickDelay(), addon.getSettings().getTickDelay());
}, addon.getSettings().getTaskDelay(), addon.getSettings().getTaskDelay());
chunksToScan.forEach(c -> worlds.forEach(w -> Util.getChunkAtAsync(w, c.x, c.z).thenAccept(this::addChunkQueue)));
}
@ -220,12 +220,12 @@ public class CalcIslandLevel {
*/
private int getValue(Material md) {
// Check world settings
if (addon.getSettings().getWorldBlockValues().containsKey(world) && addon.getSettings().getWorldBlockValues().get(world).containsKey(md)) {
return addon.getSettings().getWorldBlockValues().get(world).get(md);
if (addon.getBlockConfig().getWorldBlockValues().containsKey(world) && addon.getBlockConfig().getWorldBlockValues().get(world).containsKey(md)) {
return addon.getBlockConfig().getWorldBlockValues().get(world).get(md);
}
// Check baseline
if (addon.getSettings().getBlockValues().containsKey(md)) {
return addon.getSettings().getBlockValues().get(md);
if (addon.getBlockConfig().getBlockValues().containsKey(md)) {
return addon.getBlockConfig().getBlockValues().get(md);
}
// Not in config
result.ncCount.add(md);
@ -325,11 +325,11 @@ public class CalcIslandLevel {
Iterator<Entry<Material>> it = entriesSortedByCount.iterator();
while (it.hasNext()) {
Entry<Material> type = it.next();
Integer limit = addon.getSettings().getBlockLimits().get(type.getElement());
Integer limit = addon.getBlockConfig().getBlockLimits().get(type.getElement());
String explain = ")";
if (limit == null) {
Material generic = type.getElement();
limit = addon.getSettings().getBlockLimits().get(generic);
limit = addon.getBlockConfig().getBlockLimits().get(generic);
explain = " - All types)";
}
reportLines.add(type.getElement().toString() + ": " + String.format("%,d",type.getCount()) + " blocks (max " + limit + explain);

View File

@ -0,0 +1,102 @@
package world.bentobox.level.config;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration;
import world.bentobox.level.Level;
public class BlockConfig {
private Map<Material, Integer> blockLimits = new HashMap<>();
private Map<Material, Integer> blockValues = new HashMap<>();
private final Map<World, Map<Material, Integer>> worldBlockValues = new HashMap<>();
public BlockConfig(Level level, YamlConfiguration blockValues) {
if (blockValues.isSet("limits")) {
HashMap<Material, Integer> bl = new HashMap<>();
for (String material : Objects.requireNonNull(blockValues.getConfigurationSection("limits")).getKeys(false)) {
try {
Material mat = Material.valueOf(material);
bl.put(mat, blockValues.getInt("limits." + material, 0));
} catch (Exception e) {
level.logWarning("Unknown material (" + material + ") in blockconfig.yml Limits section. Skipping...");
}
}
setBlockLimits(bl);
}
if (blockValues.isSet("blocks")) {
Map<Material, Integer> bv = new HashMap<>();
for (String material : Objects.requireNonNull(blockValues.getConfigurationSection("blocks")).getKeys(false)) {
try {
Material mat = Material.valueOf(material);
bv.put(mat, blockValues.getInt("blocks." + material, 0));
} catch (Exception e) {
level.logWarning("Unknown material (" + material + ") in blockconfig.yml blocks section. Skipping...");
}
}
setBlockValues(bv);
} else {
level.logWarning("No block values in blockconfig.yml! All island levels will be zero!");
}
// Worlds
if (blockValues.isSet("worlds")) {
ConfigurationSection worlds = blockValues.getConfigurationSection("worlds");
for (String world : Objects.requireNonNull(worlds).getKeys(false)) {
World bWorld = Bukkit.getWorld(world);
if (bWorld != null) {
ConfigurationSection worldValues = worlds.getConfigurationSection(world);
for (String material : Objects.requireNonNull(worldValues).getKeys(false)) {
Material mat = Material.valueOf(material);
Map<Material, Integer> values = worldBlockValues.getOrDefault(bWorld, new HashMap<>());
values.put(mat, worldValues.getInt(material));
worldBlockValues.put(bWorld, values);
}
} else {
level.logWarning("Level Addon: No such world in blockconfig.yml : " + world);
}
}
}
// All done
}
/**
* @return the blockLimits
*/
public final Map<Material, Integer> getBlockLimits() {
return blockLimits;
}
/**
* @param blockLimits2 the blockLimits to set
*/
private void setBlockLimits(HashMap<Material, Integer> blockLimits2) {
this.blockLimits = blockLimits2;
}
/**
* @return the blockValues
*/
public final Map<Material, Integer> getBlockValues() {
return blockValues;
}
/**
* @param blockValues2 the blockValues to set
*/
private void setBlockValues(Map<Material, Integer> blockValues2) {
this.blockValues = blockValues2;
}
/**
* @return the worldBlockValues
*/
public Map<World, Map<Material, Integer>> getWorldBlockValues() {
return worldBlockValues;
}
}

View File

@ -0,0 +1,330 @@
package world.bentobox.level.config;
import java.util.Arrays;
import java.util.List;
import world.bentobox.bentobox.api.configuration.ConfigComment;
import world.bentobox.bentobox.api.configuration.ConfigEntry;
import world.bentobox.bentobox.api.configuration.ConfigObject;
import world.bentobox.bentobox.api.configuration.StoreAt;
import world.bentobox.level.Level;
@StoreAt(filename="config.yml", path="addons/Level")
@ConfigComment("Level Configuration [version]")
@ConfigComment("")
public class ConfigSettings implements ConfigObject {
@ConfigComment("")
@ConfigComment("Game Mode Addons")
@ConfigComment("Level will hook into these game mode addons. Don't forget to set any world-specific")
@ConfigComment("block values below!")
@ConfigEntry(path = "game-modes")
private List<String> gameModes = Arrays.asList("BSkyBlock","AcidIsland","CaveBlock");
@ConfigComment("")
@ConfigComment("Performance settings")
@ConfigComment("Level is very processor-intensive, so these settings may need to be tweaked to optimize for your server")
@ConfigComment("Delay between each task that loads chunks for calculating levels")
@ConfigComment("Increasing this will slow down level calculations but reduce average load")
@ConfigEntry(path = "task-delay")
private long taskDelay = 1;
@ConfigComment("")
@ConfigComment("Number of chunks that will be processed per task")
@ConfigEntry(path = "chunks")
private int chunks = 10;
@ConfigComment("")
@ConfigComment("Calculate island level on login")
@ConfigComment("This silently calculates the player's island level when they login")
@ConfigComment("This applies to all islands the player has on the server, e.g., BSkyBlock, AcidIsland")
@ConfigEntry(path = "login")
private boolean calcOnLogin = false;
@ConfigComment("")
@ConfigComment("Include nether island in level calculations.")
@ConfigComment("Warning: Enabling this mid-game will give players with an island a jump in")
@ConfigComment("island level. New islands will be correctly zeroed.")
@ConfigEntry(path = "nether")
private boolean nether = false;
@ConfigComment("")
@ConfigComment("Include end island in level calculations.")
@ConfigComment("Warning: Enabling this mid-game will give players with an island a jump in")
@ConfigComment("island level. New islands will be correctly zeroed.")
@ConfigEntry(path = "end")
private boolean end = false;
@ConfigComment("")
@ConfigComment("Underwater block multiplier")
@ConfigComment("If blocks are below sea-level, they can have a higher value. e.g. 2x")
@ConfigComment("Promotes under-water development if there is a sea. Value can be fractional.")
@ConfigEntry(path = "underwater")
private double underWaterMultiplier = 1.0;
@ConfigComment("")
@ConfigComment("Value of one island level. Default 100. Minimum value is 1.")
@ConfigEntry(path = "levelcost")
private long levelCost = 100;
@ConfigComment("")
@ConfigComment("Island level calculation formula")
@ConfigComment("blocks - the sum total of all block values, less any death penalty")
@ConfigComment("level_cost - in a linear equation, the value of one level")
@ConfigComment("This formula can include +,=,*,/,sqrt,^,sin,cos,tan. Result will always be rounded to a long integer")
@ConfigComment("for example, an alternative non-linear option could be: 3 * sqrt(blocks / level_cost)")
@ConfigEntry(path = "level-calc")
private String levelCalc = "blocks / level_cost";
@ConfigComment("")
@ConfigComment("Cooldown between level requests in seconds")
@ConfigEntry(path = "levelwait")
private int levelWait = 60;
@ConfigComment("")
@ConfigComment("Death penalty")
@ConfigComment("How many block values a player will lose per death.")
@ConfigComment("Default value of 100 means that for every death, the player will lose 1 level (if levelcost is 100)")
@ConfigComment("Set to zero to not use this feature")
@ConfigEntry(path = "deathpenalty")
private int deathPenalty = 100;
@ConfigComment("Sum team deaths - if true, all the teams deaths are summed")
@ConfigComment("If false, only the leader's deaths counts")
@ConfigComment("For other death related settings, see the GameModeAddon's config.yml settings.")
@ConfigEntry(path = "sumteamdeaths")
private boolean sumTeamDeaths = false;
@ConfigComment("Shorthand island level")
@ConfigComment("Shows large level values rounded down, e.g., 10,345 -> 10k")
@ConfigEntry(path = "shorthand")
private boolean shorthand = false;
/**
* @return the gameModes
*/
public List<String> getGameModes() {
return gameModes;
}
/**
* @param gameModes the gameModes to set
*/
public void setGameModes(List<String> gameModes) {
this.gameModes = gameModes;
}
/**
* @return the taskDelay
*/
public long getTaskDelay() {
if (taskDelay < 1L) {
Level.getInstance().logError("task-delay must be at least 1");
taskDelay = 1;
}
return taskDelay;
}
/**
* @param taskDelay the taskDelay to set
*/
public void setTaskDelay(long taskDelay) {
this.taskDelay = taskDelay;
}
/**
* @return the chunks
*/
public int getChunks() {
if (chunks < 1) {
Level.getInstance().logError("chunks must be at least 1");
chunks = 1;
}
return chunks;
}
/**
* @param chunks the chunks to set
*/
public void setChunks(int chunks) {
this.chunks = chunks;
}
/**
* @return the calcOnLogin
*/
public boolean isCalcOnLogin() {
return calcOnLogin;
}
/**
* @param calcOnLogin the calcOnLogin to set
*/
public void setCalcOnLogin(boolean calcOnLogin) {
this.calcOnLogin = calcOnLogin;
}
/**
* @return the nether
*/
public boolean isNether() {
return nether;
}
/**
* @param nether the nether to set
*/
public void setNether(boolean nether) {
this.nether = nether;
}
/**
* @return the end
*/
public boolean isEnd() {
return end;
}
/**
* @param end the end to set
*/
public void setEnd(boolean end) {
this.end = end;
}
/**
* @return the underWaterMultiplier
*/
public double getUnderWaterMultiplier() {
return underWaterMultiplier;
}
/**
* @param underWaterMultiplier the underWaterMultiplier to set
*/
public void setUnderWaterMultiplier(double underWaterMultiplier) {
this.underWaterMultiplier = underWaterMultiplier;
}
/**
* @return the levelCost
*/
public long getLevelCost() {
if (levelCost < 1) {
levelCost = 1;
Level.getInstance().logError("levelcost in config.yml cannot be less than 1. Setting to 1.");
}
return levelCost;
}
/**
* @param levelCost the levelCost to set
*/
public void setLevelCost(long levelCost) {
this.levelCost = levelCost;
}
/**
* @return the levelCalc
*/
public String getLevelCalc() {
return levelCalc;
}
/**
* @param levelCalc the levelCalc to set
*/
public void setLevelCalc(String levelCalc) {
this.levelCalc = levelCalc;
}
/**
* @return the levelWait
*/
public int getLevelWait() {
if (levelWait < 0) {
Level.getInstance().logError("levelwait must be at least 0");
levelWait = 0;
}
return levelWait;
}
/**
* @param levelWait the levelWait to set
*/
public void setLevelWait(int levelWait) {
this.levelWait = levelWait;
}
/**
* @return the deathPenalty
*/
public int getDeathPenalty() {
return deathPenalty;
}
/**
* @param deathPenalty the deathPenalty to set
*/
public void setDeathPenalty(int deathPenalty) {
this.deathPenalty = deathPenalty;
}
/**
* @return the sumTeamDeaths
*/
public boolean isSumTeamDeaths() {
return sumTeamDeaths;
}
/**
* @param sumTeamDeaths the sumTeamDeaths to set
*/
public void setSumTeamDeaths(boolean sumTeamDeaths) {
this.sumTeamDeaths = sumTeamDeaths;
}
/**
* @return the shorthand
*/
public boolean isShorthand() {
return shorthand;
}
/**
* @param shorthand the shorthand to set
*/
public void setShorthand(boolean shorthand) {
this.shorthand = shorthand;
}
}

View File

@ -1,274 +0,0 @@
package world.bentobox.level.config;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.configuration.ConfigurationSection;
import world.bentobox.level.Level;
public class Settings {
private final Level level;
private boolean sumTeamDeaths;
private Map<Material, Integer> blockLimits = new HashMap<>();
private Map<Material, Integer> blockValues = new HashMap<>();
private final Map<World, Map<Material, Integer>> worldBlockValues = new HashMap<>();
private double underWaterMultiplier;
private int deathpenalty;
private long levelCost;
private int levelWait;
private int chunks;
private long taskDelay;
private List<String> gameModes;
public Settings(Level level) {
this.level = level;
level.saveDefaultConfig();
// GameModes
gameModes = level.getConfig().getStringList("game-modes");
// Performance
setTickDelay(level.getConfig().getLong("task-delay",1));
if (taskDelay < 1L) {
level.logError("task-delay must be at least 1");
setTickDelay(1L);
}
setChunks(level.getConfig().getInt("chunks", 10));
if (chunks < 1) {
level.logError("chunks must be at least 1");
setChunks(1);
}
setLevelWait(level.getConfig().getInt("levelwait", 60));
if (getLevelWait() < 0) {
level.logError("levelwait must be at least 0");
setLevelWait(0);
}
setDeathpenalty(level.getConfig().getInt("deathpenalty", 0));
setSumTeamDeaths(level.getConfig().getBoolean("sumteamdeaths"));
setUnderWaterMultiplier(level.getConfig().getDouble("underwater", 1D));
setLevelCost(level.getConfig().getInt("levelcost", 100));
if (getLevelCost() < 1) {
setLevelCost(1);
level.logWarning("levelcost in blockvalues.yml cannot be less than 1. Setting to 1.");
}
if (level.getConfig().isSet("limits")) {
HashMap<Material, Integer> bl = new HashMap<>();
for (String material : Objects.requireNonNull(level.getConfig().getConfigurationSection("limits")).getKeys(false)) {
try {
Material mat = Material.valueOf(material);
bl.put(mat, level.getConfig().getInt("limits." + material, 0));
} catch (Exception e) {
level.logWarning("Unknown material (" + material + ") in blockvalues.yml Limits section. Skipping...");
}
}
setBlockLimits(bl);
}
if (level.getConfig().isSet("blocks")) {
Map<Material, Integer> bv = new HashMap<>();
for (String material : Objects.requireNonNull(level.getConfig().getConfigurationSection("blocks")).getKeys(false)) {
try {
Material mat = Material.valueOf(material);
bv.put(mat, level.getConfig().getInt("blocks." + material, 0));
} catch (Exception e) {
level.logWarning("Unknown material (" + material + ") in config.yml blocks section. Skipping...");
}
}
setBlockValues(bv);
} else {
level.logWarning("No block values in config.yml! All island levels will be zero!");
}
// Worlds
if (level.getConfig().isSet("worlds")) {
ConfigurationSection worlds = level.getConfig().getConfigurationSection("worlds");
for (String world : Objects.requireNonNull(worlds).getKeys(false)) {
World bWorld = Bukkit.getWorld(world);
if (bWorld != null) {
ConfigurationSection worldValues = worlds.getConfigurationSection(world);
for (String material : Objects.requireNonNull(worldValues).getKeys(false)) {
Material mat = Material.valueOf(material);
Map<Material, Integer> values = worldBlockValues.getOrDefault(bWorld, new HashMap<>());
values.put(mat, worldValues.getInt(material));
worldBlockValues.put(bWorld, values);
}
} else {
level.logWarning("Level Addon: No such world in config.yml : " + world);
}
}
}
// All done
}
/**
* @return the sumTeamDeaths
*/
public final boolean isSumTeamDeaths() {
return sumTeamDeaths;
}
/**
* @param sumTeamDeaths the sumTeamDeaths to set
*/
private void setSumTeamDeaths(boolean sumTeamDeaths) {
this.sumTeamDeaths = sumTeamDeaths;
}
/**
* @return the blockLimits
*/
public final Map<Material, Integer> getBlockLimits() {
return blockLimits;
}
/**
* @param blockLimits2 the blockLimits to set
*/
private void setBlockLimits(HashMap<Material, Integer> blockLimits2) {
this.blockLimits = blockLimits2;
}
/**
* @return the blockValues
*/
public final Map<Material, Integer> getBlockValues() {
return blockValues;
}
/**
* @param blockValues2 the blockValues to set
*/
private void setBlockValues(Map<Material, Integer> blockValues2) {
this.blockValues = blockValues2;
}
/**
* @return the underWaterMultiplier
*/
public final double getUnderWaterMultiplier() {
return underWaterMultiplier;
}
/**
* @param underWaterMultiplier the underWaterMultiplier to set
*/
private void setUnderWaterMultiplier(double underWaterMultiplier) {
this.underWaterMultiplier = underWaterMultiplier;
}
/**
* @return the deathpenalty
*/
public final int getDeathPenalty() {
return deathpenalty;
}
/**
* @param deathpenalty the deathpenalty to set
*/
private void setDeathpenalty(int deathpenalty) {
this.deathpenalty = deathpenalty;
}
/**
* @return the levelCost
*/
public final long getLevelCost() {
return levelCost;
}
/**
* @param levelCost the levelCost to set
*/
private void setLevelCost(long levelCost) {
this.levelCost = levelCost;
}
/**
* @return the levelWait
*/
public final int getLevelWait() {
return levelWait;
}
/**
* @param levelWait the levelWait to set
*/
private void setLevelWait(int levelWait) {
this.levelWait = levelWait;
}
/**
* @return the worldBlockValues
*/
public Map<World, Map<Material, Integer>> getWorldBlockValues() {
return worldBlockValues;
}
/**
* @return the gameModes
*/
public List<String> getGameModes() {
return gameModes;
}
/**
* @return if the nether island should be included in the level calc or not
*/
public boolean isNether() {
return level.getConfig().getBoolean("nether");
}
/**
* @return if the end island should be included in the level calc or not
*/
public boolean isEnd() {
return level.getConfig().getBoolean("end");
}
/**
* @return true if level should be calculated on login
*/
public boolean isLogin() {
return level.getConfig().getBoolean("login");
}
/**
* @return true if levels should be shown in shorthand notation, e.g., 10,234 = 10k
*/
public boolean isShortHand() {
return level.getConfig().getBoolean("shorthand");
}
/**
* @return the formula to calculate island levels
*/
public String getLevelCalc() {
return level.getConfig().getString("level-calc", "blocks / level_cost");
}
/**
* @return the chunks
*/
public int getChunks() {
return chunks;
}
/**
* @param chunks the chunks to set
*/
public void setChunks(int chunks) {
this.chunks = chunks;
}
/**
* @return the tickDelay
*/
public long getTickDelay() {
return taskDelay;
}
/**
* @param tickDelay the tickDelay to set
*/
public void setTickDelay(long tickDelay) {
this.taskDelay = tickDelay;
}
}

View File

@ -29,7 +29,7 @@ public class JoinLeaveListener implements Listener {
// Load player into cache
addon.getLevelsData(e.getPlayer().getUniqueId());
// If level calc on login is enabled, run through all the worlds and calculate the level
if (addon.getSettings().isLogin()) {
if (addon.getSettings().isCalcOnLogin()) {
addon.getPlugin().getAddonsManager().getGameModeAddons().stream()
.filter(gm -> addon.getSettings().getGameModes().contains(gm.getDescription().getName()))
.forEach(gm -> addon.calculateIslandLevel(gm.getOverWorld(), null, e.getPlayer().getUniqueId()));

View File

@ -0,0 +1,691 @@
# Block Config file for Level add-on Version ${version}
# This file lists the values for various blocks that are used to calculate the
# island level.
# This section lists the limits for any particular block. Blocks over this amount
# are not counted.
# Format:
# MATERIAL: limit
limits:
COBBLESTONE: 10000
NETHERRACK: 1000
# This section lists the value of a block. Value must be an integer.
# Any blocks not listed will have a value of 0. AIR is always zero.
# Format is MATERIAL: value
blocks:
ACACIA_BUTTON: 1
ACACIA_DOOR: 2
ACACIA_FENCE: 2
ACACIA_FENCE_GATE: 4
ACACIA_LEAVES: 0
ACACIA_LOG: 0
ACACIA_PLANKS: 1
ACACIA_PRESSURE_PLATE: 2
ACACIA_SAPLING: 1
ACACIA_SIGN: 6
ACACIA_SLAB: 1
ACACIA_STAIRS: 2
ACACIA_TRAPDOOR: 3
ACACIA_WALL_SIGN: 6
ACACIA_WOOD: 1
ACTIVATOR_RAIL: 1
ALLIUM: 1
ANDESITE: 1
ANDESITE_SLAB: 1
ANDESITE_STAIRS: 1
ANDESITE_WALL: 1
ANVIL: 10
ATTACHED_MELON_STEM: 1
ATTACHED_PUMPKIN_STEM: 1
AZURE_BLUET: 1
BAMBOO: 1
BAMBOO_SAPLING: 1
BARREL: 2
BARRIER: 0
BEACON: 500
BEDROCK: 0
BEETROOTS: 1
BELL: 100
BIRCH_BUTTON: 1
BIRCH_DOOR: 2
BIRCH_FENCE: 2
BIRCH_FENCE_GATE: 4
BIRCH_LEAVES: 0
BIRCH_LOG: 0
BIRCH_PLANKS: 1
BIRCH_PRESSURE_PLATE: 2
BIRCH_SAPLING: 1
BIRCH_SIGN: 6
BIRCH_SLAB: 1
BIRCH_STAIRS: 2
BIRCH_TRAPDOOR: 3
BIRCH_WALL_SIGN: 6
BIRCH_WOOD: 1
BLACK_BANNER: 2
BLACK_BED: 6
BLACK_CARPET: 1
BLACK_CONCRETE: 3
BLACK_CONCRETE_POWDER: 2
BLACK_GLAZED_TERRACOTTA: 5
BLACK_SHULKER_BOX: 11
BLACK_STAINED_GLASS: 2
BLACK_STAINED_GLASS_PANE: 1
BLACK_TERRACOTTA: 2
BLACK_WALL_BANNER: 2
BLACK_WOOL: 2
BLAST_FURNACE: 150
BLUE_BANNER: 2
BLUE_BED: 6
BLUE_CARPET: 1
BLUE_CONCRETE: 3
BLUE_CONCRETE_POWDER: 2
BLUE_GLAZED_TERRACOTTA: 5
BLUE_ICE: 1
BLUE_ORCHID: 1
BLUE_SHULKER_BOX: 11
BLUE_STAINED_GLASS: 2
BLUE_STAINED_GLASS_PANE: 1
BLUE_TERRACOTTA: 2
BLUE_WALL_BANNER: 2
BLUE_WOOL: 2
BONE_BLOCK: 1
BOOKSHELF: 5
BRAIN_CORAL: 1
BRAIN_CORAL_BLOCK: 1
BRAIN_CORAL_FAN: 1
BRAIN_CORAL_WALL_FAN: 1
BREWING_STAND: 20
BRICKS: 5
BRICK_SLAB: 3
BRICK_STAIRS: 5
BRICK_WALL: 5
BROWN_BANNER: 2
BROWN_BED: 6
BROWN_CARPET: 1
BROWN_CONCRETE: 3
BROWN_CONCRETE_POWDER: 2
BROWN_GLAZED_TERRACOTTA: 5
BROWN_MUSHROOM: 1
BROWN_MUSHROOM_BLOCK: 1
BROWN_SHULKER_BOX: 11
BROWN_STAINED_GLASS: 2
BROWN_STAINED_GLASS_PANE: 1
BROWN_TERRACOTTA: 2
BROWN_WALL_BANNER: 2
BROWN_WOOL: 2
BUBBLE_COLUMN: 1
BUBBLE_CORAL: 1
BUBBLE_CORAL_BLOCK: 1
BUBBLE_CORAL_FAN: 1
BUBBLE_CORAL_WALL_FAN: 1
CACTUS: 1
CAKE: 9
CAMPFIRE: 5
CARROTS: 1
CARTOGRAPHY_TABLE: 6
CARVED_PUMPKIN: 2
CAULDRON: 10
CAVE_AIR: 0
CHAIN_COMMAND_BLOCK: 0
CHEST: 8
CHIPPED_ANVIL: 9
CHISELED_QUARTZ_BLOCK: 2
CHISELED_RED_SANDSTONE: 2
CHISELED_SANDSTONE: 2
CHISELED_STONE_BRICKS: 2
CHORUS_FLOWER: 1
CHORUS_PLANT: 1
CLAY: 2
COAL_BLOCK: 9
COAL_ORE: 1
COARSE_DIRT: 2
COBBLESTONE: 1
COBBLESTONE_SLAB: 1
COBBLESTONE_STAIRS: 2
COBBLESTONE_WALL: 1
COBWEB: 10
COCOA: 1
COMMAND_BLOCK: 0
COMPARATOR: 10
COMPOSTER: 9
CONDUIT: 1
CORNFLOWER: 1
CRACKED_STONE_BRICKS: 2
CRAFTING_TABLE: 1
CREEPER_HEAD: 1
CREEPER_WALL_HEAD: 1
CUT_RED_SANDSTONE: 1
CUT_RED_SANDSTONE_SLAB: 1
CUT_SANDSTONE: 1
CUT_SANDSTONE_SLAB: 1
CYAN_BANNER: 2
CYAN_BED: 6
CYAN_CARPET: 1
CYAN_CONCRETE: 3
CYAN_CONCRETE_POWDER: 2
CYAN_GLAZED_TERRACOTTA: 5
CYAN_SHULKER_BOX: 11
CYAN_STAINED_GLASS: 2
CYAN_STAINED_GLASS_PANE: 1
CYAN_TERRACOTTA: 2
CYAN_WALL_BANNER: 2
CYAN_WOOL: 2
DAMAGED_ANVIL: 5
DANDELION: 1
DARK_OAK_BUTTON: 1
DARK_OAK_DOOR: 2
DARK_OAK_FENCE: 2
DARK_OAK_FENCE_GATE: 4
DARK_OAK_LEAVES: 0
DARK_OAK_LOG: 0
DARK_OAK_PLANKS: 1
DARK_OAK_PRESSURE_PLATE: 2
DARK_OAK_SAPLING: 1
DARK_OAK_SIGN: 6
DARK_OAK_SLAB: 1
DARK_OAK_STAIRS: 2
DARK_OAK_TRAPDOOR: 3
DARK_OAK_WOOD: 1
DARK_OAK_WALL_SIGN: 6
DARK_PRISMARINE: 1
DARK_PRISMARINE_SLAB: 1
DARK_PRISMARINE_STAIRS: 2
DAYLIGHT_DETECTOR: 10
DEAD_BRAIN_CORAL_BLOCK: 1
DEAD_BRAIN_CORAL_FAN: 1
DEAD_BRAIN_CORAL_WALL_FAN: 1
DEAD_BUBBLE_CORAL_BLOCK: 1
DEAD_BUBBLE_CORAL_FAN: 1
DEAD_BUBBLE_CORAL_WALL_FAN: 1
DEAD_BUSH: 1
DEAD_FIRE_CORAL_BLOCK: 1
DEAD_FIRE_CORAL_FAN: 1
DEAD_FIRE_CORAL_WALL_FAN: 1
DEAD_HORN_CORAL_BLOCK: 1
DEAD_HORN_CORAL_FAN: 1
DEAD_HORN_CORAL_WALL_FAN: 1
DEAD_TUBE_CORAL_BLOCK: 1
DEAD_TUBE_CORAL_FAN: 1
DEAD_TUBE_CORAL_WALL_FAN: 1
DETECTOR_RAIL: 10
DIAMOND_BLOCK: 300
DIAMOND_ORE: 1
DIORITE: 1
DIORITE_SLAB: 1
DIORITE_STAIRS: 1
DIORITE_WALL: 1
DIRT: 3
DISPENSER: 5
DRAGON_EGG: 150
DRAGON_HEAD: 1
DRAGON_WALL_HEAD: 1
DRIED_KELP_BLOCK: 1
DROPPER: 5
EMERALD_BLOCK: 150
EMERALD_ORE: 1
ENCHANTING_TABLE: 150
ENDER_CHEST: 150
END_GATEWAY: 0
END_PORTAL: 0
END_PORTAL_FRAME: 0
END_ROD: 1
END_STONE: 1
END_STONE_BRICKS: 2
END_STONE_BRICK_SLAB: 2
END_STONE_BRICK_STAIRS: 2
END_STONE_BRICK_WALL: 2
FARMLAND: 1
FERN: 1
FIRE: 0
FIRE_CORAL: 1
FIRE_CORAL_BLOCK: 1
FIRE_CORAL_FAN: 1
FIRE_CORAL_WALL_FAN: 1
FLETCHING_TABLE: 8
FLOWER_POT: 1
FROSTED_ICE: 1
FURNACE: 8
GLASS: 2
GLASS_PANE: 1
GLOWSTONE: 1
GOLD_BLOCK: 150
GOLD_ORE: 1
GRANITE: 1
GRANITE_SLAB: 1
GRANITE_STAIRS: 1
GRANITE_WALL: 1
GRASS: 4
GRASS_BLOCK: 4
GRASS_PATH: 4
GRAVEL: 1
GRAY_BANNER: 2
GRAY_BED: 6
GRAY_CARPET: 1
GRAY_CONCRETE: 3
GRAY_CONCRETE_POWDER: 2
GRAY_GLAZED_TERRACOTTA: 5
GRAY_SHULKER_BOX: 11
GRAY_STAINED_GLASS: 2
GRAY_STAINED_GLASS_PANE: 1
GRAY_TERRACOTTA: 2
GRAY_WALL_BANNER: 2
GRAY_WOOL: 2
GREEN_BANNER: 2
GREEN_BED: 6
GREEN_CARPET: 1
GREEN_CONCRETE: 3
GREEN_CONCRETE_POWDER: 2
GREEN_GLAZED_TERRACOTTA: 5
GREEN_SHULKER_BOX: 11
GREEN_STAINED_GLASS: 2
GREEN_STAINED_GLASS_PANE: 1
GREEN_TERRACOTTA: 2
GREEN_WALL_BANNER: 2
GREEN_WOOL: 2
GRINDSTONE: 8
HAY_BLOCK: 2
HEART_OF_THE_SEA: 3
HEAVY_WEIGHTED_PRESSURE_PLATE: 2
HOPPER: -10
HORN_CORAL_BLOCK: 1
HORN_CORAL_FAN: 1
HORN_CORAL_WALL_FAN: 1
ICE: 5
INFESTED_CHISELED_STONE_BRICKS: 2
INFESTED_COBBLESTONE: 1
INFESTED_CRACKED_STONE_BRICKS: 2
INFESTED_MOSSY_STONE_BRICKS: 2
INFESTED_STONE: 1
INFESTED_STONE_BRICKS: 2
IRON_BARS: 2
IRON_BLOCK: 10
IRON_DOOR: 5
IRON_ORE: 1
IRON_TRAPDOOR: 4
JACK_O_LANTERN: 2
JUKEBOX: 10
JUNGLE_BUTTON: 1
JUNGLE_DOOR: 2
JUNGLE_FENCE: 2
JUNGLE_FENCE_GATE: 4
JUNGLE_LEAVES: 0
JUNGLE_LOG: 0
JUNGLE_PLANKS: 1
JUNGLE_PRESSURE_PLATE: 2
JUNGLE_SAPLING: 1
JUNGLE_SIGN: 6
JUNGLE_SLAB: 1
JUNGLE_STAIRS: 2
JUNGLE_TRAPDOOR: 3
JUNGLE_WALL_SIGN: 6
JUNGLE_WOOD: 1
KELP: 1
KELP_PLANT: 1
LADDER: 2
LANTERN: 3
LAPIS_BLOCK: 10
LAPIS_ORE: 1
LARGE_FERN: 1
LAVA: 0
LECTERN: 8
LEVER: 1
LIGHT_BLUE_BANNER: 2
LIGHT_BLUE_BED: 6
LIGHT_BLUE_CARPET: 1
LIGHT_BLUE_CONCRETE: 3
LIGHT_BLUE_CONCRETE_POWDER: 2
LIGHT_BLUE_GLAZED_TERRACOTTA: 5
LIGHT_BLUE_SHULKER_BOX: 11
LIGHT_BLUE_STAINED_GLASS: 2
LIGHT_BLUE_STAINED_GLASS_PANE: 1
LIGHT_BLUE_TERRACOTTA: 2
LIGHT_BLUE_WALL_BANNER: 2
LIGHT_BLUE_WOOL: 2
LIGHT_GRAY_BANNER: 2
LIGHT_GRAY_BED: 6
LIGHT_GRAY_CARPET: 1
LIGHT_GRAY_CONCRETE: 3
LIGHT_GRAY_CONCRETE_POWDER: 2
LIGHT_GRAY_GLAZED_TERRACOTTA: 5
LIGHT_GRAY_SHULKER_BOX: 11
LIGHT_GRAY_STAINED_GLASS: 2
LIGHT_GRAY_STAINED_GLASS_PANE: 1
LIGHT_GRAY_TERRACOTTA: 2
LIGHT_GRAY_WALL_BANNER: 2
LIGHT_GRAY_WOOL: 2
LIGHT_WEIGHTED_PRESSURE_PLATE: 3
LILAC: 1
LILY_OF_THE_VALLEY: 1
LILY_PAD: 5
LIME_BANNER: 2
LIME_BED: 6
LIME_CARPET: 1
LIME_CONCRETE: 3
LIME_CONCRETE_POWDER: 2
LIME_GLAZED_TERRACOTTA: 5
LIME_SHULKER_BOX: 11
LIME_STAINED_GLASS: 2
LIME_STAINED_GLASS_PANE: 1
LIME_TERRACOTTA: 2
LIME_WALL_BANNER: 2
LIME_WOOL: 2
LOOM: 5
MAGENTA_BANNER: 2
MAGENTA_BED: 6
MAGENTA_CARPET: 1
MAGENTA_CONCRETE: 3
MAGENTA_CONCRETE_POWDER: 2
MAGENTA_GLAZED_TERRACOTTA: 5
MAGENTA_SHULKER_BOX: 11
MAGENTA_STAINED_GLASS: 2
MAGENTA_STAINED_GLASS_PANE: 1
MAGENTA_TERRACOTTA: 2
MAGENTA_WALL_BANNER: 2
MAGENTA_WOOL: 2
MAGMA_BLOCK: 1
MELON: 1
MELON_STEM: 1
MOSSY_COBBLESTONE: 1
MOSSY_COBBLESTONE_SLAB: 1
MOSSY_COBBLESTONE_STAIRS: 1
MOSSY_COBBLESTONE_WALL: 1
MOSSY_STONE_BRICKS: 2
MOSSY_STONE_BRICK_SLAB: 2
MOSSY_STONE_BRICK_STAIRS: 2
MOSSY_STONE_BRICK_WALL: 2
MYCELIUM: 5
NETHERRACK: 1
NETHER_BRICKS: 2
NETHER_BRICK_FENCE: 2
NETHER_BRICK_SLAB: 1
NETHER_BRICK_STAIRS: 2
NETHER_BRICK_WALL: 2
NETHER_PORTAL: 1
NETHER_QUARTZ_ORE: 1
NETHER_WART_BLOCK: 2
NOTE_BLOCK: 10
OAK_BUTTON: 1
OAK_DOOR: 2
OAK_FENCE: 2
OAK_FENCE_GATE: 4
OAK_LEAVES: 0
OAK_LOG: 0
OAK_PLANKS: 1
OAK_PRESSURE_PLATE: 2
OAK_SAPLING: 1
OAK_SIGN: 6
OAK_SLAB: 1
OAK_STAIRS: 2
OAK_TRAPDOOR: 3
OAK_WALL_SIGN: 6
OAK_WOOD: 1
OBSERVER: 1
OBSIDIAN: 10
ORANGE_BANNER: 2
ORANGE_BED: 6
ORANGE_CARPET: 1
ORANGE_CONCRETE: 3
ORANGE_CONCRETE_POWDER: 2
ORANGE_GLAZED_TERRACOTTA: 5
ORANGE_SHULKER_BOX: 11
ORANGE_STAINED_GLASS: 2
ORANGE_STAINED_GLASS_PANE: 1
ORANGE_TERRACOTTA: 2
ORANGE_TULIP: 1
ORANGE_WALL_BANNER: 2
ORANGE_WOOL: 2
OXEYE_DAISY: 1
PACKED_ICE: 5
PEONY: 1
PETRIFIED_OAK_SLAB: 1
PINK_BANNER: 2
PINK_BED: 6
PINK_CARPET: 1
PINK_CONCRETE: 3
PINK_CONCRETE_POWDER: 2
PINK_GLAZED_TERRACOTTA: 5
PINK_SHULKER_BOX: 11
PINK_STAINED_GLASS: 2
PINK_STAINED_GLASS_PANE: 1
PINK_TERRACOTTA: 2
PINK_TULIP: 1
PINK_WALL_BANNER: 2
PINK_WOOL: 2
PISTON: 2
PLAYER_HEAD: 1
PLAYER_WALL_HEAD: 1
PODZOL: 2
POLISHED_ANDESITE: 1
POLISHED_ANDESITE_SLAB: 1
POLISHED_ANDESITE_STAIRS: 1
POLISHED_DIORITE: 1
POLISHED_DIORITE_SLAB: 1
POLISHED_DIORITE_STAIRS: 1
POLISHED_GRANITE: 1
POLISHED_GRANITE_SLAB: 1
POLISHED_GRANITE_STAIRS: 1
POPPY: 1
POTATOES: 1
POTTED_ACACIA_SAPLING: 1
POTTED_ALLIUM: 1
POTTED_AZURE_BLUET: 1
POTTED_BAMBOO: 1
POTTED_BIRCH_SAPLING: 1
POTTED_BLUE_ORCHID: 1
POTTED_BROWN_MUSHROOM: 1
POTTED_CACTUS: 1
POTTED_CORNFLOWER: 1
POTTED_DANDELION: 1
POTTED_DARK_OAK_SAPLING: 1
POTTED_DEAD_BUSH: 1
POTTED_FERN: 1
POTTED_JUNGLE_SAPLING: 1
POTTED_LILY_OF_THE_VALLEY: 1
POTTED_OAK_SAPLING: 1
POTTED_ORANGE_TULIP: 1
POTTED_OXEYE_DAISY: 1
POTTED_PINK_TULIP: 1
POTTED_POPPY: 1
POTTED_RED_MUSHROOM: 1
POTTED_RED_TULIP: 1
POTTED_SPRUCE_SAPLING: 1
POTTED_WHITE_TULIP: 1
POTTED_WITHER_ROSE: 1
POWERED_RAIL: 2
PRISMARINE: 1
PRISMARINE_BRICKS: 2
PRISMARINE_BRICK_SLAB: 1
PRISMARINE_BRICK_STAIRS: 2
PRISMARINE_SLAB: 1
PRISMARINE_STAIRS: 2
PRISMARINE_WALL: 2
PUMPKIN: 1
PUMPKIN_STEM: 1
PURPLE_BANNER: 2
PURPLE_BED: 6
PURPLE_CARPET: 1
PURPLE_CONCRETE: 3
PURPLE_CONCRETE_POWDER: 2
PURPLE_GLAZED_TERRACOTTA: 5
PURPLE_SHULKER_BOX: 11
PURPLE_STAINED_GLASS: 2
PURPLE_STAINED_GLASS_PANE: 1
PURPLE_TERRACOTTA: 2
PURPLE_WALL_BANNER: 2
PURPLE_WOOL: 2
PURPUR_BLOCK: 1
PURPUR_PILLAR: 1
PURPUR_SLAB: 1
PURPUR_STAIRS: 2
QUARTZ_BLOCK: 1
QUARTZ_PILLAR: 1
QUARTZ_SLAB: 1
QUARTZ_STAIRS: 2
RAIL: 1
REDSTONE_BLOCK: 10
REDSTONE_LAMP: 10
REDSTONE_ORE: 1
REDSTONE_TORCH: 5
REDSTONE_WALL_TORCH: 5
REDSTONE_WIRE: 1
RED_BANNER: 2
RED_BED: 6
RED_CARPET: 1
RED_CONCRETE: 3
RED_CONCRETE_POWDER: 2
RED_GLAZED_TERRACOTTA: 5
RED_MUSHROOM: 1
RED_MUSHROOM_BLOCK: 1
RED_NETHER_BRICKS: 2
RED_NETHER_BRICK_SLAB: 2
RED_NETHER_BRICK_STAIRS: 2
RED_NETHER_BRICK_WALL: 2
RED_SAND: 1
RED_SANDSTONE: 1
RED_SANDSTONE_SLAB: 1
RED_SANDSTONE_STAIRS: 2
RED_SANDSTONE_WALL: 2
RED_SHULKER_BOX: 11
RED_STAINED_GLASS: 2
RED_STAINED_GLASS_PANE: 1
RED_TERRACOTTA: 2
RED_TULIP: 1
RED_WALL_BANNER: 2
RED_WOOL: 2
REPEATER: 6
REPEATING_COMMAND_BLOCK: 0
ROSE_BUSH: 1
SAND: 1
SANDSTONE: 1
SANDSTONE_SLAB: 1
SANDSTONE_STAIRS: 2
SANDSTONE_WALL: 2
SCAFFOLDING: 1
SEAGRASS: 1
SEA_LANTERN: 9
SEA_PICKLE: 1
SHULKER_BOX: 10
SKELETON_SKULL: 10
SKELETON_WALL_SKULL: 100
SLIME_BLOCK: 10
SMITHING_TABLE: 6
SMOKER: 10
SMOOTH_QUARTZ: 1
SMOOTH_QUARTZ_SLAB: 1
SMOOTH_QUARTZ_STAIRS: 1
SMOOTH_RED_SANDSTONE: 1
SMOOTH_RED_SANDSTONE_SLAB: 1
SMOOTH_RED_SANDSTONE_STAIRS: 1
SMOOTH_SANDSTONE: 1
SMOOTH_SANDSTONE_SLAB: 1
SMOOTH_SANDSTONE_STAIRS: 1
SMOOTH_STONE: 1
SMOOTH_STONE_SLAB: 1
SNOW: 1
SNOW_BLOCK: 1
SOUL_SAND: 2
SPAWNER: 1
SPONGE: 10
SPRUCE_BUTTON: 1
SPRUCE_DOOR: 2
SPRUCE_FENCE: 2
SPRUCE_FENCE_GATE: 4
SPRUCE_LEAVES: 0
SPRUCE_LOG: 0
SPRUCE_PLANKS: 1
SPRUCE_PRESSURE_PLATE: 2
SPRUCE_SAPLING: 1
SPRUCE_SIGN: 6
SPRUCE_SLAB: 1
SPRUCE_STAIRS: 2
SPRUCE_TRAPDOOR: 3
SPRUCE_WALL_SIGN: 6
SPRUCE_WOOD: 1
STICKY_PISTON: 1
STONE: 1
STONECUTTER: 4
STONE_BRICKS: 2
STONE_BRICK_SLAB: 1
STONE_BRICK_STAIRS: 2
STONE_BRICK_WALL: 2
STONE_BUTTON: 1
STONE_PRESSURE_PLATE: 2
STONE_SLAB: 1
STONE_STAIRS: 1
STRIPPED_ACACIA_LOG: 0
STRIPPED_ACACIA_WOOD: 1
STRIPPED_BIRCH_LOG: 0
STRIPPED_BIRCH_WOOD: 1
STRIPPED_DARK_OAK_LOG: 0
STRIPPED_DARK_OAK_WOOD: 1
STRIPPED_JUNGLE_LOG: 0
STRIPPED_JUNGLE_WOOD: 1
STRIPPED_OAK_LOG: 0
STRIPPED_OAK_WOOD: 1
STRIPPED_SPRUCE_LOG: 0
STRIPPED_SPRUCE_WOOD: 1
SUGAR_CANE: 1
SUNFLOWER: 1
SWEET_BERRY_BUSH: 1
TALL_GRASS: 1
TALL_SEAGRASS: 1
TERRACOTTA: 2
TNT: 5
TORCH: 1
TRAPPED_CHEST: 10
TRIPWIRE: 2
TRIPWIRE_HOOK: 2
TUBE_CORAL_BLOCK: 1
TUBE_CORAL_FAN: 1
TUBE_CORAL_WALL_FAN: 1
TURTLE_EGG: 1
VINE: 1
VOID_AIR: 0
WALL_TORCH: 1
WATER: 0
WET_SPONGE: 10
WHEAT: 1
WHITE_BANNER: 2
WHITE_BED: 6
WHITE_CARPET: 1
WHITE_CONCRETE: 3
WHITE_CONCRETE_POWDER: 2
WHITE_GLAZED_TERRACOTTA: 5
WHITE_SHULKER_BOX: 11
WHITE_STAINED_GLASS: 2
WHITE_STAINED_GLASS_PANE: 1
WHITE_TERRACOTTA: 2
WHITE_TULIP: 1
WHITE_WALL_BANNER: 2
WHITE_WOOL: 2
WITHER_ROSE: 1
WITHER_SKELETON_SKULL: 10
WITHER_SKELETON_WALL_SKULL: 10
YELLOW_BANNER: 2
YELLOW_BED: 6
YELLOW_CARPET: 1
YELLOW_CONCRETE: 3
YELLOW_CONCRETE_POWDER: 2
YELLOW_GLAZED_TERRACOTTA: 5
YELLOW_SHULKER_BOX: 11
YELLOW_STAINED_GLASS: 2
YELLOW_STAINED_GLASS_PANE: 1
YELLOW_TERRACOTTA: 2
YELLOW_WALL_BANNER: 2
YELLOW_WOOL: 2
ZOMBIE_HEAD: 1
ZOMBIE_WALL_HEAD: 1
# World differences
# List any blocks that have a different value in a specific world
# If a block is not listed, the default value will be used
# Prefix with world name
worlds:
acidisland_world:
SAND: 0
SANDSTONE: 0
ICE: 0

View File

@ -8,6 +8,7 @@ game-modes:
- BSkyBlock
- CaveBlock
#- SkyGrid
#- AOneBlock
# Performance settings
# Level is very processor-intensive, so these settings may need to be tweaked to optimize for your server
@ -18,11 +19,6 @@ task-delay: 1
# Number of chunks that will be processed per task
chunks: 10
# This file lists the values for various blocks that are used to calculate the
# island level. Level = total of all blocks in island boundary / 100.
# Players with the permission askyblock.island.multiplier.# will have their blocks
# multiplied in value by that amount.
# Calculate island level on login
# This silently calculates the player's island level when they login
# This applies to all islands the player has on the server, e.g., BSkyBlock, AcidIsland
@ -70,690 +66,3 @@ sumteamdeaths: false
# Shorthand island level
# Shows large level values rounded down, e.g., 10,345 -> 10k
shorthand: false
# This section lists the limits for any particular block. Blocks over this amount
# are not counted.
# Format:
# MATERIAL: limit
limits:
COBBLESTONE: 10000
NETHERRACK: 1000
# This section lists the value of a block. Value must be an integer.
# Any blocks not listed will have a value of 0. AIR is always zero.
# Format is MATERIAL: value
blocks:
ACACIA_BUTTON: 1
ACACIA_DOOR: 2
ACACIA_FENCE: 2
ACACIA_FENCE_GATE: 4
ACACIA_LEAVES: 0
ACACIA_LOG: 0
ACACIA_PLANKS: 1
ACACIA_PRESSURE_PLATE: 2
ACACIA_SAPLING: 1
ACACIA_SIGN: 6
ACACIA_SLAB: 1
ACACIA_STAIRS: 2
ACACIA_TRAPDOOR: 3
ACACIA_WALL_SIGN: 6
ACACIA_WOOD: 1
ACTIVATOR_RAIL: 1
ALLIUM: 1
ANDESITE: 1
ANDESITE_SLAB: 1
ANDESITE_STAIRS: 1
ANDESITE_WALL: 1
ANVIL: 10
ATTACHED_MELON_STEM: 1
ATTACHED_PUMPKIN_STEM: 1
AZURE_BLUET: 1
BAMBOO: 1
BAMBOO_SAPLING: 1
BARREL: 2
BARRIER: 0
BEACON: 500
BEDROCK: 0
BEETROOTS: 1
BELL: 100
BIRCH_BUTTON: 1
BIRCH_DOOR: 2
BIRCH_FENCE: 2
BIRCH_FENCE_GATE: 4
BIRCH_LEAVES: 0
BIRCH_LOG: 0
BIRCH_PLANKS: 1
BIRCH_PRESSURE_PLATE: 2
BIRCH_SAPLING: 1
BIRCH_SIGN: 6
BIRCH_SLAB: 1
BIRCH_STAIRS: 2
BIRCH_TRAPDOOR: 3
BIRCH_WALL_SIGN: 6
BIRCH_WOOD: 1
BLACK_BANNER: 2
BLACK_BED: 6
BLACK_CARPET: 1
BLACK_CONCRETE: 3
BLACK_CONCRETE_POWDER: 2
BLACK_GLAZED_TERRACOTTA: 5
BLACK_SHULKER_BOX: 11
BLACK_STAINED_GLASS: 2
BLACK_STAINED_GLASS_PANE: 1
BLACK_TERRACOTTA: 2
BLACK_WALL_BANNER: 2
BLACK_WOOL: 2
BLAST_FURNACE: 150
BLUE_BANNER: 2
BLUE_BED: 6
BLUE_CARPET: 1
BLUE_CONCRETE: 3
BLUE_CONCRETE_POWDER: 2
BLUE_GLAZED_TERRACOTTA: 5
BLUE_ICE: 1
BLUE_ORCHID: 1
BLUE_SHULKER_BOX: 11
BLUE_STAINED_GLASS: 2
BLUE_STAINED_GLASS_PANE: 1
BLUE_TERRACOTTA: 2
BLUE_WALL_BANNER: 2
BLUE_WOOL: 2
BONE_BLOCK: 1
BOOKSHELF: 5
BRAIN_CORAL: 1
BRAIN_CORAL_BLOCK: 1
BRAIN_CORAL_FAN: 1
BRAIN_CORAL_WALL_FAN: 1
BREWING_STAND: 20
BRICKS: 5
BRICK_SLAB: 3
BRICK_STAIRS: 5
BRICK_WALL: 5
BROWN_BANNER: 2
BROWN_BED: 6
BROWN_CARPET: 1
BROWN_CONCRETE: 3
BROWN_CONCRETE_POWDER: 2
BROWN_GLAZED_TERRACOTTA: 5
BROWN_MUSHROOM: 1
BROWN_MUSHROOM_BLOCK: 1
BROWN_SHULKER_BOX: 11
BROWN_STAINED_GLASS: 2
BROWN_STAINED_GLASS_PANE: 1
BROWN_TERRACOTTA: 2
BROWN_WALL_BANNER: 2
BROWN_WOOL: 2
BUBBLE_COLUMN: 1
BUBBLE_CORAL: 1
BUBBLE_CORAL_BLOCK: 1
BUBBLE_CORAL_FAN: 1
BUBBLE_CORAL_WALL_FAN: 1
CACTUS: 1
CAKE: 9
CAMPFIRE: 5
CARROTS: 1
CARTOGRAPHY_TABLE: 6
CARVED_PUMPKIN: 2
CAULDRON: 10
CAVE_AIR: 0
CHAIN_COMMAND_BLOCK: 0
CHEST: 8
CHIPPED_ANVIL: 9
CHISELED_QUARTZ_BLOCK: 2
CHISELED_RED_SANDSTONE: 2
CHISELED_SANDSTONE: 2
CHISELED_STONE_BRICKS: 2
CHORUS_FLOWER: 1
CHORUS_PLANT: 1
CLAY: 2
COAL_BLOCK: 9
COAL_ORE: 1
COARSE_DIRT: 2
COBBLESTONE: 1
COBBLESTONE_SLAB: 1
COBBLESTONE_STAIRS: 2
COBBLESTONE_WALL: 1
COBWEB: 10
COCOA: 1
COMMAND_BLOCK: 0
COMPARATOR: 10
COMPOSTER: 9
CONDUIT: 1
CORNFLOWER: 1
CRACKED_STONE_BRICKS: 2
CRAFTING_TABLE: 1
CREEPER_HEAD: 1
CREEPER_WALL_HEAD: 1
CUT_RED_SANDSTONE: 1
CUT_RED_SANDSTONE_SLAB: 1
CUT_SANDSTONE: 1
CUT_SANDSTONE_SLAB: 1
CYAN_BANNER: 2
CYAN_BED: 6
CYAN_CARPET: 1
CYAN_CONCRETE: 3
CYAN_CONCRETE_POWDER: 2
CYAN_GLAZED_TERRACOTTA: 5
CYAN_SHULKER_BOX: 11
CYAN_STAINED_GLASS: 2
CYAN_STAINED_GLASS_PANE: 1
CYAN_TERRACOTTA: 2
CYAN_WALL_BANNER: 2
CYAN_WOOL: 2
DAMAGED_ANVIL: 5
DANDELION: 1
DARK_OAK_BUTTON: 1
DARK_OAK_DOOR: 2
DARK_OAK_FENCE: 2
DARK_OAK_FENCE_GATE: 4
DARK_OAK_LEAVES: 0
DARK_OAK_LOG: 0
DARK_OAK_PLANKS: 1
DARK_OAK_PRESSURE_PLATE: 2
DARK_OAK_SAPLING: 1
DARK_OAK_SIGN: 6
DARK_OAK_SLAB: 1
DARK_OAK_STAIRS: 2
DARK_OAK_TRAPDOOR: 3
DARK_OAK_WOOD: 1
DARK_OAK_WALL_SIGN: 6
DARK_PRISMARINE: 1
DARK_PRISMARINE_SLAB: 1
DARK_PRISMARINE_STAIRS: 2
DAYLIGHT_DETECTOR: 10
DEAD_BRAIN_CORAL_BLOCK: 1
DEAD_BRAIN_CORAL_FAN: 1
DEAD_BRAIN_CORAL_WALL_FAN: 1
DEAD_BUBBLE_CORAL_BLOCK: 1
DEAD_BUBBLE_CORAL_FAN: 1
DEAD_BUBBLE_CORAL_WALL_FAN: 1
DEAD_BUSH: 1
DEAD_FIRE_CORAL_BLOCK: 1
DEAD_FIRE_CORAL_FAN: 1
DEAD_FIRE_CORAL_WALL_FAN: 1
DEAD_HORN_CORAL_BLOCK: 1
DEAD_HORN_CORAL_FAN: 1
DEAD_HORN_CORAL_WALL_FAN: 1
DEAD_TUBE_CORAL_BLOCK: 1
DEAD_TUBE_CORAL_FAN: 1
DEAD_TUBE_CORAL_WALL_FAN: 1
DETECTOR_RAIL: 10
DIAMOND_BLOCK: 300
DIAMOND_ORE: 1
DIORITE: 1
DIORITE_SLAB: 1
DIORITE_STAIRS: 1
DIORITE_WALL: 1
DIRT: 3
DISPENSER: 5
DRAGON_EGG: 150
DRAGON_HEAD: 1
DRAGON_WALL_HEAD: 1
DRIED_KELP_BLOCK: 1
DROPPER: 5
EMERALD_BLOCK: 150
EMERALD_ORE: 1
ENCHANTING_TABLE: 150
ENDER_CHEST: 150
END_GATEWAY: 0
END_PORTAL: 0
END_PORTAL_FRAME: 0
END_ROD: 1
END_STONE: 1
END_STONE_BRICKS: 2
END_STONE_BRICK_SLAB: 2
END_STONE_BRICK_STAIRS: 2
END_STONE_BRICK_WALL: 2
FARMLAND: 1
FERN: 1
FIRE: 0
FIRE_CORAL: 1
FIRE_CORAL_BLOCK: 1
FIRE_CORAL_FAN: 1
FIRE_CORAL_WALL_FAN: 1
FLETCHING_TABLE: 8
FLOWER_POT: 1
FROSTED_ICE: 1
FURNACE: 8
GLASS: 2
GLASS_PANE: 1
GLOWSTONE: 1
GOLD_BLOCK: 150
GOLD_ORE: 1
GRANITE: 1
GRANITE_SLAB: 1
GRANITE_STAIRS: 1
GRANITE_WALL: 1
GRASS: 4
GRASS_BLOCK: 4
GRASS_PATH: 4
GRAVEL: 1
GRAY_BANNER: 2
GRAY_BED: 6
GRAY_CARPET: 1
GRAY_CONCRETE: 3
GRAY_CONCRETE_POWDER: 2
GRAY_GLAZED_TERRACOTTA: 5
GRAY_SHULKER_BOX: 11
GRAY_STAINED_GLASS: 2
GRAY_STAINED_GLASS_PANE: 1
GRAY_TERRACOTTA: 2
GRAY_WALL_BANNER: 2
GRAY_WOOL: 2
GREEN_BANNER: 2
GREEN_BED: 6
GREEN_CARPET: 1
GREEN_CONCRETE: 3
GREEN_CONCRETE_POWDER: 2
GREEN_GLAZED_TERRACOTTA: 5
GREEN_SHULKER_BOX: 11
GREEN_STAINED_GLASS: 2
GREEN_STAINED_GLASS_PANE: 1
GREEN_TERRACOTTA: 2
GREEN_WALL_BANNER: 2
GREEN_WOOL: 2
GRINDSTONE: 8
HAY_BLOCK: 2
HEART_OF_THE_SEA: 3
HEAVY_WEIGHTED_PRESSURE_PLATE: 2
HOPPER: -10
HORN_CORAL_BLOCK: 1
HORN_CORAL_FAN: 1
HORN_CORAL_WALL_FAN: 1
ICE: 5
INFESTED_CHISELED_STONE_BRICKS: 2
INFESTED_COBBLESTONE: 1
INFESTED_CRACKED_STONE_BRICKS: 2
INFESTED_MOSSY_STONE_BRICKS: 2
INFESTED_STONE: 1
INFESTED_STONE_BRICKS: 2
IRON_BARS: 2
IRON_BLOCK: 10
IRON_DOOR: 5
IRON_ORE: 1
IRON_TRAPDOOR: 4
JACK_O_LANTERN: 2
JUKEBOX: 10
JUNGLE_BUTTON: 1
JUNGLE_DOOR: 2
JUNGLE_FENCE: 2
JUNGLE_FENCE_GATE: 4
JUNGLE_LEAVES: 0
JUNGLE_LOG: 0
JUNGLE_PLANKS: 1
JUNGLE_PRESSURE_PLATE: 2
JUNGLE_SAPLING: 1
JUNGLE_SIGN: 6
JUNGLE_SLAB: 1
JUNGLE_STAIRS: 2
JUNGLE_TRAPDOOR: 3
JUNGLE_WALL_SIGN: 6
JUNGLE_WOOD: 1
KELP: 1
KELP_PLANT: 1
LADDER: 2
LANTERN: 3
LAPIS_BLOCK: 10
LAPIS_ORE: 1
LARGE_FERN: 1
LAVA: 0
LECTERN: 8
LEVER: 1
LIGHT_BLUE_BANNER: 2
LIGHT_BLUE_BED: 6
LIGHT_BLUE_CARPET: 1
LIGHT_BLUE_CONCRETE: 3
LIGHT_BLUE_CONCRETE_POWDER: 2
LIGHT_BLUE_GLAZED_TERRACOTTA: 5
LIGHT_BLUE_SHULKER_BOX: 11
LIGHT_BLUE_STAINED_GLASS: 2
LIGHT_BLUE_STAINED_GLASS_PANE: 1
LIGHT_BLUE_TERRACOTTA: 2
LIGHT_BLUE_WALL_BANNER: 2
LIGHT_BLUE_WOOL: 2
LIGHT_GRAY_BANNER: 2
LIGHT_GRAY_BED: 6
LIGHT_GRAY_CARPET: 1
LIGHT_GRAY_CONCRETE: 3
LIGHT_GRAY_CONCRETE_POWDER: 2
LIGHT_GRAY_GLAZED_TERRACOTTA: 5
LIGHT_GRAY_SHULKER_BOX: 11
LIGHT_GRAY_STAINED_GLASS: 2
LIGHT_GRAY_STAINED_GLASS_PANE: 1
LIGHT_GRAY_TERRACOTTA: 2
LIGHT_GRAY_WALL_BANNER: 2
LIGHT_GRAY_WOOL: 2
LIGHT_WEIGHTED_PRESSURE_PLATE: 3
LILAC: 1
LILY_OF_THE_VALLEY: 1
LILY_PAD: 5
LIME_BANNER: 2
LIME_BED: 6
LIME_CARPET: 1
LIME_CONCRETE: 3
LIME_CONCRETE_POWDER: 2
LIME_GLAZED_TERRACOTTA: 5
LIME_SHULKER_BOX: 11
LIME_STAINED_GLASS: 2
LIME_STAINED_GLASS_PANE: 1
LIME_TERRACOTTA: 2
LIME_WALL_BANNER: 2
LIME_WOOL: 2
LOOM: 5
MAGENTA_BANNER: 2
MAGENTA_BED: 6
MAGENTA_CARPET: 1
MAGENTA_CONCRETE: 3
MAGENTA_CONCRETE_POWDER: 2
MAGENTA_GLAZED_TERRACOTTA: 5
MAGENTA_SHULKER_BOX: 11
MAGENTA_STAINED_GLASS: 2
MAGENTA_STAINED_GLASS_PANE: 1
MAGENTA_TERRACOTTA: 2
MAGENTA_WALL_BANNER: 2
MAGENTA_WOOL: 2
MAGMA_BLOCK: 1
MELON: 1
MELON_STEM: 1
MOSSY_COBBLESTONE: 1
MOSSY_COBBLESTONE_SLAB: 1
MOSSY_COBBLESTONE_STAIRS: 1
MOSSY_COBBLESTONE_WALL: 1
MOSSY_STONE_BRICKS: 2
MOSSY_STONE_BRICK_SLAB: 2
MOSSY_STONE_BRICK_STAIRS: 2
MOSSY_STONE_BRICK_WALL: 2
MYCELIUM: 5
NETHERRACK: 1
NETHER_BRICKS: 2
NETHER_BRICK_FENCE: 2
NETHER_BRICK_SLAB: 1
NETHER_BRICK_STAIRS: 2
NETHER_BRICK_WALL: 2
NETHER_PORTAL: 1
NETHER_QUARTZ_ORE: 1
NETHER_WART_BLOCK: 2
NOTE_BLOCK: 10
OAK_BUTTON: 1
OAK_DOOR: 2
OAK_FENCE: 2
OAK_FENCE_GATE: 4
OAK_LEAVES: 0
OAK_LOG: 0
OAK_PLANKS: 1
OAK_PRESSURE_PLATE: 2
OAK_SAPLING: 1
OAK_SIGN: 6
OAK_SLAB: 1
OAK_STAIRS: 2
OAK_TRAPDOOR: 3
OAK_WALL_SIGN: 6
OAK_WOOD: 1
OBSERVER: 1
OBSIDIAN: 10
ORANGE_BANNER: 2
ORANGE_BED: 6
ORANGE_CARPET: 1
ORANGE_CONCRETE: 3
ORANGE_CONCRETE_POWDER: 2
ORANGE_GLAZED_TERRACOTTA: 5
ORANGE_SHULKER_BOX: 11
ORANGE_STAINED_GLASS: 2
ORANGE_STAINED_GLASS_PANE: 1
ORANGE_TERRACOTTA: 2
ORANGE_TULIP: 1
ORANGE_WALL_BANNER: 2
ORANGE_WOOL: 2
OXEYE_DAISY: 1
PACKED_ICE: 5
PEONY: 1
PETRIFIED_OAK_SLAB: 1
PINK_BANNER: 2
PINK_BED: 6
PINK_CARPET: 1
PINK_CONCRETE: 3
PINK_CONCRETE_POWDER: 2
PINK_GLAZED_TERRACOTTA: 5
PINK_SHULKER_BOX: 11
PINK_STAINED_GLASS: 2
PINK_STAINED_GLASS_PANE: 1
PINK_TERRACOTTA: 2
PINK_TULIP: 1
PINK_WALL_BANNER: 2
PINK_WOOL: 2
PISTON: 2
PLAYER_HEAD: 1
PLAYER_WALL_HEAD: 1
PODZOL: 2
POLISHED_ANDESITE: 1
POLISHED_ANDESITE_SLAB: 1
POLISHED_ANDESITE_STAIRS: 1
POLISHED_DIORITE: 1
POLISHED_DIORITE_SLAB: 1
POLISHED_DIORITE_STAIRS: 1
POLISHED_GRANITE: 1
POLISHED_GRANITE_SLAB: 1
POLISHED_GRANITE_STAIRS: 1
POPPY: 1
POTATOES: 1
POTTED_ACACIA_SAPLING: 1
POTTED_ALLIUM: 1
POTTED_AZURE_BLUET: 1
POTTED_BAMBOO: 1
POTTED_BIRCH_SAPLING: 1
POTTED_BLUE_ORCHID: 1
POTTED_BROWN_MUSHROOM: 1
POTTED_CACTUS: 1
POTTED_CORNFLOWER: 1
POTTED_DANDELION: 1
POTTED_DARK_OAK_SAPLING: 1
POTTED_DEAD_BUSH: 1
POTTED_FERN: 1
POTTED_JUNGLE_SAPLING: 1
POTTED_LILY_OF_THE_VALLEY: 1
POTTED_OAK_SAPLING: 1
POTTED_ORANGE_TULIP: 1
POTTED_OXEYE_DAISY: 1
POTTED_PINK_TULIP: 1
POTTED_POPPY: 1
POTTED_RED_MUSHROOM: 1
POTTED_RED_TULIP: 1
POTTED_SPRUCE_SAPLING: 1
POTTED_WHITE_TULIP: 1
POTTED_WITHER_ROSE: 1
POWERED_RAIL: 2
PRISMARINE: 1
PRISMARINE_BRICKS: 2
PRISMARINE_BRICK_SLAB: 1
PRISMARINE_BRICK_STAIRS: 2
PRISMARINE_SLAB: 1
PRISMARINE_STAIRS: 2
PRISMARINE_WALL: 2
PUMPKIN: 1
PUMPKIN_STEM: 1
PURPLE_BANNER: 2
PURPLE_BED: 6
PURPLE_CARPET: 1
PURPLE_CONCRETE: 3
PURPLE_CONCRETE_POWDER: 2
PURPLE_GLAZED_TERRACOTTA: 5
PURPLE_SHULKER_BOX: 11
PURPLE_STAINED_GLASS: 2
PURPLE_STAINED_GLASS_PANE: 1
PURPLE_TERRACOTTA: 2
PURPLE_WALL_BANNER: 2
PURPLE_WOOL: 2
PURPUR_BLOCK: 1
PURPUR_PILLAR: 1
PURPUR_SLAB: 1
PURPUR_STAIRS: 2
QUARTZ_BLOCK: 1
QUARTZ_PILLAR: 1
QUARTZ_SLAB: 1
QUARTZ_STAIRS: 2
RAIL: 1
REDSTONE_BLOCK: 10
REDSTONE_LAMP: 10
REDSTONE_ORE: 1
REDSTONE_TORCH: 5
REDSTONE_WALL_TORCH: 5
REDSTONE_WIRE: 1
RED_BANNER: 2
RED_BED: 6
RED_CARPET: 1
RED_CONCRETE: 3
RED_CONCRETE_POWDER: 2
RED_GLAZED_TERRACOTTA: 5
RED_MUSHROOM: 1
RED_MUSHROOM_BLOCK: 1
RED_NETHER_BRICKS: 2
RED_NETHER_BRICK_SLAB: 2
RED_NETHER_BRICK_STAIRS: 2
RED_NETHER_BRICK_WALL: 2
RED_SAND: 1
RED_SANDSTONE: 1
RED_SANDSTONE_SLAB: 1
RED_SANDSTONE_STAIRS: 2
RED_SANDSTONE_WALL: 2
RED_SHULKER_BOX: 11
RED_STAINED_GLASS: 2
RED_STAINED_GLASS_PANE: 1
RED_TERRACOTTA: 2
RED_TULIP: 1
RED_WALL_BANNER: 2
RED_WOOL: 2
REPEATER: 6
REPEATING_COMMAND_BLOCK: 0
ROSE_BUSH: 1
SAND: 1
SANDSTONE: 1
SANDSTONE_SLAB: 1
SANDSTONE_STAIRS: 2
SANDSTONE_WALL: 2
SCAFFOLDING: 1
SEAGRASS: 1
SEA_LANTERN: 9
SEA_PICKLE: 1
SHULKER_BOX: 10
SKELETON_SKULL: 10
SKELETON_WALL_SKULL: 100
SLIME_BLOCK: 10
SMITHING_TABLE: 6
SMOKER: 10
SMOOTH_QUARTZ: 1
SMOOTH_QUARTZ_SLAB: 1
SMOOTH_QUARTZ_STAIRS: 1
SMOOTH_RED_SANDSTONE: 1
SMOOTH_RED_SANDSTONE_SLAB: 1
SMOOTH_RED_SANDSTONE_STAIRS: 1
SMOOTH_SANDSTONE: 1
SMOOTH_SANDSTONE_SLAB: 1
SMOOTH_SANDSTONE_STAIRS: 1
SMOOTH_STONE: 1
SMOOTH_STONE_SLAB: 1
SNOW: 1
SNOW_BLOCK: 1
SOUL_SAND: 2
SPAWNER: 1
SPONGE: 10
SPRUCE_BUTTON: 1
SPRUCE_DOOR: 2
SPRUCE_FENCE: 2
SPRUCE_FENCE_GATE: 4
SPRUCE_LEAVES: 0
SPRUCE_LOG: 0
SPRUCE_PLANKS: 1
SPRUCE_PRESSURE_PLATE: 2
SPRUCE_SAPLING: 1
SPRUCE_SIGN: 6
SPRUCE_SLAB: 1
SPRUCE_STAIRS: 2
SPRUCE_TRAPDOOR: 3
SPRUCE_WALL_SIGN: 6
SPRUCE_WOOD: 1
STICKY_PISTON: 1
STONE: 1
STONECUTTER: 4
STONE_BRICKS: 2
STONE_BRICK_SLAB: 1
STONE_BRICK_STAIRS: 2
STONE_BRICK_WALL: 2
STONE_BUTTON: 1
STONE_PRESSURE_PLATE: 2
STONE_SLAB: 1
STONE_STAIRS: 1
STRIPPED_ACACIA_LOG: 0
STRIPPED_ACACIA_WOOD: 1
STRIPPED_BIRCH_LOG: 0
STRIPPED_BIRCH_WOOD: 1
STRIPPED_DARK_OAK_LOG: 0
STRIPPED_DARK_OAK_WOOD: 1
STRIPPED_JUNGLE_LOG: 0
STRIPPED_JUNGLE_WOOD: 1
STRIPPED_OAK_LOG: 0
STRIPPED_OAK_WOOD: 1
STRIPPED_SPRUCE_LOG: 0
STRIPPED_SPRUCE_WOOD: 1
SUGAR_CANE: 1
SUNFLOWER: 1
SWEET_BERRY_BUSH: 1
TALL_GRASS: 1
TALL_SEAGRASS: 1
TERRACOTTA: 2
TNT: 5
TORCH: 1
TRAPPED_CHEST: 10
TRIPWIRE: 2
TRIPWIRE_HOOK: 2
TUBE_CORAL_BLOCK: 1
TUBE_CORAL_FAN: 1
TUBE_CORAL_WALL_FAN: 1
TURTLE_EGG: 1
VINE: 1
VOID_AIR: 0
WALL_TORCH: 1
WATER: 0
WET_SPONGE: 10
WHEAT: 1
WHITE_BANNER: 2
WHITE_BED: 6
WHITE_CARPET: 1
WHITE_CONCRETE: 3
WHITE_CONCRETE_POWDER: 2
WHITE_GLAZED_TERRACOTTA: 5
WHITE_SHULKER_BOX: 11
WHITE_STAINED_GLASS: 2
WHITE_STAINED_GLASS_PANE: 1
WHITE_TERRACOTTA: 2
WHITE_TULIP: 1
WHITE_WALL_BANNER: 2
WHITE_WOOL: 2
WITHER_ROSE: 1
WITHER_SKELETON_SKULL: 10
WITHER_SKELETON_WALL_SKULL: 10
YELLOW_BANNER: 2
YELLOW_BED: 6
YELLOW_CARPET: 1
YELLOW_CONCRETE: 3
YELLOW_CONCRETE_POWDER: 2
YELLOW_GLAZED_TERRACOTTA: 5
YELLOW_SHULKER_BOX: 11
YELLOW_STAINED_GLASS: 2
YELLOW_STAINED_GLASS_PANE: 1
YELLOW_TERRACOTTA: 2
YELLOW_WALL_BANNER: 2
YELLOW_WOOL: 2
ZOMBIE_HEAD: 1
ZOMBIE_WALL_HEAD: 1
# World differences
# List any blocks that have a different value in a specific world
# If a block is not listed, the default value will be used
# Prefix with world name
worlds:
acidisland_world:
SAND: 0
SANDSTONE: 0
ICE: 0

View File

@ -22,7 +22,7 @@ import world.bentobox.bentobox.api.user.User;
import world.bentobox.bentobox.managers.IslandWorldManager;
import world.bentobox.bentobox.managers.IslandsManager;
import world.bentobox.level.calculators.PlayerLevel;
import world.bentobox.level.config.Settings;
import world.bentobox.level.config.BlockConfig;
/**
* @author tastybento
@ -39,7 +39,7 @@ public class LevelPresenterTest {
@Mock
private PlayerLevel pl;
@Mock
private Settings settings;
private BlockConfig settings;
@Before
public void setUp() throws Exception {

View File

@ -266,11 +266,6 @@ public class LevelTest {
verify(cmd, times(3)).getAddon(); // Three commands
verify(adminCmd, times(2)).getAddon(); // Two commands
// Placeholders
verify(phm).registerPlaceholder(eq(addon), eq("bskyblock-island-level"), any());
for (int i = 1; i < 11; i++) {
verify(phm).registerPlaceholder(eq(addon), eq("bskyblock-island-level-top-name-" + i), any());
verify(phm).registerPlaceholder(eq(addon), eq("bskyblock-island-level-top-value-" + i), any());
}
verify(phm).registerPlaceholder(eq(addon), eq("bskyblock_island_level"), any());
verify(phm).registerPlaceholder(eq(addon), eq("bskyblock_visited_island_level"), any());
for (int i = 1; i < 11; i++) {
@ -316,7 +311,7 @@ public class LevelTest {
@Test
public void testGetSettings() {
addon.onEnable();
world.bentobox.level.config.Settings s = addon.getSettings();
world.bentobox.level.config.BlockConfig s = addon.getSettings();
assertEquals(100, s.getDeathPenalty());
}

View File

@ -43,7 +43,7 @@ import world.bentobox.bentobox.database.DatabaseSetup;
import world.bentobox.bentobox.managers.IslandWorldManager;
import world.bentobox.bentobox.managers.IslandsManager;
import world.bentobox.bentobox.managers.PlayersManager;
import world.bentobox.level.config.Settings;
import world.bentobox.level.config.BlockConfig;
import world.bentobox.level.objects.TopTenData;
@RunWith(PowerMockRunner.class)
@ -73,7 +73,7 @@ public class TopTenTest {
@Mock
private LevelPresenter lp;
@Mock
private Settings settings;
private BlockConfig settings;
@SuppressWarnings("unchecked")