diff --git a/.github/workflows/publish_to_nexus.yml b/.github/workflows/publish_to_nexus.yml index e368a31..62263a2 100644 --- a/.github/workflows/publish_to_nexus.yml +++ b/.github/workflows/publish_to_nexus.yml @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3.0.0 + - uses: actions/checkout@v3.5.0 - name: Set up JDK 17 uses: actions/setup-java@v3 with: diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml index f0ab279..0f8f06c 100644 --- a/.github/workflows/verify.yml +++ b/.github/workflows/verify.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3.0.0 + - uses: actions/checkout@v3.5.0 - name: Set up JDK 17 uses: actions/setup-java@v3 with: diff --git a/Readme.md b/Readme.md index a8644d0..4b2285d 100644 --- a/Readme.md +++ b/Readme.md @@ -1,7 +1,7 @@ [![Wakatime_Badge](https://wakatime.com/badge/github/eldoriarpg/survivalschematicbrush.svg)][wakatime] -[![Publish](https://img.shields.io/github/workflow/status/eldoriarpg/survivalschematicbrush/Publish%20to%20Nexus?style=for-the-badge&label=Publish)][publish] -[![Build](https://img.shields.io/github/workflow/status/eldoriarpg/survivalschematicbrush/Verify%20state?style=for-the-badge&label=Build)][verify] +[![Publish](https://img.shields.io/github/actions/workflow/status/eldoriarpg/survivalschematicbrush/publish_to_nexus.yml?style=for-the-badge&label=Publish)][publish] +[![Build](https://img.shields.io/github/actions/workflow/status/eldoriarpg/survivalschematicbrush/verify.yml?style=for-the-badge&label=Build)][verify] [![Releases](https://img.shields.io/nexus/maven-releases/de.eldoria/survivalschematicbrush?label=Release&logo=Release&server=https%3A%2F%2Feldonexus.de&style=for-the-badge)][release] [![Development](https://img.shields.io/nexus/maven-dev/de.eldoria/survivalschematicbrush?label=DEV&logo=Release&server=https%3A%2F%2Feldonexus.de&style=for-the-badge)][development] diff --git a/build.gradle.kts b/build.gradle.kts index 0ed82bc..9914cd9 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,15 +1,17 @@ import de.chojo.Repo +import net.minecrell.pluginyml.bukkit.BukkitPluginDescription.Permission.Default.FALSE plugins { id("org.cadixdev.licenser") version "0.6.1" - id("com.github.johnrengelman.shadow") version "7.1.2" - id("de.chojo.publishdata") version "1.0.4" + id("com.github.johnrengelman.shadow") version "8.1.1" + id("de.chojo.publishdata") version "1.2.4" + id("net.minecrell.plugin-yml.bukkit") version "0.5.3" java `maven-publish` } group = "de.eldoria" -version = "1.0.0" +version = "1.1.0" repositories { maven("https://eldonexus.de/repository/maven-public/") @@ -17,12 +19,19 @@ repositories { } dependencies { - compileOnly("de.eldoria", "schematicbrushreborn-api", "2.1.8-SNAPSHOT") + compileOnly("de.eldoria", "schematicbrushreborn-api", "2.5.0") compileOnly("org.spigotmc", "spigot-api", "1.13.2-R0.1-SNAPSHOT") - compileOnly("com.sk89q.worldedit", "worldedit-bukkit", "7.2.10") + compileOnly("com.sk89q.worldedit", "worldedit-bukkit", "7.2.14") - testImplementation("org.junit.jupiter:junit-jupiter-api:5.8.1") - testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.8.1") + bukkitLibrary("com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.14.2") + bukkitLibrary("com.fasterxml.jackson.core:jackson-core:2.14.2") + bukkitLibrary("com.fasterxml.jackson.core:jackson-databind:2.14.2") + bukkitLibrary("net.kyori:adventure-platform-bukkit:4.3.0") + bukkitLibrary("net.kyori:adventure-text-minimessage:4.13.0") + + + testImplementation("org.junit.jupiter:junit-jupiter-api:5.9.2") + testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.9.2") } license { @@ -37,6 +46,7 @@ java { } publishData { + addBuildData() addRepo(Repo.main("", "https://eldonexus.de/repository/maven-releases/", false)) addRepo(Repo.dev("DEV", "https://eldonexus.de/repository/maven-dev/", true)) addRepo(Repo.snapshot("SNAPSHOT", "https://eldonexus.de/repository/maven-snapshots/", true)) @@ -82,7 +92,6 @@ tasks { shadowJar { relocate("de.eldoria.eldoutilities", "de.eldoria.schematicbrush.libs.eldoutilities") relocate("de.eldoria.messageblocker", "de.eldoria.schematicbrush.libs.messageblocker") - relocate("net.kyori", "de.eldoria.schematicbrush.libs.kyori") mergeServiceFiles() } @@ -90,7 +99,7 @@ tasks { from(sourceSets.main.get().resources.srcDirs) { filesMatching("plugin.yml") { expand( - "version" to publishData.getVersion(true) + "version" to publishData.getVersion(true) ) } duplicatesStrategy = DuplicatesStrategy.INCLUDE @@ -112,3 +121,29 @@ tasks { dependsOn(shadowJar) } } + +bukkit { + name = "SurvivalSchematicBrush" + main = "de.eldoria.survivalbrush.SurvivalBrush" + apiVersion = "1.16" + version = publishData.getVersion(true) + authors = listOf("RainbowDashLabs") + depend = listOf("SchematicBrushReborn") + + permissions { + register("survivalschematicbrush.paste.bypass") { + default = FALSE + description = "Allow to bypass block pasting check when in survival" + } + + register("survivalschematicbrush.limit.bypass") { + default = FALSE + description = "Allow to bypass max schematic size" + } + + register("survivalschematicbrush.limit.") { + default = FALSE + description = "Set the max blocks a schematic can have" + } + } +} diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 41d9927..ccebba7 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 41dfb87..bdc9a83 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip +networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 1b6c787..79a61d4 100755 --- a/gradlew +++ b/gradlew @@ -55,7 +55,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -80,10 +80,10 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" +# This is normally unused +# shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' @@ -143,12 +143,16 @@ fi if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -205,6 +209,12 @@ set -- \ org.gradle.wrapper.GradleWrapperMain \ "$@" +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + # Use "xargs" to parse quoted args. # # With -n1 it outputs one arg per line, with the quotes and backslashes removed. diff --git a/gradlew.bat b/gradlew.bat index 107acd3..6689b85 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,89 +1,92 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@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 obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@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 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -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. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@rem +@rem Copyright 2015 the original author or authors. +@rem +@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 obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@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 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +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. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/src/main/java/de/eldoria/survivalbrush/SurvivalBrush.java b/src/main/java/de/eldoria/survivalbrush/SurvivalBrush.java index 2355fd2..bac448e 100644 --- a/src/main/java/de/eldoria/survivalbrush/SurvivalBrush.java +++ b/src/main/java/de/eldoria/survivalbrush/SurvivalBrush.java @@ -6,18 +6,35 @@ package de.eldoria.survivalbrush; +import de.eldoria.eldoutilities.config.template.PluginBaseConfiguration; import de.eldoria.eldoutilities.plugin.EldoPlugin; +import de.eldoria.eldoutilities.updater.lynaupdater.LynaUpdateChecker; +import de.eldoria.eldoutilities.updater.lynaupdater.LynaUpdateData; import de.eldoria.survivalbrush.configuration.BlockSettings; -import de.eldoria.survivalbrush.configuration.Configuration; +import de.eldoria.survivalbrush.configuration.JacksonConfiguration; +import de.eldoria.survivalbrush.configuration.LegacyConfiguration; import de.eldoria.survivalbrush.listener.PasteListener; import org.bukkit.configuration.serialization.ConfigurationSerializable; import java.util.List; +import java.util.logging.Level; public class SurvivalBrush extends EldoPlugin { @Override public void onPluginEnable() throws Throwable { - var configuration = new Configuration(this); + var configuration = new JacksonConfiguration(this); + PluginBaseConfiguration base = configuration.secondary(PluginBaseConfiguration.KEY); + if (base.version() == 0) { + var legacyConfiguration = new LegacyConfiguration(this); + getLogger().log(Level.INFO, "Migrating configuration to jackson."); + configuration.main().blockSettings(legacyConfiguration.blockSettings()); + base.version(1); + base.lastInstalledVersion(this); + configuration.save(); + } + + LynaUpdateChecker.lyna(LynaUpdateData.builder(this, 7).build()).start(); + registerListener(new PasteListener(this, configuration)); } @@ -25,9 +42,4 @@ public void onPluginEnable() throws Throwable { public List> getConfigSerialization() { return List.of(BlockSettings.class); } - - @Override - public void onPluginDisable() throws Throwable { - super.onPluginDisable(); - } } diff --git a/src/main/java/de/eldoria/survivalbrush/configuration/BlockSettings.java b/src/main/java/de/eldoria/survivalbrush/configuration/BlockSettings.java index 76f0da8..8f8de5b 100644 --- a/src/main/java/de/eldoria/survivalbrush/configuration/BlockSettings.java +++ b/src/main/java/de/eldoria/survivalbrush/configuration/BlockSettings.java @@ -14,6 +14,7 @@ import java.util.List; import java.util.Map; +@SuppressWarnings("FieldMayBeFinal") public class BlockSettings implements ConfigurationSerializable { private static final List DEFAULT_BLACKLIST = List.of(Material.SHULKER_BOX, Material.WHITE_SHULKER_BOX, @@ -34,7 +35,7 @@ public class BlockSettings implements ConfigurationSerializable { Material.CHEST, Material.TRAPPED_CHEST, Material.FURNACE); - private final List pasteBlacklist; + private List pasteBlacklist; public BlockSettings() { pasteBlacklist = DEFAULT_BLACKLIST; diff --git a/src/main/java/de/eldoria/survivalbrush/configuration/ConfigFile.java b/src/main/java/de/eldoria/survivalbrush/configuration/ConfigFile.java new file mode 100644 index 0000000..0a53298 --- /dev/null +++ b/src/main/java/de/eldoria/survivalbrush/configuration/ConfigFile.java @@ -0,0 +1,20 @@ +/* + * SPDX-License-Identifier: AGPL-3.0-only + * + * Copyright (C) 2021 EldoriaRPG Team and Contributor + */ + +package de.eldoria.survivalbrush.configuration; + +@SuppressWarnings("FieldMayBeFinal") +public class ConfigFile { + private BlockSettings blockSettings = new BlockSettings(); + + public BlockSettings blockSettings() { + return blockSettings; + } + + public void blockSettings(BlockSettings blockSettings) { + this.blockSettings = blockSettings; + } +} diff --git a/src/main/java/de/eldoria/survivalbrush/configuration/Configuration.java b/src/main/java/de/eldoria/survivalbrush/configuration/Configuration.java index 548f090..3ffff99 100644 --- a/src/main/java/de/eldoria/survivalbrush/configuration/Configuration.java +++ b/src/main/java/de/eldoria/survivalbrush/configuration/Configuration.java @@ -6,27 +6,6 @@ package de.eldoria.survivalbrush.configuration; -import de.eldoria.eldoutilities.configuration.EldoConfig; -import org.bukkit.plugin.Plugin; - -public class Configuration extends EldoConfig { - private BlockSettings blockSettings; - - public Configuration(Plugin plugin) { - super(plugin); - } - - @Override - protected void reloadConfigs() { - blockSettings = getConfig().getObject("blockSettings", BlockSettings.class, new BlockSettings()); - } - - @Override - protected void saveConfigs() { - getConfig().set("blockSettings", blockSettings); - } - - public BlockSettings blockSettings() { - return blockSettings; - } +public interface Configuration { + BlockSettings blockSettings(); } diff --git a/src/main/java/de/eldoria/survivalbrush/configuration/JacksonConfiguration.java b/src/main/java/de/eldoria/survivalbrush/configuration/JacksonConfiguration.java new file mode 100644 index 0000000..a4ddedd --- /dev/null +++ b/src/main/java/de/eldoria/survivalbrush/configuration/JacksonConfiguration.java @@ -0,0 +1,24 @@ +/* + * SPDX-License-Identifier: AGPL-3.0-only + * + * Copyright (C) 2021 EldoriaRPG Team and Contributor + */ + +package de.eldoria.survivalbrush.configuration; + +import de.eldoria.eldoutilities.config.ConfigKey; +import de.eldoria.eldoutilities.config.JacksonConfig; +import org.bukkit.plugin.Plugin; +import org.jetbrains.annotations.NotNull; + +public class JacksonConfiguration extends JacksonConfig implements Configuration { + public JacksonConfiguration(@NotNull Plugin plugin) { + super(plugin, ConfigKey.defaultConfig(ConfigFile.class, ConfigFile::new)); + } + + + @Override + public BlockSettings blockSettings() { + return main().blockSettings(); + } +} diff --git a/src/main/java/de/eldoria/survivalbrush/configuration/LegacyConfiguration.java b/src/main/java/de/eldoria/survivalbrush/configuration/LegacyConfiguration.java new file mode 100644 index 0000000..1be065f --- /dev/null +++ b/src/main/java/de/eldoria/survivalbrush/configuration/LegacyConfiguration.java @@ -0,0 +1,33 @@ +/* + * SPDX-License-Identifier: AGPL-3.0-only + * + * Copyright (C) 2021 EldoriaRPG Team and Contributor + */ + +package de.eldoria.survivalbrush.configuration; + +import de.eldoria.eldoutilities.configuration.EldoConfig; +import org.bukkit.plugin.Plugin; + +public class LegacyConfiguration extends EldoConfig implements Configuration { + private BlockSettings blockSettings; + + public LegacyConfiguration(Plugin plugin) { + super(plugin); + } + + @Override + protected void reloadConfigs() { + blockSettings = getConfig().getObject("blockSettings", BlockSettings.class, new BlockSettings()); + } + + @Override + protected void saveConfigs() { + getConfig().set("blockSettings", blockSettings); + } + + @Override + public BlockSettings blockSettings() { + return blockSettings; + } +} diff --git a/src/main/java/de/eldoria/survivalbrush/listener/PasteListener.java b/src/main/java/de/eldoria/survivalbrush/listener/PasteListener.java index ef15dc8..eb3ec67 100644 --- a/src/main/java/de/eldoria/survivalbrush/listener/PasteListener.java +++ b/src/main/java/de/eldoria/survivalbrush/listener/PasteListener.java @@ -11,6 +11,7 @@ import de.eldoria.eldoutilities.container.Pair; import de.eldoria.schematicbrush.event.PrePasteEvent; import de.eldoria.survivalbrush.configuration.Configuration; +import de.eldoria.survivalbrush.configuration.LegacyConfiguration; import de.eldoria.survivalbrush.util.Permissions; import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.kyori.adventure.text.minimessage.MiniMessage; diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml deleted file mode 100644 index 978dd01..0000000 --- a/src/main/resources/plugin.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: SurvivalSchematicBrush -version: ${version} -api-version: 1.13 -author: Hadde -main: de.eldoria.survivalbrush.SurvivalBrush -depend: - - SchematicBrushReborn - -permissions: - survivalschematicbrush.paste.bypass: - default: false - description: Allow to bypass block pasting check when in survival - survivalschematicbrush.limit.bypass: - default: false - description: Allow to bypass max schematic size - survivalschematicbrush.limit.: - default: false - description: Set the max blocks a schematic can have