aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/api/0130-Expand-ArmorStand-API.patch
diff options
context:
space:
mode:
authorJake Potrebic <[email protected]>2023-11-22 20:56:28 -0800
committerGitHub <[email protected]>2023-11-22 20:56:28 -0800
commit96d5e6ca481591842f44d05ab2451f943be6a7c7 (patch)
treead35d855fa33f6feb8e365ce12aa312bd225ff3f /patches/api/0130-Expand-ArmorStand-API.patch
parente1cd9e59e53aabd50e501cb01feee277a8f69902 (diff)
downloadPaper-96d5e6ca481591842f44d05ab2451f943be6a7c7.tar.gz
Paper-96d5e6ca481591842f44d05ab2451f943be6a7c7.zip
Code Generation for TypedKeys (#9233)
Currently includes generated key holder classes for types used in the Registry Modification API
Diffstat (limited to 'patches/api/0130-Expand-ArmorStand-API.patch')
-rw-r--r--patches/api/0130-Expand-ArmorStand-API.patch341
1 files changed, 341 insertions, 0 deletions
diff --git a/patches/api/0130-Expand-ArmorStand-API.patch b/patches/api/0130-Expand-ArmorStand-API.patch
new file mode 100644
index 0000000000..418a52b6ee
--- /dev/null
+++ b/patches/api/0130-Expand-ArmorStand-API.patch
@@ -0,0 +1,341 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: willies952002 <[email protected]>
+Date: Thu, 26 Jul 2018 02:22:44 -0400
+Subject: [PATCH] Expand ArmorStand API
+
+Adds the following:
+- Add proper methods for getting and setting items in both hands. Deprecates old methods
+- Enable/Disable slot interactions
+- Allow using degrees for ArmorStand rotations (via new Rotations class)
+
+Co-authored-by: SoSeDiK <[email protected]>
+
+diff --git a/src/main/java/io/papermc/paper/math/Rotations.java b/src/main/java/io/papermc/paper/math/Rotations.java
+new file mode 100644
+index 0000000000000000000000000000000000000000..0ac1618113699ac50b9c35294bf23fb9fb7cfbad
+--- /dev/null
++++ b/src/main/java/io/papermc/paper/math/Rotations.java
+@@ -0,0 +1,100 @@
++package io.papermc.paper.math;
++
++import org.jetbrains.annotations.NotNull;
++
++/**
++ * Rotations is an immutable object that stores rotations
++ * in degrees on each axis (X, Y, Z).
++ */
++public interface Rotations {
++
++ /**
++ * Rotations instance with every axis set to 0
++ */
++ Rotations ZERO = ofDegrees(0, 0, 0);
++
++ /**
++ * Creates a new Rotations instance holding the provided rotations
++ *
++ * @param x the angle for the X axis in degrees
++ * @param y the angle for the Y axis in degrees
++ * @param z the angle for the Z axis in degrees
++ * @return Rotations instance holding the provided rotations
++ */
++ static @NotNull Rotations ofDegrees(double x, double y, double z) {
++ return new RotationsImpl(x, y, z);
++ }
++
++ /**
++ * Returns the angle on the X axis in degrees
++ *
++ * @return the angle in degrees
++ */
++ double x();
++
++ /**
++ * Returns the angle on the Y axis in degrees
++ *
++ * @return the angle in degrees
++ */
++ double y();
++
++ /**
++ * Returns the angle on the Z axis in degrees
++ *
++ * @return the angle in degrees
++ */
++ double z();
++
++ /**
++ * Returns a new Rotations instance which is the result
++ * of changing the X axis to the passed angle
++ *
++ * @param x the angle in degrees
++ * @return the resultant Rotations
++ */
++ @NotNull Rotations withX(double x);
++
++ /**
++ * Returns a new Rotations instance which is the result
++ * of changing the Y axis to the passed angle
++ *
++ * @param y the angle in degrees
++ * @return the resultant Rotations
++ */
++ @NotNull Rotations withY(double y);
++
++ /**
++ * Returns a new Rotations instance which is the result
++ * of changing the Z axis to the passed angle
++ *
++ * @param z the angle in degrees
++ * @return the resultant Rotations
++ */
++ @NotNull Rotations withZ(double z);
++
++ /**
++ * Returns a new Rotations instance which is the result of adding
++ * the x, y, z components to this Rotations
++ *
++ * @param x the angle to add to the X axis in degrees
++ * @param y the angle to add to the Y axis in degrees
++ * @param z the angle to add to the Z axis in degrees
++ * @return the resultant Rotations
++ */
++ @NotNull Rotations add(double x, double y, double z);
++
++ /**
++ * Returns a new Rotations instance which is the result of subtracting
++ * the x, y, z components from this Rotations
++ *
++ * @param x the angle to subtract from the X axis in degrees
++ * @param y the angle to subtract from the Y axis in degrees
++ * @param z the angle to subtract from the Z axis in degrees
++ * @return the resultant Rotations
++ */
++ default @NotNull Rotations subtract(double x, double y, double z) {
++ return add(-x, -y, -z);
++ }
++
++}
+diff --git a/src/main/java/io/papermc/paper/math/RotationsImpl.java b/src/main/java/io/papermc/paper/math/RotationsImpl.java
+new file mode 100644
+index 0000000000000000000000000000000000000000..53359ab4a6659bce895deef6a21cde848d3cadcd
+--- /dev/null
++++ b/src/main/java/io/papermc/paper/math/RotationsImpl.java
+@@ -0,0 +1,27 @@
++package io.papermc.paper.math;
++
++import org.jetbrains.annotations.NotNull;
++
++record RotationsImpl(double x, double y, double z) implements Rotations {
++
++ @Override
++ public @NotNull RotationsImpl withX(double x) {
++ return new RotationsImpl(x, y, z);
++ }
++
++ @Override
++ public @NotNull RotationsImpl withY(double y) {
++ return new RotationsImpl(x, y, z);
++ }
++
++ @Override
++ public @NotNull RotationsImpl withZ(double z) {
++ return new RotationsImpl(x, y, z);
++ }
++
++ @Override
++ public @NotNull RotationsImpl add(double x, double y, double z) {
++ return new RotationsImpl(this.x + x, this.y + y, this.z + z);
++ }
++
++}
+diff --git a/src/main/java/org/bukkit/entity/ArmorStand.java b/src/main/java/org/bukkit/entity/ArmorStand.java
+index 2ee3814a52945f541e049b621b9552f8ae9e261d..7530eb5d2a506e13e2bc7e189fd6e957c013cdf5 100644
+--- a/src/main/java/org/bukkit/entity/ArmorStand.java
++++ b/src/main/java/org/bukkit/entity/ArmorStand.java
+@@ -14,7 +14,7 @@ public interface ArmorStand extends LivingEntity {
+ *
+ * @return the held item
+ * @see #getEquipment()
+- * @deprecated prefer {@link EntityEquipment#getItemInHand()}
++ * @deprecated prefer {@link ArmorStand#getItem(EquipmentSlot)} // Paper
+ */
+ @NotNull
+ @Deprecated
+@@ -26,7 +26,7 @@ public interface ArmorStand extends LivingEntity {
+ * @param item the item to hold
+ * @see #getEquipment()
+ * @deprecated prefer
+- * {@link EntityEquipment#setItemInHand(org.bukkit.inventory.ItemStack)}
++ * {@link ArmorStand#setItem(EquipmentSlot, ItemStack)} // Paper
+ */
+ @Deprecated
+ void setItemInHand(@Nullable ItemStack item);
+@@ -379,5 +379,167 @@ public interface ArmorStand extends LivingEntity {
+ * @param tick {@code true} if this armour stand can tick, {@code false} otherwise
+ */
+ void setCanTick(final boolean tick);
++
++ /**
++ * Returns the item the armor stand has
++ * equip in the given equipment slot
++ *
++ * @param slot the equipment slot to get
++ * @return the ItemStack in the equipment slot
++ */
++ @NotNull
++ ItemStack getItem(@NotNull final org.bukkit.inventory.EquipmentSlot slot);
++
++ /**
++ * Sets the item the armor stand has
++ * equip in the given equipment slot
++ *
++ * @param slot the equipment slot to set
++ * @param item the item to hold
++ */
++ void setItem(@NotNull final org.bukkit.inventory.EquipmentSlot slot, @Nullable final ItemStack item);
++
++ /**
++ * Get the list of disabled slots
++ *
++ * @return list of disabled slots
++ */
++ @NotNull
++ java.util.Set<org.bukkit.inventory.EquipmentSlot> getDisabledSlots();
++
++ /**
++ * Set the disabled slots
++ *
++ * This makes it so a player is unable to interact with the Armor Stand to place, remove, or replace an item in the given slot(s)
++ * Note: Once a slot is disabled, the only way to get an item back it to break the armor stand.
++ *
++ * @param slots var-arg array of slots to lock
++ */
++ void setDisabledSlots(@NotNull org.bukkit.inventory.EquipmentSlot... slots);
++
++ /**
++ * Disable specific slots, adding them
++ * to the currently disabled slots
++ *
++ * This makes it so a player is unable to interact with the Armor Stand to place, remove, or replace an item in the given slot(s)
++ * Note: Once a slot is disabled, the only way to get an item back it to break the armor stand.
++ *
++ * @param slots var-arg array of slots to lock
++ */
++ void addDisabledSlots(@NotNull final org.bukkit.inventory.EquipmentSlot... slots);
++
++ /**
++ * Remove the given slots from the disabled
++ * slots list, enabling them.
++ *
++ * This makes it so a player is able to interact with the Armor Stand to place, remove, or replace an item in the given slot(s)
++ *
++ * @param slots var-arg array of slots to unlock
++ */
++ void removeDisabledSlots(@NotNull final org.bukkit.inventory.EquipmentSlot... slots);
++
++ /**
++ * Check if a specific slot is disabled
++ *
++ * @param slot The slot to check
++ * @return {@code true} if the slot is disabled, else {@code false}.
++ */
++ boolean isSlotDisabled(@NotNull org.bukkit.inventory.EquipmentSlot slot);
++
++ /**
++ * Returns the ArmorStand's body rotations as
++ * {@link io.papermc.paper.math.Rotations}.
++ *
++ * @return the current rotations
++ */
++ @NotNull io.papermc.paper.math.Rotations getBodyRotations();
++
++ /**
++ * Sets the ArmorStand's body rotations as
++ * {@link io.papermc.paper.math.Rotations}.
++ *
++ * @param rotations the current rotations
++ */
++ void setBodyRotations(@NotNull io.papermc.paper.math.Rotations rotations);
++
++ /**
++ * Returns the ArmorStand's left arm rotations as
++ * {@link io.papermc.paper.math.Rotations}.
++ *
++ * @return the current rotations
++ */
++ @NotNull io.papermc.paper.math.Rotations getLeftArmRotations();
++
++ /**
++ * Sets the ArmorStand's left arm rotations as
++ * {@link io.papermc.paper.math.Rotations}.
++ *
++ * @param rotations the current rotations
++ */
++ void setLeftArmRotations(@NotNull io.papermc.paper.math.Rotations rotations);
++
++ /**
++ * Returns the ArmorStand's right arm rotations as
++ * {@link io.papermc.paper.math.Rotations}.
++ *
++ * @return the current rotations
++ */
++ @NotNull io.papermc.paper.math.Rotations getRightArmRotations();
++
++ /**
++ * Sets the ArmorStand's right arm rotations as
++ * {@link io.papermc.paper.math.Rotations}.
++ *
++ * @param rotations the current rotations
++ */
++ void setRightArmRotations(@NotNull io.papermc.paper.math.Rotations rotations);
++
++ /**
++ * Returns the ArmorStand's left leg rotations as
++ * {@link io.papermc.paper.math.Rotations}.
++ *
++ * @return the current rotations
++ */
++ @NotNull io.papermc.paper.math.Rotations getLeftLegRotations();
++
++ /**
++ * Sets the ArmorStand's left leg rotations as
++ * {@link io.papermc.paper.math.Rotations}.
++ *
++ * @param rotations the current rotations
++ */
++ void setLeftLegRotations(@NotNull io.papermc.paper.math.Rotations rotations);
++
++ /**
++ * Returns the ArmorStand's right leg rotations as
++ * {@link io.papermc.paper.math.Rotations}.
++ *
++ * @return the current rotations
++ */
++ @NotNull io.papermc.paper.math.Rotations getRightLegRotations();
++
++ /**
++ * Sets the ArmorStand's right leg rotations as
++ * {@link io.papermc.paper.math.Rotations}.
++ *
++ * @param rotations the current rotations
++ */
++ void setRightLegRotations(@NotNull io.papermc.paper.math.Rotations rotations);
++
++ /**
++ * Returns the ArmorStand's head rotations as
++ * {@link io.papermc.paper.math.Rotations}.
++ *
++ * @return the current rotations
++ */
++ @NotNull io.papermc.paper.math.Rotations getHeadRotations();
++
++ /**
++ * Sets the ArmorStand's head rotations as
++ * {@link io.papermc.paper.math.Rotations}.
++ *
++ * @param rotations the current rotations
++ */
++ void setHeadRotations(@NotNull io.papermc.paper.math.Rotations rotations);
+ // Paper end
+ }