From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Racci <90304606+DaRacci@users.noreply.github.com> Date: Fri, 4 Feb 2022 16:10:21 +1100 Subject: [PATCH] Fire Immunity API diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java index 35cd273eb885558003a728eedc63f958e5accf74..c12594a49435440a6c96039b2a54c1a3b1707fc0 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -390,6 +390,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess public boolean freezeLocked = false; // Paper - Freeze Tick Lock API public boolean fixedPose = false; // Paper - Expand Pose API private final int despawnTime; // Paper - entity despawn time limit + public @Nullable Boolean immuneToFire = null; // Purpur - Fire immune API public void setOrigin(@javax.annotation.Nonnull Location location) { this.origin = location.toVector(); @@ -1980,7 +1981,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public boolean fireImmune() { - return this.getType().fireImmune(); + return this.immuneToFire != null ? immuneToFire : this.getType().fireImmune(); // Purpur - add fire immune API } public boolean causeFallDamage(float fallDistance, float damageMultiplier, DamageSource damageSource) { @@ -2735,6 +2736,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess nbttagcompound.putBoolean("Paper.FreezeLock", true); } // Paper end + // Purpur start + if (immuneToFire != null) { + nbttagcompound.putBoolean("Purpur.FireImmune", immuneToFire); + } + // Purpur end return nbttagcompound; } catch (Throwable throwable) { CrashReport crashreport = CrashReport.forThrowable(throwable, "Saving entity NBT"); @@ -2885,6 +2891,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess freezeLocked = nbt.getBoolean("Paper.FreezeLock"); } // Paper end + // Purpur start + if (nbt.contains("Purpur.FireImmune")) { + immuneToFire = nbt.getBoolean("Purpur.FireImmune"); + } + // Purpur end } catch (Throwable throwable) { CrashReport crashreport = CrashReport.forThrowable(throwable, "Loading entity NBT"); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java index f9d7f1d317a9534d471a481db8c26f9d3b15bfda..0e1b3f64d1a828b9c69efe45c511582880bdcb92 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -88,6 +88,16 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { } // Purpur start - API for any mob to burn daylight + @Override + public boolean isImmuneToFire() { + return getHandle().fireImmune(); + } + + @Override + public void setImmuneToFire(Boolean fireImmune) { + getHandle().immuneToFire = fireImmune; + } + @Override public boolean isInDaylight() { return getHandle().isSunBurnTick(); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java index 74f5b702b9602e4c8acbad4fb09c641e2c7844b2..762be3721419bfe33ea6577d3c6961204fdb0037 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java @@ -173,9 +173,14 @@ public class CraftItem extends CraftEntity implements Item { return this.getHandle().immuneToExplosion; } + @Override + public void setImmuneToFire(@org.jetbrains.annotations.Nullable Boolean immuneToFire) { + this.getHandle().immuneToFire = (immuneToFire != null && immuneToFire); + } + @Override public void setImmuneToFire(boolean immuneToFire) { - item.immuneToFire = immuneToFire; + this.setImmuneToFire((Boolean) immuneToFire); } @Override