mirror of
https://github.com/PaperMC/Paper.git
synced 2025-07-26 09:42:06 -07:00
Don't consume anchor charge if loc changes (#12835)
This commit is contained in:
@@ -501,7 +501,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -927,23 +_,77 @@
|
@@ -927,23 +_,84 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isPvpAllowed() {
|
private boolean isPvpAllowed() {
|
||||||
@@ -515,6 +515,7 @@
|
|||||||
+ TeleportTransition teleportTransition;
|
+ TeleportTransition teleportTransition;
|
||||||
+ boolean isBedSpawn = false;
|
+ boolean isBedSpawn = false;
|
||||||
+ boolean isAnchorSpawn = false;
|
+ boolean isAnchorSpawn = false;
|
||||||
|
+ Runnable consumeAnchorCharge = null;
|
||||||
+ // CraftBukkit end
|
+ // CraftBukkit end
|
||||||
ServerPlayer.RespawnConfig respawnConfig = this.getRespawnConfig();
|
ServerPlayer.RespawnConfig respawnConfig = this.getRespawnConfig();
|
||||||
ServerLevel level = this.server.getLevel(ServerPlayer.RespawnConfig.getDimensionOrDefault(respawnConfig));
|
ServerLevel level = this.server.getLevel(ServerPlayer.RespawnConfig.getDimensionOrDefault(respawnConfig));
|
||||||
@@ -526,6 +527,7 @@
|
|||||||
+ // CraftBukkit start
|
+ // CraftBukkit start
|
||||||
+ isBedSpawn = respawnPosAngle.isBedSpawn();
|
+ isBedSpawn = respawnPosAngle.isBedSpawn();
|
||||||
+ isAnchorSpawn = respawnPosAngle.isAnchorSpawn();
|
+ isAnchorSpawn = respawnPosAngle.isAnchorSpawn();
|
||||||
|
+ consumeAnchorCharge = respawnPosAngle.consumeAnchorCharge();
|
||||||
+ teleportTransition = new TeleportTransition(level, respawnPosAngle.position(), Vec3.ZERO, respawnPosAngle.yaw(), 0.0F, postTeleportTransition);
|
+ teleportTransition = new TeleportTransition(level, respawnPosAngle.position(), Vec3.ZERO, respawnPosAngle.yaw(), 0.0F, postTeleportTransition);
|
||||||
+ // CraftBukkit end
|
+ // CraftBukkit end
|
||||||
} else {
|
} else {
|
||||||
@@ -567,6 +569,11 @@
|
|||||||
+ }
|
+ }
|
||||||
+ // Spigot end
|
+ // Spigot end
|
||||||
+
|
+
|
||||||
|
+ // Paper start - consume anchor charge if location hasn't changed
|
||||||
|
+ if (location.equals(respawnEvent.getRespawnLocation()) && consumeAnchorCharge != null) {
|
||||||
|
+ consumeAnchorCharge.run();
|
||||||
|
+ }
|
||||||
|
+ // Paper end - consume anchor charge if location hasn't changed
|
||||||
+ location = respawnEvent.getRespawnLocation();
|
+ location = respawnEvent.getRespawnLocation();
|
||||||
+
|
+
|
||||||
+ return new TeleportTransition(
|
+ return new TeleportTransition(
|
||||||
@@ -585,16 +592,23 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean isReceivingWaypoints() {
|
public boolean isReceivingWaypoints() {
|
||||||
@@ -978,10 +_,10 @@
|
@@ -974,14 +_,16 @@
|
||||||
level.setBlock(blockPos, blockState.setValue(RespawnAnchorBlock.CHARGE, blockState.getValue(RespawnAnchorBlock.CHARGE) - 1), 3);
|
Block block = blockState.getBlock();
|
||||||
|
if (block instanceof RespawnAnchorBlock && (flag || blockState.getValue(RespawnAnchorBlock.CHARGE) > 0) && RespawnAnchorBlock.canSetSpawn(level)) {
|
||||||
|
Optional<Vec3> optional = RespawnAnchorBlock.findStandUpPosition(EntityType.PLAYER, level, blockPos);
|
||||||
|
+ Runnable consumeAnchorCharge = null; // Paper - Fix SPIGOT-5989 (don't use charge until after respawn event)
|
||||||
|
if (!flag && useCharge && optional.isPresent()) {
|
||||||
|
- level.setBlock(blockPos, blockState.setValue(RespawnAnchorBlock.CHARGE, blockState.getValue(RespawnAnchorBlock.CHARGE) - 1), 3);
|
||||||
|
+ consumeAnchorCharge = () -> level.setBlock(blockPos, blockState.setValue(RespawnAnchorBlock.CHARGE, blockState.getValue(RespawnAnchorBlock.CHARGE) - 1), 3); // Paper - Fix SPIGOT-5989 (don't use charge until after respawn event)
|
||||||
}
|
}
|
||||||
|
+ final Runnable finalConsumeAnchorCharge = consumeAnchorCharge; // Paper - Fix SPIGOT-5989
|
||||||
|
|
||||||
- return optional.map(pos -> ServerPlayer.RespawnPosAngle.of(pos, blockPos));
|
- return optional.map(pos -> ServerPlayer.RespawnPosAngle.of(pos, blockPos));
|
||||||
+ return optional.map(pos -> ServerPlayer.RespawnPosAngle.of(pos, blockPos, false, true)); // CraftBukkit
|
+ return optional.map(pos -> ServerPlayer.RespawnPosAngle.of(pos, blockPos, false, true, finalConsumeAnchorCharge)); // Paper - Fix SPIGOT-5989 (don't use charge until after respawn event)
|
||||||
} else if (block instanceof BedBlock && BedBlock.canSetSpawn(level)) {
|
} else if (block instanceof BedBlock && BedBlock.canSetSpawn(level)) {
|
||||||
return BedBlock.findStandUpPosition(EntityType.PLAYER, level, blockPos, blockState.getValue(BedBlock.FACING), f)
|
return BedBlock.findStandUpPosition(EntityType.PLAYER, level, blockPos, blockState.getValue(BedBlock.FACING), f)
|
||||||
- .map(pos -> ServerPlayer.RespawnPosAngle.of(pos, blockPos));
|
- .map(pos -> ServerPlayer.RespawnPosAngle.of(pos, blockPos));
|
||||||
+ .map(pos -> ServerPlayer.RespawnPosAngle.of(pos, blockPos, true, false)); // CraftBukkit
|
+ .map(pos -> ServerPlayer.RespawnPosAngle.of(pos, blockPos, true, false, null)); // Paper - Fix SPIGOT-5989
|
||||||
} else if (!flag) {
|
} else if (!flag) {
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
} else {
|
} else {
|
||||||
@@ -603,7 +617,7 @@
|
|||||||
boolean isPossibleToRespawnInThis1 = blockState1.getBlock().isPossibleToRespawnInThis(blockState1);
|
boolean isPossibleToRespawnInThis1 = blockState1.getBlock().isPossibleToRespawnInThis(blockState1);
|
||||||
return isPossibleToRespawnInThis && isPossibleToRespawnInThis1
|
return isPossibleToRespawnInThis && isPossibleToRespawnInThis1
|
||||||
- ? Optional.of(new ServerPlayer.RespawnPosAngle(new Vec3(blockPos.getX() + 0.5, blockPos.getY() + 0.1, blockPos.getZ() + 0.5), f))
|
- ? Optional.of(new ServerPlayer.RespawnPosAngle(new Vec3(blockPos.getX() + 0.5, blockPos.getY() + 0.1, blockPos.getZ() + 0.5), f))
|
||||||
+ ? Optional.of(new ServerPlayer.RespawnPosAngle(new Vec3(blockPos.getX() + 0.5, blockPos.getY() + 0.1, blockPos.getZ() + 0.5), f, false, false)) // CraftBukkit
|
+ ? Optional.of(new ServerPlayer.RespawnPosAngle(new Vec3(blockPos.getX() + 0.5, blockPos.getY() + 0.1, blockPos.getZ() + 0.5), f, false, false, null)) // Paper - Fix SPIGOT-5989
|
||||||
: Optional.empty();
|
: Optional.empty();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1399,9 +1413,9 @@
|
|||||||
- public static ServerPlayer.RespawnPosAngle of(Vec3 position, BlockPos towardsPos) {
|
- public static ServerPlayer.RespawnPosAngle of(Vec3 position, BlockPos towardsPos) {
|
||||||
- return new ServerPlayer.RespawnPosAngle(position, calculateLookAtYaw(position, towardsPos));
|
- return new ServerPlayer.RespawnPosAngle(position, calculateLookAtYaw(position, towardsPos));
|
||||||
+ // CraftBukkit start
|
+ // CraftBukkit start
|
||||||
+ public record RespawnPosAngle(Vec3 position, float yaw, boolean isBedSpawn, boolean isAnchorSpawn) {
|
+ public record RespawnPosAngle(Vec3 position, float yaw, boolean isBedSpawn, boolean isAnchorSpawn, @Nullable Runnable consumeAnchorCharge) {
|
||||||
+ public static ServerPlayer.RespawnPosAngle of(Vec3 position, BlockPos towardsPos, boolean isBedSpawn, boolean isAnchorSpawn) {
|
+ public static ServerPlayer.RespawnPosAngle of(Vec3 position, BlockPos towardsPos, boolean isBedSpawn, boolean isAnchorSpawn, @Nullable Runnable consumeAnchorCharge) {
|
||||||
+ return new ServerPlayer.RespawnPosAngle(position, calculateLookAtYaw(position, towardsPos), isBedSpawn, isAnchorSpawn);
|
+ return new ServerPlayer.RespawnPosAngle(position, calculateLookAtYaw(position, towardsPos), isBedSpawn, isAnchorSpawn, consumeAnchorCharge);
|
||||||
+ // CraftBukkit end
|
+ // CraftBukkit end
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user