diff options
author | Jake Potrebic <[email protected]> | 2023-11-22 20:56:28 -0800 |
---|---|---|
committer | GitHub <[email protected]> | 2023-11-22 20:56:28 -0800 |
commit | 96d5e6ca481591842f44d05ab2451f943be6a7c7 (patch) | |
tree | ad35d855fa33f6feb8e365ce12aa312bd225ff3f /patches/api/0130-Expand-ArmorStand-API.patch | |
parent | e1cd9e59e53aabd50e501cb01feee277a8f69902 (diff) | |
download | Paper-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.patch | 341 |
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 + } |