From c137b5dc31546d74e06757235c9cd06292126311 Mon Sep 17 00:00:00 2001 From: Malfrador Date: Mon, 5 Jun 2023 19:15:18 +0200 Subject: [PATCH] Add transient modifiers (#9244) This allows adding modifiers as transient. Transient modifiers don't get saved with the NBT data. Vanilla itself uses transient modifiers for speed modifications like sprinting or powder snow. This just exposes it in the API. --- patches/api/Add-transient-modifier-API.patch | 27 ++++++++++++ .../server/Add-transient-modifier-API.patch | 41 +++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 patches/api/Add-transient-modifier-API.patch create mode 100644 patches/server/Add-transient-modifier-API.patch diff --git a/patches/api/Add-transient-modifier-API.patch b/patches/api/Add-transient-modifier-API.patch new file mode 100644 index 0000000000..421c5edf19 --- /dev/null +++ b/patches/api/Add-transient-modifier-API.patch @@ -0,0 +1,27 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Malfrador +Date: Wed, 31 May 2023 21:25:01 +0200 +Subject: [PATCH] Add transient modifier API + + +diff --git a/src/main/java/org/bukkit/attribute/AttributeInstance.java b/src/main/java/org/bukkit/attribute/AttributeInstance.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/org/bukkit/attribute/AttributeInstance.java ++++ b/src/main/java/org/bukkit/attribute/AttributeInstance.java +@@ -0,0 +0,0 @@ public interface AttributeInstance { + */ + void addModifier(@NotNull AttributeModifier modifier); + ++ // Paper start - Transient modifier API ++ /** ++ * Add a transient modifier to this instance. ++ * Transient modifiers are not persisted (saved with the NBT data) ++ * ++ * @param modifier to add ++ */ ++ void addTransientModifier(@NotNull AttributeModifier modifier); ++ // Paper end ++ + /** + * Remove a modifier from this instance. + * diff --git a/patches/server/Add-transient-modifier-API.patch b/patches/server/Add-transient-modifier-API.patch new file mode 100644 index 0000000000..0f30dc63a8 --- /dev/null +++ b/patches/server/Add-transient-modifier-API.patch @@ -0,0 +1,41 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Malfrador +Date: Wed, 31 May 2023 23:30:00 +0200 +Subject: [PATCH] Add transient modifier API + + +diff --git a/src/main/java/io/papermc/paper/attribute/UnmodifiableAttributeInstance.java b/src/main/java/io/papermc/paper/attribute/UnmodifiableAttributeInstance.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/io/papermc/paper/attribute/UnmodifiableAttributeInstance.java ++++ b/src/main/java/io/papermc/paper/attribute/UnmodifiableAttributeInstance.java +@@ -0,0 +0,0 @@ public class UnmodifiableAttributeInstance extends CraftAttributeInstance { + throw new UnsupportedOperationException("Cannot modify default attributes"); + } + ++ @Override ++ public void addTransientModifier(AttributeModifier modifier) { ++ throw new UnsupportedOperationException("Cannot modify default attributes"); ++ } ++ + @Override + public void removeModifier(AttributeModifier modifier) { + throw new UnsupportedOperationException("Cannot modify default attributes"); +diff --git a/src/main/java/org/bukkit/craftbukkit/attribute/CraftAttributeInstance.java b/src/main/java/org/bukkit/craftbukkit/attribute/CraftAttributeInstance.java +index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644 +--- a/src/main/java/org/bukkit/craftbukkit/attribute/CraftAttributeInstance.java ++++ b/src/main/java/org/bukkit/craftbukkit/attribute/CraftAttributeInstance.java +@@ -0,0 +0,0 @@ public class CraftAttributeInstance implements AttributeInstance { + this.handle.addPermanentModifier(CraftAttributeInstance.convert(modifier)); + } + ++ // Paper start - Transient modifier API ++ @Override ++ public void addTransientModifier(AttributeModifier modifier) { ++ Preconditions.checkArgument(modifier != null, "modifier"); ++ this.handle.addTransientModifier(CraftAttributeInstance.convert(modifier)); ++ } ++ // Paper end ++ + @Override + public void removeModifier(AttributeModifier modifier) { + Preconditions.checkArgument(modifier != null, "modifier");