fix: cap donated block counts to current block limits in level calculation - #443

Merged
tastybento merged 2 commits into
developfrom
copilot/fix-donate-blocks-counting
May 20, 2026
Merged

fix: cap donated block counts to current block limits in level calculation#443
tastybento merged 2 commits into
developfrom
copilot/fix-donate-blocks-counting

Conversation

CopilotAI commented May 20, 2026

Copy link
Copy Markdown
Contributor

When a block's donation limit is lowered after players have already donated above the new threshold, the excess blocks continue counting toward island level. The donated count was never validated against the current limit at calculation time.

Changes

  • IslandLevelCalculator.tidyUp(): When computing donated points, look up the current block limit for each donated block type and apply Math.min(donatedCount, limit) before multiplying by value. This mirrors the existing limitCountAndValue() enforcement applied to on-island blocks during chunk scanning.
// Before — no limit applied to donated countreturn (long) Objects.requireNonNullElse(value, 0) * entry.getValue();
// After — donated count capped to current limitintcount = entry.getValue();
Integerlimit = addon.getBlockConfig().getLimit(key);
if (limit != null) {
count = Math.min(count, limit);
}
return (long) Objects.requireNonNullElse(value, 0) * count;
  • IslandLevelCalculatorTidyUpTest: Three new tests covering donated-under-limit (full count used), donated-over-limit (capped to current limit), and no limit configured (full count used).

Note: This change is retrospective — existing servers where limits were previously uncapped will see a level reduction on next recalculation for affected islands.

…lculation
When a block limit is lowered after players have already donated blocks, the
donated count is now capped to the current limit in IslandLevelCalculator.tidyUp().
This ensures excess donated blocks no longer contribute points beyond the limit.
Adds three new tests to IslandLevelCalculatorTidyUpTest covering:
- donated count under limit (full count used)
- donated count over limit (capped to current limit)
- donated count with no limit (full count used)
Agent-Logs-Url: https://github.com/BentoBoxWorld/Level/sessions/3c49eef0-18f1-4340-bdd3-2afd5ce36286
Co-authored-by: tastybento <4407265+tastybento@users.noreply.github.com>
CopilotAI changed the title [WIP] Fix donate blocks counting when limit is changedfix: cap donated block counts to current block limits in level calculationMay 20, 2026
CopilotAI requested a review from tastybentoMay 20, 2026 21:49
@tastybento
tastybento marked this pull request as ready for review May 20, 2026 21:50
@sonarqubecloud

Copy link
Copy Markdown

@tastybento
tastybento merged commit 0548a0a into developMay 20, 2026
3 checks passed
@tastybento
tastybento deleted the copilot/fix-donate-blocks-counting branch May 20, 2026 21:53
tastybento added a commit that referenced this pull request Jul 16, 2026
The lazy-zero / per-chunk handicap / parallel chunk scan work merged via
PRs #435 and #440 (plus follow-up fixes) is not production-ready: admins
running CI snapshot builds saw established island levels reset and
recalculations that only counted newly placed blocks (#448).
That work now continues on the feat/per-chunk-zeroing branch. This
commit restores the stable 2.27.0 calculation engine on develop while
keeping everything safe that landed since 2.27.0:
- Donation fixes: recalc donated points from donatedBlocks (#438),
enforce blockconfig donation limits in GUI/prompts (#439), cap
donated counts to current block limits (#443)
- MockBukkit pinned to Maven Central 4.110.0
- Modrinth MC 26.1.2 game version (#444)
- CI publish workflow changes (#445, #446, #447)
- Version stays 2.28.0-SNAPSHOT
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y6f59pxCkwS8QXtJSe1nq6
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

If donate blocks are more then limit they still counts

2 participants

@tastybento
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

fix: cap donated block counts to current block limits in level calculation - #443

Merged
tastybento merged 2 commits into
developfrom
copilot/fix-donate-blocks-counting
May 20, 2026
Merged

fix: cap donated block counts to current block limits in level calculation#443
tastybento merged 2 commits into
developfrom
copilot/fix-donate-blocks-counting

Conversation

CopilotAI commented May 20, 2026

Copy link
Copy Markdown
Contributor

When a block's donation limit is lowered after players have already donated above the new threshold, the excess blocks continue counting toward island level. The donated count was never validated against the current limit at calculation time.

Changes

  • IslandLevelCalculator.tidyUp(): When computing donated points, look up the current block limit for each donated block type and apply Math.min(donatedCount, limit) before multiplying by value. This mirrors the existing limitCountAndValue() enforcement applied to on-island blocks during chunk scanning.
// Before — no limit applied to donated countreturn (long) Objects.requireNonNullElse(value, 0) * entry.getValue();
// After — donated count capped to current limitintcount = entry.getValue();
Integerlimit = addon.getBlockConfig().getLimit(key);
if (limit != null) {
count = Math.min(count, limit);
}
return (long) Objects.requireNonNullElse(value, 0) * count;
  • IslandLevelCalculatorTidyUpTest: Three new tests covering donated-under-limit (full count used), donated-over-limit (capped to current limit), and no limit configured (full count used).

Note: This change is retrospective — existing servers where limits were previously uncapped will see a level reduction on next recalculation for affected islands.

…lculation
When a block limit is lowered after players have already donated blocks, the
donated count is now capped to the current limit in IslandLevelCalculator.tidyUp().
This ensures excess donated blocks no longer contribute points beyond the limit.
Adds three new tests to IslandLevelCalculatorTidyUpTest covering:
- donated count under limit (full count used)
- donated count over limit (capped to current limit)
- donated count with no limit (full count used)
Agent-Logs-Url: https://github.com/BentoBoxWorld/Level/sessions/3c49eef0-18f1-4340-bdd3-2afd5ce36286
Co-authored-by: tastybento <4407265+tastybento@users.noreply.github.com>
CopilotAI changed the title [WIP] Fix donate blocks counting when limit is changedfix: cap donated block counts to current block limits in level calculationMay 20, 2026
CopilotAI requested a review from tastybentoMay 20, 2026 21:49
@tastybento
tastybento marked this pull request as ready for review May 20, 2026 21:50
@sonarqubecloud

Copy link
Copy Markdown

@tastybento
tastybento merged commit 0548a0a into developMay 20, 2026
3 checks passed
@tastybento
tastybento deleted the copilot/fix-donate-blocks-counting branch May 20, 2026 21:53
tastybento added a commit that referenced this pull request Jul 16, 2026
The lazy-zero / per-chunk handicap / parallel chunk scan work merged via
PRs #435 and #440 (plus follow-up fixes) is not production-ready: admins
running CI snapshot builds saw established island levels reset and
recalculations that only counted newly placed blocks (#448).
That work now continues on the feat/per-chunk-zeroing branch. This
commit restores the stable 2.27.0 calculation engine on develop while
keeping everything safe that landed since 2.27.0:
- Donation fixes: recalc donated points from donatedBlocks (#438),
enforce blockconfig donation limits in GUI/prompts (#439), cap
donated counts to current block limits (#443)
- MockBukkit pinned to Maven Central 4.110.0
- Modrinth MC 26.1.2 game version (#444)
- CI publish workflow changes (#445, #446, #447)
- Version stays 2.28.0-SNAPSHOT
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y6f59pxCkwS8QXtJSe1nq6
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

If donate blocks are more then limit they still counts

2 participants

@tastybento
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix: cap donated block counts to current block limits in level calculation - #443

Merged
tastybento merged 2 commits into
developfrom
copilot/fix-donate-blocks-counting
May 20, 2026
Merged

fix: cap donated block counts to current block limits in level calculation#443
tastybento merged 2 commits into
developfrom
copilot/fix-donate-blocks-counting

Conversation

CopilotAI commented May 20, 2026

Copy link
Copy Markdown
Contributor

When a block's donation limit is lowered after players have already donated above the new threshold, the excess blocks continue counting toward island level. The donated count was never validated against the current limit at calculation time.

Changes

  • IslandLevelCalculator.tidyUp(): When computing donated points, look up the current block limit for each donated block type and apply Math.min(donatedCount, limit) before multiplying by value. This mirrors the existing limitCountAndValue() enforcement applied to on-island blocks during chunk scanning.
// Before — no limit applied to donated countreturn (long) Objects.requireNonNullElse(value, 0) * entry.getValue();
// After — donated count capped to current limitintcount = entry.getValue();
Integerlimit = addon.getBlockConfig().getLimit(key);
if (limit != null) {
count = Math.min(count, limit);
}
return (long) Objects.requireNonNullElse(value, 0) * count;
  • IslandLevelCalculatorTidyUpTest: Three new tests covering donated-under-limit (full count used), donated-over-limit (capped to current limit), and no limit configured (full count used).

Note: This change is retrospective — existing servers where limits were previously uncapped will see a level reduction on next recalculation for affected islands.

…lculation
When a block limit is lowered after players have already donated blocks, the
donated count is now capped to the current limit in IslandLevelCalculator.tidyUp().
This ensures excess donated blocks no longer contribute points beyond the limit.
Adds three new tests to IslandLevelCalculatorTidyUpTest covering:
- donated count under limit (full count used)
- donated count over limit (capped to current limit)
- donated count with no limit (full count used)
Agent-Logs-Url: https://github.com/BentoBoxWorld/Level/sessions/3c49eef0-18f1-4340-bdd3-2afd5ce36286
Co-authored-by: tastybento <4407265+tastybento@users.noreply.github.com>
CopilotAI changed the title [WIP] Fix donate blocks counting when limit is changedfix: cap donated block counts to current block limits in level calculationMay 20, 2026
CopilotAI requested a review from tastybentoMay 20, 2026 21:49
@tastybento
tastybento marked this pull request as ready for review May 20, 2026 21:50
@sonarqubecloud

Copy link
Copy Markdown

@tastybento
tastybento merged commit 0548a0a into developMay 20, 2026
3 checks passed
@tastybento
tastybento deleted the copilot/fix-donate-blocks-counting branch May 20, 2026 21:53
tastybento added a commit that referenced this pull request Jul 16, 2026
The lazy-zero / per-chunk handicap / parallel chunk scan work merged via
PRs #435 and #440 (plus follow-up fixes) is not production-ready: admins
running CI snapshot builds saw established island levels reset and
recalculations that only counted newly placed blocks (#448).
That work now continues on the feat/per-chunk-zeroing branch. This
commit restores the stable 2.27.0 calculation engine on develop while
keeping everything safe that landed since 2.27.0:
- Donation fixes: recalc donated points from donatedBlocks (#438),
enforce blockconfig donation limits in GUI/prompts (#439), cap
donated counts to current block limits (#443)
- MockBukkit pinned to Maven Central 4.110.0
- Modrinth MC 26.1.2 game version (#444)
- CI publish workflow changes (#445, #446, #447)
- Version stays 2.28.0-SNAPSHOT
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y6f59pxCkwS8QXtJSe1nq6
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

If donate blocks are more then limit they still counts

2 participants

@tastybento
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix: cap donated block counts to current block limits in level calculation - #443

Merged
tastybento merged 2 commits into
developfrom
copilot/fix-donate-blocks-counting
May 20, 2026
Merged

fix: cap donated block counts to current block limits in level calculation#443
tastybento merged 2 commits into
developfrom
copilot/fix-donate-blocks-counting

Conversation

CopilotAI commented May 20, 2026

Copy link
Copy Markdown
Contributor

When a block's donation limit is lowered after players have already donated above the new threshold, the excess blocks continue counting toward island level. The donated count was never validated against the current limit at calculation time.

Changes

  • IslandLevelCalculator.tidyUp(): When computing donated points, look up the current block limit for each donated block type and apply Math.min(donatedCount, limit) before multiplying by value. This mirrors the existing limitCountAndValue() enforcement applied to on-island blocks during chunk scanning.
// Before — no limit applied to donated countreturn (long) Objects.requireNonNullElse(value, 0) * entry.getValue();
// After — donated count capped to current limitintcount = entry.getValue();
Integerlimit = addon.getBlockConfig().getLimit(key);
if (limit != null) {
count = Math.min(count, limit);
}
return (long) Objects.requireNonNullElse(value, 0) * count;
  • IslandLevelCalculatorTidyUpTest: Three new tests covering donated-under-limit (full count used), donated-over-limit (capped to current limit), and no limit configured (full count used).

Note: This change is retrospective — existing servers where limits were previously uncapped will see a level reduction on next recalculation for affected islands.

…lculation
When a block limit is lowered after players have already donated blocks, the
donated count is now capped to the current limit in IslandLevelCalculator.tidyUp().
This ensures excess donated blocks no longer contribute points beyond the limit.
Adds three new tests to IslandLevelCalculatorTidyUpTest covering:
- donated count under limit (full count used)
- donated count over limit (capped to current limit)
- donated count with no limit (full count used)
Agent-Logs-Url: https://github.com/BentoBoxWorld/Level/sessions/3c49eef0-18f1-4340-bdd3-2afd5ce36286
Co-authored-by: tastybento <4407265+tastybento@users.noreply.github.com>
CopilotAI changed the title [WIP] Fix donate blocks counting when limit is changedfix: cap donated block counts to current block limits in level calculationMay 20, 2026
CopilotAI requested a review from tastybentoMay 20, 2026 21:49
@tastybento
tastybento marked this pull request as ready for review May 20, 2026 21:50
@sonarqubecloud

Copy link
Copy Markdown

@tastybento
tastybento merged commit 0548a0a into developMay 20, 2026
3 checks passed
@tastybento
tastybento deleted the copilot/fix-donate-blocks-counting branch May 20, 2026 21:53
tastybento added a commit that referenced this pull request Jul 16, 2026
The lazy-zero / per-chunk handicap / parallel chunk scan work merged via
PRs #435 and #440 (plus follow-up fixes) is not production-ready: admins
running CI snapshot builds saw established island levels reset and
recalculations that only counted newly placed blocks (#448).
That work now continues on the feat/per-chunk-zeroing branch. This
commit restores the stable 2.27.0 calculation engine on develop while
keeping everything safe that landed since 2.27.0:
- Donation fixes: recalc donated points from donatedBlocks (#438),
enforce blockconfig donation limits in GUI/prompts (#439), cap
donated counts to current block limits (#443)
- MockBukkit pinned to Maven Central 4.110.0
- Modrinth MC 26.1.2 game version (#444)
- CI publish workflow changes (#445, #446, #447)
- Version stays 2.28.0-SNAPSHOT
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y6f59pxCkwS8QXtJSe1nq6
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

If donate blocks are more then limit they still counts

2 participants

@tastybento
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

fix: cap donated block counts to current block limits in level calculation - #443

Merged
tastybento merged 2 commits into
developfrom
copilot/fix-donate-blocks-counting
May 20, 2026
Merged

fix: cap donated block counts to current block limits in level calculation#443
tastybento merged 2 commits into
developfrom
copilot/fix-donate-blocks-counting

Conversation

CopilotAI commented May 20, 2026

Copy link
Copy Markdown
Contributor

When a block's donation limit is lowered after players have already donated above the new threshold, the excess blocks continue counting toward island level. The donated count was never validated against the current limit at calculation time.

Changes

  • IslandLevelCalculator.tidyUp(): When computing donated points, look up the current block limit for each donated block type and apply Math.min(donatedCount, limit) before multiplying by value. This mirrors the existing limitCountAndValue() enforcement applied to on-island blocks during chunk scanning.
// Before — no limit applied to donated countreturn (long) Objects.requireNonNullElse(value, 0) * entry.getValue();
// After — donated count capped to current limitintcount = entry.getValue();
Integerlimit = addon.getBlockConfig().getLimit(key);
if (limit != null) {
count = Math.min(count, limit);
}
return (long) Objects.requireNonNullElse(value, 0) * count;
  • IslandLevelCalculatorTidyUpTest: Three new tests covering donated-under-limit (full count used), donated-over-limit (capped to current limit), and no limit configured (full count used).

Note: This change is retrospective — existing servers where limits were previously uncapped will see a level reduction on next recalculation for affected islands.

…lculation
When a block limit is lowered after players have already donated blocks, the
donated count is now capped to the current limit in IslandLevelCalculator.tidyUp().
This ensures excess donated blocks no longer contribute points beyond the limit.
Adds three new tests to IslandLevelCalculatorTidyUpTest covering:
- donated count under limit (full count used)
- donated count over limit (capped to current limit)
- donated count with no limit (full count used)
Agent-Logs-Url: https://github.com/BentoBoxWorld/Level/sessions/3c49eef0-18f1-4340-bdd3-2afd5ce36286
Co-authored-by: tastybento <4407265+tastybento@users.noreply.github.com>
CopilotAI changed the title [WIP] Fix donate blocks counting when limit is changedfix: cap donated block counts to current block limits in level calculationMay 20, 2026
CopilotAI requested a review from tastybentoMay 20, 2026 21:49
@tastybento
tastybento marked this pull request as ready for review May 20, 2026 21:50
@sonarqubecloud

Copy link
Copy Markdown

@tastybento
tastybento merged commit 0548a0a into developMay 20, 2026
3 checks passed
@tastybento
tastybento deleted the copilot/fix-donate-blocks-counting branch May 20, 2026 21:53
tastybento added a commit that referenced this pull request Jul 16, 2026
The lazy-zero / per-chunk handicap / parallel chunk scan work merged via
PRs #435 and #440 (plus follow-up fixes) is not production-ready: admins
running CI snapshot builds saw established island levels reset and
recalculations that only counted newly placed blocks (#448).
That work now continues on the feat/per-chunk-zeroing branch. This
commit restores the stable 2.27.0 calculation engine on develop while
keeping everything safe that landed since 2.27.0:
- Donation fixes: recalc donated points from donatedBlocks (#438),
enforce blockconfig donation limits in GUI/prompts (#439), cap
donated counts to current block limits (#443)
- MockBukkit pinned to Maven Central 4.110.0
- Modrinth MC 26.1.2 game version (#444)
- CI publish workflow changes (#445, #446, #447)
- Version stays 2.28.0-SNAPSHOT
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y6f59pxCkwS8QXtJSe1nq6
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

If donate blocks are more then limit they still counts

2 participants

@tastybento
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix: cap donated block counts to current block limits in level calculation - #443

Merged
tastybento merged 2 commits into
developfrom
copilot/fix-donate-blocks-counting
May 20, 2026
Merged

fix: cap donated block counts to current block limits in level calculation#443
tastybento merged 2 commits into
developfrom
copilot/fix-donate-blocks-counting

Conversation

CopilotAI commented May 20, 2026

Copy link
Copy Markdown
Contributor

When a block's donation limit is lowered after players have already donated above the new threshold, the excess blocks continue counting toward island level. The donated count was never validated against the current limit at calculation time.

Changes

  • IslandLevelCalculator.tidyUp(): When computing donated points, look up the current block limit for each donated block type and apply Math.min(donatedCount, limit) before multiplying by value. This mirrors the existing limitCountAndValue() enforcement applied to on-island blocks during chunk scanning.
// Before — no limit applied to donated countreturn (long) Objects.requireNonNullElse(value, 0) * entry.getValue();
// After — donated count capped to current limitintcount = entry.getValue();
Integerlimit = addon.getBlockConfig().getLimit(key);
if (limit != null) {
count = Math.min(count, limit);
}
return (long) Objects.requireNonNullElse(value, 0) * count;
  • IslandLevelCalculatorTidyUpTest: Three new tests covering donated-under-limit (full count used), donated-over-limit (capped to current limit), and no limit configured (full count used).

Note: This change is retrospective — existing servers where limits were previously uncapped will see a level reduction on next recalculation for affected islands.

…lculation
When a block limit is lowered after players have already donated blocks, the
donated count is now capped to the current limit in IslandLevelCalculator.tidyUp().
This ensures excess donated blocks no longer contribute points beyond the limit.
Adds three new tests to IslandLevelCalculatorTidyUpTest covering:
- donated count under limit (full count used)
- donated count over limit (capped to current limit)
- donated count with no limit (full count used)
Agent-Logs-Url: https://github.com/BentoBoxWorld/Level/sessions/3c49eef0-18f1-4340-bdd3-2afd5ce36286
Co-authored-by: tastybento <4407265+tastybento@users.noreply.github.com>
CopilotAI changed the title [WIP] Fix donate blocks counting when limit is changedfix: cap donated block counts to current block limits in level calculationMay 20, 2026
CopilotAI requested a review from tastybentoMay 20, 2026 21:49
@tastybento
tastybento marked this pull request as ready for review May 20, 2026 21:50
@sonarqubecloud

Copy link
Copy Markdown

@tastybento
tastybento merged commit 0548a0a into developMay 20, 2026
3 checks passed
@tastybento
tastybento deleted the copilot/fix-donate-blocks-counting branch May 20, 2026 21:53
tastybento added a commit that referenced this pull request Jul 16, 2026
The lazy-zero / per-chunk handicap / parallel chunk scan work merged via
PRs #435 and #440 (plus follow-up fixes) is not production-ready: admins
running CI snapshot builds saw established island levels reset and
recalculations that only counted newly placed blocks (#448).
That work now continues on the feat/per-chunk-zeroing branch. This
commit restores the stable 2.27.0 calculation engine on develop while
keeping everything safe that landed since 2.27.0:
- Donation fixes: recalc donated points from donatedBlocks (#438),
enforce blockconfig donation limits in GUI/prompts (#439), cap
donated counts to current block limits (#443)
- MockBukkit pinned to Maven Central 4.110.0
- Modrinth MC 26.1.2 game version (#444)
- CI publish workflow changes (#445, #446, #447)
- Version stays 2.28.0-SNAPSHOT
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y6f59pxCkwS8QXtJSe1nq6
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

If donate blocks are more then limit they still counts

2 participants

@tastybento
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix: cap donated block counts to current block limits in level calculation - #443

Merged
tastybento merged 2 commits into
developfrom
copilot/fix-donate-blocks-counting
May 20, 2026
Merged

fix: cap donated block counts to current block limits in level calculation#443
tastybento merged 2 commits into
developfrom
copilot/fix-donate-blocks-counting

Conversation

CopilotAI commented May 20, 2026

Copy link
Copy Markdown
Contributor

When a block's donation limit is lowered after players have already donated above the new threshold, the excess blocks continue counting toward island level. The donated count was never validated against the current limit at calculation time.

Changes

  • IslandLevelCalculator.tidyUp(): When computing donated points, look up the current block limit for each donated block type and apply Math.min(donatedCount, limit) before multiplying by value. This mirrors the existing limitCountAndValue() enforcement applied to on-island blocks during chunk scanning.
// Before — no limit applied to donated countreturn (long) Objects.requireNonNullElse(value, 0) * entry.getValue();
// After — donated count capped to current limitintcount = entry.getValue();
Integerlimit = addon.getBlockConfig().getLimit(key);
if (limit != null) {
count = Math.min(count, limit);
}
return (long) Objects.requireNonNullElse(value, 0) * count;
  • IslandLevelCalculatorTidyUpTest: Three new tests covering donated-under-limit (full count used), donated-over-limit (capped to current limit), and no limit configured (full count used).

Note: This change is retrospective — existing servers where limits were previously uncapped will see a level reduction on next recalculation for affected islands.

…lculation
When a block limit is lowered after players have already donated blocks, the
donated count is now capped to the current limit in IslandLevelCalculator.tidyUp().
This ensures excess donated blocks no longer contribute points beyond the limit.
Adds three new tests to IslandLevelCalculatorTidyUpTest covering:
- donated count under limit (full count used)
- donated count over limit (capped to current limit)
- donated count with no limit (full count used)
Agent-Logs-Url: https://github.com/BentoBoxWorld/Level/sessions/3c49eef0-18f1-4340-bdd3-2afd5ce36286
Co-authored-by: tastybento <4407265+tastybento@users.noreply.github.com>
CopilotAI changed the title [WIP] Fix donate blocks counting when limit is changedfix: cap donated block counts to current block limits in level calculationMay 20, 2026
CopilotAI requested a review from tastybentoMay 20, 2026 21:49
@tastybento
tastybento marked this pull request as ready for review May 20, 2026 21:50
@sonarqubecloud

Copy link
Copy Markdown

@tastybento
tastybento merged commit 0548a0a into developMay 20, 2026
3 checks passed
@tastybento
tastybento deleted the copilot/fix-donate-blocks-counting branch May 20, 2026 21:53
tastybento added a commit that referenced this pull request Jul 16, 2026
The lazy-zero / per-chunk handicap / parallel chunk scan work merged via
PRs #435 and #440 (plus follow-up fixes) is not production-ready: admins
running CI snapshot builds saw established island levels reset and
recalculations that only counted newly placed blocks (#448).
That work now continues on the feat/per-chunk-zeroing branch. This
commit restores the stable 2.27.0 calculation engine on develop while
keeping everything safe that landed since 2.27.0:
- Donation fixes: recalc donated points from donatedBlocks (#438),
enforce blockconfig donation limits in GUI/prompts (#439), cap
donated counts to current block limits (#443)
- MockBukkit pinned to Maven Central 4.110.0
- Modrinth MC 26.1.2 game version (#444)
- CI publish workflow changes (#445, #446, #447)
- Version stays 2.28.0-SNAPSHOT
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y6f59pxCkwS8QXtJSe1nq6
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

If donate blocks are more then limit they still counts

2 participants

@tastybento
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

fix: cap donated block counts to current block limits in level calculation - #443

Merged
tastybento merged 2 commits into
developfrom
copilot/fix-donate-blocks-counting
May 20, 2026
Merged

fix: cap donated block counts to current block limits in level calculation#443
tastybento merged 2 commits into
developfrom
copilot/fix-donate-blocks-counting

Conversation

CopilotAI commented May 20, 2026

Copy link
Copy Markdown
Contributor

When a block's donation limit is lowered after players have already donated above the new threshold, the excess blocks continue counting toward island level. The donated count was never validated against the current limit at calculation time.

Changes

  • IslandLevelCalculator.tidyUp(): When computing donated points, look up the current block limit for each donated block type and apply Math.min(donatedCount, limit) before multiplying by value. This mirrors the existing limitCountAndValue() enforcement applied to on-island blocks during chunk scanning.
// Before — no limit applied to donated countreturn (long) Objects.requireNonNullElse(value, 0) * entry.getValue();
// After — donated count capped to current limitintcount = entry.getValue();
Integerlimit = addon.getBlockConfig().getLimit(key);
if (limit != null) {
count = Math.min(count, limit);
}
return (long) Objects.requireNonNullElse(value, 0) * count;
  • IslandLevelCalculatorTidyUpTest: Three new tests covering donated-under-limit (full count used), donated-over-limit (capped to current limit), and no limit configured (full count used).

Note: This change is retrospective — existing servers where limits were previously uncapped will see a level reduction on next recalculation for affected islands.

…lculation
When a block limit is lowered after players have already donated blocks, the
donated count is now capped to the current limit in IslandLevelCalculator.tidyUp().
This ensures excess donated blocks no longer contribute points beyond the limit.
Adds three new tests to IslandLevelCalculatorTidyUpTest covering:
- donated count under limit (full count used)
- donated count over limit (capped to current limit)
- donated count with no limit (full count used)
Agent-Logs-Url: https://github.com/BentoBoxWorld/Level/sessions/3c49eef0-18f1-4340-bdd3-2afd5ce36286
Co-authored-by: tastybento <4407265+tastybento@users.noreply.github.com>
CopilotAI changed the title [WIP] Fix donate blocks counting when limit is changedfix: cap donated block counts to current block limits in level calculationMay 20, 2026
CopilotAI requested a review from tastybentoMay 20, 2026 21:49
@tastybento
tastybento marked this pull request as ready for review May 20, 2026 21:50
@sonarqubecloud

Copy link
Copy Markdown

@tastybento
tastybento merged commit 0548a0a into developMay 20, 2026
3 checks passed
@tastybento
tastybento deleted the copilot/fix-donate-blocks-counting branch May 20, 2026 21:53
tastybento added a commit that referenced this pull request Jul 16, 2026
The lazy-zero / per-chunk handicap / parallel chunk scan work merged via
PRs #435 and #440 (plus follow-up fixes) is not production-ready: admins
running CI snapshot builds saw established island levels reset and
recalculations that only counted newly placed blocks (#448).
That work now continues on the feat/per-chunk-zeroing branch. This
commit restores the stable 2.27.0 calculation engine on develop while
keeping everything safe that landed since 2.27.0:
- Donation fixes: recalc donated points from donatedBlocks (#438),
enforce blockconfig donation limits in GUI/prompts (#439), cap
donated counts to current block limits (#443)
- MockBukkit pinned to Maven Central 4.110.0
- Modrinth MC 26.1.2 game version (#444)
- CI publish workflow changes (#445, #446, #447)
- Version stays 2.28.0-SNAPSHOT
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y6f59pxCkwS8QXtJSe1nq6
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

If donate blocks are more then limit they still counts

2 participants

@tastybento