mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-17 16:37:43 +01:00
135 lines
6.7 KiB
Diff
135 lines
6.7 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
|
|
Date: Sat, 2 May 2020 20:55:44 -0500
|
|
Subject: [PATCH] Player invulnerabilities
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
|
index 3fdb32f8d8c647e2430fa364e5aaa40de803b025..b336e47b21a0693ebfeae8eb752258a3e2f6d4f4 100644
|
|
--- a/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
|
+++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java
|
|
@@ -285,6 +285,8 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
|
this.canPickUpLoot = true;
|
|
this.maxHealthCache = this.getMaxHealth();
|
|
this.cachedSingleMobDistanceMap = new com.destroystokyo.paper.util.PooledHashSets.PooledObjectLinkedOpenHashSet<>(this); // Paper
|
|
+
|
|
+ this.invulnerableTicks = world.purpurConfig.playerSpawnInvulnerableTicks; // Purpur
|
|
}
|
|
// Paper start
|
|
public BlockPosition getPointInFront(double inFront) {
|
|
@@ -1120,6 +1122,12 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
|
|
|
}
|
|
|
|
+ // Purpur start
|
|
+ public boolean isSpawnInvulnerable() {
|
|
+ return invulnerableTicks > 0 || frozen;
|
|
+ }
|
|
+ // Purpur end
|
|
+
|
|
@Override
|
|
public boolean damageEntity(DamageSource damagesource, float f) {
|
|
if (this.isInvulnerable(damagesource)) {
|
|
@@ -1127,7 +1135,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
|
} else {
|
|
boolean flag = this.server.j() && this.canPvP() && "fall".equals(damagesource.translationIndex);
|
|
|
|
- if (!flag && this.invulnerableTicks > 0 && damagesource != DamageSource.OUT_OF_WORLD) {
|
|
+ if (!flag && isSpawnInvulnerable() && damagesource != DamageSource.OUT_OF_WORLD) { // Purpur
|
|
return false;
|
|
} else {
|
|
if (damagesource instanceof EntityDamageSource) {
|
|
@@ -1303,6 +1311,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
|
}
|
|
// Paper end
|
|
|
|
+ this.invulnerableTicks = worldserver.purpurConfig.playerSpawnInvulnerableTicks; // Purpur
|
|
return this;
|
|
}
|
|
}
|
|
@@ -2504,9 +2513,17 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
|
|
|
@Override
|
|
public boolean isFrozen() { // Paper - protected > public
|
|
- return super.isFrozen() || (this.playerConnection != null && this.playerConnection.isDisconnected()); // Paper
|
|
+ return super.isFrozen() || frozen || (this.playerConnection != null && this.playerConnection.isDisconnected()); // Paper // Purpur
|
|
}
|
|
|
|
+ // Purpur start
|
|
+ private boolean frozen = false;
|
|
+
|
|
+ public void setFrozen(boolean frozen) {
|
|
+ this.frozen = frozen;
|
|
+ }
|
|
+ // Purpur end
|
|
+
|
|
@Override
|
|
public Scoreboard getScoreboard() {
|
|
return getBukkitEntity().getScoreboard().getHandle();
|
|
diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
|
index 85964e7fe2cc96ad3b967dadd9ee5d095ee60e2a..937983f27bf11634ccb9044d5dff42e7d77ec9ba 100644
|
|
--- a/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
|
+++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java
|
|
@@ -1901,6 +1901,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
|
PlayerConnectionUtils.ensureMainThread(packetplayinresourcepackstatus, this, this.player.getWorldServer());
|
|
// Paper start
|
|
PlayerResourcePackStatusEvent.Status packStatus = PlayerResourcePackStatusEvent.Status.values()[packetplayinresourcepackstatus.status.ordinal()];
|
|
+ if (player.world.purpurConfig.playerInvulnerableWhileAcceptingResourcePack) player.setFrozen(packStatus == PlayerResourcePackStatusEvent.Status.ACCEPTED); // Purpur
|
|
player.getBukkitEntity().setResourcePackStatus(packStatus);
|
|
this.server.getPluginManager().callEvent(new PlayerResourcePackStatusEvent(getPlayer(), packStatus));
|
|
// Paper end
|
|
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
|
|
index ab113991486c913e0a05df1029571d3e920af9c7..d640150c803bc30a353ad34215cbb413632ada86 100644
|
|
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
|
|
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
|
|
@@ -1015,6 +1015,8 @@ public abstract class PlayerList {
|
|
}
|
|
// Paper end
|
|
|
|
+ entityplayer1.invulnerableTicks = entityplayer1.world.purpurConfig.playerSpawnInvulnerableTicks; // Purpur
|
|
+
|
|
// CraftBukkit end
|
|
return entityplayer1;
|
|
}
|
|
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
|
index 2578a4677d1ee060f687be531e696b7c7be89e84..c441fcea9b2b5a77b801c8a69541cf42050927dc 100644
|
|
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
|
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
|
@@ -67,4 +67,11 @@ public class PurpurWorldConfig {
|
|
idleTimeoutCountAsSleeping = getBoolean("gameplay-mechanics.player.idle-timeout.count-as-sleeping", idleTimeoutCountAsSleeping);
|
|
idleTimeoutUpdateTabList = getBoolean("gameplay-mechanics.player.idle-timeout.update-tab-list", idleTimeoutUpdateTabList);
|
|
}
|
|
+
|
|
+ public int playerSpawnInvulnerableTicks = 60;
|
|
+ public boolean playerInvulnerableWhileAcceptingResourcePack = false;
|
|
+ private void playerInvulnerabilities() {
|
|
+ playerSpawnInvulnerableTicks = getInt("gameplay-mechanics.player.spawn-invulnerable-ticks", playerSpawnInvulnerableTicks);
|
|
+ playerInvulnerableWhileAcceptingResourcePack = getBoolean("gameplay-mechanics.player.invulnerable-while-accepting-resource-pack", playerInvulnerableWhileAcceptingResourcePack);
|
|
+ }
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
index 36926b8ed2a0304c89296aa743510bb3c415a07e..d7f24ef07d731c83408ceff7bc5da7221d49d5e9 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
@@ -2510,5 +2510,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
|
public void resetIdleTimer() {
|
|
getHandle().resetIdleTimer();
|
|
}
|
|
+
|
|
+ @Override
|
|
+ public boolean isSpawnInvulnerable() {
|
|
+ return getHandle().isSpawnInvulnerable();
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public int getSpawnInvulnerableTicks() {
|
|
+ return getHandle().invulnerableTicks;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setSpawnInvulnerableTicks(int invulnerableTicks) {
|
|
+ getHandle().invulnerableTicks = invulnerableTicks;
|
|
+ }
|
|
// Purpur end
|
|
}
|