mirror of
https://github.com/BentoBoxWorld/Level.git
synced 2024-11-25 12:15:55 +01:00
Add the ability to hide blocks from the GUI #324
This commit is contained in:
parent
61719cdf3a
commit
b9b5668fb9
@ -2,9 +2,12 @@ package world.bentobox.level.config;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.EnumMap;
|
import java.util.EnumMap;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
@ -26,6 +29,7 @@ public class BlockConfig {
|
|||||||
private Map<Material, Integer> blockLimits = new EnumMap<>(Material.class);
|
private Map<Material, Integer> blockLimits = new EnumMap<>(Material.class);
|
||||||
private Map<Material, Integer> blockValues = new EnumMap<>(Material.class);
|
private Map<Material, Integer> blockValues = new EnumMap<>(Material.class);
|
||||||
private final Map<World, Map<Material, Integer>> worldBlockValues = new HashMap<>();
|
private final Map<World, Map<Material, Integer>> worldBlockValues = new HashMap<>();
|
||||||
|
private final List<Material> hiddenBlocks;
|
||||||
private Level addon;
|
private Level addon;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -49,6 +53,16 @@ public class BlockConfig {
|
|||||||
if (blockValues.isConfigurationSection("worlds")) {
|
if (blockValues.isConfigurationSection("worlds")) {
|
||||||
loadWorlds(blockValues);
|
loadWorlds(blockValues);
|
||||||
}
|
}
|
||||||
|
// Hidden
|
||||||
|
hiddenBlocks = blockValues.getStringList("hidden-blocks").stream().map(name -> {
|
||||||
|
try {
|
||||||
|
return Material.valueOf(name.toUpperCase(Locale.ENGLISH));
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}).filter(Objects::nonNull).toList();
|
||||||
|
|
||||||
// All done
|
// All done
|
||||||
blockValues.save(file);
|
blockValues.save(file);
|
||||||
}
|
}
|
||||||
@ -159,5 +173,22 @@ public class BlockConfig {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return true if the block should be hidden
|
||||||
|
* @param m block material
|
||||||
|
* @return true if hidden
|
||||||
|
*/
|
||||||
|
public boolean isHiddenBlock(Material m) {
|
||||||
|
return hiddenBlocks.contains(m);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return true if the block should not be hidden
|
||||||
|
* @param m block material
|
||||||
|
* @return false if hidden
|
||||||
|
*/
|
||||||
|
public boolean isNotHiddenBlock(Material m) {
|
||||||
|
return !hiddenBlocks.contains(m);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -126,6 +126,9 @@ public class DetailsPanel {
|
|||||||
return value == null || value == 0;
|
return value == null || value == 0;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Remove any hidden blocks
|
||||||
|
materialCountMap.keySet().removeIf(this.addon.getBlockConfig()::isHiddenBlock);
|
||||||
|
|
||||||
materialCountMap.entrySet().stream().sorted((Map.Entry.comparingByKey())).forEachOrdered(entry -> {
|
materialCountMap.entrySet().stream().sorted((Map.Entry.comparingByKey())).forEachOrdered(entry -> {
|
||||||
if (entry.getValue() > 0) {
|
if (entry.getValue() > 0) {
|
||||||
this.materialCountList.add(new Pair<>(entry.getKey(), entry.getValue()));
|
this.materialCountList.add(new Pair<>(entry.getKey(), entry.getValue()));
|
||||||
@ -142,16 +145,24 @@ public class DetailsPanel {
|
|||||||
this.levelsData.getUwCount().forEach((material, count) -> materialCountMap.put(material,
|
this.levelsData.getUwCount().forEach((material, count) -> materialCountMap.put(material,
|
||||||
materialCountMap.computeIfAbsent(material, key -> 0) + count));
|
materialCountMap.computeIfAbsent(material, key -> 0) + count));
|
||||||
|
|
||||||
|
// Remove any hidden blocks
|
||||||
|
materialCountMap.keySet().removeIf(this.addon.getBlockConfig()::isHiddenBlock);
|
||||||
|
|
||||||
materialCountMap.entrySet().stream().sorted((Map.Entry.comparingByKey()))
|
materialCountMap.entrySet().stream().sorted((Map.Entry.comparingByKey()))
|
||||||
.forEachOrdered(entry -> this.materialCountList.add(new Pair<>(entry.getKey(), entry.getValue())));
|
.forEachOrdered(entry -> this.materialCountList.add(new Pair<>(entry.getKey(), entry.getValue())));
|
||||||
}
|
}
|
||||||
case ABOVE_SEA_LEVEL -> this.levelsData.getMdCount().entrySet().stream().sorted((Map.Entry.comparingByKey()))
|
case ABOVE_SEA_LEVEL -> this.levelsData.getMdCount().entrySet().stream()
|
||||||
|
.filter(en -> this.addon.getBlockConfig().isNotHiddenBlock(en.getKey()))
|
||||||
|
.sorted((Map.Entry.comparingByKey()))
|
||||||
.forEachOrdered(entry -> this.materialCountList.add(new Pair<>(entry.getKey(), entry.getValue())));
|
.forEachOrdered(entry -> this.materialCountList.add(new Pair<>(entry.getKey(), entry.getValue())));
|
||||||
|
|
||||||
case UNDERWATER -> this.levelsData.getUwCount().entrySet().stream().sorted((Map.Entry.comparingByKey()))
|
case UNDERWATER -> this.levelsData.getUwCount().entrySet().stream()
|
||||||
|
.filter(en -> this.addon.getBlockConfig().isNotHiddenBlock(en.getKey()))
|
||||||
|
.sorted((Map.Entry.comparingByKey()))
|
||||||
.forEachOrdered(entry -> this.materialCountList.add(new Pair<>(entry.getKey(), entry.getValue())));
|
.forEachOrdered(entry -> this.materialCountList.add(new Pair<>(entry.getKey(), entry.getValue())));
|
||||||
|
|
||||||
case SPAWNER -> {
|
case SPAWNER -> {
|
||||||
|
if (this.addon.getBlockConfig().isNotHiddenBlock(Material.SPAWNER)) {
|
||||||
int aboveWater = this.levelsData.getMdCount().getOrDefault(Material.SPAWNER, 0);
|
int aboveWater = this.levelsData.getMdCount().getOrDefault(Material.SPAWNER, 0);
|
||||||
int underWater = this.levelsData.getUwCount().getOrDefault(Material.SPAWNER, 0);
|
int underWater = this.levelsData.getUwCount().getOrDefault(Material.SPAWNER, 0);
|
||||||
|
|
||||||
@ -159,6 +170,7 @@ public class DetailsPanel {
|
|||||||
this.materialCountList.add(new Pair<>(Material.SPAWNER, underWater + aboveWater));
|
this.materialCountList.add(new Pair<>(Material.SPAWNER, underWater + aboveWater));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Comparator<Pair<Material, Integer>> sorter;
|
Comparator<Pair<Material, Integer>> sorter;
|
||||||
|
|
||||||
|
@ -10,6 +10,10 @@
|
|||||||
limits:
|
limits:
|
||||||
COBBLESTONE: 10000
|
COBBLESTONE: 10000
|
||||||
NETHERRACK: 1000
|
NETHERRACK: 1000
|
||||||
|
# These blocks will never be shown in the GUI even if they have value
|
||||||
|
hidden-blocks:
|
||||||
|
- BEDROCK
|
||||||
|
- AIR
|
||||||
blocks:
|
blocks:
|
||||||
ACACIA_BUTTON: 1
|
ACACIA_BUTTON: 1
|
||||||
ACACIA_DOOR: 2
|
ACACIA_DOOR: 2
|
||||||
|
Loading…
Reference in New Issue
Block a user