Mirror von
https://github.com/PaperMC/Paper.git
synchronisiert 2024-11-14 20:10:05 +01:00
Delete some old patches
Dieser Commit ist enthalten in:
Ursprung
09718757bf
Commit
bcf52fe5fd
@ -1,63 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: JRoy <joshroy126@gmail.com>
|
|
||||||
Date: Wed, 15 Jul 2020 21:42:52 -0400
|
|
||||||
Subject: [PATCH] Fix SPIGOT-5989
|
|
||||||
|
|
||||||
Before this fix, if a player was respawning to a respawn anchor and
|
|
||||||
the respawn location was modified away from the anchor with the
|
|
||||||
PlayerRespawnEvent, the anchor would still lose some charge.
|
|
||||||
This fixes that by checking if the modified spawn location is
|
|
||||||
still at a respawn anchor.
|
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
|
|
||||||
index 935061ed5c22b48e43d27fe0840cc69fb60d5344..97a3f29414cd9f11e6a790cb30f7ef25a836b06c 100644
|
|
||||||
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
|
|
||||||
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
|
|
||||||
@@ -804,6 +804,7 @@ public abstract class PlayerList {
|
|
||||||
// Paper start - Add PlayerPostRespawnEvent
|
|
||||||
boolean isBedSpawn = false;
|
|
||||||
boolean isRespawn = false;
|
|
||||||
+ boolean isLocAltered = false; // Paper - Fix SPIGOT-5989
|
|
||||||
// Paper end - Add PlayerPostRespawnEvent
|
|
||||||
|
|
||||||
// CraftBukkit start - fire PlayerRespawnEvent
|
|
||||||
@@ -814,7 +815,7 @@ public abstract class PlayerList {
|
|
||||||
Optional optional;
|
|
||||||
|
|
||||||
if (blockposition != null) {
|
|
||||||
- optional = net.minecraft.world.entity.player.Player.findRespawnPositionAndUseSpawnBlock(worldserver1, blockposition, f, flag1, flag);
|
|
||||||
+ optional = net.minecraft.world.entity.player.Player.findRespawnPositionAndUseSpawnBlock(worldserver1, blockposition, f, flag1, true); // Paper - Fix SPIGOT-5989
|
|
||||||
} else {
|
|
||||||
optional = Optional.empty();
|
|
||||||
}
|
|
||||||
@@ -858,7 +859,12 @@ public abstract class PlayerList {
|
|
||||||
}
|
|
||||||
// Spigot End
|
|
||||||
|
|
||||||
- location = respawnEvent.getRespawnLocation();
|
|
||||||
+ // Paper start - Fix SPIGOT-5989
|
|
||||||
+ if (!location.equals(respawnEvent.getRespawnLocation()) ) {
|
|
||||||
+ location = respawnEvent.getRespawnLocation();
|
|
||||||
+ isLocAltered = true;
|
|
||||||
+ }
|
|
||||||
+ // Paper end - Fix SPIGOT-5989
|
|
||||||
if (!flag) entityplayer.reset(); // SPIGOT-4785
|
|
||||||
isRespawn = true; // Paper - Add PlayerPostRespawnEvent
|
|
||||||
} else {
|
|
||||||
@@ -896,8 +902,14 @@ public abstract class PlayerList {
|
|
||||||
}
|
|
||||||
// entityplayer1.initInventoryMenu();
|
|
||||||
entityplayer1.setHealth(entityplayer1.getHealth());
|
|
||||||
- if (flag2) {
|
|
||||||
- entityplayer1.connection.send(new ClientboundSoundPacket(SoundEvents.RESPAWN_ANCHOR_DEPLETE, SoundSource.BLOCKS, (double) blockposition.getX(), (double) blockposition.getY(), (double) blockposition.getZ(), 1.0F, 1.0F, worldserver1.getRandom().nextLong()));
|
|
||||||
+ // Paper start - Fix SPIGOT-5989
|
|
||||||
+ if (flag2 && !isLocAltered) {
|
|
||||||
+ if (!flag1) {
|
|
||||||
+ BlockState data = worldserver1.getBlockState(blockposition);
|
|
||||||
+ worldserver1.setBlock(blockposition, data.setValue(net.minecraft.world.level.block.RespawnAnchorBlock.CHARGE, data.getValue(net.minecraft.world.level.block.RespawnAnchorBlock.CHARGE) - 1), 3);
|
|
||||||
+ }
|
|
||||||
+ entityplayer1.connection.send(new ClientboundSoundPacket(SoundEvents.RESPAWN_ANCHOR_DEPLETE, SoundSource.BLOCKS, (double) location.getX(), (double) location.getY(), (double) location.getZ(), 1.0F, 1.0F, worldserver1.getRandom().nextLong()));
|
|
||||||
+ // Paper end - Fix SPIGOT-5989
|
|
||||||
}
|
|
||||||
// Added from changeDimension
|
|
||||||
this.sendAllPlayerInfo(entityplayer); // Update health, etc...
|
|
@ -1,88 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Spottedleaf <spottedleaf@users.noreply.github.com>
|
|
||||||
Date: Fri, 4 Jun 2021 17:06:52 -0400
|
|
||||||
Subject: [PATCH] Fix dangerous end portal logic
|
|
||||||
|
|
||||||
End portals could teleport entities during move calls. Stupid
|
|
||||||
logic given the caller will never expect that kind of thing,
|
|
||||||
and will result in all kinds of dupes.
|
|
||||||
|
|
||||||
Move the tick logic into the post tick, where portaling was
|
|
||||||
designed to happen in the first place.
|
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
|
|
||||||
index 21150f44e4f71aba3801d5392e45243112d012c0..b4670fc653721283f95bb61ac57c306b224b7fb7 100644
|
|
||||||
--- a/src/main/java/net/minecraft/world/entity/Entity.java
|
|
||||||
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
|
|
||||||
@@ -422,6 +422,36 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
|
|
||||||
return this.originWorld;
|
|
||||||
}
|
|
||||||
// Paper end - Entity origin API
|
|
||||||
+ // Paper start - make end portalling safe
|
|
||||||
+ public BlockPos portalBlock;
|
|
||||||
+ public ServerLevel portalWorld;
|
|
||||||
+ public void tickEndPortal() {
|
|
||||||
+ BlockPos pos = this.portalBlock;
|
|
||||||
+ ServerLevel world = this.portalWorld;
|
|
||||||
+ this.portalBlock = null;
|
|
||||||
+ this.portalWorld = null;
|
|
||||||
+
|
|
||||||
+ if (pos == null || world == null || world != this.level) {
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (this.isPassenger() || this.isVehicle() || !this.canChangeDimensions() || this.isRemoved() || !this.valid || !this.isAlive()) {
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ ResourceKey<Level> resourcekey = world.getTypeKey() == LevelStem.END ? Level.OVERWORLD : Level.END; // CraftBukkit - SPIGOT-6152: send back to main overworld in custom ends
|
|
||||||
+ ServerLevel worldserver = world.getServer().getLevel(resourcekey);
|
|
||||||
+
|
|
||||||
+ org.bukkit.event.entity.EntityPortalEnterEvent event = new org.bukkit.event.entity.EntityPortalEnterEvent(this.getBukkitEntity(), new org.bukkit.Location(world.getWorld(), pos.getX(), pos.getY(), pos.getZ()));
|
|
||||||
+ event.callEvent();
|
|
||||||
+
|
|
||||||
+ if (this instanceof ServerPlayer) {
|
|
||||||
+ ((ServerPlayer) this).changeDimension(worldserver, PlayerTeleportEvent.TeleportCause.END_PORTAL);
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+ this.teleportTo(worldserver, null);
|
|
||||||
+ }
|
|
||||||
+ // Paper end - make end portalling safe
|
|
||||||
public float getBukkitYaw() {
|
|
||||||
return this.yRot;
|
|
||||||
}
|
|
||||||
@@ -2833,6 +2863,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
|
|
||||||
}
|
|
||||||
|
|
||||||
this.processPortalCooldown();
|
|
||||||
+ if (!io.papermc.paper.configuration.GlobalConfiguration.get().unsupportedSettings.allowUnsafeEndPortalTeleportation) this.tickEndPortal(); // Paper - make end portalling safe
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java b/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java
|
|
||||||
index a2de13a366e4a462b746dab035372838127f4994..7272d70c672b54dcf595beafd7a2ed33c96e35cb 100644
|
|
||||||
--- a/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java
|
|
||||||
+++ b/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java
|
|
||||||
@@ -61,16 +61,13 @@ public class EndPortalBlock extends BaseEntityBlock {
|
|
||||||
// return; // CraftBukkit - always fire event in case plugins wish to change it
|
|
||||||
}
|
|
||||||
|
|
||||||
- // CraftBukkit start - Entity in portal
|
|
||||||
- EntityPortalEnterEvent event = new EntityPortalEnterEvent(entity.getBukkitEntity(), new org.bukkit.Location(world.getWorld(), pos.getX(), pos.getY(), pos.getZ()));
|
|
||||||
- world.getCraftServer().getPluginManager().callEvent(event);
|
|
||||||
-
|
|
||||||
- if (entity instanceof ServerPlayer) {
|
|
||||||
- ((ServerPlayer) entity).changeDimension(worldserver, PlayerTeleportEvent.TeleportCause.END_PORTAL);
|
|
||||||
- return;
|
|
||||||
+ // Paper start - move all of this logic into portal tick
|
|
||||||
+ entity.portalWorld = ((ServerLevel)world);
|
|
||||||
+ entity.portalBlock = pos.immutable();
|
|
||||||
+ if (io.papermc.paper.configuration.GlobalConfiguration.get().unsupportedSettings.allowUnsafeEndPortalTeleportation) {
|
|
||||||
+ entity.tickEndPortal();
|
|
||||||
}
|
|
||||||
- // CraftBukkit end
|
|
||||||
- entity.changeDimension(worldserver);
|
|
||||||
+ // Paper end - move all of this logic into portal tick
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Datei-Diff unterdrückt, da er zu groß ist
Diff laden
Datei-Diff unterdrückt, da er zu groß ist
Diff laden
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren