From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Jake Potrebic Date: Sun, 12 Jun 2022 11:47:24 -0700 Subject: [PATCH] Add option for strict advancement dimension checks Craftbukkit attempts to translate worlds that use the same generation as the Overworld, The Nether, or The End to use those dimensions when checking the `changed_dimension` criteria trigger, or whether to trigger the `NETHER_TRAVEL` distance trigger. This adds a config option to ignore that and use the exact dimension key of the worlds involved. diff --git a/src/main/java/net/minecraft/advancements/critereon/LocationPredicate.java b/src/main/java/net/minecraft/advancements/critereon/LocationPredicate.java index 5be2d877162922d6f29592e723b7d5aff14e1515..37174de2319e353b2f989d8321758a081c655a3f 100644 --- a/src/main/java/net/minecraft/advancements/critereon/LocationPredicate.java +++ b/src/main/java/net/minecraft/advancements/critereon/LocationPredicate.java @@ -42,7 +42,7 @@ public record LocationPredicate( public boolean matches(ServerLevel world, double x, double y, double z) { if (this.position.isPresent() && !this.position.get().matches(x, y, z)) { return false; - } else if (this.dimension.isPresent() && this.dimension.get() != world.dimension()) { + } else if (this.dimension.isPresent() && this.dimension.get() != (io.papermc.paper.configuration.GlobalConfiguration.get().misc.strictAdvancementDimensionCheck ? world.dimension() : org.bukkit.craftbukkit.util.CraftDimensionUtil.getMainDimensionKey(world))) { // Paper - Add option for strict advancement dimension checks return false; } else { BlockPos blockPos = BlockPos.containing(x, y, z); diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java index c5f3849a5ce90c985faeff04f718491373155cbc..d0a7bcc0dde8b2a9543cf4c0c8d35ab042fb4e3b 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -1349,6 +1349,12 @@ public class ServerPlayer extends Player { ResourceKey maindimensionkey = CraftDimensionUtil.getMainDimensionKey(origin); ResourceKey maindimensionkey1 = CraftDimensionUtil.getMainDimensionKey(this.level()); + // Paper start - Add option for strict advancement dimension checks + if (io.papermc.paper.configuration.GlobalConfiguration.get().misc.strictAdvancementDimensionCheck) { + maindimensionkey = resourcekey; + maindimensionkey1 = resourcekey1; + } + // Paper end - Add option for strict advancement dimension checks CriteriaTriggers.CHANGED_DIMENSION.trigger(this, maindimensionkey, maindimensionkey1); if (maindimensionkey != resourcekey || maindimensionkey1 != resourcekey1) { CriteriaTriggers.CHANGED_DIMENSION.trigger(this, resourcekey, resourcekey1);