COWMODSКаталог модов

Advanced TreeCapitator

Advanced TreeCapitator enables fast tree felling on Paper 1.21. Sneak with an axe to chop entire trees, with configurable durability loss, world restrictions, and a reload command.

Автор: Duong2012G1,8 тыс.3обновлён 7 июн. 2026 г.
ПриключенияМеханики игрыУтилиты

Описание

Advanced TreeCapitator

Version: 1.5.3 | API: Paper 1.21+ | Author: Duong2012G License: Apache-2.0 | Link: Modrinth

Fell an entire tree with a single axe swing — Fortune, Silk Touch, and realistic tool durability fully supported.


Features

FeatureDescription
BFS tree fellingFinds and breaks all connected logs using a 26-direction breadth-first search. Handles Big Oak, Acacia, and Dark Oak diagonal logs correctly.
Configurable horizontal capLimits horizontal BFS spread — keeps nearby trees from being merged into one fell. Default: 8 blocks. Configurable via max-horizontal-distance (added v1.5.0).
Configurable 3-D distance capmax-distance limits total BFS depth in all three axes. Default: 50 — accommodates Jungle trees up to 30+ blocks tall. Configurable via max-distance (added v1.5.1; was hardcoded 30).
require-leaves guardChecks for adjacent leaves before felling — prevents accidental activation on player-built log walls and cabins. Now correctly covers stripped-log variants (fixed v1.5.1).
Protection plugin supportFires BlockBreakEvent for each extra block — WorldGuard, GriefPrevention, Lands, and Residence can cancel individual blocks.
Anti-recursion guardbreakingTrees set prevents the plugin from re-triggering itself when it fires protection events. Mutable-set exposure removed (fixed v1.5.1).
Fortune & Silk TouchWork automatically on every block via breakNaturally(tool), no extra configuration needed.
Durability pre-checkCalculates max breakable logs before breaking any — the axe can never fell more than its remaining durability allows.
Vanilla Unbreaking rollsDurability loss uses per-hit random rolls matching Minecraft's actual Unbreaking formula (fixed v1.5.0).
Config validationAll numeric values are clamped to a valid range — a malformed config cannot crash or break the plugin.
Configurable leaf costleaf-durability-ratio controls how many leaves equal one durability hit (default: 10). Partial hits resolved probabilistically (fixed v1.5.1).
Partial chopTrees larger than max-blocks are chopped up to the limit; remaining logs can be harvested with additional swings.
Per-player toggleEach player can enable/disable tree felling with /atc toggle without affecting others. Toggle state resets on disconnect.
Plugin APITreeCapitatorEvent lets other plugins cancel felling or grant custom rewards. All API methods annotated @NotNull (added v1.5.1).
World whitelist/blacklistRestrict which worlds allow tree felling.
Nether & Bamboo supportCrimson Stem, Warped Stem, and Bamboo Block are supported. require-leaves is automatically bypassed for these types.
Particle & sound effectsVisual feedback on each fell. Sound plays at the tree base so nearby players hear it correctly (fixed v1.5.0).
Hot reloadApply config changes with /atc reload, no restart needed.
Realistic break timeOptional realistic-break-time spreads the fell out over real mining time instead of breaking every log instantly — closes the "instant wood farm" exploit. Default: off (added v1.5.3).

Installation

  1. Download AdvancedTreeCapitator-1.5.3.jar
  2. Place it in your server's plugins/ folder
  3. Restart or reload the server
  4. Edit plugins/AdvancedTreeCapitator/config.yml as needed
  5. Run /atc reload to apply changes without restarting

Requirements: Paper (or any Paper fork) 1.21+, Java 17+


Permissions

PermissionDescriptionDefault
advancedtreecapitator.useUse tree felling + /atc toggletrue (all players)
advancedtreecapitator.adminReload config with /atc reloadop

Commands

CommandDescriptionPermission
/atc toggleEnable or disable tree felling for yourselfadvancedtreecapitator.use
/atc reloadReload the configuration fileadvancedtreecapitator.admin

How to Use

  1. Hold an axe listed in tool-whitelist
  2. Sneak (Shift) if require-sneak: true
  3. Break the base log of a tree — the entire connected tree drops at once

Fortune: All logs and leaves receive Fortune bonus drops automatically. Silk Touch: Logs and leaves drop as their block form instead of items.


Configuration Reference

# ── Activation ──────────────────────────────────────────────────
enabled: true
require-axe: true          # must hold an axe from tool-whitelist
require-sneak: true        # must be sneaking (Shift)
require-leaves: true       # at least 1 adjacent leaf required — prevents structure damage
                           # covers stripped-log variants since v1.5.1

# ── Tree detection ───────────────────────────────────────────────
max-blocks: 100            # max logs per fell (partial chop above limit)
max-horizontal-distance: 8 # BFS horizontal spread cap (added v1.5.0, was hardcoded before)
max-distance: 50           # BFS 3-D Manhattan cap — increase for tall Jungle trees
                           # (added v1.5.1, was hardcoded 30 in v1.5.0)

# ── Timing ──────────────────────────────────────────────────────
cooldown-ms: 200           # per-player cooldown in milliseconds
realistic-break-time: false # spread the fell over real mining time instead of
                             # breaking every log/leaf in the same tick (added v1.5.3)

# ── Leaves ──────────────────────────────────────────────────────
break-leaves: false        # also break adjacent leaves

# ── Durability ──────────────────────────────────────────────────
damage-axe: true           # apply durability loss proportional to blocks broken
damage-multiplier: 1.0     # durability cost per log block (Unbreaking respected)
leaf-durability-ratio: 10  # how many leaves = 1 durability hit (when break-leaves: true)
                           # partial hits now use probabilistic roll (fixed v1.5.1)

# ── Effects ─────────────────────────────────────────────────────
particle-effect: true
sound-effect: true         # sound plays at the tree base (fixed v1.5.0)

# ── World restrictions ───────────────────────────────────────────
whitelist-worlds: []       # only these worlds (empty = all)
blacklist-worlds: []       # block these worlds (empty = none)

World Restrictions

# Allow only specific worlds:
whitelist-worlds:
  - world
  - world_nether

# Or block specific worlds:
blacklist-worlds:
  - creative_world

Adding Custom Log Types

Add any Material enum name (case-insensitive) to log-types:

log-types:
  - OAK_LOG
  - STRIPPED_OAK_LOG    # stripped variants are now subject to require-leaves (v1.5.1)
  - MUSHROOM_STEM       # enables huge mushroom felling
  # add more as needed...

Plugin API — TreeCapitatorEvent

Other plugins can hook into tree felling via the TreeCapitatorEvent:

import dev.duong2012g.atc.TreeCapitatorEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;

public class MyListener implements Listener {

    @EventHandler
    public void onTreeFell(TreeCapitatorEvent event) {
        Player player   = event.getPlayer();
        int    logCount = event.getLogs().size(); // includes the origin block

        // Example: cancel felling in a protected region
        if (isProtectedRegion(player.getLocation())) {
            event.setCancelled(true);
            return;
        }

        // Example: reward economy based on tree size
        economy.depositPlayer(player, logCount * 0.5);
    }
}

Event fields:

MethodReturnsDescription
getPlayer()@NotNull PlayerThe player who triggered the fell
getLogs()@NotNull Set<Block> (unmodifiable)All log blocks scheduled to break, including the origin block. Size = full tree size.
getLeaves()@NotNull Set<Block> (unmodifiable)Leaf blocks scheduled to break (empty if break-leaves: false or set was trimmed)
setCancelled(true)—Cancels the entire tree felling; cooldown is refunded (fixed v1.5.0)

Note (fixed v1.5.0): In v1.4.0 and earlier, the Javadoc incorrectly stated that getLogs() excluded the origin block. It has always included it. If your plugin subtracted 1 from getLogs().size() as a workaround, remove that adjustment when upgrading to v1.5.0+.


What's New in v1.5.3

#FeatureImpact
1New realistic-break-time option (default: false)When enabled, a felled tree is broken one log/leaf at a time instead of all at once, with each delay equal to that block's real vanilla mining time for the player's current tool. Closes the "swing once, get an entire tree instantly" wood-farming exploit while keeping one-swing auto-felling.

What's New in v1.5.2

#FixImpact
1api-version raised from '1.20' to '1.21'Plugin no longer loads on 1.20.x servers where Particle.BLOCK doesn't exist — prevents NoSuchFieldError on enable
2Correct break sound for Nether stems and BambooCRIMSON_STEM/WARPED_STEM now play BLOCK_NETHER_WOOD_BREAK; BAMBOO_BLOCK plays BLOCK_BAMBOO_WOOD_BREAK
3cfg fetched fresh in task execution, not at constructionA /atc reload in the one-tick window between event and task now always takes effect

What's New in v1.5.1

#FixImpact
1BFS distance check moved before logsToBreak.add()max-horizontal-distance now works correctly at the boundary — blocks just beyond the limit are no longer included in the fell
2cooldown-ms overflow on extreme YAML valuesValues > Integer.MAX_VALUE no longer silently disable the cooldown
3max-distance is now configurable (default 50, was hardcoded 30)Tall Jungle trees no longer get truncated mid-trunk
4getBreakingTrees() public getter removedAnti-recursion guard can no longer be corrupted by external plugins
5isOverworldLog() covers stripped-log variantsSTRIPPED_OAK_LOG etc. in log-types now correctly honour require-leaves
6Leaf durability partial hits resolved probabilisticallyBreaking fewer leaves than leaf-durability-ratio no longer silently discards the hit
7@NotNull on TreeCapitatorEvent public APIIDE and static analysis support for third-party integrations

What's New in v1.5.0

#FixImpact
1Enchantment.UNBREAKING constant replaces deprecated getByKey()Unbreaking now works correctly on Paper 1.21+
2isOnline() guard before task executionNo more unsafe calls when player disconnects in 1-tick window
3PlayerQuitEvent clears all per-player stateToggle state and cooldown reset correctly on disconnect
4Cooldown refunded when TreeCapitatorEvent is cancelledPlayers aren't penalised when another plugin blocks a fell
5TreeCapitatorEvent Javadoc corrected ("includes origin")Third-party plugins now get accurate tree size from getLogs().size()
6Unbreaking uses per-hit random rolls (vanilla-accurate)Durability loss now feels natural and varies like vanilla
7Sound plays at tree base, not the playerNearby players hear the fell; audio matches the visual
8max-horizontal-distance is now configurableModpack trees with wide canopies no longer need a code change

Known Issues

  • Folia incompatibility — Folia's RegionScheduler API is not yet used. Planned for v1.6.0.

Changelog

See CHANGELOG.md


License

Apache-2.0 © Duong2012G

Последние версии

Все версии →
release

Advanced TreeCapitator 1.5.2

1.5.2
7 июн. 2026 г.842Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Скачать
Что нового
## [1.5.2] — 2025-06-07 ### Fixed — Bug Fixes | # | Bug | Details | |---|-----|---------| | 1 | **`api-version: '1.20'` in plugin.yml while compiling against Paper 1.21.4 API** | The plugin declared `api-version: '1.20'`, which allowed Paper to load it on 1.20.x servers. `Particle.BLOCK` was renamed from `Particle.BLOCK_CRACK` in Paper 1.21+; running on a 1.20 server would produce a `NoSuchFieldError` at class-loading time, crashing the plugin on enable. Fixed by raising `api-version` to `'1.21'`, which prevents the plugin from loading on incompatible servers and eliminates the runtime risk. | | 2 | **`Sound.BLOCK_WOOD_BREAK` played for Nether stems and Bamboo blocks** | All felled trees used the overworld wood-break sound (`Sound.BLOCK_WOOD_BREAK`) regardless of log type. In vanilla Minecraft, Nether stems (`CRIMSON_STEM`, `WARPED_STEM`) use `block.nether_wood.break` and Bamboo blocks use `block.bamboo_wood.break`. Playing the wrong sound for these types is audibly incorrect and breaks immersion. Fixed by adding a `fellSound(Material)` helper that dispatches to `Sound.BLOCK_NETHER_WOOD_BREAK` for Nether-type stems, `Sound.BLOCK_BAMBOO_WOOD_BREAK` for Bamboo, and `Sound.BLOCK_WOOD_BREAK` for all overworld logs. Detection uses a name-prefix check so future variants are covered automatically. | | 3 | **`cfg` field in `TreeCapitatorTask` captured at construction time, not at execution time** | `TreeCapitatorTask` stored the `Config` instance as a field initializer (`private final Config cfg = getInstance().getPluginConfig()`), which ran when `new TreeCapitatorTask(...)` was called inside `onBlockBreak`. Since the task executes one tick later via `runTask()`, a `/atc reload` issued in that one-tick window would leave the task using a stale pre-reload `Config` snapshot — the new configuration was silently ignored for that fell. Fixed by removing the field and fetching the config fresh at the top of `doFell()` via `plugin.getPluginConfig()`, always reflecting the most recent reload. |
release

Advanced TreeCapitator 1.5.1

1.5.1
2 июн. 2026 г.52Minecraft: 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6bukkit, paper, purpur, spigot
Скачать
Что нового
## [1.5.1] — 2025-06-03 ### Fixed — Bug Fixes | # | Bug | Details | |---|-----|---------| | 1 | **BFS adds out-of-range blocks to the break-set before checking distance caps** | In `TreeFinder.findLogs()`, `logsToBreak.add(current)` ran unconditionally at the start of the loop body — before the `dist > MAX_DISTANCE` and `hdist > maxHorizontalDistance` checks. A block at the outer edge of the BFS scan (e.g. `hdist == maxHorizontalDistance + 1`) was enqueued as a neighbour of an in-range block, then added to the break-set when dequeued, even though the check immediately after prevented its own neighbours from being explored. Result: logs slightly beyond `max-horizontal-distance` were still felled, making the config option unreliable at the boundary. Fixed by moving both distance checks before the `logsToBreak.add()` call. | | 2 | **`cooldownMs` loaded with `(int)` cast before clamping — silent integer overflow** | `cooldownMs = clamp((int) cfg.getLong("cooldown-ms", 200L), 0, 60_000)` cast the raw YAML `long` to `int` before clamping. Any value larger than `Integer.MAX_VALUE` (2 147 483 647) in the config file overflowed to a negative number, which `clamp()` then floored to `0`, silently disabling the per-player cooldown entirely. Fixed by clamping on the `long` value first: `(int) Math.min(Math.max(...), 60_000L)`. Field type also changed from `long` to `int` for consistency; `getCooldownMs()` now returns `int`. | | 3 | **Hardcoded `MAX_DISTANCE = 30` truncated tall Jungle trees** | The 3-D Manhattan BFS safety cap was hardcoded as `private static final int MAX_DISTANCE = 30` in `TreeFinder`. Jungle trees can reach 30+ blocks tall; a player chopping from a non-base position (reducing the vertical budget) or a tree with any horizontal spread would have its top logs excluded from the fell silently. Exposed as `max-distance` in `config.yml` with a default of 50. Configurable range: 10 – 200. | | 4 | **`getBreakingTrees()` exposed the internal mutable anti-recursion set** | The public getter `getBreakingTrees()` returned the raw `ConcurrentHashMap.newKeySet()` directly. External code (another plugin or a misbehaving task) could call `.add(uuid)` to permanently lock a player out of tree felling, or `.clear()` to disable the anti-recursion guard entirely mid-fell. Fixed by removing the public getter and replacing it with the package-private helpers `markFelling(UUID)` and `unmarkFelling(UUID)`, used only by `TreeCapitatorTask`. | | 5 | **`isOverworldLog()` did not cover stripped-log variants — `require-leaves` bypass** | The method used a hard-coded switch that only listed nine non-stripped log variants (e.g. `OAK_LOG`). If a server operator added a stripped variant (e.g. `STRIPPED_OAK_LOG`) to `log-types` in config.yml, `isOverworldLog()` returned `false` (default case), and the `require-leaves` check was silently skipped. A player-built wall of stripped logs could be felled with a single swing even with `require-leaves: true`. Fixed by replacing the switch with a Material name-suffix check: any material ending in `_LOG` or `_WOOD` returns `true`. Nether stems (`CRIMSON_STEM`, `WARPED_STEM`), hyphae, and `BAMBOO_BLOCK` end in `_STEM`, `_HYPHAE`, or `_BLOCK` and continue to return `false` correctly. | | 6 | **Leaf durability hits silently discarded by integer truncation** | `leafBreaks / safeRatio` used integer division, dropping the remainder entirely. With the default `leaf-durability-ratio: 10`, breaking fewer than 10 leaves contributed exactly 0 durability hits — so a small tree with leaves produced no leaf-based durability cost at all. Fixed by resolving the remainder probabilistically: `remainder / safeRatio` gives the probability of one additional hit, resolved with a `ThreadLocalRandom` roll, consistent with the existing fractional-hit logic in `calcDamage()`. | | 7 | **`TreeCapitatorEvent` API lacked `@NotNull` annotations** | All three public getters (`getPlayer()`, `getLogs()`, `getLeaves()`) and the constructor parameters had no nullability contract. Third-party plugins integrating the API had no IDE or static-analysis guidance about null safety. Added `@NotNull` (from `org.jetbrains:annotations:24.1.0`) to all public constructor parameters and return types. `org.jetbrains:annotations` added to `pom.xml` as a `provided` dependency. |
release

Advanced TreeCapitator 1.5.0

1.5.0
21 мая 2026 г.81Minecraft: 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6bukkit, paper, purpur, spigot
Скачать
Что нового
## [1.5.0] — 2025-05-21 ### Fixed — Bug Fixes | # | Bug | Details | |---|-----|---------| | 1 | **`Enchantment.getByKey()` silently returned `null` on Paper 1.21+** | `DurabilityHandler.getUnbreakingLevel()` used the deprecated `Enchantment.getByKey(NamespacedKey.minecraft("unbreaking"))` lookup. On Paper 1.21+ this returns `null` if the registry isn't fully initialised, causing the method to always return `0` — i.e. Unbreaking was completely ignored and axes lost durability as if they had no enchantment. Fixed by using the stable constant `Enchantment.UNBREAKING`. | | 2 | **Player offline during 1-tick scheduling delay caused unsafe state** | `TreeCapitatorTask` ran 1 tick after `BlockBreakEvent`. If the player disconnected in that window, `player.getInventory()` and `player.playSound()` were called on an invalid player. Fixed by adding an `isOnline()` guard at the top of `doFell()`. | | 3 | **`disabledPlayers` set accumulated stale UUIDs indefinitely** | When a player used `/atc toggle` to disable felling and then quit the server, their UUID was never removed from `disabledPlayers`. On re-join, felling remained disabled without the player having toggled it again. Fixed by handling `PlayerQuitEvent` and clearing all per-player state (`disabledPlayers`, `cooldowns`, `breakingTrees`). | | 4 | **Cooldown was consumed even when `TreeCapitatorEvent` was cancelled** | The cooldown timestamp was written in `onBlockBreak()` before the task ran. If a third-party plugin cancelled `TreeCapitatorEvent` (e.g. an economy plugin denying the action), the player was still forced to wait out the full cooldown. Fixed by refunding (removing) the cooldown entry inside `doFell()` immediately after a cancellation is detected. | | 5 | **`TreeCapitatorEvent` Javadoc incorrectly stated "excludes origin"** | The `@param logs` Javadoc said the set excluded the origin block. In reality `trimmedLogs` always includes the origin. Third-party plugins that relied on the documented behaviour miscounted tree size and produced incorrect reward calculations. Corrected the Javadoc; no runtime behaviour changed. | | 6 | **Unbreaking durability calculation was deterministic (did not match vanilla)** | `calcDamage()` multiplied hits by the expected-value probability `1/(level+1)`, producing the same result every time. Vanilla Minecraft rolls each hit independently: each has a `1/(level+1)` chance to deal damage. With Unbreaking III chopping 20 logs, the plugin always applied exactly 5 durability; vanilla would apply anywhere from 0 to 20. Fixed by replacing the formula with a per-hit `ThreadLocalRandom` roll matching the vanilla mechanic. | | 7 | **Sound effect played at player location instead of the tree** | `player.playSound(player.getLocation(), ...)` meant the wood-break sound originated from the player rather than the tree. Players nearby heard nothing; the audio source felt disconnected from the visual effect. Fixed by using `world.playSound(startBlock.getLocation(), ...)` so the sound radiates from the felled tree's base and all nearby players can hear it. | ### Added — New Features | Feature | Details | |---------|---------| | **`max-horizontal-distance` is now configurable** | Previously `MAX_HORIZONTAL_DISTANCE = 8` was a hardcoded constant in `TreeFinder`. It is now exposed as `max-horizontal-distance` in `config.yml` (default: 8). Modpack trees with unusually wide canopies can increase this; densely planted farms can decrease it to prevent cross-tree BFS merging. | ### Changed — Code Improvements - **Cooldown cleanup interval** is now dynamic: entries are removed after `max(5 s, 10 × cooldown-ms)` instead of a flat 60 seconds. With the default 200 ms cooldown this reduces the time stale entries linger from 60 s to 2 s. - `Config.getMaxHorizontalDistance()` added; `TreeFinder.findLogs()` now accepts this as a parameter instead of reading a static field. - `AdvancedTreeCapitator.getCooldowns()` added to allow `TreeCapitatorTask` to refund cooldowns without reflection. - All per-player state is now cleared in `PlayerQuitEvent` in addition to each task's `finally` block.
release

Advanced TreeCapitator 1.4.0

1.4.0
14 мая 2026 г.148Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Скачать
Что нового
## [1.4.0] — 2026-05-14 ### Fixed - **[CRITICAL] Forced Java 21 requirement** — The `pom.xml` compile target has been lowered from Java 21 to **Java 17**. Previously the plugin threw `UnsupportedClassVersionError` on any server running Java 17 (Paper 1.20.x, Purpur, Pufferfish, most shared hosting providers). No source changes were needed because the code does not use any Java 21-specific APIs. - **[CRITICAL] Protection plugin bypass** — Extra log blocks (every block other than the origin) were broken with `breakNaturally()` without first firing a `BlockBreakEvent`, meaning WorldGuard, GriefPrevention, Lands, and Residence had no opportunity to intervene. A dedicated `BlockBreakEvent` is now fired for each extra block before it is broken; if any protection plugin cancels that event, the block is silently skipped. - **[CRITICAL] Missing anti-recursion guard** — The protection-plugin fix above fires `BlockBreakEvent` programmatically, which caused the plugin's own listener to trigger again for each block, creating an infinite loop. A `breakingTrees` `Set<UUID>` now marks any player whose felling session is currently in progress; the listener returns immediately if the player's UUID is already present. The set is always cleared inside a `finally` block so a player can never get permanently stuck. - **[MEDIUM] BFS linking two nearby trees** — The 26-direction BFS could follow diagonal log connections to merge two adjacent trees into one oversized fell. A new `MAX_HORIZONTAL_DISTANCE = 8` constant (Manhattan X+Z distance from the origin block) causes BFS to skip any candidate block beyond that threshold. The value of 8 is wide enough to accommodate Big Oak and Dark Oak canopies without bridging two separate trunks. - **[MEDIUM] No config value validation** — Values such as `max-blocks: -1` or `damage-multiplier: -100` were loaded directly into fields, producing undefined behaviour (negative BFS limits, inverted durability). `clamp()` and `clampDouble()` helpers have been added to `Config.reload()`; all numeric values are now constrained to a valid range (e.g. `max-blocks` → `[1, 1000]`, `damage-multiplier` → `[0.1, 10.0]`). ### Clarified (not a bug) - **Double durability damage (analyst report #2)** — The audit report claimed that `breakNaturally(tool)` automatically reduces the tool's durability in the player's inventory, causing damage to be applied twice alongside `DurabilityHandler`. After reviewing the Paper API source: `Block.breakNaturally(ItemStack)` uses the `ItemStack` only to determine drop calculations (Fortune, Silk Touch) and does **not** modify the item in the player's inventory. `DurabilityHandler` remains the sole source of durability loss. No double damage occurs. ### Changed - Lowered the supported `api-version` from Paper 1.21 to **Paper 1.20.4+**, broadening compatibility without requiring any 1.21-specific API. - Added Javadoc to `TreeFinder`, `TreeCapitatorTask`, and `Config`. ### Not Fixed (planned v1.5.0) - **Folia incompatibility** — The plugin schedules work with `BukkitScheduler.runTask()`, which is incompatible with Folia's region-based threading model. A proper fix requires migrating to `RegionScheduler` / `GlobalRegionScheduler` and is planned for v1.5.0. ---
release

Advanced TreeCapitator 1.3.0

1.3.0
26 апр. 2026 г.128Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Скачать
Что нового
## [1.3.0] — 2026-04-25 ### Fixed - **`PALE_OAK_LOG` bypassed `require-leaves` check** — `isOverworldLog()` was missing `PALE_OAK_LOG` from its switch statement, meaning Pale Oak trees were treated the same as Nether stems (no-leaf bypass). With `require-leaves: true`, a Pale Oak log structure built by a player would be incorrectly felled. Added `PALE_OAK_LOG` to the overworld log list so it is correctly guarded. - **Fragile reference-equality trim check** — The condition that decided whether leaves should be broken used `trimmedLogs == logsToBreak` (Java reference equality) instead of an explicit boolean. While this happened to work correctly, it was subtle and error-prone. Replaced with a dedicated `wasTrimmed` boolean flag for clarity and safety. ### Added - **`TreeCapitatorEvent` (Plugin API)** — A new cancellable Bukkit event fired just before any tree is felled. Other plugins can now listen to `TreeCapitatorEvent` to: - Cancel the felling via `event.setCancelled(true)`. - Inspect the full set of logs and leaves that will be broken. - Grant custom rewards (economy, XP, quests) based on `event.getLogs().size()`. - **`leaf-durability-ratio` config option** (default: `10`) — Controls how many leaf blocks count as one durability hit when `break-leaves: true`. Previously hardcoded to `1/10`, this is now fully configurable. Set to `1` to make every leaf cost a durability point; set higher to reduce tool wear from leaf breaking. - **`MUSHROOM_STEM` support** — Added a commented-out entry in `config.yml` for `MUSHROOM_STEM`, enabling huge-mushroom felling. Uncomment to activate. ### Refactored (God Class split) - **`TreeFinder`** (new class) — Extracted all BFS log-finding and leaf-scanning logic from `TreeCapitatorTask` into a dedicated utility class. `isOverworldLog()` and `isLeaf()` helpers moved here. - **`DurabilityHandler`** (new class) — Extracted all durability calculation and application logic (`getRemaining`, `calcMaxExtraBreaks`, `applyDamage`) into a dedicated utility class. - `TreeCapitatorTask` is now a lean orchestrator: BFS → leaves → trim → event → break → durability → effects. ---
release

Advanced TreeCapitator 1.2.5

1.2.5
17 апр. 2026 г.89Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11paper, purpur
Скачать
Что нового
## [1.2.5] — 2026-04-17 ### Fixed * Nether stems, Warped stems, and Bamboo Block now work correctly with `require-leaves: true`. ### Improved * Highly optimized BFS: uses `ArrayDeque`, scans leaves only once, adds Manhattan distance, and uses `HashSet`. * Cleaner, more maintainable code. ---
release

Advanced TreeCapitator 1.2.4

1.2.4
4 апр. 2026 г.132Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Скачать
Что нового
## [1.2.4] — 2026-04-04 ### Fixed - **Large trees (Jungle Giant, Dark Oak) could not be felled** — When a tree exceeded `max-blocks` (default: 100), the plugin aborted the entire felling operation and only the single broken log was harvested. This made giant Jungle trees (200-500 blocks) and large Dark Oaks impossible to chop efficiently. The plugin now performs a **partial chop** — it breaks logs up to the configured `max-blocks` limit instead of doing nothing. The remaining logs can be harvested with additional chops. - **Off-by-one in max-blocks check** — Changed from `>` to `>=` so the limit is correctly enforced at exactly `max-blocks`. - **Big Oak trees not fully harvested** — The BFS search for logs was limited to 6 directions (face-adjacent only), causing the capitator to miss logs that are only diagonally adjacent. Big Oak trees have irregular structures where some logs only touch at corners. The search is now 26-direction (3×3×3 cube) to catch all connected logs. ---
release

Advanced TreeCapitator 1.2.3

1.2.3
27 мар. 2026 г.84Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11paper, purpur
Скачать
Что нового
## [1.2.3] — 2026-03-27 ### Added - **`require-leaves` option** (default: `true`) — Before felling, the plugin now checks that the log cluster has at least one adjacent leaf block. If none are found, the capitator does nothing. This prevents accidental activation on player-built log structures such as house walls, cabin roofs, or log-block decorations. Set to `false` to restore the old behaviour. ### Fixed - **Durability did not limit felling** — Tool durability was calculated and applied *after* all blocks were already broken. A nearly-broken axe (1 durability remaining) could silently fell a 100-log tree and would simply be destroyed at the end. The task now calculates the maximum number of extra logs the remaining durability permits *before* breaking any blocks, and trims the set accordingly. Unbreaking level is respected in this pre-check as well. ---
release

Advanced TreeCapitator 1.2.2

1.2.2
16 мар. 2026 г.76Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Скачать
Что нового
## [1.2.2] — 2026-03-16 ### Fixed - **Critical Item Swap Bug** — Fixed a bug where switching items during a tree felling task (0.05s delay) could overwrite a new item in the player's hand with the old axe, potentially causing item loss. The task now tracks the specific inventory slot and verifies the tool's identity before applying durability changes. - **Leaf Durability** — Added durability loss for leaf felling. Every 10 leaves broken now counts as 1 tool hit to ensure balancing when `break-leaves` is enabled.
release

Advanced TreeCapitator 1.2.2

1.2.2
11 мар. 2026 г.33Minecraft: 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11bukkit, paper, purpur, spigot
Скачать
Что нового
fixed bug