Описание
# TreeChop
**Want to cut down trees more easily? With TreeChop you can do it!**
- Do you need the tree to be chopped down after one or multiple cuts?
- Supports any custom trees added by datapacks such as _William Wyther's datapack.
- Runs on **Minecraft 1.17+**
- **Optimized** for large-scale servers.
- Protections (WorldGuard, claims...) are respected block by block.
- You can add your **Translations** in the `lang/` folder.
- **Configurable** - *by default trees must be hit multiple times to be chopped down* (you can also make it work like a TreeCapitator: details at the bottom of the page).
No, your base will not be accidentally destroyed, unless the base is a tree. You can also use ```/tc toggle```, or simply ```sneak + right-click``` in the air with an axe.
Use your axe on trees as you want! : )
Chop an Oak Tree

### NOTE:
Original project created on [CrashPlugin.](https://crashplugin.com/catalog/3) \
Since 3.0.0 the update check uses the **Modrinth API** (it can be disabled in the config: `Updates.check`). \
[Modrinth Page](https://modrinth.com/project/jC5TcUPE) - [bStats](https://bstats.org/plugin/bukkit/TreeChop/24592)
# Commands:
**TreeChop commands are only visible if you have the appropriate permissions, mentioned below.** \
```/treechop``` alias: ```/tc```
- ```/tc toggle [on/off] [player]``` command for a player to toggle TreeChop.
- ```/tc help ...``` for help on the commands.
- ```/tc enabled ``` to enable or disable the plugin.
- ```/tc pluginInfo``` for plugin information (plugin version...).
- ```/tc reloadconfig``` if you have edited the config file, use this.
- ```/tc config ``` to edit or view the configuration.
# Permission:
- ```g031.command.treechop.*```: permission for all TreeChop commands.
- ```g031.command.treechop.config```: operator command to configure plugin. (default on only op)
- ```g031.command.treechop.enable```: operator command to enable or disable the plugin. (default on only op)
- ```g031.command.treechop.self_toggle```: command for a player to toggle TreeChop. (default on all players)
- ```g031.command.treechop.toggle```: command for a player to toggle TreeChop for players. (default on only op)
- ```g031.treechop.chop```: used to start chop event. (default on all players)
**You need to use a permission plugin, such as luckperms, to manage permissions.**\
To decide who can use this mechanic, you can disable the ```g031.treechop.chop``` permission and give it to players with some reward system or manually.
# Config File (3.0.0, format v6):
The config is generated with inline comments on the first start and **migrates automatically** from older versions (your values are preserved; the old `percentageChop` becomes a `hardnessFormula`).
Default Config v6
```yml
# Indicates the version of the configuration file. DO NOT TOUCH the parameter (risk of file reset).
ConfigVersion: 6
# Indicates whether the plugin is active (listens to the BlockBreakEvent).
TreeChopEnabled: true
# Language file to use from the lang/ folder (included: en, it). Missing keys fall back to en.
Language: en
# Decide who can use treechop.
# If permission is true, the players must have one of the permissions in the permissions list.
# Disclaimer: the bigger the list of permissions, the more checks per player will be made!
WhoCanChop:
permission: true
permissions:
- g031.treechop.chop
# treeCollecting_Mode = (0 only logs of the initial type), (1 only LOG and WOOD), (2 only LOG, WOOD, and STRIPPED), (3 any type of wood).
# maxBlocks = (default: 2048) safety cap of blocks collected per tree.
# maxWidth = (default: 16) horizontal size beyond which a wooden structure is declared 'not a tree' and the scan stops early, saving work on log walls and buildings.
# Only applies while no natural leaves have been seen yet, so real trees are unaffected. Raise it if you use very wide custom trees, 0 = no limit.
# noTreeCacheTime = (default: 30) seconds a wooden structure stays remembered as 'not a tree': hitting it again does not rescan it. 0 = always rescan.
# enabledWorlds = list of worlds where treechop works (empty = all worlds).
# excludedLogs = list of log material names that treechop ignores (e.g. [OAK_LOG, DARK_OAK_WOOD]).
Collecting:
treeCollecting_Mode: 1
maxBlocks: 2048
maxWidth: 16
noTreeCacheTime: 30
enabledWorlds: []
excludedLogs: []
# During tree cutting.
# shiftDisableChop = disables while sneaking, the cutting action.
# shiftRightToggle = sneak + right-click in the air with an axe toggles TreeChop for yourself (same as '/tc toggle').
# useMultipleAxes = default set to false, to prevent damaging the wrong tool.
# chopAllLogs = if it is true, it will break all the tree logs (PHYSICS ignores it: only what is left hanging falls).
# treeCutting_Mode = felling mode:
# 0 HITS = one hit each, as many as hardnessFormula asks for.
# 1 PHYSICS = nothing is cancelled, you break the logs of the cutting area yourself and whatever is left hanging falls (a dark oak needs its 4 cuts). hardnessFormula, chopAllLogs and damagedLogs do not apply.
# 2 HARDNESS = a single cut, just longer: hold the button down and the formula becomes a hardness multiplier, so a better axe still cuts faster. Let go and the log heals.
# From 1.20.5 the log is really harder for the client (one long break); older versions count repeated breaks instead, for the same total time.
# hardnessFormula = formula for the needed hits (rounded down). Variables: logs (falling logs), chop (cutting area), height (tree height).
# Functions: min, max, ceil, floor, round, sqrt, abs. e.g. 'logs * 0.8', 'ceil(sqrt(logs) * 3)'.
# insufficientAxeDurability = notify that the tool has a lower durability than the total logs.
OnChop:
shiftDisableChop: true
shiftRightToggle: true
useMultipleAxes: false
chopAllLogs: false
treeCutting_Mode: 0
hardnessFormula: logs * 0.8
insufficientAxeDurability: true
# Cracks on the cutting area. Unused in PHYSICS: there is no progress to show.
# othersView = Whether other players can see the effect of the damaged block.
# radius = Within what radius other players can see the effect.
# mode = crack channel: (0 per-player: cracks follow the area each player is cutting) (1 shared: same cracks per block for everyone).
damagedLogs:
othersView: true
radius: 32
mode: 0
# During the fall of the tree.
# axeBreakStopFall = during the fall of the tree if the tool breaks, it interrupts the breaking of other logs.
# saveToolDurability = Choose the amount of the durability you want to save of the tool.
# durabilityPerLog = tool damage per broken log: -1 = vanilla, 0 = no cost, N = exactly N damage per log (overrides Unbreaking).
# breakLogsMode = (0 breaks the blocks without following an order) (1 breaks the blocks in an upward manner according to the Y-axis).
# breakLogsPerTick = Value referring to how many logs to break per tick. If set to '0' it will be instantaneous but may impact performance.
# fallMode = fall animation: (0 standard) (1 suction = cosmetic falling blocks are vacuumed toward the cut center as the logs break; visual only, slightly heavier).
# hungerPerLog = exhaustion (hunger) added to the chopper per felled log (decimals, e.g. 0.5). 0 = none.
# xpPerLog = experience points awarded to the player for each log cut down (decimal value; the total is rounded down). 0 = none.
OnFall:
axeBreakStopFall: true
saveToolDurability: 0
durabilityPerLog: -1
breakLogsMode: 1
breakLogsPerTick: 2
fallMode: 0
hungerPerLog: 0.0
xpPerLog: 0.0
# Natural leaves handling when a tree falls.
# The leaves are NOT broken by the player: no tool damage and no statistics,
# but protections are still asked block by block, exactly like the logs.
# breakLeaves = also break the tree's natural (non player-placed) leaves.
# leavesRadius = connection steps (not euclidean distance) from the felled logs within which leaves are collected.
# breakLeavesMode = breaking order: (0 from the trunk outward, by connection steps) (1 bottom-up) (2 top-down)
# (3 from the outside toward the trunk) (4 one random leaf at a time, default) (5 like 0 but by real distance, the only order that costs a real sort).
# leavesPerTick = leaves broken per tick, decimals allowed: 0.4 (default) = one leaf every 2.5 ticks. 0 = instantaneous but may impact performance.
Leaves:
breakLeaves: false
leavesRadius: 6
breakLeavesMode: 4
leavesPerTick: 0.4
# Particles and sounds generated on chop, 'generateEffects' must be enabled.
# generateEffects = it makes the cutting action of the tree visible and audible to all.
# particlesQuantity = (default: 40)
# soundVolume = (default: 1.0) Distance of sound.
# soundPitch = (default: 2.0)
Effects:
generateEffects: true
particlesQuantity: 40
soundVolume: 1.0
soundPitch: 2.0
# Effects of each leaf breaking, independent from the chop ones above.
# generateEffects = sound and particles when a leaf is broken.
# particlesQuantity = (default: 10) 0 = none.
# soundVolume = (default: 0) Distance of sound, 0 = silent.
# soundPitch = (default: 1.0)
Leaves:
generateEffects: true
particlesQuantity: 10
soundVolume: 0.0
soundPitch: 1.0
# toInventory = items from felled logs go straight to the chopper's inventory (overflow drops at the player's feet).
Drops:
toInventory: false
# What happens after a tree is felled.
# sapling = replant a sapling on the base positions (where there is soil under), max 4.
# saplingChance = % chance per base position to replant (0-100).
Respawn:
sapling: false
saplingChance: 100
# New version check (Modrinth API, once at startup).
# check = look for a newer TreeChop version and notify the console.
# notifyOps = also notify operators when they join.
Updates:
check: true
notifyOps: true
```
\
\
**How do I make TreeChop chop the full tree with one swing?** Set in the config: \
```OnChop/treeCutting_Mode: 2``` ```OnChop/chopAllLogs: true``` ```Leaves/breakLeaves: true```
**For any problems or suggestions, write on [discord.](https://discord.gg/AcQxJXpxNJ)** \
\- Gustruy