9
0
mirror of https://github.com/Winds-Studio/Leaf.git synced 2025-12-28 19:39:17 +00:00

Merge branch 'ver/1.21.4' into dev/random-tick

This commit is contained in:
hayanesuru
2025-06-13 18:19:09 +09:00
121 changed files with 778 additions and 336 deletions

View File

@@ -97,7 +97,7 @@ jobs:
path: ./leaf-1.21.4-${{ env.BUILD_NUMBER }}.jar
- name: Release Leaf
uses: softprops/action-gh-release@master
uses: softprops/action-gh-release@v2.2.2 # Temp fix
with:
name: "Leaf 1.21.4"
tag_name: "ver-1.21.4"

1
.gitignore vendored
View File

@@ -11,6 +11,7 @@
# IntelliJ
*.iml
.idea
!.idea/icon.svg
# Gradle
!gradle/wrapper/gradle-wrapper.jar

143
.idea/icon.svg generated Normal file
View File

@@ -0,0 +1,143 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="666px" height="665px" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd" xmlns:xlink="http://www.w3.org/1999/xlink">
<g><path style="opacity:0.995" fill="#4fb95f" d="M 580.5,55.5 C 579.833,59.1667 579.167,62.8333 578.5,66.5C 494.167,149.165 410.167,232.832 326.5,317.5C 316.685,320.455 306.685,323.122 296.5,325.5C 375.833,245.833 455.167,166.167 534.5,86.5C 550.014,76.6672 565.014,66.0006 579.5,54.5C 580.107,54.6236 580.44,54.9569 580.5,55.5 Z"/></g>
<g><path style="opacity:0.963" fill="#10894f" d="M 580.5,55.5 C 584.543,99.7391 586.21,144.072 585.5,188.5C 572.587,189.296 559.92,190.296 547.5,191.5C 554.386,179.841 559.72,167.508 563.5,154.5C 565.61,149.727 566.944,144.727 567.5,139.5C 570.542,132.248 572.208,124.582 572.5,116.5C 573.951,111.041 574.951,105.374 575.5,99.5C 576.313,93.1851 576.979,86.8518 577.5,80.5C 578.229,75.8696 578.563,71.2029 578.5,66.5C 579.167,62.8333 579.833,59.1667 580.5,55.5 Z"/></g>
<g><path style="opacity:1" fill="#4bb85c" d="M 578.5,66.5 C 578.563,71.2029 578.229,75.8696 577.5,80.5C 499.5,157.833 421.833,235.5 344.5,313.5C 339.644,314.544 334.978,315.877 330.5,317.5C 329.167,317.5 327.833,317.5 326.5,317.5C 410.167,232.832 494.167,149.165 578.5,66.5 Z"/></g>
<g><path style="opacity:1" fill="#48b759" d="M 577.5,80.5 C 576.979,86.8518 576.313,93.1851 575.5,99.5C 505.833,168.5 436.5,237.833 367.5,307.5C 360.055,309.946 352.389,311.946 344.5,313.5C 421.833,235.5 499.5,157.833 577.5,80.5 Z"/></g>
<g><path style="opacity:0.996" fill="#52b962" d="M 534.5,86.5 C 455.167,166.167 375.833,245.833 296.5,325.5C 292.198,327.703 287.531,329.036 282.5,329.5C 359.833,251.833 437.167,174.167 514.5,96.5C 521.193,93.1534 527.86,89.8201 534.5,86.5 Z"/></g>
<g><path style="opacity:0.997" fill="#55ba65" d="M 514.5,96.5 C 437.167,174.167 359.833,251.833 282.5,329.5C 271.675,333.735 260.675,337.735 249.5,341.5C 326.833,263.833 404.167,186.167 481.5,108.5C 492.79,105.292 503.79,101.292 514.5,96.5 Z"/></g>
<g><path style="opacity:1" fill="#45b756" d="M 575.5,99.5 C 574.951,105.374 573.951,111.041 572.5,116.5C 572.631,115.761 572.464,115.094 572,114.5C 508.963,177.034 446.796,239.701 385.5,302.5C 379.749,304.773 373.749,306.44 367.5,307.5C 436.5,237.833 505.833,168.5 575.5,99.5 Z"/></g>
<g><path style="opacity:0.993" fill="#58bb68" d="M 481.5,108.5 C 404.167,186.167 326.833,263.833 249.5,341.5C 246.328,343.252 243.328,345.252 240.5,347.5C 228.697,353.316 217.697,360.316 207.5,368.5C 292.5,283.167 377.5,197.833 462.5,112.5C 468.868,111.325 475.201,109.991 481.5,108.5 Z"/></g>
<g><path style="opacity:0.998" fill="#5cbc6c" d="M 462.5,112.5 C 377.5,197.833 292.5,283.167 207.5,368.5C 202.5,374.167 197.167,379.5 191.5,384.5C 156.167,419.5 120.833,454.5 85.5,489.5C 83.3256,486.485 81.6589,483.151 80.5,479.5C 201.5,358.167 322.5,236.833 443.5,115.5C 449.919,114.964 456.252,113.964 462.5,112.5 Z"/></g>
<g><path style="opacity:1" fill="#42b653" d="M 572.5,116.5 C 572.208,124.582 570.542,132.248 567.5,139.5C 516.034,189.462 464.701,240.296 413.5,292C 413.728,292.399 414.062,292.565 414.5,292.5C 405.195,296.603 395.529,299.936 385.5,302.5C 446.796,239.701 508.963,177.034 572,114.5C 572.464,115.094 572.631,115.761 572.5,116.5 Z"/></g>
<g><path style="opacity:0.998" fill="#5fbc6e" d="M 443.5,115.5 C 322.5,236.833 201.5,358.167 80.5,479.5C 77.9922,475.818 75.9922,471.818 74.5,467.5C 191.5,351.167 308.167,234.5 424.5,117.5C 430.886,117.161 437.22,116.495 443.5,115.5 Z"/></g>
<g><path style="opacity:0.998" fill="#62bd71" d="M 424.5,117.5 C 308.167,234.5 191.5,351.167 74.5,467.5C 72.9303,464.686 71.5969,461.686 70.5,458.5C 184.167,345.5 297.5,232.167 410.5,118.5C 415.181,118.331 419.848,117.998 424.5,117.5 Z"/></g>
<g><path style="opacity:0.997" fill="#65bd74" d="M 410.5,118.5 C 297.5,232.167 184.167,345.5 70.5,458.5C 68.6385,454.25 66.9718,449.917 65.5,445.5C 174.5,337.167 283.167,228.5 391.5,119.5C 397.804,118.74 404.137,118.407 410.5,118.5 Z"/></g>
<g><path style="opacity:0.996" fill="#7bc28a" d="M 290.5,119.5 C 210.833,199.833 130.833,279.833 50.5,359.5C 50.19,356.287 50.5233,353.287 51.5,350.5C 128.5,274.167 205.167,197.5 281.5,120.5C 284.57,120.632 287.57,120.299 290.5,119.5 Z"/></g>
<g><path style="opacity:0.996" fill="#79c288" d="M 290.5,119.5 C 295.167,119.5 299.833,119.5 304.5,119.5C 220.5,204.167 136.167,288.5 51.5,372.5C 50.8005,368.202 50.4672,363.869 50.5,359.5C 130.833,279.833 210.833,199.833 290.5,119.5 Z"/></g>
<g><path style="opacity:0.998" fill="#77c186" d="M 304.5,119.5 C 307.5,119.5 310.5,119.5 313.5,119.5C 226.5,207.167 139.167,294.5 51.5,381.5C 51.5,378.5 51.5,375.5 51.5,372.5C 136.167,288.5 220.5,204.167 304.5,119.5 Z"/></g>
<g><path style="opacity:0.998" fill="#75c184" d="M 313.5,119.5 C 316.833,119.5 320.167,119.5 323.5,119.5C 233.5,210.167 143.167,300.5 52.5,390.5C 52.4921,387.455 52.1587,384.455 51.5,381.5C 139.167,294.5 226.5,207.167 313.5,119.5 Z"/></g>
<g><path style="opacity:0.998" fill="#72c081" d="M 323.5,119.5 C 330.167,119.5 336.833,119.5 343.5,119.5C 247.833,215.833 151.833,311.833 55.5,407.5C 54.407,401.849 53.407,396.182 52.5,390.5C 143.167,300.5 233.5,210.167 323.5,119.5 Z"/></g>
<g><path style="opacity:0.998" fill="#6fbf7e" d="M 343.5,119.5 C 348.833,119.5 354.167,119.5 359.5,119.5C 259.5,220.167 159.167,320.5 58.5,420.5C 57.1218,416.279 56.1218,411.946 55.5,407.5C 151.833,311.833 247.833,215.833 343.5,119.5 Z"/></g>
<g><path style="opacity:0.998" fill="#6bbf7a" d="M 359.5,119.5 C 364.5,119.5 369.5,119.5 374.5,119.5C 270.5,224.167 166.167,328.5 61.5,432.5C 60.0966,428.619 59.0966,424.619 58.5,420.5C 159.167,320.5 259.5,220.167 359.5,119.5 Z"/></g>
<g><path style="opacity:0.998" fill="#68be78" d="M 374.5,119.5 C 380.167,119.5 385.833,119.5 391.5,119.5C 283.167,228.5 174.5,337.167 65.5,445.5C 63.7681,441.303 62.4348,436.97 61.5,432.5C 166.167,328.5 270.5,224.167 374.5,119.5 Z"/></g>
<g><path style="opacity:0.996" fill="#7ec28d" d="M 281.5,120.5 C 205.167,197.5 128.5,274.167 51.5,350.5C 51.4425,342.479 51.7758,334.479 52.5,326.5C 120.5,259.167 188.167,191.5 255.5,123.5C 264.099,122.063 272.766,121.063 281.5,120.5 Z"/></g>
<g><path style="opacity:0.995" fill="#82c390" d="M 255.5,123.5 C 188.167,191.5 120.5,259.167 52.5,326.5C 53.4449,321.886 54.1115,317.219 54.5,312.5C 117.167,250.5 179.5,188.167 241.5,125.5C 246.132,124.617 250.798,123.95 255.5,123.5 Z"/></g>
<g><path style="opacity:0.993" fill="#85c493" d="M 241.5,125.5 C 179.5,188.167 117.167,250.5 54.5,312.5C 55.8977,304.242 57.8977,296.242 60.5,288.5C 113.167,236.5 165.5,184.167 217.5,131.5C 225.404,129.191 233.404,127.191 241.5,125.5 Z"/></g>
<g><path style="opacity:0.991" fill="#88c496" d="M 217.5,131.5 C 165.5,184.167 113.167,236.5 60.5,288.5C 61.5625,282.647 63.2292,276.98 65.5,271.5C 110.5,227.167 155.167,182.5 199.5,137.5C 205.215,134.928 211.215,132.928 217.5,131.5 Z"/></g>
<g><path style="opacity:0.978" fill="#8bc599" d="M 199.5,137.5 C 155.167,182.5 110.5,227.167 65.5,271.5C 89.8075,206.526 134.474,161.859 199.5,137.5 Z"/></g>
<g><path style="opacity:1" fill="#3fb650" d="M 567.5,139.5 C 566.944,144.727 565.61,149.727 563.5,154.5C 520.701,196.799 478.035,239.299 435.5,282C 436.094,282.464 436.761,282.631 437.5,282.5C 430.241,286.626 422.575,289.959 414.5,292.5C 414.062,292.565 413.728,292.399 413.5,292C 464.701,240.296 516.034,189.462 567.5,139.5 Z"/></g>
<g><path style="opacity:1" fill="#3cb54d" d="M 563.5,154.5 C 559.72,167.508 554.386,179.841 547.5,191.5C 535.591,209.45 521.258,225.284 504.5,239C 483.473,255.513 461.14,270.013 437.5,282.5C 436.761,282.631 436.094,282.464 435.5,282C 478.035,239.299 520.701,196.799 563.5,154.5 Z"/></g>
<g><path style="opacity:0.997" fill="#158d53" d="M 585.5,188.5 C 585.019,199.161 584.686,209.828 584.5,220.5C 578.846,219.547 573.18,219.714 567.5,221C 561.284,223.137 554.951,224.804 548.5,226C 542.866,229.436 536.866,232.102 530.5,234C 522.358,240.974 514.358,248.141 506.5,255.5C 503.02,263.453 498.187,270.453 492,276.5C 490.46,280.419 488.293,283.919 485.5,287C 478.328,292.038 471.328,296.704 464.5,301C 458.394,302.601 452.394,303.434 446.5,303.5C 442.654,303.545 438.987,304.378 435.5,306C 423.353,307.346 411.353,308.346 399.5,309C 397.238,309.642 395.071,310.475 393,311.5C 389.575,310.531 386.075,310.531 382.5,311.5C 362.015,316.658 341.682,322.324 321.5,328.5C 325.256,324.923 329.256,321.423 333.5,318C 332.552,317.517 331.552,317.351 330.5,317.5C 334.978,315.877 339.644,314.544 344.5,313.5C 352.389,311.946 360.055,309.946 367.5,307.5C 373.749,306.44 379.749,304.773 385.5,302.5C 395.529,299.936 405.195,296.603 414.5,292.5C 422.575,289.959 430.241,286.626 437.5,282.5C 461.14,270.013 483.473,255.513 504.5,239C 521.258,225.284 535.591,209.45 547.5,191.5C 559.92,190.296 572.587,189.296 585.5,188.5 Z"/></g>
<g><path style="opacity:0.996" fill="#189156" d="M 584.5,220.5 C 583.786,226.818 583.12,233.151 582.5,239.5C 577.142,239.262 571.809,239.096 566.5,239C 558.011,242.244 549.345,244.911 540.5,247C 533.328,251.419 526.328,256.085 519.5,261C 513.127,267.042 506.46,272.708 499.5,278C 496.257,281.821 493.257,285.821 490.5,290C 484.569,293.639 478.569,297.306 472.5,301C 471.551,301.617 470.718,301.451 470,300.5C 465.12,303.683 459.787,305.683 454,306.5C 450.189,305.641 446.522,306.308 443,308.5C 441.862,308.011 440.695,307.678 439.5,307.5C 441.703,305.9 444.036,304.567 446.5,303.5C 452.394,303.434 458.394,302.601 464.5,301C 471.328,296.704 478.328,292.038 485.5,287C 488.293,283.919 490.46,280.419 492,276.5C 498.187,270.453 503.02,263.453 506.5,255.5C 514.358,248.141 522.358,240.974 530.5,234C 536.866,232.102 542.866,229.436 548.5,226C 554.951,224.804 561.284,223.137 567.5,221C 573.18,219.714 578.846,219.547 584.5,220.5 Z"/></g>
<g><path style="opacity:0.998" fill="#1c9259" d="M 582.5,239.5 C 582.577,243.215 582.244,246.881 581.5,250.5C 574.515,251.332 567.515,252.165 560.5,253C 553.903,255.287 547.237,257.62 540.5,260C 533.038,266.126 525.038,271.46 516.5,276C 512.862,279.974 509.195,283.974 505.5,288C 496.593,294.56 487.926,301.56 479.5,309C 474.066,312.051 468.4,314.551 462.5,316.5C 452.106,319.683 441.606,322.683 431,325.5C 430.086,324.346 429.253,324.513 428.5,326C 406.626,329.758 385.293,334.924 364.5,341.5C 362.997,340.948 361.331,340.948 359.5,341.5C 366.409,338.344 372.742,334.177 378.5,329C 380.167,328.667 381.833,328.333 383.5,328C 390.74,321.769 399.074,317.769 408.5,316C 409.942,315.623 410.942,314.79 411.5,313.5C 413.17,313.249 414.67,312.582 416,311.5C 416.725,312.059 417.558,312.392 418.5,312.5C 425.031,311.332 431.198,309.332 437,306.5C 437.671,307.252 438.504,307.586 439.5,307.5C 440.695,307.678 441.862,308.011 443,308.5C 446.522,306.308 450.189,305.641 454,306.5C 459.787,305.683 465.12,303.683 470,300.5C 470.718,301.451 471.551,301.617 472.5,301C 478.569,297.306 484.569,293.639 490.5,290C 493.257,285.821 496.257,281.821 499.5,278C 506.46,272.708 513.127,267.042 519.5,261C 526.328,256.085 533.328,251.419 540.5,247C 549.345,244.911 558.011,242.244 566.5,239C 571.809,239.096 577.142,239.262 582.5,239.5 Z"/></g>
<g><path style="opacity:0.996" fill="#1f975c" d="M 581.5,250.5 C 581.268,256.262 580.601,261.928 579.5,267.5C 572.516,268.372 565.516,268.539 558.5,268C 551.183,271.542 543.849,274.209 536.5,276C 518.549,287.221 501.049,299.055 484,311.5C 483.586,311.043 483.086,310.709 482.5,310.5C 473.203,316.265 463.203,320.265 452.5,322.5C 455.534,319.984 458.868,317.984 462.5,316.5C 468.4,314.551 474.066,312.051 479.5,309C 487.926,301.56 496.593,294.56 505.5,288C 509.195,283.974 512.862,279.974 516.5,276C 525.038,271.46 533.038,266.126 540.5,260C 547.237,257.62 553.903,255.287 560.5,253C 567.515,252.165 574.515,251.332 581.5,250.5 Z"/></g>
<g><path style="opacity:0.998" fill="#23995f" d="M 579.5,267.5 C 579.632,270.57 579.299,273.57 578.5,276.5C 570.836,275.611 563.17,276.111 555.5,278C 553.996,279.788 552.329,280.288 550.5,279.5C 539.144,284.696 528.144,290.529 517.5,297C 512.559,301.787 507.225,305.954 501.5,309.5C 492.008,314.116 482.675,319.116 473.5,324.5C 464.054,326.891 455.054,330.391 446.5,335C 429.087,339.431 412.087,343.931 395.5,348.5C 397.647,346.53 399.98,344.697 402.5,343C 413.32,339.577 423.32,334.743 432.5,328.5C 439.339,327.11 446.006,325.11 452.5,322.5C 463.203,320.265 473.203,316.265 482.5,310.5C 483.086,310.709 483.586,311.043 484,311.5C 501.049,299.055 518.549,287.221 536.5,276C 543.849,274.209 551.183,271.542 558.5,268C 565.516,268.539 572.516,268.372 579.5,267.5 Z"/></g>
<g><path style="opacity:0.994" fill="#279e62" d="M 578.5,276.5 C 577.927,282.511 577.26,288.511 576.5,294.5C 569.832,294.618 563.332,294.618 557,294.5C 551.996,296.404 546.663,298.404 541,300.5C 540.586,300.043 540.086,299.709 539.5,299.5C 535.712,301.472 532.212,303.805 529,306.5C 525.734,307.75 522.568,309.084 519.5,310.5C 504.932,318.535 490.432,326.868 476,335.5C 474.434,334.939 473.101,335.606 472,337.5C 471.667,337.167 471.333,336.833 471,336.5C 462.672,341.11 453.838,344.444 444.5,346.5C 444.937,344.926 445.937,343.759 447.5,343C 452.674,341.249 457.341,338.749 461.5,335.5C 471.609,329.942 481.609,324.109 491.5,318C 495.025,315.302 498.358,312.469 501.5,309.5C 507.225,305.954 512.559,301.787 517.5,297C 528.144,290.529 539.144,284.696 550.5,279.5C 552.329,280.288 553.996,279.788 555.5,278C 563.17,276.111 570.836,275.611 578.5,276.5 Z"/></g>
<g><path style="opacity:0.993" fill="#2ea468" d="M 576.5,294.5 C 575.5,299.833 574.5,305.167 573.5,310.5C 569.781,310.632 566.281,309.965 563,308.5C 555.02,310.952 547.186,312.952 539.5,314.5C 535.841,315.413 532.341,316.746 529,318.5C 528.667,318.167 528.333,317.833 528,317.5C 507.995,329.78 487.162,340.446 465.5,349.5C 467.819,346.706 470.819,344.872 474.5,344C 476.487,341.481 478.653,339.981 481,339.5C 490.104,333.03 498.938,326.196 507.5,319C 512.446,317.373 516.446,314.539 519.5,310.5C 522.568,309.084 525.734,307.75 529,306.5C 532.212,303.805 535.712,301.472 539.5,299.5C 540.086,299.709 540.586,300.043 541,300.5C 546.663,298.404 551.996,296.404 557,294.5C 563.332,294.618 569.832,294.618 576.5,294.5 Z"/></g>
<g><path style="opacity:0.913" fill="#269d61" d="M 607.5,403.5 C 607.5,382.5 607.5,361.5 607.5,340.5C 608.424,326.481 609.59,312.481 611,298.5C 616.361,333.851 615.195,368.851 607.5,403.5 Z"/></g>
<g><path style="opacity:1" fill="#198c56" d="M 446.5,303.5 C 444.036,304.567 441.703,305.9 439.5,307.5C 438.504,307.586 437.671,307.252 437,306.5C 431.198,309.332 425.031,311.332 418.5,312.5C 417.558,312.392 416.725,312.059 416,311.5C 414.67,312.582 413.17,313.249 411.5,313.5C 407.473,313.949 403.473,314.616 399.5,315.5C 397.72,314.085 396.054,314.252 394.5,316C 389.201,316.93 383.867,317.597 378.5,318C 373.338,319.752 368.171,321.585 363,323.5C 354.941,324.33 347.274,326.997 340,331.5C 339.586,331.043 339.086,330.709 338.5,330.5C 332.591,332.522 326.925,335.022 321.5,338C 316.315,339.007 311.315,340.507 306.5,342.5C 312.112,338.512 317.112,333.845 321.5,328.5C 341.682,322.324 362.015,316.658 382.5,311.5C 386.075,310.531 389.575,310.531 393,311.5C 395.071,310.475 397.238,309.642 399.5,309C 411.353,308.346 423.353,307.346 435.5,306C 438.987,304.378 442.654,303.545 446.5,303.5 Z"/></g>
<g><path style="opacity:0.993" fill="#35ab6e" d="M 573.5,310.5 C 572.915,315.375 571.915,320.042 570.5,324.5C 558.326,323.424 546.326,324.924 534.5,329C 533.619,329.708 532.953,330.542 532.5,331.5C 518.899,336.055 506.065,342.722 494,351.5C 493.667,351.167 493.333,350.833 493,350.5C 488.236,353.869 483.236,356.869 478,359.5C 477.23,358.402 476.397,358.402 475.5,359.5C 489.057,348.697 502.723,337.864 516.5,327C 523.972,322.268 531.639,318.101 539.5,314.5C 547.186,312.952 555.02,310.952 563,308.5C 566.281,309.965 569.781,310.632 573.5,310.5 Z"/></g>
<g><path style="opacity:1" fill="#279862" d="M 501.5,309.5 C 498.358,312.469 495.025,315.302 491.5,318C 481.609,324.109 471.609,329.942 461.5,335.5C 444.852,340.859 428.519,346.193 412.5,351.5C 411.833,351.167 411.167,350.833 410.5,350.5C 404.727,352.311 399.227,354.644 394,357.5C 393.586,357.043 393.086,356.709 392.5,356.5C 384.438,360.235 376.438,363.235 368.5,365.5C 370.937,363.567 373.271,361.4 375.5,359C 380.165,356.668 384.498,353.835 388.5,350.5C 390.833,349.833 393.167,349.167 395.5,348.5C 412.087,343.931 429.087,339.431 446.5,335C 455.054,330.391 464.054,326.891 473.5,324.5C 482.675,319.116 492.008,314.116 501.5,309.5 Z"/></g>
<g><path style="opacity:1" fill="#2e9f68" d="M 519.5,310.5 C 516.446,314.539 512.446,317.373 507.5,319C 498.938,326.196 490.104,333.03 481,339.5C 478.653,339.981 476.487,341.481 474.5,344C 470.819,344.872 467.819,346.706 465.5,349.5C 462.199,349.792 460.199,351.459 459.5,354.5C 457.035,354.767 454.701,355.434 452.5,356.5C 445.638,358.386 438.971,360.886 432.5,364C 428.886,364.945 425.219,365.612 421.5,366C 419.579,366.36 417.912,367.194 416.5,368.5C 414.405,367.771 412.572,368.437 411,370.5C 410.667,370.167 410.333,369.833 410,369.5C 405.393,371.869 400.559,373.536 395.5,374.5C 403.208,367.644 411.875,362.311 421.5,358.5C 424.388,355.905 427.388,353.572 430.5,351.5C 435.372,350.397 440.038,348.73 444.5,346.5C 453.838,344.444 462.672,341.11 471,336.5C 471.333,336.833 471.667,337.167 472,337.5C 473.101,335.606 474.434,334.939 476,335.5C 490.432,326.868 504.932,318.535 519.5,310.5 Z"/></g>
<g><path style="opacity:1" fill="#1c8c59" d="M 411.5,313.5 C 410.942,314.79 409.942,315.623 408.5,316C 399.074,317.769 390.74,321.769 383.5,328C 381.833,328.333 380.167,328.667 378.5,329C 372.742,334.177 366.409,338.344 359.5,341.5C 357.337,343.083 355.004,344.416 352.5,345.5C 340.759,348.194 329.092,352.194 317.5,357.5C 312.072,358.103 306.905,360.103 302,363.5C 301.586,363.043 301.086,362.709 300.5,362.5C 295.938,364.518 291.271,366.351 286.5,368C 276.587,369.747 266.754,371.914 257,374.5C 256.235,374.43 255.735,374.097 255.5,373.5C 262.871,369.483 270.538,365.983 278.5,363C 285.458,356.859 292.791,351.359 300.5,346.5C 303.05,345.943 305.05,344.61 306.5,342.5C 311.315,340.507 316.315,339.007 321.5,338C 326.925,335.022 332.591,332.522 338.5,330.5C 339.086,330.709 339.586,331.043 340,331.5C 347.274,326.997 354.941,324.33 363,323.5C 368.171,321.585 373.338,319.752 378.5,318C 383.867,317.597 389.201,316.93 394.5,316C 396.054,314.252 397.72,314.085 399.5,315.5C 403.473,314.616 407.473,313.949 411.5,313.5 Z"/></g>
<g><path style="opacity:1" fill="#34a56d" d="M 539.5,314.5 C 531.639,318.101 523.972,322.268 516.5,327C 502.723,337.864 489.057,348.697 475.5,359.5C 472.139,361.511 468.806,363.511 465.5,365.5C 452.594,368.621 440.594,373.121 429.5,379C 422.776,380.729 416.109,382.562 409.5,384.5C 423.926,375.444 438.26,366.111 452.5,356.5C 454.701,355.434 457.035,354.767 459.5,354.5C 460.199,351.459 462.199,349.792 465.5,349.5C 487.162,340.446 507.995,329.78 528,317.5C 528.333,317.833 528.667,318.167 529,318.5C 532.341,316.746 535.841,315.413 539.5,314.5 Z"/></g>
<g><path style="opacity:1" fill="#20925c" d="M 462.5,316.5 C 458.868,317.984 455.534,319.984 452.5,322.5C 446.006,325.11 439.339,327.11 432.5,328.5C 414.128,332.088 395.795,336.588 377.5,342C 374.099,343.691 370.599,345.191 367,346.5C 366.439,345.978 365.772,345.645 365,345.5C 357.463,349.513 349.63,352.846 341.5,355.5C 345.167,352.167 348.833,348.833 352.5,345.5C 355.004,344.416 357.337,343.083 359.5,341.5C 361.331,340.948 362.997,340.948 364.5,341.5C 385.293,334.924 406.626,329.758 428.5,326C 429.253,324.513 430.086,324.346 431,325.5C 441.606,322.683 452.106,319.683 462.5,316.5 Z"/></g>
<g><path style="opacity:0.998" fill="#188855" d="M 326.5,317.5 C 327.833,317.5 329.167,317.5 330.5,317.5C 331.552,317.351 332.552,317.517 333.5,318C 329.256,321.423 325.256,324.923 321.5,328.5C 317.112,333.845 312.112,338.512 306.5,342.5C 305.05,344.61 303.05,345.943 300.5,346.5C 296.217,346.087 292.217,347.254 288.5,350C 282.584,351.751 276.584,353.084 270.5,354C 268.919,354.707 267.419,355.54 266,356.5C 262.7,356.65 259.367,356.65 256,356.5C 251.22,357.659 246.386,358.659 241.5,359.5C 241.354,355.481 241.021,351.481 240.5,347.5C 243.328,345.252 246.328,343.252 249.5,341.5C 260.675,337.735 271.675,333.735 282.5,329.5C 287.531,329.036 292.198,327.703 296.5,325.5C 306.685,323.122 316.685,320.455 326.5,317.5 Z"/></g>
<g><path style="opacity:0.992" fill="#3cb073" d="M 570.5,324.5 C 570.008,329.959 569.008,335.292 567.5,340.5C 561.286,340.772 555.119,340.438 549,339.5C 546.088,341.066 542.921,341.899 539.5,342C 522.201,351.819 504.201,360.986 485.5,369.5C 485.511,367.983 486.177,366.816 487.5,366C 497.397,359.111 506.73,351.445 515.5,343C 521.545,339.65 527.211,335.817 532.5,331.5C 532.953,330.542 533.619,329.708 534.5,329C 546.326,324.924 558.326,323.424 570.5,324.5 Z"/></g>
<g><path style="opacity:1" fill="#23925f" d="M 432.5,328.5 C 423.32,334.743 413.32,339.577 402.5,343C 399.98,344.697 397.647,346.53 395.5,348.5C 393.167,349.167 390.833,349.833 388.5,350.5C 383.906,352.376 379.239,354.043 374.5,355.5C 373.833,355.167 373.167,354.833 372.5,354.5C 368.186,357.727 363.52,359.394 358.5,359.5C 352.993,362.684 347.16,365.35 341,367.5C 335.468,368.458 329.968,370.458 324.5,373.5C 323.914,373.291 323.414,372.957 323,372.5C 320.24,374.674 317.407,375.674 314.5,375.5C 322.452,369.552 330.118,363.219 337.5,356.5C 338.833,356.167 340.167,355.833 341.5,355.5C 349.63,352.846 357.463,349.513 365,345.5C 365.772,345.645 366.439,345.978 367,346.5C 370.599,345.191 374.099,343.691 377.5,342C 395.795,336.588 414.128,332.088 432.5,328.5 Z"/></g>
<g><path style="opacity:1" fill="#3bab73" d="M 532.5,331.5 C 527.211,335.817 521.545,339.65 515.5,343C 506.73,351.445 497.397,359.111 487.5,366C 486.177,366.816 485.511,367.983 485.5,369.5C 485.158,370.338 484.492,370.672 483.5,370.5C 482.828,369.733 481.995,369.066 481,368.5C 465.373,377.543 448.873,384.543 431.5,389.5C 442.797,380.777 454.13,372.777 465.5,365.5C 468.806,363.511 472.139,361.511 475.5,359.5C 476.397,358.402 477.23,358.402 478,359.5C 483.236,356.869 488.236,353.869 493,350.5C 493.333,350.833 493.667,351.167 494,351.5C 506.065,342.722 518.899,336.055 532.5,331.5 Z"/></g>
<g><path style="opacity:1" fill="#2a9964" d="M 461.5,335.5 C 457.341,338.749 452.674,341.249 447.5,343C 445.937,343.759 444.937,344.926 444.5,346.5C 440.038,348.73 435.372,350.397 430.5,351.5C 418.445,354.378 406.445,358.378 394.5,363.5C 393.914,363.291 393.414,362.957 393,362.5C 378.78,367.693 364.614,373.027 350.5,378.5C 353.951,373.709 358.285,370.042 363.5,367.5C 365.05,366.559 366.716,365.893 368.5,365.5C 376.438,363.235 384.438,360.235 392.5,356.5C 393.086,356.709 393.586,357.043 394,357.5C 399.227,354.644 404.727,352.311 410.5,350.5C 411.167,350.833 411.833,351.167 412.5,351.5C 428.519,346.193 444.852,340.859 461.5,335.5 Z"/></g>
<g><path style="opacity:0.999" fill="#42b278" d="M 567.5,340.5 C 567.5,341.167 567.5,341.833 567.5,342.5C 560.492,342.334 553.492,342.5 546.5,343C 545.234,343.309 544.067,343.809 543,344.5C 542.667,344.167 542.333,343.833 542,343.5C 537.452,349.519 531.619,353.685 524.5,356C 519.822,361.856 514.155,366.356 507.5,369.5C 495.691,376.155 483.524,382.155 471,387.5C 470.667,387.167 470.333,386.833 470,386.5C 463.951,388.776 458.117,391.443 452.5,394.5C 456.961,388.588 462.628,384.088 469.5,381C 472.938,377.975 476.271,374.808 479.5,371.5C 480.736,370.754 482.07,370.421 483.5,370.5C 484.492,370.672 485.158,370.338 485.5,369.5C 504.201,360.986 522.201,351.819 539.5,342C 542.921,341.899 546.088,341.066 549,339.5C 555.119,340.438 561.286,340.772 567.5,340.5 Z"/></g>
<g><path style="opacity:0.988" fill="#1c8858" d="M 300.5,346.5 C 292.791,351.359 285.458,356.859 278.5,363C 270.538,365.983 262.871,369.483 255.5,373.5C 251.146,374.086 246.812,374.752 242.5,375.5C 241.806,370.195 241.472,364.862 241.5,359.5C 246.386,358.659 251.22,357.659 256,356.5C 259.367,356.65 262.7,356.65 266,356.5C 267.419,355.54 268.919,354.707 270.5,354C 276.584,353.084 282.584,351.751 288.5,350C 292.217,347.254 296.217,346.087 300.5,346.5 Z"/></g>
<g><path style="opacity:1" fill="#208c5c" d="M 352.5,345.5 C 348.833,348.833 345.167,352.167 341.5,355.5C 340.167,355.833 338.833,356.167 337.5,356.5C 333.577,357.795 329.91,359.628 326.5,362C 319.403,363.321 312.736,365.821 306.5,369.5C 304.316,368.892 302.316,369.559 300.5,371.5C 287.117,376.169 273.284,379.835 259,382.5C 253.657,382.296 248.157,382.296 242.5,382.5C 242.5,380.167 242.5,377.833 242.5,375.5C 246.812,374.752 251.146,374.086 255.5,373.5C 255.735,374.097 256.235,374.43 257,374.5C 266.754,371.914 276.587,369.747 286.5,368C 291.271,366.351 295.938,364.518 300.5,362.5C 301.086,362.709 301.586,363.043 302,363.5C 306.905,360.103 312.072,358.103 317.5,357.5C 329.092,352.194 340.759,348.194 352.5,345.5 Z"/></g>
<g><path style="opacity:1" fill="#279262" d="M 388.5,350.5 C 384.498,353.835 380.165,356.668 375.5,359C 373.271,361.4 370.937,363.567 368.5,365.5C 366.716,365.893 365.05,366.559 363.5,367.5C 355.646,368.841 348.479,371.841 342,376.5C 341.667,376.167 341.333,375.833 341,375.5C 330,380.5 319,385.5 308,390.5C 307.667,390.167 307.333,389.833 307,389.5C 299.077,393.196 290.911,396.196 282.5,398.5C 292.09,392.569 301.09,385.902 309.5,378.5C 310.922,377.075 312.589,376.075 314.5,375.5C 317.407,375.674 320.24,374.674 323,372.5C 323.414,372.957 323.914,373.291 324.5,373.5C 329.968,370.458 335.468,368.458 341,367.5C 347.16,365.35 352.993,362.684 358.5,359.5C 363.52,359.394 368.186,357.727 372.5,354.5C 373.167,354.833 373.833,355.167 374.5,355.5C 379.239,354.043 383.906,352.376 388.5,350.5 Z"/></g>
<g><path style="opacity:0.994" fill="#45b77a" d="M 567.5,342.5 C 566.172,347.812 564.839,353.146 563.5,358.5C 558.156,358.334 552.823,358.501 547.5,359C 544.308,359.197 541.308,360.03 538.5,361.5C 537.914,361.291 537.414,360.957 537,360.5C 524.662,366.42 512.495,372.42 500.5,378.5C 503.239,375.767 505.573,372.767 507.5,369.5C 514.155,366.356 519.822,361.856 524.5,356C 531.619,353.685 537.452,349.519 542,343.5C 542.333,343.833 542.667,344.167 543,344.5C 544.067,343.809 545.234,343.309 546.5,343C 553.492,342.5 560.492,342.334 567.5,342.5 Z"/></g>
<g><path style="opacity:1" fill="#2e9868" d="M 430.5,351.5 C 427.388,353.572 424.388,355.905 421.5,358.5C 411.875,362.311 403.208,367.644 395.5,374.5C 391.473,376.837 387.473,379.17 383.5,381.5C 381.54,382.138 379.707,382.138 378,381.5C 376.829,383.616 375.329,384.282 373.5,383.5C 363.669,388.131 353.669,392.464 343.5,396.5C 342.914,396.291 342.414,395.957 342,395.5C 336.134,398.122 330.467,401.122 325,404.5C 324.667,404.167 324.333,403.833 324,403.5C 320.044,406.728 315.544,408.728 310.5,409.5C 321.047,400.531 331.713,391.531 342.5,382.5C 345.074,380.976 347.741,379.642 350.5,378.5C 364.614,373.027 378.78,367.693 393,362.5C 393.414,362.957 393.914,363.291 394.5,363.5C 406.445,358.378 418.445,354.378 430.5,351.5 Z"/></g>
<g><path style="opacity:0.997" fill="#238d5e" d="M 337.5,356.5 C 330.118,363.219 322.452,369.552 314.5,375.5C 312.589,376.075 310.922,377.075 309.5,378.5C 302.88,380.219 296.213,382.719 289.5,386C 279.075,387.317 268.908,389.484 259,392.5C 253.275,392.318 247.442,392.318 241.5,392.5C 242.207,389.214 242.54,385.881 242.5,382.5C 248.157,382.296 253.657,382.296 259,382.5C 273.284,379.835 287.117,376.169 300.5,371.5C 302.316,369.559 304.316,368.892 306.5,369.5C 312.736,365.821 319.403,363.321 326.5,362C 329.91,359.628 333.577,357.795 337.5,356.5 Z"/></g>
<g><path style="opacity:1" fill="#349f6d" d="M 452.5,356.5 C 438.26,366.111 423.926,375.444 409.5,384.5C 407.252,387.393 404.252,389.06 400.5,389.5C 395.259,390.746 389.926,392.746 384.5,395.5C 383.914,395.291 383.414,394.957 383,394.5C 377.651,396.51 372.651,399.177 368,402.5C 367.586,402.043 367.086,401.709 366.5,401.5C 359.606,405.615 352.273,408.615 344.5,410.5C 357.322,400.59 370.322,390.923 383.5,381.5C 387.473,379.17 391.473,376.837 395.5,374.5C 400.559,373.536 405.393,371.869 410,369.5C 410.333,369.833 410.667,370.167 411,370.5C 412.572,368.437 414.405,367.771 416.5,368.5C 417.912,367.194 419.579,366.36 421.5,366C 425.219,365.612 428.886,364.945 432.5,364C 438.971,360.886 445.638,358.386 452.5,356.5 Z"/></g>
<g><path style="opacity:0.994" fill="#48b97d" d="M 563.5,358.5 C 563.167,360.5 562.833,362.5 562.5,364.5C 556.533,365.471 550.533,366.305 544.5,367C 540.771,368.255 537.438,370.088 534.5,372.5C 527.33,373.5 520.997,376.333 515.5,381C 511.991,381.422 508.657,382.422 505.5,384C 496.664,387.919 487.998,392.085 479.5,396.5C 479.859,394.629 480.859,393.129 482.5,392C 487.414,388.723 492.08,385.223 496.5,381.5C 497.833,380.5 499.167,379.5 500.5,378.5C 512.495,372.42 524.662,366.42 537,360.5C 537.414,360.957 537.914,361.291 538.5,361.5C 541.308,360.03 544.308,359.197 547.5,359C 552.823,358.501 558.156,358.334 563.5,358.5 Z"/></g>
<g><path style="opacity:1" fill="#3ba573" d="M 465.5,365.5 C 454.13,372.777 442.797,380.777 431.5,389.5C 429.606,390.048 427.94,391.048 426.5,392.5C 424.655,391.605 423.322,392.272 422.5,394.5C 409.404,397.361 397.07,401.861 385.5,408C 381.294,409.777 376.961,410.944 372.5,411.5C 381.56,403.659 390.893,396.326 400.5,389.5C 404.252,389.06 407.252,387.393 409.5,384.5C 416.109,382.562 422.776,380.729 429.5,379C 440.594,373.121 452.594,368.621 465.5,365.5 Z"/></g>
<g><path style="opacity:0.934" fill="#2da166" d="M 607.5,340.5 C 607.5,361.5 607.5,382.5 607.5,403.5C 605.033,418.047 601.033,432.047 595.5,445.5C 595.5,431.167 595.5,416.833 595.5,402.5C 600.378,381.88 604.378,361.213 607.5,340.5 Z"/></g>
<g><path style="opacity:1" fill="#2a9264" d="M 363.5,367.5 C 358.285,370.042 353.951,373.709 350.5,378.5C 347.741,379.642 345.074,380.976 342.5,382.5C 341.883,382.389 341.383,382.056 341,381.5C 336.687,383.8 332.353,386.133 328,388.5C 327.667,388.167 327.333,387.833 327,387.5C 322.145,390.567 316.978,393.067 311.5,395C 301.957,397.194 292.79,400.36 284,404.5C 283.228,404.355 282.561,404.022 282,403.5C 275.698,405.162 269.365,406.829 263,408.5C 261.93,408.472 261.097,408.139 260.5,407.5C 267.62,403.939 274.954,400.939 282.5,398.5C 290.911,396.196 299.077,393.196 307,389.5C 307.333,389.833 307.667,390.167 308,390.5C 319,385.5 330,380.5 341,375.5C 341.333,375.833 341.667,376.167 342,376.5C 348.479,371.841 355.646,368.841 363.5,367.5 Z"/></g>
<g><path style="opacity:0.987" fill="#4dbd82" d="M 562.5,364.5 C 559.833,373.833 557.167,383.167 554.5,392.5C 549.489,392.334 544.489,392.501 539.5,393C 533.633,394.887 527.633,396.22 521.5,397C 513.644,401.215 505.311,404.048 496.5,405.5C 497.347,404.034 498.68,403.2 500.5,403C 502.141,401.871 503.141,400.371 503.5,398.5C 504.117,398.611 504.617,398.944 505,399.5C 514.35,389.919 524.184,380.919 534.5,372.5C 537.438,370.088 540.771,368.255 544.5,367C 550.533,366.305 556.533,365.471 562.5,364.5 Z"/></g>
<g><path style="opacity:1" fill="#45b27b" d="M 507.5,369.5 C 505.573,372.767 503.239,375.767 500.5,378.5C 499.167,379.5 497.833,380.5 496.5,381.5C 477,388.777 457.667,396.444 438.5,404.5C 441.209,401.825 443.876,399.158 446.5,396.5C 448.582,395.074 450.582,394.408 452.5,394.5C 458.117,391.443 463.951,388.776 470,386.5C 470.333,386.833 470.667,387.167 471,387.5C 483.524,382.155 495.691,376.155 507.5,369.5 Z"/></g>
<g><path style="opacity:1" fill="#4cb881" d="M 534.5,372.5 C 524.184,380.919 514.35,389.919 505,399.5C 504.617,398.944 504.117,398.611 503.5,398.5C 491.624,403.401 479.29,407.901 466.5,412C 462.793,412.737 459.127,413.571 455.5,414.5C 458.683,410.736 462.35,408.236 466.5,407C 469.574,404.151 472.574,401.317 475.5,398.5C 476.601,396.606 477.934,395.939 479.5,396.5C 487.998,392.085 496.664,387.919 505.5,384C 508.657,382.422 511.991,381.422 515.5,381C 520.997,376.333 527.33,373.5 534.5,372.5 Z"/></g>
<g><path style="opacity:1" fill="#41ab78" d="M 483.5,370.5 C 482.07,370.421 480.736,370.754 479.5,371.5C 476.271,374.808 472.938,377.975 469.5,381C 462.628,384.088 456.961,388.588 452.5,394.5C 450.582,394.408 448.582,395.074 446.5,396.5C 429.661,402.212 413.328,408.212 397.5,414.5C 403.744,407.678 410.744,402.511 418.5,399C 420.041,397.629 421.375,396.129 422.5,394.5C 423.322,392.272 424.655,391.605 426.5,392.5C 427.94,391.048 429.606,390.048 431.5,389.5C 448.873,384.543 465.373,377.543 481,368.5C 481.995,369.066 482.828,369.733 483.5,370.5 Z"/></g>
<g><path style="opacity:0.991" fill="#278e62" d="M 309.5,378.5 C 301.09,385.902 292.09,392.569 282.5,398.5C 274.954,400.939 267.62,403.939 260.5,407.5C 253.837,407.981 247.171,408.315 240.5,408.5C 241.4,403.228 241.733,397.895 241.5,392.5C 247.442,392.318 253.275,392.318 259,392.5C 268.908,389.484 279.075,387.317 289.5,386C 296.213,382.719 302.88,380.219 309.5,378.5 Z"/></g>
<g><path style="opacity:0.995" fill="#2e9267" d="M 342.5,382.5 C 331.713,391.531 321.047,400.531 310.5,409.5C 309.883,409.389 309.383,409.056 309,408.5C 307.223,410.79 305.056,412.457 302.5,413.5C 292.144,417.047 281.644,420.047 271,422.5C 265.275,421.059 259.608,421.393 254,423.5C 249.248,422.236 244.414,421.569 239.5,421.5C 240.08,417.19 240.414,412.857 240.5,408.5C 247.171,408.315 253.837,407.981 260.5,407.5C 261.097,408.139 261.93,408.472 263,408.5C 269.365,406.829 275.698,405.162 282,403.5C 282.561,404.022 283.228,404.355 284,404.5C 292.79,400.36 301.957,397.194 311.5,395C 316.978,393.067 322.145,390.567 327,387.5C 327.333,387.833 327.667,388.167 328,388.5C 332.353,386.133 336.687,383.8 341,381.5C 341.383,382.056 341.883,382.389 342.5,382.5 Z"/></g>
<g><path style="opacity:1" fill="#35986d" d="M 383.5,381.5 C 370.322,390.923 357.322,400.59 344.5,410.5C 342.772,412.226 340.772,413.559 338.5,414.5C 330.953,417.384 323.62,420.717 316.5,424.5C 315.914,424.291 315.414,423.957 315,423.5C 312.283,424.629 309.783,426.129 307.5,428C 298.296,429.846 289.463,432.68 281,436.5C 280.439,435.978 279.772,435.645 279,435.5C 276.57,437.606 273.903,437.939 271,436.5C 267.45,437.804 263.783,438.471 260,438.5C 252.583,436.993 245.083,436.327 237.5,436.5C 237.5,435.5 237.5,434.5 237.5,433.5C 249.183,434.988 260.849,434.488 272.5,432C 280.059,428.772 287.392,425.106 294.5,421C 297.062,418.267 299.729,415.767 302.5,413.5C 305.056,412.457 307.223,410.79 309,408.5C 309.383,409.056 309.883,409.389 310.5,409.5C 315.544,408.728 320.044,406.728 324,403.5C 324.333,403.833 324.667,404.167 325,404.5C 330.467,401.122 336.134,398.122 342,395.5C 342.414,395.957 342.914,396.291 343.5,396.5C 353.669,392.464 363.669,388.131 373.5,383.5C 375.329,384.282 376.829,383.616 378,381.5C 379.707,382.138 381.54,382.138 383.5,381.5 Z"/></g>
<g><path style="opacity:1" fill="#48b27e" d="M 496.5,381.5 C 492.08,385.223 487.414,388.723 482.5,392C 480.859,393.129 479.859,394.629 479.5,396.5C 477.934,395.939 476.601,396.606 475.5,398.5C 469.904,399.42 464.737,401.42 460,404.5C 459.586,404.043 459.086,403.709 458.5,403.5C 450.45,407.742 442.117,411.408 433.5,414.5C 432.833,414.167 432.167,413.833 431.5,413.5C 427.46,415.243 423.46,416.909 419.5,418.5C 423.553,414.776 427.553,411.109 431.5,407.5C 434.038,406.957 436.372,405.957 438.5,404.5C 457.667,396.444 477,388.777 496.5,381.5 Z"/></g>
<g><path style="opacity:1" fill="#3b9f72" d="M 400.5,389.5 C 390.893,396.326 381.56,403.659 372.5,411.5C 370.777,413.218 368.777,414.551 366.5,415.5C 363.95,416.358 361.45,417.358 359,418.5C 358.667,418.167 358.333,417.833 358,417.5C 347.863,423.159 337.697,427.992 327.5,432C 321.441,433.743 315.441,435.576 309.5,437.5C 309.937,435.926 310.937,434.759 312.5,434C 322.288,428.675 330.954,422.175 338.5,414.5C 340.772,413.559 342.772,412.226 344.5,410.5C 352.273,408.615 359.606,405.615 366.5,401.5C 367.086,401.709 367.586,402.043 368,402.5C 372.651,399.177 377.651,396.51 383,394.5C 383.414,394.957 383.914,395.291 384.5,395.5C 389.926,392.746 395.259,390.746 400.5,389.5 Z"/></g>
<g><path style="opacity:0.994" fill="#54bf87" d="M 554.5,392.5 C 551.893,401.321 548.893,409.988 545.5,418.5C 540.425,416.199 535.092,415.532 529.5,416.5C 528.167,415.833 526.833,415.167 525.5,414.5C 516.999,414.733 508.666,416.4 500.5,419.5C 499.914,419.291 499.414,418.957 499,418.5C 495.294,420.739 491.294,422.406 487,423.5C 486.228,423.355 485.561,423.022 485,422.5C 480.686,424.66 476.186,426.327 471.5,427.5C 479.182,420.038 486.515,413.038 493.5,406.5C 494.609,406.443 495.609,406.11 496.5,405.5C 505.311,404.048 513.644,401.215 521.5,397C 527.633,396.22 533.633,394.887 539.5,393C 544.489,392.501 549.489,392.334 554.5,392.5 Z"/></g>
<g><path style="opacity:1" fill="#45ab7b" d="M 446.5,396.5 C 443.876,399.158 441.209,401.825 438.5,404.5C 436.372,405.957 434.038,406.957 431.5,407.5C 425.803,409.171 420.136,411.171 414.5,413.5C 413.914,413.291 413.414,412.957 413,412.5C 402.555,417.15 392.055,421.483 381.5,425.5C 384.833,422.5 388.167,419.5 391.5,416.5C 393.229,415.883 394.729,414.883 396,413.5C 396.383,414.056 396.883,414.389 397.5,414.5C 413.328,408.212 429.661,402.212 446.5,396.5 Z"/></g>
<g><path style="opacity:0.981" fill="#59bb69" d="M 191.5,384.5 C 181.581,397.33 172.914,410.996 165.5,425.5C 140.5,449.833 115.833,474.5 91.5,499.5C 89.0002,496.506 87.0002,493.173 85.5,489.5C 120.833,454.5 156.167,419.5 191.5,384.5 Z"/></g>
<g><path style="opacity:1" fill="#41a578" d="M 422.5,394.5 C 421.375,396.129 420.041,397.629 418.5,399C 410.744,402.511 403.744,407.678 397.5,414.5C 396.883,414.389 396.383,414.056 396,413.5C 394.729,414.883 393.229,415.883 391.5,416.5C 372.564,424.163 353.898,432.163 335.5,440.5C 336.476,439.185 337.476,437.852 338.5,436.5C 347.825,429.503 357.158,422.503 366.5,415.5C 368.777,414.551 370.777,413.218 372.5,411.5C 376.961,410.944 381.294,409.777 385.5,408C 397.07,401.861 409.404,397.361 422.5,394.5 Z"/></g>
<g><path style="opacity:1" fill="#4cb281" d="M 475.5,398.5 C 472.574,401.317 469.574,404.151 466.5,407C 462.35,408.236 458.683,410.736 455.5,414.5C 453.816,415.527 452.149,416.527 450.5,417.5C 430.948,423.484 411.948,430.151 393.5,437.5C 399.833,432.167 406.167,426.833 412.5,421.5C 414.945,420.688 417.278,419.688 419.5,418.5C 423.46,416.909 427.46,415.243 431.5,413.5C 432.167,413.833 432.833,414.167 433.5,414.5C 442.117,411.408 450.45,407.742 458.5,403.5C 459.086,403.709 459.586,404.043 460,404.5C 464.737,401.42 469.904,399.42 475.5,398.5 Z"/></g>
<g><path style="opacity:1" fill="#50b884" d="M 503.5,398.5 C 503.141,400.371 502.141,401.871 500.5,403C 498.68,403.2 497.347,404.034 496.5,405.5C 495.609,406.11 494.609,406.443 493.5,406.5C 490.351,408.152 487.184,409.819 484,411.5C 476.196,412.323 468.696,414.823 461.5,419C 455.283,421.304 448.949,423.137 442.5,424.5C 445.167,422.167 447.833,419.833 450.5,417.5C 452.149,416.527 453.816,415.527 455.5,414.5C 459.127,413.571 462.793,412.737 466.5,412C 479.29,407.901 491.624,403.401 503.5,398.5 Z"/></g>
<g><path style="opacity:0.933" fill="#35a56d" d="M 595.5,402.5 C 595.5,416.833 595.5,431.167 595.5,445.5C 593.237,454.016 589.904,462.016 585.5,469.5C 585.5,457.833 585.5,446.167 585.5,434.5C 588.665,423.678 591.998,413.011 595.5,402.5 Z"/></g>
<g><path style="opacity:1" fill="#54b887" d="M 493.5,406.5 C 486.515,413.038 479.182,420.038 471.5,427.5C 470.603,428.598 469.77,428.598 469,427.5C 467.955,428.373 467.122,429.373 466.5,430.5C 465.391,430.557 464.391,430.89 463.5,431.5C 456.743,433.919 449.91,436.253 443,438.5C 442.228,438.355 441.561,438.022 441,437.5C 434.972,441.079 428.639,443.079 422,443.5C 418.995,445.002 415.829,446.002 412.5,446.5C 421.096,440.579 429.429,434.245 437.5,427.5C 438.397,426.402 439.23,426.402 440,427.5C 441.045,426.627 441.878,425.627 442.5,424.5C 448.949,423.137 455.283,421.304 461.5,419C 468.696,414.823 476.196,412.323 484,411.5C 487.184,409.819 490.351,408.152 493.5,406.5 Z"/></g>
<g><path style="opacity:1" fill="#48ab7e" d="M 431.5,407.5 C 427.553,411.109 423.553,414.776 419.5,418.5C 417.278,419.688 414.945,420.688 412.5,421.5C 399.602,425.95 386.935,430.95 374.5,436.5C 373.914,436.291 373.414,435.957 373,435.5C 369.044,437.418 365.21,439.418 361.5,441.5C 362.81,439.852 364.143,438.186 365.5,436.5C 369.766,434.546 373.433,431.879 376.5,428.5C 378.184,427.473 379.851,426.473 381.5,425.5C 392.055,421.483 402.555,417.15 413,412.5C 413.414,412.957 413.914,413.291 414.5,413.5C 420.136,411.171 425.803,409.171 431.5,407.5 Z"/></g>
<g><path style="opacity:0.991" fill="#33946c" d="M 302.5,413.5 C 299.729,415.767 297.062,418.267 294.5,421C 287.392,425.106 280.059,428.772 272.5,432C 260.849,434.488 249.183,434.988 237.5,433.5C 238.167,429.5 238.833,425.5 239.5,421.5C 244.414,421.569 249.248,422.236 254,423.5C 259.608,421.393 265.275,421.059 271,422.5C 281.644,420.047 292.144,417.047 302.5,413.5 Z"/></g>
<g><path style="opacity:0.995" fill="#3b9972" d="M 338.5,414.5 C 330.954,422.175 322.288,428.675 312.5,434C 310.937,434.759 309.937,435.926 309.5,437.5C 306.347,439.55 303.014,441.216 299.5,442.5C 278.238,450.317 256.572,451.983 234.5,447.5C 235.385,443.712 236.385,440.046 237.5,436.5C 245.083,436.327 252.583,436.993 260,438.5C 263.783,438.471 267.45,437.804 271,436.5C 273.903,437.939 276.57,437.606 279,435.5C 279.772,435.645 280.439,435.978 281,436.5C 289.463,432.68 298.296,429.846 307.5,428C 309.783,426.129 312.283,424.629 315,423.5C 315.414,423.957 315.914,424.291 316.5,424.5C 323.62,420.717 330.953,417.384 338.5,414.5 Z"/></g>
<g><path style="opacity:0.983" fill="#5ac28c" d="M 545.5,418.5 C 542.716,426.734 539.383,434.734 535.5,442.5C 529.342,440.042 523.008,439.375 516.5,440.5C 512.088,439.385 507.588,438.718 503,438.5C 499.568,438.33 496.401,438.996 493.5,440.5C 496.709,435.802 500.876,432.135 506,429.5C 506.333,429.833 506.667,430.167 507,430.5C 511.861,424.985 517.695,420.818 524.5,418C 511.368,417.907 498.868,420.741 487,426.5C 481.724,426.612 476.558,427.945 471.5,430.5C 469.872,429.465 468.205,429.465 466.5,430.5C 467.122,429.373 467.955,428.373 469,427.5C 469.77,428.598 470.603,428.598 471.5,427.5C 476.186,426.327 480.686,424.66 485,422.5C 485.561,423.022 486.228,423.355 487,423.5C 491.294,422.406 495.294,420.739 499,418.5C 499.414,418.957 499.914,419.291 500.5,419.5C 508.666,416.4 516.999,414.733 525.5,414.5C 526.833,415.167 528.167,415.833 529.5,416.5C 535.092,415.532 540.425,416.199 545.5,418.5 Z"/></g>
<g><path style="opacity:1" fill="#45a57b" d="M 391.5,416.5 C 388.167,419.5 384.833,422.5 381.5,425.5C 379.851,426.473 378.184,427.473 376.5,428.5C 363.718,433.041 351.051,438.541 338.5,445C 331.689,447.199 325.022,449.699 318.5,452.5C 321.545,449.453 324.878,446.787 328.5,444.5C 330.969,443.431 333.302,442.098 335.5,440.5C 353.898,432.163 372.564,424.163 391.5,416.5 Z"/></g>
<g><path style="opacity:1" fill="#50b284" d="M 450.5,417.5 C 447.833,419.833 445.167,422.167 442.5,424.5C 441.878,425.627 441.045,426.627 440,427.5C 439.23,426.402 438.397,426.402 437.5,427.5C 430.891,429.423 424.224,431.257 417.5,433C 412.361,436.491 406.861,438.325 401,438.5C 394.449,440.941 388.116,443.941 382,447.5C 381.617,446.944 381.117,446.611 380.5,446.5C 382.806,444.861 384.806,442.861 386.5,440.5C 388.716,439.797 390.549,438.464 392,436.5C 392.383,437.056 392.883,437.389 393.5,437.5C 411.948,430.151 430.948,423.484 450.5,417.5 Z"/></g>
<g><path style="opacity:1" fill="#5abe8c" d="M 493.5,440.5 C 491.265,440.205 489.265,440.539 487.5,441.5C 470.28,445.677 452.946,449.344 435.5,452.5C 444.882,445.436 454.215,438.436 463.5,431.5C 464.391,430.89 465.391,430.557 466.5,430.5C 468.205,429.465 469.872,429.465 471.5,430.5C 476.558,427.945 481.724,426.612 487,426.5C 498.868,420.741 511.368,417.907 524.5,418C 517.695,420.818 511.861,424.985 507,430.5C 506.667,430.167 506.333,429.833 506,429.5C 500.876,432.135 496.709,435.802 493.5,440.5 Z"/></g>
<g><path style="opacity:0.999" fill="#419f78" d="M 366.5,415.5 C 357.158,422.503 347.825,429.503 338.5,436.5C 337.476,437.852 336.476,439.185 335.5,440.5C 333.302,442.098 330.969,443.431 328.5,444.5C 327.85,444.196 327.183,443.863 326.5,443.5C 316.752,448.397 307.085,452.564 297.5,456C 289.962,456.774 282.628,458.441 275.5,461C 265.35,461.724 255.183,462.224 245,462.5C 240.647,460.786 236.147,459.786 231.5,459.5C 231.5,458.833 231.833,458.5 232.5,458.5C 237.414,458.569 242.248,459.236 247,460.5C 251.169,458.317 255.502,457.984 260,459.5C 265.417,456.904 270.917,455.404 276.5,455C 281.778,451.865 287.445,449.532 293.5,448C 295.696,446.301 297.696,444.467 299.5,442.5C 303.014,441.216 306.347,439.55 309.5,437.5C 315.441,435.576 321.441,433.743 327.5,432C 337.697,427.992 347.863,423.159 358,417.5C 358.333,417.833 358.667,418.167 359,418.5C 361.45,417.358 363.95,416.358 366.5,415.5 Z"/></g>
<g><path style="opacity:1" fill="#4dab81" d="M 412.5,421.5 C 406.167,426.833 399.833,432.167 393.5,437.5C 392.883,437.389 392.383,437.056 392,436.5C 390.549,438.464 388.716,439.797 386.5,440.5C 368.414,447.861 350.414,455.528 332.5,463.5C 340.204,456.138 348.537,449.471 357.5,443.5C 358.605,442.4 359.938,441.733 361.5,441.5C 365.21,439.418 369.044,437.418 373,435.5C 373.414,435.957 373.914,436.291 374.5,436.5C 386.935,430.95 399.602,425.95 412.5,421.5 Z"/></g>
<g><path style="opacity:0.982" fill="#55ba65" d="M 165.5,425.5 C 160.753,436.752 156.419,448.086 152.5,459.5C 134.5,476.833 116.833,494.5 99.5,512.5C 96.5857,508.342 93.9191,504.009 91.5,499.5C 115.833,474.5 140.5,449.833 165.5,425.5 Z"/></g>
<g><path style="opacity:1" fill="#54b287" d="M 437.5,427.5 C 429.429,434.245 421.096,440.579 412.5,446.5C 411.167,447.167 409.833,447.833 408.5,448.5C 391.786,455.339 375.119,461.672 358.5,467.5C 349.649,470.404 349.315,469.57 357.5,465C 360.179,460.823 363.845,457.823 368.5,456C 370.706,453.963 372.706,451.797 374.5,449.5C 376.5,448.5 378.5,447.5 380.5,446.5C 381.117,446.611 381.617,446.944 382,447.5C 388.116,443.941 394.449,440.941 401,438.5C 406.861,438.325 412.361,436.491 417.5,433C 424.224,431.257 430.891,429.423 437.5,427.5 Z"/></g>
<g><path style="opacity:1" fill="#48a57d" d="M 376.5,428.5 C 373.433,431.879 369.766,434.546 365.5,436.5C 364.143,438.186 362.81,439.852 361.5,441.5C 359.938,441.733 358.605,442.4 357.5,443.5C 355.956,443.703 354.622,444.37 353.5,445.5C 352.914,445.291 352.414,444.957 352,444.5C 339.211,451.676 326.211,457.676 313,462.5C 312.667,462.167 312.333,461.833 312,461.5C 306.99,463.839 301.99,466.172 297,468.5C 296.329,467.748 295.496,467.414 294.5,467.5C 299.824,463.837 305.157,460.17 310.5,456.5C 311.117,456.611 311.617,456.944 312,457.5C 313.758,455.235 315.925,453.568 318.5,452.5C 325.022,449.699 331.689,447.199 338.5,445C 351.051,438.541 363.718,433.041 376.5,428.5 Z"/></g>
<g><path style="opacity:1" fill="#5ab88c" d="M 463.5,431.5 C 454.215,438.436 444.882,445.436 435.5,452.5C 433.216,452.975 431.216,453.975 429.5,455.5C 421.137,457.731 412.803,460.397 404.5,463.5C 403.914,463.291 403.414,462.957 403,462.5C 396.498,464.531 390.331,467.197 384.5,470.5C 383.893,470.376 383.56,470.043 383.5,469.5C 383.414,468.504 383.748,467.671 384.5,467C 391.891,461.277 399.557,455.944 407.5,451C 408.252,450.329 408.586,449.496 408.5,448.5C 409.833,447.833 411.167,447.167 412.5,446.5C 415.829,446.002 418.995,445.002 422,443.5C 428.639,443.079 434.972,441.079 441,437.5C 441.561,438.022 442.228,438.355 443,438.5C 449.91,436.253 456.743,433.919 463.5,431.5 Z"/></g>
<g><path style="opacity:0.989" fill="#60c391" d="M 535.5,442.5 C 531.833,449.833 528.167,457.167 524.5,464.5C 518.084,461.125 511.417,459.459 504.5,459.5C 498.594,459.009 492.761,458.343 487,457.5C 485.135,459.673 482.969,460.007 480.5,458.5C 473.84,459.499 467.174,460.499 460.5,461.5C 470.111,455.02 479.777,448.52 489.5,442C 488.906,441.536 488.239,441.369 487.5,441.5C 489.265,440.539 491.265,440.205 493.5,440.5C 496.401,438.996 499.568,438.33 503,438.5C 507.588,438.718 512.088,439.385 516.5,440.5C 523.008,439.375 529.342,440.042 535.5,442.5 Z"/></g>
<g><path style="opacity:0.925" fill="#3ba973" d="M 585.5,434.5 C 585.5,446.167 585.5,457.833 585.5,469.5C 583.874,475.419 581.207,480.753 577.5,485.5C 577.5,475.5 577.5,465.5 577.5,455.5C 579.792,448.28 582.459,441.28 585.5,434.5 Z"/></g>
<g><path style="opacity:1" fill="#50ab84" d="M 386.5,440.5 C 384.806,442.861 382.806,444.861 380.5,446.5C 378.5,447.5 376.5,448.5 374.5,449.5C 355.968,457.271 337.635,465.271 319.5,473.5C 321.146,471.188 323.146,469.188 325.5,467.5C 327.969,466.431 330.302,465.098 332.5,463.5C 350.414,455.528 368.414,447.861 386.5,440.5 Z"/></g>
<g><path style="opacity:1" fill="#60be91" d="M 487.5,441.5 C 488.239,441.369 488.906,441.536 489.5,442C 479.777,448.52 470.111,455.02 460.5,461.5C 460.167,461.5 459.833,461.5 459.5,461.5C 442.023,465.15 424.356,469.15 406.5,473.5C 414.348,467.741 422.015,461.741 429.5,455.5C 431.216,453.975 433.216,452.975 435.5,452.5C 452.946,449.344 470.28,445.677 487.5,441.5 Z"/></g>
<g><path style="opacity:0.996" fill="#459f7b" d="M 328.5,444.5 C 324.878,446.787 321.545,449.453 318.5,452.5C 315.925,453.568 313.758,455.235 312,457.5C 311.617,456.944 311.117,456.611 310.5,456.5C 305.126,457.235 300.293,459.235 296,462.5C 295.586,462.043 295.086,461.709 294.5,461.5C 289.296,463.017 284.129,464.684 279,466.5C 278.127,466.265 277.293,465.931 276.5,465.5C 273.032,466.6 269.532,467.6 266,468.5C 259.966,468.247 253.966,468.247 248,468.5C 242.121,467.294 236.288,466.294 230.5,465.5C 230.833,463.5 231.167,461.5 231.5,459.5C 236.147,459.786 240.647,460.786 245,462.5C 255.183,462.224 265.35,461.724 275.5,461C 282.628,458.441 289.962,456.774 297.5,456C 307.085,452.564 316.752,448.397 326.5,443.5C 327.183,443.863 327.85,444.196 328.5,444.5 Z"/></g>
<g><path style="opacity:0.998" fill="#4da581" d="M 357.5,443.5 C 348.537,449.471 340.204,456.138 332.5,463.5C 330.302,465.098 327.969,466.431 325.5,467.5C 305.988,475.192 285.655,481.358 264.5,486C 254.171,486.034 243.838,485.701 233.5,485C 230.555,483.869 227.555,483.036 224.5,482.5C 224.557,481.391 224.89,480.391 225.5,479.5C 230.913,480.459 236.413,481.126 242,481.5C 246.829,480.452 251.662,480.286 256.5,481C 269.451,478.059 282.117,473.559 294.5,467.5C 295.496,467.414 296.329,467.748 297,468.5C 301.99,466.172 306.99,463.839 312,461.5C 312.333,461.833 312.667,462.167 313,462.5C 326.211,457.676 339.211,451.676 352,444.5C 352.414,444.957 352.914,445.291 353.5,445.5C 354.622,444.37 355.956,443.703 357.5,443.5 Z"/></g>
<g><path style="opacity:1" fill="#5ab18d" d="M 408.5,448.5 C 408.586,449.496 408.252,450.329 407.5,451C 399.557,455.944 391.891,461.277 384.5,467C 383.748,467.671 383.414,468.504 383.5,469.5C 381.142,470.874 378.808,472.207 376.5,473.5C 352.073,483.879 327.739,494.545 303.5,505.5C 314.961,496.265 326.628,487.265 338.5,478.5C 344.928,474.289 351.594,470.622 358.5,467.5C 375.119,461.672 391.786,455.339 408.5,448.5 Z"/></g>
<g><path style="opacity:1" fill="#54ab87" d="M 374.5,449.5 C 372.706,451.797 370.706,453.963 368.5,456C 363.845,457.823 360.179,460.823 357.5,465C 349.315,469.57 349.649,470.404 358.5,467.5C 351.594,470.622 344.928,474.289 338.5,478.5C 337.504,478.586 336.671,478.252 336,477.5C 315.096,489.569 292.262,497.235 267.5,500.5C 282.511,494.995 296.844,487.828 310.5,479C 312.295,475.289 315.295,473.455 319.5,473.5C 337.635,465.271 355.968,457.271 374.5,449.5 Z"/></g>
<g><path style="opacity:0.989" fill="#409b76" d="M 299.5,442.5 C 297.696,444.467 295.696,446.301 293.5,448C 287.445,449.532 281.778,451.865 276.5,455C 270.917,455.404 265.417,456.904 260,459.5C 255.502,457.984 251.169,458.317 247,460.5C 242.248,459.236 237.414,458.569 232.5,458.5C 233.008,454.803 233.674,451.136 234.5,447.5C 256.572,451.983 278.238,450.317 299.5,442.5 Z"/></g>
<g><path style="opacity:1" fill="#61b892" d="M 429.5,455.5 C 422.015,461.741 414.348,467.741 406.5,473.5C 403.06,476.142 399.06,478.808 394.5,481.5C 388.633,482.77 382.966,484.603 377.5,487C 363.838,493.344 350.504,499.511 337.5,505.5C 338.167,504.5 338.833,503.5 339.5,502.5C 352.123,493.211 364.457,483.544 376.5,473.5C 378.808,472.207 381.142,470.874 383.5,469.5C 383.56,470.043 383.893,470.376 384.5,470.5C 390.331,467.197 396.498,464.531 403,462.5C 403.414,462.957 403.914,463.291 404.5,463.5C 412.803,460.397 421.137,457.731 429.5,455.5 Z"/></g>
<g><path style="opacity:0.992" fill="#49a07e" d="M 310.5,456.5 C 305.157,460.17 299.824,463.837 294.5,467.5C 282.117,473.559 269.451,478.059 256.5,481C 251.662,480.286 246.829,480.452 242,481.5C 236.413,481.126 230.913,480.459 225.5,479.5C 227.179,474.748 228.846,470.082 230.5,465.5C 236.288,466.294 242.121,467.294 248,468.5C 253.966,468.247 259.966,468.247 266,468.5C 269.532,467.6 273.032,466.6 276.5,465.5C 277.293,465.931 278.127,466.265 279,466.5C 284.129,464.684 289.296,463.017 294.5,461.5C 295.086,461.709 295.586,462.043 296,462.5C 300.293,459.235 305.126,457.235 310.5,456.5 Z"/></g>
<g><path style="opacity:0.991" fill="#64c494" d="M 524.5,464.5 C 523.248,466.001 522.248,467.668 521.5,469.5C 516.314,468.16 511.314,466.327 506.5,464C 499.491,463.624 492.491,463.124 485.5,462.5C 475.644,463.725 465.811,465.058 456,466.5C 455.235,466.43 454.735,466.097 454.5,465.5C 456.754,464.876 458.421,463.543 459.5,461.5C 459.833,461.5 460.167,461.5 460.5,461.5C 467.174,460.499 473.84,459.499 480.5,458.5C 482.969,460.007 485.135,459.673 487,457.5C 492.761,458.343 498.594,459.009 504.5,459.5C 511.417,459.459 518.084,461.125 524.5,464.5 Z"/></g>
<g><path style="opacity:0.983" fill="#52ba62" d="M 152.5,459.5 C 151.739,464.437 150.405,469.103 148.5,473.5C 133.5,488.167 118.5,502.833 103.5,517.5C 101.937,516.055 100.604,514.389 99.5,512.5C 116.833,494.5 134.5,476.833 152.5,459.5 Z"/></g>
<g><path style="opacity:0.922" fill="#41ac78" d="M 577.5,455.5 C 577.5,465.5 577.5,475.5 577.5,485.5C 575.003,491.165 572.003,496.498 568.5,501.5C 568.5,492.5 568.5,483.5 568.5,474.5C 571.263,467.976 574.263,461.643 577.5,455.5 Z"/></g>
<g><path style="opacity:0.993" fill="#68c598" d="M 521.5,469.5 C 515.985,479.21 509.985,488.543 503.5,497.5C 495.276,494.222 486.942,491.222 478.5,488.5C 483.34,486.529 488.34,484.695 493.5,483C 488.515,480.908 483.349,480.408 478,481.5C 473,480.833 468,480.167 463,479.5C 460.727,481.184 458.06,481.518 455,480.5C 448.604,481.516 442.271,482.849 436,484.5C 432.546,483.727 429.046,483.727 425.5,484.5C 435.269,478.44 444.936,472.107 454.5,465.5C 454.735,466.097 455.235,466.43 456,466.5C 465.811,465.058 475.644,463.725 485.5,462.5C 492.491,463.124 499.491,463.624 506.5,464C 511.314,466.327 516.314,468.16 521.5,469.5 Z"/></g>
<g><path style="opacity:1" fill="#67be97" d="M 459.5,461.5 C 458.421,463.543 456.754,464.876 454.5,465.5C 444.936,472.107 435.269,478.44 425.5,484.5C 423.97,485.211 422.637,486.211 421.5,487.5C 412.999,487.67 404.999,489.67 397.5,493.5C 396.914,493.291 396.414,492.957 396,492.5C 385.962,496.312 376.462,500.312 367.5,504.5C 376.181,496.488 385.181,488.821 394.5,481.5C 399.06,478.808 403.06,476.142 406.5,473.5C 424.356,469.15 442.023,465.15 459.5,461.5 Z"/></g>
<g><path style="opacity:0.975" fill="#4fb95f" d="M 148.5,473.5 C 146.862,483.03 144.862,492.363 142.5,501.5C 132.5,510.833 122.833,520.5 113.5,530.5C 109.408,526.742 106.074,522.409 103.5,517.5C 118.5,502.833 133.5,488.167 148.5,473.5 Z"/></g>
<g><path style="opacity:1" fill="#60b192" d="M 376.5,473.5 C 364.457,483.544 352.123,493.211 339.5,502.5C 328.639,508.511 317.639,514.344 306.5,520C 297.779,522.862 289.446,526.529 281.5,531C 274.003,532.406 267.17,535.239 261,539.5C 260.586,539.043 260.086,538.709 259.5,538.5C 254.21,540.207 249.043,542.207 244,544.5C 235.9,543.536 227.733,543.536 219.5,544.5C 223.544,542.758 227.711,541.091 232,539.5C 235.916,539.8 239.749,539.8 243.5,539.5C 246.341,537.914 249.007,536.08 251.5,534C 255.352,533.407 259.019,532.24 262.5,530.5C 272.634,523.67 282.967,517.336 293.5,511.5C 296.466,509.012 299.799,507.012 303.5,505.5C 327.739,494.545 352.073,483.879 376.5,473.5 Z"/></g>
<g><path style="opacity:0.994" fill="#53a686" d="M 325.5,467.5 C 323.146,469.188 321.146,471.188 319.5,473.5C 315.295,473.455 312.295,475.289 310.5,479C 296.844,487.828 282.511,494.995 267.5,500.5C 265.906,500.92 264.406,501.586 263,502.5C 262.228,502.355 261.561,502.022 261,501.5C 256.111,502.653 251.111,503.32 246,503.5C 236.672,502.534 227.505,500.867 218.5,498.5C 220.305,493.084 222.305,487.751 224.5,482.5C 227.555,483.036 230.555,483.869 233.5,485C 243.838,485.701 254.171,486.034 264.5,486C 285.655,481.358 305.988,475.192 325.5,467.5 Z"/></g>
<g><path style="opacity:0.994" fill="#5aaa8c" d="M 338.5,478.5 C 326.628,487.265 314.961,496.265 303.5,505.5C 299.799,507.012 296.466,509.012 293.5,511.5C 284.357,513.795 275.024,516.462 265.5,519.5C 264.311,519.244 263.144,518.911 262,518.5C 248.866,522.468 235.699,522.801 222.5,519.5C 221.558,519.608 220.725,519.941 220,520.5C 216.854,518.174 213.354,516.841 209.5,516.5C 211.992,510.182 214.992,504.182 218.5,498.5C 227.505,500.867 236.672,502.534 246,503.5C 251.111,503.32 256.111,502.653 261,501.5C 261.561,502.022 262.228,502.355 263,502.5C 264.406,501.586 265.906,500.92 267.5,500.5C 292.262,497.235 315.096,489.569 336,477.5C 336.671,478.252 337.504,478.586 338.5,478.5 Z"/></g>
<g><path style="opacity:1" fill="#6bc49b" d="M 478.5,488.5 C 477.391,488.557 476.391,488.89 475.5,489.5C 471.642,488.988 467.809,488.322 464,487.5C 455.846,488.183 447.68,488.683 439.5,489C 430.218,490.114 421.218,491.614 412.5,493.5C 415.802,492.635 418.802,490.635 421.5,487.5C 422.637,486.211 423.97,485.211 425.5,484.5C 429.046,483.727 432.546,483.727 436,484.5C 442.271,482.849 448.604,481.516 455,480.5C 458.06,481.518 460.727,481.184 463,479.5C 468,480.167 473,480.833 478,481.5C 483.349,480.408 488.515,480.908 493.5,483C 488.34,484.695 483.34,486.529 478.5,488.5 Z"/></g>
<g><path style="opacity:1" fill="#67b898" d="M 394.5,481.5 C 385.181,488.821 376.181,496.488 367.5,504.5C 365.5,505.833 363.5,507.167 361.5,508.5C 358.327,509.17 355.327,510.336 352.5,512C 347.503,515.488 342.503,518.155 337.5,520C 329.673,525.158 321.839,530.325 314,535.5C 313.667,535.167 313.333,534.833 313,534.5C 306.862,539.149 300.362,543.149 293.5,546.5C 299.22,540.656 304.886,534.823 310.5,529C 314.633,525.869 318.466,522.369 322,518.5C 322.333,518.833 322.667,519.167 323,519.5C 326.038,516.631 328.871,513.631 331.5,510.5C 333.5,508.833 335.5,507.167 337.5,505.5C 350.504,499.511 363.838,493.344 377.5,487C 382.966,484.603 388.633,482.77 394.5,481.5 Z"/></g>
<g><path style="opacity:1" fill="#6bbe9b" d="M 421.5,487.5 C 418.802,490.635 415.802,492.635 412.5,493.5C 411.167,494.167 409.833,494.833 408.5,495.5C 405.119,495.427 402.119,496.427 399.5,498.5C 398.833,498.167 398.167,497.833 397.5,497.5C 382.964,503.383 368.631,509.717 354.5,516.5C 356.146,513.19 358.48,510.523 361.5,508.5C 363.5,507.167 365.5,505.833 367.5,504.5C 376.462,500.312 385.962,496.312 396,492.5C 396.414,492.957 396.914,493.291 397.5,493.5C 404.999,489.67 412.999,487.67 421.5,487.5 Z"/></g>
<g><path style="opacity:1" fill="#6ec49d" d="M 475.5,489.5 C 469.337,492.114 463.337,495.114 457.5,498.5C 456.292,499.234 454.959,499.567 453.5,499.5C 451.696,498.838 449.696,498.505 447.5,498.5C 439.801,499.395 432.134,500.395 424.5,501.5C 423.393,500.978 422.226,500.645 421,500.5C 412.424,503.686 403.591,506.019 394.5,507.5C 399.201,504.178 403.868,500.178 408.5,495.5C 409.833,494.833 411.167,494.167 412.5,493.5C 421.218,491.614 430.218,490.114 439.5,489C 447.68,488.683 455.846,488.183 464,487.5C 467.809,488.322 471.642,488.988 475.5,489.5 Z"/></g>
<g><path style="opacity:0.982" fill="#6ec89d" d="M 478.5,488.5 C 486.942,491.222 495.276,494.222 503.5,497.5C 501.238,502.09 498.238,506.09 494.5,509.5C 488.436,506.385 482.27,503.385 476,500.5C 475.439,501.022 474.772,501.355 474,501.5C 468.712,499.303 463.212,498.303 457.5,498.5C 463.337,495.114 469.337,492.114 475.5,489.5C 476.391,488.89 477.391,488.557 478.5,488.5 Z"/></g>
<g><path style="opacity:0.925" fill="#4ab17f" d="M 568.5,474.5 C 568.5,483.5 568.5,492.5 568.5,501.5C 564.313,508.554 559.647,515.221 554.5,521.5C 554.5,514.5 554.5,507.5 554.5,500.5C 559.183,491.799 563.849,483.132 568.5,474.5 Z"/></g>
<g><path style="opacity:1" fill="#6ebe9d" d="M 408.5,495.5 C 403.868,500.178 399.201,504.178 394.5,507.5C 392.5,508.833 390.5,510.167 388.5,511.5C 385.834,511.933 383.168,512.433 380.5,513C 372.65,516.426 364.983,520.093 357.5,524C 347.05,530.201 337.05,537.035 327.5,544.5C 332.453,536.881 338.453,530.214 345.5,524.5C 348.384,521.581 351.384,518.915 354.5,516.5C 368.631,509.717 382.964,503.383 397.5,497.5C 398.167,497.833 398.833,498.167 399.5,498.5C 402.119,496.427 405.119,495.427 408.5,495.5 Z"/></g>
<g><path style="opacity:1" fill="#72c4a0" d="M 453.5,499.5 C 447.999,501.747 442.999,504.747 438.5,508.5C 436.716,508.893 435.05,509.559 433.5,510.5C 417.85,509.944 402.85,512.944 388.5,519.5C 387.914,519.291 387.414,518.957 387,518.5C 382.675,522.079 377.842,524.746 372.5,526.5C 377.204,520.795 382.537,515.795 388.5,511.5C 390.5,510.167 392.5,508.833 394.5,507.5C 403.591,506.019 412.424,503.686 421,500.5C 422.226,500.645 423.393,500.978 424.5,501.5C 432.134,500.395 439.801,499.395 447.5,498.5C 449.696,498.505 451.696,498.838 453.5,499.5 Z"/></g>
<g><path style="opacity:0.987" fill="#72c9a1" d="M 457.5,498.5 C 463.212,498.303 468.712,499.303 474,501.5C 474.772,501.355 475.439,501.022 476,500.5C 482.27,503.385 488.436,506.385 494.5,509.5C 491.984,513.866 488.984,517.866 485.5,521.5C 478.806,517.634 471.806,514.467 464.5,512C 455.849,511.432 447.182,510.265 438.5,508.5C 442.999,504.747 447.999,501.747 453.5,499.5C 454.959,499.567 456.292,499.234 457.5,498.5 Z"/></g>
<g><path style="opacity:0.969" fill="#4cb85c" d="M 142.5,501.5 C 142.051,506.863 141.384,512.196 140.5,517.5C 133.167,524.167 126.167,531.167 119.5,538.5C 117.122,536.122 115.122,533.455 113.5,530.5C 122.833,520.5 132.5,510.833 142.5,501.5 Z"/></g>
<g><path style="opacity:0.996" fill="#64b094" d="M 339.5,502.5 C 338.833,503.5 338.167,504.5 337.5,505.5C 335.5,507.167 333.5,508.833 331.5,510.5C 327.642,512.347 323.808,514.347 320,516.5C 316.138,517.198 312.638,519.198 309.5,522.5C 305.605,524.298 301.605,525.798 297.5,527C 295.208,528.29 293.208,529.957 291.5,532C 281.332,535.417 271.665,539.917 262.5,545.5C 261.914,545.291 261.414,544.957 261,544.5C 240.486,554.286 219.319,557.453 197.5,554C 194.492,552.348 191.492,550.848 188.5,549.5C 190.846,546.129 193.179,542.796 195.5,539.5C 201.29,541.713 207.124,544.046 213,546.5C 214.897,544.984 217.064,544.317 219.5,544.5C 227.733,543.536 235.9,543.536 244,544.5C 249.043,542.207 254.21,540.207 259.5,538.5C 260.086,538.709 260.586,539.043 261,539.5C 267.17,535.239 274.003,532.406 281.5,531C 289.446,526.529 297.779,522.862 306.5,520C 317.639,514.344 328.639,508.511 339.5,502.5 Z"/></g>
<g><path style="opacity:0.999" fill="#6cb79b" d="M 361.5,508.5 C 358.48,510.523 356.146,513.19 354.5,516.5C 351.384,518.915 348.384,521.581 345.5,524.5C 344.504,524.586 343.671,524.252 343,523.5C 335.273,527.895 328.106,533.061 321.5,539C 319.754,539.471 318.087,540.138 316.5,541C 302.461,552.344 288.461,563.677 274.5,575C 270.659,580.004 266.659,584.837 262.5,589.5C 259.965,595.109 257.632,600.776 255.5,606.5C 254.833,606.5 254.167,606.5 253.5,606.5C 259.811,586.214 270.477,568.547 285.5,553.5C 288.141,551.196 290.808,548.862 293.5,546.5C 300.362,543.149 306.862,539.149 313,534.5C 313.333,534.833 313.667,535.167 314,535.5C 321.839,530.325 329.673,525.158 337.5,520C 342.503,518.155 347.503,515.488 352.5,512C 355.327,510.336 358.327,509.17 361.5,508.5 Z"/></g>
<g><path style="opacity:0.988" fill="#75c9a3" d="M 438.5,508.5 C 447.182,510.265 455.849,511.432 464.5,512C 471.806,514.467 478.806,517.634 485.5,521.5C 483.138,524.192 480.804,526.859 478.5,529.5C 461.823,518.894 443.489,514.894 423.5,517.5C 427.071,515.528 430.405,513.195 433.5,510.5C 435.05,509.559 436.716,508.893 438.5,508.5 Z"/></g>
<g><path style="opacity:0.988" fill="#67b197" d="M 331.5,510.5 C 328.871,513.631 326.038,516.631 323,519.5C 322.667,519.167 322.333,518.833 322,518.5C 318.466,522.369 314.633,525.869 310.5,529C 304.886,534.823 299.22,540.656 293.5,546.5C 290.808,548.862 288.141,551.196 285.5,553.5C 278.022,559.078 270.022,563.911 261.5,568C 255.127,574.042 248.46,579.708 241.5,585C 237.616,591.027 233.616,596.86 229.5,602.5C 206.365,599.513 185.198,591.513 166,578.5C 165.333,577.5 165.333,576.5 166,575.5C 174.112,567.231 181.612,558.565 188.5,549.5C 191.492,550.848 194.492,552.348 197.5,554C 219.319,557.453 240.486,554.286 261,544.5C 261.414,544.957 261.914,545.291 262.5,545.5C 271.665,539.917 281.332,535.417 291.5,532C 293.208,529.957 295.208,528.29 297.5,527C 301.605,525.798 305.605,524.298 309.5,522.5C 312.638,519.198 316.138,517.198 320,516.5C 323.808,514.347 327.642,512.347 331.5,510.5 Z"/></g>
<g><path style="opacity:1" fill="#75c4a3" d="M 433.5,510.5 C 430.405,513.195 427.071,515.528 423.5,517.5C 422.609,518.11 421.609,518.443 420.5,518.5C 420.083,517.876 419.416,517.543 418.5,517.5C 407.59,520.409 396.59,523.243 385.5,526C 379.609,530.113 373.276,533.446 366.5,536C 363.938,538.733 361.271,541.233 358.5,543.5C 359.875,538.043 362.875,533.709 367.5,530.5C 369.167,529.167 370.833,527.833 372.5,526.5C 377.842,524.746 382.675,522.079 387,518.5C 387.414,518.957 387.914,519.291 388.5,519.5C 402.85,512.944 417.85,509.944 433.5,510.5 Z"/></g>
<g><path style="opacity:0.99" fill="#60ad91" d="M 293.5,511.5 C 282.967,517.336 272.634,523.67 262.5,530.5C 259.019,532.24 255.352,533.407 251.5,534C 249.007,536.08 246.341,537.914 243.5,539.5C 239.749,539.8 235.916,539.8 232,539.5C 227.711,541.091 223.544,542.758 219.5,544.5C 217.064,544.317 214.897,544.984 213,546.5C 207.124,544.046 201.29,541.713 195.5,539.5C 200.201,531.811 204.868,524.144 209.5,516.5C 213.354,516.841 216.854,518.174 220,520.5C 220.725,519.941 221.558,519.608 222.5,519.5C 235.699,522.801 248.866,522.468 262,518.5C 263.144,518.911 264.311,519.244 265.5,519.5C 275.024,516.462 284.357,513.795 293.5,511.5 Z"/></g>
<g><path style="opacity:0.998" fill="#72bda1" d="M 388.5,511.5 C 382.537,515.795 377.204,520.795 372.5,526.5C 370.833,527.833 369.167,529.167 367.5,530.5C 366.85,530.196 366.183,529.863 365.5,529.5C 362.632,531.532 359.632,533.365 356.5,535C 345.322,545.176 333.822,555.009 322,564.5C 316.913,572.341 311.58,580.008 306,587.5C 302.385,594.407 300.219,601.74 299.5,609.5C 298.5,609.5 297.5,609.5 296.5,609.5C 297.645,604.243 298.479,598.909 299,593.5C 303.758,581.981 309.091,570.647 315,559.5C 319.664,554.788 323.831,549.788 327.5,544.5C 337.05,537.035 347.05,530.201 357.5,524C 364.983,520.093 372.65,516.426 380.5,513C 383.168,512.433 385.834,511.933 388.5,511.5 Z"/></g>
<g><path style="opacity:0.99" fill="#79caa7" d="M 478.5,529.5 C 471.833,536.833 464.833,543.833 457.5,550.5C 448.288,543.471 437.788,539.471 426,538.5C 417.156,538.149 408.323,538.649 399.5,540C 395.986,541.604 392.319,542.771 388.5,543.5C 389.111,541.225 390.445,539.559 392.5,538.5C 398.359,533.473 404.359,528.64 410.5,524C 413.74,521.909 417.074,520.076 420.5,518.5C 421.609,518.443 422.609,518.11 423.5,517.5C 443.489,514.894 461.823,518.894 478.5,529.5 Z"/></g>
<g><path style="opacity:0.945" fill="#48b758" d="M 140.5,517.5 C 138.834,530.161 137.167,542.827 135.5,555.5C 129.474,550.415 124.141,544.749 119.5,538.5C 126.167,531.167 133.167,524.167 140.5,517.5 Z"/></g>
<g><path style="opacity:0.998" fill="#79c3a6" d="M 420.5,518.5 C 417.074,520.076 413.74,521.909 410.5,524C 404.359,528.64 398.359,533.473 392.5,538.5C 388.638,539.428 384.971,540.928 381.5,543C 374.21,547.9 367.376,553.4 361,559.5C 360.069,561.459 359.236,563.459 358.5,565.5C 353.748,571.404 349.248,577.404 345,583.5C 343.71,590.698 341.877,598.364 339.5,606.5C 337.5,606.833 335.5,607.167 333.5,607.5C 334.661,599.549 335.495,591.549 336,583.5C 338.479,577.565 340.646,571.565 342.5,565.5C 345.772,560.008 349.272,554.675 353,549.5C 353.483,548.552 353.649,547.552 353.5,546.5C 355.354,545.759 357.021,544.759 358.5,543.5C 361.271,541.233 363.938,538.733 366.5,536C 373.276,533.446 379.609,530.113 385.5,526C 396.59,523.243 407.59,520.409 418.5,517.5C 419.416,517.543 420.083,517.876 420.5,518.5 Z"/></g>
<g><path style="opacity:0.891" fill="#57b88a" d="M 554.5,500.5 C 554.5,507.5 554.5,514.5 554.5,521.5C 548.551,529.783 541.884,537.45 534.5,544.5C 534.5,539.833 534.5,535.167 534.5,530.5C 541.592,520.749 548.259,510.749 554.5,500.5 Z"/></g>
<g><path style="opacity:0.994" fill="#6fb89e" d="M 345.5,524.5 C 338.453,530.214 332.453,536.881 327.5,544.5C 323.831,549.788 319.664,554.788 315,559.5C 309.091,570.647 303.758,581.981 299,593.5C 298.479,598.909 297.645,604.243 296.5,609.5C 282.855,608.793 269.188,607.793 255.5,606.5C 257.632,600.776 259.965,595.109 262.5,589.5C 266.659,584.837 270.659,580.004 274.5,575C 288.461,563.677 302.461,552.344 316.5,541C 318.087,540.138 319.754,539.471 321.5,539C 328.106,533.061 335.273,527.895 343,523.5C 343.671,524.252 344.504,524.586 345.5,524.5 Z"/></g>
<g><path style="opacity:0.989" fill="#75bea3" d="M 367.5,530.5 C 362.875,533.709 359.875,538.043 358.5,543.5C 357.021,544.759 355.354,545.759 353.5,546.5C 348.873,549.653 344.873,553.486 341.5,558C 340.167,558.667 338.833,559.333 337.5,560C 334.158,563.708 330.992,567.541 328,571.5C 324.418,579.003 320.085,586.003 315,592.5C 313.257,597.717 312.09,603.05 311.5,608.5C 307.702,609.483 303.702,609.817 299.5,609.5C 300.219,601.74 302.385,594.407 306,587.5C 311.58,580.008 316.913,572.341 322,564.5C 333.822,555.009 345.322,545.176 356.5,535C 359.632,533.365 362.632,531.532 365.5,529.5C 366.183,529.863 366.85,530.196 367.5,530.5 Z"/></g>
<g><path style="opacity:0.864" fill="#60bd92" d="M 534.5,530.5 C 534.5,535.167 534.5,539.833 534.5,544.5C 531.833,547.833 528.833,550.833 525.5,553.5C 525.5,549.833 525.5,546.167 525.5,542.5C 528.512,538.462 531.512,534.462 534.5,530.5 Z"/></g>
<g><path style="opacity:0.987" fill="#7fcaac" d="M 457.5,550.5 C 432.519,573 403.852,589.333 371.5,599.5C 371.808,593.575 371.475,587.741 370.5,582C 373.119,574.783 375.452,567.116 377.5,559C 380.139,554.421 383.139,550.088 386.5,546C 385.849,544.692 386.515,543.859 388.5,543.5C 392.319,542.771 395.986,541.604 399.5,540C 408.323,538.649 417.156,538.149 426,538.5C 437.788,539.471 448.288,543.471 457.5,550.5 Z"/></g>
<g><path style="opacity:0.992" fill="#78c0a5" d="M 353.5,546.5 C 353.649,547.552 353.483,548.552 353,549.5C 349.272,554.675 345.772,560.008 342.5,565.5C 340.646,571.565 338.479,577.565 336,583.5C 335.495,591.549 334.661,599.549 333.5,607.5C 326.196,608.302 318.862,608.635 311.5,608.5C 312.09,603.05 313.257,597.717 315,592.5C 320.085,586.003 324.418,579.003 328,571.5C 330.992,567.541 334.158,563.708 337.5,560C 338.833,559.333 340.167,558.667 341.5,558C 344.873,553.486 348.873,549.653 353.5,546.5 Z"/></g>
<g><path style="opacity:0.985" fill="#7dc5aa" d="M 392.5,538.5 C 390.445,539.559 389.111,541.225 388.5,543.5C 386.515,543.859 385.849,544.692 386.5,546C 383.139,550.088 380.139,554.421 377.5,559C 375.452,567.116 373.119,574.783 370.5,582C 371.475,587.741 371.808,593.575 371.5,599.5C 361.048,602.779 350.382,605.113 339.5,606.5C 341.877,598.364 343.71,590.698 345,583.5C 349.248,577.404 353.748,571.404 358.5,565.5C 359.236,563.459 360.069,561.459 361,559.5C 367.376,553.4 374.21,547.9 381.5,543C 384.971,540.928 388.638,539.428 392.5,538.5 Z"/></g>
<g><path style="opacity:0.842" fill="#6bc49b" d="M 525.5,542.5 C 525.5,546.167 525.5,549.833 525.5,553.5C 516.785,561.701 507.451,569.201 497.5,576C 496.241,576.982 494.908,577.315 493.5,577C 504.997,566.092 515.663,554.592 525.5,542.5 Z"/></g>
<g><path style="opacity:0.986" fill="#6bb49a" d="M 285.5,553.5 C 270.477,568.547 259.811,586.214 253.5,606.5C 245.268,605.795 237.268,604.461 229.5,602.5C 233.616,596.86 237.616,591.027 241.5,585C 248.46,579.708 255.127,574.042 261.5,568C 270.022,563.911 278.022,559.078 285.5,553.5 Z"/></g>
</svg>

After

Width:  |  Height:  |  Size: 70 KiB

View File

@@ -1,5 +1,10 @@
# Leaf license
Leaf inherits licenses from upstream projects.
Paperweight files are licensed under [MIT](https://opensource.org/licenses/MIT) (included in `license/MIT.txt`).
Patches are licensed under MIT, unless indicated differently in their header (some patches are licensed under [GPL-3.0](https://www.gnu.org/licenses/gpl-3.0.html) (included in `license/GPL-3.0.txt`) or [LGPL-3.0](https://www.gnu.org/licenses/lgpl-3.0.html) (included in `license/LGPL-3.0.txt`)).
Patches are licensed under MIT, unless indicated differently in their header (some patches are licensed under [GPL-3.0](https://www.gnu.org/licenses/gpl-3.0.html) (included in `license/GPL-3.0.txt`), [LGPL-3.0](https://www.gnu.org/licenses/lgpl-3.0.html) (included in `license/LGPL-3.0.txt`), or [Apache-2.0](https://www.apache.org/licenses/) (included in `license/Apache-2.0.txt`)).
Certain patches are derived from other projects and retain the original licenses, as noted in the patch header.
Binaries are licensed under GPL-3.0.
Also see [PaperMC/Paper](https://github.com/PaperMC/Paper), [PaperMC/paperweight](https://github.com/PaperMC/paperweight), and the repositories of other dependencies used by this project for their respective licenses.

View File

@@ -17,7 +17,7 @@
## 🍃 Features
- **Based on [Gale](https://github.com/Dreeam-qwq/Gale)** for better performance
- **Async** pathfinding, mob spawning and entity tracker
- **Various optimizations** blending from [other forks](https://github.com/Winds-Studio/Leaf#-credits) and our own
- **Various optimizations** blending from [other forks](#-credits) and our own
- **Fully compatible** with Spigot and Paper plugins
- **Latest dependencies**, keeping all dependencies up-to-date
- **Allows all characters in usernames**, including Chinese and other characters
@@ -87,11 +87,9 @@ java {
```
## ⚖️ License
Paperweight files are licensed under [MIT](licenses/MIT.txt).
Patches are licensed under [MIT](licenses/MIT.txt), unless indicated differently in their header.
Binaries are licensed under [GPL-3.0](licenses/GPL-3.0.txt).
Leaf is licensed under multiple open source licenses depending on upstream projects and other materials,
Also see [PaperMC/Paper](https://github.com/PaperMC/Paper) and [PaperMC/paperweight](https://github.com/PaperMC/paperweight) for the licenses of some materials used by this project.
see [LICENSE.md](LICENSE.md) for full license information.
## 📜 Credits
Thanks to these projects below. Leaf includes some patches taken from them.<br>

View File

@@ -28,7 +28,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
along with this program. If not, see <https://www.gnu.org/licenses/>.
diff --git a/src/main/java/net/minecraft/world/entity/ai/behavior/PoiCompetitorScan.java b/src/main/java/net/minecraft/world/entity/ai/behavior/PoiCompetitorScan.java
index 7302d397d39d8400527ab2da4adaf8d792256749..faeb1d42d8361c02b63e33059edaeff78e719c71 100644

View File

@@ -3,6 +3,7 @@ From: Taiyou06 <kaandindar21@gmail.com>
Date: Tue, 9 Nov 2077 00:00:00 +0800
Subject: [PATCH] Collect then startEachNonRunningBehavior in Brain
Removed since Leaf 1.21.4, replaced by Cache potential behaviors in Brain patch
diff --git a/net/minecraft/world/entity/ai/Brain.java b/net/minecraft/world/entity/ai/Brain.java
index c561b749fb9b76ba9b1e9689089b743248c65d50..ea6c8e85ccff67b1c24109732f74f1e8199cad07 100644

View File

@@ -3,19 +3,20 @@ From: hayanesuru <hayanesuru@outlook.jp>
Date: Wed, 4 Jun 2025 20:54:32 +0900
Subject: [PATCH] preload mob spawning position
No need
diff --git a/net/minecraft/world/level/NaturalSpawner.java b/net/minecraft/world/level/NaturalSpawner.java
index 762bdf1fe19546f89d34b9efdad66b00dab80006..0443df34de4f940f64e563ea76453493cadf200b 100644
index 458b17dca84c87591b030679c5aac6259c0f8308..c69922ac2b831d8af35c9e98a34825e6b8a268da 100644
--- a/net/minecraft/world/level/NaturalSpawner.java
+++ b/net/minecraft/world/level/NaturalSpawner.java
@@ -257,9 +257,56 @@ public final class NaturalSpawner {
@@ -257,9 +257,57 @@ public final class NaturalSpawner {
// Paper end - Optional per player mob spawns
// Leaf start
// Leaf start - optimize mob spawning
BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos();
- mutableRandomPosWithin(pos, level, chunk);
- if (pos.getY() < level.getMinY() + 1) {
- return 0;
+ // Leaf start
+ // Leaf start - preload mob spawning position
+ if (org.dreeam.leaf.config.modules.opt.PreloadNaturalMobSpawning.enabled) {
+ if (chunk.cacheSpawnPosIndex == 16 || chunk.cacheSpawnPosIndex == -1) {
+ if (chunk.cacheSpawnPos == null) {
@@ -65,44 +66,45 @@ index 762bdf1fe19546f89d34b9efdad66b00dab80006..0443df34de4f940f64e563ea76453493
+ if (bs == null || bs.isRedstoneConductor(level, pos)) {
+ return 0;
+ }
+ // Leaf end - preload mob spawning position
}
return spawnCategoryForPosition(category, level, chunk, pos, filter, callback, maxSpawns, trackEntity, false); // Paper - Optional per player mob spawns // Paper - throttle failed spawn attempts
// Leaf end
@@ -284,7 +331,12 @@ public final class NaturalSpawner {
// Leaf end - optimize mob spawning
@@ -284,7 +332,12 @@ public final class NaturalSpawner {
MobCategory category, ServerLevel level, ChunkAccess chunk, BlockPos pos, NaturalSpawner.SpawnPredicate filter, NaturalSpawner.AfterSpawnCallback callback, final int maxSpawns, final @Nullable Consumer<Entity> trackEntity
// Paper start - throttle failed spawn attempts
) {
- spawnCategoryForPosition(category, level, chunk, pos, filter, callback, maxSpawns, trackEntity, false);
+ // Leaf start
+ // Leaf start - preload mob spawning position
+ BlockState blockState = level.getBlockStateIfLoadedAndInBounds(pos);
+ if (blockState != null && !blockState.isRedstoneConductor(chunk, pos)) {
+ spawnCategoryForPosition(category, level, chunk, pos, filter, callback, maxSpawns, trackEntity, false);
+ }
+ // Leaf end
+ // Leaf end - preload mob spawning position
}
public static int spawnCategoryForPosition(
MobCategory category, ServerLevel level, ChunkAccess chunk, BlockPos pos, NaturalSpawner.SpawnPredicate filter, NaturalSpawner.AfterSpawnCallback callback, final int maxSpawns, final @Nullable Consumer<Entity> trackEntity, final boolean nothing
@@ -297,8 +349,8 @@ public final class NaturalSpawner {
int posX = pos.getX(); // Leaf
int posZ = pos.getZ(); // Leaf
@@ -297,8 +350,8 @@ public final class NaturalSpawner {
int posX = pos.getX(); // Leaf - optimize mob spawning
int posZ = pos.getZ(); // Leaf - optimize mob spawning
int i = 0; // Paper - throttle failed spawn attempts
- BlockState blockState = level.getBlockStateIfLoadedAndInBounds(pos); // Paper - don't load chunks for mob spawn
- if (blockState != null && !blockState.isRedstoneConductor(chunk, pos)) { // Paper - don't load chunks for mob spawn
+ // BlockState blockState = level.getBlockStateIfLoadedAndInBounds(pos); // Paper - don't load chunks for mob spawn // Leaf
+ if (true /*blockState != null && !blockState.isRedstoneConductor(chunk, pos)*/) { // Paper - don't load chunks for mob spawn // Leaf
BlockPos.MutableBlockPos mutableBlockPos = pos instanceof BlockPos.MutableBlockPos pos2 ? pos2 : new BlockPos.MutableBlockPos(); // Leaf
+ //BlockState blockState = level.getBlockStateIfLoadedAndInBounds(pos); // Paper - don't load chunks for mob spawn // Leaf - preload mob spawning position
+ if (true /*blockState != null && !blockState.isRedstoneConductor(chunk, pos)*/) { // Paper - don't load chunks for mob spawn // Leaf - preload mob spawning position
BlockPos.MutableBlockPos mutableBlockPos = pos instanceof BlockPos.MutableBlockPos pos2 ? pos2 : new BlockPos.MutableBlockPos(); // Leaf - optimize mob spawning
//int i = 0; // Paper - throttle failed spawn attempts - move up
diff --git a/net/minecraft/world/level/chunk/LevelChunk.java b/net/minecraft/world/level/chunk/LevelChunk.java
index e6eab6929b08503c49debbbd25497ffedad438e1..624a177695580510c0a49d4503dee72da7fd7114 100644
index a90bf0d80ae4dac9b19b8e467b402917cc19a271..804f2118167b1607c50ca8378119254e8760427a 100644
--- a/net/minecraft/world/level/chunk/LevelChunk.java
+++ b/net/minecraft/world/level/chunk/LevelChunk.java
@@ -106,6 +106,8 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p
// Paper start - rewrite chunk system
private boolean postProcessingDone;
private net.minecraft.server.level.ServerChunkCache.ChunkAndHolder chunkAndHolder;
+ public long[] cacheSpawnPos = null; // Leaf
+ public int cacheSpawnPosIndex = -1; // Leaf
+ public long[] cacheSpawnPos = null; // Leaf - preload mob spawning position
+ public int cacheSpawnPosIndex = -1; // Leaf - preload mob spawning position
@Override
public final boolean moonrise$isPostProcessingDone() {

View File

@@ -29,7 +29,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
along with this program. If not, see <https://www.gnu.org/licenses/>.
diff --git a/io/papermc/paper/entity/activation/ActivationRange.java b/io/papermc/paper/entity/activation/ActivationRange.java
index 6db99585fa47fe2d2ae6eff8efe16190dd756511..a9269356de964585028e69a3713ca64f67ba02bf 100644

View File

@@ -3,6 +3,23 @@ From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com>
Date: Thu, 28 Mar 2024 13:36:09 -0400
Subject: [PATCH] Cache player profileResult
This patch includes code that references the Caffeine caching library,
which is licensed under the Apache License, Version 2.0.
Caffeine (https://github.com/ben-manes/caffeine)
Copyright (c) Ben Manes
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
diff --git a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java
index 069477e524a28b20a0289221858bdc802704a890..114b25f933c6a1b011523581a5a02a5a2c1e827e 100644

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Replace brain maps with optimized collection
diff --git a/net/minecraft/world/entity/ai/Brain.java b/net/minecraft/world/entity/ai/Brain.java
index 083eb9a7a0bc14d30db944f356d98ca552fa1784..778e3b99a7f941a53b87cbec510db8deed5d77c8 100644
index 083eb9a7a0bc14d30db944f356d98ca552fa1784..10986e50bd3307f81074c4cb371eb4d7defc9cfc 100644
--- a/net/minecraft/world/entity/ai/Brain.java
+++ b/net/minecraft/world/entity/ai/Brain.java
@@ -45,14 +45,18 @@ public class Brain<E extends LivingEntity> {
@@ -14,11 +14,10 @@ index 083eb9a7a0bc14d30db944f356d98ca552fa1784..778e3b99a7f941a53b87cbec510db8de
private static final int SCHEDULE_UPDATE_DELAY = 20;
- private final Map<MemoryModuleType<?>, Optional<? extends ExpirableValue<?>>> memories = Maps.newHashMap();
- private final Map<SensorType<? extends Sensor<? super E>>, Sensor<? super E>> sensors = Maps.newLinkedHashMap();
- private final Map<Integer, Map<Activity, Set<BehaviorControl<? super E>>>> availableBehaviorsByPriority = Maps.newTreeMap();
+ // Leaf start - Replace brain maps with optimized collection
+ private final Map<MemoryModuleType<?>, Optional<? extends ExpirableValue<?>>> memories = new it.unimi.dsi.fastutil.objects.Reference2ReferenceOpenHashMap<>();
+ private final Map<SensorType<? extends Sensor<? super E>>, Sensor<? super E>> sensors = new it.unimi.dsi.fastutil.objects.Reference2ReferenceLinkedOpenHashMap<>();
+ private final Map<Integer, Map<Activity, Set<BehaviorControl<? super E>>>> availableBehaviorsByPriority = new it.unimi.dsi.fastutil.objects.Object2ObjectRBTreeMap<>();
private final Map<Integer, Map<Activity, Set<BehaviorControl<? super E>>>> availableBehaviorsByPriority = Maps.newTreeMap();
+ // Leaf end - Replace brain maps with optimized collection
private Schedule schedule = Schedule.EMPTY;
- private final Map<Activity, Set<Pair<MemoryModuleType<?>, MemoryStatus>>> activityRequirements = Maps.newHashMap();

View File

@@ -4,6 +4,23 @@ Date: Sun, 23 Jun 2024 11:26:20 +0800
Subject: [PATCH] Use caffeine cache for kickPermission instead of using
google.common.cache
This patch includes code that references the Caffeine caching library,
which is licensed under the Apache License, Version 2.0.
Caffeine (https://github.com/ben-manes/caffeine)
Copyright (c) Ben Manes
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index 24aca7ba2cc3ec5f05bb4ea7d373feb730d8dd90..c30e017e6cffa6aa828b0f6e8889885dbaaa4680 100644

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Replace brain activity maps with optimized collection
diff --git a/net/minecraft/world/entity/ai/Brain.java b/net/minecraft/world/entity/ai/Brain.java
index ea6c8e85ccff67b1c24109732f74f1e8199cad07..e27284f9897923f67985e3d60c3438bd00cc4a51 100644
index 778e3b99a7f941a53b87cbec510db8deed5d77c8..4dde1642a33349335f374f17123a700dde1079d7 100644
--- a/net/minecraft/world/entity/ai/Brain.java
+++ b/net/minecraft/world/entity/ai/Brain.java
@@ -390,8 +390,8 @@ public class Brain<E extends LivingEntity> {

View File

@@ -42,10 +42,10 @@ index be820c6093dd2ae7642b9bee11edf65e3a8d7242..06ac3537f5655d048d770bb004243f20
boolean ret = false;
final boolean canProcessFullUpdates = processFullUpdates & isTickThread;
diff --git a/io/papermc/paper/redstone/RedstoneWireTurbo.java b/io/papermc/paper/redstone/RedstoneWireTurbo.java
index ff747a1ecdf3c888bca0d69de4f85dcd810b6139..62ecbbf7c167beaa3b67fc4c30e901c5d359d6b8 100644
index ff747a1ecdf3c888bca0d69de4f85dcd810b6139..b288d57d9f7bd0ccf1877cf9920bd67288ff22f7 100644
--- a/io/papermc/paper/redstone/RedstoneWireTurbo.java
+++ b/io/papermc/paper/redstone/RedstoneWireTurbo.java
@@ -829,14 +829,8 @@ public final class RedstoneWireTurbo {
@@ -829,14 +829,10 @@ public final class RedstoneWireTurbo {
j = getMaxCurrentStrength(upd, j);
int l = 0;
@@ -57,8 +57,10 @@ index ff747a1ecdf3c888bca0d69de4f85dcd810b6139..62ecbbf7c167beaa3b67fc4c30e901c5
- // is consistency to what this call returns, we may be able to cache it.
- final int k = worldIn.getBestNeighborSignal(upd.self);
- wire.shouldSignal = true;
+ // Leaf start - SparklyPaper - parallel world ticking
+ // This now correctly calls the (conditionally) thread-safe method in RedStoneWireBlock
+ final int k = wire.getBlockSignal(worldIn, upd.self);
+ // Leaf end - SparklyPaper - parallel world ticking
// The variable 'k' holds the maximum redstone power value of any adjacent blocks.
// If 'k' has the highest level of all neighbors, then the power level of this
@@ -1361,7 +1363,7 @@ index 904369f4d7db41026183f2de7c96c2f0f4dc204d..afd952ddc8942818ec01d1c750413776
return true;
} else {
diff --git a/net/minecraft/world/level/block/RedStoneWireBlock.java b/net/minecraft/world/level/block/RedStoneWireBlock.java
index 12c9d60314c99fb65e640d255a2d0c6b7790ad4d..5a60c5e4fe122d37a0aed1269128aa5e6e5e87b8 100644
index 12c9d60314c99fb65e640d255a2d0c6b7790ad4d..9d655558e8a15e4861a66e545b0991968e747b58 100644
--- a/net/minecraft/world/level/block/RedStoneWireBlock.java
+++ b/net/minecraft/world/level/block/RedStoneWireBlock.java
@@ -91,7 +91,10 @@ public class RedStoneWireBlock extends Block {
@@ -1427,7 +1429,7 @@ index 12c9d60314c99fb65e640d255a2d0c6b7790ad4d..5a60c5e4fe122d37a0aed1269128aa5e
}
private void checkCornerChangeAt(Level level, BlockPos pos) {
@@ -450,24 +472,34 @@ public class RedStoneWireBlock extends Block {
@@ -450,12 +472,21 @@ public class RedStoneWireBlock extends Block {
@Override
protected int getDirectSignal(BlockState blockState, BlockGetter blockAccess, BlockPos pos, Direction side) {
@@ -1451,13 +1453,7 @@ index 12c9d60314c99fb65e640d255a2d0c6b7790ad4d..5a60c5e4fe122d37a0aed1269128aa5e
int powerValue = blockState.getValue(POWER);
if (powerValue == 0) {
return 0;
} else {
return side != Direction.UP
- && !this.getConnectionState(blockAccess, blockState, pos).getValue(PROPERTY_BY_DIRECTION.get(side.getOpposite())).isConnected()
+ && !this.getConnectionState(blockAccess, blockState, pos).getValue(PROPERTY_BY_DIRECTION.get(side.getOpposite())).isConnected()
? 0
: powerValue;
}
@@ -468,6 +499,7 @@ public class RedStoneWireBlock extends Block {
} else {
return 0;
}

View File

@@ -1,11 +1,11 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Taiyou06 <kaandindar21@gmail.com>
Date: Thu, 8 May 2025 13:30:07 +0200
Subject: [PATCH] Optimise BlockEntities tickersInLevel
Subject: [PATCH] Optimize BlockEntities tickersInLevel
diff --git a/net/minecraft/world/level/chunk/LevelChunk.java b/net/minecraft/world/level/chunk/LevelChunk.java
index 546fb78339c005ed71142cb3c894f816b8c72d08..e6eab6929b08503c49debbbd25497ffedad438e1 100644
index 546fb78339c005ed71142cb3c894f816b8c72d08..a90bf0d80ae4dac9b19b8e467b402917cc19a271 100644
--- a/net/minecraft/world/level/chunk/LevelChunk.java
+++ b/net/minecraft/world/level/chunk/LevelChunk.java
@@ -72,7 +72,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p
@@ -13,7 +13,7 @@ index 546fb78339c005ed71142cb3c894f816b8c72d08..e6eab6929b08503c49debbbd25497ffe
}
};
- private final Map<BlockPos, LevelChunk.RebindableTickingBlockEntityWrapper> tickersInLevel = Maps.newHashMap();
+ private final Map<BlockPos, LevelChunk.RebindableTickingBlockEntityWrapper> tickersInLevel = org.dreeam.leaf.config.modules.opt.OptimiseBlockEntities.enabled ? new it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap<>() : Maps.newHashMap(); // Leaf - Optimise BlockEntities tickersInLevel
+ private final Map<BlockPos, LevelChunk.RebindableTickingBlockEntityWrapper> tickersInLevel = org.dreeam.leaf.config.modules.opt.OptimizeBlockEntities.enabled ? new it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap<>() : Maps.newHashMap(); // Leaf - Optimise BlockEntities tickersInLevel
public boolean loaded;
public final ServerLevel level; // CraftBukkit - type
@Nullable

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] optimize getEntityStatus
diff --git a/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/EntityLookup.java b/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/EntityLookup.java
index 7554c109c35397bc1a43dd80e87764fd78645bbf..151476fd036839a416c226599279d0d8bf79717b 100644
index 7554c109c35397bc1a43dd80e87764fd78645bbf..8ae35834bb35ace0bf0ad2c79a80500cbcb19cad 100644
--- a/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/EntityLookup.java
+++ b/ca/spottedleaf/moonrise/patches/chunk_system/level/entity/EntityLookup.java
@@ -93,8 +93,14 @@ public abstract class EntityLookup implements LevelEntityGetter<Entity> {
@@ -14,14 +14,14 @@ index 7554c109c35397bc1a43dd80e87764fd78645bbf..151476fd036839a416c226599279d0d8
}
- final Visibility visibility = EntityLookup.getEntityStatus(entity);
- return visibility.isAccessible() ? entity : null;
+ // Leaf start
+ // Leaf start - optimize getEntityStatus
+ final FullChunkStatus entityStatus = ((ChunkSystemEntity) entity).moonrise$getChunkStatus();
+ return switch (entityStatus) {
+ case INACCESSIBLE -> null;
+ case FULL, BLOCK_TICKING, ENTITY_TICKING -> entity;
+ case null -> null;
+ };
+ // Leaf end
+ // Leaf end - optimize getEntityStatus
}
@Override
@@ -30,34 +30,14 @@ index 7554c109c35397bc1a43dd80e87764fd78645bbf..151476fd036839a416c226599279d0d8
}
final FullChunkStatus entityStatus = ((ChunkSystemEntity)entity).moonrise$getChunkStatus();
- return Visibility.fromFullChunkStatus(entityStatus == null ? FullChunkStatus.INACCESSIBLE : entityStatus);
+ // Leaf start
+ // Leaf start - optimize getEntityStatus
+ return switch (entityStatus) {
+ case INACCESSIBLE -> Visibility.HIDDEN;
+ case FULL, BLOCK_TICKING -> Visibility.TRACKED;
+ case ENTITY_TICKING -> Visibility.TICKING;
+ case null -> Visibility.HIDDEN;
+ };
+ // Leaf end
+ // Leaf end - optimize getEntityStatus
}
protected boolean addEntity(final Entity entity, final boolean fromDisk, final boolean event) {
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 64f24d3e0ecb91e0b4df6229354aeac549234f1b..80baa2dff5c1034a72271fc727fdb2acc1b69488 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -381,6 +381,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
// Paper end
// Paper start - rewrite chunk system
private final boolean isHardColliding = this.moonrise$isHardCollidingUncached();
+ @org.jetbrains.annotations.Nullable // Leaf
private net.minecraft.server.level.FullChunkStatus chunkStatus;
private ca.spottedleaf.moonrise.patches.chunk_system.level.chunk.ChunkData chunkData;
private int sectionX = Integer.MIN_VALUE;
@@ -394,6 +395,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
}
@Override
+ @org.jetbrains.annotations.Nullable // Leaf
public final net.minecraft.server.level.FullChunkStatus moonrise$getChunkStatus() {
return this.chunkStatus;
}

View File

@@ -6,7 +6,7 @@ Subject: [PATCH] optimise ChunkGenerator#getMobsAt
inline fillStartsForStructure
diff --git a/net/minecraft/world/level/StructureManager.java b/net/minecraft/world/level/StructureManager.java
index 8bc6a6c86cd8db53feefba7508b6031ba67e242e..20a2bc31a8082afd4f758bd7e91691bbc58ba16e 100644
index 8bc6a6c86cd8db53feefba7508b6031ba67e242e..90397f237c0cb79da03b3f9ca7445676324ebd11 100644
--- a/net/minecraft/world/level/StructureManager.java
+++ b/net/minecraft/world/level/StructureManager.java
@@ -78,7 +78,7 @@ public class StructureManager {
@@ -14,7 +14,7 @@ index 8bc6a6c86cd8db53feefba7508b6031ba67e242e..20a2bc31a8082afd4f758bd7e91691bb
public void fillStartsForStructure(Structure structure, LongSet structureRefs, Consumer<StructureStart> startConsumer) {
for (long l : structureRefs) {
- SectionPos sectionPos = SectionPos.of(new ChunkPos(l), this.level.getMinSectionY());
+ SectionPos sectionPos = SectionPos.of(ChunkPos.getX(l), this.level.getMinSectionY(), ChunkPos.getZ(l)); // Leaf
+ SectionPos sectionPos = SectionPos.of(ChunkPos.getX(l), this.level.getMinSectionY(), ChunkPos.getZ(l)); // Leaf - optimise ChunkGenerator#getMobsAt
StructureStart startForStructure = this.getStartForStructure(
sectionPos, structure, this.level.getChunk(sectionPos.x(), sectionPos.z(), ChunkStatus.STRUCTURE_STARTS)
);
@@ -24,13 +24,13 @@ index 8bc6a6c86cd8db53feefba7508b6031ba67e242e..20a2bc31a8082afd4f758bd7e91691bb
public Map<Structure, LongSet> getAllStructuresAt(BlockPos pos) {
- SectionPos sectionPos = SectionPos.of(pos);
- return this.level.getChunk(sectionPos.x(), sectionPos.z(), ChunkStatus.STRUCTURE_REFERENCES).getAllReferences();
+ // SectionPos sectionPos = SectionPos.of(pos); // Leaf
+ return this.level.getChunk(pos.getX() >> 4, pos.getZ() >> 4, ChunkStatus.STRUCTURE_REFERENCES).getAllReferences(); // Leaf
+ //SectionPos sectionPos = SectionPos.of(pos); // Leaf - optimise ChunkGenerator#getMobsAt
+ return this.level.getChunk(pos.getX() >> 4, pos.getZ() >> 4, ChunkStatus.STRUCTURE_REFERENCES).getAllReferences(); // Leaf - optimise ChunkGenerator#getMobsAt
}
public StructureCheckResult checkStructurePresence(ChunkPos chunkPos, Structure structure, StructurePlacement placement, boolean skipKnownStructures) {
diff --git a/net/minecraft/world/level/chunk/ChunkGenerator.java b/net/minecraft/world/level/chunk/ChunkGenerator.java
index 176adfcaa0fc458043d4bc05ead1861864b63606..87df3cd0981e94c28b816eb231942499c266a8da 100644
index 176adfcaa0fc458043d4bc05ead1861864b63606..755e635a2ece6ab6d3b166cb437e48b527041160 100644
--- a/net/minecraft/world/level/chunk/ChunkGenerator.java
+++ b/net/minecraft/world/level/chunk/ChunkGenerator.java
@@ -501,18 +501,20 @@ public abstract class ChunkGenerator {
@@ -44,7 +44,7 @@ index 176adfcaa0fc458043d4bc05ead1861864b63606..87df3cd0981e94c28b816eb231942499
- structureManager.fillStartsForStructure(structure, entry.getValue(), structureStart -> {
- if (mutableBoolean.isFalse() && predicate.test(structureStart)) {
- mutableBoolean.setTrue();
+ // Leaf start
+ // Leaf start - optimise ChunkGenerator#getMobsAt
+ for (long l : entry.getValue()) {
+ StructureStart startForStructure = structureManager.getStartForStructure(
+ null, structure, structureManager.level.getChunk(ChunkPos.getX(l), ChunkPos.getZ(l), ChunkStatus.STRUCTURE_STARTS)
@@ -60,7 +60,7 @@ index 176adfcaa0fc458043d4bc05ead1861864b63606..87df3cd0981e94c28b816eb231942499
- if (mutableBoolean.isTrue()) {
- return structureSpawnOverride.spawns();
}
+ // Leaf end
+ // Leaf end - optimise ChunkGenerator#getMobsAt
}
}

View File

@@ -57,7 +57,7 @@ index ce2621a87dec1befb016b3437ceb2d02ed6d0b75..9b37b763c6555705f3e256010f508b5a
public static boolean isInNetherFortressBounds(BlockPos pos, ServerLevel level, MobCategory category, StructureManager structureManager) {
diff --git a/net/minecraft/world/level/biome/BiomeManager.java b/net/minecraft/world/level/biome/BiomeManager.java
index a48175a7ebb1788ace46395621ed78d910178a53..cb6b99dd4504681bdf2f7dbd7e3d2218304f891a 100644
index a48175a7ebb1788ace46395621ed78d910178a53..00122472991ba0c1a0ea77053aad71cdfa92a7bd 100644
--- a/net/minecraft/world/level/biome/BiomeManager.java
+++ b/net/minecraft/world/level/biome/BiomeManager.java
@@ -15,10 +15,23 @@ public class BiomeManager {
@@ -129,7 +129,7 @@ index a48175a7ebb1788ace46395621ed78d910178a53..cb6b99dd4504681bdf2f7dbd7e3d2218
return Mth.square(zNoise + fiddle2) + Mth.square(yNoise + fiddle1) + Mth.square(xNoise + fiddle);
}
+ // Leaf start
+ // Leaf start - optimise getBiome
+ private static final double[] FIDDLE_TABLE = new double[1024];
+ static {
+ for (int i = 0; i < 1024; i++) {
@@ -139,9 +139,9 @@ index a48175a7ebb1788ace46395621ed78d910178a53..cb6b99dd4504681bdf2f7dbd7e3d2218
private static double getFiddle(long seed) {
- return (double)(((seed >> 24) & (1024 - 1)) - (1024/2)) * (0.9 / 1024.0); // Paper - avoid floorMod, fp division, and fp subtraction
+ return FIDDLE_TABLE[(int)(seed >>> 24) & 1023];
+ // return (double)(((seed >> 24) & (1024 - 1)) - (1024/2)) * (0.9 / 1024.0); // Paper - avoid floorMod, fp division, and fp subtraction
+ //return (double)(((seed >> 24) & (1024 - 1)) - (1024/2)) * (0.9 / 1024.0); // Paper - avoid floorMod, fp division, and fp subtraction
}
+ // Leaf end
+ // Leaf end - optimise getBiome
public interface NoiseBiomeSource {
Holder<Biome> getNoiseBiome(int x, int y, int z);

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] optimize mob spawning
diff --git a/net/minecraft/server/level/ServerChunkCache.java b/net/minecraft/server/level/ServerChunkCache.java
index f57f8e610dac80b8095bfc0c7e4b22ff5ad6b13c..55f20122732e88037d24be311469b6cab72c37ad 100644
index f57f8e610dac80b8095bfc0c7e4b22ff5ad6b13c..c1efd558cfbfd2200295ef5755aa496e95deb7d7 100644
--- a/net/minecraft/server/level/ServerChunkCache.java
+++ b/net/minecraft/server/level/ServerChunkCache.java
@@ -70,7 +70,9 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
@@ -13,9 +13,9 @@ index f57f8e610dac80b8095bfc0c7e4b22ff5ad6b13c..55f20122732e88037d24be311469b6ca
@Nullable
@VisibleForDebug
- private NaturalSpawner.SpawnState lastSpawnState;
+ private volatile NaturalSpawner.SpawnState lastSpawnState; // Leaf
+ private long delayTimeInhabited = 0L; // Leaf
+ private long delaySpawn = -1L; // Leaf
+ private volatile NaturalSpawner.SpawnState lastSpawnState; // Leaf - optimize mob spawning
+ private long delayTimeInhabited = 0L; // Leaf - optimize mob spawning
+ private long delaySpawn = -1L; // Leaf - optimize mob spawning
// Paper start
public final ca.spottedleaf.concurrentutil.map.ConcurrentLong2ReferenceChainedHashTable<net.minecraft.world.level.chunk.LevelChunk> fullChunks = new ca.spottedleaf.concurrentutil.map.ConcurrentLong2ReferenceChainedHashTable<>();
public int getFullChunksCount() {
@@ -28,7 +28,7 @@ index f57f8e610dac80b8095bfc0c7e4b22ff5ad6b13c..55f20122732e88037d24be311469b6ca
- levelChunk.incrementInhabitedTime(timeInhabited);
- if (!filteredSpawningCategories.isEmpty() && this.level.getWorldBorder().isWithinBounds(pos) && lastSpawnState != null && (!org.dreeam.leaf.config.modules.async.AsyncMobSpawning.enabled || _pufferfish_spawnCountsReady.get()) && this.chunkMap.anyPlayerCloseEnoughForSpawning(pos, true)) { // Spigot // Pufferfish // Leaf - Don't spawn if lastSpawnState is null
- NaturalSpawner.spawnForChunk(this.level, levelChunk, lastSpawnState, filteredSpawningCategories); // Pufferfish
+ // Leaf start
+ // Leaf start - optimize mob spawning
+ var lastSpawnState1 = this.lastSpawnState;
+ if (lastSpawnState1 != null && (!org.dreeam.leaf.config.modules.async.AsyncMobSpawning.enabled || _pufferfish_spawnCountsReady.get())) {
+ long sumTimeInhabited = timeInhabited + delayTimeInhabited;
@@ -56,27 +56,27 @@ index f57f8e610dac80b8095bfc0c7e4b22ff5ad6b13c..55f20122732e88037d24be311469b6ca
+ delayTimeInhabited += timeInhabited;
+ delaySpawn = level.getGameTime();
+ }
+ // Leaf end
+ // Leaf end - optimize mob spawning
+ for (LevelChunk levelChunk : chunks) { // Leaf - split to 2 loop
+ for (LevelChunk levelChunk : chunks) { // Leaf - optimize mob spawning - split to 2 loop
if (true) { // Paper - rewrite chunk system
this.level.tickChunk(levelChunk, _int);
}
diff --git a/net/minecraft/world/level/NaturalSpawner.java b/net/minecraft/world/level/NaturalSpawner.java
index 9b37b763c6555705f3e256010f508b5a0c2cdb66..7bfc636fb442036f742903c4e69a8a9fcd0e6fc2 100644
index 9b37b763c6555705f3e256010f508b5a0c2cdb66..bde7008e14a3b4c0a37a94a4890e2f7fa1ce2466 100644
--- a/net/minecraft/world/level/NaturalSpawner.java
+++ b/net/minecraft/world/level/NaturalSpawner.java
@@ -155,7 +155,13 @@ public final class NaturalSpawner {
return list;
}
+ @Deprecated(forRemoval = true) // Leaf
+ @Deprecated(forRemoval = true) // Leaf - optimize mob spawning
public static void spawnForChunk(ServerLevel level, LevelChunk chunk, NaturalSpawner.SpawnState spawnState, List<MobCategory> categories) {
+ // Leaf start
+ // Leaf start - optimize mob spawning
+ spawnForChunk(level, chunk, spawnState, categories, level.getGameTime());
+ }
+ public static void spawnForChunk(ServerLevel level, LevelChunk chunk, NaturalSpawner.SpawnState spawnState, List<MobCategory> categories, long gameTime) {
+ // Leaf end
+ // Leaf end - optimize mob spawning
for (MobCategory mobCategory : categories) {
// Paper start - Optional per player mob spawns
final boolean canSpawn;
@@ -85,7 +85,7 @@ index 9b37b763c6555705f3e256010f508b5a0c2cdb66..7bfc636fb442036f742903c4e69a8a9f
// Paper end - throttle failed spawn attempts
if (CraftSpawnCategory.isValidForLimits(spawnCategory)) {
- spawnThisTick = ticksPerSpawnTmp != 0 && level.getGameTime() % ticksPerSpawn == 0; // Paper - throttle failed spawn attempts
+ spawnThisTick = ticksPerSpawnTmp != 0 && gameTime % ticksPerSpawn == 0; // Paper - throttle failed spawn attempts // Leaf
+ spawnThisTick = ticksPerSpawnTmp != 0 && gameTime % ticksPerSpawn == 0; // Paper - throttle failed spawn attempts // Leaf - optimize mob spawning
limit = level.getWorld().getSpawnLimit(spawnCategory);
}
@@ -96,7 +96,7 @@ index 9b37b763c6555705f3e256010f508b5a0c2cdb66..7bfc636fb442036f742903c4e69a8a9f
- BlockPos randomPosWithin = getRandomPosWithin(level, chunk);
- if (randomPosWithin.getY() >= level.getMinY() + 1) {
- return spawnCategoryForPosition(category, level, chunk, randomPosWithin, filter, callback, maxSpawns, trackEntity, false); // Paper - Optional per player mob spawns // Paper - throttle failed spawn attempts
+ // Leaf start
+ // Leaf start - optimize mob spawning
+ BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos();
+ mutableRandomPosWithin(pos, level, chunk);
+ if (pos.getY() < level.getMinY() + 1) {
@@ -105,7 +105,7 @@ index 9b37b763c6555705f3e256010f508b5a0c2cdb66..7bfc636fb442036f742903c4e69a8a9f
-
- return 0; // Paper - throttle failed spawn attempts
+ return spawnCategoryForPosition(category, level, chunk, pos, filter, callback, maxSpawns, trackEntity, false); // Paper - Optional per player mob spawns // Paper - throttle failed spawn attempts
+ // Leaf end
+ // Leaf end - optimize mob spawning
}
@VisibleForDebug
@@ -113,16 +113,16 @@ index 9b37b763c6555705f3e256010f508b5a0c2cdb66..7bfc636fb442036f742903c4e69a8a9f
StructureManager structureManager = level.structureManager();
ChunkGenerator generator = level.getChunkSource().getGenerator();
int y = pos.getY();
+ int posX = pos.getX(); // Leaf
+ int posZ = pos.getZ(); // Leaf
+ int posX = pos.getX(); // Leaf - optimize mob spawning
+ int posZ = pos.getZ(); // Leaf - optimize mob spawning
int i = 0; // Paper - throttle failed spawn attempts
BlockState blockState = level.getBlockStateIfLoadedAndInBounds(pos); // Paper - don't load chunks for mob spawn
if (blockState != null && !blockState.isRedstoneConductor(chunk, pos)) { // Paper - don't load chunks for mob spawn
- BlockPos.MutableBlockPos mutableBlockPos = new BlockPos.MutableBlockPos();
+ BlockPos.MutableBlockPos mutableBlockPos = pos instanceof BlockPos.MutableBlockPos pos2 ? pos2 : new BlockPos.MutableBlockPos(); // Leaf
+ BlockPos.MutableBlockPos mutableBlockPos = pos instanceof BlockPos.MutableBlockPos pos2 ? pos2 : new BlockPos.MutableBlockPos(); // Leaf - optimize mob spawning
//int i = 0; // Paper - throttle failed spawn attempts - move up
+ // Leaf start
+ // Leaf start - optimize mob spawning
+ long rand = level.random.nextLong();
+ int bits = 0;
for (int i1 = 0; i1 < 3; i1++) {
@@ -161,7 +161,7 @@ index 9b37b763c6555705f3e256010f508b5a0c2cdb66..7bfc636fb442036f742903c4e69a8a9f
+ }
+ x += rand1 - rand2;
+ z += rand3 - rand4;
+ // Leaf end
+ // Leaf end - optimize mob spawning
mutableBlockPos.set(x, y, z);
double d = x + 0.5;
double d1 = z + 0.5;
@@ -169,7 +169,7 @@ index 9b37b763c6555705f3e256010f508b5a0c2cdb66..7bfc636fb442036f742903c4e69a8a9f
if (nearestPlayer != null) {
double d2 = nearestPlayer.distanceToSqr(d, y, d1);
- if (level.isLoadedAndInBounds(mutableBlockPos) && isRightDistanceToPlayerAndSpawnPoint(level, chunk, mutableBlockPos, d2)) { // Paper - don't load chunks for mob spawn
+ if (level.getWorldBorder().isWithinBounds(mutableBlockPos) && (chunk.getPos().longKey == ChunkPos.asLong(mutableBlockPos) || level.getChunkIfLoadedImmediately(mutableBlockPos.getX() >> 4, mutableBlockPos.getZ() >> 4) != null) && isRightDistanceToPlayerAndSpawnPoint(level, chunk, mutableBlockPos, d2)) { // Paper - don't load chunks for mob spawn // Leaf
+ if (level.getWorldBorder().isWithinBounds(mutableBlockPos) && (chunk.getPos().longKey == ChunkPos.asLong(mutableBlockPos) || level.getChunkIfLoadedImmediately(mutableBlockPos.getX() >> 4, mutableBlockPos.getZ() >> 4) != null) && isRightDistanceToPlayerAndSpawnPoint(level, chunk, mutableBlockPos, d2)) { // Paper - don't load chunks for mob spawn // Leaf - optimize mob spawning
if (spawnerData == null) {
Optional<MobSpawnSettings.SpawnerData> randomSpawnMobAt = getRandomSpawnMobAt(
level, structureManager, generator, category, level.random, mutableBlockPos
@@ -179,8 +179,8 @@ index 9b37b763c6555705f3e256010f508b5a0c2cdb66..7bfc636fb442036f742903c4e69a8a9f
return !(distance <= 576.0)
- && !level.getSharedSpawnPos().closerToCenterThan(new Vec3(pos.getX() + 0.5, pos.getY(), pos.getZ() + 0.5), 24.0)
- && (Objects.equals(new ChunkPos(pos), chunk.getPos()) || level.isNaturalSpawningAllowed(pos));
+ && !(level.getSharedSpawnPos().distToCenterSqr(pos.getX() + 0.5, pos.getY(), pos.getZ() + 0.5) < 576.0) // Leaf
+ && (ChunkPos.asLong(pos) == chunk.getPos().longKey || level.isNaturalSpawningAllowed(pos)); // Leaf
+ && !(level.getSharedSpawnPos().distToCenterSqr(pos.getX() + 0.5, pos.getY(), pos.getZ() + 0.5) < 576.0) // Leaf - optimize mob spawning
+ && (ChunkPos.asLong(pos) == chunk.getPos().longKey || level.isNaturalSpawningAllowed(pos)); // Leaf - optimize mob spawning
}
// Paper start - PreCreatureSpawnEvent
@@ -188,16 +188,16 @@ index 9b37b763c6555705f3e256010f508b5a0c2cdb66..7bfc636fb442036f742903c4e69a8a9f
}
}
+ // Leaf start
+ // Leaf start - optimize mob spawning
+ private static void mutableRandomPosWithin(BlockPos.MutableBlockPos pos1, Level level, LevelChunk chunk) {
+ ChunkPos pos = chunk.getPos();
+ int i = pos.getMinBlockX() + level.random.nextInt(16);
+ int i1 = pos.getMinBlockZ() + level.random.nextInt(16);
+ int i2 = chunk.getHeight(Heightmap.Types.WORLD_SURFACE, i, i1) + 1;
+ int i3 = Mth.randomBetweenInclusive(level.random, level.getMinY(), i2);
+ pos1.set(i, i3, i1);
+ int randomX = pos.getMinBlockX() + level.random.nextInt(16);
+ int randomZ = pos.getMinBlockZ() + level.random.nextInt(16);
+ int surfaceY = chunk.getHeight(Heightmap.Types.WORLD_SURFACE, randomX, randomZ) + 1;
+ int randomY = Mth.randomBetweenInclusive(level.random, level.getMinY(), surfaceY);
+ pos1.set(randomX, randomY, randomZ);
+ }
+ // Leaf end
+ // Leaf end - optimize mob spawning
+
private static BlockPos getRandomPosWithin(Level level, LevelChunk chunk) {
ChunkPos pos = chunk.getPos();

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] optimize structure map
diff --git a/net/minecraft/world/level/chunk/ChunkAccess.java b/net/minecraft/world/level/chunk/ChunkAccess.java
index 50a9903367f49ece2a267d10944b1515c7b93859..ceabb277bef2633de8f55e16431dbb4d0869817b 100644
index 50a9903367f49ece2a267d10944b1515c7b93859..5117671a4391690c90e7577a2518d0298e4b8c74 100644
--- a/net/minecraft/world/level/chunk/ChunkAccess.java
+++ b/net/minecraft/world/level/chunk/ChunkAccess.java
@@ -76,8 +76,8 @@ public abstract class ChunkAccess implements BiomeManager.NoiseBiomeSource, Ligh
@@ -14,8 +14,8 @@ index 50a9903367f49ece2a267d10944b1515c7b93859..ceabb277bef2633de8f55e16431dbb4d
// Paper - rewrite chunk system
- private final Map<Structure, StructureStart> structureStarts = Maps.newHashMap();
- private final Map<Structure, LongSet> structuresRefences = Maps.newHashMap();
+ private final Map<Structure, StructureStart> structureStarts = new it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap<>(); // Leaf
+ private final Map<Structure, LongSet> structuresRefences = new it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap<>(); // Leaf
+ private final Map<Structure, StructureStart> structureStarts = new it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap<>(); // Leaf - optimize structure map
+ private final Map<Structure, LongSet> structuresRefences = new it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap<>(); // Leaf - optimize structure map
protected final Map<BlockPos, CompoundTag> pendingBlockEntities = Maps.newHashMap();
public final Map<BlockPos, BlockEntity> blockEntities = new Object2ObjectOpenHashMap<>();
protected final LevelHeightAccessor levelHeightAccessor;
@@ -24,7 +24,7 @@ index 50a9903367f49ece2a267d10944b1515c7b93859..ceabb277bef2633de8f55e16431dbb4d
public Map<Structure, StructureStart> getAllStarts() {
- return Collections.unmodifiableMap(this.structureStarts);
+ return this.structureStarts; // Leaf
+ return this.structureStarts; // Leaf - optimize structure map
}
public void setAllStarts(Map<Structure, StructureStart> structureStarts) {
@@ -33,14 +33,14 @@ index 50a9903367f49ece2a267d10944b1515c7b93859..ceabb277bef2633de8f55e16431dbb4d
@Override
public void addReferenceForStructure(Structure structure, long reference) {
- this.structuresRefences.computeIfAbsent(structure, key -> new LongOpenHashSet()).add(reference);
+ this.structuresRefences.computeIfAbsent(structure, key -> new it.unimi.dsi.fastutil.longs.LongArraySet()).add(reference); // Leaf
+ this.structuresRefences.computeIfAbsent(structure, key -> new it.unimi.dsi.fastutil.longs.LongArraySet()).add(reference); // Leaf - optimize structure map
this.markUnsaved();
}
@Override
public Map<Structure, LongSet> getAllReferences() {
- return Collections.unmodifiableMap(this.structuresRefences);
+ return this.structuresRefences; // Leaf
+ return this.structuresRefences; // Leaf - optimize structure map
}
@Override

View File

@@ -5,14 +5,14 @@ Subject: [PATCH] throttle mob spawning
diff --git a/net/minecraft/world/level/NaturalSpawner.java b/net/minecraft/world/level/NaturalSpawner.java
index 7bfc636fb442036f742903c4e69a8a9fcd0e6fc2..762bdf1fe19546f89d34b9efdad66b00dab80006 100644
index bde7008e14a3b4c0a37a94a4890e2f7fa1ce2466..458b17dca84c87591b030679c5aac6259c0f8308 100644
--- a/net/minecraft/world/level/NaturalSpawner.java
+++ b/net/minecraft/world/level/NaturalSpawner.java
@@ -166,6 +166,17 @@ public final class NaturalSpawner {
// Paper start - Optional per player mob spawns
final boolean canSpawn;
int maxSpawns = Integer.MAX_VALUE;
+ // Leaf start
+ // Leaf start - throttle mob spawning
+ if (org.dreeam.leaf.config.modules.opt.ThrottleNaturalMobSpawning.enabled) {
+ int spawnChance = org.dreeam.leaf.config.modules.opt.ThrottleNaturalMobSpawning.spawnChance[mobCategory.ordinal()];
+ long failedAttempt = org.dreeam.leaf.config.modules.opt.ThrottleNaturalMobSpawning.failedAttempts[mobCategory.ordinal()];
@@ -22,7 +22,7 @@ index 7bfc636fb442036f742903c4e69a8a9fcd0e6fc2..762bdf1fe19546f89d34b9efdad66b00
+ continue;
+ }
+ }
+ // Leaf end
+ // Leaf end - throttle mob spawning
if (level.paperConfig().entities.spawning.perPlayerMobSpawns) {
// Copied from getFilteredSpawningCategories
int limit = mobCategory.getMaxInstancesPerChunk();

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Add BlockExplosionHitEvent
diff --git a/net/minecraft/world/level/ServerExplosion.java b/net/minecraft/world/level/ServerExplosion.java
index 6030c4eefd77969a1a9251de76d4291dcb0a2092..ea9c641fe9a9685307b6de2999ea4ff5342269b7 100644
index 6030c4eefd77969a1a9251de76d4291dcb0a2092..f76ec9520f6a2ee42ed3ba65068c01f4b9bc8746 100644
--- a/net/minecraft/world/level/ServerExplosion.java
+++ b/net/minecraft/world/level/ServerExplosion.java
@@ -623,9 +623,13 @@ public class ServerExplosion implements Explosion {
@@ -15,13 +15,13 @@ index 6030c4eefd77969a1a9251de76d4291dcb0a2092..ea9c641fe9a9685307b6de2999ea4ff5
- this.level
- .getBlockState(blockPos)
- .onExplosionHit(this.level, blockPos, this, (itemStack, blockPos1) -> addOrAppendStack(list, itemStack, blockPos1));
+ // Leaf start - BlockExplosionHitEvent
+ if(new org.dreeam.leaf.event.BlockExplosionHitEvent(CraftLocation.toBukkit(blockPos, bworld).getBlock(), this.source == null ? null : this.source.getBukkitEntity(), org.bukkit.craftbukkit.CraftExplosionResult.toBukkit(this.blockInteraction)).callEvent()) {
+ // Leaf start - Add BlockExplosionHitEvent
+ if (new org.dreeam.leaf.event.BlockExplosionHitEvent(CraftLocation.toBukkit(blockPos, bworld).getBlock(), this.source == null ? null : this.source.getBukkitEntity(), org.bukkit.craftbukkit.CraftExplosionResult.toBukkit(this.blockInteraction)).callEvent()) {
+ this.level
+ .getBlockState(blockPos)
+ .onExplosionHit(this.level, blockPos, this, (itemStack, blockPos1) -> addOrAppendStack(list, itemStack, blockPos1));
+ }
+ // Leaf end
+ // Leaf end - Add BlockExplosionHitEvent
}
for (ServerExplosion.StackCollector stackCollector : list) {

View File

@@ -17,7 +17,7 @@ index 0a5611b1ece4dbe2887e7fbdef45f58e7f4d53ad..9f6fc274525f2fe4e4e35e0feaa410bf
public static final StringRepresentable.EnumCodec<EquipmentSlot> CODEC = StringRepresentable.fromEnum(EquipmentSlot::values);
public static final StreamCodec<ByteBuf, EquipmentSlot> STREAM_CODEC = ByteBufCodecs.idMapper(BY_ID, equipmentSlot -> equipmentSlot.id);
diff --git a/net/minecraft/world/level/ServerExplosion.java b/net/minecraft/world/level/ServerExplosion.java
index ea9c641fe9a9685307b6de2999ea4ff5342269b7..ae0dab1f8470cf53031a2ba776fa70d8ae074a87 100644
index f76ec9520f6a2ee42ed3ba65068c01f4b9bc8746..18f11006f0f4b3214c311f2db193df11736cd75c 100644
--- a/net/minecraft/world/level/ServerExplosion.java
+++ b/net/minecraft/world/level/ServerExplosion.java
@@ -532,7 +532,7 @@ public class ServerExplosion implements Explosion {

View File

@@ -100,7 +100,7 @@ index 4535858701b2bb232b9d2feb2af6551526232ddc..e65c62dbe4c1560ae153e4c4344e9194
- // Paper end - detailed watchdog information
}
diff --git a/net/minecraft/server/level/ServerChunkCache.java b/net/minecraft/server/level/ServerChunkCache.java
index 55f20122732e88037d24be311469b6cab72c37ad..2f927b422c2c4f2f65d822befe3cbfd9e3bb3708 100644
index c1efd558cfbfd2200295ef5755aa496e95deb7d7..15bbd1f7f2a90b4b5427026d622764bb1c92d465 100644
--- a/net/minecraft/server/level/ServerChunkCache.java
+++ b/net/minecraft/server/level/ServerChunkCache.java
@@ -506,9 +506,10 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon
@@ -149,10 +149,10 @@ index 7955a8fa9c4de139b24c9d53018b055ff4008e02..eb849c57992658005e0f514c6f7923f8
private void tickPassenger(Entity ridingEntity, Entity passengerEntity, final boolean isActive) { // Paper - EAR 2
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 80baa2dff5c1034a72271fc727fdb2acc1b69488..9f581d5bdc3f658694bbd8c80abbce4e27e568d3 100644
index 64f24d3e0ecb91e0b4df6229354aeac549234f1b..df23d80d6b18e900414aa02e5c1812f0a10f0fb7 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -1147,31 +1147,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -1145,31 +1145,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
return this.onGround;
}
@@ -184,7 +184,7 @@ index 80baa2dff5c1034a72271fc727fdb2acc1b69488..9f581d5bdc3f658694bbd8c80abbce4e
public void move(MoverType type, Vec3 movement) {
// Gale start - VMP - skip entity move if movement is zero
if (!this.boundingBoxChanged && movement.equals(Vec3.ZERO)) {
@@ -1179,16 +1154,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -1177,16 +1152,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
}
// Gale end - VMP - skip entity move if movement is zero
final Vec3 originalMovement = movement; // Paper - Expose pre-collision velocity
@@ -201,7 +201,7 @@ index 80baa2dff5c1034a72271fc727fdb2acc1b69488..9f581d5bdc3f658694bbd8c80abbce4e
if (this.noPhysics) {
this.setPos(this.getX() + movement.x, this.getY() + movement.y, this.getZ() + movement.z);
} else {
@@ -1309,13 +1275,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -1307,13 +1273,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
// Gale end - skip negligible planar movement multiplication
}
}
@@ -215,7 +215,7 @@ index 80baa2dff5c1034a72271fc727fdb2acc1b69488..9f581d5bdc3f658694bbd8c80abbce4e
}
private void applyMovementEmissionAndPlaySound(Entity.MovementEmission movementEmission, Vec3 movement, BlockPos pos, BlockState state) {
@@ -4881,9 +4840,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -4879,9 +4838,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
}
public void setDeltaMovement(Vec3 deltaMovement) {
@@ -225,7 +225,7 @@ index 80baa2dff5c1034a72271fc727fdb2acc1b69488..9f581d5bdc3f658694bbd8c80abbce4e
}
public void addDeltaMovement(Vec3 addend) {
@@ -4989,9 +4946,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -4987,9 +4944,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
}
// Paper end - Fix MC-4
if (this.position.x != x || this.position.y != y || this.position.z != z) {

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Use UUID for cure reputation
diff --git a/net/minecraft/world/entity/monster/ZombieVillager.java b/net/minecraft/world/entity/monster/ZombieVillager.java
index d4b6c93f9f0e109be300164c4fd9167aba2d951c..301228895f0347ec514cefc8a11d8ca7bc2f2225 100644
index d4b6c93f9f0e109be300164c4fd9167aba2d951c..138e62965a4e532972e51c16b429e050bb147788 100644
--- a/net/minecraft/world/entity/monster/ZombieVillager.java
+++ b/net/minecraft/world/entity/monster/ZombieVillager.java
@@ -310,9 +310,10 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder {
@@ -16,7 +16,7 @@ index d4b6c93f9f0e109be300164c4fd9167aba2d951c..301228895f0347ec514cefc8a11d8ca7
if (playerByUuid instanceof ServerPlayer) {
CriteriaTriggers.CURED_ZOMBIE_VILLAGER.trigger((ServerPlayer)playerByUuid, this, villager);
- serverLevel.onReputationEvent(ReputationEventType.ZOMBIE_VILLAGER_CURED, playerByUuid, villager);
+ // serverLevel.onReputationEvent(ReputationEventType.ZOMBIE_VILLAGER_CURED, playerByUuid, villager); // Leaf - move up
+ //serverLevel.onReputationEvent(ReputationEventType.ZOMBIE_VILLAGER_CURED, playerByUuid, villager); // Leaf - Use UUID for cure reputation - move up
}
}

View File

@@ -5,14 +5,14 @@ Subject: [PATCH] Cache potential behaviors in Brain
diff --git a/net/minecraft/world/entity/ai/Brain.java b/net/minecraft/world/entity/ai/Brain.java
index 97dad57ba873c0f6404a490e358739dbaf11bc55..34b66ee67927bc0796d6c5f069393618abca9d74 100644
index 4dde1642a33349335f374f17123a700dde1079d7..5e86c8f6dffc7b4dd17acc43ec4c458368bf92a4 100644
--- a/net/minecraft/world/entity/ai/Brain.java
+++ b/net/minecraft/world/entity/ai/Brain.java
@@ -60,6 +60,7 @@ public class Brain<E extends LivingEntity> {
private Activity defaultActivity = Activity.IDLE;
private long lastScheduleUpdate = -9999L;
+ private ObjectArrayList<BehaviorControl<? super E>> cachedPotentialBehaviors;
+ private ObjectArrayList<BehaviorControl<? super E>> cachedPotentialBehaviors; // Leaf - Cache potential behaviors in Brain
public static <E extends LivingEntity> Brain.Provider<E> provider(
Collection<? extends MemoryModuleType<?>> memoryTypes, Collection<? extends SensorType<? extends Sensor<? super E>>> sensorTypes
) {
@@ -20,7 +20,7 @@ index 97dad57ba873c0f6404a490e358739dbaf11bc55..34b66ee67927bc0796d6c5f069393618
for (Brain.MemoryValue<?> memoryValue : memoryValues) {
memoryValue.setMemoryInternal(this);
}
+ this.invalidateBehaviorCache();
+ this.invalidateBehaviorCache(); // Leaf - Cache potential behaviors in Brain
}
public <T> DataResult<T> serializeStart(DynamicOps<T> ops) {
@@ -28,7 +28,7 @@ index 97dad57ba873c0f6404a490e358739dbaf11bc55..34b66ee67927bc0796d6c5f069393618
this.activeActivities.clear();
this.activeActivities.addAll(this.coreActivities);
this.activeActivities.add(activity);
+ this.invalidateBehaviorCache();
+ this.invalidateBehaviorCache(); // Leaf - Cache potential behaviors in Brain
}
}
@@ -36,56 +36,47 @@ index 97dad57ba873c0f6404a490e358739dbaf11bc55..34b66ee67927bc0796d6c5f069393618
.computeIfAbsent(activity, activity1 -> new it.unimi.dsi.fastutil.objects.ObjectLinkedOpenHashSet<>()) // Leaf - Replace brain activity maps with optimized collection
.add((BehaviorControl<? super E>)pair.getSecond());
}
+ this.invalidateBehaviorCache();
+ this.invalidateBehaviorCache(); // Leaf - Cache potential behaviors in Brain
}
@VisibleForTesting
public void removeAllBehaviors() {
this.availableBehaviorsByPriority.clear();
+ this.invalidateBehaviorCache();
+ this.invalidateBehaviorCache(); // Leaf - Cache potential behaviors in Brain
}
public boolean isActive(Activity activity) {
@@ -452,30 +457,40 @@ public class Brain<E extends LivingEntity> {
@@ -452,23 +457,44 @@ public class Brain<E extends LivingEntity> {
}
}
- private void startEachNonRunningBehavior(ServerLevel level, E entity) {
- // Leaf start - Collect then startEachNonRunningBehavior in Brain
- final long gameTime = level.getGameTime();
- List<BehaviorControl<? super E>> behaviorsToStart = new ObjectArrayList<>();
-
- for (Activity activeActivity : this.activeActivities) {
- for (Map<Activity, Set<BehaviorControl<? super E>>> priorityMap : this.availableBehaviorsByPriority.values()) {
- Set<BehaviorControl<? super E>> behaviors = priorityMap.get(activeActivity);
-
- if (behaviors != null && !behaviors.isEmpty()) {
- for (BehaviorControl<? super E> behaviorControl : behaviors) {
- if (behaviorControl.getStatus() == Behavior.Status.STOPPED) {
- behaviorsToStart.add(behaviorControl);
- }
- long gameTime = level.getGameTime();
+ // Leaf start - Cache potential behaviors in Brain
+ private void invalidateBehaviorCache() {
+ this.cachedPotentialBehaviors = null;
+ }
+
+ private void rebuildBehaviorCache() {
+ this.cachedPotentialBehaviors = new ObjectArrayList<>(30);
+
+ for (Map<Activity, Set<BehaviorControl<? super E>>> map : this.availableBehaviorsByPriority.values()) {
for (Map<Activity, Set<BehaviorControl<? super E>>> map : this.availableBehaviorsByPriority.values()) {
- for (Entry<Activity, Set<BehaviorControl<? super E>>> entry : map.entrySet()) {
+ for (Map.Entry<Activity, Set<BehaviorControl<? super E>>> entry : map.entrySet()) {
+ Activity activity = entry.getKey();
+ if (this.activeActivities.contains(activity)) {
Activity activity = entry.getKey();
if (this.activeActivities.contains(activity)) {
- for (BehaviorControl<? super E> behaviorControl : entry.getValue()) {
- if (behaviorControl.getStatus() == Behavior.Status.STOPPED) {
- behaviorControl.tryStart(level, entity, gameTime);
- }
+ for (BehaviorControl<? super E> task : entry.getValue()) {
+ this.cachedPotentialBehaviors.add(task);
}
}
}
}
- if (!behaviorsToStart.isEmpty()) {
- for (BehaviorControl<? super E> behaviorControl : behaviorsToStart) {
- behaviorControl.tryStart(level, entity, gameTime);
+ }
+
}
+ private ObjectArrayList<BehaviorControl<? super E>> getPotentialBehaviors() {
+ if (this.cachedPotentialBehaviors == null) {
+ this.rebuildBehaviorCache();
@@ -99,9 +90,11 @@ index 97dad57ba873c0f6404a490e358739dbaf11bc55..34b66ee67927bc0796d6c5f069393618
+ for (BehaviorControl<? super E> task : this.getPotentialBehaviors()) {
+ if (task.getStatus() == Behavior.Status.STOPPED) {
+ task.tryStart(level, entity, startTime);
}
}
- // Leaf end - Collect then startEachNonRunningBehavior in Brain
}
+ }
+ }
+ }
+ // Leaf end - Cache potential behaviors in Brain
+
private void tickEachRunningBehavior(ServerLevel level, E entity) {
long gameTime = level.getGameTime();

Some files were not shown because too many files have changed in this diff Show More