diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt
index e398a1e6..751c0c03 100644
--- a/buildSrc/src/main/kotlin/Versions.kt
+++ b/buildSrc/src/main/kotlin/Versions.kt
@@ -1,10 +1,10 @@
object Versions {
- const val WORLDEDIT = "7.2.10"
- const val PISTON = "0.5.7"
- const val AUTO_VALUE = "1.9"
- const val JUNIT = "5.8.1"
- const val MOCKITO = "4.3.1"
- const val SQUIRRELID = "0.3.0"
- const val GUAVA = "31.0.1-jre"
+ // const val PISTON = "0.4.3"
+ // const val AUTO_VALUE = "1.6.5"
+ const val WORLDEDIT = "7.2.12"
+ const val JUNIT = "5.9.1"
+ const val MOCKITO = "4.9.0"
+ const val SQUIRRELID = "0.3.2"
+ const val GUAVA = "31.1-jre"
const val FINDBUGS = "3.0.2"
}
diff --git a/config/checkstyle/import-control.xml b/config/checkstyle/import-control.xml
index 7da27610..a5053d0b 100644
--- a/config/checkstyle/import-control.xml
+++ b/config/checkstyle/import-control.xml
@@ -30,6 +30,7 @@
+
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index 41d9927a..ccebba77 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 00e33ede..bdc9a83b 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.1-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 1b6c7873..79a61d42 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 ac1b06f9..93e3f59f 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/worldguard-bukkit/build.gradle.kts b/worldguard-bukkit/build.gradle.kts
index 0a0a41f2..8d7f57c8 100644
--- a/worldguard-bukkit/build.gradle.kts
+++ b/worldguard-bukkit/build.gradle.kts
@@ -10,11 +10,7 @@ applyShadowConfiguration()
repositories {
maven {
name = "paper"
- url = uri("https://papermc.io/repo/repository/maven-public/")
- }
- maven {
- name = "bstats"
- url = uri("https://repo.codemc.org/repository/maven-public")
+ url = uri("https://repo.papermc.io/repository/maven-public/")
}
maven {
name = "aikar-timings"
@@ -28,15 +24,15 @@ configurations {
dependencies {
"api"(project(":worldguard-core"))
- "compileOnly"("io.papermc.paper:paper-api:1.19-R0.1-SNAPSHOT")
- "runtimeOnly"("org.spigotmc:spigot-api:1.19-R0.1-SNAPSHOT") {
+ "compileOnly"("io.papermc.paper:paper-api:1.19.3-R0.1-SNAPSHOT")
+ "runtimeOnly"("org.spigotmc:spigot-api:1.19.3-R0.1-SNAPSHOT") {
exclude("junit", "junit")
}
"api"("com.sk89q.worldedit:worldedit-bukkit:${Versions.WORLDEDIT}") { isTransitive = false }
"implementation"("com.google.guava:guava:${Versions.GUAVA}")
"compileOnly"("com.sk89q:commandbook:2.3") { isTransitive = false }
- "shadeOnly"("io.papermc:paperlib:1.0.7")
- "shadeOnly"("org.bstats:bstats-bukkit:2.1.0")
+ "shadeOnly"("io.papermc:paperlib:1.0.8")
+ "shadeOnly"("org.bstats:bstats-bukkit:3.0.1")
"shadeOnly"("co.aikar:minecraft-timings:1.0.4")
}
diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/BukkitWorldConfiguration.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/BukkitWorldConfiguration.java
index 936f9803..f204cd2e 100644
--- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/BukkitWorldConfiguration.java
+++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/BukkitWorldConfiguration.java
@@ -281,6 +281,7 @@ public class BukkitWorldConfiguration extends YamlWorldConfiguration {
disableCropGrowth = getBoolean("dynamics.disable-crop-growth", false);
disableSoilDehydration = getBoolean("dynamics.disable-soil-dehydration", false);
disableCoralBlockFade = getBoolean("dynamics.disable-coral-block-fade", false);
+ disableCopperBlockFade = getBoolean("dynamics.disable-copper-block-fade", false);
allowedSnowFallOver = new HashSet<>(convertLegacyBlocks(getStringList("dynamics.snow-fall-blocks", null)));
useRegions = getBoolean("regions.enable", true);
diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/BukkitWorldGuardPlatform.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/BukkitWorldGuardPlatform.java
index 69ef8656..0da78f7d 100644
--- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/BukkitWorldGuardPlatform.java
+++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/BukkitWorldGuardPlatform.java
@@ -34,6 +34,7 @@ import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import com.sk89q.worldguard.util.profile.resolver.PaperPlayerService;
import com.sk89q.worldguard.bukkit.protection.events.flags.FlagContextCreateEvent;
import com.sk89q.worldguard.bukkit.session.BukkitSessionManager;
+import com.sk89q.worldguard.bukkit.util.report.DatapackReport;
import com.sk89q.worldguard.bukkit.util.report.PerformanceReport;
import com.sk89q.worldguard.bukkit.util.report.PluginReport;
import com.sk89q.worldguard.bukkit.util.report.SchedulerReport;
@@ -239,6 +240,7 @@ public class BukkitWorldGuardPlatform implements WorldGuardPlatform {
report.add(new ServicesReport());
report.add(new WorldReport());
report.add(new PerformanceReport());
+ if (PaperLib.isPaper()) report.add(new DatapackReport());
}
@Override
diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/WorldGuardPlugin.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/WorldGuardPlugin.java
index e0f83634..86aefb55 100644
--- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/WorldGuardPlugin.java
+++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/WorldGuardPlugin.java
@@ -60,6 +60,7 @@ import com.sk89q.worldguard.bukkit.listener.WorldGuardWorldListener;
import com.sk89q.worldguard.bukkit.listener.WorldRulesListener;
import com.sk89q.worldguard.bukkit.session.BukkitSessionManager;
import com.sk89q.worldguard.bukkit.util.ClassSourceValidator;
+import com.sk89q.worldguard.bukkit.util.Entities;
import com.sk89q.worldguard.bukkit.util.Events;
import com.sk89q.worldguard.commands.GeneralCommands;
import com.sk89q.worldguard.commands.ProtectionCommands;
@@ -419,8 +420,9 @@ public class WorldGuardPlugin extends JavaPlugin {
}
public Actor wrapCommandSender(CommandSender sender) {
- if (sender instanceof Player) {
- return wrapPlayer((Player) sender);
+ if (sender instanceof Player player) {
+ if (Entities.isNPC(player)) return null;
+ return wrapPlayer(player);
}
try {
diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/cause/Cause.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/cause/Cause.java
index c7821026..0c6003c3 100644
--- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/cause/Cause.java
+++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/cause/Cause.java
@@ -24,6 +24,7 @@ import com.google.common.collect.Sets;
import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.bukkit.internal.WGMetadata;
+import com.sk89q.worldguard.bukkit.util.Entities;
import io.papermc.lib.PaperLib;
import org.bukkit.Bukkit;
import org.bukkit.block.Block;
@@ -134,8 +135,8 @@ public final class Cause {
@Nullable
public Player getFirstPlayer() {
for (Object object : causes) {
- if (object instanceof Player) {
- return (Player) object;
+ if (object instanceof Player p && !Entities.isNPC(p)) {
+ return p;
}
}
@@ -145,8 +146,8 @@ public final class Cause {
@Nullable
public Entity getFirstEntity() {
for (Object object : causes) {
- if (object instanceof Entity) {
- return (Entity) object;
+ if (object instanceof Entity e) {
+ return e;
}
}
@@ -156,8 +157,8 @@ public final class Cause {
@Nullable
public Entity getFirstNonPlayerEntity() {
for (Object object : causes) {
- if (object instanceof Entity && !(object instanceof Player)) {
- return (Entity) object;
+ if (object instanceof Entity e && (!(object instanceof Player) || Entities.isNPC(e))) {
+ return e;
}
}
@@ -167,8 +168,8 @@ public final class Cause {
@Nullable
public Block getFirstBlock() {
for (Object object : causes) {
- if (object instanceof Block) {
- return (Block) object;
+ if (object instanceof Block b) {
+ return b;
}
}
diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/AbstractListener.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/AbstractListener.java
index e63e01f6..07bb23a0 100644
--- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/AbstractListener.java
+++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/AbstractListener.java
@@ -29,6 +29,7 @@ import com.sk89q.worldguard.bukkit.BukkitPlayer;
import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.bukkit.cause.Cause;
+import com.sk89q.worldguard.bukkit.util.Entities;
import com.sk89q.worldguard.config.WorldConfiguration;
import com.sk89q.worldguard.domains.Association;
import com.sk89q.worldguard.protection.association.DelayedRegionOverlapAssociation;
@@ -124,13 +125,12 @@ class AbstractListener implements Listener {
if (!cause.isKnown()) {
return Associables.constant(Association.NON_MEMBER);
- } else if (rootCause instanceof Player) {
- return getPlugin().wrapPlayer((Player) rootCause);
- } else if (rootCause instanceof OfflinePlayer) {
- return getPlugin().wrapOfflinePlayer((OfflinePlayer) rootCause);
- } else if (rootCause instanceof Entity) {
+ } else if (rootCause instanceof Player player && !Entities.isNPC(player)) {
+ return getPlugin().wrapPlayer(player);
+ } else if (rootCause instanceof OfflinePlayer offlinePlayer) {
+ return getPlugin().wrapOfflinePlayer(offlinePlayer);
+ } else if (rootCause instanceof Entity entity) {
RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery();
- final Entity entity = (Entity) rootCause;
BukkitWorldConfiguration config = getWorldConfig(entity.getWorld());
Location loc;
if (PaperLib.isPaper() && config.usePaperEntityOrigin) {
@@ -144,9 +144,9 @@ class AbstractListener implements Listener {
}
return new DelayedRegionOverlapAssociation(query, BukkitAdapter.adapt(loc),
config.useMaxPriorityAssociation);
- } else if (rootCause instanceof Block) {
+ } else if (rootCause instanceof Block block) {
RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery();
- Location loc = ((Block) rootCause).getLocation();
+ Location loc = block.getLocation();
return new DelayedRegionOverlapAssociation(query, BukkitAdapter.adapt(loc),
getWorldConfig(loc.getWorld()).useMaxPriorityAssociation);
} else {
diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java
index ed9f72c4..7d96bbef 100644
--- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java
+++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/EventAbstractionListener.java
@@ -22,8 +22,6 @@ package com.sk89q.worldguard.bukkit.listener;
import static com.sk89q.worldguard.bukkit.cause.Cause.create;
import com.destroystokyo.paper.event.entity.EntityZapEvent;
-import com.sk89q.worldedit.bukkit.BukkitAdapter;
-import com.sk89q.worldguard.bukkit.BukkitWorldConfiguration;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.bukkit.cause.Cause;
import com.sk89q.worldguard.bukkit.event.DelegateEvent;
@@ -142,7 +140,6 @@ import org.bukkit.event.vehicle.VehicleDamageEvent;
import org.bukkit.event.vehicle.VehicleDestroyEvent;
import org.bukkit.event.world.StructureGrowEvent;
import org.bukkit.inventory.EquipmentSlot;
-import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.PluginManager;
@@ -165,17 +162,6 @@ public class EventAbstractionListener extends AbstractListener {
private final EventDebounce pistonRetractDebounce = EventDebounce.create(5000);
private final EventDebounce pistonExtendDebounce = EventDebounce.create(5000);
- private static final boolean HAS_SNAPSHOT_INVHOLDER;
- static {
- boolean temp;
- try {
- Inventory.class.getMethod("getHolder", boolean.class);
- temp = true;
- } catch (NoSuchMethodException e) {
- temp = false;
- }
- HAS_SNAPSHOT_INVHOLDER = temp;
- }
/**
* Construct the listener.
*
@@ -963,12 +949,7 @@ public class EventAbstractionListener extends AbstractListener {
@EventHandler(ignoreCancelled = true)
public void onInventoryMoveItem(InventoryMoveItemEvent event) {
- InventoryHolder causeHolder;
- if (HAS_SNAPSHOT_INVHOLDER) {
- causeHolder = event.getInitiator().getHolder(false);
- } else {
- causeHolder = event.getInitiator().getHolder();
- }
+ InventoryHolder causeHolder = PaperLib.getHolder(event.getInitiator(), false).getHolder();
WorldConfiguration wcfg = null;
if (causeHolder instanceof Hopper
@@ -982,15 +963,8 @@ public class EventAbstractionListener extends AbstractListener {
Entry entry;
if ((entry = moveItemDebounce.tryDebounce(event)) != null) {
- InventoryHolder sourceHolder;
- InventoryHolder targetHolder;
- /*if (HAS_SNAPSHOT_INVHOLDER) {
- sourceHolder = event.getSource().getHolder(false);
- targetHolder = event.getDestination().getHolder(false);
- } else {*/
- sourceHolder = event.getSource().getHolder();
- targetHolder = event.getDestination().getHolder();
- //}
+ InventoryHolder sourceHolder = PaperLib.getHolder(event.getSource(), false).getHolder();
+ InventoryHolder targetHolder = PaperLib.getHolder(event.getDestination(), false).getHolder();
Cause cause;
@@ -1197,9 +1171,12 @@ public class EventAbstractionListener extends AbstractListener {
}
// Handle created spawn eggs
- if (item != null && Materials.isSpawnEgg(item.getType())) {
- Events.fireToCancel(event, new SpawnEntityEvent(event, cause, placed.getLocation().add(0.5, 0, 0.5), Materials.getEntitySpawnEgg(item.getType())));
- return;
+ if (item != null) {
+ EntityType possibleEntityType = Materials.getEntitySpawnEgg(item.getType());
+ if (possibleEntityType != null) {
+ Events.fireToCancel(event, new SpawnEntityEvent(event, cause, placed.getLocation().add(0.5, 0, 0.5), possibleEntityType));
+ return;
+ }
}
// handle water/lava placement
diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/InvincibilityListener.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/InvincibilityListener.java
index 6a8ec9d0..8ced61e9 100644
--- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/InvincibilityListener.java
+++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/InvincibilityListener.java
@@ -22,6 +22,7 @@ package com.sk89q.worldguard.bukkit.listener;
import com.sk89q.worldguard.LocalPlayer;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
+import com.sk89q.worldguard.bukkit.util.Entities;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
@@ -57,9 +58,9 @@ public class InvincibilityListener extends AbstractListener {
@EventHandler(ignoreCancelled = true)
public void onEntityDamage(EntityDamageEvent event) {
Entity victim = event.getEntity();
+ if (Entities.isNPC(victim)) return;
- if (victim instanceof Player) {
- Player player = (Player) victim;
+ if (victim instanceof Player player) {
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player);
if (isInvincible(localPlayer)) {
@@ -87,9 +88,9 @@ public class InvincibilityListener extends AbstractListener {
@EventHandler(ignoreCancelled = true)
public void onEntityCombust(EntityCombustEvent event) {
Entity entity = event.getEntity();
+ if (Entities.isNPC(entity)) return;
- if (entity instanceof Player) {
- Player player = (Player) entity;
+ if (entity instanceof Player player) {
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player);
if (isInvincible(localPlayer)) {
@@ -100,8 +101,9 @@ public class InvincibilityListener extends AbstractListener {
@EventHandler(ignoreCancelled = true)
public void onFoodLevelChange(FoodLevelChangeEvent event) {
- if (event.getEntity() instanceof Player) {
- Player player = (Player) event.getEntity();
+ if (Entities.isNPC(event.getEntity())) return;
+
+ if (event.getEntity() instanceof Player player) {
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player);
if (event.getFoodLevel() < player.getFoodLevel() && isInvincible(localPlayer)) {
diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/RegionFlagsListener.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/RegionFlagsListener.java
index e2822f20..3cc05170 100644
--- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/RegionFlagsListener.java
+++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/RegionFlagsListener.java
@@ -25,6 +25,7 @@ import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.bukkit.event.block.BreakBlockEvent;
import com.sk89q.worldguard.bukkit.event.block.PlaceBlockEvent;
+import com.sk89q.worldguard.bukkit.util.Entities;
import com.sk89q.worldguard.bukkit.util.Materials;
import com.sk89q.worldguard.config.WorldConfiguration;
import com.sk89q.worldguard.protection.association.RegionAssociable;
@@ -118,24 +119,24 @@ public class RegionFlagsListener extends AbstractListener {
World world = entity.getWorld();
if (!isRegionSupportEnabled(world)) return; // Region support disabled
+ if (Entities.isNPC(entity)) return;
+ if (!(entity instanceof Player player)) return;
+
RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery();
- if (entity instanceof Player && event.getCause() == DamageCause.FALL) {
- LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer((Player) entity);
+ if (event.getCause() == DamageCause.FALL) {
+ LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player);
if (!query.testState(BukkitAdapter.adapt(entity.getLocation()), localPlayer, Flags.FALL_DAMAGE)) {
event.setCancelled(true);
return;
}
- } else {
- if (entity instanceof Player && event.getCause() == DamageCause.FLY_INTO_WALL) {
- LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer((Player) entity);
- if (!query.testState(BukkitAdapter.adapt(entity.getLocation()), localPlayer, Flags.FALL_DAMAGE)) {
- event.setCancelled(true);
- return;
- }
+ } else if (event.getCause() == DamageCause.FLY_INTO_WALL) {
+ LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player);
+ if (!query.testState(BukkitAdapter.adapt(entity.getLocation()), localPlayer, Flags.FALL_DAMAGE)) {
+ event.setCancelled(true);
+ return;
}
}
-
}
/**
diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/RegionProtectionListener.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/RegionProtectionListener.java
index ed7db2df..5e9ed126 100644
--- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/RegionProtectionListener.java
+++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/RegionProtectionListener.java
@@ -522,8 +522,7 @@ public class RegionProtectionListener extends AbstractListener {
if (!isRegionSupportEnabled(vehicle.getWorld())) return; // Region support disabled
Entity exited = event.getExited();
- if (vehicle instanceof Tameable && exited instanceof Player) {
- Player player = (Player) exited;
+ if (vehicle instanceof Tameable && exited instanceof Player player && !Entities.isNPC(player)) {
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player);
if (!isWhitelisted(Cause.create(player), vehicle.getWorld(), false)) {
RegionQuery query = WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery();
diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardBlockListener.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardBlockListener.java
index fbfb75e1..fbba75fd 100644
--- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardBlockListener.java
+++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardBlockListener.java
@@ -697,6 +697,16 @@ public class WorldGuardBlockListener extends AbstractListener {
event.setCancelled(true);
return;
}
+ } else if (Materials.isUnwaxedCopper(event.getBlock().getType())) {
+ if (wcfg.disableCopperBlockFade) {
+ event.setCancelled(true);
+ return;
+ }
+ if (wcfg.useRegions && !StateFlag.test(WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery()
+ .queryState(BukkitAdapter.adapt(event.getBlock().getLocation()), (RegionAssociable) null, Flags.COPPER_FADE))) {
+ event.setCancelled(true);
+ return;
+ }
}
}
diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardEntityListener.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardEntityListener.java
index 74a77c59..ea59fb5d 100644
--- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardEntityListener.java
+++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardEntityListener.java
@@ -138,8 +138,7 @@ public class WorldGuardEntityListener extends AbstractListener {
event.setCancelled(true);
return;
}
- } else if (defender instanceof Player) {
- Player player = (Player) defender;
+ } else if (defender instanceof Player player && !Entities.isNPC(defender)) {
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player);
if (wcfg.disableLavaDamage && type == DamageCause.LAVA) {
@@ -227,8 +226,7 @@ public class WorldGuardEntityListener extends AbstractListener {
}
}
- if (defender instanceof Player) {
- Player player = (Player) defender;
+ if (defender instanceof Player player && !Entities.isNPC(defender)) {
LocalPlayer localPlayer = getPlugin().wrapPlayer(player);
if (wcfg.disableLightningDamage && event.getCause() == DamageCause.LIGHTNING) {
@@ -289,8 +287,7 @@ public class WorldGuardEntityListener extends AbstractListener {
}
WorldConfiguration wcfg = getWorldConfig(defender.getWorld());
- if (defender instanceof Player) {
- Player player = (Player) defender;
+ if (defender instanceof Player player && !Entities.isNPC(defender)) {
LocalPlayer localPlayer = getPlugin().wrapPlayer(player);
@@ -363,8 +360,7 @@ public class WorldGuardEntityListener extends AbstractListener {
event.setCancelled(true);
return;
}
- } else if (defender instanceof Player) {
- Player player = (Player) defender;
+ } else if (defender instanceof Player player && !Entities.isNPC(defender)) {
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player);
if (type == DamageCause.WITHER) {
@@ -665,8 +661,8 @@ public class WorldGuardEntityListener extends AbstractListener {
.get(world);
if (regionManager == null) return;
LocalPlayer associable = null;
- if (event.getEntity() instanceof Player) {
- associable = getPlugin().wrapPlayer(((Player) event.getEntity()));
+ if (event.getEntity() instanceof Player player) {
+ associable = getPlugin().wrapPlayer(player);
if (WorldGuard.getInstance().getPlatform().getSessionManager().hasBypass(associable, world)) {
return;
}
@@ -745,10 +741,10 @@ public class WorldGuardEntityListener extends AbstractListener {
event.setCancelled(true);
return;
}
- if (wcfg.useRegions && ent instanceof Player
+ if (wcfg.useRegions && ent instanceof Player player && !Entities.isNPC(ent)
&& !WorldGuard.getInstance().getPlatform().getRegionContainer().createQuery().testState(
BukkitAdapter.adapt(ent.getLocation()),
- WorldGuardPlugin.inst().wrapPlayer((Player) ent),
+ WorldGuardPlugin.inst().wrapPlayer(player),
Flags.HEALTH_REGEN)) {
event.setCancelled(true);
}
@@ -758,10 +754,11 @@ public class WorldGuardEntityListener extends AbstractListener {
public void onFoodChange(FoodLevelChangeEvent event) {
if (event.getItem() != null) return;
HumanEntity ent = event.getEntity();
- if (!(ent instanceof Player)) return;
+ if (Entities.isNPC(ent)) return;
+ if (!(ent instanceof Player bukkitPlayer)) return;
if (event.getFoodLevel() > ent.getFoodLevel()) return;
- LocalPlayer player = WorldGuardPlugin.inst().wrapPlayer((Player) ent);
+ LocalPlayer player = WorldGuardPlugin.inst().wrapPlayer(bukkitPlayer);
WorldConfiguration wcfg = getWorldConfig(ent.getWorld());
if (wcfg.useRegions
diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardPlayerListener.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardPlayerListener.java
index 6c722bcc..f2538062 100644
--- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardPlayerListener.java
+++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardPlayerListener.java
@@ -314,6 +314,7 @@ public class WorldGuardPlayerListener extends AbstractListener {
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerRespawn(PlayerRespawnEvent event) {
Player player = event.getPlayer();
+ if (com.sk89q.worldguard.bukkit.util.Entities.isNPC(player)) return;
WorldConfiguration wcfg = getWorldConfig(player.getWorld());
if (wcfg.useRegions) {
@@ -348,6 +349,7 @@ public class WorldGuardPlayerListener extends AbstractListener {
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void onPlayerTeleport(PlayerTeleportEvent event) {
Player player = event.getPlayer();
+ if (com.sk89q.worldguard.bukkit.util.Entities.isNPC(player)) return;
LocalPlayer localPlayer = getPlugin().wrapPlayer(player);
ConfigurationManager cfg = getConfig();
WorldConfiguration wcfg = getWorldConfig(player.getWorld());
diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardVehicleListener.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardVehicleListener.java
index 4c044808..fe604dad 100644
--- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardVehicleListener.java
+++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/WorldGuardVehicleListener.java
@@ -24,6 +24,7 @@ import com.sk89q.worldedit.util.Location;
import com.sk89q.worldguard.LocalPlayer;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
+import com.sk89q.worldguard.bukkit.util.Entities;
import com.sk89q.worldguard.config.WorldConfiguration;
import com.sk89q.worldguard.session.MoveType;
import com.sk89q.worldguard.util.Locations;
@@ -59,6 +60,7 @@ public class WorldGuardVehicleListener extends AbstractListener {
// Did we move a block?
if (Locations.isDifferentBlock(BukkitAdapter.adapt(event.getFrom()), BukkitAdapter.adapt(event.getTo()))) {
for (Player player : playerPassengers) {
+ if (Entities.isNPC(player)) continue;
LocalPlayer localPlayer = getPlugin().wrapPlayer(player);
Location lastValid;
if ((lastValid = WorldGuard.getInstance().getPlatform().getSessionManager().get(localPlayer)
diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/debounce/legacy/InventoryMoveItemEventDebounce.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/debounce/legacy/InventoryMoveItemEventDebounce.java
index bbd39867..c433a7a2 100644
--- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/debounce/legacy/InventoryMoveItemEventDebounce.java
+++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/listener/debounce/legacy/InventoryMoveItemEventDebounce.java
@@ -20,6 +20,7 @@
package com.sk89q.worldguard.bukkit.listener.debounce.legacy;
import com.sk89q.worldguard.bukkit.listener.debounce.legacy.InventoryMoveItemEventDebounce.Key;
+import io.papermc.lib.PaperLib;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
@@ -44,18 +45,18 @@ public class InventoryMoveItemEventDebounce extends AbstractEventDebounce {
private final Object target;
public Key(InventoryMoveItemEvent event) {
- cause = transform(event.getInitiator().getHolder());
- source = transform(event.getSource().getHolder());
- target = transform(event.getDestination().getHolder());
+ cause = transform(PaperLib.getHolder(event.getInitiator(), false).getHolder());
+ source = transform(PaperLib.getHolder(event.getSource(), false).getHolder());
+ target = transform(PaperLib.getHolder(event.getDestination(), false).getHolder());
}
private Object transform(InventoryHolder holder) {
- if (holder instanceof BlockState) {
- return new BlockMaterialKey(((BlockState) holder).getBlock());
- } else if (holder instanceof DoubleChest) {
- InventoryHolder left = ((DoubleChest) holder).getLeftSide();
- if (left instanceof Chest) {
- return new BlockMaterialKey(((Chest) left).getBlock());
+ if (holder instanceof BlockState blockState) {
+ return new BlockMaterialKey(blockState);
+ } else if (holder instanceof DoubleChest doubleChest) {
+ InventoryHolder left = doubleChest.getLeftSide();
+ if (left instanceof Chest chest) {
+ return new BlockMaterialKey(chest);
} else {
return holder;
}
@@ -94,8 +95,8 @@ public class InventoryMoveItemEventDebounce extends AbstractEventDebounce {
private final Block block;
private final Material material;
- private BlockMaterialKey(Block block) {
- this.block = block;
+ private BlockMaterialKey(BlockState block) {
+ this.block = block.getBlock();
material = block.getType();
}
diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/session/BukkitSessionManager.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/session/BukkitSessionManager.java
index da23d6bf..e01d5a35 100644
--- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/session/BukkitSessionManager.java
+++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/session/BukkitSessionManager.java
@@ -25,6 +25,7 @@ import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.bukkit.BukkitPlayer;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.bukkit.event.player.ProcessPlayerEvent;
+import com.sk89q.worldguard.bukkit.util.Entities;
import com.sk89q.worldguard.session.AbstractSessionManager;
import com.sk89q.worldguard.session.Session;
import com.sk89q.worldguard.session.handler.Handler;
@@ -81,9 +82,9 @@ public class BukkitSessionManager extends AbstractSessionManager implements Runn
@Override
public boolean hasBypass(LocalPlayer player, World world) {
- if (player instanceof BukkitPlayer) {
- if (((BukkitPlayer) player).getPlayer().hasMetadata("NPC")
- && WorldGuard.getInstance().getPlatform().getGlobalStateManager().get(world).fakePlayerBuildOverride) {
+ if (player instanceof BukkitPlayer bukkitPlayer) {
+ if (Entities.isNPC(bukkitPlayer.getPlayer())
+ && WorldGuard.getInstance().getPlatform().getGlobalStateManager().get(world).fakePlayerBuildOverride) {
return true;
}
if (!((BukkitPlayer) player).getPlayer().isOnline()) {
diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/InteropUtils.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/InteropUtils.java
index 8bb2ce89..ef53d7b2 100644
--- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/InteropUtils.java
+++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/InteropUtils.java
@@ -70,7 +70,7 @@ public final class InteropUtils {
UUID uuid = player.getUniqueId();
String name = player.getName();
- if (player.hasMetadata("NPC")) {
+ if (Entities.isNPC(player)) {
return true;
}
diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/Materials.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/Materials.java
index 1763121d..90c30f79 100644
--- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/Materials.java
+++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/Materials.java
@@ -52,6 +52,11 @@ public final class Materials {
private static final Map MATERIAL_FLAGS = new EnumMap<>(Material.class);
private static final Set DAMAGE_EFFECTS = new HashSet<>();
+ private static void putMaterialTag(Tag tag, Integer value) {
+ tag.getValues().forEach(mat -> MATERIAL_FLAGS.put(mat, value));
+ }
+ private static Tag SIGNS_TAG;
+
static {
ENTITY_ITEMS.put(EntityType.PAINTING, Material.PAINTING);
ENTITY_ITEMS.put(EntityType.ARROW, Material.ARROW);
@@ -110,7 +115,7 @@ public final class Materials {
MATERIAL_FLAGS.put(Material.IRON_BLOCK, 0);
MATERIAL_FLAGS.put(Material.BRICK, 0);
MATERIAL_FLAGS.put(Material.TNT, MODIFIED_ON_RIGHT);
- MATERIAL_FLAGS.put(Material.BOOKSHELF, 0);
+ MATERIAL_FLAGS.put(Material.BOOKSHELF, MODIFIED_ON_RIGHT);
MATERIAL_FLAGS.put(Material.MOSSY_COBBLESTONE, 0);
MATERIAL_FLAGS.put(Material.OBSIDIAN, 0);
MATERIAL_FLAGS.put(Material.TORCH, 0);
@@ -815,111 +820,54 @@ public final class Materials {
MATERIAL_FLAGS.put(Material.ECHO_SHARD, 0);
MATERIAL_FLAGS.put(Material.REINFORCED_DEEPSLATE, 0);
+ // 1.19.3: Try to register those things
+ try {
+ SIGNS_TAG = Tag.ALL_SIGNS;
+
+ MATERIAL_FLAGS.put(Material.BAMBOO_MOSAIC, 0);
+ MATERIAL_FLAGS.put(Material.BAMBOO_BLOCK, 0);
+ MATERIAL_FLAGS.put(Material.STRIPPED_BAMBOO_BLOCK, 0);
+ } catch (NoSuchFieldError ignored) {
+ SIGNS_TAG = Tag.SIGNS;
+ }
+
// Generated via tag
- for (Material woodenDoor : Tag.WOODEN_DOORS.getValues()) {
- MATERIAL_FLAGS.put(woodenDoor, MODIFIED_ON_RIGHT);
- }
- for (Material woodenTrapdoor : Tag.WOODEN_TRAPDOORS.getValues()) {
- MATERIAL_FLAGS.put(woodenTrapdoor, MODIFIED_ON_RIGHT);
- }
- for (Material shulkerBox : Tag.SHULKER_BOXES.getValues()) {
- MATERIAL_FLAGS.put(shulkerBox, MODIFIED_ON_RIGHT);
- }
- for (Material boat : Tag.ITEMS_BOATS.getValues()) {
- MATERIAL_FLAGS.put(boat, 0);
- }
- for (Material banner : Tag.BANNERS.getValues()) {
- MATERIAL_FLAGS.put(banner, 0);
- }
- for (Material slab : Tag.SLABS.getValues()) {
- MATERIAL_FLAGS.put(slab, 0);
- }
- for (Material plank : Tag.PLANKS.getValues()) {
- MATERIAL_FLAGS.put(plank, 0);
- }
- for (Material carpet : Tag.WOOL_CARPETS.getValues()) {
- MATERIAL_FLAGS.put(carpet, 0);
- }
- for (Material sapling : Tag.SAPLINGS.getValues()) {
- MATERIAL_FLAGS.put(sapling, 0);
- }
- for (Material log : Tag.LOGS.getValues()) {
- MATERIAL_FLAGS.put(log, 0);
- }
- for (Material leaves : Tag.LEAVES.getValues()) {
- MATERIAL_FLAGS.put(leaves, 0);
- }
- for (Material stair : Tag.STAIRS.getValues()) {
- MATERIAL_FLAGS.put(stair, 0);
- }
- for (Material wool : Tag.WOOL.getValues()) {
- MATERIAL_FLAGS.put(wool, 0);
- }
- for (Material plate : Tag.WOODEN_PRESSURE_PLATES.getValues()) {
- MATERIAL_FLAGS.put(plate, 0);
- }
- for (Material button : Tag.BUTTONS.getValues()) {
- MATERIAL_FLAGS.put(button, MODIFIED_ON_RIGHT);
- }
- for (Material pot : Tag.FLOWER_POTS.getValues()) {
- MATERIAL_FLAGS.put(pot, MODIFIED_ON_RIGHT);
- }
- for (Material wall : Tag.WALLS.getValues()) {
- MATERIAL_FLAGS.put(wall, 0);
- }
- for (Material sign : Tag.SIGNS.getValues()) {
- MATERIAL_FLAGS.put(sign, 0);
- }
- for (Material flower : Tag.SMALL_FLOWERS.getValues()) {
- MATERIAL_FLAGS.put(flower, 0);
- }
- for (Material bed : Tag.BEDS.getValues()) {
- MATERIAL_FLAGS.put(bed, MODIFIED_ON_RIGHT);
- }
- for (Material musicDisc : Tag.ITEMS_MUSIC_DISCS.getValues()) {
- MATERIAL_FLAGS.put(musicDisc, 0);
- }
- for (Material bannerPat : Tag.ITEMS_BANNERS.getValues()) {
- MATERIAL_FLAGS.put(bannerPat, 0);
- }
- for (Material fenceGate : Tag.FENCE_GATES.getValues()) {
- MATERIAL_FLAGS.put(fenceGate, MODIFIED_ON_RIGHT);
- }
- for (Material fence : Tag.FENCES.getValues()) {
- MATERIAL_FLAGS.put(fence, 0);
- } for (Material coalOre : Tag.COAL_ORES.getValues()) {
- MATERIAL_FLAGS.put(coalOre, 0);
- }
- for (Material ironOre : Tag.IRON_ORES.getValues()) {
- MATERIAL_FLAGS.put(ironOre, 0);
- }
- for (Material goldOre : Tag.GOLD_ORES.getValues()) {
- MATERIAL_FLAGS.put(goldOre, 0);
- }
- for (Material diamondOre : Tag.DIAMOND_ORES.getValues()) {
- MATERIAL_FLAGS.put(diamondOre, 0);
- }
- for (Material redstoneOre : Tag.REDSTONE_ORES.getValues()) {
- MATERIAL_FLAGS.put(redstoneOre, 0);
- }
- for (Material copperOre : Tag.COPPER_ORES.getValues()) {
- MATERIAL_FLAGS.put(copperOre, 0);
- }
- for (Material emeraldOre : Tag.EMERALD_ORES.getValues()) {
- MATERIAL_FLAGS.put(emeraldOre, 0);
- }
- for (Material lapisOre : Tag.LAPIS_ORES.getValues()) {
- MATERIAL_FLAGS.put(lapisOre, 0);
- }
- for (Material candle : Tag.CANDLES.getValues()) {
- MATERIAL_FLAGS.put(candle, MODIFIED_ON_RIGHT);
- }
- for (Material candleCakes : Tag.CANDLE_CAKES.getValues()) {
- MATERIAL_FLAGS.put(candleCakes, MODIFIED_ON_RIGHT);
- }
- for (Material cauldron : Tag.CAULDRONS.getValues()) {
- MATERIAL_FLAGS.put(cauldron, MODIFIED_ON_RIGHT);
- }
+ putMaterialTag(Tag.WOODEN_DOORS, MODIFIED_ON_RIGHT);
+ putMaterialTag(Tag.WOODEN_TRAPDOORS, MODIFIED_ON_RIGHT);
+ putMaterialTag(Tag.SHULKER_BOXES, MODIFIED_ON_RIGHT);
+ putMaterialTag(Tag.ITEMS_BOATS, 0);
+ putMaterialTag(Tag.BANNERS, 0);
+ putMaterialTag(Tag.SLABS, 0);
+ putMaterialTag(Tag.PLANKS, 0);
+ putMaterialTag(Tag.WOOL_CARPETS, 0);
+ putMaterialTag(Tag.SAPLINGS, 0);
+ putMaterialTag(Tag.LOGS, 0);
+ putMaterialTag(Tag.LEAVES, 0);
+ putMaterialTag(Tag.STAIRS, 0);
+ putMaterialTag(Tag.WOOL, 0);
+ putMaterialTag(Tag.WOODEN_PRESSURE_PLATES, 0);
+ putMaterialTag(Tag.BUTTONS, MODIFIED_ON_RIGHT);
+ putMaterialTag(Tag.FLOWER_POTS, MODIFIED_ON_RIGHT);
+ putMaterialTag(Tag.WALLS, 0);
+ putMaterialTag(SIGNS_TAG, 0);
+ putMaterialTag(Tag.SMALL_FLOWERS, 0);
+ putMaterialTag(Tag.BEDS, MODIFIED_ON_RIGHT);
+ putMaterialTag(Tag.ITEMS_MUSIC_DISCS, 0);
+ putMaterialTag(Tag.ITEMS_BANNERS, 0);
+ putMaterialTag(Tag.FENCE_GATES, MODIFIED_ON_RIGHT);
+ putMaterialTag(Tag.FENCES, 0);
+
+ putMaterialTag(Tag.COAL_ORES, 0);
+ putMaterialTag(Tag.IRON_ORES, 0);
+ putMaterialTag(Tag.GOLD_ORES, 0);
+ putMaterialTag(Tag.DIAMOND_ORES, 0);
+ putMaterialTag(Tag.REDSTONE_ORES, 0);
+ putMaterialTag(Tag.COPPER_ORES, 0);
+ putMaterialTag(Tag.EMERALD_ORES, 0);
+ putMaterialTag(Tag.LAPIS_ORES, 0);
+ putMaterialTag(Tag.CANDLES, MODIFIED_ON_RIGHT);
+ putMaterialTag(Tag.CANDLE_CAKES, MODIFIED_ON_RIGHT);
+ putMaterialTag(Tag.CAULDRONS, MODIFIED_ON_RIGHT);
Stream.concat(Stream.concat(
Tag.CORAL_BLOCKS.getValues().stream(),
@@ -1170,173 +1118,89 @@ public final class Materials {
}
public static boolean isSpawnEgg(Material material) {
- return switch (material) {
- case AXOLOTL_SPAWN_EGG, BAT_SPAWN_EGG, BEE_SPAWN_EGG, BLAZE_SPAWN_EGG, CAT_SPAWN_EGG,
- CAVE_SPIDER_SPAWN_EGG, CHICKEN_SPAWN_EGG, COD_SPAWN_EGG, COW_SPAWN_EGG, CREEPER_SPAWN_EGG,
- DOLPHIN_SPAWN_EGG, DONKEY_SPAWN_EGG, DROWNED_SPAWN_EGG, ELDER_GUARDIAN_SPAWN_EGG,
- ENDERMAN_SPAWN_EGG, ENDERMITE_SPAWN_EGG, EVOKER_SPAWN_EGG, FOX_SPAWN_EGG,
- GHAST_SPAWN_EGG, GLOW_SQUID_SPAWN_EGG, GOAT_SPAWN_EGG, GUARDIAN_SPAWN_EGG,
- HOGLIN_SPAWN_EGG, HORSE_SPAWN_EGG, HUSK_SPAWN_EGG, LLAMA_SPAWN_EGG, MAGMA_CUBE_SPAWN_EGG,
- MOOSHROOM_SPAWN_EGG, MULE_SPAWN_EGG, OCELOT_SPAWN_EGG, PANDA_SPAWN_EGG, PARROT_SPAWN_EGG,
- PHANTOM_SPAWN_EGG, PIGLIN_BRUTE_SPAWN_EGG, PIGLIN_SPAWN_EGG, PIG_SPAWN_EGG, PILLAGER_SPAWN_EGG,
- POLAR_BEAR_SPAWN_EGG, PUFFERFISH_SPAWN_EGG, RABBIT_SPAWN_EGG, RAVAGER_SPAWN_EGG,
- SALMON_SPAWN_EGG, SHEEP_SPAWN_EGG, SHULKER_SPAWN_EGG, SILVERFISH_SPAWN_EGG,
- SKELETON_HORSE_SPAWN_EGG, SKELETON_SPAWN_EGG, SLIME_SPAWN_EGG, SPIDER_SPAWN_EGG,
- SQUID_SPAWN_EGG, STRAY_SPAWN_EGG, STRIDER_SPAWN_EGG, TRADER_LLAMA_SPAWN_EGG,
- TROPICAL_FISH_SPAWN_EGG, TURTLE_SPAWN_EGG, VEX_SPAWN_EGG, VILLAGER_SPAWN_EGG,
- VINDICATOR_SPAWN_EGG, WANDERING_TRADER_SPAWN_EGG, WITCH_SPAWN_EGG, WITHER_SKELETON_SPAWN_EGG,
- WOLF_SPAWN_EGG, ZOGLIN_SPAWN_EGG, ZOMBIE_HORSE_SPAWN_EGG, ZOMBIFIED_PIGLIN_SPAWN_EGG,
- ZOMBIE_SPAWN_EGG, ZOMBIE_VILLAGER_SPAWN_EGG, ALLAY_SPAWN_EGG, FROG_SPAWN_EGG, TADPOLE_SPAWN_EGG,
- WARDEN_SPAWN_EGG ->
- true;
- default -> false;
- };
+ return getEntitySpawnEgg(material) != null;
}
public static EntityType getEntitySpawnEgg(Material material) {
- switch (material) {
- case ALLAY_SPAWN_EGG:
- return EntityType.ALLAY;
- case AXOLOTL_SPAWN_EGG:
- return EntityType.AXOLOTL;
- case SPIDER_SPAWN_EGG:
- return EntityType.SPIDER;
- case BAT_SPAWN_EGG:
- return EntityType.BAT;
- case BEE_SPAWN_EGG:
- return EntityType.BEE;
- case BLAZE_SPAWN_EGG:
- return EntityType.BLAZE;
- case CAT_SPAWN_EGG:
- return EntityType.CAT;
- case CAVE_SPIDER_SPAWN_EGG:
- return EntityType.CAVE_SPIDER;
- case CHICKEN_SPAWN_EGG:
- return EntityType.CHICKEN;
- case COD_SPAWN_EGG:
- return EntityType.COD;
- case COW_SPAWN_EGG:
- return EntityType.COW;
- case CREEPER_SPAWN_EGG:
- return EntityType.CREEPER;
- case DOLPHIN_SPAWN_EGG:
- return EntityType.DOLPHIN;
- case DONKEY_SPAWN_EGG:
- return EntityType.DONKEY;
- case DROWNED_SPAWN_EGG:
- return EntityType.DROWNED;
- case ELDER_GUARDIAN_SPAWN_EGG:
- return EntityType.ELDER_GUARDIAN;
- case ENDERMAN_SPAWN_EGG:
- return EntityType.ENDERMAN;
- case ENDERMITE_SPAWN_EGG:
- return EntityType.ENDERMITE;
- case EVOKER_SPAWN_EGG:
- return EntityType.EVOKER;
- case FOX_SPAWN_EGG:
- return EntityType.FOX;
- case FROG_SPAWN_EGG:
- return EntityType.FROG;
- case GHAST_SPAWN_EGG:
- return EntityType.GHAST;
- case GLOW_SQUID_SPAWN_EGG:
- return EntityType.GLOW_SQUID;
- case GOAT_SPAWN_EGG:
- return EntityType.GOAT;
- case GUARDIAN_SPAWN_EGG:
- return EntityType.GUARDIAN;
- case HOGLIN_SPAWN_EGG:
- return EntityType.HOGLIN;
- case HORSE_SPAWN_EGG:
- return EntityType.HORSE;
- case HUSK_SPAWN_EGG:
- return EntityType.HUSK;
- case LLAMA_SPAWN_EGG:
- return EntityType.LLAMA;
- case MAGMA_CUBE_SPAWN_EGG:
- return EntityType.MAGMA_CUBE;
- case MOOSHROOM_SPAWN_EGG:
- return EntityType.MUSHROOM_COW;
- case MULE_SPAWN_EGG:
- return EntityType.MULE;
- case OCELOT_SPAWN_EGG:
- return EntityType.OCELOT;
- case PANDA_SPAWN_EGG:
- return EntityType.PANDA;
- case PARROT_SPAWN_EGG:
- return EntityType.PARROT;
- case PHANTOM_SPAWN_EGG:
- return EntityType.PHANTOM;
- case PIGLIN_BRUTE_SPAWN_EGG:
- return EntityType.PIGLIN_BRUTE;
- case PIGLIN_SPAWN_EGG:
- return EntityType.PIGLIN;
- case PILLAGER_SPAWN_EGG:
- return EntityType.PILLAGER;
- case POLAR_BEAR_SPAWN_EGG:
- return EntityType.POLAR_BEAR;
- case PUFFERFISH_SPAWN_EGG:
- return EntityType.PUFFERFISH;
- case RABBIT_SPAWN_EGG:
- return EntityType.RABBIT;
- case RAVAGER_SPAWN_EGG:
- return EntityType.RAVAGER;
- case SALMON_SPAWN_EGG:
- return EntityType.SALMON;
- case SHEEP_SPAWN_EGG:
- return EntityType.SHEEP;
- case SHULKER_SPAWN_EGG:
- return EntityType.SHULKER;
- case SILVERFISH_SPAWN_EGG:
- return EntityType.SILVERFISH;
- case SKELETON_HORSE_SPAWN_EGG:
- return EntityType.SKELETON_HORSE;
- case SKELETON_SPAWN_EGG:
- return EntityType.SKELETON;
- case SLIME_SPAWN_EGG:
- return EntityType.SLIME;
- case SQUID_SPAWN_EGG:
- return EntityType.SQUID;
- case STRAY_SPAWN_EGG:
- return EntityType.STRAY;
- case STRIDER_SPAWN_EGG:
- return EntityType.STRIDER;
- case TADPOLE_SPAWN_EGG:
- return EntityType.TADPOLE;
- case TRADER_LLAMA_SPAWN_EGG:
- return EntityType.TRADER_LLAMA;
- case TROPICAL_FISH_SPAWN_EGG:
- return EntityType.TROPICAL_FISH;
- case TURTLE_SPAWN_EGG:
- return EntityType.TURTLE;
- case VEX_SPAWN_EGG:
- return EntityType.VEX;
- case VILLAGER_SPAWN_EGG:
- return EntityType.VILLAGER;
- case VINDICATOR_SPAWN_EGG:
- return EntityType.VINDICATOR;
- case WANDERING_TRADER_SPAWN_EGG:
- return EntityType.WANDERING_TRADER;
- case WARDEN_SPAWN_EGG:
- return EntityType.WARDEN;
- case WITCH_SPAWN_EGG:
- return EntityType.WITCH;
- case WITHER_SKELETON_SPAWN_EGG:
- return EntityType.WITHER_SKELETON;
- case WOLF_SPAWN_EGG:
- return EntityType.WOLF;
- case ZOMBIE_HORSE_SPAWN_EGG:
- return EntityType.ZOMBIE_HORSE;
- case ZOMBIFIED_PIGLIN_SPAWN_EGG:
- return EntityType.ZOMBIFIED_PIGLIN;
- case ZOMBIE_SPAWN_EGG:
- return EntityType.ZOMBIE;
- case ZOMBIE_VILLAGER_SPAWN_EGG:
- return EntityType.ZOMBIE_VILLAGER;
- case PIG_SPAWN_EGG:
- default: // Uhh
- return EntityType.PIG;
- }
+ return switch (material) {
+ case ALLAY_SPAWN_EGG -> EntityType.ALLAY;
+ case AXOLOTL_SPAWN_EGG -> EntityType.AXOLOTL;
+ case SPIDER_SPAWN_EGG -> EntityType.SPIDER;
+ case BAT_SPAWN_EGG -> EntityType.BAT;
+ case BEE_SPAWN_EGG -> EntityType.BEE;
+ case BLAZE_SPAWN_EGG -> EntityType.BLAZE;
+ case CAT_SPAWN_EGG -> EntityType.CAT;
+ case CAMEL_SPAWN_EGG -> EntityType.CAMEL;
+ case CAVE_SPIDER_SPAWN_EGG -> EntityType.CAVE_SPIDER;
+ case CHICKEN_SPAWN_EGG -> EntityType.CHICKEN;
+ case COD_SPAWN_EGG -> EntityType.COD;
+ case COW_SPAWN_EGG -> EntityType.COW;
+ case CREEPER_SPAWN_EGG -> EntityType.CREEPER;
+ case DOLPHIN_SPAWN_EGG -> EntityType.DOLPHIN;
+ case DONKEY_SPAWN_EGG -> EntityType.DONKEY;
+ case DROWNED_SPAWN_EGG -> EntityType.DROWNED;
+ case ELDER_GUARDIAN_SPAWN_EGG -> EntityType.ELDER_GUARDIAN;
+ case ENDER_DRAGON_SPAWN_EGG -> EntityType.ENDER_DRAGON;
+ case ENDERMAN_SPAWN_EGG -> EntityType.ENDERMAN;
+ case ENDERMITE_SPAWN_EGG -> EntityType.ENDERMITE;
+ case EVOKER_SPAWN_EGG -> EntityType.EVOKER;
+ case FOX_SPAWN_EGG -> EntityType.FOX;
+ case FROG_SPAWN_EGG -> EntityType.FROG;
+ case GHAST_SPAWN_EGG -> EntityType.GHAST;
+ case GLOW_SQUID_SPAWN_EGG -> EntityType.GLOW_SQUID;
+ case GOAT_SPAWN_EGG -> EntityType.GOAT;
+ case GUARDIAN_SPAWN_EGG -> EntityType.GUARDIAN;
+ case HOGLIN_SPAWN_EGG -> EntityType.HOGLIN;
+ case HORSE_SPAWN_EGG -> EntityType.HORSE;
+ case HUSK_SPAWN_EGG -> EntityType.HUSK;
+ case IRON_GOLEM_SPAWN_EGG -> EntityType.IRON_GOLEM;
+ case LLAMA_SPAWN_EGG -> EntityType.LLAMA;
+ case MAGMA_CUBE_SPAWN_EGG -> EntityType.MAGMA_CUBE;
+ case MOOSHROOM_SPAWN_EGG -> EntityType.MUSHROOM_COW;
+ case MULE_SPAWN_EGG -> EntityType.MULE;
+ case OCELOT_SPAWN_EGG -> EntityType.OCELOT;
+ case PANDA_SPAWN_EGG -> EntityType.PANDA;
+ case PARROT_SPAWN_EGG -> EntityType.PARROT;
+ case PHANTOM_SPAWN_EGG -> EntityType.PHANTOM;
+ case PIGLIN_BRUTE_SPAWN_EGG -> EntityType.PIGLIN_BRUTE;
+ case PIGLIN_SPAWN_EGG -> EntityType.PIGLIN;
+ case PILLAGER_SPAWN_EGG -> EntityType.PILLAGER;
+ case POLAR_BEAR_SPAWN_EGG -> EntityType.POLAR_BEAR;
+ case PUFFERFISH_SPAWN_EGG -> EntityType.PUFFERFISH;
+ case RABBIT_SPAWN_EGG -> EntityType.RABBIT;
+ case RAVAGER_SPAWN_EGG -> EntityType.RAVAGER;
+ case SALMON_SPAWN_EGG -> EntityType.SALMON;
+ case SHEEP_SPAWN_EGG -> EntityType.SHEEP;
+ case SHULKER_SPAWN_EGG -> EntityType.SHULKER;
+ case SILVERFISH_SPAWN_EGG -> EntityType.SILVERFISH;
+ case SKELETON_HORSE_SPAWN_EGG -> EntityType.SKELETON_HORSE;
+ case SKELETON_SPAWN_EGG -> EntityType.SKELETON;
+ case SLIME_SPAWN_EGG -> EntityType.SLIME;
+ case SNOW_GOLEM_SPAWN_EGG -> EntityType.SNOWMAN;
+ case SQUID_SPAWN_EGG -> EntityType.SQUID;
+ case STRAY_SPAWN_EGG -> EntityType.STRAY;
+ case STRIDER_SPAWN_EGG -> EntityType.STRIDER;
+ case TADPOLE_SPAWN_EGG -> EntityType.TADPOLE;
+ case TRADER_LLAMA_SPAWN_EGG -> EntityType.TRADER_LLAMA;
+ case TROPICAL_FISH_SPAWN_EGG -> EntityType.TROPICAL_FISH;
+ case TURTLE_SPAWN_EGG -> EntityType.TURTLE;
+ case VEX_SPAWN_EGG -> EntityType.VEX;
+ case VILLAGER_SPAWN_EGG -> EntityType.VILLAGER;
+ case VINDICATOR_SPAWN_EGG -> EntityType.VINDICATOR;
+ case WANDERING_TRADER_SPAWN_EGG -> EntityType.WANDERING_TRADER;
+ case WARDEN_SPAWN_EGG -> EntityType.WARDEN;
+ case WITCH_SPAWN_EGG -> EntityType.WITCH;
+ case WITHER_SPAWN_EGG -> EntityType.WITHER;
+ case WITHER_SKELETON_SPAWN_EGG -> EntityType.WITHER_SKELETON;
+ case WOLF_SPAWN_EGG -> EntityType.WOLF;
+ case ZOGLIN_SPAWN_EGG -> EntityType.ZOGLIN;
+ case ZOMBIE_HORSE_SPAWN_EGG -> EntityType.ZOMBIE_HORSE;
+ case ZOMBIFIED_PIGLIN_SPAWN_EGG -> EntityType.ZOMBIFIED_PIGLIN;
+ case ZOMBIE_SPAWN_EGG -> EntityType.ZOMBIE;
+ case ZOMBIE_VILLAGER_SPAWN_EGG -> EntityType.ZOMBIE_VILLAGER;
+ case PIG_SPAWN_EGG -> EntityType.PIG;
+ default -> null;
+ };
}
public static boolean isBed(Material material) {
@@ -1360,9 +1224,10 @@ public final class Materials {
* @return true if the material is a crop
*/
public static boolean isCrop(Material type) {
+ if (Tag.CROPS.isTagged(type)) return true;
+ // yea, that's not all, there are some more
return switch (type) {
- case WHEAT, CARROTS, POTATOES, BEETROOTS, MELON_STEM, PUMPKIN_STEM,
- PUMPKIN, MELON, CACTUS, SUGAR_CANE, BAMBOO, BAMBOO_SAPLING,
+ case PUMPKIN, MELON, CACTUS, SUGAR_CANE, BAMBOO, BAMBOO_SAPLING,
SWEET_BERRY_BUSH, NETHER_WART, CAVE_VINES, CAVE_VINES_PLANT ->
true;
default -> false;
@@ -1517,7 +1382,6 @@ public final class Materials {
case NETHERITE_HOE:
return switch (targetMaterial) {
case GRASS_BLOCK, DIRT, DIRT_PATH, ROOTED_DIRT ->
- // case COARSE_DIRT: // already handled by the server...
true;
default -> false;
};
@@ -1527,11 +1391,10 @@ public final class Materials {
case GOLDEN_AXE:
case DIAMOND_AXE:
case NETHERITE_AXE:
- if (isWaxedCopper(targetMaterial))
- return true;
+ if (isWaxedCopper(targetMaterial)) return true;
+ if (Tag.LOGS.isTagged(targetMaterial)) return true;
return switch (targetMaterial) {
- case OAK_LOG, DARK_OAK_LOG, ACACIA_LOG, BIRCH_LOG, SPRUCE_LOG, JUNGLE_LOG,
- OAK_WOOD, DARK_OAK_WOOD, ACACIA_WOOD, BIRCH_WOOD, SPRUCE_WOOD,
+ case OAK_WOOD, DARK_OAK_WOOD, ACACIA_WOOD, BIRCH_WOOD, SPRUCE_WOOD, PUMPKIN, BAMBOO_BLOCK,
JUNGLE_WOOD, CRIMSON_STEM, WARPED_STEM, CRIMSON_HYPHAE, WARPED_HYPHAE ->
true;
default -> false;
@@ -1569,7 +1432,7 @@ public final class Materials {
case YELLOW_DYE:
case GLOW_INK_SAC:
case INK_SAC:
- return Tag.SIGNS.isTagged(targetMaterial);
+ return SIGNS_TAG.isTagged(targetMaterial);
case HONEYCOMB:
return isUnwaxedCopper(targetMaterial);
default:
diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/report/DatapackReport.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/report/DatapackReport.java
new file mode 100644
index 00000000..56fc3b45
--- /dev/null
+++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/report/DatapackReport.java
@@ -0,0 +1,48 @@
+/*
+ * WorldGuard, a suite of tools for Minecraft
+ * Copyright (C) sk89q
+ * Copyright (C) WorldGuard team and contributors
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by the
+ * Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see .
+ */
+
+package com.sk89q.worldguard.bukkit.util.report;
+
+import com.sk89q.worldedit.util.report.DataReport;
+import io.papermc.paper.datapack.Datapack;
+import org.bukkit.Bukkit;
+
+import java.util.Collection;
+
+/**
+ * A report for current datapacks with some information. Only available on Paper
+ */
+public class DatapackReport extends DataReport {
+ public DatapackReport() {
+ super("DataPacks");
+
+ Collection packs = Bukkit.getDatapackManager().getPacks();
+
+ append("Datapack Count", packs.size());
+ append("Datapack Enabled Count", Bukkit.getDatapackManager().getEnabledPacks().size());
+
+ for (Datapack pack : packs) {
+ DataReport report = new DataReport("DataPack: " + pack.getName());
+ report.append("Enabled?", pack.isEnabled());
+ report.append("Name", pack.getName());
+ report.append("Compatibility", pack.getCompatibility().name());
+ append(report.getTitle(), report);
+ }
+ }
+}
diff --git a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/report/ServerReport.java b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/report/ServerReport.java
index 300f809e..fd069f78 100644
--- a/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/report/ServerReport.java
+++ b/worldguard-bukkit/src/main/java/com/sk89q/worldguard/bukkit/util/report/ServerReport.java
@@ -42,7 +42,7 @@ public class ServerReport extends DataReport {
onlineMode.append("BungeeCord support?", Bukkit.spigot().getConfig().getBoolean("settings.bungeecord", false));
}
if (PaperLib.isPaper()) {
- onlineMode.append("Velocity support?", Bukkit.spigot().getPaperConfig().getBoolean("settings.velocity-support.enabled", false));
+ onlineMode.append("Velocity support?", Bukkit.spigot().getPaperConfig().getBoolean("proxies.velocity.enabled", false));
}
append(onlineMode.getTitle(), onlineMode);
diff --git a/worldguard-core/build.gradle.kts b/worldguard-core/build.gradle.kts
index 33be66e5..a7283a2c 100644
--- a/worldguard-core/build.gradle.kts
+++ b/worldguard-core/build.gradle.kts
@@ -8,11 +8,11 @@ dependencies {
"api"(project(":worldguard-libs:core"))
"api"("com.sk89q.worldedit:worldedit-core:${Versions.WORLDEDIT}")
"implementation"("org.flywaydb:flyway-core:3.0")
- "implementation"("org.yaml:snakeyaml:1.30")
+ "implementation"("org.yaml:snakeyaml:1.33")
"implementation"("com.google.guava:guava:${Versions.GUAVA}")
"compileOnly"("com.google.code.findbugs:jsr305:${Versions.FINDBUGS}")
- "testImplementation"("org.hamcrest:hamcrest-library:1.2.1")
+ "testImplementation"("org.hamcrest:hamcrest-library:2.2")
}
tasks.withType().configureEach {
diff --git a/worldguard-core/src/main/java/com/sk89q/worldguard/config/WorldConfiguration.java b/worldguard-core/src/main/java/com/sk89q/worldguard/config/WorldConfiguration.java
index 33a92339..55f19de1 100644
--- a/worldguard-core/src/main/java/com/sk89q/worldguard/config/WorldConfiguration.java
+++ b/worldguard-core/src/main/java/com/sk89q/worldguard/config/WorldConfiguration.java
@@ -165,6 +165,7 @@ public abstract class WorldConfiguration {
public boolean disableSnowmanTrails;
public boolean disableSoilDehydration;
public boolean disableCoralBlockFade;
+ public boolean disableCopperBlockFade;
public Set allowedSnowFallOver;
public boolean regionInvinciblityRemovesMobs;
public boolean regionCancelEmptyChatEvents;
diff --git a/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/Flags.java b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/Flags.java
index b8ccfb3f..24cc675e 100644
--- a/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/Flags.java
+++ b/worldguard-core/src/main/java/com/sk89q/worldguard/protection/flags/Flags.java
@@ -125,6 +125,7 @@ public final class Flags {
public static final StateFlag CROP_GROWTH = register(new StateFlag("crop-growth", true));
public static final StateFlag SOIL_DRY = register(new StateFlag("soil-dry", true));
public static final StateFlag CORAL_FADE = register(new StateFlag("coral-fade", true));
+ public static final StateFlag COPPER_FADE = register(new StateFlag("copper-fade", true));
public static final StateFlag WATER_FLOW = register(new StateFlag("water-flow", true));
public static final StateFlag LAVA_FLOW = register(new StateFlag("lava-flow", true));
diff --git a/worldguard-libs/core/build.gradle.kts b/worldguard-libs/core/build.gradle.kts
index 7e3a7450..035191ed 100644
--- a/worldguard-libs/core/build.gradle.kts
+++ b/worldguard-libs/core/build.gradle.kts
@@ -3,9 +3,7 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
applyLibrariesConfiguration()
dependencies {
- "shade"("org.enginehub:squirrelid:${Versions.SQUIRRELID}") {
- exclude(group = "com.destroystokyo.paper", module = "paper-api")
- }
+ "shade"("org.enginehub:squirrelid:${Versions.SQUIRRELID}")
"shade"("org.khelekore:prtree:1.5.0")
}
@@ -17,4 +15,4 @@ tasks.named("jar") {
include(dependency("org.khelekore:prtree"))
}
-}
\ No newline at end of file
+}