mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-18 08:57:44 +01:00
Upstream has released updates that appears to apply and compile correctly Paper Changes: b75eeca0 Boost light task priority to ensure it doesnt hold up chunk loads 3d2bc848 Ensure VillagerTrades doesn't load async - fixes #3495 e470f1ef Add more information to Timing Reports f4a47db6 Improve Thread Pool usage to allow single threads for single cpu servers a4fe910f Fix sounds when using worldedit regen command 70ad51a8 Updated Upstream (Bukkit/CraftBukkit) d7cfa4fa Improve legacy format serialization more
152 lines
7.6 KiB
Diff
152 lines
7.6 KiB
Diff
From b7f030b1ffc4c53737500f213803d6a7e6f2628c 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
|
|
|
|
---
|
|
.../net/minecraft/server/EntityPlayer.java | 22 +++++++++++++++++--
|
|
.../minecraft/server/PlayerConnection.java | 1 +
|
|
.../java/net/minecraft/server/PlayerList.java | 2 ++
|
|
.../net/pl3x/purpur/PurpurWorldConfig.java | 4 ++++
|
|
.../craftbukkit/entity/CraftPlayer.java | 15 +++++++++++++
|
|
5 files changed, 42 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java
|
|
index 18a74607fc..90305b61fc 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityPlayer.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityPlayer.java
|
|
@@ -131,6 +131,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) {
|
|
@@ -736,6 +738,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)) {
|
|
@@ -743,7 +751,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
|
} else {
|
|
boolean flag = this.server.m() && 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) {
|
|
@@ -1010,6 +1018,8 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
|
PlayerChangedWorldEvent changeEvent = new PlayerChangedWorldEvent(this.getBukkitEntity(), worldserver.getWorld());
|
|
this.world.getServer().getPluginManager().callEvent(changeEvent);
|
|
// CraftBukkit end
|
|
+
|
|
+ this.invulnerableTicks = worldserver.purpurConfig.playerSpawnInvulnerableTicks; // Purpur
|
|
return this;
|
|
}
|
|
}
|
|
@@ -1998,9 +2008,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/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
|
|
index 0cd012dfc3..91e6952f4c 100644
|
|
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
|
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
|
@@ -1530,6 +1530,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
|
PlayerConnectionUtils.ensureMainThread(packetplayinresourcepackstatus, this, this.player.getWorldServer());
|
|
// Paper start
|
|
PlayerResourcePackStatusEvent.Status packStatus = PlayerResourcePackStatusEvent.Status.values()[packetplayinresourcepackstatus.status.ordinal()];
|
|
+ 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/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java
|
|
index 55cda3dd66..d2ab05b51e 100644
|
|
--- a/src/main/java/net/minecraft/server/PlayerList.java
|
|
+++ b/src/main/java/net/minecraft/server/PlayerList.java
|
|
@@ -824,6 +824,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 efdc176e64..81969d2dc9 100644
|
|
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
|
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
|
@@ -209,6 +209,8 @@ public class PurpurWorldConfig {
|
|
public boolean milkCuresBadOmen = true;
|
|
public String playerDeathExpDropEquation = "expLevel * 7";
|
|
public int playerDeathExpDropMax = 100;
|
|
+ public int playerSpawnInvulnerableTicks = 60;
|
|
+ public boolean playerInvulnerableWhileAcceptingResourcePack = false;
|
|
public boolean playerSleepOnlyWithCondition = false;
|
|
public String playerSleepCondition = "time >= 12541 && time <= 23458";
|
|
public boolean useBetterMending = false;
|
|
@@ -254,6 +256,8 @@ public class PurpurWorldConfig {
|
|
milkCuresBadOmen = getBoolean("gameplay-mechanics.milk-cures-bad-omen", milkCuresBadOmen);
|
|
playerDeathExpDropEquation = getString("gameplay-mechanics.player.exp-dropped-on-death.equation", playerDeathExpDropEquation);
|
|
playerDeathExpDropMax = getInt("gameplay-mechanics.player.exp-dropped-on-death.maximum", playerDeathExpDropMax);
|
|
+ playerSpawnInvulnerableTicks = getInt("gameplay-mechanics.player.spawn-invulnerable-ticks", playerSpawnInvulnerableTicks);
|
|
+ playerInvulnerableWhileAcceptingResourcePack = getBoolean("gameplay-mechanics.player.invulnerable-while-accepting-resource-pack", playerInvulnerableWhileAcceptingResourcePack);
|
|
playerSleepOnlyWithCondition = getBoolean("gameplay-mechanics.player.sleep.only-with-condition", playerSleepOnlyWithCondition);
|
|
playerSleepCondition = getString("gameplay-mechanics.player.sleep.condition", playerSleepCondition);
|
|
useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending);
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
index 7bd271d4c2..24e35ffeaf 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
@@ -2094,5 +2094,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
|
|
}
|
|
--
|
|
2.24.0
|
|
|