64 Commits
Author SHA1 Message Date
d5db22c23e Entity radius purge (#1030)
* Fixed world purges leaving orphaned entity data

co_entity has no world column, so /co purge r:#world deleted the kill
rows in co_block but kept every co_entity row. Those blobs became
orphans that no later purge removed.

- SQLite: copy only the co_entity rows that a retained kill row still
  references. This also drops orphans left by earlier purges.
- MySQL/DuckDB: delete the co_entity rows of the kill rows a world purge
  removes, before co_block is purged. MySQL uses a join so MariaDB and
  MySQL 5.7 do not run a dependent subquery. Global purges keep the
  cheaper time-based delete, which is equivalent. If MySQL stops between
  the two deletes, running the same purge again removes the remaining
  kill rows.

Player kills use the kill action with type 0 and a user id in data, so
they are never treated as co_entity references.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PdEuKbjcVoVinVQJq4te1f

* Fixed SQLite purges with world and block filters purging other tables

On SQLite, /co purge r:#world i:<block> built the retain condition for
world-scoped tables without checking the block restriction, so it purged
co_container, co_chat and the other world-scoped tables in that world
although a block restriction should leave them untouched. The
entity_container/entity_interaction branch and the MySQL path already
check it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PdEuKbjcVoVinVQJq4te1f

* Fixed console purges with a radius purging all worlds

/co purge rejects a numeric radius, but the check only saw the radius
when the sender had a location. From the console, /co purge t:30d r:50
parsed no radius and no world, so it ran as a server-wide purge. The
radius is now also parsed against a placeholder location, so it is
rejected for every sender. r:#world is unaffected.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PdEuKbjcVoVinVQJq4te1f

* Added orphaned entity data cleanup to MySQL #optimize purges

MySQL deletes in place, so co_entity rows orphaned by earlier world
purges stay until something removes them. With #optimize, delete every
co_entity row that no kill row references, through a temporary table of
referenced ids (avoids an anti-join on the unindexed co_block.data), then
let OPTIMIZE reclaim the space. Failures are reported like the table
loop, so the entity_spawn link cleanup still runs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PdEuKbjcVoVinVQJq4te1f

* Moved purge conditions into PurgeFilter

PurgeFilter now builds the purge condition for every table, and the
SQLite copy, the SQLite recovery path and the MySQL/DuckDB delete all use
it instead of three hand-built copies. Behavior is unchanged; the block
restriction check that the previous commit added to the SQLite copy is
part of the shared condition.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PdEuKbjcVoVinVQJq4te1f

* Added entity kill filters to purge command

/co purge rejected entity types and actions, so mob farm kill logs could
only be removed together with all other data. New arguments on SQLite,
MySQL and DuckDB:

- a:kill purges only entity kill rows.
- i:<entity> purges kills of those entity types; it can be combined with
  block types.
- e:<entity> keeps kills of those entity types while purging the rest.

Each purged kill also removes its co_entity row. a:kill with block types,
entity types in both i: and e:, e: with only block types in i:,
non-entity exclusions and entity filters on ClickHouse are rejected. Any
a: value other than a kill alias is rejected instead of falling through
to an unrestricted purge.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PdEuKbjcVoVinVQJq4te1f

* Added radius support to purge command

/co purge rejected any numeric radius, so kills of one entity type could
only be purged across a whole world. A radius is now accepted when the
purge is restricted to co_block rows with i: or a:kill, for example
/co purge t:30d r:50 i:zombie. r:50x10 also limits the height.

The radius becomes an x/y/z range in the co_block condition. co_entity
rows follow the purged kill rows, so no entity data is orphaned, and the
(wid,x,z,time) index already covers the range. Other tables are left
untouched, as with any restricted purge.

Rejected: a radius without i: or a:kill, WorldEdit selections, radius
purges on ClickHouse, and a numeric radius from the console (it has no
location, as in the console radius fix merged into this branch).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PdEuKbjcVoVinVQJq4te1f

* Made MySQL entity data purges safe against concurrent writers

The #optimize orphan sweep snapshots the co_entity ids that kill rows
reference, then deletes every row missing from the snapshot. Another
installation sharing the database could commit a kill between the two
statements and lose its entity data. The sweep now only deletes rows
inside the purge time range. A kill always writes its co_entity row with
the current time, and a purge range ends at least 24 hours ago, so a
concurrent kill never matches.

A world purge deletes the entity data of the purged kills and
then the kill rows. On MySQL a failure or cancellation between the two
left kept kill rows without their rollback data. Both deletes now run in
one transaction.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Limited SQLite entity data cleanup to the purge time range

A SQLite purge dropped every co_entity row no kill referenced, including
rows newer than the purge range, and counted them as deleted. It now only
removes unreferenced rows inside the range, like the MySQL #optimize sweep.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Rejected purge include and exclude lists without a value

/co purge t:30d e: passed validation, parsed to no exclusions, and ran
as an unrestricted time purge. e:, and e:,,, did the same, as did an
e: at the end of the command and an empty i:. The argument check now
follows each include or exclude list across its continuation tokens and
rejects a list that ends without a value. Space-separated lists such as
e:zombie, villager still work.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Matched purge entity filters to kills logged under renamed types

Bukkit resolves a legacy name such as zombie_pigman to the renamed type,
so the filter only matched the id of the new name. e:zombie_pigman then
purged the old kills it was meant to keep, and i:zombie_pigman missed
them. The filter now covers every entity map id that resolves to the type.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Rejected purges with more than one radius argument

/co purge t:30d r:50 r:#world_nether i:zombie ignored the explicit world
and purged around the player in their current world. Two r: arguments
always conflict, so the second one is now rejected before the purge
starts, whether it is a world, #global or another radius.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Applied max-radius to radius purges

A radius purge accepted any value. A radius past the int range saturated,
the area overflowed, and the purge reported success with nothing deleted.
It now stops at max-radius like lookups and rollbacks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Checked radius arguments inside purge include and exclude lists

/co purge t:30d i:zombie, r:50 r:#world_nether passed the second-radius
check: the validator took r:50 as a value of the include list, then saw
r:#world_nether as the only radius. The radius and world parsers read
both. A list now continues only with plain or minecraft: namespaced
values, so a radius after a trailing comma is counted and the second one
is rejected. This is the same change as 39deec3 on entity-kill-purge-filters.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LFQuzYmYun57wJi2a5mqkM

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: TonyJamesStark <tonyjamesstark1@gmail.com>
2026-10-05 17:46:22 -06:00
Intelli 3e04b389f2 Updated en.yml 2026-09-09 19:11:56 -06:00
Intelli d93827f184 Added exclusion support to lookup filters 2026-09-09 18:40:49 -06:00
Intelli 8f6de4d2af Updated en.yml 2026-09-09 15:16:14 -06:00
Intelli 6731831283 Added columnar storage options 2026-07-16 14:11:40 -06:00
purpurcofandIntelli 130bb803e3 Update and polish Russian localization (#929)
* i18n(ru): update and polish Russian localization

* i18n(ru): fix typography and restore standard hyphens

* Reorder lookup header in Russian translations

---------

Co-authored-by: Intelli <6790859+Intelli@users.noreply.github.com>
2026-07-12 22:48:32 -06:00
Intelli ec699a5a34 Stop bundling OSHI 2026-07-02 16:05:25 -06:00
Intelli 15aaaf8051 Harden v24 patch script 2026-05-30 14:43:09 -06:00
Intelli 6994ec2ac4 Bump supported MC version to 26.1.2 2026-05-19 17:12:14 -06:00
Intelli 3be769ed96 Added Tatar language file 2026-05-06 13:09:18 -06:00
Intelli 7caa617a34 Added argument validation to purge command (fixes #848) 2026-04-23 15:10:06 -06:00
Intelli 251b4c56cd Fixed NoSuchFieldError in MC 1.20.5 and earlier 2025-10-02 11:22:59 -06:00
Artem Dmitriev d30f6cf8d5 Update ru.yml (#798)
"Выберете" instead of "Выберите"
2025-09-12 18:04:05 -06:00
JoMiNovi 813fee1017 Update de.yml (#609)
* Update de.yml

First version of the Update.

* Update de.yml again

* Adding a comma

* Added missing translations of en.yml to de.yml
2025-09-09 10:32:04 -06:00
Sihu HwangandIntelli 3b58f69263 Update Korean Translation and some English strings (#620)
* Translation update

* Update en.yml

* Update ko.yml

---------

Co-authored-by: Intelli <6790859+Intelli@users.noreply.github.com>
2025-09-09 10:30:53 -06:00
Tomasz CzajkowskiandIntelli 3158fe5268 Update Polish Translation (#626)
* Update Polish Translation

- Changed a bunch of translations to be as natural as possible
- Made translations more consistent
- Changed special quotation mark to normal escaped quotation marks, to be consistent with the English translations
- Added missing translations

* Update pl.yml

fixed translation for entities in 2 places

* Added missing translation keys and better time-frames

In addition to new translation keys, I added an "optional" suffix to time-frames, for cases when numbers are between 2 and 4 (inclusive). Unfortunately couldn't make it pretty for months, since more of the word changes ("miesiące" vs "miesięcy"), not just the suffix, so I opted to just leave the word translation for the cases of 5+

---------

Co-authored-by: Intelli <6790859+Intelli@users.noreply.github.com>
2025-09-09 10:27:26 -06:00
Artem Dmitriev 150bd4b0ce Improve Russian translation (#793)
Fixed typos, logically improved messages, removed an extra period
2025-09-09 10:23:25 -06:00
ShotadftandIntelli 5ee33c7790 Fix Japanese Translation (#784)
* Fix Japanese Translation

* Update Japanese Translation

---------

Co-authored-by: Intelli <6790859+Intelli@users.noreply.github.com>
2025-09-09 10:22:57 -06:00
Intelli d49a8bee73 Add default TIME_UNITS to all language files 2025-09-09 10:16:47 -06:00
HaloglyandIntelli abb0ece3e5 Optimize Chinese Localization, Add Time Units, and Fix Italic Bug (#796)
* add time unit to language file

* Fixed a bug where the font following a blocktype name was incorrectly rendered in italics.

* Collected time unit abbreviations

* Update pom.xml

---------

Co-authored-by: Intelli <6790859+Intelli@users.noreply.github.com>
2025-09-09 10:13:41 -06:00
Intelli 6cdc139772 Fixed SQLiteException when performing purges 2025-03-20 13:21:43 -06:00
Shotadft(承太劇場)andIntelli 25cef3e5c5 Change to Japanese (#660)
* Update ja.yml

* Update ja.yml

* Update ja.yml

---------

Co-authored-by: Intelli <6790859+Intelli@users.noreply.github.com>
2024-10-28 17:57:32 -06:00
Intelli de978fce2c Added base changes for database migration command (unfinished) 2024-09-29 18:35:37 -06:00
DarkSnakeX fc0c8ff9ac Update es.yml (#633)
Added new lines that were not covered on the old translation file.
2024-09-03 12:55:47 -06:00
Wang Siu Kao cff6be6d90 Update Traditional Chinese translation (#618) 2024-08-19 16:17:23 -06:00
Intelli fda87e2f6a Updated language file 2024-07-24 14:27:49 -06:00
ac0792b9ef Update de.yml (#518)
* Update de.yml

some changes for the lang file

* Improve /co help inspect translations

Co-authored-by: Daniel Scherf <35780068+dlsf@users.noreply.github.com>

* Formatting fixes

Co-authored-by: Daniel Scherf <35780068+dlsf@users.noreply.github.com>

* Update lang/de.yml

Co-authored-by: Daniel Scherf <35780068+dlsf@users.noreply.github.com>

* Update lang/de.yml

Co-authored-by: Daniel Scherf <35780068+dlsf@users.noreply.github.com>

---------

Co-authored-by: Intelli <6790859+Intelli@users.noreply.github.com>
Co-authored-by: Daniel Scherf <35780068+dlsf@users.noreply.github.com>
2024-07-23 13:05:05 -06:00
Intelli dbd8723752 Added CPU & RAM information to /co status 2024-07-09 18:02:49 -06:00
jd07159 63074715d3 Improve Korean translation (#566) 2024-07-08 13:32:41 -06:00
Intelli 24a09b49d2 Added base Korean translation file 2024-07-08 11:42:08 -06:00
ianiiaannn 4cce566e37 Update Traditional Chinese translation (#392)
* Update Phrase to make strings correctly split by fullwidth colons (U+FF1A)

* Fix Traditional Chinese translation

* Replace U+FF1A with `: `
2023-07-19 14:35:25 -06:00
Intelli de3c326203 Corrected Spanish translation 2023-01-12 12:51:42 -07:00
Intelli 4b056d9474 Added default Turkish language file 2022-04-19 20:00:53 -06:00
Intelli 1cca7bc573 Updated de.yml (fixes #203) 2022-04-13 19:41:18 -06:00
流光溢彩Last 1974838f74 Update v21.0 Simplified Chinese translation. (#182)
* Update v21.0 Simplified Chinese translation.

* 完善翻译
2022-03-23 19:08:47 -06:00
vaclaandIntelli 8cdf99429d Added Networking API (#180)
* sent data to client

* send more data + debug + add docs + switch to handshake

* add diff between container and normal changes

* fix docs

* changes according guidelines

* make requested changes + cleanup

* correct documentation

* Improved Networking API documentation

* Moved networking API channel registration out of main class

* Cleanup

* Removed debug on chat/command lookups

* Optimized array merging

* Fixed ClassCastException when running console commands

* Skip preparing networking data if not a channel player

* Renamed "networking-debug" to "network-debug"

* Fixed failed handshake still registering players

* Adjusted networking phrases

* Renamed pluginchannel to channel

Co-authored-by: Intelli <contact@intelli.software>
2022-03-23 18:49:46 -06:00
Intelli 85ebd53e5f Minor Spanish tweaks 2022-03-21 18:48:40 -06:00
KrazyxWolfandIntelli 209c63b009 Improved Spanish translation (#179)
* Not too literal spanish

* Fixes and adjustments

* Fix

* Minor fixes

Co-authored-by: Intelli <6790859+Intelli@users.noreply.github.com>
2022-03-21 18:21:08 -06:00
Intelli 40ee11f644 CoreProtect v21.0 release 2022-03-08 08:39:38 -07:00
Intelli 3774e6748d Improved Spanish translation (implements #161) 2022-02-27 15:59:04 -07:00
Intelli 204d6c8d5f Added base Japanese language file 2021-12-20 15:24:49 -07:00
Intelli c1a4323ce4 Added base Ukrainian language file (#119) 2021-12-16 15:10:34 -07:00
Ghost_chu 39cd888440 Fixed sign message phrase in zh-cn.yml (#63)
It shouldn't translate to `Signature Message`, this commit fixed it to `Sign Message`
2021-08-03 13:07:25 -06:00
Intelli 5e3a19f208 Added base Vietnamese language file 2021-07-27 18:45:52 -06:00
Intelli ac1726a1a5 Added base Polish language file 2021-07-27 13:20:29 -06:00
a7eb6a48c9 Fix Traditional Chinese translation (#54)
* Fix Traditional Chinese translation 

Fixed some wrong usages and punctuations.

* Update zh-tw.yml

* Apply suggestions from code review

Co-authored-by: KID <jyhsu2000@yahoo.com.tw>

* Reverted colon punctuation marks to english characters

* Fixed spacing in zh-tw.yml

Co-authored-by: Intelli <6790859+Intelli@users.noreply.github.com>
Co-authored-by: KID <jyhsu2000@yahoo.com.tw>
2021-07-26 14:32:02 -06:00
div2005andIntelli 5d6388fff7 Improved Russian translation (#55)
* Update ru.yml

* Fixed ru.yml regressions

Co-authored-by: Intelli <6790859+Intelli@users.noreply.github.com>
2021-07-25 17:17:57 -06:00
流光溢彩 72bcadea55 Update Simplified Chinese Translation (#49)
* Update Simplified Chinese Translation

Changes:
- Replace all "." char to "。"
- Modify some strings to conform to Chinese usage habits

* Add spaces and units where necessary

* Replace all "您" chat to "你"

* Change "PREVIEW_CONTAINER" translation
2021-07-20 13:10:51 -06:00
Andrew 1d828e3b68 Improved ru translation (#51) 2021-07-19 13:59:28 -06:00
YuanYuanOwO c71ea224a4 Fix Simplified Chinese translation (#48)
* Fix Simplified Chinese translation

* Update zh-cn.yml
2021-07-17 18:25:28 -06:00