> getHeadsDatabase() {
+ return headsDatabase;
+ }
+
}
diff --git a/src/main/java/plugily/projects/buildbattle/handlers/misc/HeadDatabaseManager.java b/src/main/java/plugily/projects/buildbattle/handlers/misc/HeadDatabaseManager.java
new file mode 100644
index 00000000..ce40a6d6
--- /dev/null
+++ b/src/main/java/plugily/projects/buildbattle/handlers/misc/HeadDatabaseManager.java
@@ -0,0 +1,194 @@
+package plugily.projects.buildbattle.handlers.misc;
+
+import plugily.projects.buildbattle.Main;
+import plugily.projects.minigamesbox.classic.utils.configuration.ConfigUtils;
+
+import javax.net.ssl.HttpsURLConnection;
+import java.io.*;
+import java.net.URL;
+import java.nio.file.Files;
+import java.util.*;
+import java.util.logging.Level;
+
+/**
+ * @author Tigerpanzer_02
+ *
+ * Created at 09.07.2025
+ */
+public class HeadDatabaseManager {
+
+ private final Main plugin;
+ private final ArrayList headCatalog = new ArrayList<>(Arrays.asList("alphabet", "animals", "blocks", "decoration", "food-drinks", "humanoid", "humans", "miscellaneous", "monsters", "plants"));
+
+ public HeadDatabaseManager(Main plugin) {
+ this.plugin = plugin;
+ try(Scanner scanner = new Scanner(requestHeadFetch(null), "UTF-8").useDelimiter("\\A")) {
+ String data = scanner.hasNext() ? scanner.next() : "";
+ File file = new File(plugin.getDataFolder().getPath() + "/heads/database/head_data.yml");
+ if(!file.exists()) {
+ new File(plugin.getDataFolder().getPath() + "/heads/").mkdir();
+ new File(plugin.getDataFolder().getPath() + "/heads/database/").mkdir();
+ if(!file.createNewFile()) {
+ plugin.getDebugger().debug(Level.WARNING, "Couldn't create heads folder! We must disable heads support.");
+ return;
+ }
+ }
+ Files.write(file.toPath(), data.getBytes());
+ plugin.getDebugger().debug(Level.WARNING, "Fetched latest heads file from repository.");
+ } catch(IOException ignored) {
+ //ignore exceptions
+ plugin.getDebugger().debug(Level.WARNING, "Couldn't access heads fetcher service or there is other problem! You should notify author!");
+ }
+ }
+
+ public DownloadStatus getDatabase(String databaseName) {
+ if(!headCatalog.contains(databaseName)) {
+ return DownloadStatus.FAIL;
+ }
+ return download(plugin, databaseName);
+ }
+
+ public ArrayList getHeadCatalog() {
+ return headCatalog;
+ }
+
+ private DownloadStatus download(Main plugin, String name) {
+ DownloadStatus status = demandHeadDownload(name);
+ if(status == DownloadStatus.FAIL) {
+ plugin.getDebugger().debug(Level.WARNING, "&cHeads service couldn't download latest heads for plugin! Reduced heads will be used instead!");
+ } else if(status == DownloadStatus.SUCCESS) {
+ plugin.getDebugger().debug(Level.WARNING, "&aDownloaded heads " + name + " properly!");
+ } else if(status == DownloadStatus.LATEST) {
+ plugin.getDebugger().debug(Level.WARNING, "&aHeads " + name + " is latest! Awesome!");
+ }
+ return status;
+ }
+
+
+ private InputStream requestHeadFetch(String head) {
+ try {
+ URL url = new URL("https://api.plugily.xyz/onlineservices/v1/fetch.php");
+ HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
+ conn.setRequestMethod("POST");
+ conn.setRequestProperty("User-Agent", "PlugilyProjectsOnlineServices/1.0");
+ conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
+ conn.setRequestProperty("Accept-Charset", "UTF-8");
+ conn.setDoOutput(true);
+
+ OutputStream os = conn.getOutputStream();
+ if(head == null) {
+ os.write(("pass=onlineservice").getBytes("UTF-8"));
+ } else {
+ os.write(("pass=onlineservice&head=" + head).getBytes("UTF-8"));
+ }
+ os.flush();
+ os.close();
+ return conn.getInputStream();
+ } catch(IOException e) {
+ plugin.getDebugger().debug(Level.SEVERE, "Could not fetch heads from plugily.xyz api! Cause: {0} ({1})", new Object[]{e.getCause(), e.getMessage()});
+ return new InputStream() {
+ @Override
+ public int read() {
+ return -1;
+ }
+ };
+ }
+ }
+
+ private DownloadStatus demandHeadDownload(String head) {
+ File headFile = new File(plugin.getDataFolder() + "/heads/database/" + head + ".yml");
+ if(!headFile.exists() || !isExact(head, headFile)) {
+ return writeFile(head);
+ }
+ return DownloadStatus.LATEST;
+ }
+
+ private boolean isExact(String head, File file) {
+ try(Scanner scanner = new Scanner(requestHeadFetch(head), "UTF-8").useDelimiter("\\A");
+ Scanner localScanner = new Scanner(file, "UTF-8").useDelimiter("\\A")) {
+ String onlineData = scanner.hasNext() ? scanner.next() : "";
+ String localData = localScanner.hasNext() ? localScanner.next() : "";
+
+ return onlineData.equals(localData);
+ } catch(IOException ignored) {
+ return false;
+ }
+ }
+
+ private DownloadStatus writeFile(String head) {
+ try(Scanner scanner = new Scanner(requestHeadFetch(head), "UTF-8").useDelimiter("\\A")) {
+ String data = scanner.hasNext() ? scanner.next() : "";
+ try(OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(plugin.getDataFolder().getPath() + "/heads/database/" + head + ".yml"), "UTF-8")) {
+ writer.write(data);
+ }
+ return DownloadStatus.SUCCESS;
+ } catch(IOException ignored) {
+ plugin.getDebugger().debug(Level.WARNING, "Demanded head " + head + " cannot be downloaded! You should notify author!");
+ return DownloadStatus.FAIL;
+ }
+ }
+
+/*
+ [ARCHIVE] Convert Heads with Json to YML Code
+ private void loadFileFromJSONde(String input) {
+ long start = System.currentTimeMillis();
+ JsonElement element = getJsonElement("https://raw.githubusercontent.com/Plugily-Projects/online-services/refs/heads/master/buildbattle/headdatabase/raw/" + input + ".yml");
+ or
+ JsonElement element = getJsonElement("https://minecraft-heads.com/scripts/api.php?cat=decoration");
+ if(element == null) {
+ return;
+ }
+ JsonArray outputJson = element.getAsJsonArray();
+ AtomicInteger i = new AtomicInteger();
+ i.set(0);
+ outputJson.forEach(categoryElement -> {
+ JsonObject category = categoryElement.getAsJsonObject();
+ if(category.get("name") == null) {
+ return;
+ }
+ if(category.get("value") == null) {
+ return;
+ }
+ String name = category.get("name").getAsString();
+ String value = category.get("value").getAsString();
+ if(heads.get(name) != null) {
+ heads.put(name + " (dup) " + i.get(), value);
+ i.getAndIncrement();
+ } else
+ heads.put(name, value);
+ });
+ System.out.println(heads);
+ FileConfiguration categoryConfig = ConfigUtils.getConfig(plugin, "heads/menus/hd/" + input);
+ for(Map.Entry entry : heads.entrySet()) {
+ // System.out.println("Trying to save -> " + entry.getKey() + " "+ entry.getValue());
+ categoryConfig.set(entry.getKey().replace(".", " "), entry.getValue());
+ }
+ ConfigUtils.saveConfig(plugin, categoryConfig, "heads/menus/hd/" + input);
+ System.out.println("[System] [Plugin] Head finished took ms" + (System.currentTimeMillis() - start));
+ heads.clear();
+ }
+
+ private final String USER_AGENT = "Plugily Projects Converter v1";
+
+ public JsonElement getJsonElement(String fullURL) {
+ try {
+ URL url = new URL(fullURL);
+ HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+ connection.addRequestProperty("User-Agent", USER_AGENT);
+ InputStream inputStream = connection.getInputStream();
+ InputStreamReader reader = new InputStreamReader(inputStream);
+ return new JsonParser().parse(reader);
+ } catch(IOException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ */
+
+ public enum DownloadStatus {
+ SUCCESS, FAIL, LATEST
+ }
+
+
+}
diff --git a/src/main/java/plugily/projects/buildbattle/handlers/setup/SpecificCategory.java b/src/main/java/plugily/projects/buildbattle/handlers/setup/SpecificCategory.java
index 9ccdf6c2..42a5f1fc 100644
--- a/src/main/java/plugily/projects/buildbattle/handlers/setup/SpecificCategory.java
+++ b/src/main/java/plugily/projects/buildbattle/handlers/setup/SpecificCategory.java
@@ -23,6 +23,7 @@
import org.bukkit.entity.Player;
import plugily.projects.buildbattle.arena.BaseArena;
import plugily.projects.buildbattle.arena.GuessArena;
+import plugily.projects.minigamesbox.classic.handlers.language.MessageBuilder;
import plugily.projects.minigamesbox.classic.handlers.setup.categories.PluginSpecificCategory;
import plugily.projects.minigamesbox.classic.handlers.setup.items.category.CountItem;
import plugily.projects.minigamesbox.classic.handlers.setup.items.category.MultiLocationItem;
@@ -52,8 +53,20 @@ public void addItems(NormalFastInv gui) {
getItemList().add(gamePlot);
MultiLocationItem floorNPC = new MultiLocationItem(getSetupInventory(), new ItemBuilder(XMaterial.VILLAGER_SPAWN_EGG.parseMaterial()), "Floor Changer NPC", "Add floor changer NPC to your plot.\nRequires Citizens plugin! Runs addnpc command", "floornpc", 0, event -> {
- ((Player) event.getWhoClicked()).performCommand("bba addnpc");
+ switch (event.getClick()) {
+ case LEFT:
+ ((Player) event.getWhoClicked()).performCommand("bba addnpc");
+ }
}, interactEvent -> {
+ switch (interactEvent.getAction()) {
+ case PHYSICAL:
+ case LEFT_CLICK_AIR:
+ interactEvent.getPlayer().performCommand("bba addnpc");
+ (new MessageBuilder("&cPlease keep in mind to use blocks instead of player location for precise coordinates!")).prefix().send(interactEvent.getPlayer());
+ break;
+ case LEFT_CLICK_BLOCK:
+ interactEvent.getPlayer().performCommand("bba addnpc");
+ }
});
gui.setItem((getInventoryLine() * 9) + 2, floorNPC);
getItemList().add(floorNPC);
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index c1b646e3..a538a37d 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -251,7 +251,7 @@ Items:
# Enable another Head menu instead of our
Head-Menu:
Custom: false
- # The command that should be executed on the player
+ # The command that should be executed on the player if Head-Menu.Custom = true
Command: heads
diff --git a/src/main/resources/heads/mainmenu.yml b/src/main/resources/heads/mainmenu.yml
index 9d619b65..91c81580 100644
--- a/src/main/resources/heads/mainmenu.yml
+++ b/src/main/resources/heads/mainmenu.yml
@@ -1,13 +1,13 @@
-animals:
- displayname: '&6Animal heads'
+simple-animals:
+ displayname: '&6Simple Animal heads'
texture: "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNjIxNjY4ZWY3Y2I3OWRkOWMyMmNlM2QxZjNmNGNiNmUyNTU5ODkzYjZkZjRhNDY5NTE0ZTY2N2MxNmFhNCJ9fX0="
lore:
- "Click to open"
- - "animal heads menu"
+ - "simple animal heads menu"
enabled: true
config: animalheads
permission: buildbattle.heads
- menuname: "Animal heads"
+ menuname: "Simple Animal heads"
miniblocks:
displayname: '&6Mini block heads'
texture: "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzI4YTE4MTU2ODlkNzE5NGNmN2RiMDYxYjU5ZjYzMTA2MjY0YjUxMzg3OTc2YTdmYjc0YWI3OWI1NjQxIn19fQ=="
@@ -28,3 +28,138 @@ info:
config: info
permission: buildbattle.heads
menuname: "Info blocks"
+
+# Use HeadDatabase in addition to the configured ones
+# You can remove categories from the catalog which shouldn't be loaded!
+# Catalog:
+# - alphabet
+# - animals
+# - blocks
+# - decoration
+# - food-drinks
+# - humanoid
+# - humans
+# - miscellaneous
+# - monsters
+# - plants
+database-alphabet:
+ displayname: '&6%value% heads'
+ texture: "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzI1MDhlMmNhNjUwMGJjZTMwNTM5YzM4ODg0MmE1NjcyYjdiYzI5YTY4NzZkZDZhNTAyNTY3MmUyNTJkMjVkYSJ9fX0="
+ lore:
+ - "Click to open"
+ - "%value% menu"
+ enabled: true
+ database: true
+ config: alphabet
+ permission: buildbattle.heads
+ menuname: "%value% blocks"
+database-animals:
+ displayname: '&6%value% heads'
+ texture: "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTQyYjllYzM0OTYwNjRiMDg1ZjdkMzBjZTkwYTBjOGY3NjM2YzhlZjUzMDNiMjBjMjVjYTEwYTk5N2JkNzQzMyJ9fX0="
+ lore:
+ - "Click to open"
+ - "%value% menu"
+ enabled: true
+ database: true
+ config: animals
+ permission: buildbattle.heads
+ menuname: "%value% blocks"
+database-blocks:
+ displayname: '&6%value% heads'
+ texture: "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzViNDQ4ZmQ5NWM4NzRjOTVmZTc0ODQ0NDFhNDM5NGQ2NDZiNzJiYzgyYTUyNzQ4M2ZkYzcwY2E3OTg2ZmNhNSJ9fX0="
+ lore:
+ - "Click to open"
+ - "%value% menu"
+ enabled: true
+ database: true
+ config: blocks
+ permission: buildbattle.heads
+ menuname: "%value% blocks"
+database-decoration:
+ displayname: '&6%value% heads'
+ texture: "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMjNhZjk0YTUwZmFmNTBhZTAyMzZjNzExZWMxMzZiMjgwOGFjODJiYjE3MWQ0MmIzOGQxNjc2MGQyMjBmMjU4MiJ9fX0="
+ lore:
+ - "Click to open"
+ - "%value% menu"
+ enabled: true
+ database: true
+ config: decoration
+ permission: buildbattle.heads
+ menuname: "%value% blocks"
+database-food-drinks:
+ displayname: '&6%value% heads'
+ texture: "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDUxMzdmYzBjZDUxMjAyNjcyMzgyYmZhZTAxZmViM2UxZTJiNzMxMDdlOThkMmM2YzhmNzE5ZjFkYTUzMGU2OCJ9fX0="
+ lore:
+ - "Click to open"
+ - "%value% menu"
+ enabled: true
+ database: true
+ config: food-drinks
+ permission: buildbattle.heads
+ menuname: "%value% blocks"
+database-humanoid:
+ displayname: '&6%value% heads'
+ texture: "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTc5Yzc3ZjEyYzg2NzM5OGE0MTgxMDgxZmI1YmY3MGM1ZmYzMjcxNWM2ODk3NTBjNmU3MTdkMDY5ZTgxMzFhOSJ9fX0="
+ lore:
+ - "Click to open"
+ - "%value% menu"
+ enabled: true
+ database: true
+ config: humanoid
+ permission: buildbattle.heads
+ menuname: "%value% blocks"
+database-humans:
+ displayname: '&6%value% heads'
+ texture: "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDQ5MmRmZTNjZThjYjYxYjkwODYwZWZmOTM4Y2I4M2UxOWMxNmU5Y2IyZDliZjJhZDc4OTZjOTBmNWIyZTFmMCJ9fX0="
+ lore:
+ - "Click to open"
+ - "%value% menu"
+ enabled: true
+ database: true
+ config: humans
+ permission: buildbattle.heads
+ menuname: "%value% blocks"
+database-miscellaneous:
+ displayname: '&6%value% heads'
+ texture: "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDQ3OTE3MTkzZTlmYjdjYjk2OGZiYTAzYTJlMjg0YTA0NjEyMWIyZGMwMTU0MWNhY2RiYTUzYTRmOWJiZjcwOCJ9fX0="
+ lore:
+ - "Click to open"
+ - "%value% menu"
+ enabled: true
+ database: true
+ config: miscellaneous
+ permission: buildbattle.heads
+ menuname: "%value% blocks"
+database-monsters:
+ displayname: '&6%value% heads'
+ texture: "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTgyYjQxZjY3YjMzNzE0NWM1ZWI4M2I5ZTAwMTU1NzQ4MDE2MGE1NWU5MWVmODYzZWIwYmYwNTU3Mzg0MmNlMSJ9fX0="
+ lore:
+ - "Click to open"
+ - "%value% menu"
+ enabled: true
+ database: true
+ config: monsters
+ permission: buildbattle.heads
+ menuname: "%value% blocks"
+database-plants:
+ displayname: '&6%value% heads'
+ texture: "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDA4MzY2YjgxMWM0MzU5YWVhNjY4NjMwMGNmZDQ1MGQ5ZWFhNDYxNGMzYWYwOGExN2YxNTEzZjVkMmY0OGM0YSJ9fX0="
+ lore:
+ - "Click to open"
+ - "%value% menu"
+ enabled: true
+ database: true
+ config: plants
+ permission: buildbattle.heads
+ menuname: "%value% blocks"
+database-search:
+ displayname: '&6%value% heads'
+ texture: "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNjViOTVkYTEyODE2NDJkYWE1ZDAyMmFkYmQzZTdjYjY5ZGMwOTQyYzgxY2Q2M2JlOWMzODU3ZDIyMmUxYzhkOSJ9fX0="
+ lore:
+ - "Click to open"
+ - "%value% menu"
+ enabled: true
+ database: true
+ config: search
+ permission: buildbattle.heads
+ menuname: "%value% blocks"
\ No newline at end of file
diff --git a/src/main/resources/language.yml b/src/main/resources/language.yml
index 5a76024a..d133970d 100644
--- a/src/main/resources/language.yml
+++ b/src/main/resources/language.yml
@@ -377,6 +377,8 @@ Menu:
Item:
Name: "&bGet player heads"
Lore: "Click to get heads"
+ Database:
+ Lore: "Get Head %value%"
Floor:
Item:
Name: "&bChange floor material"
@@ -571,5 +573,5 @@ Leaderboard:
# Really, don't edit ;p
# You edited it, huh? Next time hurt yourself!
Do-Not-Edit:
- File-Version: 1
+ File-Version: 2
Core-Version: 2
From 344ad0757111d90e6ee8c66ce9f6d4319e3f227c Mon Sep 17 00:00:00 2001
From: "version-bump[github-action]"
<41898282+version-bump[github-action]@users.noreply.github.com>
Date: Thu, 10 Jul 2025 18:39:16 +0000
Subject: [PATCH 42/53] Bump version from 5.0.15-SNAPSHOT12 to
5.0.15-SNAPSHOT13
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 1e7ff3cb..842156ca 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,7 +26,7 @@
plugily.projects
buildbattle
- 5.0.15-SNAPSHOT12
+ 5.0.15-SNAPSHOT13
BuildBattle
From 23a37ff9aaf2c211e1f81bddd292cfaf6c315f21 Mon Sep 17 00:00:00 2001
From: Tigerpanzer_02 <37453987+Tigerpanzer02@users.noreply.github.com>
Date: Thu, 10 Jul 2025 23:57:33 +0200
Subject: [PATCH 43/53] Fixed Vehicles such as Boats could drive outside plot
Fixed Flower Pots couldn't be destroyed on plot
---
.github/CHANGELOG.md | 5 ++-
.../buildbattle/arena/ArenaEvents.java | 38 +++++++++++++++----
src/main/resources/language.yml | 2 +-
3 files changed, 36 insertions(+), 9 deletions(-)
diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md
index 33306e76..df9ec3df 100644
--- a/.github/CHANGELOG.md
+++ b/.github/CHANGELOG.md
@@ -10,7 +10,7 @@ deploy webhooks to print changelog successfully
That's all, matcher will stop when detects next line started with `###` match
-### 5.1.0 Release (22.05.2025)
+### 5.1.0 Release (10.07.2025)
* TODO MAKE LANGUAGE:YML UPDATE BEFORE RELEASE!
* Added Heads from HeadDatabase (selected on each server start 200 per category)
* Added Heads Search function
@@ -31,6 +31,9 @@ That's all, matcher will stop when detects next line started with `###` match
* Fixed Player Outside Plot interaction with blocks were possible
* Fixed NPE AddGoBackButton
* Fixed Water Flow on Ground
+* Fixed Vehicles such as Boats could drive outside plot
+* Fixed Flower Pots couldn't be destroyed on plot
+* Fixed placeholder on message Changed-Theme
* Changed Allow Plot selection also if ArenaState is FULL_GAME
* Changed (for API usage) renamed BBTheme to GuessTheme
* Changed Hide guessing players from builder in gtb mode
diff --git a/src/main/java/plugily/projects/buildbattle/arena/ArenaEvents.java b/src/main/java/plugily/projects/buildbattle/arena/ArenaEvents.java
index 94370a1e..8319227c 100644
--- a/src/main/java/plugily/projects/buildbattle/arena/ArenaEvents.java
+++ b/src/main/java/plugily/projects/buildbattle/arena/ArenaEvents.java
@@ -53,6 +53,7 @@
import plugily.projects.minigamesbox.classic.utils.version.events.api.PlugilyPlayerInteractEntityEvent;
import plugily.projects.minigamesbox.classic.utils.version.events.api.PlugilyPlayerInteractEvent;
import plugily.projects.minigamesbox.classic.utils.version.events.api.PlugilyPlayerPickupArrow;
+import plugily.projects.minigamesbox.classic.utils.version.xseries.XEntityType;
import plugily.projects.minigamesbox.classic.utils.version.xseries.XMaterial;
/**
@@ -198,6 +199,26 @@ public void onHangingBreakEvent(HangingBreakByEntityEvent event) {
}
}
+ @EventHandler(priority = EventPriority.HIGHEST)
+ public void onPaintandFlowerInteraction(PlugilyPlayerInteractEvent event) {
+ Player player = event.getPlayer();
+ BaseArena arena = plugin.getArenaRegistry().getArena(player);
+ if(arena == null || event.getClickedBlock() == null) {
+ return;
+ }
+ if(arena.getArenaState() != IArenaState.IN_GAME) {
+ return;
+ }
+ Plot buildPlot = arena.getPlotManager().getPlot(player);
+ if(event.getClickedBlock().getType() != XMaterial.PAINTING.parseMaterial() && event.getClickedBlock().getType() != XMaterial.FLOWER_POT.parseMaterial()) {
+ return;
+ }
+ if(buildPlot != null && buildPlot.getCuboid() != null && buildPlot.getCuboid().isIn(event.getClickedBlock().getLocation())) {
+ //need to cancel with highest as minigamescore is blocking it!
+ event.setCancelled(false);
+ }
+ }
+
@EventHandler
public void onNPCClick(PlugilyPlayerInteractEntityEvent event) {
if(VersionUtils.checkOffHand(event.getHand()) || event.getRightClicked().getType() != EntityType.VILLAGER) {
@@ -270,25 +291,28 @@ public void onEnderchestClick(PlugilyPlayerInteractEvent event) {
return;
}
- if(arena.getArenaState() != IArenaState.IN_GAME || event.getClickedBlock().getType() == XMaterial.ENDER_CHEST.parseMaterial()) {
+ if(event.getClickedBlock().getType() == XMaterial.ENDER_CHEST.parseMaterial()) {
event.setCancelled(true);
}
}
+ //TODO recognise plot by location should be added, as current check will go through all plots...
+ //Alternative use filter!!
@EventHandler
- public void onMinecartMove(VehicleMoveEvent event) {
+ public void onVehicleMove(VehicleMoveEvent event) {
Vehicle vehicle = event.getVehicle();
- if(vehicle.getType() != EntityType.MINECART) {
- return;
- }
for(IPluginArena arena : plugin.getArenaRegistry().getArenas()) {
if(!(arena instanceof BaseArena)) {
continue;
}
for(Plot buildPlot : ((BaseArena) arena).getPlotManager().getPlots()) {
- if(buildPlot.getCuboid() != null && !buildPlot.getCuboid().isInWithMarge(event.getTo(), -1) && buildPlot.getCuboid().isIn(event.getTo())) {
- ((Minecart) vehicle).setMaxSpeed(0);
+ if(buildPlot.getCuboid() != null && !buildPlot.getCuboid().isIn(event.getTo())) {
vehicle.setVelocity(vehicle.getVelocity().zero());
+ if(vehicle.getType() == XEntityType.MINECART.get()) {
+ ((Minecart) vehicle).setMaxSpeed(0);
+ } else {
+ vehicle.remove();
+ }
}
}
}
diff --git a/src/main/resources/language.yml b/src/main/resources/language.yml
index d133970d..a7fd890f 100644
--- a/src/main/resources/language.yml
+++ b/src/main/resources/language.yml
@@ -293,7 +293,7 @@ In-Game:
Own: "&aYou became #%number%"
Admin:
Set-Starting-In-To-0: "%plugin_prefix% An admin set waiting time to 0. The game starts now!"
- Changed-Theme: "%plugin_prefix% Admin has changed theme to %THEME%"
+ Changed-Theme: "%plugin_prefix% Admin has changed theme to %value%"
Plot:
Nobody: "%color_chat_issue%Nobody"
Time-Left:
From 317d22cc40ed6fa099a63b1b8688cd26077bf4c4 Mon Sep 17 00:00:00 2001
From: "version-bump[github-action]"
<41898282+version-bump[github-action]@users.noreply.github.com>
Date: Thu, 10 Jul 2025 21:57:48 +0000
Subject: [PATCH 44/53] Bump version from 5.0.15-SNAPSHOT13 to
5.0.15-SNAPSHOT14
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 842156ca..8ae91a86 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,7 +26,7 @@
plugily.projects
buildbattle
- 5.0.15-SNAPSHOT13
+ 5.0.15-SNAPSHOT14
BuildBattle
From 9d17eca0ae366db20b9f8bf1d1f7d68b5b18b82e Mon Sep 17 00:00:00 2001
From: Tigerpanzer_02 <37453987+Tigerpanzer02@users.noreply.github.com>
Date: Fri, 11 Jul 2025 00:28:55 +0200
Subject: [PATCH 45/53] Added LanguageMigrator
---
pom.xml | 2 +-
.../plugily/projects/buildbattle/Main.java | 2 +
.../handlers/LanguageMigrator.java | 131 ++++++++++++++++++
.../resources/locales/language_default.yml | 10 +-
4 files changed, 140 insertions(+), 5 deletions(-)
create mode 100644 src/main/java/plugily/projects/buildbattle/handlers/LanguageMigrator.java
diff --git a/pom.xml b/pom.xml
index 8ae91a86..1cf5dbbe 100644
--- a/pom.xml
+++ b/pom.xml
@@ -86,7 +86,7 @@
plugily.projects
MiniGamesBox-Classic
- 1.4.2-SNAPSHOT6
+ 1.4.3
compile
true
diff --git a/src/main/java/plugily/projects/buildbattle/Main.java b/src/main/java/plugily/projects/buildbattle/Main.java
index aaef09e1..4b60491b 100644
--- a/src/main/java/plugily/projects/buildbattle/Main.java
+++ b/src/main/java/plugily/projects/buildbattle/Main.java
@@ -32,6 +32,7 @@
import plugily.projects.buildbattle.boot.MessageInitializer;
import plugily.projects.buildbattle.boot.PlaceholderInitializer;
import plugily.projects.buildbattle.commands.arguments.ArgumentsRegistry;
+import plugily.projects.buildbattle.handlers.LanguageMigrator;
import plugily.projects.buildbattle.handlers.menu.OptionsRegistry;
import plugily.projects.buildbattle.handlers.misc.BlacklistManager;
import plugily.projects.buildbattle.handlers.misc.HeadDatabaseManager;
@@ -70,6 +71,7 @@ public void onEnable() {
MessageInitializer messageInitializer = new MessageInitializer(this);
super.onEnable();
getDebugger().debug("[System] [Plugin] Initialization start");
+ new LanguageMigrator(this);
arenaRegistry = new ArenaRegistry(this);
new PlaceholderInitializer(this);
messageInitializer.registerMessages();
diff --git a/src/main/java/plugily/projects/buildbattle/handlers/LanguageMigrator.java b/src/main/java/plugily/projects/buildbattle/handlers/LanguageMigrator.java
new file mode 100644
index 00000000..f160ca3f
--- /dev/null
+++ b/src/main/java/plugily/projects/buildbattle/handlers/LanguageMigrator.java
@@ -0,0 +1,131 @@
+/*
+ * MiniGamesBox - Library box with massive content that could be seen as minigames core.
+ * Copyright (C) 2023 Plugily Projects - maintained by Tigerpanzer_02 and contributors
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+
+package plugily.projects.buildbattle.handlers;
+
+import org.bukkit.configuration.file.FileConfiguration;
+import plugily.projects.buildbattle.Main;
+import plugily.projects.minigamesbox.classic.PluginMain;
+import plugily.projects.minigamesbox.classic.utils.configuration.ConfigUtils;
+import plugily.projects.minigamesbox.classic.utils.migrator.MigratorUtils;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.logging.Level;
+
+/*
+ NOTE FOR CONTRIBUTORS - Please do not touch this class if you don't know how it works! You can break migrator modifying these values!
+ */
+
+/**
+ * @author Tigerpanzer_02
+ *
+ * Created at 21.09.2021
+ */
+@SuppressWarnings("deprecation")
+public class LanguageMigrator {
+
+ public enum PluginFileVersion {
+ /*ARENA_SELECTOR(0),*/ BUNGEE(1), CONFIG(1), LANGUAGE(2),
+ /*LEADERBOARDS(0),*/ MYSQL(1), PERMISSIONS(1), POWERUPS(1),
+ /*SIGNS(0),*/ SPECIAL_ITEMS(1), SPECTATOR(1)/*, STATS(0)*/;
+
+ private final int version;
+
+ PluginFileVersion(int version) {
+ this.version = version;
+ }
+
+ public int getVersion() {
+ return version;
+ }
+ }
+
+ private final Main plugin;
+
+ public LanguageMigrator(Main plugin) {
+ this.plugin = plugin;
+ updatePluginFiles();
+ }
+
+ private void updatePluginFiles() {
+ for(PluginFileVersion pluginFileVersion : PluginFileVersion.values()) {
+ String fileName = pluginFileVersion.name().toLowerCase();
+ int newVersion = pluginFileVersion.getVersion();
+ File file = new File(plugin.getDataFolder() + "/" + fileName + ".yml");
+ FileConfiguration configuration = ConfigUtils.getConfig(plugin, fileName, false);
+ if(configuration == null) {
+ continue;
+ }
+ int oldVersion = configuration.getInt("Do-Not-Edit.File-Version", 0);
+ if(oldVersion == newVersion) {
+ continue;
+ }
+ plugin.getDebugger().debug(Level.WARNING, "[System notify] The " + fileName + " file is outdated! Updating...");
+ for(int i = oldVersion; i < newVersion; i++) {
+ executeUpdate(file, pluginFileVersion, i);
+ }
+
+ updatePluginFileVersion(file, configuration, oldVersion, newVersion);
+ plugin.getDebugger().debug(Level.WARNING, "[System notify] " + fileName + " updated, no comments were removed :)");
+ plugin.getDebugger().debug(Level.WARNING, "[System notify] You're using latest " + fileName + " file now! Nice!");
+
+ }
+ }
+
+ private void executeUpdate(File file, PluginFileVersion pluginFileVersion, int version) {
+ switch(pluginFileVersion) {
+ case LANGUAGE:
+ switch(version) {
+ case 1:
+ MigratorUtils.insertAfterLine(file, " Heads:", " Database:\n" +
+ " Lore: \"Get Head %value%\"");
+ break;
+ default:
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+ public void updatePluginFileVersion(File file, FileConfiguration fileConfiguration, int oldVersion, int newVersion) {
+ int coreVersion = fileConfiguration.getInt("Do-Not-Edit.Core-Version", 0);
+ updateFileVersion(file, coreVersion, coreVersion, newVersion, oldVersion);
+ }
+
+ private void updateFileVersion(File file, int coreVersion, int oldCoreVersion, int fileVersion, int oldFileVersion) {
+ MigratorUtils.removeLineFromFile(file, "# Don't edit it. But who's stopping you? It's your server!");
+ MigratorUtils.removeLineFromFile(file, "# Really, don't edit ;p");
+ MigratorUtils.removeLineFromFile(file, "# You edited it, huh? Next time hurt yourself!");
+ MigratorUtils.removeLineFromFile(file, "Do-Not-Edit:");
+ MigratorUtils.removeLineFromFile(file, " File-Version: " + oldFileVersion + "");
+ MigratorUtils.removeLineFromFile(file, " Core-Version: " + oldCoreVersion + "");
+ MigratorUtils.addNewLines(file, "# Don't edit it. But who's stopping you? It's your server!\r\n" +
+ "# Really, don't edit ;p\r\n" +
+ "# You edited it, huh? Next time hurt yourself!\r\n" +
+ "Do-Not-Edit:\r\n" +
+ " File-Version: " + fileVersion + "\r\n" +
+ " Core-Version: " + coreVersion + "\r\n");
+ }
+
+}
diff --git a/src/main/resources/locales/language_default.yml b/src/main/resources/locales/language_default.yml
index eb1b585b..2cc2141f 100644
--- a/src/main/resources/locales/language_default.yml
+++ b/src/main/resources/locales/language_default.yml
@@ -290,7 +290,7 @@ In-Game:
Own: "&aYou became #%number%"
Admin:
Set-Starting-In-To-0: "%plugin_prefix% An admin set waiting time to 0. The game starts now!"
- Changed-Theme: "%plugin_prefix% Admin has changed theme to %THEME%"
+ Changed-Theme: "%plugin_prefix% Admin has changed theme to %value%"
Plot:
Nobody: "%color_chat_issue%Nobody"
Time-Left:
@@ -374,6 +374,8 @@ Menu:
Item:
Name: "&bGet player heads"
Lore: "Click to get heads"
+ Database:
+ Lore: "Get Head %value%"
Floor:
Item:
Name: "&bChange floor material"
@@ -390,7 +392,7 @@ Menu:
Noon: "Noon (6000 ticks)"
Sunset: "Sunset (12000 ticks)"
Night: "Night (13000 ticks)"
- MidNight: "MidNight (18000 ticks)"
+ MidNight: "Midnight (18000 ticks)"
Sunrise: "Sunrise (23000 ticks)"
Changed: "%plugin_prefix% Time has been changed to %value%"
Biome:
@@ -568,5 +570,5 @@ Leaderboard:
# Really, don't edit ;p
# You edited it, huh? Next time hurt yourself!
Do-Not-Edit:
- File-Version: 1
- Core-Version: 1
+ File-Version: 2
+ Core-Version: 2
From 88805f459e0f7797478149a911381782688ad624 Mon Sep 17 00:00:00 2001
From: "version-bump[github-action]"
<41898282+version-bump[github-action]@users.noreply.github.com>
Date: Thu, 10 Jul 2025 22:29:11 +0000
Subject: [PATCH 46/53] Bump version from 5.0.15-SNAPSHOT14 to
5.0.15-SNAPSHOT15
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 1cf5dbbe..d09a8853 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,7 +26,7 @@
plugily.projects
buildbattle
- 5.0.15-SNAPSHOT14
+ 5.0.15-SNAPSHOT15
BuildBattle
From b1025d404d60c2b452483dcb614360365872edf4 Mon Sep 17 00:00:00 2001
From: Tigerpanzer_02 <37453987+Tigerpanzer02@users.noreply.github.com>
Date: Mon, 14 Jul 2025 22:06:13 +0200
Subject: [PATCH 47/53] Fixed LanguageMigrator needed twice a boot. Added
mainmenu.yml migrator.
---
.github/CHANGELOG.md | 2 +-
.../plugily/projects/buildbattle/Main.java | 2 +-
.../handlers/LanguageMigrator.java | 162 ++++++++++++++++--
.../playerheads/PlayerHeadsRegistry.java | 3 +
src/main/resources/heads/mainmenu.yml | 4 +-
5 files changed, 158 insertions(+), 15 deletions(-)
diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md
index df9ec3df..a03f495c 100644
--- a/.github/CHANGELOG.md
+++ b/.github/CHANGELOG.md
@@ -11,7 +11,6 @@ deploy webhooks to print changelog successfully
That's all, matcher will stop when detects next line started with `###` match
### 5.1.0 Release (10.07.2025)
-* TODO MAKE LANGUAGE:YML UPDATE BEFORE RELEASE!
* Added Heads from HeadDatabase (selected on each server start 200 per category)
* Added Heads Search function
* Added paginated Heads menu to support more than one site of heads
@@ -37,6 +36,7 @@ That's all, matcher will stop when detects next line started with `###` match
* Changed Allow Plot selection also if ArenaState is FULL_GAME
* Changed (for API usage) renamed BBTheme to GuessTheme
* Changed Hide guessing players from builder in gtb mode
+* Changed LanguageMigrator on plugin level to update file versions
* Updated Minigamesbox to 1.4.2
### 5.0.15 Release (03.05.2025)
diff --git a/src/main/java/plugily/projects/buildbattle/Main.java b/src/main/java/plugily/projects/buildbattle/Main.java
index 4b60491b..79a775b0 100644
--- a/src/main/java/plugily/projects/buildbattle/Main.java
+++ b/src/main/java/plugily/projects/buildbattle/Main.java
@@ -68,10 +68,10 @@ public Main() {
@Override
public void onEnable() {
long start = System.currentTimeMillis();
+ new LanguageMigrator(this);
MessageInitializer messageInitializer = new MessageInitializer(this);
super.onEnable();
getDebugger().debug("[System] [Plugin] Initialization start");
- new LanguageMigrator(this);
arenaRegistry = new ArenaRegistry(this);
new PlaceholderInitializer(this);
messageInitializer.registerMessages();
diff --git a/src/main/java/plugily/projects/buildbattle/handlers/LanguageMigrator.java b/src/main/java/plugily/projects/buildbattle/handlers/LanguageMigrator.java
index f160ca3f..da36308a 100644
--- a/src/main/java/plugily/projects/buildbattle/handlers/LanguageMigrator.java
+++ b/src/main/java/plugily/projects/buildbattle/handlers/LanguageMigrator.java
@@ -19,17 +19,13 @@
package plugily.projects.buildbattle.handlers;
+import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import plugily.projects.buildbattle.Main;
-import plugily.projects.minigamesbox.classic.PluginMain;
import plugily.projects.minigamesbox.classic.utils.configuration.ConfigUtils;
import plugily.projects.minigamesbox.classic.utils.migrator.MigratorUtils;
import java.io.File;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.util.logging.Level;
/*
NOTE FOR CONTRIBUTORS - Please do not touch this class if you don't know how it works! You can break migrator modifying these values!
@@ -38,7 +34,7 @@
/**
* @author Tigerpanzer_02
*
- * Created at 21.09.2021
+ * Created at 07.2025
*/
@SuppressWarnings("deprecation")
public class LanguageMigrator {
@@ -46,7 +42,8 @@ public class LanguageMigrator {
public enum PluginFileVersion {
/*ARENA_SELECTOR(0),*/ BUNGEE(1), CONFIG(1), LANGUAGE(2),
/*LEADERBOARDS(0),*/ MYSQL(1), PERMISSIONS(1), POWERUPS(1),
- /*SIGNS(0),*/ SPECIAL_ITEMS(1), SPECTATOR(1)/*, STATS(0)*/;
+ /*SIGNS(0),*/ SPECIAL_ITEMS(1), SPECTATOR(1)/*, STATS(0)*/,
+ MAIN_MENU(1);
private final int version;
@@ -69,6 +66,9 @@ public LanguageMigrator(Main plugin) {
private void updatePluginFiles() {
for(PluginFileVersion pluginFileVersion : PluginFileVersion.values()) {
String fileName = pluginFileVersion.name().toLowerCase();
+ if(fileName.equalsIgnoreCase(PluginFileVersion.MAIN_MENU.name())) {
+ fileName = "heads/mainmenu";
+ }
int newVersion = pluginFileVersion.getVersion();
File file = new File(plugin.getDataFolder() + "/" + fileName + ".yml");
FileConfiguration configuration = ConfigUtils.getConfig(plugin, fileName, false);
@@ -79,15 +79,14 @@ private void updatePluginFiles() {
if(oldVersion == newVersion) {
continue;
}
- plugin.getDebugger().debug(Level.WARNING, "[System notify] The " + fileName + " file is outdated! Updating...");
+ Bukkit.getLogger().info("[System notify] The " + fileName + " file is outdated! Updating...");
for(int i = oldVersion; i < newVersion; i++) {
executeUpdate(file, pluginFileVersion, i);
}
updatePluginFileVersion(file, configuration, oldVersion, newVersion);
- plugin.getDebugger().debug(Level.WARNING, "[System notify] " + fileName + " updated, no comments were removed :)");
- plugin.getDebugger().debug(Level.WARNING, "[System notify] You're using latest " + fileName + " file now! Nice!");
-
+ Bukkit.getLogger().info("[System notify] " + fileName + " updated, no comments were removed :)");
+ Bukkit.getLogger().info("[System notify] You're using latest " + fileName + " file now! Nice!");
}
}
@@ -102,6 +101,147 @@ private void executeUpdate(File file, PluginFileVersion pluginFileVersion, int v
default:
break;
}
+ case MAIN_MENU:
+ switch(version) {
+ case 0:
+ MigratorUtils.addNewLines(file, "# Use HeadDatabase in addition to the configured ones\n" +
+ "# You can remove categories from the catalog which shouldn't be loaded!\n" +
+ "# Catalog:\n" +
+ "# - alphabet\n" +
+ "# - animals\n" +
+ "# - blocks\n" +
+ "# - decoration\n" +
+ "# - food-drinks\n" +
+ "# - humanoid\n" +
+ "# - humans\n" +
+ "# - miscellaneous\n" +
+ "# - monsters\n" +
+ "# - plants\n" +
+ "database-alphabet:\n" +
+ " displayname: '&6%value% heads'\n" +
+ " texture: \"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzI1MDhlMmNhNjUwMGJjZTMwNTM5YzM4ODg0MmE1NjcyYjdiYzI5YTY4NzZkZDZhNTAyNTY3MmUyNTJkMjVkYSJ9fX0=\"\n" +
+ " lore:\n" +
+ " - \"Click to open\"\n" +
+ " - \"%value% menu\"\n" +
+ " enabled: true\n" +
+ " database: true\n" +
+ " config: alphabet\n" +
+ " permission: buildbattle.heads\n" +
+ " menuname: \"%value% blocks\"\n" +
+ "database-animals:\n" +
+ " displayname: '&6%value% heads'\n" +
+ " texture: \"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTQyYjllYzM0OTYwNjRiMDg1ZjdkMzBjZTkwYTBjOGY3NjM2YzhlZjUzMDNiMjBjMjVjYTEwYTk5N2JkNzQzMyJ9fX0=\"\n" +
+ " lore:\n" +
+ " - \"Click to open\"\n" +
+ " - \"%value% menu\"\n" +
+ " enabled: true\n" +
+ " database: true\n" +
+ " config: animals\n" +
+ " permission: buildbattle.heads\n" +
+ " menuname: \"%value% blocks\"\n" +
+ "database-blocks:\n" +
+ " displayname: '&6%value% heads'\n" +
+ " texture: \"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzViNDQ4ZmQ5NWM4NzRjOTVmZTc0ODQ0NDFhNDM5NGQ2NDZiNzJiYzgyYTUyNzQ4M2ZkYzcwY2E3OTg2ZmNhNSJ9fX0=\"\n" +
+ " lore:\n" +
+ " - \"Click to open\"\n" +
+ " - \"%value% menu\"\n" +
+ " enabled: true\n" +
+ " database: true\n" +
+ " config: blocks\n" +
+ " permission: buildbattle.heads\n" +
+ " menuname: \"%value% blocks\"\n" +
+ "database-decoration:\n" +
+ " displayname: '&6%value% heads'\n" +
+ " texture: \"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMjNhZjk0YTUwZmFmNTBhZTAyMzZjNzExZWMxMzZiMjgwOGFjODJiYjE3MWQ0MmIzOGQxNjc2MGQyMjBmMjU4MiJ9fX0=\"\n" +
+ " lore:\n" +
+ " - \"Click to open\"\n" +
+ " - \"%value% menu\"\n" +
+ " enabled: true\n" +
+ " database: true\n" +
+ " config: decoration\n" +
+ " permission: buildbattle.heads\n" +
+ " menuname: \"%value% blocks\"\n" +
+ "database-food-drinks:\n" +
+ " displayname: '&6%value% heads'\n" +
+ " texture: \"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDUxMzdmYzBjZDUxMjAyNjcyMzgyYmZhZTAxZmViM2UxZTJiNzMxMDdlOThkMmM2YzhmNzE5ZjFkYTUzMGU2OCJ9fX0=\"\n" +
+ " lore:\n" +
+ " - \"Click to open\"\n" +
+ " - \"%value% menu\"\n" +
+ " enabled: true\n" +
+ " database: true\n" +
+ " config: food-drinks\n" +
+ " permission: buildbattle.heads\n" +
+ " menuname: \"%value% blocks\"\n" +
+ "database-humanoid:\n" +
+ " displayname: '&6%value% heads'\n" +
+ " texture: \"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTc5Yzc3ZjEyYzg2NzM5OGE0MTgxMDgxZmI1YmY3MGM1ZmYzMjcxNWM2ODk3NTBjNmU3MTdkMDY5ZTgxMzFhOSJ9fX0=\"\n" +
+ " lore:\n" +
+ " - \"Click to open\"\n" +
+ " - \"%value% menu\"\n" +
+ " enabled: true\n" +
+ " database: true\n" +
+ " config: humanoid\n" +
+ " permission: buildbattle.heads\n" +
+ " menuname: \"%value% blocks\"\n" +
+ "database-humans:\n" +
+ " displayname: '&6%value% heads'\n" +
+ " texture: \"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDQ5MmRmZTNjZThjYjYxYjkwODYwZWZmOTM4Y2I4M2UxOWMxNmU5Y2IyZDliZjJhZDc4OTZjOTBmNWIyZTFmMCJ9fX0=\"\n" +
+ " lore:\n" +
+ " - \"Click to open\"\n" +
+ " - \"%value% menu\"\n" +
+ " enabled: true\n" +
+ " database: true\n" +
+ " config: humans\n" +
+ " permission: buildbattle.heads\n" +
+ " menuname: \"%value% blocks\"\n" +
+ "database-miscellaneous:\n" +
+ " displayname: '&6%value% heads'\n" +
+ " texture: \"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDQ3OTE3MTkzZTlmYjdjYjk2OGZiYTAzYTJlMjg0YTA0NjEyMWIyZGMwMTU0MWNhY2RiYTUzYTRmOWJiZjcwOCJ9fX0=\"\n" +
+ " lore:\n" +
+ " - \"Click to open\"\n" +
+ " - \"%value% menu\"\n" +
+ " enabled: true\n" +
+ " database: true\n" +
+ " config: miscellaneous\n" +
+ " permission: buildbattle.heads\n" +
+ " menuname: \"%value% blocks\"\n" +
+ "database-monsters:\n" +
+ " displayname: '&6%value% heads'\n" +
+ " texture: \"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTgyYjQxZjY3YjMzNzE0NWM1ZWI4M2I5ZTAwMTU1NzQ4MDE2MGE1NWU5MWVmODYzZWIwYmYwNTU3Mzg0MmNlMSJ9fX0=\"\n" +
+ " lore:\n" +
+ " - \"Click to open\"\n" +
+ " - \"%value% menu\"\n" +
+ " enabled: true\n" +
+ " database: true\n" +
+ " config: monsters\n" +
+ " permission: buildbattle.heads\n" +
+ " menuname: \"%value% blocks\"\n" +
+ "database-plants:\n" +
+ " displayname: '&6%value% heads'\n" +
+ " texture: \"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDA4MzY2YjgxMWM0MzU5YWVhNjY4NjMwMGNmZDQ1MGQ5ZWFhNDYxNGMzYWYwOGExN2YxNTEzZjVkMmY0OGM0YSJ9fX0=\"\n" +
+ " lore:\n" +
+ " - \"Click to open\"\n" +
+ " - \"%value% menu\"\n" +
+ " enabled: true\n" +
+ " database: true\n" +
+ " config: plants\n" +
+ " permission: buildbattle.heads\n" +
+ " menuname: \"%value% blocks\"\n" +
+ "database-search:\n" +
+ " displayname: '&6%value% heads'\n" +
+ " texture: \"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNjViOTVkYTEyODE2NDJkYWE1ZDAyMmFkYmQzZTdjYjY5ZGMwOTQyYzgxY2Q2M2JlOWMzODU3ZDIyMmUxYzhkOSJ9fX0=\"\n" +
+ " lore:\n" +
+ " - \"Click to open\"\n" +
+ " - \"%value% menu\"\n" +
+ " enabled: true\n" +
+ " database: true\n" +
+ " config: search\n" +
+ " permission: buildbattle.heads\n" +
+ " menuname: \"%value% blocks\"");
+ break;
+ default:
+ break;
+ }
break;
default:
break;
diff --git a/src/main/java/plugily/projects/buildbattle/handlers/menu/registry/playerheads/PlayerHeadsRegistry.java b/src/main/java/plugily/projects/buildbattle/handlers/menu/registry/playerheads/PlayerHeadsRegistry.java
index e728d286..4c6d73e6 100644
--- a/src/main/java/plugily/projects/buildbattle/handlers/menu/registry/playerheads/PlayerHeadsRegistry.java
+++ b/src/main/java/plugily/projects/buildbattle/handlers/menu/registry/playerheads/PlayerHeadsRegistry.java
@@ -67,6 +67,9 @@ private void registerCategories() {
if(!config.getBoolean(str + ".enabled", true)) {
continue;
}
+ if(str.equalsIgnoreCase("Do-Not-Edit")) {
+ continue;
+ }
if(config.getBoolean(str + ".database", false)) {
String categoryName = config.getString(str + ".config", "fail");
if(categoryName.equalsIgnoreCase("search")) {
diff --git a/src/main/resources/heads/mainmenu.yml b/src/main/resources/heads/mainmenu.yml
index 91c81580..ecf26fe3 100644
--- a/src/main/resources/heads/mainmenu.yml
+++ b/src/main/resources/heads/mainmenu.yml
@@ -156,8 +156,8 @@ database-search:
displayname: '&6%value% heads'
texture: "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNjViOTVkYTEyODE2NDJkYWE1ZDAyMmFkYmQzZTdjYjY5ZGMwOTQyYzgxY2Q2M2JlOWMzODU3ZDIyMmUxYzhkOSJ9fX0="
lore:
- - "Click to open"
- - "%value% menu"
+ - "Click to search"
+ - "for a head (english only!)"
enabled: true
database: true
config: search
From 84965c76e1c955f7d9ab4cb8d90c963454a103b5 Mon Sep 17 00:00:00 2001
From: Tigerpanzer_02 <37453987+Tigerpanzer02@users.noreply.github.com>
Date: Mon, 14 Jul 2025 22:13:01 +0200
Subject: [PATCH 48/53] Fixed LanguageMigrator needed twice a boot. Added
mainmenu.yml migrator.
---
.github/CHANGELOG.md | 1 +
.../plugily/projects/buildbattle/arena/BaseArena.java | 11 ++++++-----
2 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md
index a03f495c..65486a3b 100644
--- a/.github/CHANGELOG.md
+++ b/.github/CHANGELOG.md
@@ -33,6 +33,7 @@ That's all, matcher will stop when detects next line started with `###` match
* Fixed Vehicles such as Boats could drive outside plot
* Fixed Flower Pots couldn't be destroyed on plot
* Fixed placeholder on message Changed-Theme
+* Fixed sendBuildLeftTimeMessage is not handled by MessageBuilder correctly
* Changed Allow Plot selection also if ArenaState is FULL_GAME
* Changed (for API usage) renamed BBTheme to GuessTheme
* Changed Hide guessing players from builder in gtb mode
diff --git a/src/main/java/plugily/projects/buildbattle/arena/BaseArena.java b/src/main/java/plugily/projects/buildbattle/arena/BaseArena.java
index 9f935ee9..39980f10 100644
--- a/src/main/java/plugily/projects/buildbattle/arena/BaseArena.java
+++ b/src/main/java/plugily/projects/buildbattle/arena/BaseArena.java
@@ -34,6 +34,7 @@
import plugily.projects.minigamesbox.classic.handlers.language.TitleBuilder;
import plugily.projects.minigamesbox.classic.handlers.reward.RewardType;
import plugily.projects.minigamesbox.classic.handlers.reward.RewardsFactory;
+import plugily.projects.minigamesbox.classic.utils.actionbar.ActionBar;
import plugily.projects.minigamesbox.classic.utils.items.HandlerItem;
import plugily.projects.minigamesbox.classic.utils.version.VersionUtils;
@@ -159,11 +160,11 @@ public void setTheme(String arenaTheme) {
public void sendBuildLeftTimeMessage() {
new TitleBuilder("IN_GAME_MESSAGES_PLOT_TIME_LEFT_TITLE").asKey().arena(this).sendArena();
- String message = new MessageBuilder("IN_GAME_MESSAGES_PLOT_TIME_LEFT_CHAT").asKey().arena(this).build();
- for(Player p : getPlayers()) {
- VersionUtils.sendActionBar(p, message);
- p.sendMessage(message);
- }
+ MessageBuilder message = new MessageBuilder("IN_GAME_MESSAGES_PLOT_TIME_LEFT_CHAT").asKey().arena(this);
+ message.sendArena();
+ getPlayers().forEach(player ->
+ getPlugin().getActionBarManager().addActionBar(player, new ActionBar(message,
+ ActionBar.ActionBarType.DISPLAY)));
}
public final void checkPlayerOutSidePlot() {
From 0428ec30616f55e39765aca73a77d521e660da60 Mon Sep 17 00:00:00 2001
From: Tigerpanzer_02 <37453987+Tigerpanzer02@users.noreply.github.com>
Date: Mon, 14 Jul 2025 22:45:16 +0200
Subject: [PATCH 49/53] Added /bba forceplay
---
.github/CHANGELOG.md | 1 +
.../commands/arguments/ArgumentsRegistry.java | 3 +
.../admin/arena/ForcePlayArgument.java | 99 +++++++++++++++++++
.../handlers/themes/vote/VoteMenu.java | 3 +-
4 files changed, 105 insertions(+), 1 deletion(-)
create mode 100644 src/main/java/plugily/projects/buildbattle/commands/arguments/admin/arena/ForcePlayArgument.java
diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md
index 65486a3b..89e2a82a 100644
--- a/.github/CHANGELOG.md
+++ b/.github/CHANGELOG.md
@@ -18,6 +18,7 @@ That's all, matcher will stop when detects next line started with `###` match
* Added a lot of new default themes at themes.yml (+140)
* Added possibility to add same meaning words for gtb themes by using ", " in themes.yml
* Added /bba settheme for Console use
+* Added /bba forceplay which moves all online players into arena and sets the theme
* Fixed Floor NPC spawns on any actions
* Fixed NPE if OptionsMenu Particles are opened as none builder whileas in gtb
* Fixed on first time setup without restart the NPE getArenaInGameState is null
diff --git a/src/main/java/plugily/projects/buildbattle/commands/arguments/ArgumentsRegistry.java b/src/main/java/plugily/projects/buildbattle/commands/arguments/ArgumentsRegistry.java
index 4512098d..d48983a6 100644
--- a/src/main/java/plugily/projects/buildbattle/commands/arguments/ArgumentsRegistry.java
+++ b/src/main/java/plugily/projects/buildbattle/commands/arguments/ArgumentsRegistry.java
@@ -20,12 +20,14 @@
package plugily.projects.buildbattle.commands.arguments;
+import org.checkerframework.checker.units.qual.Force;
import plugily.projects.buildbattle.Main;
import plugily.projects.buildbattle.arena.BaseArena;
import plugily.projects.buildbattle.arena.BuildArena;
import plugily.projects.buildbattle.arena.GuessArena;
import plugily.projects.buildbattle.commands.arguments.admin.ThemeArgument;
import plugily.projects.buildbattle.commands.arguments.admin.arena.AddNpcArgument;
+import plugily.projects.buildbattle.commands.arguments.admin.arena.ForcePlayArgument;
import plugily.projects.buildbattle.commands.arguments.admin.arena.SetThemeArgument;
import plugily.projects.buildbattle.commands.arguments.admin.plot.AddPlotArgument;
import plugily.projects.buildbattle.commands.arguments.admin.plot.RemovePlotArgument;
@@ -48,6 +50,7 @@ public class ArgumentsRegistry extends PluginArgumentsRegistry {
public ArgumentsRegistry(Main plugin) {
super(plugin);
new AddNpcArgument(this);
+ new ForcePlayArgument(this);
new SetThemeArgument(this);
new AddPlotArgument(this);
new RemovePlotArgument(this);
diff --git a/src/main/java/plugily/projects/buildbattle/commands/arguments/admin/arena/ForcePlayArgument.java b/src/main/java/plugily/projects/buildbattle/commands/arguments/admin/arena/ForcePlayArgument.java
new file mode 100644
index 00000000..693ccb14
--- /dev/null
+++ b/src/main/java/plugily/projects/buildbattle/commands/arguments/admin/arena/ForcePlayArgument.java
@@ -0,0 +1,99 @@
+/*
+ *
+ * BuildBattle - Ultimate building competition minigame
+ * Copyright (C) 2022 Plugily Projects - maintained by Tigerpanzer_02 and contributors
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ */
+
+package plugily.projects.buildbattle.commands.arguments.admin.arena;
+
+import org.bukkit.Bukkit;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+import plugily.projects.buildbattle.arena.BaseArena;
+import plugily.projects.buildbattle.arena.BuildArena;
+import plugily.projects.buildbattle.commands.arguments.ArgumentsRegistry;
+import plugily.projects.minigamesbox.api.arena.IArenaState;
+import plugily.projects.minigamesbox.classic.commands.arguments.data.CommandArgument;
+import plugily.projects.minigamesbox.classic.commands.arguments.data.LabelData;
+import plugily.projects.minigamesbox.classic.commands.arguments.data.LabeledCommandArgument;
+import plugily.projects.minigamesbox.classic.handlers.language.MessageBuilder;
+
+import java.util.StringJoiner;
+
+/**
+ * @author Plajer
+ *
+ * Created at 11.01.2019
+ */
+public class ForcePlayArgument {
+
+ public ForcePlayArgument(ArgumentsRegistry registry) {
+ registry.mapArgument("buildbattleadmin", new LabeledCommandArgument("forceplay", "buildbattle.admin.forceplay", CommandArgument.ExecutorType.BOTH,
+ new LabelData("/bba forceplay ", "/bba forceplay ",
+ "&7Start a arena by command \n&6Permission: &7buildbattle.admin.forceplay\n&cNOT FOR PRODUCTION!")) {
+ @Override
+ public void execute(CommandSender sender, String[] args) {
+ if(args.length == 1) {
+ //todo translatable
+ new MessageBuilder("&cPlease type arena theme!").prefix().send(sender);
+ return;
+ }
+ BaseArena arena;
+ int themeArgStart = 1;
+ if(!(sender instanceof Player)) {
+ if(args.length == 2) {
+ //todo translatable
+ new MessageBuilder("&cPlease type arena name!").prefix().send(sender);
+ return;
+ }
+ arena = (BaseArena) registry.getPlugin().getArenaRegistry().getArena(args[1]);
+ themeArgStart = 2;
+ } else {
+ arena = (BaseArena) registry.getPlugin().getArenaRegistry().getArena((Player) sender);
+ }
+ if(arena == null) {
+ new MessageBuilder("COMMANDS_NOT_PLAYING").asKey().send(sender);
+ return;
+ }
+ if(!(arena instanceof BuildArena)) {
+ //todo translatable
+ new MessageBuilder("&cCan't set theme on this arena type!").prefix().send(sender);
+ return;
+ }
+ StringJoiner themeName = new StringJoiner(" ");
+
+ for(int i = themeArgStart; i < args.length; i++)
+ themeName.add(args[i]);
+ if(arena.getArenaInGameState() == BaseArena.ArenaInGameState.BUILD_TIME || arena.getArenaState() == IArenaState.STARTING || arena.getArenaState() == IArenaState.FULL_GAME || arena.getArenaInGameState() == BaseArena.ArenaInGameState.THEME_VOTING) {
+ if(arena.getPlugin().getThemeManager().isThemeBlacklisted(themeName.toString())) {
+ new MessageBuilder("COMMANDS_THEME_BLACKLISTED").asKey().prefix().send(sender);
+ return;
+ }
+ Bukkit.getOnlinePlayers().forEach(player -> {
+ registry.getPlugin().getArenaManager().joinAttempt(player, arena);
+ });
+ arena.setForceStart(true);
+ arena.setTheme(themeName.toString());
+ new MessageBuilder("IN_GAME_MESSAGES_ADMIN_CHANGED_THEME").asKey().prefix().value(themeName.toString()).arena(arena).sendArena();
+ } else {
+ new MessageBuilder("&cWrong state to force theme!").prefix().send(sender);
+ }
+ }
+ });
+ }
+
+}
diff --git a/src/main/java/plugily/projects/buildbattle/handlers/themes/vote/VoteMenu.java b/src/main/java/plugily/projects/buildbattle/handlers/themes/vote/VoteMenu.java
index 8d62726b..f46eafd8 100644
--- a/src/main/java/plugily/projects/buildbattle/handlers/themes/vote/VoteMenu.java
+++ b/src/main/java/plugily/projects/buildbattle/handlers/themes/vote/VoteMenu.java
@@ -37,6 +37,7 @@
import plugily.projects.minigamesbox.classic.handlers.language.MessageBuilder;
import plugily.projects.minigamesbox.classic.utils.helper.ItemBuilder;
import plugily.projects.minigamesbox.classic.utils.version.xseries.XEnchantment;
+import plugily.projects.minigamesbox.classic.utils.version.xseries.XItemFlag;
import plugily.projects.minigamesbox.classic.utils.version.xseries.XMaterial;
import plugily.projects.minigamesbox.inventory.common.item.ClickableItem;
import plugily.projects.minigamesbox.inventory.common.item.SimpleClickableItem;
@@ -183,7 +184,7 @@ public void updatePlayerGui(Player player, NormalFastInv gui) {
ItemBuilder itemBuilder = new ItemBuilder(clickableSignItem.getItem()).removeLore();
itemBuilder.lore(new MessageBuilder("MENU_THEME_ITEM_LORE").asKey().arena(arena).value(theme).integer((int) percent).build().split(";"));
if(theme.equals(playerVote)) {
- itemBuilder.enchantment(XEnchantment.UNBREAKING.get(), 1).flags(ItemFlag.HIDE_ENCHANTS);
+ itemBuilder.enchantment(XEnchantment.UNBREAKING.get(), 1).flags(XItemFlag.HIDE_ENCHANTS.get());
} else {
itemBuilder.removeEnchants().removeFlags();
}
From fb0a2960522243efa90c99de2354fd9734d83b7c Mon Sep 17 00:00:00 2001
From: "version-bump[github-action]"
<41898282+version-bump[github-action]@users.noreply.github.com>
Date: Mon, 14 Jul 2025 20:45:27 +0000
Subject: [PATCH 50/53] Bump version from 5.0.15-SNAPSHOT15 to
5.0.15-SNAPSHOT16
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index d09a8853..66354c3b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,7 +26,7 @@
plugily.projects
buildbattle
- 5.0.15-SNAPSHOT15
+ 5.0.15-SNAPSHOT16
BuildBattle
From f931279065e62e9bdf6f2832cb5f08a150949a99 Mon Sep 17 00:00:00 2001
From: Tigerpanzer_02 <37453987+Tigerpanzer02@users.noreply.github.com>
Date: Mon, 14 Jul 2025 23:06:43 +0200
Subject: [PATCH 51/53] Fixed wrong game state if no players in arena on
ForcePlayArgument use
---
.../commands/arguments/admin/arena/ForcePlayArgument.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/main/java/plugily/projects/buildbattle/commands/arguments/admin/arena/ForcePlayArgument.java b/src/main/java/plugily/projects/buildbattle/commands/arguments/admin/arena/ForcePlayArgument.java
index 693ccb14..a16cf5f9 100644
--- a/src/main/java/plugily/projects/buildbattle/commands/arguments/admin/arena/ForcePlayArgument.java
+++ b/src/main/java/plugily/projects/buildbattle/commands/arguments/admin/arena/ForcePlayArgument.java
@@ -78,7 +78,7 @@ public void execute(CommandSender sender, String[] args) {
for(int i = themeArgStart; i < args.length; i++)
themeName.add(args[i]);
- if(arena.getArenaInGameState() == BaseArena.ArenaInGameState.BUILD_TIME || arena.getArenaState() == IArenaState.STARTING || arena.getArenaState() == IArenaState.FULL_GAME || arena.getArenaInGameState() == BaseArena.ArenaInGameState.THEME_VOTING) {
+ if(arena.getArenaInGameState() == BaseArena.ArenaInGameState.BUILD_TIME || arena.getArenaState() == IArenaState.WAITING_FOR_PLAYERS || arena.getArenaState() == IArenaState.STARTING || arena.getArenaState() == IArenaState.FULL_GAME || arena.getArenaInGameState() == BaseArena.ArenaInGameState.THEME_VOTING) {
if(arena.getPlugin().getThemeManager().isThemeBlacklisted(themeName.toString())) {
new MessageBuilder("COMMANDS_THEME_BLACKLISTED").asKey().prefix().send(sender);
return;
From c5dc1be766fe772a76f29175514aa67b9b9f302c Mon Sep 17 00:00:00 2001
From: "version-bump[github-action]"
<41898282+version-bump[github-action]@users.noreply.github.com>
Date: Mon, 14 Jul 2025 21:06:49 +0000
Subject: [PATCH 52/53] Bump version from 5.0.15-SNAPSHOT16 to
5.0.15-SNAPSHOT17
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 66354c3b..c4c04e3e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,7 +26,7 @@
plugily.projects
buildbattle
- 5.0.15-SNAPSHOT16
+ 5.0.15-SNAPSHOT17
BuildBattle
From 5482b8230b6507e114b230acb51b828ff5b86ad9 Mon Sep 17 00:00:00 2001
From: "version-bump[github-action]"
<41898282+version-bump[github-action]@users.noreply.github.com>
Date: Mon, 14 Jul 2025 21:17:57 +0000
Subject: [PATCH 53/53] Bump version from 5.0.15-SNAPSHOT17 to
5.0.15-SNAPSHOT18
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index c4c04e3e..9302fbf7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,7 +26,7 @@
plugily.projects
buildbattle
- 5.0.15-SNAPSHOT17
+ 5.0.15-SNAPSHOT18
BuildBattle