mirror of
https://github.com/PaperMC/Paper.git
synced 2025-08-01 04:32:11 -07:00
Add PlayerRespawnEvent#isMissingRespawnBlock (#12422)
This commit is contained in:
@@ -18,8 +18,9 @@ public class PlayerRespawnEvent extends PlayerEvent {
|
||||
private Location respawnLocation;
|
||||
private final boolean isBedSpawn;
|
||||
private final boolean isAnchorSpawn;
|
||||
private final boolean missingRespawnBlock;
|
||||
private final RespawnReason respawnReason;
|
||||
private final java.util.Set<RespawnFlag> respawnFlags; // Paper
|
||||
private final java.util.Set<RespawnFlag> respawnFlags;
|
||||
|
||||
@Deprecated(since = "1.16.1", forRemoval = true)
|
||||
public PlayerRespawnEvent(@NotNull final Player respawnPlayer, @NotNull final Location respawnLocation, final boolean isBedSpawn) {
|
||||
@@ -33,23 +34,20 @@ public class PlayerRespawnEvent extends PlayerEvent {
|
||||
|
||||
@Deprecated(forRemoval = true)
|
||||
public PlayerRespawnEvent(@NotNull final Player respawnPlayer, @NotNull final Location respawnLocation, final boolean isBedSpawn, final boolean isAnchorSpawn, @NotNull final RespawnReason respawnReason) {
|
||||
// Paper start
|
||||
this(respawnPlayer, respawnLocation, isBedSpawn, isAnchorSpawn, respawnReason, com.google.common.collect.ImmutableSet.builder());
|
||||
this(respawnPlayer, respawnLocation, isBedSpawn, isAnchorSpawn, false, respawnReason, com.google.common.collect.ImmutableSet.builder());
|
||||
}
|
||||
|
||||
@ApiStatus.Internal
|
||||
public PlayerRespawnEvent(@NotNull final Player respawnPlayer, @NotNull final Location respawnLocation, final boolean isBedSpawn, final boolean isAnchorSpawn, @NotNull final RespawnReason respawnReason, @NotNull final com.google.common.collect.ImmutableSet.Builder<org.bukkit.event.player.PlayerRespawnEvent.RespawnFlag> respawnFlags) {
|
||||
// Paper end
|
||||
public PlayerRespawnEvent(@NotNull final Player respawnPlayer, @NotNull final Location respawnLocation, final boolean isBedSpawn, final boolean isAnchorSpawn, final boolean missingRespawnBlock, @NotNull final RespawnReason respawnReason, @NotNull final com.google.common.collect.ImmutableSet.Builder<org.bukkit.event.player.PlayerRespawnEvent.RespawnFlag> respawnFlags) {
|
||||
super(respawnPlayer);
|
||||
this.respawnLocation = respawnLocation;
|
||||
this.isBedSpawn = isBedSpawn;
|
||||
this.isAnchorSpawn = isAnchorSpawn;
|
||||
this.respawnReason = respawnReason;
|
||||
// Paper start
|
||||
this.missingRespawnBlock = missingRespawnBlock;
|
||||
if (this.isBedSpawn) { respawnFlags.add(RespawnFlag.BED_SPAWN); }
|
||||
if (this.isAnchorSpawn) { respawnFlags.add(RespawnFlag.ANCHOR_SPAWN); }
|
||||
this.respawnFlags = respawnFlags.build();
|
||||
// Paper end
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -92,6 +90,19 @@ public class PlayerRespawnEvent extends PlayerEvent {
|
||||
return isAnchorSpawn;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets whether the player is missing a valid respawn block.
|
||||
* <p>
|
||||
* This will occur if the players respawn block is obstructed,
|
||||
* or it is the first death after it was either destroyed or
|
||||
* in case of a respawn anchor, ran out of charges.
|
||||
*
|
||||
* @return whether the player is missing a valid respawn block
|
||||
*/
|
||||
public boolean isMissingRespawnBlock() {
|
||||
return this.missingRespawnBlock;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the reason this respawn event was called.
|
||||
*
|
||||
@@ -132,7 +143,6 @@ public class PlayerRespawnEvent extends PlayerEvent {
|
||||
PLUGIN;
|
||||
}
|
||||
|
||||
// Paper start
|
||||
/**
|
||||
* Get the set of flags that apply to this respawn.
|
||||
*
|
||||
@@ -157,5 +167,4 @@ public class PlayerRespawnEvent extends PlayerEvent {
|
||||
*/
|
||||
END_PORTAL,
|
||||
}
|
||||
// Paper end
|
||||
}
|
||||
|
@@ -518,7 +518,7 @@
|
||||
BlockPos respawnPosition = this.getRespawnPosition();
|
||||
float respawnAngle = this.getRespawnAngle();
|
||||
boolean isRespawnForced = this.isRespawnForced();
|
||||
@@ -973,13 +_,66 @@
|
||||
@@ -973,13 +_,67 @@
|
||||
Optional<ServerPlayer.RespawnPosAngle> optional = findRespawnAndUseSpawnBlock(level, respawnPosition, respawnAngle, isRespawnForced, useCharge);
|
||||
if (optional.isPresent()) {
|
||||
ServerPlayer.RespawnPosAngle respawnPosAngle = optional.get();
|
||||
@@ -560,6 +560,7 @@
|
||||
+ location,
|
||||
+ isBedSpawn,
|
||||
+ isAnchorSpawn,
|
||||
+ teleportTransition.missingRespawnBlock(),
|
||||
+ respawnReason,
|
||||
+ builder
|
||||
+ );
|
||||
|
@@ -36,3 +36,28 @@
|
||||
return Math.max(fraction.divideBy(BundleContents.getWeight(stack)).intValue(), 0);
|
||||
}
|
||||
|
||||
@@ -206,15 +_,21 @@
|
||||
}
|
||||
|
||||
public void toggleSelectedItem(int selectedItem) {
|
||||
- this.selectedItem = this.selectedItem != selectedItem && selectedItem < this.items.size() ? selectedItem : -1;
|
||||
- }
|
||||
+ this.selectedItem = !indexIsOutsideAllowedBounds(selectedItem) ? selectedItem : -1; // Paper
|
||||
+ }
|
||||
+
|
||||
+ // Paper start
|
||||
+ private boolean indexIsOutsideAllowedBounds(int param0) {
|
||||
+ return param0 < 0 || param0 >= this.items.size();
|
||||
+ }
|
||||
+ // Paper end
|
||||
|
||||
@Nullable
|
||||
public ItemStack removeOne() {
|
||||
if (this.items.isEmpty()) {
|
||||
return null;
|
||||
} else {
|
||||
- int i = this.selectedItem != -1 && this.selectedItem < this.items.size() ? this.selectedItem : 0;
|
||||
+ int i = !indexIsOutsideAllowedBounds(this.selectedItem) ? this.selectedItem : 0; // Paper
|
||||
ItemStack itemStack = this.items.remove(i).copy();
|
||||
this.weight = this.weight.subtract(BundleContents.getWeight(itemStack).multiplyBy(Fraction.getFraction(itemStack.getCount(), 1)));
|
||||
this.toggleSelectedItem(-1);
|
||||
|
Reference in New Issue
Block a user