Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
115 changes: 115 additions & 0 deletions docs/MAIN-CLASSES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
# **Level Plugin Documentation**

📌 **Repository:** [BentoBoxWorld/Level](https://github.com/BentoBoxWorld/Level)
📌 **Purpose:** This document provides documentation for all major classes in the Level plugin.
📌 **Target Audience:** Programmers or maintainers of this code.

## **Table of Contents**
- [Core Classes](#core-classes)
- [Managers](#managers)
- [Calculators](#calculators)
- [Commands](#commands)
- [Events](#events)
- [Panels (GUI)](#panels-gui)
- [Utilities](#utilities)

---

## **1️⃣ Core Classes**
### **Level**
📍 [`Level.java`](https://github.com/BentoBoxWorld/Level/blob/develop/src/main/java/world/bentobox/level/Level.java)
Handles configuration, plugin hooks, and initialization. Level uses the BentoBox Addon API, which follows the Plugin style.
**Main Methods:**
- `onLoad()`, `onEnable()`, `allLoaded()`, `getIslandLevel()`, `setIslandLevel()`

`allLoaded()` is a method that BentoBox calls when all the Addons have been loaded, which usually means that all the BentoBox worlds have been loaded. This is important because Level will be referencing worlds.
`getIslandLevel()` is used by the Level addon, but is also used by external Plugins to obtain island levels for players.

### **LevelPladdon**
📍 [`LevelPladdon.java`](https://github.com/BentoBoxWorld/Level/blob/develop/src/main/java/world/bentobox/level/LevelPladdon.java)
A wrapper for registering the Level addon. Pladdons are wrappers that make Addons Plugins. This is required because servers like Paper
do byte-code-level conversions when the code is loaded and so the Addons have to be Plugins to benefit from this.
**Main Method:**
- `getAddon()`

---

## **2️⃣ Managers**
### **LevelsManager**
📍 [`LevelsManager.java`](https://github.com/BentoBoxWorld/Level/blob/develop/src/main/java/world/bentobox/level/LevelsManager.java)
Manages island level calculations, leaderboards, and formatting.
**Main Methods:**
- `calculateLevel()`, `getIslandLevel()`, `getTopTen()`

### **PlaceholderManager**
📍 [`PlaceholderManager.java`](https://github.com/BentoBoxWorld/Level/blob/develop/src/main/java/world/bentobox/level/PlaceholderManager.java)
Handles dynamic placeholders.
**Main Methods:**
- `registerPlaceholders()`, `getRankName()`, `getVisitedIslandLevel()`

---

## **3️⃣ Calculators**
### **EquationEvaluator**
📍 [`EquationEvaluator.java`](https://github.com/BentoBoxWorld/Level/blob/develop/src/main/java/world/bentobox/level/calculators/EquationEvaluator.java)
Evaluates mathematical expressions dynamically.
**Main Method:**
- `eval(String)`

### **IslandLevelCalculator**
📍 [`IslandLevelCalculator.java`](https://github.com/BentoBoxWorld/Level/blob/develop/src/main/java/world/bentobox/level/calculators/IslandLevelCalculator.java)
Computes island levels by scanning blocks and entities.
**Main Methods:**
- `scanIsland()`, `calculateLevel()`

### **UltimateStackerCalc**
📍 [`UltimateStackerCalc.java`](https://github.com/BentoBoxWorld/Level/blob/develop/src/main/java/world/bentobox/level/calculators/UltimateStackerCalc.java)
Handles calculations for stacked blocks from the plugin UltimateStacker.
**Main Method:**
- `addStackers()`

---

## **4️⃣ Commands**
📌 [Command Handlers Directory](https://github.com/BentoBoxWorld/Level/tree/develop/src/main/java/world/bentobox/level/commands)

- **Admin Commands**
- [`AdminLevelStatusCommand.java`](#) → Displays islands in calculation queue.
- [`AdminSetInitialLevelCommand.java`](#) → Sets initial island level.

- **Player Commands**
- [`IslandLevelCommand.java`](#) → Triggers level calculation.
- [`IslandTopCommand.java`](#) → Shows top island levels.

---

## **5️⃣ Events**
### **IslandActivitiesListeners**
📍 [`IslandActivitiesListeners.java`](https://github.com/BentoBoxWorld/Level/blob/develop/src/main/java/world/bentobox/level/listeners/IslandActivitiesListeners.java)
Handles **island creation, deletion, and ownership changes**.
**Main Events:**
- `onNewIsland()`, `onIslandDelete()`, `onNewIslandOwner()`

---

## **6️⃣ Panels (GUI)**
### **TopLevelPanel**
📍 [`TopLevelPanel.java`](https://github.com/BentoBoxWorld/Level/blob/develop/src/main/java/world/bentobox/level/panels/TopLevelPanel.java)
Displays the **top 10 ranked islands** in a GUI.
**Main Methods:**
- `build()`, `createPlayerButton()`, `openPanel()`

### **ValuePanel**
📍 [`ValuePanel.java`](https://github.com/BentoBoxWorld/Level/blob/develop/src/main/java/world/bentobox/level/panels/ValuePanel.java)
Displays **block values** for island levels.
**Main Methods:**
- `build()`, `createMaterialButton()`, `openPanel()`

---

## **7️⃣ Utilities**
📌 [Utility Classes Directory](https://github.com/BentoBoxWorld/Level/tree/develop/src/main/java/world/bentobox/level/util)

- **Utils.java** → General helper methods.
- **ConversationUtils.java** → Handles player text input in conversations.

2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@
<!-- Do not change unless you want different name for local builds. -->
<build.number>-LOCAL</build.number>
<!-- This allows to change between versions. -->
<build.version>2.19.0</build.version>
<build.version>2.19.1</build.version>
<sonar.projectKey>BentoBoxWorld_Level</sonar.projectKey>
<sonar.organization>bentobox-world</sonar.organization>
<sonar.host.url>https://sonarcloud.io</sonar.host.url>
Expand Down
10 changes: 4 additions & 6 deletions src/main/java/world/bentobox/level/config/BlockConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,9 @@ public Integer getValue(World world, Object obj) {
* @return true if hidden
*/
public boolean isHiddenBlock(Object obj) {
if (obj instanceof Material m) {
if (obj instanceof String s) {
return hiddenBlocks.contains(s);
} else if (obj instanceof Material m) {
return hiddenBlocks.contains(m.name());
}
return hiddenBlocks.contains(Material.SPAWNER.name());
Expand All @@ -250,11 +252,7 @@ public boolean isHiddenBlock(Object obj) {
* @return false if hidden
*/
public boolean isNotHiddenBlock(Object obj) {
if (obj instanceof Material m) {
return !hiddenBlocks.contains(m.name());
} else {
return !hiddenBlocks.contains(Material.SPAWNER.name());
}
return !isHiddenBlock(obj);
}

/**
Expand Down
1 change: 1 addition & 0 deletions src/main/java/world/bentobox/level/panels/ValuePanel.java
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,7 @@ private ValuePanel(Level addon,
this.activeFilter = Filter.NAME_ASC;

addon.getBlockConfig().getBlockValues().entrySet().stream().filter(en -> this.getIcon(en.getKey()) != null)
.filter(en -> addon.getBlockConfig().isNotHiddenBlock(en.getKey()))
.forEach(en -> blockRecordList
.add(new BlockRecord(en.getKey(), Objects.requireNonNullElse(en.getValue(), 0),
Objects.requireNonNullElse(addon.getBlockConfig().getLimit(en.getKey()), 0))));
Expand Down