Compare commits

...

14 Commits

Author SHA1 Message Date
github-actions[bot]
257f3db70f Updated Upstream (Purpur)
Upstream has released updates that appear to apply and compile correctly

Purpur Changes:
PurpurMC/Purpur@9429820 Add environment variable to bypass idle kick permission
2023-04-14 06:52:05 +00:00
github-actions[bot]
d87eaf8a8b Updated Upstream (Purpur)
Upstream has released updates that appear to apply and compile correctly

Purpur Changes:
PurpurMC/Purpur@f69b21d Updated Upstream (Paper)
2023-04-14 05:37:20 +00:00
IPECTER
58818c543a Updated Upstream (Paper & Pufferfish & Purpur) 2023-04-14 12:28:50 +09:00
github-actions[bot]
170e37b1a8 [CI-Skip] Updated Dependencies (Wrapper)
Dependency has released updates that appear to apply and compile correctly

Wrapper Changes:
gradle/gradle@bee2fa4 Extract utility method `DefaultTypeValidationContext.throwOnProblemsOf`
gradle/gradle@a7d25f0 Polish `DefaultNodeValidator`
gradle/gradle@a78988e Format `DefaultTransformationRegistrationFactory`
gradle/gradle@0f9410b Ensure flow actions cannot depend on tasks (yet)
gradle/gradle@ca18f72 Fix CC compat for JavaCompileTaskOperationResultIntegTest
gradle/gradle@b2539da Merge pull request #23887 Support JDK 20 (compiling and testing only)
gradle/gradle@c7c7dc5 Merge pull request #24061 Promote configuration cache as stable
gradle/gradle@5a458a2 Merge branch 'release' into sigushkin/resource-groovy-methods-interceptors
gradle/gradle@7c4cac0 Annotate listeners not supported for Gradle.addListener with CC
gradle/gradle@3aeb666 Allow DependencyResolutionListener to be used with CC
gradle/gradle@21d2d78 Merge pull request #24188 Simplify Java Compile result post-processing
gradle/gradle@6e930b5 Merge pull request #24245 Ensure flow actions cannot depend on tasks (yet)
gradle/gradle@f7e432e Upgrade smoke tested plugin versions
gradle/gradle@5306bda FreeFair AspectJ plugin now works with configuration caching
gradle/gradle@335c847 ProGuard task now passes validation
gradle/gradle@94f0b04 Split `setJvmArgs` and checking debug configuration for `JvmOptions`
gradle/gradle@ea14e48 Move new methods to `JavaForkOptionsInternal`
gradle/gradle@8610e25 Disallow mutations in `ImmutableJavaForkOptions`
gradle/gradle@59bf4ed Rename `installJvmArgs` to `setExtraJvmArgs` for clarity
gradle/gradle@ac73ef6 Polish `JvmOptions`
gradle/gradle@6b91cc9 Polish `JavaExec`
gradle/gradle@566f9f9 Merge pull request #22523 Report problem for task convention access at execution time
gradle/gradle@7176c6d Fix build listener-related tests
gradle/gradle@6d44cfd Merge branch 'release' into sigushkin/resource-groovy-methods-interceptors
gradle/gradle@d8545fa Merge pull request #24242 Improve performance of serializing file collection dependencies to configuration cache
gradle/gradle@478de35 Disable docs tests that use bintray plugin
gradle/gradle@134da90 Spotless now requires Java 11
gradle/gradle@31eda5d Micronaut now requires Java 11
gradle/gradle@ece5836 Merge pull request #24257 Fix JavaExecDebugIntegrationTest
gradle/gradle@9d3d6a1 Merge pull request #24165 Introduce a tool for generating JVM bytecode & Groovy interceptors; Add more `File` related APIs to configuration input tracking
gradle/gradle@91b6079 Merge pull request #24184 Warn when using deprecated listeners as loggers
gradle/gradle@03a2448 Add an upgrade entry about CACHEDIR.TAG
gradle/gradle@98f27ca Merge pull request #24250 Upgrade smoke tested plugin versions
gradle/gradle@d3ded0e Disable CC encryption in preparation for 8.1
gradle/gradle@7fd8e70 Merge pull request #24224 Mark `WorkerDaemonLoggingIntegrationTest."log messages are still delivered to the build process after a worker action runs"` as flaky
gradle/gradle@7c6929d Merge pull request #24278 Cherry-pick 24224 to release
gradle/gradle@4e5e04e Add flaky annotation
gradle/gradle@45c87fb Merge pull request #24284 Mark `DependencyArtifactDownloadProgressEventCrossVersionTest` as flaky
gradle/gradle@3b7de30 Merge pull request #24277 Disable CC encryption in preparation for 8.1
gradle/gradle@b93e58b Update upgrade guide reference
gradle/gradle@d9da796 Generate contributors list
gradle/gradle@b418922 Improve release notes check / update tasks
gradle/gradle@34b68f1 Improve release notes
gradle/gradle@88d9eb4 Add release highlights
gradle/gradle@a557a2b Improve CC documentation
gradle/gradle@e3711cc Make ToPlannedNodeConverterRegistry thread safe
gradle/gradle@f6b887c Merge pull request #24233 Misc release notes improvements
gradle/gradle@57ec884 Update performance baseline to a non-dangling commit
gradle/gradle@2bcc019 Fix javadoc
gradle/gradle@3587b1f Fix execution plan resolution in build operation
gradle/gradle@250062b Improve javadoc
gradle/gradle@524788a Make NodeType sets static
gradle/gradle@88ce8f4 Merge pull request #24305 Fix execution plan resolution in build operation
gradle/gradle@f8cd4e1 Add a special metadata for operations running transform actions
gradle/gradle@5b94e3b Rename TaskExecutionTracker -> WorkExecutionTracker
gradle/gradle@5a239d5 Track transform actions and allow them to start external processes
gradle/gradle@e13657a Do not treat files opened inside TransformAction as build inputs
gradle/gradle@f23c52b Unignore doc tests that pass now with CC enabled
gradle/gradle@3a0ba43 Upgradle to latest nightly
gradle/gradle@6a74393 Merge pull request #24292 Allow external processes and file reads in transforms
gradle/gradle@1a95024 Document cache marking feature
gradle/gradle@e7c619d Merge pull request #24291 Make ToPlannedNodeConverterRegistry thread safe
gradle/gradle@c9a188c Report problem for external process started at configuration time by default
gradle/gradle@9192d1c Merge pull request #24306 Unignore doc tests that pass now with CC enabled
gradle/gradle@6d0149d Merge pull request #24307 Upgradle to latest nightly
gradle/gradle@751a5b2 Merge pull request #24213 Report problem for external process started at configuration time by default
gradle/gradle@35b9dbe Merge pull request #24265 Add cache marking documentation
gradle/gradle@fb4bace Remove "lambdas unsupported" section from CC docs
gradle/gradle@92b9e72 Add `@ServiceScope(Global)` annotation to `FileLockManager`
gradle/gradle@a47a461 Implement unconditional CC encryption
gradle/gradle@f525144 Specify keystore type to use explicitly
gradle/gradle@a016bf1 Lock Gradle keystore to avoid race condition when creating it
gradle/gradle@76f8923 Simplify `EncryptionService`
gradle/gradle@0ac2072 Move keystore creation to cache initializer
gradle/gradle@e09d337 Set a password for checking the keystore integrity
gradle/gradle@da7afcc Recover from more keystore failures
gradle/gradle@921434e Use more explicit names for the cc keystore cache
gradle/gradle@e1b5bb3 Polish `EncryptionService`
gradle/gradle@71e5266 Update plugin support status for configuration cache
gradle/gradle@fdc50b0 Remove external processes note from STABLE_CONFIGURATION_CACHE doc
gradle/gradle@4deeeae Rebaseline performance tests
gradle/gradle@9630810 Merge pull request #24293 Encrypt configuration cache unconditionally
gradle/gradle@58b6883 Merge pull request #24316 Clean up obsolete CC warnings from the docs
gradle/gradle@47c92e2 Enable `load-after-store` for `diagnostics` project
gradle/gradle@69c174d Make `DependencyReportTaskIntegrationTest` CC compatible
gradle/gradle@36febf4 Make `DependencyInsightReportTask` load-after-store compatible
gradle/gradle@40c6f07 Mark some tests in `DependencyInsightReportTaskIntegrationTest` as `ToBeFixedForConfigurationCache`
gradle/gradle@7a4e83b Merge pull request #24350 Dependency insight load after store compatibility
gradle/gradle@e916a70 Mark `dependentComponents` task as `notCompatibleWithConfigurationCache`
gradle/gradle@0568a40 Remove `@ToBeFixedForConfigurationCache` from `NativeDependentComponentsReportIntegrationTest`
gradle/gradle@0285bfa Ignore illegal `Task.getProject` access from some AGP tasks
gradle/gradle@d478204 Un-ignore `Task.getProject` access in AGP smoke tests
gradle/gradle@0c80a31 Add a workaround for the enterprise plugin
gradle/gradle@a7e5155 Merge pull request #24359 Mark `dependentComponents` task as `notCompatibleWithConfigurationCache`
gradle/gradle@da58e17 Merge pull request #24344 Add a workaround for the enterprise plugin
gradle/gradle@995776f Add "Dataflow Actions" userguide page
gradle/gradle@c81f516 Link dataflow actions from the configuration cache userguide chapter
gradle/gradle@23992c0 Link to FlowProviders from deprecated buildFinished callbacks
gradle/gradle@7b1b2b2 Integrate release notes preamble
gradle/gradle@18d19f3 Integrate configuration cache release notes
gradle/gradle@4ad0942 Merge pull request #24358 Add workarounds for illegal `Task.getProject` access in AGP
gradle/gradle@cc14cb6 Integrate kotlin DSL release notes
gradle/gradle@b482a04 Integrate JVM and other improvements release notes
gradle/gradle@e2c5a64 Integrate IDE and promoted features release notes
gradle/gradle@3850d3e Merge pull request #24361 Release notes for Gradle 8.1
gradle/gradle@69fe4e5 Update dataflow_actions.adoc
gradle/gradle@f60a171 Merge pull request #24360 Flow actions docs
gradle/gradle@dde7adf Fix deadlock when finding resources to lock
gradle/gradle@61b5375 Add stub for BuildServiceRegistryInternal
gradle/gradle@ccd3b89 Update test as we no longer resolve providers
gradle/gradle@15b22a2 Unify Task#usesService() and ServiceReference
gradle/gradle@04edd51 Unify Task#usesService() and ServiceReference
gradle/gradle@9ca9891 Fix wording/links in javadoc
gradle/gradle@bc9c6d3 Revert unneeded changes
gradle/gradle@95b9b95 Revert unneeded changes
gradle/gradle@d01b348 Add a link to the dataflow userguide from release notes
gradle/gradle@1a9decd Merge pull request #24354 Fix deadlock when finding resources to lock
gradle/gradle@b33c0d3 Remove team member from external contributors
gradle/gradle@aafa8e3 Merge pull request #24364 Add a link to the dataflow userguide from release notes
gradle/gradle@67fe82f Refine clean up rules for Check/Promotion project
gradle/gradle@644e59c Rewrite Dataflow API release notes section
gradle/gradle@c87ec9f Add syntax highlighting to snippets missing it
gradle/gradle@a2184c7 Update subprojects/docs/src/docs/release/notes.md
gradle/gradle@f2af0e1 Merge pull request #24366 Dataflow release notes refined
gradle/gradle@d8f22fd whats-new-addition
gradle/gradle@68448ca Disable Kotlin DSL script compilation avoidance
gradle/gradle@58e5e60 Merge pull request #24374 whats-new-addition
gradle/gradle@ab5ffec Merge pull request #24378 Disable Kotlin DSL script compilation avoidance
gradle/gradle@e9becd4 Fix PlannedTransformStepIdentity.consumerProjectPath
gradle/gradle@7b04ff3 Merge pull request #24381 Fix PlannedTransformStepIdentity.consumerProjectPath
gradle/gradle@bec0ee9 Merge pull request #24365 Refine clean up rules for Check/Promotion project
gradle/gradle@3408576 Update release wrapper
gradle/gradle@f0d6e68 Merge pull request #24384 Update release wrapper
gradle/gradle@e4350c3 Rebaseline performance tests
gradle/gradle@cd44247 Merge pull request #24386 Rebaseline performance tests
gradle/gradle@8a68be3 Update GE Gradle plugin to 3.12.5
gradle/gradle@de88635 Merge pull request #24392 Update GE Gradle plugin to 3.12.5
gradle/gradle@b98a2ac Update wrapper to 8.1 RC1
gradle/gradle@940410f Merge pull request #24402 Update wrapper to 8.1 RC1
gradle/gradle@22fa9c4 Add a note about Kotlin assignment IDE issues
gradle/gradle@a4049d4 Add some spacing for Kotlin assignment IDE issues in release notes
gradle/gradle@503916d Merge pull request #24418 Add a note about Kotlin assignment IDE issues
gradle/gradle@bd7b186 Add regression test for version catalog accessor usage in KTS applied script
gradle/gradle@bd9f4e2 Let version catalog accessors be available in buildscript block of applied scripts
gradle/gradle@3ff0d0c Merge pull request #24391 Change CI so dependencies fail the promotion stage immediately
gradle/gradle@5be8a21 Merge pull request #24437 Cherry-pick #24391 to release
gradle/gradle@eb4cce6 Drop duplicates from GMM
gradle/gradle@b34664f Move deduplication logic
gradle/gradle@400a902 Document deduplication requirement
gradle/gradle@54de4ac Adds more tests for contract enforcement
gradle/gradle@7749aa2 Merge pull request #24339 Drop duplicates from GMM
gradle/gradle@5bbf738 Remove incubating from WriteProperties.getDestinationFile
gradle/gradle@48a193e Merge pull request #24427 Let version catalog accessors be available in `buildscript {}` block of applied KTS scripts
gradle/gradle@6a97fca Revert "Adjust test for VersionNumber deprecation"
gradle/gradle@0fd6211 Revert "Let org.gradle.util.VersionNumber report its deprecation"
gradle/gradle@0aba3ab Adjust GrettySmokeTest for VersionNumber un-nagging
gradle/gradle@e384c20 Update TODO in VersionNumber for future nagging
gradle/gradle@c53b1f7 Adjust PlayPluginSmokeTest for VersionNumber un-nagging
gradle/gradle@7d8caca Reduce changeset removing nagging in VersionNumber
gradle/gradle@079293f Warn about potential collisions with new API
gradle/gradle@a924f60 Merge pull request #24448 Warn about potential collisions with new API
gradle/gradle@a0fb14f Remove unused import in GrettySmokeTest
gradle/gradle@9b3a091 Merge pull request #24442 Remove incubating from destination file
gradle/gradle@bb45c5a Use identity path in TaskIdentity toString
gradle/gradle@45bff0b Extend transform operations test coverage
gradle/gradle@6a19034 Return a colon-prefixed build path for ProjectComponentIdentifier
gradle/gradle@5c6c3b0 JvmArgs are empty by default
gradle/gradle@de8c65d Fix non-deterministic ordering in interceptor code generation
gradle/gradle@438de97 Mention renaming of CC properties in upgrade guide
gradle/gradle@c6bbc9f Merge pull request #24434 Mention renaming of CC properties in upgrade guide
gradle/gradle@31061c9 Support multi-release JARs with agent-based instrumentation
gradle/gradle@4cf8329 Note that feature flag not required for external process detection
gradle/gradle@0d5bf64 Merge pull request #24441 Support multi-release JARs with agent-based instrumentation
gradle/gradle@3198ed4 Merge pull request #24451 Fix buildPath to return a colon-prefixed path in ProjectComponentIdentifier
gradle/gradle@d96e5a6 Merge pull request #24449 Revert deprecation nagging in `VersionNumber` because of IntelliJ and Android Studio
gradle/gradle@7d0c90e Fix cache layout value
gradle/gradle@15a5139 Merge pull request #24459 Fix cache layout value
gradle/gradle@ebf78f2 Merge pull request #24438 JvmArgs are empty by default
gradle/gradle@5c40caf Update subprojects/docs/src/docs/userguide/migration/upgrading_version_8.adoc
gradle/gradle@952aae0 Merge pull request #24454 Note that feature flag not required for external process detection
gradle/gradle@1a485c4 Revert classpath ordering of distribution-loaded test framework classes
gradle/gradle@c8a0fd7 Merge pull request #24472 Revert classpath ordering of distribution-loaded test framework classes
gradle/gradle@952a346 Demote CC debug/quiet/recreate-cache to internal
gradle/gradle@368fd81 Demote CC debug/quiet/recreate-cache to internal
gradle/gradle@7097e77 Merge pull request #24431 Demote CC quiet|debug|recreate-cache options to internal
gradle/gradle@827ca0b Fix cache layout and update docs
gradle/gradle@4077fe2 Disable CC for `--export-keys`
gradle/gradle@28e5fb6 Re-enable kotlin script compilation avoidance
gradle/gradle@0c0dadf Reproducer test for kotlin script compilation cache misses
gradle/gradle@05f685e Let kotlin script compilation avoidance fallback to a runtime classpath fingerprint
gradle/gradle@139797b Allow `notCompatibleWithConfigurationCache` tasks to configure others
gradle/gradle@9a7c410 Supply a dummy LocalTaskNode when calling ProjectBuilderSpec.execute
gradle/gradle@a452a7d Adjust CC test compatibility annotations in BuildScriptCompileAvoidanceIntegrationTest
gradle/gradle@75a4c4d Merge pull request #24480 Disable CC for `--export-keys`
gradle/gradle@ca1c61a Add Plugin Publish plugin changes to the upgrade guide
gradle/gradle@16acc31 Unignore tests that now pass with CC
gradle/gradle@d044dcf Merge pull request #24471 Allow `notCompatibleWithConfigurationCache` tasks to configure others
gradle/gradle@af094dd Add an escape hatch to disable kotlin script compilation avoidance
gradle/gradle@def01f3 Update Gradle Enterprise plugin to 3.12.6
gradle/gradle@28abcf5 Merge pull request #24479 Fix cache layout and update docs
gradle/gradle@4fec233 Merge pull request #24483 Fix and re-enable kotlin script compilation avoidance
gradle/gradle@911cb5b Merge pull request #24487 Update Gradle Enterprise plugin to 3.12.6
gradle/gradle@321b79e Add regression test for stage2 accessors in applied scripts
gradle/gradle@fb315b9 Move project accessors generation from Interpreter to its Host
gradle/gradle@457793d Applied scripts don't have second stage accessors
gradle/gradle@ef1ce49 Enhance regression test
gradle/gradle@d6f8402 Merge pull request #24499 Fix accessors generation for applied kotlin scripts
gradle/gradle@d9cc163 Don't nag about reported problems
gradle/gradle@e95305a Improve test to also cover deprecation
gradle/gradle@14e268e Update STABLE_CONFIGURATION_CACHE documentation
gradle/gradle@695f2c4 Describe configuration cache encryption in the docs
gradle/gradle@73c138f Polish configuration cache docs
gradle/gradle@5ac901b Merge pull request #24522 Don't nag about reported problems
gradle/gradle@2c3ac0a Revert "Merge pull request #23829 Deprecate COD-Kotlin DSL combination"
gradle/gradle@87efc7b Address review concerns
gradle/gradle@f5c749d Merge pull request #24486 Add Plugin Publish plugin changes to the upgrade guide
gradle/gradle@e948e20 Merge pull request #24533 Revert "Merge pull request #23829 Deprecate COD-Kotlin DSL combination"
gradle/gradle@21ff06d (minor) Sort method elements later in the pipeline
gradle/gradle@e716082 Add test coverage for `ConfigurationCacheInstrumentationProcessor`
gradle/gradle@1c1b6ea Keep code generation deterministic regardless of method processing order
gradle/gradle@a3411de Bump instrumentation decoration format version after changes
gradle/gradle@2f02679 Update subprojects.json
gradle/gradle@659f18e Merge pull request #24453 Fix non-deterministic ordering in interceptor code generation
gradle/gradle@7f2319f Update CC compatibility notes for `java-gradle-plugin`
gradle/gradle@0daeeec Update wrapper to latest 8.1 nightly snapshot
gradle/gradle@b2866d0 Merge pull request #24542 Update CC compatibility notes for `java-gradle-plugin`
gradle/gradle@b74032a Merge pull request #24543 Update wrapper to latest 8.1 nightly snapshot
gradle/gradle@21da4ec Rebaseline performance tests
gradle/gradle@b7cde67 Merge pull request #24548 Rebaseline performance tests
gradle/gradle@daabcf7 Upgradlew to 8.1 RC2
gradle/gradle@da1dda7 Merge pull request #24555 Upgradlew to 8.1 RC2
gradle/gradle@7a78608 Add integration test
gradle/gradle@d2b9fe1 Call toString on non-string keys
gradle/gradle@e6a9a64 Merge pull request #24601 Fix nested map properties with non-string keys
gradle/gradle@7eb689e Ignore failing native tests for now
gradle/gradle@6074da8 Update wrapper to 8.1 RC3
gradle/gradle@8049009 Merge pull request #24630 Update wrapper to 8.1 RC3
gradle/gradle@689ad68 Use convention plugin
gradle/gradle@5e78df6 Fix formatting
gradle/gradle@8ca0693 Remove unused import
gradle/gradle@9b90224 Fix fixture usage in integ test
gradle/gradle@31f8cd7 Merge pull request #24646 Use Foojay convention plugin when applying toolchains in Build Init
gradle/gradle@f6125cb Make JVM toolchain registry aware of the mutation barrier
gradle/gradle@770eee5 Realize jvm toolchain repositories when marked immutable
gradle/gradle@99f1d80 Add doc for --validate-only flag for publishPlugins task
gradle/gradle@06231c1 Add release notes for plugin publishing plugin 1.2.0
gradle/gradle@e76b4ef Merge pull request #24671 Release notes for plugin publishing 1.2.0
gradle/gradle@a63ac23 Merge pull request #24674 Make sure to finalize all `Property` when marking JVM toolchain repositories as immutable
gradle/gradle@0ac7ed5 Update wrapper to 8.1 RC4
gradle/gradle@40ba32c Merge pull request #24709 Update wrapper to 8.1 RC4
2023-04-12 12:32:43 +00:00
github-actions[bot]
fd6b333892 Updated Upstream (Paper & Purpur)
Upstream has released updates that appear to apply and compile correctly

Paper Changes:
PaperMC/Paper@1d2fe64 fix: null SpawnReason for new player (#9015)
PaperMC/Paper@9893e2b Deprecate ChatColor (#9069)
PaperMC/Paper@0849144 Do not send expired keys to players on login (#9090)
PaperMC/Paper@641dafd Cleanup some patches (#9093)
PaperMC/Paper@497b919 Fix ignoreCancelled having no effect on events registered by direct EventExecutor (#9099)

Purpur Changes:
PurpurMC/Purpur@285f9f6 Updated Upstream (Paper)
2023-04-04 22:30:57 +00:00
github-actions[bot]
9d437f2fb7 [CI-Skip] Updated Dependencies (Paperweight)
Dependency has released updates that appear to apply and compile correctly

Paperweight Changes:
PaperMC/Paperweight@ac168e2 1.5.4-SNAPSHOT
PaperMC/Paperweight@4e63b80 Support using glob syntax in mc dev imports
PaperMC/Paperweight@30f1b60 remove bannedClasses logic
PaperMC/Paperweight@aa146cd Add Folia devbundle extension
PaperMC/Paperweight@b56b118 feat(userdev): Add experimental (for now) option for shared userdev caches (#187)
PaperMC/Paperweight@11ba590 chore(userdev): log a message when experimental shared caches are enabled
PaperMC/Paperweight@a260d33 release: Version 1.5.4
2023-04-04 19:27:47 +00:00
github-actions[bot]
0e3c7ce677 Updated Upstream (Paper)
Upstream has released updates that appear to apply and compile correctly

Paper Changes:
PaperMC/Paper@50e683d Added a config option for ticking markers (#9034)
2023-04-02 18:36:35 +00:00
github-actions[bot]
f8a60b0396 Updated Upstream (Paper)
Upstream has released updates that appear to apply and compile correctly

Paper Changes:
PaperMC/Paper@5fb3ab0 Allow non player entities in scoreboards by default (#9082)
PaperMC/Paper@dc08c74 Remove duplicate animate packet for records (#8600)
2023-04-02 18:27:47 +00:00
github-actions[bot]
4aa7f613a7 Updated Upstream (Paper)
Upstream has released updates that appear to apply and compile correctly

Paper Changes:
PaperMC/Paper@1704bf7 [ci skip] Edit Paper download link in README (#9077)
2023-03-31 16:44:35 +00:00
github-actions[bot]
6c73bdb3af Updated Upstream (Paper)
Upstream has released updates that appear to apply and compile correctly

Paper Changes:
PaperMC/Paper@7a96bf2 Make debug dump file names consistent (#9075)
2023-03-31 11:35:57 +00:00
github-actions[bot]
613b2276ac Updated Upstream (Purpur)
Upstream has released updates that appear to apply and compile correctly

Purpur Changes:
PurpurMC/Purpur@bd5c4b6 Updated Upstream (Paper)
2023-03-31 07:23:41 +00:00
github-actions[bot]
9f9706a976 Updated Upstream (Paper)
Upstream has released updates that appear to apply and compile correctly

Paper Changes:
PaperMC/Paper@11ab383 Don't use plugin-profiling to enable timings
2023-03-31 05:22:19 +00:00
github-actions[bot]
54dfb768de Updated Upstream (Paper)
Upstream has released updates that appear to apply and compile correctly

Paper Changes:
PaperMC/Paper@06fdc02 [ci skip] Correct upstream/paper javadoc (#8286)
2023-03-31 04:29:07 +00:00
github-actions[bot]
02bf66a783 Updated Upstream (Purpur)
Upstream has released updates that appear to apply and compile correctly

Purpur Changes:
PurpurMC/Purpur@7f4822d [ci-skip] let's try using cache in github actions again
PurpurMC/Purpur@7cb1f46 Updated Upstream (Paper)
2023-03-31 03:25:53 +00:00
19 changed files with 522 additions and 674 deletions

View File

@@ -1,2 +1,2 @@
purpurCommit = 1924a57cc7a547de392686dc18fd0b1e137e95b1 purpurCommit = 9429820ef674811674c43475f55ed8a1cd76ed97
pufferfishCommit = 751dfb0338e2c09519313ffaca04084dc3140b80 pufferfishCommit = b7781634b0800476107ed4a0b38fb24c13da6bf8

View File

@@ -1,4 +1,3 @@
import io.papermc.paperweight.patcher.*
import io.papermc.paperweight.util.* import io.papermc.paperweight.util.*
import io.papermc.paperweight.util.constants.PAPERCLIP_CONFIG import io.papermc.paperweight.util.constants.PAPERCLIP_CONFIG
@@ -6,7 +5,7 @@ plugins {
java java
`maven-publish` `maven-publish`
id("com.github.johnrengelman.shadow") version "8.1.1" apply false id("com.github.johnrengelman.shadow") version "8.1.1" apply false
id("io.papermc.paperweight.patcher") version "1.5.3" id("io.papermc.paperweight.patcher") version "1.5.4"
} }
repositories { repositories {
@@ -20,7 +19,7 @@ repositories {
dependencies { dependencies {
remapper("net.fabricmc:tiny-remapper:0.8.6:fat") remapper("net.fabricmc:tiny-remapper:0.8.6:fat")
decompiler("net.minecraftforge:forgeflower:2.0.605.2") decompiler("net.minecraftforge:forgeflower:2.0.627.2")
paperclip("io.papermc:paperclip:3.0.3") paperclip("io.papermc:paperclip:3.0.3")
} }

View File

@@ -1,7 +1,7 @@
group = org.plazmamc.plazma group = org.plazmamc.plazma
version = 1.19.4-R0.1-SNAPSHOT version = 1.19.4-R0.1-SNAPSHOT
paperCommit = bf92f3e4db44d17dab7411b0a5474a6b2fabc3b5 paperCommit = 8d040fad9b4ddcc49a7b70c15b80b63c479eac95
org.gradle.caching = true org.gradle.caching = true
org.gradle.parallel = true org.gradle.parallel = true

View File

@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.1-bin.zip
networkTimeout=10000 networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

184
gradlew.bat vendored
View File

@@ -1,92 +1,92 @@
@rem @rem
@rem Copyright 2015 the original author or authors. @rem Copyright 2015 the original author or authors.
@rem @rem
@rem Licensed under the Apache License, Version 2.0 (the "License"); @rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License. @rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at @rem You may obtain a copy of the License at
@rem @rem
@rem https://www.apache.org/licenses/LICENSE-2.0 @rem https://www.apache.org/licenses/LICENSE-2.0
@rem @rem
@rem Unless required by applicable law or agreed to in writing, software @rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS, @rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and @rem See the License for the specific language governing permissions and
@rem limitations under the License. @rem limitations under the License.
@rem @rem
@if "%DEBUG%"=="" @echo off @if "%DEBUG%"=="" @echo off
@rem ########################################################################## @rem ##########################################################################
@rem @rem
@rem Gradle startup script for Windows @rem Gradle startup script for Windows
@rem @rem
@rem ########################################################################## @rem ##########################################################################
@rem Set local scope for the variables with windows NT shell @rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0 set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=. if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused @rem This is normally unused
set APP_BASE_NAME=%~n0 set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME% set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter. @rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe @rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1 %JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute if %ERRORLEVEL% equ 0 goto execute
echo. echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo. echo.
echo Please set the JAVA_HOME variable in your environment to match the echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation. echo location of your Java installation.
goto fail goto fail
:findJavaFromJavaHome :findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=% set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute if exist "%JAVA_EXE%" goto execute
echo. echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo. echo.
echo Please set the JAVA_HOME variable in your environment to match the echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation. echo location of your Java installation.
goto fail goto fail
:execute :execute
@rem Setup the command line @rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle @rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end :end
@rem End local scope for the variables with windows NT shell @rem End local scope for the variables with windows NT shell
if %ERRORLEVEL% equ 0 goto mainEnd if %ERRORLEVEL% equ 0 goto mainEnd
:fail :fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code! rem the _cmd.exe /c_ return code!
set EXIT_CODE=%ERRORLEVEL% set EXIT_CODE=%ERRORLEVEL%
if %EXIT_CODE% equ 0 set EXIT_CODE=1 if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE% exit /b %EXIT_CODE%
:mainEnd :mainEnd
if "%OS%"=="Windows_NT" endlocal if "%OS%"=="Windows_NT" endlocal
:omega :omega

View File

@@ -1,6 +1,6 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: AlphaKR93 <dev@alpha93.kr> From: AlphaKR93 <dev@alpha93.kr>
Date: Thu, 30 Mar 2023 06:56:29 +0000 Date: Fri, 14 Apr 2023 06:48:56 +0000
Subject: [PATCH] Pufferfish API Changes Subject: [PATCH] Pufferfish API Changes
Original: Kevin Raneri <kevin.raneri@gmail.com> Original: Kevin Raneri <kevin.raneri@gmail.com>
@@ -20,7 +20,7 @@ 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 <http://www.gnu.org/licenses/>.
diff --git a/build.gradle.kts b/build.gradle.kts diff --git a/build.gradle.kts b/build.gradle.kts
index cad12a2632b9ebb569280441c42869685db1f31a..b83e2c5a0a094002d12aee55ec0cf8d12bf33f3e 100644 index 279a666e8ea2c07f41ee3f28b768e95dca5f0a10..a93b900889ddb56a2943c54a7fff6f60f42a78f1 100644
--- a/build.gradle.kts --- a/build.gradle.kts
+++ b/build.gradle.kts +++ b/build.gradle.kts
@@ -42,6 +42,7 @@ dependencies { @@ -42,6 +42,7 @@ dependencies {
@@ -47,7 +47,7 @@ index cad12a2632b9ebb569280441c42869685db1f31a..b83e2c5a0a094002d12aee55ec0cf8d1
into("META-INF/maven/${project.group}/${project.name}") into("META-INF/maven/${project.group}/${project.name}")
diff --git a/src/main/java/gg/pufferfish/pufferfish/sentry/SentryContext.java b/src/main/java/gg/pufferfish/pufferfish/sentry/SentryContext.java diff --git a/src/main/java/gg/pufferfish/pufferfish/sentry/SentryContext.java b/src/main/java/gg/pufferfish/pufferfish/sentry/SentryContext.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..6fbaf2a232745db0a41394b1c2cc0cc90cefc4ee index 0000000000000000000000000000000000000000..10310fdd53de28efb8a8250f6d3b0c8eb08fb68a
--- /dev/null --- /dev/null
+++ b/src/main/java/gg/pufferfish/pufferfish/sentry/SentryContext.java +++ b/src/main/java/gg/pufferfish/pufferfish/sentry/SentryContext.java
@@ -0,0 +1,161 @@ @@ -0,0 +1,161 @@
@@ -69,21 +69,21 @@ index 0000000000000000000000000000000000000000..6fbaf2a232745db0a41394b1c2cc0cc9
+import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Nullable;
+ +
+public class SentryContext { +public class SentryContext {
+ +
+ private static final Gson GSON = new Gson(); + private static final Gson GSON = new Gson();
+ +
+ public static void setPluginContext(@Nullable Plugin plugin) { + public static void setPluginContext(@Nullable Plugin plugin) {
+ if (plugin != null) { + if (plugin != null) {
+ ThreadContext.put("pufferfishsentry_pluginname", plugin.getName()); + ThreadContext.put("pufferfishsentry_pluginname", plugin.getName());
+ ThreadContext.put("pufferfishsentry_pluginversion", plugin.getDescription().getVersion()); + ThreadContext.put("pufferfishsentry_pluginversion", plugin.getDescription().getVersion());
+ } + }
+ } + }
+ +
+ public static void removePluginContext() { + public static void removePluginContext() {
+ ThreadContext.remove("pufferfishsentry_pluginname"); + ThreadContext.remove("pufferfishsentry_pluginname");
+ ThreadContext.remove("pufferfishsentry_pluginversion"); + ThreadContext.remove("pufferfishsentry_pluginversion");
+ } + }
+ +
+ public static void setSenderContext(@Nullable CommandSender sender) { + public static void setSenderContext(@Nullable CommandSender sender) {
+ if (sender != null) { + if (sender != null) {
+ ThreadContext.put("pufferfishsentry_playername", sender.getName()); + ThreadContext.put("pufferfishsentry_playername", sender.getName());
@@ -92,15 +92,15 @@ index 0000000000000000000000000000000000000000..6fbaf2a232745db0a41394b1c2cc0cc9
+ } + }
+ } + }
+ } + }
+ +
+ public static void removeSenderContext() { + public static void removeSenderContext() {
+ ThreadContext.remove("pufferfishsentry_playername"); + ThreadContext.remove("pufferfishsentry_playername");
+ ThreadContext.remove("pufferfishsentry_playerid"); + ThreadContext.remove("pufferfishsentry_playerid");
+ } + }
+ +
+ public static void setEventContext(Event event, RegisteredListener registration) { + public static void setEventContext(Event event, RegisteredListener registration) {
+ setPluginContext(registration.getPlugin()); + setPluginContext(registration.getPlugin());
+ +
+ try { + try {
+ // Find the player that was involved with this event + // Find the player that was involved with this event
+ Player player = null; + Player player = null;
@@ -108,36 +108,36 @@ index 0000000000000000000000000000000000000000..6fbaf2a232745db0a41394b1c2cc0cc9
+ player = ((PlayerEvent) event).getPlayer(); + player = ((PlayerEvent) event).getPlayer();
+ } else { + } else {
+ Class<? extends Event> eventClass = event.getClass(); + Class<? extends Event> eventClass = event.getClass();
+ +
+ Field playerField = null; + Field playerField = null;
+ +
+ for (Field field : eventClass.getDeclaredFields()) { + for (Field field : eventClass.getDeclaredFields()) {
+ if (field.getType().equals(Player.class)) { + if (field.getType().equals(Player.class)) {
+ playerField = field; + playerField = field;
+ break; + break;
+ } + }
+ } + }
+ +
+ if (playerField != null) { + if (playerField != null) {
+ playerField.setAccessible(true); + playerField.setAccessible(true);
+ player = (Player) playerField.get(event); + player = (Player) playerField.get(event);
+ } + }
+ } + }
+ +
+ if (player != null) { + if (player != null) {
+ setSenderContext(player); + setSenderContext(player);
+ } + }
+ } catch (Exception e) {} // We can't really safely log exceptions. + } catch (Exception e) {} // We can't really safely log exceptions.
+ +
+ ThreadContext.put("pufferfishsentry_eventdata", GSON.toJson(serializeFields(event))); + ThreadContext.put("pufferfishsentry_eventdata", GSON.toJson(serializeFields(event)));
+ } + }
+ +
+ public static void removeEventContext() { + public static void removeEventContext() {
+ removePluginContext(); + removePluginContext();
+ removeSenderContext(); + removeSenderContext();
+ ThreadContext.remove("pufferfishsentry_eventdata"); + ThreadContext.remove("pufferfishsentry_eventdata");
+ } + }
+ +
+ private static Map<String, String> serializeFields(Object object) { + private static Map<String, String> serializeFields(Object object) {
+ Map<String, String> fields = new TreeMap<>(); + Map<String, String> fields = new TreeMap<>();
+ fields.put("_class", object.getClass().getName()); + fields.put("_class", object.getClass().getName());
@@ -146,7 +146,7 @@ index 0000000000000000000000000000000000000000..6fbaf2a232745db0a41394b1c2cc0cc9
+ if (Modifier.isStatic(declaredField.getModifiers())) { + if (Modifier.isStatic(declaredField.getModifiers())) {
+ continue; + continue;
+ } + }
+ +
+ String fieldName = declaredField.getName(); + String fieldName = declaredField.getName();
+ if (fieldName.equals("handlers")) { + if (fieldName.equals("handlers")) {
+ continue; + continue;
@@ -162,51 +162,51 @@ index 0000000000000000000000000000000000000000..6fbaf2a232745db0a41394b1c2cc0cc9
+ } + }
+ return fields; + return fields;
+ } + }
+ +
+ public static class State { + public static class State {
+ +
+ private Plugin plugin; + private Plugin plugin;
+ private Command command; + private Command command;
+ private String commandLine; + private String commandLine;
+ private Event event; + private Event event;
+ private RegisteredListener registeredListener; + private RegisteredListener registeredListener;
+ +
+ public Plugin getPlugin() { + public Plugin getPlugin() {
+ return plugin; + return plugin;
+ } + }
+ +
+ public void setPlugin(Plugin plugin) { + public void setPlugin(Plugin plugin) {
+ this.plugin = plugin; + this.plugin = plugin;
+ } + }
+ +
+ public Command getCommand() { + public Command getCommand() {
+ return command; + return command;
+ } + }
+ +
+ public void setCommand(Command command) { + public void setCommand(Command command) {
+ this.command = command; + this.command = command;
+ } + }
+ +
+ public String getCommandLine() { + public String getCommandLine() {
+ return commandLine; + return commandLine;
+ } + }
+ +
+ public void setCommandLine(String commandLine) { + public void setCommandLine(String commandLine) {
+ this.commandLine = commandLine; + this.commandLine = commandLine;
+ } + }
+ +
+ public Event getEvent() { + public Event getEvent() {
+ return event; + return event;
+ } + }
+ +
+ public void setEvent(Event event) { + public void setEvent(Event event) {
+ this.event = event; + this.event = event;
+ } + }
+ +
+ public RegisteredListener getRegisteredListener() { + public RegisteredListener getRegisteredListener() {
+ return registeredListener; + return registeredListener;
+ } + }
+ +
+ public void setRegisteredListener(RegisteredListener registeredListener) { + public void setRegisteredListener(RegisteredListener registeredListener) {
+ this.registeredListener = registeredListener; + this.registeredListener = registeredListener;
+ } + }
@@ -214,7 +214,7 @@ index 0000000000000000000000000000000000000000..6fbaf2a232745db0a41394b1c2cc0cc9
+} +}
diff --git a/src/main/java/gg/pufferfish/pufferfish/simd/SIMDChecker.java b/src/main/java/gg/pufferfish/pufferfish/simd/SIMDChecker.java diff --git a/src/main/java/gg/pufferfish/pufferfish/simd/SIMDChecker.java b/src/main/java/gg/pufferfish/pufferfish/simd/SIMDChecker.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..6d266ebf5e52745ad13e90e5754b524383fa9b29 index 0000000000000000000000000000000000000000..ab5fea0b03224bf249352ce340e94704ff713345
--- /dev/null --- /dev/null
+++ b/src/main/java/gg/pufferfish/pufferfish/simd/SIMDChecker.java +++ b/src/main/java/gg/pufferfish/pufferfish/simd/SIMDChecker.java
@@ -0,0 +1,40 @@ @@ -0,0 +1,40 @@
@@ -231,7 +231,7 @@ index 0000000000000000000000000000000000000000..6d266ebf5e52745ad13e90e5754b5243
+ */ + */
+@Deprecated +@Deprecated
+public class SIMDChecker { +public class SIMDChecker {
+ +
+ @Deprecated + @Deprecated
+ public static boolean canEnable(Logger logger) { + public static boolean canEnable(Logger logger) {
+ try { + try {
@@ -239,13 +239,13 @@ index 0000000000000000000000000000000000000000..6d266ebf5e52745ad13e90e5754b5243
+ return false; + return false;
+ } else { + } else {
+ SIMDDetection.testRun = true; + SIMDDetection.testRun = true;
+ +
+ VectorSpecies<Integer> ISPEC = IntVector.SPECIES_PREFERRED; + VectorSpecies<Integer> ISPEC = IntVector.SPECIES_PREFERRED;
+ VectorSpecies<Float> FSPEC = FloatVector.SPECIES_PREFERRED; + VectorSpecies<Float> FSPEC = FloatVector.SPECIES_PREFERRED;
+ +
+ logger.log(Level.INFO, "Max SIMD vector size on this system is " + ISPEC.vectorBitSize() + " bits (int)"); + logger.log(Level.INFO, "Max SIMD vector size on this system is " + ISPEC.vectorBitSize() + " bits (int)");
+ logger.log(Level.INFO, "Max SIMD vector size on this system is " + FSPEC.vectorBitSize() + " bits (float)"); + logger.log(Level.INFO, "Max SIMD vector size on this system is " + FSPEC.vectorBitSize() + " bits (float)");
+ +
+ if (ISPEC.elementSize() < 2 || FSPEC.elementSize() < 2) { + if (ISPEC.elementSize() < 2 || FSPEC.elementSize() < 2) {
+ logger.log(Level.WARNING, "SIMD is not properly supported on this system!"); + logger.log(Level.WARNING, "SIMD is not properly supported on this system!");
+ return false; + return false;
@@ -256,11 +256,11 @@ index 0000000000000000000000000000000000000000..6d266ebf5e52745ad13e90e5754b5243
+ } catch (NoClassDefFoundError | Exception ignored) {} // Basically, we don't do anything. This lets us detect if it's not functional and disable it. + } catch (NoClassDefFoundError | Exception ignored) {} // Basically, we don't do anything. This lets us detect if it's not functional and disable it.
+ return false; + return false;
+ } + }
+ +
+} +}
diff --git a/src/main/java/gg/pufferfish/pufferfish/simd/SIMDDetection.java b/src/main/java/gg/pufferfish/pufferfish/simd/SIMDDetection.java diff --git a/src/main/java/gg/pufferfish/pufferfish/simd/SIMDDetection.java b/src/main/java/gg/pufferfish/pufferfish/simd/SIMDDetection.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..fd708554d6dab2ddcd24c3024330b8ebf9462111 index 0000000000000000000000000000000000000000..a84889d3e9cfc4d7ab5f867820a6484c6070711b
--- /dev/null --- /dev/null
+++ b/src/main/java/gg/pufferfish/pufferfish/simd/SIMDDetection.java +++ b/src/main/java/gg/pufferfish/pufferfish/simd/SIMDDetection.java
@@ -0,0 +1,35 @@ @@ -0,0 +1,35 @@
@@ -270,11 +270,11 @@ index 0000000000000000000000000000000000000000..fd708554d6dab2ddcd24c3024330b8eb
+ +
+@Deprecated +@Deprecated
+public class SIMDDetection { +public class SIMDDetection {
+ +
+ public static boolean isEnabled = false; + public static boolean isEnabled = false;
+ public static boolean versionLimited = false; + public static boolean versionLimited = false;
+ public static boolean testRun = false; + public static boolean testRun = false;
+ +
+ @Deprecated + @Deprecated
+ public static boolean canEnable(Logger logger) { + public static boolean canEnable(Logger logger) {
+ try { + try {
@@ -283,7 +283,7 @@ index 0000000000000000000000000000000000000000..fd708554d6dab2ddcd24c3024330b8eb
+ return false; + return false;
+ } + }
+ } + }
+ +
+ @Deprecated + @Deprecated
+ public static int getJavaVersion() { + public static int getJavaVersion() {
+ // https://stackoverflow.com/a/2591122 + // https://stackoverflow.com/a/2591122
@@ -297,11 +297,11 @@ index 0000000000000000000000000000000000000000..fd708554d6dab2ddcd24c3024330b8eb
+ version = version.split("-")[0]; // Azul is stupid + version = version.split("-")[0]; // Azul is stupid
+ return Integer.parseInt(version); + return Integer.parseInt(version);
+ } + }
+ +
+} +}
diff --git a/src/main/java/gg/pufferfish/pufferfish/simd/VectorMapPalette.java b/src/main/java/gg/pufferfish/pufferfish/simd/VectorMapPalette.java diff --git a/src/main/java/gg/pufferfish/pufferfish/simd/VectorMapPalette.java b/src/main/java/gg/pufferfish/pufferfish/simd/VectorMapPalette.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..20ec3b29b0cb4061cc89d635b3929ffe71008e22 index 0000000000000000000000000000000000000000..ae2464920c9412ac90b819a540ee58be0741465f
--- /dev/null --- /dev/null
+++ b/src/main/java/gg/pufferfish/pufferfish/simd/VectorMapPalette.java +++ b/src/main/java/gg/pufferfish/pufferfish/simd/VectorMapPalette.java
@@ -0,0 +1,83 @@ @@ -0,0 +1,83 @@
@@ -316,10 +316,10 @@ index 0000000000000000000000000000000000000000..20ec3b29b0cb4061cc89d635b3929ffe
+ +
+@Deprecated +@Deprecated
+public class VectorMapPalette { +public class VectorMapPalette {
+ +
+ private static final VectorSpecies<Integer> I_SPEC = IntVector.SPECIES_PREFERRED; + private static final VectorSpecies<Integer> I_SPEC = IntVector.SPECIES_PREFERRED;
+ private static final VectorSpecies<Float> F_SPEC = FloatVector.SPECIES_PREFERRED; + private static final VectorSpecies<Float> F_SPEC = FloatVector.SPECIES_PREFERRED;
+ +
+ @Deprecated + @Deprecated
+ public static void matchColorVectorized(int[] in, byte[] out) { + public static void matchColorVectorized(int[] in, byte[] out) {
+ int speciesLength = I_SPEC.length(); + int speciesLength = I_SPEC.length();
@@ -329,64 +329,64 @@ index 0000000000000000000000000000000000000000..20ec3b29b0cb4061cc89d635b3929ffe
+ float[] bluesArr = new float[speciesLength]; + float[] bluesArr = new float[speciesLength];
+ float[] greensArr = new float[speciesLength]; + float[] greensArr = new float[speciesLength];
+ int[] alphasArr = new int[speciesLength]; + int[] alphasArr = new int[speciesLength];
+ +
+ for (int j = 0; j < speciesLength; j++) { + for (int j = 0; j < speciesLength; j++) {
+ alphasArr[j] = (in[i + j] >> 24) & 0xFF; + alphasArr[j] = (in[i + j] >> 24) & 0xFF;
+ redsArr[j] = (in[i + j] >> 16) & 0xFF; + redsArr[j] = (in[i + j] >> 16) & 0xFF;
+ greensArr[j] = (in[i + j] >> 8) & 0xFF; + greensArr[j] = (in[i + j] >> 8) & 0xFF;
+ bluesArr[j] = (in[i + j] >> 0) & 0xFF; + bluesArr[j] = (in[i + j] >> 0) & 0xFF;
+ } + }
+ +
+ IntVector alphas = IntVector.fromArray(I_SPEC, alphasArr, 0); + IntVector alphas = IntVector.fromArray(I_SPEC, alphasArr, 0);
+ FloatVector reds = FloatVector.fromArray(F_SPEC, redsArr, 0); + FloatVector reds = FloatVector.fromArray(F_SPEC, redsArr, 0);
+ FloatVector greens = FloatVector.fromArray(F_SPEC, greensArr, 0); + FloatVector greens = FloatVector.fromArray(F_SPEC, greensArr, 0);
+ FloatVector blues = FloatVector.fromArray(F_SPEC, bluesArr, 0); + FloatVector blues = FloatVector.fromArray(F_SPEC, bluesArr, 0);
+ IntVector resultIndex = IntVector.zero(I_SPEC); + IntVector resultIndex = IntVector.zero(I_SPEC);
+ VectorMask<Integer> modificationMask = VectorMask.fromLong(I_SPEC, 0xffffffff); + VectorMask<Integer> modificationMask = VectorMask.fromLong(I_SPEC, 0xffffffff);
+ +
+ modificationMask = modificationMask.and(alphas.lt(128).not()); + modificationMask = modificationMask.and(alphas.lt(128).not());
+ FloatVector bestDistances = FloatVector.broadcast(F_SPEC, Float.MAX_VALUE); + FloatVector bestDistances = FloatVector.broadcast(F_SPEC, Float.MAX_VALUE);
+ +
+ for (int c = 4; c < MapPalette.colors.length; c++) { + for (int c = 4; c < MapPalette.colors.length; c++) {
+ // We're using 32-bit floats here because it's 2x faster and nobody will know the difference. + // We're using 32-bit floats here because it's 2x faster and nobody will know the difference.
+ // For correctness, the original algorithm uses 64-bit floats instead. Completely unnecessary. + // For correctness, the original algorithm uses 64-bit floats instead. Completely unnecessary.
+ FloatVector compReds = FloatVector.broadcast(F_SPEC, MapPalette.colors[c].getRed()); + FloatVector compReds = FloatVector.broadcast(F_SPEC, MapPalette.colors[c].getRed());
+ FloatVector compGreens = FloatVector.broadcast(F_SPEC, MapPalette.colors[c].getGreen()); + FloatVector compGreens = FloatVector.broadcast(F_SPEC, MapPalette.colors[c].getGreen());
+ FloatVector compBlues = FloatVector.broadcast(F_SPEC, MapPalette.colors[c].getBlue()); + FloatVector compBlues = FloatVector.broadcast(F_SPEC, MapPalette.colors[c].getBlue());
+ +
+ FloatVector rMean = reds.add(compReds).div(2.0f); + FloatVector rMean = reds.add(compReds).div(2.0f);
+ FloatVector rDiff = reds.sub(compReds); + FloatVector rDiff = reds.sub(compReds);
+ FloatVector gDiff = greens.sub(compGreens); + FloatVector gDiff = greens.sub(compGreens);
+ FloatVector bDiff = blues.sub(compBlues); + FloatVector bDiff = blues.sub(compBlues);
+ +
+ FloatVector weightR = rMean.div(256.0f).add(2); + FloatVector weightR = rMean.div(256.0f).add(2);
+ FloatVector weightG = FloatVector.broadcast(F_SPEC, 4.0f); + FloatVector weightG = FloatVector.broadcast(F_SPEC, 4.0f);
+ FloatVector weightB = FloatVector.broadcast(F_SPEC, 255.0f).sub(rMean).div(256.0f).add(2.0f); + FloatVector weightB = FloatVector.broadcast(F_SPEC, 255.0f).sub(rMean).div(256.0f).add(2.0f);
+ +
+ FloatVector distance = weightR.mul(rDiff).mul(rDiff).add(weightG.mul(gDiff).mul(gDiff)).add(weightB.mul(bDiff).mul(bDiff)); + FloatVector distance = weightR.mul(rDiff).mul(rDiff).add(weightG.mul(gDiff).mul(gDiff)).add(weightB.mul(bDiff).mul(bDiff));
+ +
+ // Now we compare to the best distance we've found. + // Now we compare to the best distance we've found.
+ // This mask contains a "1" if better, and a "0" otherwise. + // This mask contains a "1" if better, and a "0" otherwise.
+ VectorMask<Float> bestDistanceMask = distance.lt(bestDistances); + VectorMask<Float> bestDistanceMask = distance.lt(bestDistances);
+ bestDistances = bestDistances.blend(distance, bestDistanceMask); // Update the best distances + bestDistances = bestDistances.blend(distance, bestDistanceMask); // Update the best distances
+ +
+ // Update the result array + // Update the result array
+ // We also AND with the modification mask because we don't want to interfere if the alpha value isn't large enough. + // We also AND with the modification mask because we don't want to interfere if the alpha value isn't large enough.
+ resultIndex = resultIndex.blend(c, bestDistanceMask.cast(I_SPEC).and(modificationMask)); // Update the results + resultIndex = resultIndex.blend(c, bestDistanceMask.cast(I_SPEC).and(modificationMask)); // Update the results
+ } + }
+ +
+ for (int j = 0; j < speciesLength; j++) { + for (int j = 0; j < speciesLength; j++) {
+ int index = resultIndex.lane(j); + int index = resultIndex.lane(j);
+ out[i + j] = (byte) (index < 128 ? index : -129 + (index - 127)); + out[i + j] = (byte) (index < 128 ? index : -129 + (index - 127));
+ } + }
+ } + }
+ +
+ // For the final ones, fall back to the regular method + // For the final ones, fall back to the regular method
+ for (; i < in.length; i++) { + for (; i < in.length; i++) {
+ out[i] = MapPalette.matchColor(new Color(in[i], true)); + out[i] = MapPalette.matchColor(new Color(in[i], true));
+ } + }
+ } + }
+ +
+} +}
diff --git a/src/main/java/org/bukkit/map/MapPalette.java b/src/main/java/org/bukkit/map/MapPalette.java diff --git a/src/main/java/org/bukkit/map/MapPalette.java b/src/main/java/org/bukkit/map/MapPalette.java
index 3a9aaca2e76411a9c27f9f5e0f22d060d5a66d06..9584e245144b561b4f6745b2f26a4f69a6f92891 100644 index 3a9aaca2e76411a9c27f9f5e0f22d060d5a66d06..9584e245144b561b4f6745b2f26a4f69a6f92891 100644
@@ -426,7 +426,7 @@ index 3a9aaca2e76411a9c27f9f5e0f22d060d5a66d06..9584e245144b561b4f6745b2f26a4f69
} }
diff --git a/src/main/java/org/bukkit/plugin/SimplePluginManager.java b/src/main/java/org/bukkit/plugin/SimplePluginManager.java diff --git a/src/main/java/org/bukkit/plugin/SimplePluginManager.java b/src/main/java/org/bukkit/plugin/SimplePluginManager.java
index 2b8308989fce7f8a16907f8711b362e671fdbfb6..bd4d1a40f53784662174d426533ef4b5433a15b7 100644 index fc2dae69165776d08274e34a69962cc70445f411..899d67fa782fac639fe7fb096e05c551d75bd647 100644
--- a/src/main/java/org/bukkit/plugin/SimplePluginManager.java --- a/src/main/java/org/bukkit/plugin/SimplePluginManager.java
+++ b/src/main/java/org/bukkit/plugin/SimplePluginManager.java +++ b/src/main/java/org/bukkit/plugin/SimplePluginManager.java
@@ -584,7 +584,9 @@ public final class SimplePluginManager implements PluginManager { @@ -584,7 +584,9 @@ public final class SimplePluginManager implements PluginManager {

View File

@@ -1,6 +1,6 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: AlphaKR93 <dev@alpha93.kr> From: AlphaKR93 <dev@alpha93.kr>
Date: Thu, 30 Mar 2023 06:58:47 +0000 Date: Fri, 14 Apr 2023 06:50:31 +0000
Subject: [PATCH] Purpur API Changes Subject: [PATCH] Purpur API Changes
Original: PurpurMC Original: PurpurMC
@@ -25,7 +25,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE. SOFTWARE.
diff --git a/build.gradle.kts b/build.gradle.kts diff --git a/build.gradle.kts b/build.gradle.kts
index b83e2c5a0a094002d12aee55ec0cf8d12bf33f3e..b5835fa536f90b7f88a5ee4df78733cf43e1cb23 100644 index a93b900889ddb56a2943c54a7fff6f60f42a78f1..417c4324af22c870de669e338a1eee5d540184a4 100644
--- a/build.gradle.kts --- a/build.gradle.kts
+++ b/build.gradle.kts +++ b/build.gradle.kts
@@ -105,6 +105,8 @@ tasks.jar { @@ -105,6 +105,8 @@ tasks.jar {
@@ -194,10 +194,10 @@ index a736d7bcdc5861a01b66ba36158db1c716339346..22fc165fd9c95f0f3ae1be7a0857e48c
@Override @Override
diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java
index a6bdd42b38454fe481f9210e1a0f5f94023a0543..e58273032706f1b85e0d32991c27048733ffa9ad 100644 index f1af93319d6b29d7bc709e7e273e8abe26c7b4af..78a9155e78178f1cc8da2a2d42fd3276565030f5 100644
--- a/src/main/java/org/bukkit/Bukkit.java --- a/src/main/java/org/bukkit/Bukkit.java
+++ b/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java
@@ -2464,4 +2464,127 @@ public final class Bukkit { @@ -2461,4 +2461,127 @@ public final class Bukkit {
public static Server.Spigot spigot() { public static Server.Spigot spigot() {
return server.spigot(); return server.spigot();
} }
@@ -326,7 +326,7 @@ index a6bdd42b38454fe481f9210e1a0f5f94023a0543..e58273032706f1b85e0d32991c270487
+ // Purpur end + // Purpur end
} }
diff --git a/src/main/java/org/bukkit/ChatColor.java b/src/main/java/org/bukkit/ChatColor.java diff --git a/src/main/java/org/bukkit/ChatColor.java b/src/main/java/org/bukkit/ChatColor.java
index e3f185dc982d1c38195a4e01ddd485c13ffa58c0..98c2f73ee5c921dab506fc933a0acff400201537 100644 index ea4ceb643239c26851bacbf45fc3f2efef3bb4be..3b8395dcb73e3fb251adf7438cbc7e95c4185a3a 100644
--- a/src/main/java/org/bukkit/ChatColor.java --- a/src/main/java/org/bukkit/ChatColor.java
+++ b/src/main/java/org/bukkit/ChatColor.java +++ b/src/main/java/org/bukkit/ChatColor.java
@@ -3,6 +3,7 @@ package org.bukkit; @@ -3,6 +3,7 @@ package org.bukkit;
@@ -337,7 +337,7 @@ index e3f185dc982d1c38195a4e01ddd485c13ffa58c0..98c2f73ee5c921dab506fc933a0acff4
import java.util.regex.Pattern; import java.util.regex.Pattern;
import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -454,4 +455,77 @@ public enum ChatColor { @@ -455,4 +456,77 @@ public enum ChatColor {
BY_CHAR.put(color.code, color); BY_CHAR.put(color.code, color);
} }
} }
@@ -416,10 +416,10 @@ index e3f185dc982d1c38195a4e01ddd485c13ffa58c0..98c2f73ee5c921dab506fc933a0acff4
+ // Purpur end + // Purpur end
} }
diff --git a/src/main/java/org/bukkit/Material.java b/src/main/java/org/bukkit/Material.java diff --git a/src/main/java/org/bukkit/Material.java b/src/main/java/org/bukkit/Material.java
index 3c5e90f039f0d2991be442168703526405e18e3d..df992c41d736ee4e89773c2621d261d6afcb2148 100644 index adb2416887cc3b544ec36c552bdf7105328c24a5..d334c963e16590c68ecd9d1d27434c7af6f7e21c 100644
--- a/src/main/java/org/bukkit/Material.java --- a/src/main/java/org/bukkit/Material.java
+++ b/src/main/java/org/bukkit/Material.java +++ b/src/main/java/org/bukkit/Material.java
@@ -11066,4 +11066,40 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla @@ -11156,4 +11156,40 @@ public enum Material implements Keyed, Translatable, net.kyori.adventure.transla
public String getItemTranslationKey() { public String getItemTranslationKey() {
return Bukkit.getUnsafe().getItemTranslationKey(this); return Bukkit.getUnsafe().getItemTranslationKey(this);
} }
@@ -580,10 +580,10 @@ index 69b50eee42e8c52063033705bd23a5ef5231ed83..3578ab0c3a413d56bc39af43b5d3201d
+ // Purpur end - OfflinePlayer API + // Purpur end - OfflinePlayer API
} }
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
index ce2ef5cff6ad10b64791e67f6d3cff328c2cf7dc..c293dbc96051a5a5d11dc445b8c389e2ce33ec84 100644 index 8621dba7f10ab822b5b99ce0d05da58823605cb6..730caafaf9629664ba125f3884559da76616f655 100644
--- a/src/main/java/org/bukkit/Server.java --- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java
@@ -1971,6 +1971,18 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi @@ -1968,6 +1968,18 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
} }
// Paper end // Paper end
@@ -602,7 +602,7 @@ index ce2ef5cff6ad10b64791e67f6d3cff328c2cf7dc..c293dbc96051a5a5d11dc445b8c389e2
/** /**
* Sends the component to the player * Sends the component to the player
* *
@@ -2139,4 +2151,105 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi @@ -2136,4 +2148,105 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
*/ */
@NotNull org.bukkit.potion.PotionBrewer getPotionBrewer(); @NotNull org.bukkit.potion.PotionBrewer getPotionBrewer();
// Paper end // Paper end
@@ -709,10 +709,10 @@ index ce2ef5cff6ad10b64791e67f6d3cff328c2cf7dc..c293dbc96051a5a5d11dc445b8c389e2
+ // Purpur end + // Purpur end
} }
diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java
index aa04d7df70d99402c91e920fd693d7d4fb655786..a38863ebd363f54994753937a10e041076846af0 100644 index 0b8776355f724927ada826735d5e73f3fb6897d5..cf8b93aa5787e96f54e2ffe2a0f157b0e53e2c5c 100644
--- a/src/main/java/org/bukkit/World.java --- a/src/main/java/org/bukkit/World.java
+++ b/src/main/java/org/bukkit/World.java +++ b/src/main/java/org/bukkit/World.java
@@ -4010,6 +4010,86 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient @@ -4018,6 +4018,86 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient
@Nullable @Nullable
public DragonBattle getEnderDragonBattle(); public DragonBattle getEnderDragonBattle();
@@ -933,10 +933,10 @@ index 138d2530de2410f4a9424dabd3e5ce0cd1c1dcd2..10a8d64ad2da0be2c14f34c3e7d1957c
// Paper start // Paper start
/** /**
diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java
index 8c58018b155c52a7b2a139f784abceb6aa00a268..dc16fd3f342994dc3ea88b0980e4b3f56621ddf3 100644 index a2a423d4e4c2702ba5967223cab0432dd7d04732..cc78ce7de88a9a404ed20d5bc61b98d3107f29b3 100644
--- a/src/main/java/org/bukkit/entity/Entity.java --- a/src/main/java/org/bukkit/entity/Entity.java
+++ b/src/main/java/org/bukkit/entity/Entity.java +++ b/src/main/java/org/bukkit/entity/Entity.java
@@ -953,4 +953,55 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent @@ -954,4 +954,55 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent
*/ */
boolean wouldCollideUsing(@NotNull BoundingBox boundingBox); boolean wouldCollideUsing(@NotNull BoundingBox boundingBox);
// Paper End - Collision API // Paper End - Collision API
@@ -1085,10 +1085,10 @@ index 58017fce436cdbda255f7172fbdadb726d4b113c..05600fc8bf2a61aca8094029bc4c208a
+ // Purpur end + // Purpur end
} }
diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java
index 059dfc40edc6c52f95a30e9ac72f45b6aaf5f9a8..216ad2cf780cc432e85cd59a8cd8deb33b701a70 100644 index ffca32ae2464ea5a669029079a50585ca259a4f8..654dc0c6d98b29cf45d3826aece374726e3e9802 100644
--- a/src/main/java/org/bukkit/entity/LivingEntity.java --- a/src/main/java/org/bukkit/entity/LivingEntity.java
+++ b/src/main/java/org/bukkit/entity/LivingEntity.java +++ b/src/main/java/org/bukkit/entity/LivingEntity.java
@@ -1148,4 +1148,41 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource @@ -1150,4 +1150,41 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource
*/ */
void setBodyYaw(float bodyYaw); void setBodyYaw(float bodyYaw);
// Paper end // Paper end
@@ -1156,10 +1156,10 @@ index bc84b892cae5fe7019a3ad481e9da79956efa1fe..48eb5b00c460cccde29d327cef1d63fc
+ // Purpur end + // Purpur end
} }
diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java
index 5f11b2e9c1bca121ae72dd0ec94ae4a86f80a324..8d7ec62544f24bd71e4924f36fe1ee159927481d 100644 index ee446bfb3e6c4b1d4428c00d6406bf9455c68ad5..43cef54d355c8a1b6a8cd6be89a6a805e9f88566 100644
--- a/src/main/java/org/bukkit/entity/Player.java --- a/src/main/java/org/bukkit/entity/Player.java
+++ b/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java
@@ -3000,4 +3000,139 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM @@ -3035,4 +3035,139 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM
@Override @Override
Spigot spigot(); Spigot spigot();
// Spigot end // Spigot end
@@ -1325,7 +1325,7 @@ index 7fbfdb07585c7b28acea1f0c1f58ada0cc744441..21fcca092e2e31baa5ece0de9e44e3fa
+ // Purpur end + // Purpur end
} }
diff --git a/src/main/java/org/bukkit/entity/Villager.java b/src/main/java/org/bukkit/entity/Villager.java diff --git a/src/main/java/org/bukkit/entity/Villager.java b/src/main/java/org/bukkit/entity/Villager.java
index c61e7e41aeb3d4f5f4ac47da8890051d8e97340d..12b08318f78c8144cc809dbccf0feabdd31f0ee2 100644 index 3bc24457d143449e6a338d79becf7c39b9f81054..4a5edf4e72e81b22c1abb2ade244f7f4292e993c 100644
--- a/src/main/java/org/bukkit/entity/Villager.java --- a/src/main/java/org/bukkit/entity/Villager.java
+++ b/src/main/java/org/bukkit/entity/Villager.java +++ b/src/main/java/org/bukkit/entity/Villager.java
@@ -328,4 +328,14 @@ public interface Villager extends AbstractVillager { @@ -328,4 +328,14 @@ public interface Villager extends AbstractVillager {
@@ -1394,7 +1394,7 @@ index 84db38388bf7a58e66d6cd29620b4fe64b0a897e..82ebd99549ce9f9e6427a50cef424e90
+ // Purpur end + // Purpur end
} }
diff --git a/src/main/java/org/bukkit/event/entity/EntityPotionEffectEvent.java b/src/main/java/org/bukkit/event/entity/EntityPotionEffectEvent.java diff --git a/src/main/java/org/bukkit/event/entity/EntityPotionEffectEvent.java b/src/main/java/org/bukkit/event/entity/EntityPotionEffectEvent.java
index 01c5e8b71338fbb4b1605e45bf2a2e705188f6b5..118d53ec9d1dc9c01cedfbedaf0b8edcbda7b3a5 100644 index c9f395064656dd0126410eb3c6e197baa450c063..13156a12e5df50cdc1e465dc0bd9d94108275629 100644
--- a/src/main/java/org/bukkit/event/entity/EntityPotionEffectEvent.java --- a/src/main/java/org/bukkit/event/entity/EntityPotionEffectEvent.java
+++ b/src/main/java/org/bukkit/event/entity/EntityPotionEffectEvent.java +++ b/src/main/java/org/bukkit/event/entity/EntityPotionEffectEvent.java
@@ -217,6 +217,12 @@ public class EntityPotionEffectEvent extends EntityEvent implements Cancellable @@ -217,6 +217,12 @@ public class EntityPotionEffectEvent extends EntityEvent implements Cancellable
@@ -1411,10 +1411,10 @@ index 01c5e8b71338fbb4b1605e45bf2a2e705188f6b5..118d53ec9d1dc9c01cedfbedaf0b8edc
* When a player gets bad omen after killing a patrol captain. * When a player gets bad omen after killing a patrol captain.
*/ */
diff --git a/src/main/java/org/bukkit/event/inventory/InventoryType.java b/src/main/java/org/bukkit/event/inventory/InventoryType.java diff --git a/src/main/java/org/bukkit/event/inventory/InventoryType.java b/src/main/java/org/bukkit/event/inventory/InventoryType.java
index 94f127fd6ba69ca48d03acbc9886ee499e9be4f3..1f958facfed766c401144b840e4369154c71d3c2 100644 index a8e631315f2da68895a258cf0ba9875bc88fc48c..d5648ec745e3530aecf18c3e1f3185a5f63f3d11 100644
--- a/src/main/java/org/bukkit/event/inventory/InventoryType.java --- a/src/main/java/org/bukkit/event/inventory/InventoryType.java
+++ b/src/main/java/org/bukkit/event/inventory/InventoryType.java +++ b/src/main/java/org/bukkit/event/inventory/InventoryType.java
@@ -152,7 +152,7 @@ public enum InventoryType { @@ -155,7 +155,7 @@ public enum InventoryType {
SMITHING_NEW(4, "Upgrade Gear"), SMITHING_NEW(4, "Upgrade Gear"),
; ;
@@ -1443,7 +1443,7 @@ index c60be4fd24c7fdf65251dd6169e5e1ac3b588d95..569deccd2f1cf21da9b5906433ac493c
+ // Purpur end + // Purpur end
} }
diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java
index 9d68ad599a037748d033239f54cf95941b87766a..8216b53724bfad3c29bf6b75e17f4640e4915a00 100644 index d15a74c38576c49df61cfab02c70fc5d8c0dd5f7..64055402076b62d32ba947830d935b79bae12d95 100644
--- a/src/main/java/org/bukkit/inventory/ItemStack.java --- a/src/main/java/org/bukkit/inventory/ItemStack.java
+++ b/src/main/java/org/bukkit/inventory/ItemStack.java +++ b/src/main/java/org/bukkit/inventory/ItemStack.java
@@ -17,6 +17,18 @@ import org.bukkit.inventory.meta.ItemMeta; @@ -17,6 +17,18 @@ import org.bukkit.inventory.meta.ItemMeta;

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Plazma Configurations
diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
index e0f69edf603c2ec99bc92b16b18912272cc41bd9..188cd7b3270422719297a6fd3ecec4a20d9b4f3c 100644 index 730caafaf9629664ba125f3884559da76616f655..bea2e55c79541939756012963452ca0436d39782 100644
--- a/src/main/java/org/bukkit/Server.java --- a/src/main/java/org/bukkit/Server.java
+++ b/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java
@@ -1971,6 +1971,13 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi @@ -1968,6 +1968,13 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi
} }
// Paper end // Paper end

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Publish Packages
diff --git a/build.gradle.kts b/build.gradle.kts diff --git a/build.gradle.kts b/build.gradle.kts
index 42de5c470a2fbb1e0bc9b809c033e3afe30502fa..c2c506afd44c7f14de51bd93004aa8a32ff2103e 100644 index 7b38042c32295ef7c5ea3c212170cc8fcdf0d7a0..1e300e51fa3413f9846c686545f2b7deb0ac5160 100644
--- a/build.gradle.kts --- a/build.gradle.kts
+++ b/build.gradle.kts +++ b/build.gradle.kts
@@ -155,3 +155,23 @@ tasks.check { @@ -156,3 +156,23 @@ tasks.check {
dependsOn(scanJar) dependsOn(scanJar)
} }
// Paper end // Paper end

View File

@@ -1,6 +1,6 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: AlphaKR93 <dev@alpha93.kr> From: AlphaKR93 <dev@alpha93.kr>
Date: Thu, 30 Mar 2023 06:56:29 +0000 Date: Fri, 14 Apr 2023 06:48:56 +0000
Subject: [PATCH] Pufferfish Server Changes Subject: [PATCH] Pufferfish Server Changes
Original: Kevin Raneri <kevin.raneri@gmail.com> Original: Kevin Raneri <kevin.raneri@gmail.com>
@@ -542,7 +542,7 @@ index 0000000000000000000000000000000000000000..a7f297ebb569f7c1f205e967ca485be7
+} +}
diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishCommand.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishCommand.java diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishCommand.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishCommand.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..e164237e749bcc43466d4ed7aeada5ab9fddf8a6 index 0000000000000000000000000000000000000000..020368da69b9a492155f6de6297f74732f4ab6ea
--- /dev/null --- /dev/null
+++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishCommand.java +++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishCommand.java
@@ -0,0 +1,68 @@ @@ -0,0 +1,68 @@
@@ -570,7 +570,7 @@ index 0000000000000000000000000000000000000000..e164237e749bcc43466d4ed7aeada5ab
+ this.usageMessage = "/pufferfish [reload | version]"; + this.usageMessage = "/pufferfish [reload | version]";
+ this.setPermission("bukkit.command.pufferfish"); + this.setPermission("bukkit.command.pufferfish");
+ } + }
+ +
+ public static void init() { + public static void init() {
+ MinecraftServer.getServer().server.getCommandMap().register("pufferfish", "Pufferfish", new PufferfishCommand()); + MinecraftServer.getServer().server.getCommandMap().register("pufferfish", "Pufferfish", new PufferfishCommand());
+ } + }
@@ -616,7 +616,7 @@ index 0000000000000000000000000000000000000000..e164237e749bcc43466d4ed7aeada5ab
+} +}
diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..a8cead500186142115d4dc029c942fdfc68f7fe5 index 0000000000000000000000000000000000000000..6e441a1a28ba72a8b1cc09fe5fca71b3c70627d4
--- /dev/null --- /dev/null
+++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java +++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java
@@ -0,0 +1,285 @@ @@ -0,0 +1,285 @@
@@ -647,10 +647,10 @@ index 0000000000000000000000000000000000000000..a8cead500186142115d4dc029c942fdf
+import org.simpleyaml.exceptions.InvalidConfigurationException; +import org.simpleyaml.exceptions.InvalidConfigurationException;
+ +
+public class PufferfishConfig { +public class PufferfishConfig {
+ +
+ private static final YamlFile config = new YamlFile(); + private static final YamlFile config = new YamlFile();
+ private static int updates = 0; + private static int updates = 0;
+ +
+ private static ConfigurationSection convertToBukkit(org.simpleyaml.configuration.ConfigurationSection section) { + private static ConfigurationSection convertToBukkit(org.simpleyaml.configuration.ConfigurationSection section) {
+ ConfigurationSection newSection = new MemoryConfiguration(); + ConfigurationSection newSection = new MemoryConfiguration();
+ for (String key : section.getKeys(false)) { + for (String key : section.getKeys(false)) {
@@ -662,18 +662,18 @@ index 0000000000000000000000000000000000000000..a8cead500186142115d4dc029c942fdf
+ } + }
+ return newSection; + return newSection;
+ } + }
+ +
+ public static ConfigurationSection getConfigCopy() { + public static ConfigurationSection getConfigCopy() {
+ return convertToBukkit(config); + return convertToBukkit(config);
+ } + }
+ +
+ public static int getUpdates() { + public static int getUpdates() {
+ return updates; + return updates;
+ } + }
+ +
+ public static void load() throws IOException { + public static void load() throws IOException {
+ File configFile = new File("pufferfish.yml"); + File configFile = new File("pufferfish.yml");
+ +
+ if (configFile.exists()) { + if (configFile.exists()) {
+ try { + try {
+ config.load(configFile); + config.load(configFile);
@@ -681,14 +681,14 @@ index 0000000000000000000000000000000000000000..a8cead500186142115d4dc029c942fdf
+ throw new IOException(e); + throw new IOException(e);
+ } + }
+ } + }
+ +
+ getString("info.version", "1.0"); + getString("info.version", "1.0");
+ setComment("info", + setComment("info",
+ "Pufferfish Configuration", + "Pufferfish Configuration",
+ "Check out Pufferfish Host for maximum performance server hosting: https://pufferfish.host", + "Check out Pufferfish Host for maximum performance server hosting: https://pufferfish.host",
+ "Join our Discord for support: https://discord.gg/reZw4vQV9H", + "Join our Discord for support: https://discord.gg/reZw4vQV9H",
+ "Download new builds at https://ci.pufferfish.host/job/Pufferfish"); + "Download new builds at https://ci.pufferfish.host/job/Pufferfish");
+ +
+ for (Method method : PufferfishConfig.class.getDeclaredMethods()) { + for (Method method : PufferfishConfig.class.getDeclaredMethods()) {
+ if (Modifier.isStatic(method.getModifiers()) && Modifier.isPrivate(method.getModifiers()) && method.getParameterCount() == 0 && + if (Modifier.isStatic(method.getModifiers()) && Modifier.isPrivate(method.getModifiers()) && method.getParameterCount() == 0 &&
+ method.getReturnType() == Void.TYPE && !method.getName().startsWith("lambda")) { + method.getReturnType() == Void.TYPE && !method.getName().startsWith("lambda")) {
@@ -700,11 +700,11 @@ index 0000000000000000000000000000000000000000..a8cead500186142115d4dc029c942fdf
+ } + }
+ } + }
+ } + }
+ +
+ updates++; + updates++;
+ +
+ config.save(configFile); + config.save(configFile);
+ +
+ // Attempt to detect vectorization + // Attempt to detect vectorization
+ try { + try {
+ SIMDDetection.isEnabled = SIMDDetection.canEnable(PufferfishLogger.LOGGER); + SIMDDetection.isEnabled = SIMDDetection.canEnable(PufferfishLogger.LOGGER);
@@ -712,7 +712,7 @@ index 0000000000000000000000000000000000000000..a8cead500186142115d4dc029c942fdf
+ } catch (NoClassDefFoundError | Exception ignored) { + } catch (NoClassDefFoundError | Exception ignored) {
+ ignored.printStackTrace(); + ignored.printStackTrace();
+ } + }
+ +
+ if (SIMDDetection.isEnabled) { + if (SIMDDetection.isEnabled) {
+ PufferfishLogger.LOGGER.info("SIMD operations detected as functional. Will replace some operations with faster versions."); + PufferfishLogger.LOGGER.info("SIMD operations detected as functional. Will replace some operations with faster versions.");
+ } else if (SIMDDetection.versionLimited) { + } else if (SIMDDetection.versionLimited) {
@@ -724,76 +724,76 @@ index 0000000000000000000000000000000000000000..a8cead500186142115d4dc029c942fdf
+ PufferfishLogger.LOGGER.warning("Debug: Java: " + System.getProperty("java.version") + ", test run: " + SIMDDetection.testRun); + PufferfishLogger.LOGGER.warning("Debug: Java: " + System.getProperty("java.version") + ", test run: " + SIMDDetection.testRun);
+ } + }
+ } + }
+ +
+ private static void setComment(String key, String... comment) { + private static void setComment(String key, String... comment) {
+ if (config.contains(key)) { + if (config.contains(key)) {
+ config.setComment(key, String.join("\n", comment), CommentType.BLOCK); + config.setComment(key, String.join("\n", comment), CommentType.BLOCK);
+ } + }
+ } + }
+ +
+ private static void ensureDefault(String key, Object defaultValue, String... comment) { + private static void ensureDefault(String key, Object defaultValue, String... comment) {
+ if (!config.contains(key)) { + if (!config.contains(key)) {
+ config.set(key, defaultValue); + config.set(key, defaultValue);
+ config.setComment(key, String.join("\n", comment), CommentType.BLOCK); + config.setComment(key, String.join("\n", comment), CommentType.BLOCK);
+ } + }
+ } + }
+ +
+ private static boolean getBoolean(String key, boolean defaultValue, String... comment) { + private static boolean getBoolean(String key, boolean defaultValue, String... comment) {
+ return getBoolean(key, null, defaultValue, comment); + return getBoolean(key, null, defaultValue, comment);
+ } + }
+ +
+ private static boolean getBoolean(String key, @Nullable String oldKey, boolean defaultValue, String... comment) { + private static boolean getBoolean(String key, @Nullable String oldKey, boolean defaultValue, String... comment) {
+ ensureDefault(key, defaultValue, comment); + ensureDefault(key, defaultValue, comment);
+ return config.getBoolean(key, defaultValue); + return config.getBoolean(key, defaultValue);
+ } + }
+ +
+ private static int getInt(String key, int defaultValue, String... comment) { + private static int getInt(String key, int defaultValue, String... comment) {
+ return getInt(key, null, defaultValue, comment); + return getInt(key, null, defaultValue, comment);
+ } + }
+ +
+ private static int getInt(String key, @Nullable String oldKey, int defaultValue, String... comment) { + private static int getInt(String key, @Nullable String oldKey, int defaultValue, String... comment) {
+ ensureDefault(key, defaultValue, comment); + ensureDefault(key, defaultValue, comment);
+ return config.getInt(key, defaultValue); + return config.getInt(key, defaultValue);
+ } + }
+ +
+ private static double getDouble(String key, double defaultValue, String... comment) { + private static double getDouble(String key, double defaultValue, String... comment) {
+ return getDouble(key, null, defaultValue, comment); + return getDouble(key, null, defaultValue, comment);
+ } + }
+ +
+ private static double getDouble(String key, @Nullable String oldKey, double defaultValue, String... comment) { + private static double getDouble(String key, @Nullable String oldKey, double defaultValue, String... comment) {
+ ensureDefault(key, defaultValue, comment); + ensureDefault(key, defaultValue, comment);
+ return config.getDouble(key, defaultValue); + return config.getDouble(key, defaultValue);
+ } + }
+ +
+ private static String getString(String key, String defaultValue, String... comment) { + private static String getString(String key, String defaultValue, String... comment) {
+ return getOldString(key, null, defaultValue, comment); + return getOldString(key, null, defaultValue, comment);
+ } + }
+ +
+ private static String getOldString(String key, @Nullable String oldKey, String defaultValue, String... comment) { + private static String getOldString(String key, @Nullable String oldKey, String defaultValue, String... comment) {
+ ensureDefault(key, defaultValue, comment); + ensureDefault(key, defaultValue, comment);
+ return config.getString(key, defaultValue); + return config.getString(key, defaultValue);
+ } + }
+ +
+ private static List<String> getStringList(String key, List<String> defaultValue, String... comment) { + private static List<String> getStringList(String key, List<String> defaultValue, String... comment) {
+ return getStringList(key, null, defaultValue, comment); + return getStringList(key, null, defaultValue, comment);
+ } + }
+ +
+ private static List<String> getStringList(String key, @Nullable String oldKey, List<String> defaultValue, String... comment) { + private static List<String> getStringList(String key, @Nullable String oldKey, List<String> defaultValue, String... comment) {
+ ensureDefault(key, defaultValue, comment); + ensureDefault(key, defaultValue, comment);
+ return config.getStringList(key); + return config.getStringList(key);
+ } + }
+ +
+ public static String sentryDsn; + public static String sentryDsn;
+ private static void sentry() { + private static void sentry() {
+ String sentryEnvironment = System.getenv("SENTRY_DSN"); + String sentryEnvironment = System.getenv("SENTRY_DSN");
+ String sentryConfig = getString("sentry-dsn", "", "Sentry DSN for improved error logging, leave blank to disable", "Obtain from https://sentry.io/"); + String sentryConfig = getString("sentry-dsn", "", "Sentry DSN for improved error logging, leave blank to disable", "Obtain from https://sentry.io/");
+ +
+ sentryDsn = sentryEnvironment == null ? sentryConfig : sentryEnvironment; + sentryDsn = sentryEnvironment == null ? sentryConfig : sentryEnvironment;
+ if (sentryDsn != null && !sentryDsn.isBlank()) { + if (sentryDsn != null && !sentryDsn.isBlank()) {
+ gg.pufferfish.pufferfish.sentry.SentryManager.init(); + gg.pufferfish.pufferfish.sentry.SentryManager.init();
+ } + }
+ } + }
+ +
+ public static boolean enableBooks; + public static boolean enableBooks;
+ private static void books() { + private static void books() {
+ enableBooks = getBoolean("enable-books", true, + enableBooks = getBoolean("enable-books", true,
@@ -802,7 +802,7 @@ index 0000000000000000000000000000000000000000..a8cead500186142115d4dc029c942fdf
+ "disabling this option.", + "disabling this option.",
+ "This can be overridden per-player with the permission pufferfish.usebooks"); + "This can be overridden per-player with the permission pufferfish.usebooks");
+ } + }
+ +
+ public static boolean enableSuffocationOptimization; + public static boolean enableSuffocationOptimization;
+ private static void suffocationOptimization() { + private static void suffocationOptimization() {
+ enableSuffocationOptimization = getBoolean("enable-suffocation-optimization", true, + enableSuffocationOptimization = getBoolean("enable-suffocation-optimization", true,
@@ -811,7 +811,7 @@ index 0000000000000000000000000000000000000000..a8cead500186142115d4dc029c942fdf
+ "be left enabled on most servers, but is provided as a", + "be left enabled on most servers, but is provided as a",
+ "configuration option if the vanilla deviation is undesirable."); + "configuration option if the vanilla deviation is undesirable.");
+ } + }
+ +
+ public static boolean enableAsyncMobSpawning; + public static boolean enableAsyncMobSpawning;
+ public static boolean asyncMobSpawningInitialized; + public static boolean asyncMobSpawningInitialized;
+ private static void asyncMobSpawning() { + private static void asyncMobSpawning() {
@@ -821,14 +821,14 @@ index 0000000000000000000000000000000000000000..a8cead500186142115d4dc029c942fdf
+ "paper's per-player-mob-spawns setting set to true for this to work.", + "paper's per-player-mob-spawns setting set to true for this to work.",
+ "One quick note - this does not actually spawn mobs async (that would be very unsafe).", + "One quick note - this does not actually spawn mobs async (that would be very unsafe).",
+ "This just offloads some expensive calculations that are required for mob spawning."); + "This just offloads some expensive calculations that are required for mob spawning.");
+ +
+ // This prevents us from changing the value during a reload. + // This prevents us from changing the value during a reload.
+ if (!asyncMobSpawningInitialized) { + if (!asyncMobSpawningInitialized) {
+ asyncMobSpawningInitialized = true; + asyncMobSpawningInitialized = true;
+ enableAsyncMobSpawning = temp; + enableAsyncMobSpawning = temp;
+ } + }
+ } + }
+ +
+ public static int maxProjectileLoadsPerTick; + public static int maxProjectileLoadsPerTick;
+ public static int maxProjectileLoadsPerProjectile; + public static int maxProjectileLoadsPerProjectile;
+ private static void projectileLoading() { + private static void projectileLoading() {
@@ -870,7 +870,7 @@ index 0000000000000000000000000000000000000000..a8cead500186142115d4dc029c942fdf
+ +
+ setComment("dab", "Optimizes entity brains when", "they're far away from the player"); + setComment("dab", "Optimizes entity brains when", "they're far away from the player");
+ } + }
+ +
+ public static Map<String, Integer> projectileTimeouts; + public static Map<String, Integer> projectileTimeouts;
+ private static void projectileTimeouts() { + private static void projectileTimeouts() {
+ // Set some defaults + // Set some defaults
@@ -881,13 +881,13 @@ index 0000000000000000000000000000000000000000..a8cead500186142115d4dc029c942fdf
+ "entity is in this list and it has survived for longer than", + "entity is in this list and it has survived for longer than",
+ "that number of ticks, then it will be removed. Setting a value to", + "that number of ticks, then it will be removed. Setting a value to",
+ "-1 disables this feature."); + "-1 disables this feature.");
+ +
+ for (EntityType<?> entityType : BuiltInRegistries.ENTITY_TYPE) { + for (EntityType<?> entityType : BuiltInRegistries.ENTITY_TYPE) {
+ String type = EntityType.getKey(entityType).getPath().toUpperCase(Locale.ROOT); + String type = EntityType.getKey(entityType).getPath().toUpperCase(Locale.ROOT);
+ entityType.ttl = config.getInt("entity_timeouts." + type, -1); + entityType.ttl = config.getInt("entity_timeouts." + type, -1);
+ } + }
+ } + }
+ +
+ public static boolean throttleInactiveGoalSelectorTick; + public static boolean throttleInactiveGoalSelectorTick;
+ private static void inactiveGoalSelectorThrottle() { + private static void inactiveGoalSelectorThrottle() {
+ getBoolean("inactive-goal-selector-throttle", "inactive-goal-selector-disable", true, + getBoolean("inactive-goal-selector-throttle", "inactive-goal-selector-disable", true,
@@ -929,7 +929,7 @@ index 0000000000000000000000000000000000000000..53f2df00c6809618a9ee3d2ea72e85e8
+} +}
diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishVersionFetcher.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishVersionFetcher.java diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishVersionFetcher.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishVersionFetcher.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..1adc3de7cdb5b5f309df45f463e4697d6ec2c245 index 0000000000000000000000000000000000000000..e877921370f6009a4bd204d9b17d2d58834b8822
--- /dev/null --- /dev/null
+++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishVersionFetcher.java +++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishVersionFetcher.java
@@ -0,0 +1,136 @@ @@ -0,0 +1,136 @@
@@ -961,46 +961,46 @@ index 0000000000000000000000000000000000000000..1adc3de7cdb5b5f309df45f463e4697d
+import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Nullable;
+ +
+public class PufferfishVersionFetcher implements VersionFetcher { +public class PufferfishVersionFetcher implements VersionFetcher {
+ +
+ private static final Logger LOGGER = Logger.getLogger("PufferfishVersionFetcher"); + private static final Logger LOGGER = Logger.getLogger("PufferfishVersionFetcher");
+ private static final HttpClient client = HttpClient.newHttpClient(); + private static final HttpClient client = HttpClient.newHttpClient();
+ +
+ private static final URI JENKINS_URI = URI.create("https://ci.pufferfish.host/job/Pufferfish-1.19/lastSuccessfulBuild/buildNumber"); + private static final URI JENKINS_URI = URI.create("https://ci.pufferfish.host/job/Pufferfish-1.19/lastSuccessfulBuild/buildNumber");
+ private static final String GITHUB_FORMAT = "https://api.github.com/repos/pufferfish-gg/Pufferfish/compare/ver/1.19...%s"; + private static final String GITHUB_FORMAT = "https://api.github.com/repos/pufferfish-gg/Pufferfish/compare/ver/1.19...%s";
+ +
+ private static final HttpResponse.BodyHandler<JsonObject> JSON_OBJECT_BODY_HANDLER = responseInfo -> HttpResponse.BodySubscribers + private static final HttpResponse.BodyHandler<JsonObject> JSON_OBJECT_BODY_HANDLER = responseInfo -> HttpResponse.BodySubscribers
+ .mapping( + .mapping(
+ HttpResponse.BodySubscribers.ofString(StandardCharsets.UTF_8), + HttpResponse.BodySubscribers.ofString(StandardCharsets.UTF_8),
+ string -> new Gson().fromJson(string, JsonObject.class) + string -> new Gson().fromJson(string, JsonObject.class)
+ ); + );
+ +
+ @Override + @Override
+ public long getCacheTime() { + public long getCacheTime() {
+ return TimeUnit.MINUTES.toMillis(30); + return TimeUnit.MINUTES.toMillis(30);
+ } + }
+ +
+ @Override + @Override
+ public @NotNull Component getVersionMessage(final @NotNull String serverVersion) { + public @NotNull Component getVersionMessage(final @NotNull String serverVersion) {
+ final String[] parts = CraftServer.class.getPackage().getImplementationVersion().split("-"); + final String[] parts = CraftServer.class.getPackage().getImplementationVersion().split("-");
+ @NotNull Component component; + @NotNull Component component;
+ +
+ if (parts.length != 3) { + if (parts.length != 3) {
+ component = text("Unknown server version.", RED); + component = text("Unknown server version.", RED);
+ } else { + } else {
+ final String versionString = parts[2]; + final String versionString = parts[2];
+ +
+ try { + try {
+ component = this.fetchJenkinsVersion(Integer.parseInt(versionString)); + component = this.fetchJenkinsVersion(Integer.parseInt(versionString));
+ } catch (NumberFormatException e) { + } catch (NumberFormatException e) {
+ component = this.fetchGithubVersion(versionString.substring(1, versionString.length() - 1)); + component = this.fetchGithubVersion(versionString.substring(1, versionString.length() - 1));
+ } + }
+ } + }
+ +
+ final @Nullable Component history = this.getHistory(); + final @Nullable Component history = this.getHistory();
+ return history != null ? Component + return history != null ? Component
+ .join(JoinConfiguration.noSeparators(), component, Component.newline(), this.getHistory()) : component; + .join(JoinConfiguration.noSeparators(), component, Component.newline(), this.getHistory()) : component;
+ } + }
+ +
+ private @NotNull Component fetchJenkinsVersion(final int versionNumber) { + private @NotNull Component fetchJenkinsVersion(final int versionNumber) {
+ final HttpRequest request = HttpRequest.newBuilder(JENKINS_URI).build(); + final HttpRequest request = HttpRequest.newBuilder(JENKINS_URI).build();
+ try { + try {
@@ -1008,7 +1008,7 @@ index 0000000000000000000000000000000000000000..1adc3de7cdb5b5f309df45f463e4697d
+ if (response.statusCode() != 200) { + if (response.statusCode() != 200) {
+ return text("Received invalid status code (" + response.statusCode() + ") from server.", RED); + return text("Received invalid status code (" + response.statusCode() + ") from server.", RED);
+ } + }
+ +
+ int latestVersionNumber; + int latestVersionNumber;
+ try { + try {
+ latestVersionNumber = Integer.parseInt(response.body()); + latestVersionNumber = Integer.parseInt(response.body());
@@ -1016,7 +1016,7 @@ index 0000000000000000000000000000000000000000..1adc3de7cdb5b5f309df45f463e4697d
+ LOGGER.log(Level.WARNING, "Received invalid response from Jenkins \"" + response.body() + "\"."); + LOGGER.log(Level.WARNING, "Received invalid response from Jenkins \"" + response.body() + "\".");
+ return text("Received invalid response from server.", RED); + return text("Received invalid response from server.", RED);
+ } + }
+ +
+ final int versionDiff = latestVersionNumber - versionNumber; + final int versionDiff = latestVersionNumber - versionNumber;
+ return this.getResponseMessage(versionDiff); + return this.getResponseMessage(versionDiff);
+ } catch (IOException | InterruptedException e) { + } catch (IOException | InterruptedException e) {
@@ -1024,7 +1024,7 @@ index 0000000000000000000000000000000000000000..1adc3de7cdb5b5f309df45f463e4697d
+ return text("Failed to retrieve version from server.", RED); + return text("Failed to retrieve version from server.", RED);
+ } + }
+ } + }
+ +
+ // Based off code contributed by Techcable <Techcable@outlook.com> in Paper/GH-65 + // Based off code contributed by Techcable <Techcable@outlook.com> in Paper/GH-65
+ private @NotNull Component fetchGithubVersion(final @NotNull String hash) { + private @NotNull Component fetchGithubVersion(final @NotNull String hash) {
+ final URI uri = URI.create(String.format(GITHUB_FORMAT, hash)); + final URI uri = URI.create(String.format(GITHUB_FORMAT, hash));
@@ -1034,17 +1034,17 @@ index 0000000000000000000000000000000000000000..1adc3de7cdb5b5f309df45f463e4697d
+ if (response.statusCode() != 200) { + if (response.statusCode() != 200) {
+ return text("Received invalid status code (" + response.statusCode() + ") from server.", RED); + return text("Received invalid status code (" + response.statusCode() + ") from server.", RED);
+ } + }
+ +
+ final JsonObject obj = response.body(); + final JsonObject obj = response.body();
+ final int versionDiff = obj.get("behind_by").getAsInt(); + final int versionDiff = obj.get("behind_by").getAsInt();
+ +
+ return this.getResponseMessage(versionDiff); + return this.getResponseMessage(versionDiff);
+ } catch (IOException | InterruptedException e) { + } catch (IOException | InterruptedException e) {
+ LOGGER.log(Level.WARNING, "Failed to look up version from GitHub", e); + LOGGER.log(Level.WARNING, "Failed to look up version from GitHub", e);
+ return text("Failed to retrieve version from server.", RED); + return text("Failed to retrieve version from server.", RED);
+ } + }
+ } + }
+ +
+ private @NotNull Component getResponseMessage(final int versionDiff) { + private @NotNull Component getResponseMessage(final int versionDiff) {
+ return switch (Math.max(-1, Math.min(1, versionDiff))) { + return switch (Math.max(-1, Math.min(1, versionDiff))) {
+ case -1 -> text("You are running an unsupported version of Pufferfish.", RED); + case -1 -> text("You are running an unsupported version of Pufferfish.", RED);
@@ -1054,25 +1054,25 @@ index 0000000000000000000000000000000000000000..1adc3de7cdb5b5f309df45f463e4697d
+ RED); + RED);
+ }; + };
+ } + }
+ +
+ private @Nullable Component getHistory() { + private @Nullable Component getHistory() {
+ final VersionHistoryManager.VersionData data = VersionHistoryManager.INSTANCE.getVersionData(); + final VersionHistoryManager.VersionData data = VersionHistoryManager.INSTANCE.getVersionData();
+ if (data == null) { + if (data == null) {
+ return null; + return null;
+ } + }
+ +
+ final String oldVersion = data.getOldVersion(); + final String oldVersion = data.getOldVersion();
+ if (oldVersion == null) { + if (oldVersion == null) {
+ return null; + return null;
+ } + }
+ +
+ return Component.text("Previous version: " + oldVersion, NamedTextColor.GRAY, TextDecoration.ITALIC); + return Component.text("Previous version: " + oldVersion, NamedTextColor.GRAY, TextDecoration.ITALIC);
+ } + }
+} +}
\ No newline at end of file \ No newline at end of file
diff --git a/src/main/java/gg/pufferfish/pufferfish/sentry/PufferfishSentryAppender.java b/src/main/java/gg/pufferfish/pufferfish/sentry/PufferfishSentryAppender.java diff --git a/src/main/java/gg/pufferfish/pufferfish/sentry/PufferfishSentryAppender.java b/src/main/java/gg/pufferfish/pufferfish/sentry/PufferfishSentryAppender.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..d04a8a4336566dbe6e1b9ec0d574cff43e003fa8 index 0000000000000000000000000000000000000000..731ef11c7a025ae95ed8a757b530d834733d0621
--- /dev/null --- /dev/null
+++ b/src/main/java/gg/pufferfish/pufferfish/sentry/PufferfishSentryAppender.java +++ b/src/main/java/gg/pufferfish/pufferfish/sentry/PufferfishSentryAppender.java
@@ -0,0 +1,135 @@ @@ -0,0 +1,135 @@
@@ -1096,14 +1096,14 @@ index 0000000000000000000000000000000000000000..d04a8a4336566dbe6e1b9ec0d574cff4
+import org.apache.logging.log4j.core.filter.AbstractFilter; +import org.apache.logging.log4j.core.filter.AbstractFilter;
+ +
+public class PufferfishSentryAppender extends AbstractAppender { +public class PufferfishSentryAppender extends AbstractAppender {
+ +
+ private static final org.apache.logging.log4j.Logger logger = LogManager.getLogger(PufferfishSentryAppender.class); + private static final org.apache.logging.log4j.Logger logger = LogManager.getLogger(PufferfishSentryAppender.class);
+ private static final Gson GSON = new Gson(); + private static final Gson GSON = new Gson();
+ +
+ public PufferfishSentryAppender() { + public PufferfishSentryAppender() {
+ super("PufferfishSentryAdapter", new SentryFilter(), null); + super("PufferfishSentryAdapter", new SentryFilter(), null);
+ } + }
+ +
+ @Override + @Override
+ public void append(LogEvent logEvent) { + public void append(LogEvent logEvent) {
+ if (logEvent.getThrown() != null && logEvent.getLevel().isMoreSpecificThan(Level.WARN)) { + if (logEvent.getThrown() != null && logEvent.getLevel().isMoreSpecificThan(Level.WARN)) {
@@ -1120,55 +1120,55 @@ index 0000000000000000000000000000000000000000..d04a8a4336566dbe6e1b9ec0d574cff4
+ } + }
+ } + }
+ } + }
+ +
+ private void logException(LogEvent e) { + private void logException(LogEvent e) {
+ SentryEvent event = new SentryEvent(e.getThrown()); + SentryEvent event = new SentryEvent(e.getThrown());
+ +
+ Message sentryMessage = new Message(); + Message sentryMessage = new Message();
+ sentryMessage.setMessage(e.getMessage().getFormattedMessage()); + sentryMessage.setMessage(e.getMessage().getFormattedMessage());
+ +
+ event.setThrowable(e.getThrown()); + event.setThrowable(e.getThrown());
+ event.setLevel(getLevel(e.getLevel())); + event.setLevel(getLevel(e.getLevel()));
+ event.setLogger(e.getLoggerName()); + event.setLogger(e.getLoggerName());
+ event.setTransaction(e.getLoggerName()); + event.setTransaction(e.getLoggerName());
+ event.setExtra("thread_name", e.getThreadName()); + event.setExtra("thread_name", e.getThreadName());
+ +
+ boolean hasContext = e.getContextData() != null; + boolean hasContext = e.getContextData() != null;
+ +
+ if (hasContext && e.getContextData().containsKey("pufferfishsentry_playerid")) { + if (hasContext && e.getContextData().containsKey("pufferfishsentry_playerid")) {
+ User user = new User(); + User user = new User();
+ user.setId(e.getContextData().getValue("pufferfishsentry_playerid")); + user.setId(e.getContextData().getValue("pufferfishsentry_playerid"));
+ user.setUsername(e.getContextData().getValue("pufferfishsentry_playername")); + user.setUsername(e.getContextData().getValue("pufferfishsentry_playername"));
+ event.setUser(user); + event.setUser(user);
+ } + }
+ +
+ if (hasContext && e.getContextData().containsKey("pufferfishsentry_pluginname")) { + if (hasContext && e.getContextData().containsKey("pufferfishsentry_pluginname")) {
+ event.setExtra("plugin.name", e.getContextData().getValue("pufferfishsentry_pluginname")); + event.setExtra("plugin.name", e.getContextData().getValue("pufferfishsentry_pluginname"));
+ event.setExtra("plugin.version", e.getContextData().getValue("pufferfishsentry_pluginversion")); + event.setExtra("plugin.version", e.getContextData().getValue("pufferfishsentry_pluginversion"));
+ event.setTransaction(e.getContextData().getValue("pufferfishsentry_pluginname")); + event.setTransaction(e.getContextData().getValue("pufferfishsentry_pluginname"));
+ } + }
+ +
+ if (hasContext && e.getContextData().containsKey("pufferfishsentry_eventdata")) { + if (hasContext && e.getContextData().containsKey("pufferfishsentry_eventdata")) {
+ Map<String, String> eventFields = GSON.fromJson((String) e.getContextData().getValue("pufferfishsentry_eventdata"), new TypeToken<Map<String, String>>() {}.getType()); + Map<String, String> eventFields = GSON.fromJson((String) e.getContextData().getValue("pufferfishsentry_eventdata"), new TypeToken<Map<String, String>>() {}.getType());
+ if (eventFields != null) { + if (eventFields != null) {
+ event.setExtra("event", eventFields); + event.setExtra("event", eventFields);
+ } + }
+ } + }
+ +
+ Sentry.captureEvent(event); + Sentry.captureEvent(event);
+ } + }
+ +
+ private void logBreadcrumb(LogEvent e) { + private void logBreadcrumb(LogEvent e) {
+ Breadcrumb breadcrumb = new Breadcrumb(); + Breadcrumb breadcrumb = new Breadcrumb();
+ +
+ breadcrumb.setLevel(getLevel(e.getLevel())); + breadcrumb.setLevel(getLevel(e.getLevel()));
+ breadcrumb.setCategory(e.getLoggerName()); + breadcrumb.setCategory(e.getLoggerName());
+ breadcrumb.setType(e.getLoggerName()); + breadcrumb.setType(e.getLoggerName());
+ breadcrumb.setMessage(e.getMessage().getFormattedMessage()); + breadcrumb.setMessage(e.getMessage().getFormattedMessage());
+ +
+ Sentry.addBreadcrumb(breadcrumb); + Sentry.addBreadcrumb(breadcrumb);
+ } + }
+ +
+ private SentryLevel getLevel(Level level) { + private SentryLevel getLevel(Level level) {
+ switch (level.getStandardLevel()) { + switch (level.getStandardLevel()) {
+ case TRACE: + case TRACE:
@@ -1185,35 +1185,35 @@ index 0000000000000000000000000000000000000000..d04a8a4336566dbe6e1b9ec0d574cff4
+ return SentryLevel.INFO; + return SentryLevel.INFO;
+ } + }
+ } + }
+ +
+ private static class SentryFilter extends AbstractFilter { + private static class SentryFilter extends AbstractFilter {
+ +
+ @Override + @Override
+ public Result filter(Logger logger, org.apache.logging.log4j.Level level, Marker marker, String msg, + public Result filter(Logger logger, org.apache.logging.log4j.Level level, Marker marker, String msg,
+ Object... params) { + Object... params) {
+ return this.filter(logger.getName()); + return this.filter(logger.getName());
+ } + }
+ +
+ @Override + @Override
+ public Result filter(Logger logger, org.apache.logging.log4j.Level level, Marker marker, Object msg, Throwable t) { + public Result filter(Logger logger, org.apache.logging.log4j.Level level, Marker marker, Object msg, Throwable t) {
+ return this.filter(logger.getName()); + return this.filter(logger.getName());
+ } + }
+ +
+ @Override + @Override
+ public Result filter(LogEvent event) { + public Result filter(LogEvent event) {
+ return this.filter(event == null ? null : event.getLoggerName()); + return this.filter(event == null ? null : event.getLoggerName());
+ } + }
+ +
+ private Result filter(String loggerName) { + private Result filter(String loggerName) {
+ return loggerName != null && loggerName.startsWith("gg.castaway.pufferfish.sentry") ? Result.DENY + return loggerName != null && loggerName.startsWith("gg.castaway.pufferfish.sentry") ? Result.DENY
+ : Result.NEUTRAL; + : Result.NEUTRAL;
+ } + }
+ +
+ } + }
+} +}
diff --git a/src/main/java/gg/pufferfish/pufferfish/sentry/SentryManager.java b/src/main/java/gg/pufferfish/pufferfish/sentry/SentryManager.java diff --git a/src/main/java/gg/pufferfish/pufferfish/sentry/SentryManager.java b/src/main/java/gg/pufferfish/pufferfish/sentry/SentryManager.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..b011abbeb80b42de6be3785e47c7ba3c0f6dc161 index 0000000000000000000000000000000000000000..1b29210ad0bbb4ada150f23357f0c80d331c996d
--- /dev/null --- /dev/null
+++ b/src/main/java/gg/pufferfish/pufferfish/sentry/SentryManager.java +++ b/src/main/java/gg/pufferfish/pufferfish/sentry/SentryManager.java
@@ -0,0 +1,40 @@ @@ -0,0 +1,40 @@
@@ -1225,27 +1225,27 @@ index 0000000000000000000000000000000000000000..b011abbeb80b42de6be3785e47c7ba3c
+import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.Logger;
+ +
+public class SentryManager { +public class SentryManager {
+ +
+ private static final Logger logger = LogManager.getLogger(SentryManager.class); + private static final Logger logger = LogManager.getLogger(SentryManager.class);
+ +
+ private SentryManager() { + private SentryManager() {
+ +
+ } + }
+ +
+ private static boolean initialized = false; + private static boolean initialized = false;
+ +
+ public static synchronized void init() { + public static synchronized void init() {
+ if (initialized) { + if (initialized) {
+ return; + return;
+ } + }
+ try { + try {
+ initialized = true; + initialized = true;
+ +
+ Sentry.init(options -> { + Sentry.init(options -> {
+ options.setDsn(PufferfishConfig.sentryDsn); + options.setDsn(PufferfishConfig.sentryDsn);
+ options.setMaxBreadcrumbs(100); + options.setMaxBreadcrumbs(100);
+ }); + });
+ +
+ PufferfishSentryAppender appender = new PufferfishSentryAppender(); + PufferfishSentryAppender appender = new PufferfishSentryAppender();
+ appender.start(); + appender.start();
+ ((org.apache.logging.log4j.core.Logger) LogManager.getRootLogger()).addAppender(appender); + ((org.apache.logging.log4j.core.Logger) LogManager.getRootLogger()).addAppender(appender);
@@ -1255,11 +1255,11 @@ index 0000000000000000000000000000000000000000..b011abbeb80b42de6be3785e47c7ba3c
+ initialized = false; + initialized = false;
+ } + }
+ } + }
+ +
+} +}
diff --git a/src/main/java/gg/pufferfish/pufferfish/util/AsyncExecutor.java b/src/main/java/gg/pufferfish/pufferfish/util/AsyncExecutor.java diff --git a/src/main/java/gg/pufferfish/pufferfish/util/AsyncExecutor.java b/src/main/java/gg/pufferfish/pufferfish/util/AsyncExecutor.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..0fe6243ea01f39fc43c4ca8897a70feddb7fb11d index 0000000000000000000000000000000000000000..8e5323d5d9af25c8a85c4b34a6be76cfc54384cf
--- /dev/null --- /dev/null
+++ b/src/main/java/gg/pufferfish/pufferfish/util/AsyncExecutor.java +++ b/src/main/java/gg/pufferfish/pufferfish/util/AsyncExecutor.java
@@ -0,0 +1,73 @@ @@ -0,0 +1,73 @@
@@ -1274,26 +1274,26 @@ index 0000000000000000000000000000000000000000..0fe6243ea01f39fc43c4ca8897a70fed
+import java.util.logging.Level; +import java.util.logging.Level;
+ +
+public class AsyncExecutor implements Runnable { +public class AsyncExecutor implements Runnable {
+ +
+ private final Queue<Runnable> jobs = Queues.newArrayDeque(); + private final Queue<Runnable> jobs = Queues.newArrayDeque();
+ private final Lock mutex = new ReentrantLock(); + private final Lock mutex = new ReentrantLock();
+ private final Condition cond = mutex.newCondition(); + private final Condition cond = mutex.newCondition();
+ private final Thread thread; + private final Thread thread;
+ private volatile boolean killswitch = false; + private volatile boolean killswitch = false;
+ +
+ public AsyncExecutor(String threadName) { + public AsyncExecutor(String threadName) {
+ this.thread = new Thread(this, threadName); + this.thread = new Thread(this, threadName);
+ } + }
+ +
+ public void start() { + public void start() {
+ thread.start(); + thread.start();
+ } + }
+ +
+ public void kill() { + public void kill() {
+ killswitch = true; + killswitch = true;
+ cond.signalAll(); + cond.signalAll();
+ } + }
+ +
+ public void submit(Runnable runnable) { + public void submit(Runnable runnable) {
+ mutex.lock(); + mutex.lock();
+ try { + try {
@@ -1303,7 +1303,7 @@ index 0000000000000000000000000000000000000000..0fe6243ea01f39fc43c4ca8897a70fed
+ mutex.unlock(); + mutex.unlock();
+ } + }
+ } + }
+ +
+ @Override + @Override
+ public void run() { + public void run() {
+ while (!killswitch) { + while (!killswitch) {
@@ -1319,26 +1319,26 @@ index 0000000000000000000000000000000000000000..0fe6243ea01f39fc43c4ca8897a70fed
+ } + }
+ } + }
+ } + }
+ +
+ private Runnable takeRunnable() throws InterruptedException { + private Runnable takeRunnable() throws InterruptedException {
+ mutex.lock(); + mutex.lock();
+ try { + try {
+ while (jobs.isEmpty() && !killswitch) { + while (jobs.isEmpty() && !killswitch) {
+ cond.await(); + cond.await();
+ } + }
+ +
+ if (jobs.isEmpty()) return null; // We've set killswitch + if (jobs.isEmpty()) return null; // We've set killswitch
+ +
+ return jobs.remove(); + return jobs.remove();
+ } finally { + } finally {
+ mutex.unlock(); + mutex.unlock();
+ } + }
+ } + }
+ +
+} +}
diff --git a/src/main/java/gg/pufferfish/pufferfish/util/AsyncPlayerAreaMap.java b/src/main/java/gg/pufferfish/pufferfish/util/AsyncPlayerAreaMap.java diff --git a/src/main/java/gg/pufferfish/pufferfish/util/AsyncPlayerAreaMap.java b/src/main/java/gg/pufferfish/pufferfish/util/AsyncPlayerAreaMap.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..a93ee99c2399def1e221260547a3e6bce2d621fa index 0000000000000000000000000000000000000000..fdcb62d12164024a5f354d60cc863821a18d1b2a
--- /dev/null --- /dev/null
+++ b/src/main/java/gg/pufferfish/pufferfish/util/AsyncPlayerAreaMap.java +++ b/src/main/java/gg/pufferfish/pufferfish/util/AsyncPlayerAreaMap.java
@@ -0,0 +1,31 @@ @@ -0,0 +1,31 @@
@@ -1350,22 +1350,22 @@ index 0000000000000000000000000000000000000000..a93ee99c2399def1e221260547a3e6bc
+import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.level.ServerPlayer;
+ +
+public final class AsyncPlayerAreaMap extends PlayerAreaMap { +public final class AsyncPlayerAreaMap extends PlayerAreaMap {
+ +
+ public AsyncPlayerAreaMap() { + public AsyncPlayerAreaMap() {
+ super(); + super();
+ this.areaMap = new Long2ObjectOpenHashMapWrapper<>(new ConcurrentHashMap<>(1024, 0.7f)); + this.areaMap = new Long2ObjectOpenHashMapWrapper<>(new ConcurrentHashMap<>(1024, 0.7f));
+ } + }
+ +
+ public AsyncPlayerAreaMap(final PooledLinkedHashSets<ServerPlayer> pooledHashSets) { + public AsyncPlayerAreaMap(final PooledLinkedHashSets<ServerPlayer> pooledHashSets) {
+ super(pooledHashSets); + super(pooledHashSets);
+ this.areaMap = new Long2ObjectOpenHashMapWrapper<>(new ConcurrentHashMap<>(1024, 0.7f)); + this.areaMap = new Long2ObjectOpenHashMapWrapper<>(new ConcurrentHashMap<>(1024, 0.7f));
+ } + }
+ +
+ public AsyncPlayerAreaMap(final PooledLinkedHashSets<ServerPlayer> pooledHashSets, final ChangeCallback<ServerPlayer> addCallback, + public AsyncPlayerAreaMap(final PooledLinkedHashSets<ServerPlayer> pooledHashSets, final ChangeCallback<ServerPlayer> addCallback,
+ final ChangeCallback<ServerPlayer> removeCallback) { + final ChangeCallback<ServerPlayer> removeCallback) {
+ this(pooledHashSets, addCallback, removeCallback, null); + this(pooledHashSets, addCallback, removeCallback, null);
+ } + }
+ +
+ public AsyncPlayerAreaMap(final PooledLinkedHashSets<ServerPlayer> pooledHashSets, final ChangeCallback<ServerPlayer> addCallback, + public AsyncPlayerAreaMap(final PooledLinkedHashSets<ServerPlayer> pooledHashSets, final ChangeCallback<ServerPlayer> addCallback,
+ final ChangeCallback<ServerPlayer> removeCallback, final ChangeSourceCallback<ServerPlayer> changeSourceCallback) { + final ChangeCallback<ServerPlayer> removeCallback, final ChangeSourceCallback<ServerPlayer> changeSourceCallback) {
+ super(pooledHashSets, addCallback, removeCallback, changeSourceCallback); + super(pooledHashSets, addCallback, removeCallback, changeSourceCallback);
@@ -1401,7 +1401,7 @@ index 0000000000000000000000000000000000000000..c1929840254a3e6d721816f4a20415be
+} +}
diff --git a/src/main/java/gg/pufferfish/pufferfish/util/Long2ObjectOpenHashMapWrapper.java b/src/main/java/gg/pufferfish/pufferfish/util/Long2ObjectOpenHashMapWrapper.java diff --git a/src/main/java/gg/pufferfish/pufferfish/util/Long2ObjectOpenHashMapWrapper.java b/src/main/java/gg/pufferfish/pufferfish/util/Long2ObjectOpenHashMapWrapper.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..42cdc43d6b739973a0944f502089757247ee6c61 index 0000000000000000000000000000000000000000..facd55463d44cb7e3d2ca6892982f5497b8dded1
--- /dev/null --- /dev/null
+++ b/src/main/java/gg/pufferfish/pufferfish/util/Long2ObjectOpenHashMapWrapper.java +++ b/src/main/java/gg/pufferfish/pufferfish/util/Long2ObjectOpenHashMapWrapper.java
@@ -0,0 +1,40 @@ @@ -0,0 +1,40 @@
@@ -1412,82 +1412,39 @@ index 0000000000000000000000000000000000000000..42cdc43d6b739973a0944f5020897572
+import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Nullable;
+ +
+public class Long2ObjectOpenHashMapWrapper<V> extends Long2ObjectOpenHashMap<V> { +public class Long2ObjectOpenHashMapWrapper<V> extends Long2ObjectOpenHashMap<V> {
+ +
+ private final Map<Long, V> backingMap; + private final Map<Long, V> backingMap;
+ +
+ public Long2ObjectOpenHashMapWrapper(Map<Long, V> map) { + public Long2ObjectOpenHashMapWrapper(Map<Long, V> map) {
+ backingMap = map; + backingMap = map;
+ } + }
+ +
+ @Override + @Override
+ public V put(Long key, V value) { + public V put(Long key, V value) {
+ return backingMap.put(key, value); + return backingMap.put(key, value);
+ } + }
+ +
+ @Override + @Override
+ public V get(Object key) { + public V get(Object key) {
+ return backingMap.get(key); + return backingMap.get(key);
+ } + }
+ +
+ @Override + @Override
+ public V remove(Object key) { + public V remove(Object key) {
+ return backingMap.remove(key); + return backingMap.remove(key);
+ } + }
+ +
+ @Nullable + @Nullable
+ @Override + @Override
+ public V putIfAbsent(Long key, V value) { + public V putIfAbsent(Long key, V value) {
+ return backingMap.putIfAbsent(key, value); + return backingMap.putIfAbsent(key, value);
+ } + }
+ +
+ @Override + @Override
+ public int size() { + public int size() {
+ return backingMap.size(); + return backingMap.size();
+ } + }
+} +}
diff --git a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
index 8d442c5a498ecf288a0cc0c54889c6e2fda849ce..01bdf134fc21220ab7ecca51f2dcd51c0b466bba 100644
--- a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
+++ b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
@@ -7,6 +7,7 @@ import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.game.ServerboundPlaceRecipePacket;
+import org.bukkit.Bukkit; // Pufferfish
import org.checkerframework.checker.nullness.qual.Nullable;
import org.spongepowered.configurate.objectmapping.ConfigSerializable;
import org.spongepowered.configurate.objectmapping.meta.Comment;
@@ -16,6 +17,7 @@ import org.spongepowered.configurate.objectmapping.meta.Setting;
import java.util.List;
import java.util.Map;
import java.util.Objects;
+import java.util.logging.Level; // Pufferfish
@SuppressWarnings({"CanBeFinal", "FieldCanBeLocal", "FieldMayBeFinal", "NotNullFieldNotInitialized", "InnerClassMayBeStatic"})
public class GlobalConfiguration extends ConfigurationPart {
@@ -51,6 +53,7 @@ public class GlobalConfiguration extends ConfigurationPart {
public class Timings extends ConfigurationPart.Post {
public boolean enabled = true;
+ public boolean reallyEnabled = false;
public boolean verbose = true;
public String url = "https://timings.aikar.co/";
public boolean serverNamePrivacy = false;
@@ -64,6 +67,14 @@ public class GlobalConfiguration extends ConfigurationPart {
@Override
public void postProcess() {
+ // Pufferfish start
+ if (enabled && !reallyEnabled) {
+ Bukkit.getLogger().log(Level.WARNING, "[Pufferfish] To improve performance, timings have been disabled by default");
+ Bukkit.getLogger().log(Level.WARNING, "[Pufferfish] You can still use timings by using /timings on, but they will not start on server startup unless you set timings.really-enabled to true in paper.yml");
+ Bukkit.getLogger().log(Level.WARNING, "[Pufferfish] If you would like to disable this message, either set timings.really-enabled to true or timings.enabled to false.");
+ }
+ enabled = reallyEnabled;
+ // Pufferfish end
MinecraftTimings.processConfig(this);
}
}
diff --git a/src/main/java/io/papermc/paper/util/MCUtil.java b/src/main/java/io/papermc/paper/util/MCUtil.java diff --git a/src/main/java/io/papermc/paper/util/MCUtil.java b/src/main/java/io/papermc/paper/util/MCUtil.java
index 6efb8b10f17c70b05128039376d254e6beda3841..57e8c6673c7cfe447a75f15506e8000062d813fe 100644 index 6efb8b10f17c70b05128039376d254e6beda3841..57e8c6673c7cfe447a75f15506e8000062d813fe 100644
--- a/src/main/java/io/papermc/paper/util/MCUtil.java --- a/src/main/java/io/papermc/paper/util/MCUtil.java
@@ -1502,18 +1459,18 @@ index 6efb8b10f17c70b05128039376d254e6beda3841..57e8c6673c7cfe447a75f15506e80000
public static long getCoordinateKey(final ChunkPos pair) { public static long getCoordinateKey(final ChunkPos pair) {
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 9f15d9dbdfa74a0640b1a2b4ff695609d4758a4c..644a7f020afd26017543056fd9378868b1874fe8 100644 index 9f15d9dbdfa74a0640b1a2b4ff695609d4758a4c..a29d92b3f2658b63545b25092bb3a1fea46ca36b 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java --- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -314,6 +314,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa @@ -313,6 +313,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
public volatile Thread shutdownThread; // Paper
public volatile boolean abnormalExit = false; // Paper public volatile boolean abnormalExit = false; // Paper
public boolean isIteratingOverLevels = false; // Paper public boolean isIteratingOverLevels = false; // Paper
+
+ public gg.pufferfish.pufferfish.util.AsyncExecutor mobSpawnExecutor = new gg.pufferfish.pufferfish.util.AsyncExecutor("MobSpawning"); // Pufferfish - optimize mob spawning + public gg.pufferfish.pufferfish.util.AsyncExecutor mobSpawnExecutor = new gg.pufferfish.pufferfish.util.AsyncExecutor("MobSpawning"); // Pufferfish - optimize mob spawning
+
public static <S extends MinecraftServer> S spin(Function<Thread, S> serverFactory) { public static <S extends MinecraftServer> S spin(Function<Thread, S> serverFactory) {
AtomicReference<S> atomicreference = new AtomicReference(); AtomicReference<S> atomicreference = new AtomicReference();
Thread thread = new io.papermc.paper.util.TickThread(() -> { // Paper - rewrite chunk system
@@ -1682,7 +1684,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa @@ -1682,7 +1684,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@DontObfuscate @DontObfuscate
@@ -1605,19 +1562,19 @@ index fbe209a66c77c47935ad026dd3e45e682af91fd8..3ce4dbf4eed442d89d6bbc8e4c6a0001
return this.scaledRange(i); return this.scaledRange(i);
} }
diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
index ca84eddbdb1e198b899750e5f6b3eafd25ce970f..8438354e482b6f892c3344eceff1abd23cfa128a 100644 index ca84eddbdb1e198b899750e5f6b3eafd25ce970f..c6f5d6756fa0e068a462d9c0ded12e0771abba37 100644
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
@@ -77,6 +77,9 @@ public class ServerChunkCache extends ChunkSource { @@ -76,6 +76,9 @@ public class ServerChunkCache extends ChunkSource {
final it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap<LevelChunk> loadedChunkMap = new it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap<>(8192, 0.5f);
private final LevelChunk[] lastLoadedChunks = new LevelChunk[4 * 4]; private final LevelChunk[] lastLoadedChunks = new LevelChunk[4 * 4];
+
+ public boolean firstRunSpawnCounts = true; // Pufferfish + public boolean firstRunSpawnCounts = true; // Pufferfish
+ public final java.util.concurrent.atomic.AtomicBoolean _pufferfish_spawnCountsReady = new java.util.concurrent.atomic.AtomicBoolean(false); // Pufferfish - optimize countmobs + public final java.util.concurrent.atomic.AtomicBoolean _pufferfish_spawnCountsReady = new java.util.concurrent.atomic.AtomicBoolean(false); // Pufferfish - optimize countmobs
+
private static int getChunkCacheKey(int x, int z) { private static int getChunkCacheKey(int x, int z) {
return x & 3 | ((z & 3) << 2); return x & 3 | ((z & 3) << 2);
}
@@ -703,6 +706,7 @@ public class ServerChunkCache extends ChunkSource { @@ -703,6 +706,7 @@ public class ServerChunkCache extends ChunkSource {
ProfilerFiller gameprofilerfiller = this.level.getProfiler(); ProfilerFiller gameprofilerfiller = this.level.getProfiler();
@@ -1673,7 +1630,7 @@ index ca84eddbdb1e198b899750e5f6b3eafd25ce970f..8438354e482b6f892c3344eceff1abd2
} }
// Paper end - controlled flush for entity tracker packets // Paper end - controlled flush for entity tracker packets
} }
+ +
+ // Pufferfish start - optimize mob spawning + // Pufferfish start - optimize mob spawning
+ if (gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncMobSpawning) { + if (gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncMobSpawning) {
+ for (ServerPlayer player : this.level.players) { + for (ServerPlayer player : this.level.players) {
@@ -1721,7 +1678,7 @@ index b7fd8e70413c38923d0719aff803449e392383ac..d5cb594f0b17ec9dc1a19cdb99bba553
this.wasOnGround = this.entity.isOnGround(); this.wasOnGround = this.entity.isOnGround();
this.teleportDelay = 0; this.teleportDelay = 0;
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index 5a5ff40df37db9cbd53c584ed26a3ce4888b29c0..ff2862bf1f511196d1e911e2584262ed728e9a81 100644 index 3bb63a652aca3c23f5f1bbf9cb70fce6540f2e33..dda5e77f7d9fb2340d50997c0a17bc7f5e2bb961 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java --- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -709,6 +709,7 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -709,6 +709,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
@@ -1786,10 +1743,10 @@ index 5a5ff40df37db9cbd53c584ed26a3ce4888b29c0..ff2862bf1f511196d1e911e2584262ed
this.getRandomBlockPosition(j, 0, k, 15, blockposition); this.getRandomBlockPosition(j, 0, k, 15, blockposition);
int normalY = chunk.getHeight(Heightmap.Types.MOTION_BLOCKING, blockposition.getX() & 15, blockposition.getZ() & 15) + 1; int normalY = chunk.getHeight(Heightmap.Types.MOTION_BLOCKING, blockposition.getX() & 15, blockposition.getZ() & 15) + 1;
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index d587b2c4e39bce7e098aa9fab361230f72770658..e6e1c46a01961d47a774e34e430c8eacda22d558 100644 index 9c5754ac3b00d3f0cb80ec83a2beefadee6d0a14..cc7187c597337665d3cf3c3de4b53e3105b9e4c3 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -1206,6 +1206,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -1215,6 +1215,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
@Override @Override
public void handleEditBook(ServerboundEditBookPacket packet) { public void handleEditBook(ServerboundEditBookPacket packet) {
@@ -1797,7 +1754,7 @@ index d587b2c4e39bce7e098aa9fab361230f72770658..e6e1c46a01961d47a774e34e430c8eac
// Paper start // Paper start
if (!this.cserver.isPrimaryThread()) { if (!this.cserver.isPrimaryThread()) {
List<String> pageList = packet.getPages(); List<String> pageList = packet.getPages();
@@ -2347,6 +2348,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -2356,6 +2357,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
} }
private boolean updateChatOrder(Instant timestamp) { private boolean updateChatOrder(Instant timestamp) {
@@ -1918,7 +1875,7 @@ index 04b1531572e8fff1e46fe1c94e7fc863841e0f66..47ddc42f2b63d9d3fae5ae6ea93d4183
int LARGE_MAX_STACK_SIZE = 64; int LARGE_MAX_STACK_SIZE = 64;
int DEFAULT_DISTANCE_LIMIT = 8; int DEFAULT_DISTANCE_LIMIT = 8;
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index 4705d7066207250c03a5f98eef61554c901f2e35..548133e399b5abc4aa83045af87c135a3455b722 100644 index 4705d7066207250c03a5f98eef61554c901f2e35..e25be74ef0a88541884ad62a4b84219400d5a142 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java --- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -291,7 +291,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { @@ -291,7 +291,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource {
@@ -1939,7 +1896,7 @@ index 4705d7066207250c03a5f98eef61554c901f2e35..548133e399b5abc4aa83045af87c135a
+ public int activatedPriority = gg.pufferfish.pufferfish.PufferfishConfig.maximumActivationPrio; // golf score + public int activatedPriority = gg.pufferfish.pufferfish.PufferfishConfig.maximumActivationPrio; // golf score
+ public final BlockPos.MutableBlockPos cachedBlockPos = new BlockPos.MutableBlockPos(); // used where needed + public final BlockPos.MutableBlockPos cachedBlockPos = new BlockPos.MutableBlockPos(); // used where needed
+ // Pufferfish end + // Pufferfish end
+ +
public float getBukkitYaw() { public float getBukkitYaw() {
return this.yRot; return this.yRot;
} }
@@ -2125,7 +2082,7 @@ index ceacc0d383e2ee674783d3c0a7df0a951595faca..8af0918d3a62de58a4b2af55022c812b
private String descriptionId; private String descriptionId;
@Nullable @Nullable
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index dcfb71b5a53df789e366fea2080921d677549a2e..791f672b30f2a4d3b329e2ce0f4fb9c2ca627b01 100644 index 95a27d28f73039693ca64601954af62028413634..f3d96caa83ef4a8083b78e3265282d4723e37d28 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -141,7 +141,6 @@ import org.bukkit.event.entity.EntityTeleportEvent; @@ -141,7 +141,6 @@ import org.bukkit.event.entity.EntityTeleportEvent;
@@ -2776,66 +2733,6 @@ index 2ee9e8e3c1a28c1823de8e1fe421cc1f3e72f384..cf4a8084158b10bf047d418dda375f8c
// CraftBukkit start - moved block handling into separate method for use by Block#rayTrace // CraftBukkit start - moved block handling into separate method for use by Block#rayTrace
default BlockHitResult clip(ClipContext raytrace1, BlockPos blockposition) { default BlockHitResult clip(ClipContext raytrace1, BlockPos blockposition) {
// Paper start - Prevent raytrace from loading chunks // Paper start - Prevent raytrace from loading chunks
diff --git a/src/main/java/net/minecraft/world/level/GameRules.java b/src/main/java/net/minecraft/world/level/GameRules.java
index edd2c9d0cf5a81c779011cb4215d496a8987b784..29d1f78dbc8410f9292f409b17705acde55979df 100644
--- a/src/main/java/net/minecraft/world/level/GameRules.java
+++ b/src/main/java/net/minecraft/world/level/GameRules.java
@@ -100,6 +100,7 @@ public class GameRules {
public static final GameRules.Key<GameRules.BooleanValue> RULE_GLOBAL_SOUND_EVENTS = GameRules.register("globalSoundEvents", GameRules.Category.MISC, GameRules.BooleanValue.create(true));
public static final GameRules.Key<GameRules.BooleanValue> RULE_DO_VINES_SPREAD = GameRules.register("doVinesSpread", GameRules.Category.UPDATES, GameRules.BooleanValue.create(true));
private final Map<GameRules.Key<?>, GameRules.Value<?>> rules;
+ private final GameRules.Value<?>[] gameruleArray;
private static <T extends GameRules.Value<T>> GameRules.Key<T> register(String name, GameRules.Category category, GameRules.Type<T> type) {
GameRules.Key<T> gamerules_gamerulekey = new GameRules.Key<>(name, category);
@@ -118,17 +119,33 @@ public class GameRules {
}
public GameRules() {
- this.rules = (Map) GameRules.GAME_RULE_TYPES.entrySet().stream().collect(ImmutableMap.toImmutableMap(Entry::getKey, (entry) -> {
+ // Pufferfish start - use this to ensure gameruleArray is initialized
+ this((Map) GameRules.GAME_RULE_TYPES.entrySet().stream().collect(ImmutableMap.toImmutableMap(Entry::getKey, (entry) -> {
return ((GameRules.Type) entry.getValue()).createRule();
- }));
+ })));
+ // Pufferfish end
}
private GameRules(Map<GameRules.Key<?>, GameRules.Value<?>> rules) {
this.rules = rules;
+
+ // Pufferfish start
+ int arraySize = rules.keySet().stream().mapToInt(key -> key.gameRuleIndex).max().orElse(-1) + 1;
+ GameRules.Value<?>[] values = new GameRules.Value[arraySize];
+
+ for (Entry<GameRules.Key<?>, GameRules.Value<?>> entry : rules.entrySet()) {
+ values[entry.getKey().gameRuleIndex] = entry.getValue();
+ }
+
+ this.gameruleArray = values;
+ // Pufferfish end
}
public <T extends GameRules.Value<T>> T getRule(GameRules.Key<T> key) {
- return (T) this.rules.get(key); // CraftBukkit - decompile error
+ // Pufferfish start
+ return key == null ? null : (T) this.gameruleArray[key.gameRuleIndex];
+ //return (T) this.rules.get(key); // CraftBukkit - decompile error
+ // Pufferfish end
}
public CompoundTag createTag() {
@@ -187,6 +204,10 @@ public class GameRules {
}
public static final class Key<T extends GameRules.Value<T>> {
+ // Pufferfish start
+ private static int lastGameRuleIndex = 0;
+ public final int gameRuleIndex = lastGameRuleIndex++;
+ // Pufferfish end
final String id;
private final GameRules.Category category;
diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java
index 973ecd50f9cb6b86c353586e84d15dcb118ccb60..6aec1983a0236d6aa0507a2b3ad1c08b3330f0fc 100644 index 973ecd50f9cb6b86c353586e84d15dcb118ccb60..6aec1983a0236d6aa0507a2b3ad1c08b3330f0fc 100644
--- a/src/main/java/net/minecraft/world/level/Level.java --- a/src/main/java/net/minecraft/world/level/Level.java
@@ -3137,7 +3034,7 @@ index a71414397bd45ee7bcacfeef0041d80dfa25f114..d66806565770cb03a21794f99e5c4b0f
@Override @Override
diff --git a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java diff --git a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java
index cba114f554644a37339c93026630c66c43f524b9..746b71ea96ecc441afd45cc779a1777c15d58ff2 100644 index aac5572c1d40a10cd1d17f89c9eb836718837577..9b506bd2ec6e7fd1893dc7801592f011680028d7 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java --- a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java
@@ -47,7 +47,10 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen @@ -47,7 +47,10 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen
@@ -3261,7 +3158,7 @@ index 79b01e32f89defb6b78f4764600d33d4945af592..6d62cc8fb347ccafd51df05896e61699
} }
diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
index 206dc04086a218b510930739a6c573f2653ab0fa..e7e2b0fc88c9320449bcd0e0929269c2508886e4 100644 index d190bad5d287766ed4165ed827d9901a9d878687..13594b96cc8f451723c3598ef302ccee8e01bcac 100644
--- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
+++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
@@ -88,6 +88,18 @@ public class LevelChunk extends ChunkAccess { @@ -88,6 +88,18 @@ public class LevelChunk extends ChunkAccess {
@@ -3283,14 +3180,15 @@ index 206dc04086a218b510930739a6c573f2653ab0fa..e7e2b0fc88c9320449bcd0e0929269c2
public LevelChunk(Level world, ChunkPos pos) { public LevelChunk(Level world, ChunkPos pos) {
this(world, pos, UpgradeData.EMPTY, new LevelChunkTicks<>(), new LevelChunkTicks<>(), 0L, (LevelChunkSection[]) null, (LevelChunk.PostLoadProcessor) null, (BlendingData) null); this(world, pos, UpgradeData.EMPTY, new LevelChunkTicks<>(), new LevelChunkTicks<>(), 0L, (LevelChunkSection[]) null, (LevelChunk.PostLoadProcessor) null, (BlendingData) null);
} }
@@ -118,6 +130,7 @@ public class LevelChunk extends ChunkAccess { @@ -116,6 +128,8 @@ public class LevelChunk extends ChunkAccess {
this.postLoad = entityLoader;
this.blockTicks = blockTickScheduler;
this.fluidTicks = fluidTickScheduler; this.fluidTicks = fluidTickScheduler;
// CraftBukkit start +
this.bukkitChunk = new org.bukkit.craftbukkit.CraftChunk(this);
+ this.lightningTick = this.level.getThreadUnsafeRandom().nextInt(100000) << 1; // Pufferfish - initialize lightning tick + this.lightningTick = this.level.getThreadUnsafeRandom().nextInt(100000) << 1; // Pufferfish - initialize lightning tick
} }
public org.bukkit.Chunk bukkitChunk; // CraftBukkit start
diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java
index 1b80a91fa36c59a31b57ef7ef4a68eacbb0f17f5..b5e118456af6421ae3f85cb8232dc97a8b2d46b7 100644 index 1b80a91fa36c59a31b57ef7ef4a68eacbb0f17f5..b5e118456af6421ae3f85cb8232dc97a8b2d46b7 100644
--- a/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java
@@ -3533,7 +3431,7 @@ index ebe65474a4a05ff1637d7f37ebcfe690af59def5..42142c512b12e5b269c19f1e821c50e7
@Nullable @Nullable
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index f9a9d2bb7b6d1bf4a0931438de4d8c7ee0757479..b2d94582037c091bd6a04451bf62b3f9c4923d19 100644 index 0ba8446065def1b120fd73241de5bc14d60d3b82..58eaa1142bb0568bef439bba76903309914d3ae1 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -256,7 +256,7 @@ import javax.annotation.Nullable; // Paper @@ -256,7 +256,7 @@ import javax.annotation.Nullable; // Paper
@@ -3596,7 +3494,7 @@ index 774556a62eb240da42e84db4502e2ed43495be17..80553face9c70c2a3d897681e7761df8
if (stream != null) { if (stream != null) {
diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java
index e881584d38dc354204479863f004e974a0ac6c07..63d3fcc45be732a4cd2dc8b5347d860fd6577bdd 100644 index 52780192d6417f8085566e4cdf3a895a83638520..07050c78a2eb6ce0c699101b38961b111d631a41 100644
--- a/src/main/java/org/spigotmc/ActivationRange.java --- a/src/main/java/org/spigotmc/ActivationRange.java
+++ b/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java
@@ -38,6 +38,10 @@ import co.aikar.timings.MinecraftTimings; @@ -38,6 +38,10 @@ import co.aikar.timings.MinecraftTimings;
@@ -3610,7 +3508,7 @@ index e881584d38dc354204479863f004e974a0ac6c07..63d3fcc45be732a4cd2dc8b5347d860f
public class ActivationRange public class ActivationRange
{ {
@@ -216,6 +220,25 @@ public class ActivationRange @@ -217,6 +221,25 @@ public class ActivationRange
for (int i = 0; i < entities.size(); i++) { for (int i = 0; i < entities.size(); i++) {
Entity entity = entities.get(i); Entity entity = entities.get(i);
ActivationRange.activateEntity(entity); ActivationRange.activateEntity(entity);
@@ -3636,7 +3534,7 @@ index e881584d38dc354204479863f004e974a0ac6c07..63d3fcc45be732a4cd2dc8b5347d860f
} }
// Paper end // Paper end
} }
@@ -232,12 +255,12 @@ public class ActivationRange @@ -233,12 +256,12 @@ public class ActivationRange
if ( MinecraftServer.currentTick > entity.activatedTick ) if ( MinecraftServer.currentTick > entity.activatedTick )
{ {
if ( entity.defaultActivationState ) if ( entity.defaultActivationState )
@@ -3651,7 +3549,7 @@ index e881584d38dc354204479863f004e974a0ac6c07..63d3fcc45be732a4cd2dc8b5347d860f
entity.activatedTick = MinecraftServer.currentTick; entity.activatedTick = MinecraftServer.currentTick;
} }
} }
@@ -291,7 +314,7 @@ public class ActivationRange @@ -292,7 +315,7 @@ public class ActivationRange
if ( entity instanceof LivingEntity ) if ( entity instanceof LivingEntity )
{ {
LivingEntity living = (LivingEntity) entity; LivingEntity living = (LivingEntity) entity;

View File

@@ -1,6 +1,6 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: AlphaKR93 <dev@alpha93.kr> From: AlphaKR93 <dev@alpha93.kr>
Date: Thu, 30 Mar 2023 06:58:47 +0000 Date: Fri, 14 Apr 2023 06:50:31 +0000
Subject: [PATCH] Purpur Server Changes Subject: [PATCH] Purpur Server Changes
Original: PurpurMC Original: PurpurMC
@@ -105,7 +105,7 @@ index 692c962193cf9fcc6801fc93f3220bdc673d527b..8cde30544e14f8fc2dac32966ae3c21f
metrics.addCustomChart(new Metrics.DrilldownPie("java_version", () -> { metrics.addCustomChart(new Metrics.DrilldownPie("java_version", () -> {
Map<String, Map<String, Integer>> map = new HashMap<>(); Map<String, Map<String, Integer>> map = new HashMap<>();
diff --git a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java diff --git a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java
index bf42969859545a8a520923ef1836ffa4a5cc24a0..462a6eed350fd660ddaf25d567bb6e97b77d0b2b 100644 index 9d687da5bdf398bb3f6c84cdf1249a7213d09f2e..462a6eed350fd660ddaf25d567bb6e97b77d0b2b 100644
--- a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java --- a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java
+++ b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java +++ b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java
@@ -19,8 +19,10 @@ import java.util.stream.StreamSupport; @@ -19,8 +19,10 @@ import java.util.stream.StreamSupport;
@@ -113,7 +113,7 @@ index bf42969859545a8a520923ef1836ffa4a5cc24a0..462a6eed350fd660ddaf25d567bb6e97
public class PaperVersionFetcher implements VersionFetcher { public class PaperVersionFetcher implements VersionFetcher {
private static final java.util.regex.Pattern VER_PATTERN = java.util.regex.Pattern.compile("^([0-9\\.]*)\\-.*R"); // R is an anchor, will always give '-R' at end private static final java.util.regex.Pattern VER_PATTERN = java.util.regex.Pattern.compile("^([0-9\\.]*)\\-.*R"); // R is an anchor, will always give '-R' at end
- private static final String GITHUB_BRANCH_NAME = "master"; - private static final String GITHUB_BRANCH_NAME = "master";
- private static final String DOWNLOAD_PAGE = "https://papermc.io/downloads"; - private static final String DOWNLOAD_PAGE = "https://papermc.io/downloads/paper";
+ // Purpur start + // Purpur start
+ private static final String DOWNLOAD_PAGE = "https://purpurmc.org/downloads"; + private static final String DOWNLOAD_PAGE = "https://purpurmc.org/downloads";
+ private static int distance = -2; public int distance() { return distance; } + private static int distance = -2; public int distance() { return distance; }
@@ -261,24 +261,24 @@ index 39844531b03eb8a6c70700b4ecbf0ff1a557424d..632ae75cb3bbc7a3955872d14ad0fbc2
public void removeCommand(String name) { public void removeCommand(String name) {
this.children.remove(name); this.children.remove(name);
diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java
index a8cead500186142115d4dc029c942fdfc68f7fe5..62b2a3a44929b80b813bc24a33cd1f5049fecbb2 100644 index 6e441a1a28ba72a8b1cc09fe5fca71b3c70627d4..47e77541e558e18758ae0fcc2aa4e47261e928b6 100644
--- a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java --- a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java
+++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java +++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java
@@ -28,6 +28,7 @@ public class PufferfishConfig { @@ -28,6 +28,7 @@ public class PufferfishConfig {
private static final YamlFile config = new YamlFile(); private static final YamlFile config = new YamlFile();
private static int updates = 0; private static int updates = 0;
+ public static File pufferfishFile; // Purpur + public static File pufferfishFile; // Purpur
private static ConfigurationSection convertToBukkit(org.simpleyaml.configuration.ConfigurationSection section) { private static ConfigurationSection convertToBukkit(org.simpleyaml.configuration.ConfigurationSection section) {
ConfigurationSection newSection = new MemoryConfiguration(); ConfigurationSection newSection = new MemoryConfiguration();
@@ -50,7 +51,7 @@ public class PufferfishConfig { @@ -50,7 +51,7 @@ public class PufferfishConfig {
} }
public static void load() throws IOException { public static void load() throws IOException {
- File configFile = new File("pufferfish.yml"); - File configFile = new File("pufferfish.yml");
+ File configFile = pufferfishFile; // Purpur + File configFile = pufferfishFile; // Purpur
if (configFile.exists()) { if (configFile.exists()) {
try { try {
@@ -224,7 +225,7 @@ public class PufferfishConfig { @@ -224,7 +225,7 @@ public class PufferfishConfig {
@@ -291,7 +291,7 @@ index a8cead500186142115d4dc029c942fdfc68f7fe5..62b2a3a44929b80b813bc24a33cd1f50
"This value determines how far away an entity has to be", "This value determines how far away an entity has to be",
"from the player to start being effected by DEAR."); "from the player to start being effected by DEAR.");
@@ -268,7 +269,7 @@ public class PufferfishConfig { @@ -268,7 +269,7 @@ public class PufferfishConfig {
public static boolean throttleInactiveGoalSelectorTick; public static boolean throttleInactiveGoalSelectorTick;
private static void inactiveGoalSelectorThrottle() { private static void inactiveGoalSelectorThrottle() {
- getBoolean("inactive-goal-selector-throttle", "inactive-goal-selector-disable", true, - getBoolean("inactive-goal-selector-throttle", "inactive-goal-selector-disable", true,
@@ -460,27 +460,6 @@ index f0fce4113fb07c64adbec029d177c236cbdcbae8..e94224ed280247ee69dfdff8dc960f2b
sender.sendMessage(component); sender.sendMessage(component);
} }
diff --git a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
index 01bdf134fc21220ab7ecca51f2dcd51c0b466bba..6bf14183a3fcd2b3d166752ce33240d2ff1ffa7c 100644
--- a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
+++ b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
@@ -67,14 +67,14 @@ public class GlobalConfiguration extends ConfigurationPart {
@Override
public void postProcess() {
- // Pufferfish start
+ /*// Pufferfish start // Purpur
if (enabled && !reallyEnabled) {
Bukkit.getLogger().log(Level.WARNING, "[Pufferfish] To improve performance, timings have been disabled by default");
Bukkit.getLogger().log(Level.WARNING, "[Pufferfish] You can still use timings by using /timings on, but they will not start on server startup unless you set timings.really-enabled to true in paper.yml");
Bukkit.getLogger().log(Level.WARNING, "[Pufferfish] If you would like to disable this message, either set timings.really-enabled to true or timings.enabled to false.");
}
enabled = reallyEnabled;
- // Pufferfish end
+ */// Pufferfish end // Purpur
MinecraftTimings.processConfig(this);
}
}
diff --git a/src/main/java/io/papermc/paper/console/HexFormattingConverter.java b/src/main/java/io/papermc/paper/console/HexFormattingConverter.java diff --git a/src/main/java/io/papermc/paper/console/HexFormattingConverter.java b/src/main/java/io/papermc/paper/console/HexFormattingConverter.java
index b9922b07cb105618390187d98acdf89e728e1f5a..6a1eda942aa33fc0802066416f8bc64f5f15d011 100644 index b9922b07cb105618390187d98acdf89e728e1f5a..6a1eda942aa33fc0802066416f8bc64f5f15d011 100644
--- a/src/main/java/io/papermc/paper/console/HexFormattingConverter.java --- a/src/main/java/io/papermc/paper/console/HexFormattingConverter.java
@@ -1049,7 +1028,7 @@ index 9ec6145fe04ec64bbee8ec6a837719caebdbc6f5..358d610ad020cada1bb83e393deeeaae
public ClientboundSetTimePacket(long time, long timeOfDay, boolean doDaylightCycle) { public ClientboundSetTimePacket(long time, long timeOfDay, boolean doDaylightCycle) {
this.gameTime = time; this.gameTime = time;
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 644a7f020afd26017543056fd9378868b1874fe8..46b9aed8ab46bd4bfdcf44a392ffc34e26da0f5f 100644 index a29d92b3f2658b63545b25092bb3a1fea46ca36b..beb05039926e1fb7a656dfcd0c503f82db67fc46 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java --- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -250,7 +250,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa @@ -250,7 +250,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -1927,7 +1906,7 @@ index 3ce4dbf4eed442d89d6bbc8e4c6a000172041da5..57fdef8b16e1ed9a4693356144b4685b
} }
diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
index 8438354e482b6f892c3344eceff1abd23cfa128a..30d364b385da21544a810a76f436f06879d39b14 100644 index c6f5d6756fa0e068a462d9c0ded12e0771abba37..0ae45cf5a084fd412305e8b2f5dabe608b4eb1c1 100644
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
@@ -431,16 +431,16 @@ public class ServerChunkCache extends ChunkSource { @@ -431,16 +431,16 @@ public class ServerChunkCache extends ChunkSource {
@@ -2135,7 +2114,7 @@ index d5cb594f0b17ec9dc1a19cdb99bba553e70171be..6afee2a744a3498d4a0eee35f77cde44
public ServerEntity(ServerLevel worldserver, Entity entity, int i, boolean flag, Consumer<Packet<?>> consumer, Set<ServerPlayerConnection> trackedPlayers) { public ServerEntity(ServerLevel worldserver, Entity entity, int i, boolean flag, Consumer<Packet<?>> consumer, Set<ServerPlayerConnection> trackedPlayers) {
this.trackedPlayers = trackedPlayers; this.trackedPlayers = trackedPlayers;
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index ff2862bf1f511196d1e911e2584262ed728e9a81..43bf3285729ec5cedb3de84f2b60673928b079db 100644 index dda5e77f7d9fb2340d50997c0a17bc7f5e2bb961..10d602b947edaae6b78efe9d0773021bcb1c35bf 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java --- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -212,6 +212,8 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -212,6 +212,8 @@ public class ServerLevel extends Level implements WorldGenLevel {
@@ -2617,7 +2596,7 @@ index ff2862bf1f511196d1e911e2584262ed728e9a81..43bf3285729ec5cedb3de84f2b606739
// Paper - rewrite chunk system - entity saving moved into ChunkHolder // Paper - rewrite chunk system - entity saving moved into ChunkHolder
} else if (close) { chunkproviderserver.close(false); } // Paper - rewrite chunk system } else if (close) { chunkproviderserver.close(false); } // Paper - rewrite chunk system
@@ -2614,7 +2681,7 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -2619,7 +2686,7 @@ public class ServerLevel extends Level implements WorldGenLevel {
// Spigot Start // Spigot Start
if (entity.getBukkitEntity() instanceof org.bukkit.inventory.InventoryHolder && (!(entity instanceof ServerPlayer) || entity.getRemovalReason() != Entity.RemovalReason.KILLED)) { // SPIGOT-6876: closeInventory clears death message if (entity.getBukkitEntity() instanceof org.bukkit.inventory.InventoryHolder && (!(entity instanceof ServerPlayer) || entity.getRemovalReason() != Entity.RemovalReason.KILLED)) { // SPIGOT-6876: closeInventory clears death message
// Paper start // Paper start
@@ -2627,7 +2606,7 @@ index ff2862bf1f511196d1e911e2584262ed728e9a81..43bf3285729ec5cedb3de84f2b606739
} }
// Paper end // Paper end
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index 1d4d02f26391ac55c7631817f09d05e2769b0d29..8a4be66f967dfd6b57ab542ae9b06c840647486d 100644 index 1d4d02f26391ac55c7631817f09d05e2769b0d29..be8bb3f48971e76a3637b9da0706281f352c318b 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -275,6 +275,11 @@ public class ServerPlayer extends Player { @@ -275,6 +275,11 @@ public class ServerPlayer extends Player {
@@ -2927,7 +2906,7 @@ index 1d4d02f26391ac55c7631817f09d05e2769b0d29..8a4be66f967dfd6b57ab542ae9b06c84
+ if (this.level == toLevel) { + if (this.level == toLevel) {
+ this.connection.internalTeleport(to.getX(), to.getY(), to.getZ(), to.getYaw(), to.getPitch(), java.util.EnumSet.noneOf(net.minecraft.world.entity.RelativeMovement.class)); + this.connection.internalTeleport(to.getX(), to.getY(), to.getZ(), to.getYaw(), to.getPitch(), java.util.EnumSet.noneOf(net.minecraft.world.entity.RelativeMovement.class));
+ } else { + } else {
+ this.server.getPlayerList().respawn(this, toLevel, true, to, !toLevel.paperConfig().environment.disableTeleportationSuffocationCheck); + this.server.getPlayerList().respawn(this, toLevel, true, to, !toLevel.paperConfig().environment.disableTeleportationSuffocationCheck, org.bukkit.event.player.PlayerRespawnEvent.RespawnReason.DEATH);
+ } + }
+ } + }
+ +
@@ -3026,10 +3005,10 @@ index 877498729c66de9aa6a27c9148f7494d7895615c..acd7468ee3c86d3456e96e4ec3d7e6a4
Util.logAndPauseIfInIde("Detected setBlock in a far chunk [" + i + ", " + j + "], pos: " + pos + ", status: " + this.generatingStatus + (this.currentlyGenerating == null ? "" : ", currently generating: " + (String) this.currentlyGenerating.get())); Util.logAndPauseIfInIde("Detected setBlock in a far chunk [" + i + ", " + j + "], pos: " + pos + ", status: " + this.generatingStatus + (this.currentlyGenerating == null ? "" : ", currently generating: " + (String) this.currentlyGenerating.get()));
hasSetFarWarned = true; hasSetFarWarned = true;
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index e6e1c46a01961d47a774e34e430c8eacda22d558..dd53bc05595c6ea7afff23f11e0f54e90078684f 100644 index cc7187c597337665d3cf3c3de4b53e3105b9e4c3..7254d62f3713113027eba29853e9d975eab15f7f 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -261,6 +261,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -262,6 +262,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
private long keepAliveTime = Util.getMillis(); private long keepAliveTime = Util.getMillis();
private boolean keepAlivePending; private boolean keepAlivePending;
private long keepAliveChallenge; private long keepAliveChallenge;
@@ -3037,7 +3016,7 @@ index e6e1c46a01961d47a774e34e430c8eacda22d558..dd53bc05595c6ea7afff23f11e0f54e9
// CraftBukkit start - multithreaded fields // CraftBukkit start - multithreaded fields
private final AtomicInteger chatSpamTickCount = new AtomicInteger(); private final AtomicInteger chatSpamTickCount = new AtomicInteger();
private final java.util.concurrent.atomic.AtomicInteger tabSpamLimiter = new java.util.concurrent.atomic.AtomicInteger(); // Paper - configurable tab spam limits private final java.util.concurrent.atomic.AtomicInteger tabSpamLimiter = new java.util.concurrent.atomic.AtomicInteger(); // Paper - configurable tab spam limits
@@ -337,6 +338,20 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -339,6 +340,20 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
private boolean justTeleported = false; private boolean justTeleported = false;
private boolean hasMoved; // Spigot private boolean hasMoved; // Spigot
@@ -3058,7 +3037,7 @@ index e6e1c46a01961d47a774e34e430c8eacda22d558..dd53bc05595c6ea7afff23f11e0f54e9
public CraftPlayer getCraftPlayer() { public CraftPlayer getCraftPlayer() {
return (this.player == null) ? null : (CraftPlayer) this.player.getBukkitEntity(); return (this.player == null) ? null : (CraftPlayer) this.player.getBukkitEntity();
} }
@@ -392,12 +407,27 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -394,12 +409,27 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
this.aboveGroundVehicleTickCount = 0; this.aboveGroundVehicleTickCount = 0;
} }
@@ -3087,7 +3066,7 @@ index e6e1c46a01961d47a774e34e430c8eacda22d558..dd53bc05595c6ea7afff23f11e0f54e9
if (this.keepAlivePending) { if (this.keepAlivePending) {
if (!this.processedDisconnect && elapsedTime >= KEEPALIVE_LIMIT) { // check keepalive limit, don't fire if already disconnected if (!this.processedDisconnect && elapsedTime >= KEEPALIVE_LIMIT) { // check keepalive limit, don't fire if already disconnected
ServerGamePacketListenerImpl.LOGGER.warn("{} was kicked due to keepalive timeout!", this.player.getScoreboardName()); // more info ServerGamePacketListenerImpl.LOGGER.warn("{} was kicked due to keepalive timeout!", this.player.getScoreboardName()); // more info
@@ -413,7 +443,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -415,7 +445,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
} }
// Paper end // Paper end
@@ -3096,20 +3075,20 @@ index e6e1c46a01961d47a774e34e430c8eacda22d558..dd53bc05595c6ea7afff23f11e0f54e9
// CraftBukkit start // CraftBukkit start
for (int spam; (spam = this.chatSpamTickCount.get()) > 0 && !this.chatSpamTickCount.compareAndSet(spam, spam - 1); ) ; for (int spam; (spam = this.chatSpamTickCount.get()) > 0 && !this.chatSpamTickCount.compareAndSet(spam, spam - 1); ) ;
if (tabSpamLimiter.get() > 0) tabSpamLimiter.getAndDecrement(); // Paper - split to seperate variable if (tabSpamLimiter.get() > 0) tabSpamLimiter.getAndDecrement(); // Paper - split to seperate variable
@@ -430,6 +460,12 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -432,6 +462,12 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
} }
if (this.player.getLastActionTime() > 0L && this.server.getPlayerIdleTimeout() > 0 && Util.getMillis() - this.player.getLastActionTime() > (long) (this.server.getPlayerIdleTimeout() * 1000 * 60) && !this.player.wonGame) { // Paper - Prevent AFK kick while watching end credits. if (this.player.getLastActionTime() > 0L && this.server.getPlayerIdleTimeout() > 0 && Util.getMillis() - this.player.getLastActionTime() > (long) (this.server.getPlayerIdleTimeout() * 1000 * 60) && !this.player.wonGame) { // Paper - Prevent AFK kick while watching end credits.
+ // Purpur start + // Purpur start
+ this.player.setAfk(true); + this.player.setAfk(true);
+ if (!this.player.level.purpurConfig.idleTimeoutKick || kickPermissionCache.getUnchecked(this.player.getBukkitEntity())) { + if (!this.player.level.purpurConfig.idleTimeoutKick || (!Boolean.parseBoolean(System.getenv("PURPUR_FORCE_IDLE_KICK")) && kickPermissionCache.getUnchecked(this.player.getBukkitEntity()))) {
+ return; + return;
+ } + }
+ // Purpur end + // Purpur end
this.player.resetLastActionTime(); // CraftBukkit - SPIGOT-854 this.player.resetLastActionTime(); // CraftBukkit - SPIGOT-854
this.disconnect(Component.translatable("multiplayer.disconnect.idling"), org.bukkit.event.player.PlayerKickEvent.Cause.IDLING); // Paper - kick event cause this.disconnect(Component.translatable("multiplayer.disconnect.idling"), org.bukkit.event.player.PlayerKickEvent.Cause.IDLING); // Paper - kick event cause
} }
@@ -734,6 +770,8 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -743,6 +779,8 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
this.lastYaw = to.getYaw(); this.lastYaw = to.getYaw();
this.lastPitch = to.getPitch(); this.lastPitch = to.getPitch();
@@ -3118,7 +3097,7 @@ index e6e1c46a01961d47a774e34e430c8eacda22d558..dd53bc05595c6ea7afff23f11e0f54e9
// Skip the first time we do this // Skip the first time we do this
if (true) { // Spigot - don't skip any move events if (true) { // Spigot - don't skip any move events
Location oldTo = to.clone(); Location oldTo = to.clone();
@@ -810,6 +848,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -819,6 +857,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
if (packet.getId() == this.awaitingTeleport) { if (packet.getId() == this.awaitingTeleport) {
if (this.awaitingPositionFromClient == null) { if (this.awaitingPositionFromClient == null) {
this.disconnect(Component.translatable("multiplayer.disconnect.invalid_player_movement"), org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PLAYER_MOVEMENT); // Paper - kick event cause this.disconnect(Component.translatable("multiplayer.disconnect.invalid_player_movement"), org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PLAYER_MOVEMENT); // Paper - kick event cause
@@ -3126,7 +3105,7 @@ index e6e1c46a01961d47a774e34e430c8eacda22d558..dd53bc05595c6ea7afff23f11e0f54e9
return; return;
} }
@@ -1214,10 +1253,12 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -1223,10 +1262,12 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
int maxBookPageSize = io.papermc.paper.configuration.GlobalConfiguration.get().itemValidation.bookSize.pageMax; int maxBookPageSize = io.papermc.paper.configuration.GlobalConfiguration.get().itemValidation.bookSize.pageMax;
double multiplier = Math.max(0.3D, Math.min(1D, io.papermc.paper.configuration.GlobalConfiguration.get().itemValidation.bookSize.totalMultiplier)); double multiplier = Math.max(0.3D, Math.min(1D, io.papermc.paper.configuration.GlobalConfiguration.get().itemValidation.bookSize.totalMultiplier));
long byteAllowed = maxBookPageSize; long byteAllowed = maxBookPageSize;
@@ -3139,7 +3118,7 @@ index e6e1c46a01961d47a774e34e430c8eacda22d558..dd53bc05595c6ea7afff23f11e0f54e9
server.scheduleOnMain(() -> this.disconnect("Book too large!", org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION)); // Paper - kick event cause server.scheduleOnMain(() -> this.disconnect("Book too large!", org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION)); // Paper - kick event cause
return; return;
} }
@@ -1241,6 +1282,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -1250,6 +1291,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
if (byteTotal > byteAllowed) { if (byteTotal > byteAllowed) {
ServerGamePacketListenerImpl.LOGGER.warn(this.player.getScoreboardName() + " tried to send too large of a book. Book Size: " + byteTotal + " - Allowed: "+ byteAllowed + " - Pages: " + pageList.size()); ServerGamePacketListenerImpl.LOGGER.warn(this.player.getScoreboardName() + " tried to send too large of a book. Book Size: " + byteTotal + " - Allowed: "+ byteAllowed + " - Pages: " + pageList.size());
@@ -3147,7 +3126,7 @@ index e6e1c46a01961d47a774e34e430c8eacda22d558..dd53bc05595c6ea7afff23f11e0f54e9
server.scheduleOnMain(() -> this.disconnect("Book too large!", org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION)); // Paper - kick event cause server.scheduleOnMain(() -> this.disconnect("Book too large!", org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION)); // Paper - kick event cause
return; return;
} }
@@ -1294,13 +1336,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -1303,13 +1345,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
itemstack1.setTag(nbttagcompound.copy()); itemstack1.setTag(nbttagcompound.copy());
} }
@@ -3167,7 +3146,7 @@ index e6e1c46a01961d47a774e34e430c8eacda22d558..dd53bc05595c6ea7afff23f11e0f54e9
this.updateBookPages(pages, (s) -> { this.updateBookPages(pages, (s) -> {
return Component.Serializer.toJson(Component.literal(s)); return Component.Serializer.toJson(Component.literal(s));
@@ -1312,10 +1357,13 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -1321,10 +1366,13 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
private void updateBookPages(List<FilteredText> list, UnaryOperator<String> unaryoperator, ItemStack itemstack, int slot, ItemStack handItem) { // CraftBukkit private void updateBookPages(List<FilteredText> list, UnaryOperator<String> unaryoperator, ItemStack itemstack, int slot, ItemStack handItem) { // CraftBukkit
ListTag nbttaglist = new ListTag(); ListTag nbttaglist = new ListTag();
@@ -3183,7 +3162,7 @@ index e6e1c46a01961d47a774e34e430c8eacda22d558..dd53bc05595c6ea7afff23f11e0f54e9
Objects.requireNonNull(nbttaglist); Objects.requireNonNull(nbttaglist);
stream.forEach(nbttaglist::add); stream.forEach(nbttaglist::add);
@@ -1325,11 +1373,11 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -1334,11 +1382,11 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
for (int j = list.size(); i < j; ++i) { for (int j = list.size(); i < j; ++i) {
FilteredText filteredtext = (FilteredText) list.get(i); FilteredText filteredtext = (FilteredText) list.get(i);
@@ -3197,7 +3176,7 @@ index e6e1c46a01961d47a774e34e430c8eacda22d558..dd53bc05595c6ea7afff23f11e0f54e9
} }
} }
@@ -1342,6 +1390,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -1351,6 +1399,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
this.player.getInventory().setItem(slot, CraftEventFactory.handleEditBookEvent(player, slot, handItem, itemstack)); // CraftBukkit // Paper - Don't ignore result (see other callsite for handleEditBookEvent) this.player.getInventory().setItem(slot, CraftEventFactory.handleEditBookEvent(player, slot, handItem, itemstack)); // CraftBukkit // Paper - Don't ignore result (see other callsite for handleEditBookEvent)
} }
@@ -3214,7 +3193,7 @@ index e6e1c46a01961d47a774e34e430c8eacda22d558..dd53bc05595c6ea7afff23f11e0f54e9
@Override @Override
public void handleEntityTagQuery(ServerboundEntityTagQuery packet) { public void handleEntityTagQuery(ServerboundEntityTagQuery packet) {
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.getLevel()); PacketUtils.ensureRunningOnSameThread(packet, this, this.player.getLevel());
@@ -1371,8 +1429,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -1380,8 +1438,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
@Override @Override
public void handleMovePlayer(ServerboundMovePlayerPacket packet) { public void handleMovePlayer(ServerboundMovePlayerPacket packet) {
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.getLevel()); PacketUtils.ensureRunningOnSameThread(packet, this, this.player.getLevel());
@@ -3232,7 +3211,7 @@ index e6e1c46a01961d47a774e34e430c8eacda22d558..dd53bc05595c6ea7afff23f11e0f54e9
} else { } else {
ServerLevel worldserver = this.player.getLevel(); ServerLevel worldserver = this.player.getLevel();
@@ -1538,7 +1604,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -1547,7 +1613,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
if (!this.player.isChangingDimension() && d11 > org.spigotmc.SpigotConfig.movedWronglyThreshold && !this.player.isSleeping() && !this.player.gameMode.isCreative() && this.player.gameMode.getGameModeForPlayer() != GameType.SPECTATOR) { // Spigot if (!this.player.isChangingDimension() && d11 > org.spigotmc.SpigotConfig.movedWronglyThreshold && !this.player.isSleeping() && !this.player.gameMode.isCreative() && this.player.gameMode.getGameModeForPlayer() != GameType.SPECTATOR) { // Spigot
flag2 = true; // Paper - diff on change, this should be moved wrongly flag2 = true; // Paper - diff on change, this should be moved wrongly
@@ -3241,7 +3220,7 @@ index e6e1c46a01961d47a774e34e430c8eacda22d558..dd53bc05595c6ea7afff23f11e0f54e9
} }
this.player.absMoveTo(d0, d1, d2, f, f1); this.player.absMoveTo(d0, d1, d2, f, f1);
@@ -1589,6 +1655,8 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -1598,6 +1664,8 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
this.lastYaw = to.getYaw(); this.lastYaw = to.getYaw();
this.lastPitch = to.getPitch(); this.lastPitch = to.getPitch();
@@ -3250,7 +3229,7 @@ index e6e1c46a01961d47a774e34e430c8eacda22d558..dd53bc05595c6ea7afff23f11e0f54e9
// Skip the first time we do this // Skip the first time we do this
if (from.getX() != Double.MAX_VALUE) { if (from.getX() != Double.MAX_VALUE) {
Location oldTo = to.clone(); Location oldTo = to.clone();
@@ -1628,6 +1696,13 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -1637,6 +1705,13 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
this.player.resetFallDistance(); this.player.resetFallDistance();
} }
@@ -3264,7 +3243,7 @@ index e6e1c46a01961d47a774e34e430c8eacda22d558..dd53bc05595c6ea7afff23f11e0f54e9
this.player.checkMovementStatistics(this.player.getX() - d3, this.player.getY() - d4, this.player.getZ() - d5); this.player.checkMovementStatistics(this.player.getX() - d3, this.player.getY() - d4, this.player.getZ() - d5);
this.lastGoodX = this.player.getX(); this.lastGoodX = this.player.getX();
this.lastGoodY = this.player.getY(); this.lastGoodY = this.player.getY();
@@ -1661,6 +1736,12 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -1670,6 +1745,12 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
} }
// Paper end - optimise out extra getCubes // Paper end - optimise out extra getCubes
@@ -3277,7 +3256,7 @@ index e6e1c46a01961d47a774e34e430c8eacda22d558..dd53bc05595c6ea7afff23f11e0f54e9
private boolean isPlayerCollidingWithAnythingNew(LevelReader world, AABB box) { private boolean isPlayerCollidingWithAnythingNew(LevelReader world, AABB box) {
Iterable<VoxelShape> iterable = world.getCollisions(this.player, this.player.getBoundingBox().deflate(9.999999747378752E-6D)); Iterable<VoxelShape> iterable = world.getCollisions(this.player, this.player.getBoundingBox().deflate(9.999999747378752E-6D));
VoxelShape voxelshape = Shapes.create(box.deflate(9.999999747378752E-6D)); VoxelShape voxelshape = Shapes.create(box.deflate(9.999999747378752E-6D));
@@ -2005,6 +2086,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -2014,6 +2095,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
boolean cancelled; boolean cancelled;
if (movingobjectposition == null || movingobjectposition.getType() != HitResult.Type.BLOCK) { if (movingobjectposition == null || movingobjectposition.getType() != HitResult.Type.BLOCK) {
@@ -3285,7 +3264,7 @@ index e6e1c46a01961d47a774e34e430c8eacda22d558..dd53bc05595c6ea7afff23f11e0f54e9
org.bukkit.event.player.PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(this.player, Action.RIGHT_CLICK_AIR, itemstack, enumhand); org.bukkit.event.player.PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(this.player, Action.RIGHT_CLICK_AIR, itemstack, enumhand);
cancelled = event.useItemInHand() == Event.Result.DENY; cancelled = event.useItemInHand() == Event.Result.DENY;
} else { } else {
@@ -2058,12 +2140,21 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -2067,12 +2149,21 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
@Override @Override
public void handleResourcePackResponse(ServerboundResourcePackPacket packet) { public void handleResourcePackResponse(ServerboundResourcePackPacket packet) {
PacketUtils.ensureRunningOnSameThread(packet, this, this.player.getLevel()); PacketUtils.ensureRunningOnSameThread(packet, this, this.player.getLevel());
@@ -3307,7 +3286,7 @@ index e6e1c46a01961d47a774e34e430c8eacda22d558..dd53bc05595c6ea7afff23f11e0f54e9
player.getBukkitEntity().setResourcePackStatus(packStatus); player.getBukkitEntity().setResourcePackStatus(packStatus);
this.cserver.getPluginManager().callEvent(new PlayerResourcePackStatusEvent(this.getCraftPlayer(), packStatus)); // CraftBukkit this.cserver.getPluginManager().callEvent(new PlayerResourcePackStatusEvent(this.getCraftPlayer(), packStatus)); // CraftBukkit
// Paper end // Paper end
@@ -2354,7 +2445,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -2363,7 +2454,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
do { do {
instant1 = (Instant) this.lastChatTimeStamp.get(); instant1 = (Instant) this.lastChatTimeStamp.get();
if (timestamp.isBefore(instant1)) { if (timestamp.isBefore(instant1)) {
@@ -3316,7 +3295,7 @@ index e6e1c46a01961d47a774e34e430c8eacda22d558..dd53bc05595c6ea7afff23f11e0f54e9
} }
} while (!this.lastChatTimeStamp.compareAndSet(instant1, timestamp)); } while (!this.lastChatTimeStamp.compareAndSet(instant1, timestamp));
@@ -2491,7 +2582,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -2500,7 +2591,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
} }
} }
// Paper End // Paper End
@@ -3325,7 +3304,7 @@ index e6e1c46a01961d47a774e34e430c8eacda22d558..dd53bc05595c6ea7afff23f11e0f54e9
if ( org.spigotmc.SpigotConfig.logCommands ) // Spigot if ( org.spigotmc.SpigotConfig.logCommands ) // Spigot
this.LOGGER.info(this.player.getScoreboardName() + " issued server command: " + s); this.LOGGER.info(this.player.getScoreboardName() + " issued server command: " + s);
@@ -2501,7 +2592,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -2510,7 +2601,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
this.cserver.getPluginManager().callEvent(event); this.cserver.getPluginManager().callEvent(event);
if (event.isCancelled()) { if (event.isCancelled()) {
@@ -3334,7 +3313,7 @@ index e6e1c46a01961d47a774e34e430c8eacda22d558..dd53bc05595c6ea7afff23f11e0f54e9
return; return;
} }
@@ -2514,7 +2605,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -2523,7 +2614,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
java.util.logging.Logger.getLogger(ServerGamePacketListenerImpl.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); java.util.logging.Logger.getLogger(ServerGamePacketListenerImpl.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
return; return;
} finally { } finally {
@@ -3343,7 +3322,7 @@ index e6e1c46a01961d47a774e34e430c8eacda22d558..dd53bc05595c6ea7afff23f11e0f54e9
} }
} }
// CraftBukkit end // CraftBukkit end
@@ -2780,6 +2871,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -2789,6 +2880,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
AABB axisalignedbb = entity.getBoundingBox(); AABB axisalignedbb = entity.getBoundingBox();
if (axisalignedbb.distanceToSqr(this.player.getEyePosition()) < ServerGamePacketListenerImpl.MAX_INTERACTION_DISTANCE) { if (axisalignedbb.distanceToSqr(this.player.getEyePosition()) < ServerGamePacketListenerImpl.MAX_INTERACTION_DISTANCE) {
@@ -3351,7 +3330,7 @@ index e6e1c46a01961d47a774e34e430c8eacda22d558..dd53bc05595c6ea7afff23f11e0f54e9
packet.dispatch(new ServerboundInteractPacket.Handler() { packet.dispatch(new ServerboundInteractPacket.Handler() {
private void performInteraction(InteractionHand enumhand, ServerGamePacketListenerImpl.EntityInteraction playerconnection_a, PlayerInteractEntityEvent event) { // CraftBukkit private void performInteraction(InteractionHand enumhand, ServerGamePacketListenerImpl.EntityInteraction playerconnection_a, PlayerInteractEntityEvent event) { // CraftBukkit
ItemStack itemstack = ServerGamePacketListenerImpl.this.player.getItemInHand(enumhand); ItemStack itemstack = ServerGamePacketListenerImpl.this.player.getItemInHand(enumhand);
@@ -2793,6 +2885,8 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -2802,6 +2894,8 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
ServerGamePacketListenerImpl.this.cserver.getPluginManager().callEvent(event); ServerGamePacketListenerImpl.this.cserver.getPluginManager().callEvent(event);
@@ -3360,7 +3339,7 @@ index e6e1c46a01961d47a774e34e430c8eacda22d558..dd53bc05595c6ea7afff23f11e0f54e9
// Entity in bucket - SPIGOT-4048 and SPIGOT-6859a // Entity in bucket - SPIGOT-4048 and SPIGOT-6859a
if ((entity instanceof Bucketable && entity instanceof LivingEntity && origItem != null && origItem.asItem() == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelected() == null || ServerGamePacketListenerImpl.this.player.getInventory().getSelected().getItem() != origItem)) { if ((entity instanceof Bucketable && entity instanceof LivingEntity && origItem != null && origItem.asItem() == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelected() == null || ServerGamePacketListenerImpl.this.player.getInventory().getSelected().getItem() != origItem)) {
entity.getEntityData().resendPossiblyDesyncedEntity(player); // Paper - The entire mob gets deleted, so resend it. entity.getEntityData().resendPossiblyDesyncedEntity(player); // Paper - The entire mob gets deleted, so resend it.
@@ -3344,6 +3438,12 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -3353,6 +3447,12 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
} }
} }
} }
@@ -3373,7 +3352,7 @@ index e6e1c46a01961d47a774e34e430c8eacda22d558..dd53bc05595c6ea7afff23f11e0f54e9
boolean flag1 = packet.getSlotNum() >= 1 && packet.getSlotNum() <= 45; boolean flag1 = packet.getSlotNum() >= 1 && packet.getSlotNum() <= 45;
boolean flag2 = itemstack.isEmpty() || itemstack.getDamageValue() >= 0 && itemstack.getCount() <= 64 && !itemstack.isEmpty(); boolean flag2 = itemstack.isEmpty() || itemstack.getDamageValue() >= 0 && itemstack.getCount() <= 64 && !itemstack.isEmpty();
@@ -3450,11 +3550,17 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -3459,11 +3559,17 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
for (int i = 0; i < signText.size(); ++i) { for (int i = 0; i < signText.size(); ++i) {
FilteredText filteredtext = (FilteredText) signText.get(i); FilteredText filteredtext = (FilteredText) signText.get(i);
@@ -3394,7 +3373,7 @@ index e6e1c46a01961d47a774e34e430c8eacda22d558..dd53bc05595c6ea7afff23f11e0f54e9
} }
SignChangeEvent event = new SignChangeEvent((org.bukkit.craftbukkit.block.CraftBlock) player.getWorld().getBlockAt(x, y, z), this.player.getBukkitEntity(), lines); SignChangeEvent event = new SignChangeEvent((org.bukkit.craftbukkit.block.CraftBlock) player.getWorld().getBlockAt(x, y, z), this.player.getBukkitEntity(), lines);
this.cserver.getPluginManager().callEvent(event); this.cserver.getPluginManager().callEvent(event);
@@ -3476,6 +3582,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -3485,6 +3591,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
@Override @Override
public void handleKeepAlive(ServerboundKeepAlivePacket packet) { public void handleKeepAlive(ServerboundKeepAlivePacket packet) {
@@ -3411,7 +3390,7 @@ index e6e1c46a01961d47a774e34e430c8eacda22d558..dd53bc05595c6ea7afff23f11e0f54e9
//PacketUtils.ensureRunningOnSameThread(packet, this, this.player.getLevel()); // CraftBukkit // Paper - This shouldn't be on the main thread //PacketUtils.ensureRunningOnSameThread(packet, this, this.player.getLevel()); // CraftBukkit // Paper - This shouldn't be on the main thread
if (this.keepAlivePending && packet.getId() == this.keepAliveChallenge) { if (this.keepAlivePending && packet.getId() == this.keepAliveChallenge) {
int i = (int) (Util.getMillis() - this.keepAliveTime); int i = (int) (Util.getMillis() - this.keepAliveTime);
@@ -3526,6 +3642,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -3535,6 +3651,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
private static final ResourceLocation CUSTOM_UNREGISTER = new ResourceLocation("unregister"); private static final ResourceLocation CUSTOM_UNREGISTER = new ResourceLocation("unregister");
private static final ResourceLocation MINECRAFT_BRAND = new ResourceLocation("brand"); // Paper - Brand support private static final ResourceLocation MINECRAFT_BRAND = new ResourceLocation("brand"); // Paper - Brand support
@@ -3419,7 +3398,7 @@ index e6e1c46a01961d47a774e34e430c8eacda22d558..dd53bc05595c6ea7afff23f11e0f54e9
@Override @Override
public void handleCustomPayload(ServerboundCustomPayloadPacket packet) { public void handleCustomPayload(ServerboundCustomPayloadPacket packet) {
@@ -3550,6 +3667,13 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -3559,6 +3676,13 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
ServerGamePacketListenerImpl.LOGGER.error("Couldn\'t unregister custom payload", ex); ServerGamePacketListenerImpl.LOGGER.error("Couldn\'t unregister custom payload", ex);
this.disconnect("Invalid payload UNREGISTER!", org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PAYLOAD); // Paper - kick event cause this.disconnect("Invalid payload UNREGISTER!", org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PAYLOAD); // Paper - kick event cause
} }
@@ -3488,10 +3467,10 @@ index 9ddbfcf80d9a381dace78a62880f85a4d767e0eb..7383c7d3820dce06108eaafd236a7c6c
} }
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
index c0c14766adaac855112f85a203a6163b8adfdded..1a288ebcaade0cc44c7d09478f4f2f8eee7a4269 100644 index 4d837c1530a3031a4c2a5a39d87bd013d60e14a6..33d4c1af86382cc3343d5db42283b27f69f52374 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java --- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -462,6 +462,7 @@ public abstract class PlayerList { @@ -467,6 +467,7 @@ public abstract class PlayerList {
scoreboard.addPlayerToTeam(player.getScoreboardName(), collideRuleTeam); scoreboard.addPlayerToTeam(player.getScoreboardName(), collideRuleTeam);
} }
// Paper end // Paper end
@@ -3499,7 +3478,7 @@ index c0c14766adaac855112f85a203a6163b8adfdded..1a288ebcaade0cc44c7d09478f4f2f8e
// CraftBukkit - Moved from above, added world // CraftBukkit - Moved from above, added world
PlayerList.LOGGER.info("{}[{}] logged in with entity id {} at ([{}]{}, {}, {})", player.getName().getString(), s1, player.getId(), worldserver1.serverLevelData.getLevelName(), player.getX(), player.getY(), player.getZ()); PlayerList.LOGGER.info("{}[{}] logged in with entity id {} at ([{}]{}, {}, {})", player.getName().getString(), s1, player.getId(), worldserver1.serverLevelData.getLevelName(), player.getX(), player.getY(), player.getZ());
} }
@@ -571,6 +572,8 @@ public abstract class PlayerList { @@ -576,6 +577,8 @@ public abstract class PlayerList {
} }
public net.kyori.adventure.text.Component remove(ServerPlayer entityplayer, net.kyori.adventure.text.Component leaveMessage) { public net.kyori.adventure.text.Component remove(ServerPlayer entityplayer, net.kyori.adventure.text.Component leaveMessage) {
// Paper end // Paper end
@@ -3508,7 +3487,7 @@ index c0c14766adaac855112f85a203a6163b8adfdded..1a288ebcaade0cc44c7d09478f4f2f8e
ServerLevel worldserver = entityplayer.getLevel(); ServerLevel worldserver = entityplayer.getLevel();
entityplayer.awardStat(Stats.LEAVE_GAME); entityplayer.awardStat(Stats.LEAVE_GAME);
@@ -724,7 +727,7 @@ public abstract class PlayerList { @@ -729,7 +732,7 @@ public abstract class PlayerList {
event.disallow(PlayerLoginEvent.Result.KICK_BANNED, PaperAdventure.asAdventure(ichatmutablecomponent)); // Paper - Adventure event.disallow(PlayerLoginEvent.Result.KICK_BANNED, PaperAdventure.asAdventure(ichatmutablecomponent)); // Paper - Adventure
} else { } else {
// return this.players.size() >= this.maxPlayers && !this.canBypassPlayerLimit(gameprofile) ? IChatBaseComponent.translatable("multiplayer.disconnect.server_full") : null; // return this.players.size() >= this.maxPlayers && !this.canBypassPlayerLimit(gameprofile) ? IChatBaseComponent.translatable("multiplayer.disconnect.server_full") : null;
@@ -3517,7 +3496,7 @@ index c0c14766adaac855112f85a203a6163b8adfdded..1a288ebcaade0cc44c7d09478f4f2f8e
event.disallow(PlayerLoginEvent.Result.KICK_FULL, net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(org.spigotmc.SpigotConfig.serverFullMessage)); // Spigot // Paper - Adventure event.disallow(PlayerLoginEvent.Result.KICK_FULL, net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(org.spigotmc.SpigotConfig.serverFullMessage)); // Spigot // Paper - Adventure
} }
} }
@@ -962,6 +965,8 @@ public abstract class PlayerList { @@ -967,6 +970,8 @@ public abstract class PlayerList {
} }
// Paper end // Paper end
@@ -3526,7 +3505,7 @@ index c0c14766adaac855112f85a203a6163b8adfdded..1a288ebcaade0cc44c7d09478f4f2f8e
// CraftBukkit end // CraftBukkit end
return entityplayer1; return entityplayer1;
} }
@@ -1022,6 +1027,20 @@ public abstract class PlayerList { @@ -1027,6 +1032,20 @@ public abstract class PlayerList {
} }
// CraftBukkit end // CraftBukkit end
@@ -3547,7 +3526,7 @@ index c0c14766adaac855112f85a203a6163b8adfdded..1a288ebcaade0cc44c7d09478f4f2f8e
public void broadcastAll(Packet<?> packet, ResourceKey<Level> dimension) { public void broadcastAll(Packet<?> packet, ResourceKey<Level> dimension) {
Iterator iterator = this.players.iterator(); Iterator iterator = this.players.iterator();
@@ -1125,6 +1144,7 @@ public abstract class PlayerList { @@ -1130,6 +1149,7 @@ public abstract class PlayerList {
} else { } else {
b0 = (byte) (24 + permissionLevel); b0 = (byte) (24 + permissionLevel);
} }
@@ -3555,7 +3534,7 @@ index c0c14766adaac855112f85a203a6163b8adfdded..1a288ebcaade0cc44c7d09478f4f2f8e
player.connection.send(new ClientboundEntityEventPacket(player, b0)); player.connection.send(new ClientboundEntityEventPacket(player, b0));
} }
@@ -1133,6 +1153,27 @@ public abstract class PlayerList { @@ -1138,6 +1158,27 @@ public abstract class PlayerList {
player.getBukkitEntity().recalculatePermissions(); // CraftBukkit player.getBukkitEntity().recalculatePermissions(); // CraftBukkit
this.server.getCommands().sendCommands(player); this.server.getCommands().sendCommands(player);
} // Paper } // Paper
@@ -3583,7 +3562,7 @@ index c0c14766adaac855112f85a203a6163b8adfdded..1a288ebcaade0cc44c7d09478f4f2f8e
} }
public boolean isWhiteListed(GameProfile profile) { public boolean isWhiteListed(GameProfile profile) {
@@ -1194,7 +1235,7 @@ public abstract class PlayerList { @@ -1199,7 +1240,7 @@ public abstract class PlayerList {
public void saveAll(int interval) { public void saveAll(int interval) {
io.papermc.paper.util.MCUtil.ensureMain("Save Players" , () -> { // Paper - Ensure main io.papermc.paper.util.MCUtil.ensureMain("Save Players" , () -> { // Paper - Ensure main
@@ -3592,7 +3571,7 @@ index c0c14766adaac855112f85a203a6163b8adfdded..1a288ebcaade0cc44c7d09478f4f2f8e
int numSaved = 0; int numSaved = 0;
long now = MinecraftServer.currentTick; long now = MinecraftServer.currentTick;
for (int i = 0; i < this.players.size(); ++i) { for (int i = 0; i < this.players.size(); ++i) {
@@ -1205,7 +1246,7 @@ public abstract class PlayerList { @@ -1210,7 +1251,7 @@ public abstract class PlayerList {
} }
// Paper end // Paper end
} }
@@ -4049,7 +4028,7 @@ index 14fab63346d56c72cd7534a04760efd10eef4295..745e792482f61c571e2efbd4200dd1bd
@Override @Override
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index 548133e399b5abc4aa83045af87c135a3455b722..3c10c719f6172161a2dcc6592a0a1492e9b3d7c1 100644 index e25be74ef0a88541884ad62a4b84219400d5a142..b2ee73a2ef6042694ca84c27d592e5fb13b4a0fe 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java --- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -155,7 +155,7 @@ import org.bukkit.plugin.PluginManager; @@ -155,7 +155,7 @@ import org.bukkit.plugin.PluginManager;
@@ -4615,7 +4594,7 @@ index c1e9b40a4a0f9cdc650caa88b5ea132e06ee2496..6f723171fa71d74b351b5cf0cd167bb6
@Override @Override
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index 791f672b30f2a4d3b329e2ce0f4fb9c2ca627b01..8d7c33e16f9eaec2120c5aad75172ff656d1bd17 100644 index f3d96caa83ef4a8083b78e3265282d4723e37d28..b67660cda74a4754d1701e746aca99bde868c150 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -216,9 +216,9 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -216,9 +216,9 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -10164,7 +10143,7 @@ index e2935115c8d41af1d623da4f0d4f73de80386129..ae663a9b32c281f745592afa614f55c0
} }
} }
diff --git a/src/main/java/net/minecraft/world/entity/animal/sniffer/Sniffer.java b/src/main/java/net/minecraft/world/entity/animal/sniffer/Sniffer.java diff --git a/src/main/java/net/minecraft/world/entity/animal/sniffer/Sniffer.java b/src/main/java/net/minecraft/world/entity/animal/sniffer/Sniffer.java
index 89f761871a84f8ab95f2a16aba8340bb8726da30..6e7c0e95b27c41bf12da1beb3458830ce27c6029 100644 index f6e2348b280eaefc0eb05bf5d962593caa654357..adae992ade60e0fce7ca0cc10192720025a574fe 100644
--- a/src/main/java/net/minecraft/world/entity/animal/sniffer/Sniffer.java --- a/src/main/java/net/minecraft/world/entity/animal/sniffer/Sniffer.java
+++ b/src/main/java/net/minecraft/world/entity/animal/sniffer/Sniffer.java +++ b/src/main/java/net/minecraft/world/entity/animal/sniffer/Sniffer.java
@@ -81,6 +81,33 @@ public class Sniffer extends Animal { @@ -81,6 +81,33 @@ public class Sniffer extends Animal {
@@ -10210,7 +10189,7 @@ index 89f761871a84f8ab95f2a16aba8340bb8726da30..6e7c0e95b27c41bf12da1beb3458830c
super.jumpFromGround(); super.jumpFromGround();
double d0 = this.moveControl.getSpeedModifier(); double d0 = this.moveControl.getSpeedModifier();
@@ -442,11 +469,11 @@ public class Sniffer extends Animal { @@ -443,11 +470,11 @@ public class Sniffer extends Animal {
@Override @Override
protected void customServerAiStep() { protected void customServerAiStep() {
@@ -10945,7 +10924,7 @@ index ad0df80d1adb1d945f40e1b5f7732bb36b2ca2ff..90cab3586d3e3e290475fe8d59a69d89
} }
diff --git a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java diff --git a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java
index ce2c3c146ef64400e00084bd2245d2b87a67fbc2..b0dd274fde1ce23a984de9492d7605ffcca4a86b 100644 index 536856300da929c101f50da5827677bada5feb50..98844ccc6200ba060022525b3a00bcb1de1d0a7a 100644
--- a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java --- a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java
+++ b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java
@@ -131,7 +131,7 @@ public class FallingBlockEntity extends Entity { @@ -131,7 +131,7 @@ public class FallingBlockEntity extends Entity {
@@ -12141,10 +12120,10 @@ index 41004c28edb748e12c4f868aa07b4672891197c1..4e5b9f772ba587b4e108add3758dffa6
} }
} }
diff --git a/src/main/java/net/minecraft/world/entity/monster/Guardian.java b/src/main/java/net/minecraft/world/entity/monster/Guardian.java diff --git a/src/main/java/net/minecraft/world/entity/monster/Guardian.java b/src/main/java/net/minecraft/world/entity/monster/Guardian.java
index 6e0f4f15e49afb989874468b2a459178aef552f5..73e973e10f767d0efe0e0410d97c6892c4ea35d8 100644 index cf7e9c1db229f9e2cc05ce3046540db1d4fc4ec4..f10304b38e904528907cb36c342acf9d49935edd 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Guardian.java --- a/src/main/java/net/minecraft/world/entity/monster/Guardian.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Guardian.java +++ b/src/main/java/net/minecraft/world/entity/monster/Guardian.java
@@ -67,14 +67,50 @@ public class Guardian extends Monster { @@ -69,15 +69,51 @@ public class Guardian extends Monster {
this.xpReward = 10; this.xpReward = 10;
this.setPathfindingMalus(BlockPathTypes.WATER, 0.0F); this.setPathfindingMalus(BlockPathTypes.WATER, 0.0F);
this.moveControl = new Guardian.GuardianMoveControl(this); this.moveControl = new Guardian.GuardianMoveControl(this);
@@ -12189,21 +12168,22 @@ index 6e0f4f15e49afb989874468b2a459178aef552f5..73e973e10f767d0efe0e0410d97c6892
+ +
@Override @Override
protected void registerGoals() { protected void registerGoals() {
MoveTowardsRestrictionGoal moveTowardsRestrictionGoal = new MoveTowardsRestrictionGoal(this, 1.0D); MoveTowardsRestrictionGoal pathfindergoalmovetowardsrestriction = new MoveTowardsRestrictionGoal(this, 1.0D);
this.randomStrollGoal = new RandomStrollGoal(this, 1.0D, 80); this.randomStrollGoal = new RandomStrollGoal(this, 1.0D, 80);
+ this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur + this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur
this.goalSelector.addGoal(4, new Guardian.GuardianAttackGoal(this)); this.goalSelector.addGoal(4, this.guardianAttackGoal = new Guardian.GuardianAttackGoal(this)); // CraftBukkit - assign field
this.goalSelector.addGoal(5, moveTowardsRestrictionGoal); this.goalSelector.addGoal(5, pathfindergoalmovetowardsrestriction);
this.goalSelector.addGoal(7, this.randomStrollGoal); this.goalSelector.addGoal(7, this.randomStrollGoal);
@@ -83,6 +119,7 @@ public class Guardian extends Monster { @@ -86,6 +122,7 @@ public class Guardian extends Monster {
this.goalSelector.addGoal(9, new RandomLookAroundGoal(this)); this.goalSelector.addGoal(9, new RandomLookAroundGoal(this));
this.randomStrollGoal.setFlags(EnumSet.of(Goal.Flag.MOVE, Goal.Flag.LOOK)); this.randomStrollGoal.setFlags(EnumSet.of(Goal.Flag.MOVE, Goal.Flag.LOOK));
moveTowardsRestrictionGoal.setFlags(EnumSet.of(Goal.Flag.MOVE, Goal.Flag.LOOK)); pathfindergoalmovetowardsrestriction.setFlags(EnumSet.of(Goal.Flag.MOVE, Goal.Flag.LOOK));
+ this.targetSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur + this.targetSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur
this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, LivingEntity.class, 10, true, false, new Guardian.GuardianAttackSelector(this))); this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, LivingEntity.class, 10, true, false, new Guardian.GuardianAttackSelector(this)));
} }
@@ -341,7 +378,7 @@ public class Guardian extends Monster { @@ -351,7 +388,7 @@ public class Guardian extends Monster {
@Override @Override
public void travel(Vec3 movementInput) { public void travel(Vec3 movementInput) {
if (this.isControlledByLocalInstance() && this.isInWater()) { if (this.isControlledByLocalInstance() && this.isInWater()) {
@@ -12212,16 +12192,16 @@ index 6e0f4f15e49afb989874468b2a459178aef552f5..73e973e10f767d0efe0e0410d97c6892
this.move(MoverType.SELF, this.getDeltaMovement()); this.move(MoverType.SELF, this.getDeltaMovement());
this.setDeltaMovement(this.getDeltaMovement().scale(0.9D)); this.setDeltaMovement(this.getDeltaMovement().scale(0.9D));
if (!this.isMoving() && this.getTarget() == null) { if (!this.isMoving() && this.getTarget() == null) {
@@ -448,7 +485,7 @@ public class Guardian extends Monster { @@ -363,7 +400,7 @@ public class Guardian extends Monster {
}
} }
- static class GuardianMoveControl extends MoveControl { - private static class GuardianMoveControl extends MoveControl {
+ static class GuardianMoveControl extends org.purpurmc.purpur.controller.WaterMoveControllerWASD { // Purpur + private static class GuardianMoveControl extends org.purpurmc.purpur.controller.WaterMoveControllerWASD { // Purpur
private final Guardian guardian; private final Guardian guardian;
public GuardianMoveControl(Guardian guardian) { @@ -372,8 +409,17 @@ public class Guardian extends Monster {
@@ -456,8 +493,17 @@ public class Guardian extends Monster {
this.guardian = guardian; this.guardian = guardian;
} }
@@ -12238,17 +12218,17 @@ index 6e0f4f15e49afb989874468b2a459178aef552f5..73e973e10f767d0efe0e0410d97c6892
+ @Override + @Override
+ public void vanillaTick() { // Purpur + public void vanillaTick() { // Purpur
if (this.operation == MoveControl.Operation.MOVE_TO && !this.guardian.getNavigation().isDone()) { if (this.operation == MoveControl.Operation.MOVE_TO && !this.guardian.getNavigation().isDone()) {
Vec3 vec3 = new Vec3(this.wantedX - this.guardian.getX(), this.wantedY - this.guardian.getY(), this.wantedZ - this.guardian.getZ()); Vec3 vec3d = new Vec3(this.wantedX - this.guardian.getX(), this.wantedY - this.guardian.getY(), this.wantedZ - this.guardian.getZ());
double d = vec3.length(); double d0 = vec3d.length();
@@ -467,7 +513,7 @@ public class Guardian extends Monster { @@ -384,7 +430,7 @@ public class Guardian extends Monster {
float h = (float)(Mth.atan2(vec3.z, vec3.x) * (double)(180F / (float)Math.PI)) - 90.0F;
this.guardian.setYRot(this.rotlerp(this.guardian.getYRot(), h, 90.0F)); this.guardian.setYRot(this.rotlerp(this.guardian.getYRot(), f, 90.0F));
this.guardian.yBodyRot = this.guardian.getYRot(); this.guardian.yBodyRot = this.guardian.getYRot();
- float i = (float)(this.speedModifier * this.guardian.getAttributeValue(Attributes.MOVEMENT_SPEED)); - float f1 = (float) (this.speedModifier * this.guardian.getAttributeValue(Attributes.MOVEMENT_SPEED));
+ float i = (float)(this.getSpeedModifier() * this.guardian.getAttributeValue(Attributes.MOVEMENT_SPEED)); // Purpur + float f1 = (float) (this.getSpeedModifier() * this.guardian.getAttributeValue(Attributes.MOVEMENT_SPEED)); // Purpur
float j = Mth.lerp(0.125F, this.guardian.getSpeed(), i); float f2 = Mth.lerp(0.125F, this.guardian.getSpeed(), f1);
this.guardian.setSpeed(j);
double k = Math.sin((double)(this.guardian.tickCount + this.guardian.getId()) * 0.5D) * 0.05D; this.guardian.setSpeed(f2);
diff --git a/src/main/java/net/minecraft/world/entity/monster/Husk.java b/src/main/java/net/minecraft/world/entity/monster/Husk.java diff --git a/src/main/java/net/minecraft/world/entity/monster/Husk.java b/src/main/java/net/minecraft/world/entity/monster/Husk.java
index 4996347c6dde85a2dc9aa37fdf495160093fac64..a7b690c0730d0b10133f24d7ce2d9f6a0e4a7c04 100644 index 4996347c6dde85a2dc9aa37fdf495160093fac64..a7b690c0730d0b10133f24d7ce2d9f6a0e4a7c04 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Husk.java --- a/src/main/java/net/minecraft/world/entity/monster/Husk.java
@@ -16348,7 +16328,7 @@ index 9c7d0b9cc2fa98d5785c914c0183f7d4b5b1c1ea..89a4ab17ca8d2aa1f52b041c610d7de1
return InteractionResult.PASS; return InteractionResult.PASS;
} }
diff --git a/src/main/java/net/minecraft/world/item/BlockItem.java b/src/main/java/net/minecraft/world/item/BlockItem.java diff --git a/src/main/java/net/minecraft/world/item/BlockItem.java b/src/main/java/net/minecraft/world/item/BlockItem.java
index b0204af850ee182773ad458208cccd946ad148d5..193ae502acb622da3a42d49dc0c69da9d22f6ede 100644 index ebee8de2ed831755b6fd154f6cc77ac993839bb9..9060a844cd3bb3b62171872d84516b9195b9b677 100644
--- a/src/main/java/net/minecraft/world/item/BlockItem.java --- a/src/main/java/net/minecraft/world/item/BlockItem.java
+++ b/src/main/java/net/minecraft/world/item/BlockItem.java +++ b/src/main/java/net/minecraft/world/item/BlockItem.java
@@ -153,7 +153,24 @@ public class BlockItem extends Item { @@ -153,7 +153,24 @@ public class BlockItem extends Item {
@@ -16660,10 +16640,10 @@ index 180aec596110309aade13d2080f8824d152b07cb..c4aec1e5135a79837918b692e75a7b55
return InteractionResult.PASS; return InteractionResult.PASS;
} }
diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java
index d690b8d0c1da1f56b226376df8c76c34375e3c73..0c0a0639cd9c85d4332a6fa85e3143510f3c7448 100644 index a7533d18fe6148d7bfd3106b9cdcb6fa3347cf7c..45d864679816cb39420e079d37220a967e9d71d1 100644
--- a/src/main/java/net/minecraft/world/item/ItemStack.java --- a/src/main/java/net/minecraft/world/item/ItemStack.java
+++ b/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java
@@ -109,6 +109,7 @@ import org.bukkit.event.world.StructureGrowEvent; @@ -111,6 +111,7 @@ import org.bukkit.event.world.StructureGrowEvent;
public final class ItemStack { public final class ItemStack {
@@ -16671,7 +16651,7 @@ index d690b8d0c1da1f56b226376df8c76c34375e3c73..0c0a0639cd9c85d4332a6fa85e314351
public static final Codec<ItemStack> CODEC = RecordCodecBuilder.create((instance) -> { public static final Codec<ItemStack> CODEC = RecordCodecBuilder.create((instance) -> {
return instance.group(BuiltInRegistries.ITEM.byNameCodec().fieldOf("id").forGetter((itemstack) -> { return instance.group(BuiltInRegistries.ITEM.byNameCodec().fieldOf("id").forGetter((itemstack) -> {
return itemstack.item; return itemstack.item;
@@ -415,6 +416,7 @@ public final class ItemStack { @@ -417,6 +418,7 @@ public final class ItemStack {
world.preventPoiUpdated = true; // CraftBukkit - SPIGOT-5710 world.preventPoiUpdated = true; // CraftBukkit - SPIGOT-5710
for (BlockState blockstate : blocks) { for (BlockState blockstate : blocks) {
blockstate.update(true, false); blockstate.update(true, false);
@@ -16679,7 +16659,7 @@ index d690b8d0c1da1f56b226376df8c76c34375e3c73..0c0a0639cd9c85d4332a6fa85e314351
} }
world.preventPoiUpdated = false; world.preventPoiUpdated = false;
@@ -444,6 +446,7 @@ public final class ItemStack { @@ -446,6 +448,7 @@ public final class ItemStack {
if (!(block.getBlock() instanceof BaseEntityBlock)) { // Containers get placed automatically if (!(block.getBlock() instanceof BaseEntityBlock)) { // Containers get placed automatically
block.getBlock().onPlace(block, world, newblockposition, oldBlock, true, itemactioncontext); // Paper - pass itemactioncontext block.getBlock().onPlace(block, world, newblockposition, oldBlock, true, itemactioncontext); // Paper - pass itemactioncontext
} }
@@ -16687,7 +16667,7 @@ index d690b8d0c1da1f56b226376df8c76c34375e3c73..0c0a0639cd9c85d4332a6fa85e314351
world.notifyAndUpdatePhysics(newblockposition, null, oldBlock, block, world.getBlockState(newblockposition), updateFlag, 512); // send null chunk as chunk.k() returns false by this point world.notifyAndUpdatePhysics(newblockposition, null, oldBlock, block, world.getBlockState(newblockposition), updateFlag, 512); // send null chunk as chunk.k() returns false by this point
} }
@@ -559,6 +562,16 @@ public final class ItemStack { @@ -566,6 +569,16 @@ public final class ItemStack {
return this.isDamageableItem() && this.getDamageValue() > 0; return this.isDamageableItem() && this.getDamageValue() > 0;
} }
@@ -16704,7 +16684,7 @@ index d690b8d0c1da1f56b226376df8c76c34375e3c73..0c0a0639cd9c85d4332a6fa85e314351
public int getDamageValue() { public int getDamageValue() {
return this.tag == null ? 0 : this.tag.getInt("Damage"); return this.tag == null ? 0 : this.tag.getInt("Damage");
} }
@@ -578,7 +591,7 @@ public final class ItemStack { @@ -585,7 +598,7 @@ public final class ItemStack {
int j; int j;
if (amount > 0) { if (amount > 0) {
@@ -16713,7 +16693,7 @@ index d690b8d0c1da1f56b226376df8c76c34375e3c73..0c0a0639cd9c85d4332a6fa85e314351
int k = 0; int k = 0;
for (int l = 0; j > 0 && l < amount; ++l) { for (int l = 0; j > 0 && l < amount; ++l) {
@@ -633,6 +646,12 @@ public final class ItemStack { @@ -640,6 +653,12 @@ public final class ItemStack {
if (this.hurt(amount, entity.getRandom(), entity /*instanceof ServerPlayer ? (ServerPlayer) entity : null*/)) { // Paper - pass LivingEntity for EntityItemDamageEvent if (this.hurt(amount, entity.getRandom(), entity /*instanceof ServerPlayer ? (ServerPlayer) entity : null*/)) { // Paper - pass LivingEntity for EntityItemDamageEvent
breakCallback.accept(entity); breakCallback.accept(entity);
Item item = this.getItem(); Item item = this.getItem();
@@ -16726,7 +16706,7 @@ index d690b8d0c1da1f56b226376df8c76c34375e3c73..0c0a0639cd9c85d4332a6fa85e314351
// CraftBukkit start - Check for item breaking // CraftBukkit start - Check for item breaking
if (this.count == 1 && entity instanceof net.minecraft.world.entity.player.Player) { if (this.count == 1 && entity instanceof net.minecraft.world.entity.player.Player) {
org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerItemBreakEvent((net.minecraft.world.entity.player.Player) entity, this); org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerItemBreakEvent((net.minecraft.world.entity.player.Player) entity, this);
@@ -1165,7 +1184,7 @@ public final class ItemStack { @@ -1172,7 +1191,7 @@ public final class ItemStack {
ListTag nbttaglist = this.tag.getList("Enchantments", 10); ListTag nbttaglist = this.tag.getList("Enchantments", 10);
@@ -16735,7 +16715,7 @@ index d690b8d0c1da1f56b226376df8c76c34375e3c73..0c0a0639cd9c85d4332a6fa85e314351
processEnchantOrder(this.tag); // Paper processEnchantOrder(this.tag); // Paper
} }
@@ -1173,6 +1192,12 @@ public final class ItemStack { @@ -1180,6 +1199,12 @@ public final class ItemStack {
return this.tag != null && this.tag.contains("Enchantments", 9) ? !this.tag.getList("Enchantments", 10).isEmpty() : false; return this.tag != null && this.tag.contains("Enchantments", 9) ? !this.tag.getList("Enchantments", 10).isEmpty() : false;
} }
@@ -17514,7 +17494,7 @@ index 3d2b34c5a7c9b00c1164b4f89c2cbff81fc460eb..b5505e926e5cdb447de68e8eb8e46c97
return true; return true;
} else { } else {
diff --git a/src/main/java/net/minecraft/world/level/block/BedBlock.java b/src/main/java/net/minecraft/world/level/block/BedBlock.java diff --git a/src/main/java/net/minecraft/world/level/block/BedBlock.java b/src/main/java/net/minecraft/world/level/block/BedBlock.java
index 3aa79a441ac4bd6b4d87d19bdb3011455210fd41..4de8e77ef7574a0febf9c89258e4aeb26f4af6fc 100644 index d1d5363ab1742add8ff45507a303106f4d65f52f..19d31064eb271ee02115a75cde383796c899e7f7 100644
--- a/src/main/java/net/minecraft/world/level/block/BedBlock.java --- a/src/main/java/net/minecraft/world/level/block/BedBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/BedBlock.java +++ b/src/main/java/net/minecraft/world/level/block/BedBlock.java
@@ -97,7 +97,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock @@ -97,7 +97,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock
@@ -17525,8 +17505,8 @@ index 3aa79a441ac4bd6b4d87d19bdb3011455210fd41..4de8e77ef7574a0febf9c89258e4aeb2
+ if (world.purpurConfig.bedExplode) world.explode((Entity) null, world.damageSources().badRespawnPointExplosion(vec3d, explodedBlockState), (ExplosionDamageCalculator) null, vec3d, (float) world.purpurConfig.bedExplosionPower, world.purpurConfig.bedExplosionFire, world.purpurConfig.bedExplosionEffect); // Purpur + if (world.purpurConfig.bedExplode) world.explode((Entity) null, world.damageSources().badRespawnPointExplosion(vec3d, explodedBlockState), (ExplosionDamageCalculator) null, vec3d, (float) world.purpurConfig.bedExplosionPower, world.purpurConfig.bedExplosionFire, world.purpurConfig.bedExplosionEffect); // Purpur
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
} else if ((Boolean) state.getValue(BedBlock.OCCUPIED)) { } else if ((Boolean) state.getValue(BedBlock.OCCUPIED)) {
if (!this.kickVillagerOutOfBed(world, pos)) { if (!BedBlock.canSetSpawn(world)) return this.explodeBed(state, world, pos); // Paper - check explode first
@@ -149,7 +149,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock @@ -150,7 +150,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock
Vec3 vec3d = blockposition.getCenter(); Vec3 vec3d = blockposition.getCenter();
@@ -19567,19 +19547,19 @@ index 505503a3f59d4b747649275c6f6faa504b7c7b64..bee42ce7c1cb0f5ebd4890c02bc9c5dd
protected final SoundType soundType; protected final SoundType soundType;
protected final float friction; protected final float friction;
diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
index e7e2b0fc88c9320449bcd0e0929269c2508886e4..b367184f415b6e20c2fc02a1e8853003349a0a1b 100644 index 13594b96cc8f451723c3598ef302ccee8e01bcac..e9d92bf484fb0d2fcb66a7c424eced109bfa031d 100644
--- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
+++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java
@@ -130,7 +130,7 @@ public class LevelChunk extends ChunkAccess { @@ -129,7 +129,7 @@ public class LevelChunk extends ChunkAccess {
this.blockTicks = blockTickScheduler;
this.fluidTicks = fluidTickScheduler; this.fluidTicks = fluidTickScheduler;
// CraftBukkit start
this.bukkitChunk = new org.bukkit.craftbukkit.CraftChunk(this);
- this.lightningTick = this.level.getThreadUnsafeRandom().nextInt(100000) << 1; // Pufferfish - initialize lightning tick - this.lightningTick = this.level.getThreadUnsafeRandom().nextInt(100000) << 1; // Pufferfish - initialize lightning tick
+ this.lightningTick = java.util.concurrent.ThreadLocalRandom.current().nextInt(100000) << 1; // Pufferfish - initialize lightning tick // Purpur - any random will do + this.lightningTick = java.util.concurrent.ThreadLocalRandom.current().nextInt(100000) << 1; // Pufferfish - initialize lightning tick // Purpur - any random will do
} }
public org.bukkit.Chunk bukkitChunk; // CraftBukkit start
@@ -930,7 +930,7 @@ public class LevelChunk extends ChunkAccess { @@ -925,7 +925,7 @@ public class LevelChunk extends ChunkAccess {
this.chunkHolder.getEntityChunk().callEntitiesLoadEvent(); // Paper - rewrite chunk system this.chunkHolder.getEntityChunk().callEntitiesLoadEvent(); // Paper - rewrite chunk system
if (this.needsDecoration) { if (this.needsDecoration) {
@@ -19588,16 +19568,16 @@ index e7e2b0fc88c9320449bcd0e0929269c2508886e4..b367184f415b6e20c2fc02a1e8853003
this.needsDecoration = false; this.needsDecoration = false;
java.util.Random random = new java.util.Random(); java.util.Random random = new java.util.Random();
random.setSeed(this.level.getSeed()); random.setSeed(this.level.getSeed());
@@ -950,7 +950,7 @@ public class LevelChunk extends ChunkAccess { @@ -945,7 +945,7 @@ public class LevelChunk extends ChunkAccess {
} }
} }
server.getPluginManager().callEvent(new org.bukkit.event.world.ChunkPopulateEvent(this.bukkitChunk)); server.getPluginManager().callEvent(new org.bukkit.event.world.ChunkPopulateEvent(bukkitChunk));
- } // Paper - } // Paper
+ //} // Paper // Purpur + //} // Paper // Purpur
} }
} }
} }
@@ -1319,10 +1319,10 @@ public class LevelChunk extends ChunkAccess { @@ -1315,10 +1315,10 @@ public class LevelChunk extends ChunkAccess {
if (LevelChunk.this.isTicking(blockposition)) { if (LevelChunk.this.isTicking(blockposition)) {
try { try {
@@ -19611,7 +19591,7 @@ index e7e2b0fc88c9320449bcd0e0929269c2508886e4..b367184f415b6e20c2fc02a1e8853003
BlockState iblockdata = LevelChunk.this.getBlockState(blockposition); BlockState iblockdata = LevelChunk.this.getBlockState(blockposition);
if (this.blockEntity.getType().isValid(iblockdata)) { if (this.blockEntity.getType().isValid(iblockdata)) {
@@ -1333,7 +1333,7 @@ public class LevelChunk extends ChunkAccess { @@ -1329,7 +1329,7 @@ public class LevelChunk extends ChunkAccess {
LevelChunk.LOGGER.warn("Block entity {} @ {} state {} invalid for ticking:", new Object[]{LogUtils.defer(this::getType), LogUtils.defer(this::getPos), iblockdata}); LevelChunk.LOGGER.warn("Block entity {} @ {} state {} invalid for ticking:", new Object[]{LogUtils.defer(this::getType), LogUtils.defer(this::getPos), iblockdata});
} }
@@ -19620,7 +19600,7 @@ index e7e2b0fc88c9320449bcd0e0929269c2508886e4..b367184f415b6e20c2fc02a1e8853003
} catch (Throwable throwable) { } catch (Throwable throwable) {
if (throwable instanceof ThreadDeath) throw throwable; // Paper if (throwable instanceof ThreadDeath) throw throwable; // Paper
// Paper start - Prevent tile entity and entity crashes // Paper start - Prevent tile entity and entity crashes
@@ -1344,7 +1344,7 @@ public class LevelChunk extends ChunkAccess { @@ -1340,7 +1340,7 @@ public class LevelChunk extends ChunkAccess {
// Paper end // Paper end
// Spigot start // Spigot start
} finally { } finally {
@@ -20109,7 +20089,7 @@ index 714afc98b5150907b45a00060be4e41582333204..312a6d90c0a09570aef24c205dc2ff27
+ // Purpur end - OfflinePlayer API + // Purpur end - OfflinePlayer API
} }
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index b2d94582037c091bd6a04451bf62b3f9c4923d19..bc1a2df0a7ddaf030917e4723994464d77e55d02 100644 index 58eaa1142bb0568bef439bba76903309914d3ae1..b4d174e3603a45f768add973796d603f4ed8f976 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -256,7 +256,7 @@ import javax.annotation.Nullable; // Paper @@ -256,7 +256,7 @@ import javax.annotation.Nullable; // Paper
@@ -20267,10 +20247,10 @@ index b2d94582037c091bd6a04451bf62b3f9c4923d19..bc1a2df0a7ddaf030917e4723994464d
+ // Purpur end + // Purpur end
} }
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
index 5e9055fdf411029ea2fed91acd6b981f79156418..c6a3b59c65466f9f2b16cefe0059a6e5dd84044c 100644 index 86ffc869b57410fd4993c0fd0ae000da2e2c070c..b5415f0c65db728f4a935b87b54fa14b68d31bc4 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
@@ -2253,6 +2253,48 @@ public class CraftWorld extends CraftRegionAccessor implements World { @@ -2263,6 +2263,48 @@ public class CraftWorld extends CraftRegionAccessor implements World {
return (this.getHandle().dragonFight() == null) ? null : new CraftDragonBattle(this.getHandle().dragonFight()); return (this.getHandle().dragonFight() == null) ? null : new CraftDragonBattle(this.getHandle().dragonFight());
} }
@@ -20320,7 +20300,7 @@ index 5e9055fdf411029ea2fed91acd6b981f79156418..c6a3b59c65466f9f2b16cefe0059a6e5
public PersistentDataContainer getPersistentDataContainer() { public PersistentDataContainer getPersistentDataContainer() {
return this.persistentDataContainer; return this.persistentDataContainer;
diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
index 4966a1e3dd35357a8ea6a7d2944c84c9c3e9058e..ab05f4151e6ec7404a85ddb3a141ed39d9ed86d7 100644 index 755c223ab2a046285eb9916b6195093714f4c5ba..d2e20a03bf031011b64d0ae15c09ab7105e0cffa 100644
--- a/src/main/java/org/bukkit/craftbukkit/Main.java --- a/src/main/java/org/bukkit/craftbukkit/Main.java
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java
@@ -173,6 +173,20 @@ public class Main { @@ -173,6 +173,20 @@ public class Main {
@@ -20579,7 +20559,7 @@ index a925b5c490e7129b27370aa57b5fad1cf05530c6..ea15690da167ec5e653da6f5afb55b33
+ // Purpur end + // Purpur end
} }
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
index aec588b41f19b2147a4e7267bafa417fbcf7abc0..cf7ba8724ab68f6955b5ebfa1ba46c4397da32b3 100644 index d43859f8aa7beed82dd3a146bb1086982cd0cda7..7ef5980f7321662aa7034a74c2f6926846425db9 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
@@ -444,7 +444,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { @@ -444,7 +444,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
@@ -20591,16 +20571,16 @@ index aec588b41f19b2147a4e7267bafa417fbcf7abc0..cf7ba8724ab68f6955b5ebfa1ba46c43
} }
// Paper end // Paper end
@@ -455,7 +455,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { @@ -456,7 +456,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
@Override @Override
public boolean addPotionEffect(PotionEffect effect, boolean force) { public boolean addPotionEffect(PotionEffect effect, boolean force) {
org.spigotmc.AsyncCatcher.catchOp("effect add"); // Paper
- this.getHandle().addEffect(new MobEffectInstance(MobEffect.byId(effect.getType().getId()), effect.getDuration(), effect.getAmplifier(), effect.isAmbient(), effect.hasParticles(), effect.hasIcon()), EntityPotionEffectEvent.Cause.PLUGIN); // Paper - Don't ignore icon - this.getHandle().addEffect(new MobEffectInstance(MobEffect.byId(effect.getType().getId()), effect.getDuration(), effect.getAmplifier(), effect.isAmbient(), effect.hasParticles(), effect.hasIcon()), EntityPotionEffectEvent.Cause.PLUGIN); // Paper - Don't ignore icon
+ this.getHandle().addEffect(new MobEffectInstance(MobEffect.byId(effect.getType().getId()), effect.getDuration(), effect.getAmplifier(), effect.isAmbient(), effect.hasParticles(), effect.hasIcon(), effect.getKey()), EntityPotionEffectEvent.Cause.PLUGIN); // Purpur - add key // Paper - Don't ignore icon + this.getHandle().addEffect(new MobEffectInstance(MobEffect.byId(effect.getType().getId()), effect.getDuration(), effect.getAmplifier(), effect.isAmbient(), effect.hasParticles(), effect.hasIcon(), effect.getKey()), EntityPotionEffectEvent.Cause.PLUGIN); // Purpur - add key // Paper - Don't ignore icon
return true; return true;
} }
@@ -476,7 +476,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { @@ -477,7 +477,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
@Override @Override
public PotionEffect getPotionEffect(PotionEffectType type) { public PotionEffect getPotionEffect(PotionEffectType type) {
MobEffectInstance handle = this.getHandle().getEffect(MobEffect.byId(type.getId())); MobEffectInstance handle = this.getHandle().getEffect(MobEffect.byId(type.getId()));
@@ -20609,7 +20589,7 @@ index aec588b41f19b2147a4e7267bafa417fbcf7abc0..cf7ba8724ab68f6955b5ebfa1ba46c43
} }
@Override @Override
@@ -488,7 +488,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { @@ -489,7 +489,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
public Collection<PotionEffect> getActivePotionEffects() { public Collection<PotionEffect> getActivePotionEffects() {
List<PotionEffect> effects = new ArrayList<PotionEffect>(); List<PotionEffect> effects = new ArrayList<PotionEffect>();
for (MobEffectInstance handle : this.getHandle().activeEffects.values()) { for (MobEffectInstance handle : this.getHandle().activeEffects.values()) {
@@ -20618,7 +20598,7 @@ index aec588b41f19b2147a4e7267bafa417fbcf7abc0..cf7ba8724ab68f6955b5ebfa1ba46c43
} }
return effects; return effects;
} }
@@ -883,7 +883,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { @@ -884,7 +884,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
return EntityCategory.WATER; return EntityCategory.WATER;
} }
@@ -20627,7 +20607,7 @@ index aec588b41f19b2147a4e7267bafa417fbcf7abc0..cf7ba8724ab68f6955b5ebfa1ba46c43
} }
@Override @Override
@@ -1070,4 +1070,32 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { @@ -1071,4 +1071,32 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
getHandle().knockback(strength, directionX, directionZ); getHandle().knockback(strength, directionX, directionZ);
}; };
// Paper end // Paper end
@@ -20682,10 +20662,10 @@ index 4d7a2c4c1001aefe9fcd4be8dbcb414f721bfff9..2c7716a9d65ebda209a144b82c2126b6
+ // Purpur end + // Purpur end
} }
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
index 0ae1fce0c1a2e3bfbbab756a088fc76545e263fa..f81b320ef330d03b68cf8b4af04b7c991ce9636b 100644 index c8d8ab8e5d8d0a986ff023ce1e195667472d7798..1ddb96be5644a8af51c2e3677e31773a61033aca 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
@@ -525,10 +525,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @@ -529,10 +529,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
@Override @Override
public void setPlayerListName(String name) { public void setPlayerListName(String name) {
@@ -20702,7 +20682,7 @@ index 0ae1fce0c1a2e3bfbbab756a088fc76545e263fa..f81b320ef330d03b68cf8b4af04b7c99
for (ServerPlayer player : (List<ServerPlayer>) server.getHandle().players) { for (ServerPlayer player : (List<ServerPlayer>) server.getHandle().players) {
if (player.getBukkitEntity().canSee(this)) { if (player.getBukkitEntity().canSee(this)) {
player.connection.send(new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.UPDATE_DISPLAY_NAME, this.getHandle())); player.connection.send(new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.UPDATE_DISPLAY_NAME, this.getHandle()));
@@ -1336,6 +1341,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @@ -1359,6 +1364,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
} }
if (entity.isVehicle() && !ignorePassengers) { // Paper - Teleport API if (entity.isVehicle() && !ignorePassengers) { // Paper - Teleport API
@@ -20713,7 +20693,7 @@ index 0ae1fce0c1a2e3bfbbab756a088fc76545e263fa..f81b320ef330d03b68cf8b4af04b7c99
return false; return false;
} }
@@ -2366,6 +2375,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @@ -2396,6 +2405,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
return this.getHandle().getAbilities().walkingSpeed * 2f; return this.getHandle().getAbilities().walkingSpeed * 2f;
} }
@@ -20742,7 +20722,7 @@ index 0ae1fce0c1a2e3bfbbab756a088fc76545e263fa..f81b320ef330d03b68cf8b4af04b7c99
private void validateSpeed(float value) { private void validateSpeed(float value) {
if (value < 0) { if (value < 0) {
if (value < -1f) { if (value < -1f) {
@@ -3158,4 +3189,97 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @@ -3188,4 +3219,97 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
return this.spigot; return this.spigot;
} }
// Spigot end // Spigot end
@@ -20922,10 +20902,10 @@ index e43fd3e59fd8c74828ae65965fade27f56beef65..b2f133c8baabba1cffa6e92ea0f85453
+ // Purpur end + // Purpur end
} }
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
index cdb8ec04f4a19ec3dbedbd5b17a7d1f3afaa238e..16261aa799c34d7134f4c1489e2ab0a5db7992f0 100644 index 819c9c020f4d5a1373f68850134960d24b8fc308..a60948f4085232082f205ad4f0f627a28342bd36 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
@@ -544,6 +544,15 @@ public class CraftEventFactory { @@ -561,6 +561,15 @@ public class CraftEventFactory {
// Paper end // Paper end
craftServer.getPluginManager().callEvent(event); craftServer.getPluginManager().callEvent(event);
@@ -20941,7 +20921,7 @@ index cdb8ec04f4a19ec3dbedbd5b17a7d1f3afaa238e..16261aa799c34d7134f4c1489e2ab0a5
return event; return event;
} }
@@ -981,6 +990,7 @@ public class CraftEventFactory { @@ -998,6 +1007,7 @@ public class CraftEventFactory {
damageCause = DamageCause.ENTITY_EXPLOSION; damageCause = DamageCause.ENTITY_EXPLOSION;
} }
event = new EntityDamageByEntityEvent(damager.getBukkitEntity(), entity.getBukkitEntity(), damageCause, modifiers, modifierFunctions, source.isCritical()); // Paper - add critical damage API event = new EntityDamageByEntityEvent(damager.getBukkitEntity(), entity.getBukkitEntity(), damageCause, modifiers, modifierFunctions, source.isCritical()); // Paper - add critical damage API
@@ -20949,7 +20929,7 @@ index cdb8ec04f4a19ec3dbedbd5b17a7d1f3afaa238e..16261aa799c34d7134f4c1489e2ab0a5
} }
event.setCancelled(cancelled); event.setCancelled(cancelled);
@@ -1090,6 +1100,7 @@ public class CraftEventFactory { @@ -1107,6 +1117,7 @@ public class CraftEventFactory {
} else { } else {
entity.lastDamageCancelled = true; // SPIGOT-5339, SPIGOT-6252, SPIGOT-6777: Keep track if the event was canceled entity.lastDamageCancelled = true; // SPIGOT-5339, SPIGOT-6252, SPIGOT-6777: Keep track if the event was canceled
} }
@@ -20957,7 +20937,7 @@ index cdb8ec04f4a19ec3dbedbd5b17a7d1f3afaa238e..16261aa799c34d7134f4c1489e2ab0a5
return event; return event;
} }
@@ -1149,6 +1160,7 @@ public class CraftEventFactory { @@ -1166,6 +1177,7 @@ public class CraftEventFactory {
EntityDamageEvent event; EntityDamageEvent event;
if (damager != null) { if (damager != null) {
event = new EntityDamageByEntityEvent(damager.getBukkitEntity(), damagee.getBukkitEntity(), cause, modifiers, modifierFunctions, critical); // Paper - add critical damage API event = new EntityDamageByEntityEvent(damager.getBukkitEntity(), damagee.getBukkitEntity(), cause, modifiers, modifierFunctions, critical); // Paper - add critical damage API
@@ -21922,7 +21902,7 @@ index 0000000000000000000000000000000000000000..0bcbe1f07ff8e552d2abd6e432af5710
+} +}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..d3f2002759ac4788feca1e62c90c2e64596eb2f2 index 0000000000000000000000000000000000000000..9159e790533f06582a521f11103e6cbcbc72978b
--- /dev/null --- /dev/null
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -0,0 +1,3189 @@ @@ -0,0 +1,3189 @@
@@ -22374,7 +22354,7 @@ index 0000000000000000000000000000000000000000..d3f2002759ac4788feca1e62c90c2e64
+ set("gameplay-mechanics.player.idle-timeout.mods-target", null); + set("gameplay-mechanics.player.idle-timeout.mods-target", null);
+ set("gameplay-mechanics.player.idle-timeout.mobs-target", oldVal); + set("gameplay-mechanics.player.idle-timeout.mobs-target", oldVal);
+ } + }
+ idleTimeoutKick = getBoolean("gameplay-mechanics.player.idle-timeout.kick-if-idle", idleTimeoutKick); + idleTimeoutKick = System.getenv("PURPUR_FORCE_IDLE_KICK") == null ? getBoolean("gameplay-mechanics.player.idle-timeout.kick-if-idle", idleTimeoutKick) : Boolean.parseBoolean(System.getenv("PURPUR_FORCE_IDLE_KICK"));
+ idleTimeoutTickNearbyEntities = getBoolean("gameplay-mechanics.player.idle-timeout.tick-nearby-entities", idleTimeoutTickNearbyEntities); + idleTimeoutTickNearbyEntities = getBoolean("gameplay-mechanics.player.idle-timeout.tick-nearby-entities", idleTimeoutTickNearbyEntities);
+ idleTimeoutCountAsSleeping = getBoolean("gameplay-mechanics.player.idle-timeout.count-as-sleeping", idleTimeoutCountAsSleeping); + idleTimeoutCountAsSleeping = getBoolean("gameplay-mechanics.player.idle-timeout.count-as-sleeping", idleTimeoutCountAsSleeping);
+ idleTimeoutUpdateTabList = getBoolean("gameplay-mechanics.player.idle-timeout.update-tab-list", idleTimeoutUpdateTabList); + idleTimeoutUpdateTabList = getBoolean("gameplay-mechanics.player.idle-timeout.update-tab-list", idleTimeoutUpdateTabList);
@@ -27157,7 +27137,7 @@ index 0000000000000000000000000000000000000000..b7586f494528f30eb0da82420d3bcf5b
+ } + }
+} +}
diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java
index 63d3fcc45be732a4cd2dc8b5347d860fd6577bdd..665625c69b93a2568b1f2218a0db39da435d8c99 100644 index 07050c78a2eb6ce0c699101b38961b111d631a41..ee64ddb0da23ea1e54d0295324aca5b46a438111 100644
--- a/src/main/java/org/spigotmc/ActivationRange.java --- a/src/main/java/org/spigotmc/ActivationRange.java
+++ b/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java
@@ -15,6 +15,7 @@ import net.minecraft.world.entity.ambient.AmbientCreature; @@ -15,6 +15,7 @@ import net.minecraft.world.entity.ambient.AmbientCreature;
@@ -27185,7 +27165,7 @@ index 63d3fcc45be732a4cd2dc8b5347d860fd6577bdd..665625c69b93a2568b1f2218a0db39da
// Paper start // Paper start
int worldHeight = world.getHeight(); int worldHeight = world.getHeight();
ActivationRange.maxBB = player.getBoundingBox().inflate( maxRange, worldHeight, maxRange ); ActivationRange.maxBB = player.getBoundingBox().inflate( maxRange, worldHeight, maxRange );
@@ -242,7 +244,7 @@ public class ActivationRange @@ -243,7 +245,7 @@ public class ActivationRange
} }
// Paper end // Paper end
} }
@@ -27194,7 +27174,7 @@ index 63d3fcc45be732a4cd2dc8b5347d860fd6577bdd..665625c69b93a2568b1f2218a0db39da
} }
/** /**
@@ -395,6 +397,7 @@ public class ActivationRange @@ -396,6 +398,7 @@ public class ActivationRange
*/ */
public static boolean checkIfActive(Entity entity) public static boolean checkIfActive(Entity entity)
{ {
@@ -27203,18 +27183,18 @@ index 63d3fcc45be732a4cd2dc8b5347d860fd6577bdd..665625c69b93a2568b1f2218a0db39da
if ( entity instanceof FireworkRocketEntity ) { if ( entity instanceof FireworkRocketEntity ) {
return true; return true;
diff --git a/src/main/java/org/spigotmc/TicksPerSecondCommand.java b/src/main/java/org/spigotmc/TicksPerSecondCommand.java diff --git a/src/main/java/org/spigotmc/TicksPerSecondCommand.java b/src/main/java/org/spigotmc/TicksPerSecondCommand.java
index 9bede6a26c08ede063c7a38f1149c811df14b258..088239d17aa8178cf8af09ec23cfd4deaaf2bbb6 100644 index bf970bf3356a914459c2d6db93537ce2d32c7e18..08221c7256f41ca511a4a61ffb2b979325aebee9 100644
--- a/src/main/java/org/spigotmc/TicksPerSecondCommand.java --- a/src/main/java/org/spigotmc/TicksPerSecondCommand.java
+++ b/src/main/java/org/spigotmc/TicksPerSecondCommand.java +++ b/src/main/java/org/spigotmc/TicksPerSecondCommand.java
@@ -31,7 +31,7 @@ public class TicksPerSecondCommand extends Command @@ -39,7 +39,7 @@ public class TicksPerSecondCommand extends Command
for ( int i = 0; i < tps.length; i++) {
tpsAvg[i] = TicksPerSecondCommand.format( tps[i] );
} }
- sender.sendMessage(ChatColor.GOLD + "TPS from last 1m, 5m, 15m: " + org.apache.commons.lang.StringUtils.join(tpsAvg, ", "));
+ sender.sendMessage(ChatColor.GOLD + "TPS from last 5s, 1m, 5m, 15m: " + org.apache.commons.lang.StringUtils.join(tpsAvg, ", ")); // Purpur net.kyori.adventure.text.TextComponent.Builder builder = net.kyori.adventure.text.Component.text();
- builder.append(net.kyori.adventure.text.Component.text("TPS from last 1m, 5m, 15m: ", net.kyori.adventure.text.format.NamedTextColor.GOLD));
+ builder.append(net.kyori.adventure.text.Component.text("TPS from last 5s, 1m, 5m, 15m: ", net.kyori.adventure.text.format.NamedTextColor.GOLD));
builder.append(net.kyori.adventure.text.Component.join(net.kyori.adventure.text.JoinConfiguration.commas(true), tpsAvg));
sender.sendMessage(builder.asComponent());
if (args.length > 0 && args[0].equals("mem") && sender.hasPermission("bukkit.command.tpsmemory")) { if (args.length > 0 && args[0].equals("mem") && sender.hasPermission("bukkit.command.tpsmemory")) {
sender.sendMessage(ChatColor.GOLD + "Current Memory Usage: " + ChatColor.GREEN + ((Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / (1024 * 1024)) + "/" + (Runtime.getRuntime().totalMemory() / (1024 * 1024)) + " mb (Max: " + (Runtime.getRuntime().maxMemory() / (1024 * 1024)) + " mb)");
if (!hasShownMemoryWarning) {
diff --git a/src/main/java/org/spigotmc/WatchdogThread.java b/src/main/java/org/spigotmc/WatchdogThread.java diff --git a/src/main/java/org/spigotmc/WatchdogThread.java b/src/main/java/org/spigotmc/WatchdogThread.java
index e9fa7faaa4451e36b3908cbcbbe0baf213abde96..a810bfd3b8d6bd4d8f2ef8797e4281ae4fe8a67f 100644 index e9fa7faaa4451e36b3908cbcbbe0baf213abde96..a810bfd3b8d6bd4d8f2ef8797e4281ae4fe8a67f 100644
--- a/src/main/java/org/spigotmc/WatchdogThread.java --- a/src/main/java/org/spigotmc/WatchdogThread.java

View File

@@ -175,7 +175,7 @@ index c6fa6bcd66d61359124a8426b919493c6ec43f06..e0eaa847526431ac58d00f18f0fca6b1
/* CraftBukkit start - Replace everything /* CraftBukkit start - Replace everything
OptionParser optionparser = new OptionParser(); OptionParser optionparser = new OptionParser();
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 46b9aed8ab46bd4bfdcf44a392ffc34e26da0f5f..62ccafc3df9e2d25dbe7e2ad9322f306f8df8061 100644 index beb05039926e1fb7a656dfcd0c503f82db67fc46..615c456de68a20d0e95b30e124a2bdf46039408f 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java --- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -930,7 +930,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa @@ -930,7 +930,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -245,7 +245,7 @@ index bd502ca721de0cab438d995efa00ad0554c0d2fe..d72f61f545c3929825e628607b85e0d2
private static final int DEFAULT_SIZE_THRESHOLD = 1024 * 8; private static final int DEFAULT_SIZE_THRESHOLD = 1024 * 8;
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index bc1a2df0a7ddaf030917e4723994464d77e55d02..e59532dda47d0f9635b5393cb4ef0484fd6bb9ae 100644 index b4d174e3603a45f768add973796d603f4ed8f976..57cbf7ca104aa7779bc1e705b60e71dcbfb680b8 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -256,7 +256,7 @@ import javax.annotation.Nullable; // Paper @@ -256,7 +256,7 @@ import javax.annotation.Nullable; // Paper
@@ -258,10 +258,10 @@ index bc1a2df0a7ddaf030917e4723994464d77e55d02..e59532dda47d0f9635b5393cb4ef0484
private final String bukkitVersion = Versioning.getBukkitVersion(); private final String bukkitVersion = Versioning.getBukkitVersion();
private final Logger logger = Logger.getLogger("Minecraft"); private final Logger logger = Logger.getLogger("Minecraft");
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
index cf7ba8724ab68f6955b5ebfa1ba46c4397da32b3..54cbe906619a30b5f7b5dbb344eebf3452e1b200 100644 index 7ef5980f7321662aa7034a74c2f6926846425db9..00200576bad5a92c65df762239dbec9a6e9a239b 100644
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
@@ -883,7 +883,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { @@ -884,7 +884,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
return EntityCategory.WATER; return EntityCategory.WATER;
} }

View File

@@ -7,38 +7,43 @@ Original: YouHaveTrouble/minecraft-optimization, AkiraDevelopment/SimplyMC
Copyright (C) 2023 YouHaveTrouble, AkiraDevelopment Copyright (C) 2023 YouHaveTrouble, AkiraDevelopment
diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java
index 62b2a3a44929b80b813bc24a33cd1f5049fecbb2..cea33db916f9fd828f3cb131a4b2ebdd16866649 100644 index 47e77541e558e18758ae0fcc2aa4e47261e928b6..dd3a29c49392910a38be14a638c6c9b6e825d772 100644
--- a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java --- a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java
+++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java +++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java
@@ -211,7 +211,7 @@ public class PufferfishConfig { @@ -211,8 +211,8 @@ public class PufferfishConfig {
public static int maxProjectileLoadsPerTick; public static int maxProjectileLoadsPerTick;
public static int maxProjectileLoadsPerProjectile; public static int maxProjectileLoadsPerProjectile;
private static void projectileLoading() { private static void projectileLoading() {
- maxProjectileLoadsPerTick = getInt("projectile.max-loads-per-tick", 10, "Controls how many chunks are allowed", "to be sync loaded by projectiles in a tick."); - maxProjectileLoadsPerTick = getInt("projectile.max-loads-per-tick", 10, "Controls how many chunks are allowed", "to be sync loaded by projectiles in a tick.");
+ maxProjectileLoadsPerTick = getInt("projectile.max-loads-per-tick", Boolean.getBoolean("Plazma.disableConfigOptimization") ? 10 : 8, "Controls how many chunks are allowed", "to be sync loaded by projectiles in a tick."); // Plazma - maxProjectileLoadsPerProjectile = getInt("projectile.max-loads-per-projectile", 10, "Controls how many chunks a projectile", "can load in its lifetime before it gets", "automatically removed.");
maxProjectileLoadsPerProjectile = getInt("projectile.max-loads-per-projectile", 10, "Controls how many chunks a projectile", "can load in its lifetime before it gets", "automatically removed."); + maxProjectileLoadsPerTick = getInt("projectile.max-loads-per-tick", Boolean.getBoolean("Plazma.disableConfigOptimization") ? 10 : 8, "Controls how many chunks are allowed", "to be sync loaded by projectiles in a tick."); // Plazma
+ maxProjectileLoadsPerProjectile = getInt("projectile.max-loads-per-projectile", 10, "Controls how many chunks a projectile", "can load in its lifetime before it gets", "automatically removed.");
setComment("projectile", "Optimizes projectile settings"); setComment("projectile", "Optimizes projectile settings");
@@ -225,7 +225,7 @@ public class PufferfishConfig { }
@@ -225,16 +225,16 @@ public class PufferfishConfig {
public static int activationDistanceMod; public static int activationDistanceMod;
private static void dynamicActivationOfBrains() throws IOException { private static void dynamicActivationOfBrains() throws IOException {
- dearEnabled = getBoolean("dab.enabled", "activation-range.enabled", false); // Purpur - dearEnabled = getBoolean("dab.enabled", "activation-range.enabled", false); // Purpur
+ dearEnabled = getBoolean("dab.enabled", "activation-range.enabled", !Boolean.getBoolean("Plazma.disableConfigOptimization")); // Purpur // Plazma - startDistance = getInt("dab.start-distance", "activation-range.start-distance", 12,
startDistance = getInt("dab.start-distance", "activation-range.start-distance", 12, + dearEnabled = getBoolean("dab.enabled", "activation-range.enabled", !Boolean.getBoolean("Plazma.disableConfigOptimization")); // Purpur // Plazma
+ startDistance = getInt("dab.start-distance", "activation-range.start-distance", 12,
"This value determines how far away an entity has to be", "This value determines how far away an entity has to be",
"from the player to start being effected by DEAR."); "from the player to start being effected by DEAR.");
@@ -233,7 +233,7 @@ public class PufferfishConfig { startDistanceSquared = startDistance * startDistance;
maximumActivationPrio = getInt("dab.max-tick-freq", "activation-range.max-tick-freq", 20, maximumActivationPrio = getInt("dab.max-tick-freq", "activation-range.max-tick-freq", 20,
"This value defines how often in ticks, the furthest entity", "This value defines how often in ticks, the furthest entity",
"will get their pathfinders and behaviors ticked. 20 = 1s"); "will get their pathfinders and behaviors ticked. 20 = 1s");
- activationDistanceMod = getInt("dab.activation-dist-mod", "activation-range.activation-dist-mod", 8, - activationDistanceMod = getInt("dab.activation-dist-mod", "activation-range.activation-dist-mod", 8,
+ activationDistanceMod = getInt("dab.activation-dist-mod", "activation-range.activation-dist-mod", Boolean.getBoolean("Plazma.disableConfigOptimization") ? 8 : 7, // Plazma - "This value defines how much distance modifies an entity's",
"This value defines how much distance modifies an entity's", + activationDistanceMod = getInt("dab.activation-dist-mod", "activation-range.activation-dist-mod", Boolean.getBoolean("Plazma.disableConfigOptimization") ? 8 : 7, // Plazma
+ "This value defines how much distance modifies an entity's",
"tick frequency. freq = (distanceToPlayer^2) / (2^value)", "tick frequency. freq = (distanceToPlayer^2) / (2^value)",
"If you want further away entities to tick less often, use 7.", "If you want further away entities to tick less often, use 7.",
@@ -269,16 +269,16 @@ public class PufferfishConfig { "If you want further away entities to tick more often, try 9.");
@@ -269,7 +269,7 @@ public class PufferfishConfig {
public static boolean throttleInactiveGoalSelectorTick; public static boolean throttleInactiveGoalSelectorTick;
private static void inactiveGoalSelectorThrottle() { private static void inactiveGoalSelectorThrottle() {
- getBoolean("inactive-goal-selector-throttle", "inactive-goal-selector-disable", false, // Purpur - getBoolean("inactive-goal-selector-throttle", "inactive-goal-selector-disable", false, // Purpur
@@ -46,22 +51,11 @@ index 62b2a3a44929b80b813bc24a33cd1f5049fecbb2..cea33db916f9fd828f3cb131a4b2ebdd
"Throttles the AI goal selector in entity inactive ticks.", "Throttles the AI goal selector in entity inactive ticks.",
"This can improve performance by a few percent, but has minor gameplay implications."); "This can improve performance by a few percent, but has minor gameplay implications.");
} }
- public static boolean disableMethodProfiler;
+ public static boolean disableMethodProfiler = true; // Plazma
public static boolean disableOutOfOrderChat;
private static void miscSettings() {
- disableMethodProfiler = getBoolean("misc.disable-method-profiler", true);
+ //disableMethodProfiler = getBoolean("misc.disable-method-profiler", true); // Plazma
disableOutOfOrderChat = getBoolean("misc.disable-out-of-order-chat", false);
setComment("misc", "Settings for things that don't belong elsewhere");
}
diff --git a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java diff --git a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
index 6bf14183a3fcd2b3d166752ce33240d2ff1ffa7c..4398c1b992f53248bb13180d4a69e55c0e742387 100644 index 8d442c5a498ecf288a0cc0c54889c6e2fda849ce..205ce3456a3f6d28cc2c7cbc131ec0f63a461527 100644
--- a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java --- a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
+++ b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java +++ b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
@@ -114,7 +114,7 @@ public class GlobalConfiguration extends ConfigurationPart { @@ -103,7 +103,7 @@ public class GlobalConfiguration extends ConfigurationPart {
public class Watchdog extends ConfigurationPart { public class Watchdog extends ConfigurationPart {
public int earlyWarningEvery = 5000; public int earlyWarningEvery = 5000;
@@ -71,7 +65,7 @@ index 6bf14183a3fcd2b3d166752ce33240d2ff1ffa7c..4398c1b992f53248bb13180d4a69e55c
public SpamLimiter spamLimiter; public SpamLimiter spamLimiter;
diff --git a/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java b/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java diff --git a/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java b/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java
index 51cf0014c4229fc8671804d885b6381996810130..9b7fbdb170c9d936b874f7462b1eeff7a65d5262 100644 index ee430563b99e48cd722c2897e4729936457d3017..5a1be0fe6cd96dbb1c786b27ad3ac943ce13ed3c 100644
--- a/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java --- a/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java
+++ b/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java +++ b/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java
@@ -84,15 +84,15 @@ public class WorldConfiguration extends ConfigurationPart { @@ -84,15 +84,15 @@ public class WorldConfiguration extends ConfigurationPart {
@@ -79,7 +73,7 @@ index 51cf0014c4229fc8671804d885b6381996810130..9b7fbdb170c9d936b874f7462b1eeff7
public class AntiXray extends ConfigurationPart { public class AntiXray extends ConfigurationPart {
public boolean enabled = false; public boolean enabled = false;
- public EngineMode engineMode = EngineMode.HIDE; - public EngineMode engineMode = EngineMode.HIDE;
+ public EngineMode engineMode = Boolean.getBoolean("Plazma.disableConfigOptimization") ? EngineMode.HIDE : EngineMode.OBFUSCATE; // Plazma - Optimize Default Configurations + public EngineMode engineMode = Boolean.getBoolean("Plazma.disableConfigOptimization") ? EngineMode.HIDE : EngineMode.OBFUSCATE_LAYER; // Plazma - Optimize Default Configurations
public int maxBlockHeight = 64; public int maxBlockHeight = 64;
public int updateRadius = 2; public int updateRadius = 2;
public boolean lavaObscures = false; public boolean lavaObscures = false;
@@ -95,7 +89,7 @@ index 51cf0014c4229fc8671804d885b6381996810130..9b7fbdb170c9d936b874f7462b1eeff7
} }
} }
@@ -133,7 +133,7 @@ public class WorldConfiguration extends ConfigurationPart { @@ -139,7 +139,7 @@ public class WorldConfiguration extends ConfigurationPart {
@MergeMap @MergeMap
public Reference2IntMap<MobCategory> spawnLimits = Util.make(new Reference2IntOpenHashMap<>(NaturalSpawner.SPAWNING_CATEGORIES.length), map -> Arrays.stream(NaturalSpawner.SPAWNING_CATEGORIES).forEach(mobCategory -> map.put(mobCategory, -1))); public Reference2IntMap<MobCategory> spawnLimits = Util.make(new Reference2IntOpenHashMap<>(NaturalSpawner.SPAWNING_CATEGORIES.length), map -> Arrays.stream(NaturalSpawner.SPAWNING_CATEGORIES).forEach(mobCategory -> map.put(mobCategory, -1)));
@MergeMap @MergeMap
@@ -104,7 +98,7 @@ index 51cf0014c4229fc8671804d885b6381996810130..9b7fbdb170c9d936b874f7462b1eeff7
@ConfigSerializable @ConfigSerializable
public record DespawnRange(@Required int soft, @Required int hard) { public record DespawnRange(@Required int soft, @Required int hard) {
@@ -317,7 +317,7 @@ public class WorldConfiguration extends ConfigurationPart { @@ -323,7 +323,7 @@ public class WorldConfiguration extends ConfigurationPart {
public class Environment extends ConfigurationPart { public class Environment extends ConfigurationPart {
public boolean disableThunder = false; public boolean disableThunder = false;
public boolean disableIceAndSnow = false; public boolean disableIceAndSnow = false;
@@ -113,7 +107,7 @@ index 51cf0014c4229fc8671804d885b6381996810130..9b7fbdb170c9d936b874f7462b1eeff7
public boolean disableExplosionKnockback = false; public boolean disableExplosionKnockback = false;
public boolean generateFlatBedrock = false; public boolean generateFlatBedrock = false;
public FrostedIce frostedIce; public FrostedIce frostedIce;
@@ -397,9 +397,9 @@ public class WorldConfiguration extends ConfigurationPart { @@ -403,9 +403,9 @@ public class WorldConfiguration extends ConfigurationPart {
public class Collisions extends ConfigurationPart { public class Collisions extends ConfigurationPart {
public boolean onlyPlayersCollide = false; public boolean onlyPlayersCollide = false;
public boolean allowVehicleCollisions = true; public boolean allowVehicleCollisions = true;
@@ -125,7 +119,7 @@ index 51cf0014c4229fc8671804d885b6381996810130..9b7fbdb170c9d936b874f7462b1eeff7
public boolean allowPlayerCrammingDamage = false; public boolean allowPlayerCrammingDamage = false;
} }
@@ -407,18 +407,40 @@ public class WorldConfiguration extends ConfigurationPart { @@ -413,18 +413,40 @@ public class WorldConfiguration extends ConfigurationPart {
public class Chunks extends ConfigurationPart { public class Chunks extends ConfigurationPart {
public AutosavePeriod autoSaveInterval = AutosavePeriod.def(); public AutosavePeriod autoSaveInterval = AutosavePeriod.def();
@@ -175,7 +169,7 @@ index 51cf0014c4229fc8671804d885b6381996810130..9b7fbdb170c9d936b874f7462b1eeff7
}); });
} }
@@ -432,11 +454,30 @@ public class WorldConfiguration extends ConfigurationPart { @@ -438,9 +460,9 @@ public class WorldConfiguration extends ConfigurationPart {
public TickRates tickRates; public TickRates tickRates;
public class TickRates extends ConfigurationPart { public class TickRates extends ConfigurationPart {
@@ -183,34 +177,11 @@ index 51cf0014c4229fc8671804d885b6381996810130..9b7fbdb170c9d936b874f7462b1eeff7
+ public int grassSpread = Boolean.getBoolean("Plazma.disableConfigOptimization") ? 1 : 4; // Plazma - Optimize Default Configurations + public int grassSpread = Boolean.getBoolean("Plazma.disableConfigOptimization") ? 1 : 4; // Plazma - Optimize Default Configurations
public int containerUpdate = 1; public int containerUpdate = 1;
- public int mobSpawner = 1; - public int mobSpawner = 1;
- public Table<EntityType<?>, String, Integer> sensor = Util.make(HashBasedTable.create(), table -> table.put(EntityType.VILLAGER, "secondarypoisensor", 40));
- public Table<EntityType<?>, String, Integer> behavior = Util.make(HashBasedTable.create(), table -> table.put(EntityType.VILLAGER, "validatenearbypoi", -1));
+ public int mobSpawner = Boolean.getBoolean("Plazma.disableConfigOptimization") ? 1 : 2; // Plazma - Optimize Default Configurations + public int mobSpawner = Boolean.getBoolean("Plazma.disableConfigOptimization") ? 1 : 2; // Plazma - Optimize Default Configurations
+ // Plazma start - Optimize Default Configurations public Table<EntityType<?>, String, Integer> sensor = Util.make(HashBasedTable.create(), table -> table.put(EntityType.VILLAGER, "secondarypoisensor", 40));
+ public Table<EntityType<?>, String, Integer> sensor = Util.make(HashBasedTable.create(), table -> { public Table<EntityType<?>, String, Integer> behavior = Util.make(HashBasedTable.create(), table -> table.put(EntityType.VILLAGER, "validatenearbypoi", -1));
+ if (!Boolean.getBoolean("Plazma.disableConfigOptimization")) {
+ table.put(EntityType.VILLAGER, "secondarypoisensor", 80);
+ table.put(EntityType.VILLAGER, "nearestbedsensor", 80);
+ table.put(EntityType.VILLAGER, "villagerbabiessensor", 40);
+ table.put(EntityType.VILLAGER, "playersensor", 40);
+ table.put(EntityType.VILLAGER, "nearestlivingentitysensor", 40);
+ } else {
+ table.put(EntityType.VILLAGER, "secondarypoisensor", 40);
+ }
+ });
+ public Table<EntityType<?>, String, Integer> behavior = Util.make(HashBasedTable.create(), table -> {
+ if (!Boolean.getBoolean("Plazma.disableConfigOptimization")) {
+ table.put(EntityType.VILLAGER, "acquirepoi", 120);
+ table.put(EntityType.VILLAGER, "validatenearbypoi", 60);
+ } else {
+ table.put(EntityType.VILLAGER, "validatenearbypoi", -1);
+ }
+ });
+ // Plazma end
} }
@@ -464,9 +486,9 @@ public class WorldConfiguration extends ConfigurationPart {
@Setting(FeatureSeedsGeneration.FEATURE_SEEDS_KEY)
@@ -458,9 +499,9 @@ public class WorldConfiguration extends ConfigurationPart {
public class Misc extends ConfigurationPart { public class Misc extends ConfigurationPart {
public int lightQueueSize = 20; public int lightQueueSize = 20;
@@ -290,7 +261,7 @@ index 1ea3012995c738c67b31e997c138f824f9e69ba1..8ed00a650b712cbf4bc8796165a539d7
this.enableStatus = this.get("enable-status", true); this.enableStatus = this.get("enable-status", true);
this.hideOnlinePlayers = this.get("hide-online-players", false); this.hideOnlinePlayers = this.get("hide-online-players", false);
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 7b7c9c8aa1bb949b6076161f5b175941e407b9b6..5f06d41d74d769281a05d98db806172c92b88388 100644 index a694d01b32bff939eb82d3c659158454af75225c..9760095f77b6425610f93abac467f92742eb2178 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -346,7 +346,7 @@ public final class CraftServer implements Server { @@ -346,7 +346,7 @@ public final class CraftServer implements Server {
@@ -328,7 +299,7 @@ index ac238eeea791180b66677870401c0b756f0db07b..ce960bc620d84e56c4e7fc9b721fd45c
useAlternateKeepAlive = getBoolean("settings.use-alternate-keepalive", useAlternateKeepAlive); useAlternateKeepAlive = getBoolean("settings.use-alternate-keepalive", useAlternateKeepAlive);
} }
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index d3f2002759ac4788feca1e62c90c2e64596eb2f2..47f2c8f23e318b89324bfcb1342dadc325f53afc 100644 index 9159e790533f06582a521f11103e6cbcbc72978b..ebe966834337740fa5f918bf66fc3be1c3f5c588 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -425,7 +425,7 @@ public class PurpurWorldConfig { @@ -425,7 +425,7 @@ public class PurpurWorldConfig {

View File

@@ -8,7 +8,7 @@ Original by Irochi <me@irochi.moe>
Licensed under the GPL 3.0 Licensed under the GPL 3.0
diff --git a/src/main/java/io/papermc/paper/adventure/ChatProcessor.java b/src/main/java/io/papermc/paper/adventure/ChatProcessor.java diff --git a/src/main/java/io/papermc/paper/adventure/ChatProcessor.java b/src/main/java/io/papermc/paper/adventure/ChatProcessor.java
index 4d9bc4a62ebae0f3707900503576c64733de639f..20265e7c71c125bc5b77039f4901e230738e849f 100644 index 951a7df30bd70bb3051c04f592529d560be6948e..461dbcac2f1265be7b23960f4422f69d5c8c42a9 100644
--- a/src/main/java/io/papermc/paper/adventure/ChatProcessor.java --- a/src/main/java/io/papermc/paper/adventure/ChatProcessor.java
+++ b/src/main/java/io/papermc/paper/adventure/ChatProcessor.java +++ b/src/main/java/io/papermc/paper/adventure/ChatProcessor.java
@@ -353,7 +353,7 @@ public final class ChatProcessor { @@ -353,7 +353,7 @@ public final class ChatProcessor {
@@ -73,10 +73,10 @@ index 429ccd583ecd136a63862e94b8eb36b371e28d0f..efcee39cd7154493de04ca903edbd32b
if (!OldUsersConverter.serverReadyAfterUserconversion(this)) { if (!OldUsersConverter.serverReadyAfterUserconversion(this)) {
return false; return false;
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
index 1a288ebcaade0cc44c7d09478f4f2f8eee7a4269..916b42ffaf5d60aebc0cc3f3c0ee37bdb7b5ca2d 100644 index 33d4c1af86382cc3343d5db42283b27f69f52374..030166f46b2ce23976a679685ffccf8b5439ce48 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java --- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -1426,7 +1426,7 @@ public abstract class PlayerList { @@ -1431,7 +1431,7 @@ public abstract class PlayerList {
} }
public void broadcastChatMessage(PlayerChatMessage message, Predicate<ServerPlayer> shouldSendFiltered, @Nullable ServerPlayer sender, ChatType.Bound params, @Nullable Function<net.kyori.adventure.audience.Audience, Component> unsignedFunction) { public void broadcastChatMessage(PlayerChatMessage message, Predicate<ServerPlayer> shouldSendFiltered, @Nullable ServerPlayer sender, ChatType.Bound params, @Nullable Function<net.kyori.adventure.audience.Audience, Component> unsignedFunction) {
// Paper end // Paper end

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Add permission to bypass reducedDebugInfo gamerule
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
index 916b42ffaf5d60aebc0cc3f3c0ee37bdb7b5ca2d..0615c92894f42ccc320a5a6f5e6c5289a2dee5f9 100644 index 030166f46b2ce23976a679685ffccf8b5439ce48..427a50198c80459fb4d2364a859ed978b1ec7871 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java --- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -268,7 +268,7 @@ public abstract class PlayerList { @@ -273,7 +273,7 @@ public abstract class PlayerList {
ServerGamePacketListenerImpl playerconnection = new ServerGamePacketListenerImpl(this.server, connection, player); ServerGamePacketListenerImpl playerconnection = new ServerGamePacketListenerImpl(this.server, connection, player);
GameRules gamerules = worldserver1.getGameRules(); GameRules gamerules = worldserver1.getGameRules();
boolean flag = gamerules.getBoolean(GameRules.RULE_DO_IMMEDIATE_RESPAWN); boolean flag = gamerules.getBoolean(GameRules.RULE_DO_IMMEDIATE_RESPAWN);
@@ -17,7 +17,7 @@ index 916b42ffaf5d60aebc0cc3f3c0ee37bdb7b5ca2d..0615c92894f42ccc320a5a6f5e6c5289
// Spigot - view distance // Spigot - view distance
playerconnection.send(new ClientboundLoginPacket(player.getId(), worlddata.isHardcore(), player.gameMode.getGameModeForPlayer(), player.gameMode.getPreviousGameModeForPlayer(), this.server.levelKeys(), this.synchronizedRegistries, worldserver1.dimensionTypeId(), worldserver1.dimension(), BiomeManager.obfuscateSeed(worldserver1.getSeed()), this.getMaxPlayers(), worldserver1.getChunkSource().chunkMap.playerChunkManager.getTargetSendDistance(), worldserver1.getChunkSource().chunkMap.playerChunkManager.getTargetTickViewDistance(), flag1, !flag, worldserver1.isDebug(), worldserver1.isFlat(), player.getLastDeathLocation())); // Paper - replace old player chunk management playerconnection.send(new ClientboundLoginPacket(player.getId(), worlddata.isHardcore(), player.gameMode.getGameModeForPlayer(), player.gameMode.getPreviousGameModeForPlayer(), this.server.levelKeys(), this.synchronizedRegistries, worldserver1.dimensionTypeId(), worldserver1.dimension(), BiomeManager.obfuscateSeed(worldserver1.getSeed()), this.getMaxPlayers(), worldserver1.getChunkSource().chunkMap.playerChunkManager.getTargetSendDistance(), worldserver1.getChunkSource().chunkMap.playerChunkManager.getTargetTickViewDistance(), flag1, !flag, worldserver1.isDebug(), worldserver1.isFlat(), player.getLastDeathLocation())); // Paper - replace old player chunk management
@@ -1293,7 +1293,7 @@ public abstract class PlayerList { @@ -1298,7 +1298,7 @@ public abstract class PlayerList {
player.getEntityData().refresh(player); // CraftBukkkit - SPIGOT-7218: sync metadata player.getEntityData().refresh(player); // CraftBukkkit - SPIGOT-7218: sync metadata
player.connection.send(new ClientboundSetCarriedItemPacket(player.getInventory().selected)); player.connection.send(new ClientboundSetCarriedItemPacket(player.getInventory().selected));
// CraftBukkit start - from GameRules // CraftBukkit start - from GameRules

View File

@@ -6,10 +6,10 @@ Subject: [PATCH] Add configuration to disable moved to quickly check for
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index ae3c1bd67c144fe971d4df6df2ca171b431b6fc5..dee076d1e6e30f108a79565546182b4751737baa 100644 index 177090697e42fcca84dbfdf04ca5118a2c5e7be2..32e91b8866dd2aa5e4d26ef6ca77dc3f1206781b 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -1534,7 +1534,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -1543,7 +1543,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
if (!this.player.isChangingDimension() && (!this.player.getLevel().getGameRules().getBoolean(GameRules.RULE_DISABLE_ELYTRA_MOVEMENT_CHECK) || !this.player.isFallFlying())) { if (!this.player.isChangingDimension() && (!this.player.getLevel().getGameRules().getBoolean(GameRules.RULE_DISABLE_ELYTRA_MOVEMENT_CHECK) || !this.player.isFallFlying())) {
float f2 = this.player.isFallFlying() ? 300.0F : 100.0F; float f2 = this.player.isFallFlying() ? 300.0F : 100.0F;

View File

@@ -18,7 +18,7 @@ index e5ea9f27a1936ed9e329e74317c91c5df89b9fbd..7e7a4d872983cd2efdc575bc33353f94
private long lastFill = -1; private long lastFill = -1;
private long nextRefill = -1; private long nextRefill = -1;
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index abf904a1d0dc7a5943cdba540c2b76eb0577954d..62507bb72288a01f15068aaaee5ae40f0655112c 100644 index cc6968a064b30f7250d18c20efb2bb8602bb0cdd..3c80e14392ee7a6bf5040d7cb81b7d894e162eff 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java --- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -694,7 +694,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa @@ -694,7 +694,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -31,10 +31,10 @@ index abf904a1d0dc7a5943cdba540c2b76eb0577954d..62507bb72288a01f15068aaaee5ae40f
if (spawn != null) { if (spawn != null) {
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
index c6a3b59c65466f9f2b16cefe0059a6e5dd84044c..a3499de4efb45f598b3fae796618531164e0b209 100644 index b5415f0c65db728f4a935b87b54fa14b68d31bc4..27474beb980afcb92cace1e1c37e7a2aa5060daf 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
@@ -226,7 +226,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { @@ -227,7 +227,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
} }
// Paper end // Paper end

View File

@@ -71,10 +71,10 @@ index efcee39cd7154493de04ca903edbd32b5901b191..a398b71c52817bd68a05613ec037ed6d
protected boolean convertOldUsers() { protected boolean convertOldUsers() {
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
index d40ef5f2961a13572705a0fff8a5e0e9ab6a67bd..b2043528c3cfe1078b5d732cbbea8fbe2f4b5a2c 100644 index 32e91b8866dd2aa5e4d26ef6ca77dc3f1206781b..48f66a67c251d1183d59a3b8ad417980419a9906 100644
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
@@ -2225,10 +2225,19 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic @@ -2234,10 +2234,19 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
@Override @Override
public void send(Packet<?> packet) { public void send(Packet<?> packet) {
@@ -96,10 +96,10 @@ index d40ef5f2961a13572705a0fff8a5e0e9ab6a67bd..b2043528c3cfe1078b5d732cbbea8fbe
if (packet == null || this.processedDisconnect) { // Spigot if (packet == null || this.processedDisconnect) { // Spigot
return; return;
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
index 0615c92894f42ccc320a5a6f5e6c5289a2dee5f9..e9728c2b14462e7a8ce196bc59d8829d42177ef0 100644 index 427a50198c80459fb4d2364a859ed978b1ec7871..6d3e66f91f6ba47a2cde29e68f6961fdf0bde4de 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java --- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -1457,7 +1457,7 @@ public abstract class PlayerList { @@ -1462,7 +1462,7 @@ public abstract class PlayerList {
} }
public boolean verifyChatTrusted(PlayerChatMessage message) { // Paper - private -> public public boolean verifyChatTrusted(PlayerChatMessage message) { // Paper - private -> public

View File

@@ -9,7 +9,7 @@ pluginManagement {
rootProject.name = "plazma" rootProject.name = "plazma"
for (name in listOf("Plazma-API", "Plazma-Server")) { for (name in listOf("Plazma-API", "Plazma-Server")) {
val projName = name.toLowerCase(Locale.ENGLISH) val projName = name.lowercase(Locale.ENGLISH)
include(projName) include(projName)
findProject(":$projName")!!.projectDir = file(name) findProject(":$projName")!!.projectDir = file(name)
} }