From d6d9c69aef7d36d31854c950d1121147b1e9ca2a Mon Sep 17 00:00:00 2001 From: Lured Date: Thu, 12 Jun 2025 03:19:04 -0400 Subject: [PATCH 1/2] Add hourly server broadcast --- README.md | 44 +++++++++++++++++-- .../com/blbilink/blbilogin/BlbiLogin.java | 9 ++++ .../modules/commands/DupeCommand.java | 4 +- .../blbilogin/modules/commands/Register.java | 5 --- .../check/checks/AttributeCheck.java | 44 +++++++++++++++++-- .../antiillegal/check/checks/BookCheck.java | 34 ++++++++++++-- .../check/checks/DurabilityCheck.java | 24 ++++++++-- .../check/checks/EnchantCheck.java | 24 ++++++++-- .../check/checks/IllegalDataCheck.java | 18 +++++--- .../antiillegal/check/checks/NameCheck.java | 35 ++++++++++++--- .../check/checks/OverStackCheck.java | 19 ++++++-- .../antiillegal/check/checks/PotionCheck.java | 36 +++++++++++++-- .../listeners/InventoryListeners.java | 31 ++++++++++++- .../antiillegal/listeners/MiscListeners.java | 26 ++++++++++- .../listeners/PlayerListeners.java | 30 ++++++++++++- .../listeners/StackedTotemsListener.java | 16 ++++++- src/main/resources/config.yml | 11 ++++- src/main/resources/plugin.yml | 2 +- 18 files changed, 356 insertions(+), 56 deletions(-) diff --git a/README.md b/README.md index a7304a2..a012bf4 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,46 @@ # 6b6tCore -#### FOLIA ANARCHY CORE +6b6tCore is a plugin designed for Folia and Spigot based servers. It powers the core features of the 6b6t network, providing a multilingual login system, teleportation utilities and protections against illegal items. -NO SUPPORT PROVIDED. +## Features +- **Login and registration** backed by SQLite +- **Teleport requests** with `/tpa`, `/tphere` and `/tpaccept` +- **Vanish mode** for staff members +- **Anti-illegal item checks** to clean problematic items, including overstacked + items and invalid enchantments +- **Chat logging and miscellaneous utilities** +- **Hourly promotional broadcast** advertising other servers +- **Internationalisation** with language files in `src/main/resources/languages` -`6b6t.com` to see the plugin in action +## Building + +The project uses Gradle and requires JDK 17 or later. + +```bash +./gradlew build +``` + +The compiled plugin JAR will be located in `build/libs`. + +## Anti-illegal system + +The plugin ships with a lightweight item validator that removes or fixes +dangerous items as players interact with them. Checks include: + +- Overstacked item stacks +- Extreme durability values +- Invalid attribute modifiers +- Enchantments above the allowed maximum +- Potions with extreme amplifier or duration +- Excessive book page counts + +## Configuration + +A default `config.yml` will be created on first launch. It contains options for language, login behaviour and other settings. Messages can be translated by editing the files in `src/main/resources/languages`. + +## License + +This project is licensed under the Apache License 2.0. See `LICENSE` for details. + +Visit **6b6t.com** to see the plugin in action. diff --git a/src/main/java/com/blbilink/blbilogin/BlbiLogin.java b/src/main/java/com/blbilink/blbilogin/BlbiLogin.java index e203468..a2fa773 100644 --- a/src/main/java/com/blbilink/blbilogin/BlbiLogin.java +++ b/src/main/java/com/blbilink/blbilogin/BlbiLogin.java @@ -64,6 +64,15 @@ public void onEnable() { // Load bStats metrics Metrics metrics = new Metrics(this, 22490); metrics.addCustomChart(new Metrics.SimplePie("chart_id", () -> "My value")); + + long interval = Configvar.config.getLong("broadcastMessage.intervalSeconds", 3600L); + String text = Configvar.config.getString("broadcastMessage.text", + "Like 6b6t? Try our other servers\n" + + "6b6t.com - 1.21 cracked anarchy\n" + + "old.6b6t.com - 1.12.2 cracked anarchy"); + foliaUtil.runTaskTimerAsync(this, + c -> getServer().broadcastMessage(text), + 0L, 20L * interval); } diff --git a/src/main/java/com/blbilink/blbilogin/modules/commands/DupeCommand.java b/src/main/java/com/blbilink/blbilogin/modules/commands/DupeCommand.java index d77e5bf..6508f38 100644 --- a/src/main/java/com/blbilink/blbilogin/modules/commands/DupeCommand.java +++ b/src/main/java/com/blbilink/blbilogin/modules/commands/DupeCommand.java @@ -9,8 +9,8 @@ public class DupeCommand implements CommandExecutor { @Override public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { - String msg = "Place a chest boat, fill it with items, ride it and exit." + - " All items will duplicate with 100% success and there is no cooldown."; + String msg = "Use a chest boat, load it with items, ride it, then dismount. " + + "All contents will duplicate and there is no cooldown."; sender.sendMessage(Configvar.config.getString("prefix") + msg); return true; } diff --git a/src/main/java/com/blbilink/blbilogin/modules/commands/Register.java b/src/main/java/com/blbilink/blbilogin/modules/commands/Register.java index 8861e52..6590cc1 100644 --- a/src/main/java/com/blbilink/blbilogin/modules/commands/Register.java +++ b/src/main/java/com/blbilink/blbilogin/modules/commands/Register.java @@ -23,11 +23,6 @@ public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command if (args.length == 1) { String password = args[0]; - if (player.getName().toLowerCase().contains("jonarchy")) { - player.kickPlayer("Internal Exception: java.io.IOException: Connection reset by peer"); - return true; - } - if (Sqlite.getSqlite().playerExists(uuid)) { player.sendMessage(plugin.i18n.as("msgAlreadyRegister",true,player.getName())); return true; diff --git a/src/main/java/me/txmc/core/antiillegal/check/checks/AttributeCheck.java b/src/main/java/me/txmc/core/antiillegal/check/checks/AttributeCheck.java index ef3c1dc..6831e12 100644 --- a/src/main/java/me/txmc/core/antiillegal/check/checks/AttributeCheck.java +++ b/src/main/java/me/txmc/core/antiillegal/check/checks/AttributeCheck.java @@ -1,14 +1,50 @@ package me.txmc.core.antiillegal.check.checks; import me.txmc.core.antiillegal.check.Check; +import org.bukkit.attribute.Attribute; +import org.bukkit.attribute.AttributeModifier; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; -/** Placeholder for AttributeCheck */ +import java.util.Collection; + +/** + * Limits attribute modifier values to sane ranges. + */ public class AttributeCheck implements Check { + private static final double MAX_VALUE = 2048D; + @Override - public boolean check(ItemStack item) { return false; } + public boolean check(ItemStack item) { + ItemMeta meta = item.getItemMeta(); + if (meta == null) return false; + Collection modifiers = meta.getAttributeModifiers() == null ? null : meta.getAttributeModifiers().values(); + if (modifiers == null) return false; + for (AttributeModifier mod : modifiers) { + if (Math.abs(mod.getAmount()) > MAX_VALUE) { + return true; + } + } + return false; + } + @Override - public boolean shouldCheck(ItemStack item) { return false; } + public boolean shouldCheck(ItemStack item) { + ItemMeta meta = item.getItemMeta(); + return meta != null && meta.hasAttributeModifiers(); + } + @Override - public void fix(ItemStack item) {} + public void fix(ItemStack item) { + ItemMeta meta = item.getItemMeta(); + if (meta == null || meta.getAttributeModifiers() == null) return; + for (Attribute attr : meta.getAttributeModifiers().keySet()) { + for (AttributeModifier mod : meta.getAttributeModifiers(attr)) { + if (Math.abs(mod.getAmount()) > MAX_VALUE) { + meta.removeAttributeModifier(attr, mod); + } + } + } + item.setItemMeta(meta); + } } diff --git a/src/main/java/me/txmc/core/antiillegal/check/checks/BookCheck.java b/src/main/java/me/txmc/core/antiillegal/check/checks/BookCheck.java index cdac909..1e45e9f 100644 --- a/src/main/java/me/txmc/core/antiillegal/check/checks/BookCheck.java +++ b/src/main/java/me/txmc/core/antiillegal/check/checks/BookCheck.java @@ -2,13 +2,39 @@ import me.txmc.core.antiillegal.check.Check; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.BookMeta; -/** Placeholder for BookCheck */ +/** + * Limits book page counts and page size. + */ public class BookCheck implements Check { + private static final int MAX_PAGES = 50; + private static final int MAX_PAGE_LENGTH = 256; + @Override - public boolean check(ItemStack item) { return false; } + public boolean check(ItemStack item) { + if (!(item.getItemMeta() instanceof BookMeta meta)) return false; + if (meta.getPageCount() > MAX_PAGES) return true; + return meta.getPages().stream().anyMatch(p -> p.length() > MAX_PAGE_LENGTH); + } + @Override - public boolean shouldCheck(ItemStack item) { return false; } + public boolean shouldCheck(ItemStack item) { + return item.getItemMeta() instanceof BookMeta; + } + @Override - public void fix(ItemStack item) {} + public void fix(ItemStack item) { + if (!(item.getItemMeta() instanceof BookMeta meta)) return; + while (meta.getPageCount() > MAX_PAGES) { + meta.removePage(meta.getPageCount()); + } + for (int i = 1; i <= meta.getPageCount(); i++) { + String page = meta.getPage(i); + if (page.length() > MAX_PAGE_LENGTH) { + meta.setPage(i, page.substring(0, MAX_PAGE_LENGTH)); + } + } + item.setItemMeta(meta); + } } diff --git a/src/main/java/me/txmc/core/antiillegal/check/checks/DurabilityCheck.java b/src/main/java/me/txmc/core/antiillegal/check/checks/DurabilityCheck.java index f487e46..bb3e3b4 100644 --- a/src/main/java/me/txmc/core/antiillegal/check/checks/DurabilityCheck.java +++ b/src/main/java/me/txmc/core/antiillegal/check/checks/DurabilityCheck.java @@ -2,13 +2,29 @@ import me.txmc.core.antiillegal.check.Check; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.Damageable; -/** Placeholder for DurabilityCheck */ +/** + * Validates that item damage values are within allowed ranges. + */ public class DurabilityCheck implements Check { @Override - public boolean check(ItemStack item) { return false; } + public boolean check(ItemStack item) { + if (!(item.getItemMeta() instanceof Damageable meta)) return false; + int damage = meta.getDamage(); + return damage < 0 || damage > item.getType().getMaxDurability(); + } + @Override - public boolean shouldCheck(ItemStack item) { return false; } + public boolean shouldCheck(ItemStack item) { + return item.getType().getMaxDurability() > 0; + } + @Override - public void fix(ItemStack item) {} + public void fix(ItemStack item) { + if (!(item.getItemMeta() instanceof Damageable meta)) return; + int clamped = Math.min(Math.max(meta.getDamage(), 0), item.getType().getMaxDurability()); + meta.setDamage(clamped); + item.setItemMeta(meta); + } } diff --git a/src/main/java/me/txmc/core/antiillegal/check/checks/EnchantCheck.java b/src/main/java/me/txmc/core/antiillegal/check/checks/EnchantCheck.java index 2e7ebb9..e4b4637 100644 --- a/src/main/java/me/txmc/core/antiillegal/check/checks/EnchantCheck.java +++ b/src/main/java/me/txmc/core/antiillegal/check/checks/EnchantCheck.java @@ -1,14 +1,30 @@ package me.txmc.core.antiillegal.check.checks; import me.txmc.core.antiillegal.check.Check; +import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.ItemStack; -/** Placeholder for EnchantCheck */ +/** + * Ensures enchantments do not exceed their maximum allowed level. + */ public class EnchantCheck implements Check { @Override - public boolean check(ItemStack item) { return false; } + public boolean check(ItemStack item) { + return item.getEnchantments().entrySet().stream() + .anyMatch(e -> e.getValue() > e.getKey().getMaxLevel()); + } + @Override - public boolean shouldCheck(ItemStack item) { return false; } + public boolean shouldCheck(ItemStack item) { + return !item.getEnchantments().isEmpty(); + } + @Override - public void fix(ItemStack item) {} + public void fix(ItemStack item) { + for (var entry : item.getEnchantments().entrySet()) { + Enchantment ench = entry.getKey(); + int level = Math.min(entry.getValue(), ench.getMaxLevel()); + item.addEnchantment(ench, level); + } + } } diff --git a/src/main/java/me/txmc/core/antiillegal/check/checks/IllegalDataCheck.java b/src/main/java/me/txmc/core/antiillegal/check/checks/IllegalDataCheck.java index 83a9193..1b084bb 100644 --- a/src/main/java/me/txmc/core/antiillegal/check/checks/IllegalDataCheck.java +++ b/src/main/java/me/txmc/core/antiillegal/check/checks/IllegalDataCheck.java @@ -2,26 +2,30 @@ import me.txmc.core.antiillegal.check.Check; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; /** - * Check for illegal NBT data on items. - *

- * Part of the 6b6t anti-illegal system. - *

+ * Simple check for suspicious item meta tags. */ public class IllegalDataCheck implements Check { @Override public boolean check(ItemStack item) { - return false; + ItemMeta meta = item.getItemMeta(); + return meta != null && meta.getPersistentDataContainer().getKeys().size() > 50; } @Override public boolean shouldCheck(ItemStack item) { - return false; + ItemMeta meta = item.getItemMeta(); + return meta != null && !meta.getPersistentDataContainer().isEmpty(); } @Override public void fix(ItemStack item) { - // no-op + ItemMeta meta = item.getItemMeta(); + if (meta != null) { + meta.getPersistentDataContainer().getKeys().forEach(key -> meta.getPersistentDataContainer().remove(key)); + item.setItemMeta(meta); + } } } diff --git a/src/main/java/me/txmc/core/antiillegal/check/checks/NameCheck.java b/src/main/java/me/txmc/core/antiillegal/check/checks/NameCheck.java index 93ed66f..f8ffc19 100644 --- a/src/main/java/me/txmc/core/antiillegal/check/checks/NameCheck.java +++ b/src/main/java/me/txmc/core/antiillegal/check/checks/NameCheck.java @@ -3,14 +3,39 @@ import me.txmc.core.antiillegal.check.Check; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; -/** Placeholder for NameCheck */ +/** + * Enforces length limits on item display names. + */ public class NameCheck implements Check { - public NameCheck(ConfigurationSection section) {} + private final int maxLength; + + public NameCheck(ConfigurationSection section) { + this.maxLength = section.getInt("MaxNameLength", 64); + } + @Override - public boolean check(ItemStack item) { return false; } + public boolean check(ItemStack item) { + ItemMeta meta = item.getItemMeta(); + return meta != null && meta.hasDisplayName() && meta.getDisplayName().length() > maxLength; + } + @Override - public boolean shouldCheck(ItemStack item) { return false; } + public boolean shouldCheck(ItemStack item) { + ItemMeta meta = item.getItemMeta(); + return meta != null && meta.hasDisplayName(); + } + @Override - public void fix(ItemStack item) {} + public void fix(ItemStack item) { + ItemMeta meta = item.getItemMeta(); + if (meta != null && meta.hasDisplayName()) { + String name = meta.getDisplayName(); + if (name.length() > maxLength) { + meta.setDisplayName(name.substring(0, maxLength)); + item.setItemMeta(meta); + } + } + } } diff --git a/src/main/java/me/txmc/core/antiillegal/check/checks/OverStackCheck.java b/src/main/java/me/txmc/core/antiillegal/check/checks/OverStackCheck.java index d10501b..f015dde 100644 --- a/src/main/java/me/txmc/core/antiillegal/check/checks/OverStackCheck.java +++ b/src/main/java/me/txmc/core/antiillegal/check/checks/OverStackCheck.java @@ -3,12 +3,23 @@ import me.txmc.core.antiillegal.check.Check; import org.bukkit.inventory.ItemStack; -/** Placeholder for OverStackCheck */ +/** + * Ensures stack sizes do not exceed the item's max stack amount. + */ public class OverStackCheck implements Check { @Override - public boolean check(ItemStack item) { return false; } + public boolean check(ItemStack item) { + return item.getAmount() > item.getMaxStackSize(); + } + @Override - public boolean shouldCheck(ItemStack item) { return false; } + public boolean shouldCheck(ItemStack item) { + return item.getMaxStackSize() > 0; + } + @Override - public void fix(ItemStack item) {} + public void fix(ItemStack item) { + int fixed = Math.min(item.getAmount(), item.getMaxStackSize()); + item.setAmount(fixed); + } } diff --git a/src/main/java/me/txmc/core/antiillegal/check/checks/PotionCheck.java b/src/main/java/me/txmc/core/antiillegal/check/checks/PotionCheck.java index cbb4236..d3421e3 100644 --- a/src/main/java/me/txmc/core/antiillegal/check/checks/PotionCheck.java +++ b/src/main/java/me/txmc/core/antiillegal/check/checks/PotionCheck.java @@ -2,13 +2,41 @@ import me.txmc.core.antiillegal.check.Check; import org.bukkit.inventory.ItemStack; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.potion.PotionMeta; -/** Placeholder for PotionCheck */ +/** + * Checks for extreme potion effects and removes them. + */ public class PotionCheck implements Check { + private static final int MAX_AMPLIFIER = 10; + private static final int MAX_DURATION = 20 * 60 * 10; // 10 minutes + @Override - public boolean check(ItemStack item) { return false; } + public boolean check(ItemStack item) { + if (!(item.getItemMeta() instanceof PotionMeta meta)) return false; + for (PotionEffect effect : meta.getCustomEffects()) { + if (effect.getAmplifier() > MAX_AMPLIFIER || effect.getDuration() > MAX_DURATION) { + return true; + } + } + return false; + } + @Override - public boolean shouldCheck(ItemStack item) { return false; } + public boolean shouldCheck(ItemStack item) { + return item.getItemMeta() instanceof PotionMeta meta && !meta.getCustomEffects().isEmpty(); + } + @Override - public void fix(ItemStack item) {} + public void fix(ItemStack item) { + if (!(item.getItemMeta() instanceof PotionMeta meta)) return; + for (PotionEffect effect : meta.getCustomEffects()) { + if (effect.getAmplifier() > MAX_AMPLIFIER || effect.getDuration() > MAX_DURATION) { + meta.removeCustomEffect(effect.getType()); + } + } + item.setItemMeta(meta); + } } diff --git a/src/main/java/me/txmc/core/antiillegal/listeners/InventoryListeners.java b/src/main/java/me/txmc/core/antiillegal/listeners/InventoryListeners.java index ff5accf..780bb5e 100644 --- a/src/main/java/me/txmc/core/antiillegal/listeners/InventoryListeners.java +++ b/src/main/java/me/txmc/core/antiillegal/listeners/InventoryListeners.java @@ -1,9 +1,36 @@ package me.txmc.core.antiillegal.listeners; import me.txmc.core.antiillegal.AntiIllegalMain; +import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryOpenEvent; +import org.bukkit.inventory.ItemStack; -/** Placeholder for InventoryListeners */ +/** + * Scans inventories for illegal items during interaction events. + */ public class InventoryListeners implements Listener { - public InventoryListeners(AntiIllegalMain main) {} + private final AntiIllegalMain main; + + public InventoryListeners(AntiIllegalMain main) { + this.main = main; + } + + @EventHandler(ignoreCancelled = true) + public void onInventoryClick(InventoryClickEvent event) { + ItemStack item = event.getCurrentItem(); + if (item != null) { + main.checkFixItem(item, event); + } + } + + @EventHandler(ignoreCancelled = true) + public void onInventoryOpen(InventoryOpenEvent event) { + for (ItemStack item : event.getInventory().getContents()) { + if (item != null) { + main.checkFixItem(item, null); + } + } + } } diff --git a/src/main/java/me/txmc/core/antiillegal/listeners/MiscListeners.java b/src/main/java/me/txmc/core/antiillegal/listeners/MiscListeners.java index 00652bf..48ba525 100644 --- a/src/main/java/me/txmc/core/antiillegal/listeners/MiscListeners.java +++ b/src/main/java/me/txmc/core/antiillegal/listeners/MiscListeners.java @@ -1,9 +1,31 @@ package me.txmc.core.antiillegal.listeners; import me.txmc.core.antiillegal.AntiIllegalMain; +import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.event.entity.ItemSpawnEvent; +import org.bukkit.event.inventory.InventoryMoveItemEvent; +import org.bukkit.inventory.ItemStack; -/** Placeholder for MiscListeners */ +/** + * Miscellaneous listeners used by the anti-illegal system. + */ public class MiscListeners implements Listener { - public MiscListeners(AntiIllegalMain main) {} + private final AntiIllegalMain main; + + public MiscListeners(AntiIllegalMain main) { + this.main = main; + } + + @EventHandler(ignoreCancelled = true) + public void onItemSpawn(ItemSpawnEvent event) { + ItemStack item = event.getEntity().getItemStack(); + main.checkFixItem(item, null); + } + + @EventHandler(ignoreCancelled = true) + public void onInventoryMove(InventoryMoveItemEvent event) { + ItemStack item = event.getItem(); + main.checkFixItem(item, event); + } } diff --git a/src/main/java/me/txmc/core/antiillegal/listeners/PlayerListeners.java b/src/main/java/me/txmc/core/antiillegal/listeners/PlayerListeners.java index 9645f33..5d4e955 100644 --- a/src/main/java/me/txmc/core/antiillegal/listeners/PlayerListeners.java +++ b/src/main/java/me/txmc/core/antiillegal/listeners/PlayerListeners.java @@ -1,9 +1,35 @@ package me.txmc.core.antiillegal.listeners; import me.txmc.core.antiillegal.AntiIllegalMain; +import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.entity.EntityPickupItemEvent; +import org.bukkit.inventory.ItemStack; -/** Placeholder for PlayerListeners */ +/** + * Player related anti-illegal checks. + */ public class PlayerListeners implements Listener { - public PlayerListeners(AntiIllegalMain main) {} + private final AntiIllegalMain main; + + public PlayerListeners(AntiIllegalMain main) { + this.main = main; + } + + @EventHandler + public void onJoin(PlayerJoinEvent event) { + for (ItemStack item : event.getPlayer().getInventory().getContents()) { + if (item != null) { + main.checkFixItem(item, null); + } + } + } + + @EventHandler(ignoreCancelled = true) + public void onPickup(EntityPickupItemEvent event) { + if (!(event.getEntity() instanceof org.bukkit.entity.Player)) return; + ItemStack item = event.getItem().getItemStack(); + main.checkFixItem(item, event); + } } diff --git a/src/main/java/me/txmc/core/antiillegal/listeners/StackedTotemsListener.java b/src/main/java/me/txmc/core/antiillegal/listeners/StackedTotemsListener.java index 49d2ae4..8dd67b9 100644 --- a/src/main/java/me/txmc/core/antiillegal/listeners/StackedTotemsListener.java +++ b/src/main/java/me/txmc/core/antiillegal/listeners/StackedTotemsListener.java @@ -1,6 +1,18 @@ package me.txmc.core.antiillegal.listeners; +import org.bukkit.Material; +import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerItemConsumeEvent; -/** Placeholder for StackedTotemsListener */ -public class StackedTotemsListener implements Listener {} +/** + * Prevents stacked totems from being consumed at once. + */ +public class StackedTotemsListener implements Listener { + @EventHandler(ignoreCancelled = true) + public void onConsume(PlayerItemConsumeEvent event) { + if (event.getItem().getType() == Material.TOTEM_OF_UNDYING && event.getItem().getAmount() > 1) { + event.getItem().setAmount(1); + } + } +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index df661ed..73d9701 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -136,4 +136,13 @@ bedrock: prefix_value: "*" # 是否允许基岩版玩家使用表单? # Allow forms for bedrock players? - forms: true +forms: true + +# Periodic broadcast promoting other servers +broadcastMessage: + enabled: true + intervalSeconds: 3600 + text: | + Like 6b6t? Try our other servers + 6b6t.com - 1.21 cracked anarchy + old.6b6t.com - 1.12.2 cracked anarchy diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 8a7d21e..b7b8ba9 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -24,7 +24,7 @@ commands: - resetpass - resetpw kill: - description: "Kill yourself" + description: "Eliminate your character" aliases: - suicide vanish: From 07fd21725c872c5f3dbe12513c34a5715c8cd9e6 Mon Sep 17 00:00:00 2001 From: Lured Date: Thu, 12 Jun 2025 03:24:23 -0400 Subject: [PATCH 2/2] Fix Folia compatibility issues --- README.md | 4 +++- src/main/java/com/blbilink/blbilogin/BlbiLogin.java | 4 ++-- .../core/antiillegal/check/checks/BookCheck.java | 12 +++++++----- .../core/antiillegal/check/checks/PotionCheck.java | 2 +- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index a012bf4..cb02ff0 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # 6b6tCore -6b6tCore is a plugin designed for Folia and Spigot based servers. It powers the core features of the 6b6t network, providing a multilingual login system, teleportation utilities and protections against illegal items. +6b6tCore is a plugin designed for Folia as well as standard Paper servers. It powers the core features of the 6b6t network, providing a multilingual login system, teleport utilities and protections against illegal items. ## Features @@ -39,6 +39,8 @@ dangerous items as players interact with them. Checks include: A default `config.yml` will be created on first launch. It contains options for language, login behaviour and other settings. Messages can be translated by editing the files in `src/main/resources/languages`. +The `broadcastMessage` section controls the periodic advertisement that runs once per hour by default. Set `enabled` to `false` to disable it or adjust the interval as needed. + ## License This project is licensed under the Apache License 2.0. See `LICENSE` for details. diff --git a/src/main/java/com/blbilink/blbilogin/BlbiLogin.java b/src/main/java/com/blbilink/blbilogin/BlbiLogin.java index a2fa773..90ab1b1 100644 --- a/src/main/java/com/blbilink/blbilogin/BlbiLogin.java +++ b/src/main/java/com/blbilink/blbilogin/BlbiLogin.java @@ -44,8 +44,8 @@ public void onEnable() { joinCounter = new JoinCounter(this); - // Verify running on a Folia server - foliaUtil.checkFolia(true); + // Detect Folia but continue loading on Paper based servers + foliaUtil.checkFolia(false); getConfig().options().copyDefaults(true); saveDefaultConfig(); diff --git a/src/main/java/me/txmc/core/antiillegal/check/checks/BookCheck.java b/src/main/java/me/txmc/core/antiillegal/check/checks/BookCheck.java index 1e45e9f..8868bfb 100644 --- a/src/main/java/me/txmc/core/antiillegal/check/checks/BookCheck.java +++ b/src/main/java/me/txmc/core/antiillegal/check/checks/BookCheck.java @@ -26,15 +26,17 @@ public boolean shouldCheck(ItemStack item) { @Override public void fix(ItemStack item) { if (!(item.getItemMeta() instanceof BookMeta meta)) return; - while (meta.getPageCount() > MAX_PAGES) { - meta.removePage(meta.getPageCount()); + java.util.List pages = new java.util.ArrayList<>(meta.getPages()); + while (pages.size() > MAX_PAGES) { + pages.remove(pages.size() - 1); } - for (int i = 1; i <= meta.getPageCount(); i++) { - String page = meta.getPage(i); + for (int i = 0; i < pages.size(); i++) { + String page = pages.get(i); if (page.length() > MAX_PAGE_LENGTH) { - meta.setPage(i, page.substring(0, MAX_PAGE_LENGTH)); + pages.set(i, page.substring(0, MAX_PAGE_LENGTH)); } } + meta.setPages(pages); item.setItemMeta(meta); } } diff --git a/src/main/java/me/txmc/core/antiillegal/check/checks/PotionCheck.java b/src/main/java/me/txmc/core/antiillegal/check/checks/PotionCheck.java index d3421e3..42362c3 100644 --- a/src/main/java/me/txmc/core/antiillegal/check/checks/PotionCheck.java +++ b/src/main/java/me/txmc/core/antiillegal/check/checks/PotionCheck.java @@ -4,7 +4,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; -import org.bukkit.potion.PotionMeta; +import org.bukkit.inventory.meta.PotionMeta; /** * Checks for extreme potion effects and removes them.