From f20b35f0c361bc063ef155cdf6e97c8c9308e6d8 Mon Sep 17 00:00:00 2001 From: Chris Hennick <4961925+Pr0methean@users.noreply.github.com> Date: Sat, 10 Mar 2018 17:28:44 -0800 Subject: [PATCH 1/8] Implement donkey, mule & llama inventories --- .../entity/passive/GlowChestedHorse.java | 25 +++++++++++++++++-- .../glowstone/entity/passive/GlowDonkey.java | 16 +++++++----- .../glowstone/entity/passive/GlowLlama.java | 19 ++++++++------ .../glowstone/entity/passive/GlowMule.java | 17 ++++++++----- .../inventory/GlowHorseInventory.java | 12 ++++++--- .../inventory/GlowLlamaInventory.java | 15 +++++++++++ 6 files changed, 80 insertions(+), 24 deletions(-) create mode 100644 src/main/java/net/glowstone/inventory/GlowLlamaInventory.java diff --git a/src/main/java/net/glowstone/entity/passive/GlowChestedHorse.java b/src/main/java/net/glowstone/entity/passive/GlowChestedHorse.java index 1b1a9fde21..ec5959c119 100644 --- a/src/main/java/net/glowstone/entity/passive/GlowChestedHorse.java +++ b/src/main/java/net/glowstone/entity/passive/GlowChestedHorse.java @@ -1,14 +1,27 @@ package net.glowstone.entity.passive; +import lombok.Getter; import net.glowstone.entity.meta.MetadataIndex; +import net.glowstone.inventory.GlowHorseInventory; +import net.glowstone.inventory.GlowInventory; +import net.glowstone.inventory.GlowLlamaInventory; import org.bukkit.Location; import org.bukkit.entity.ChestedHorse; import org.bukkit.entity.EntityType; +import org.bukkit.inventory.AbstractHorseInventory; -public abstract class GlowChestedHorse extends GlowAbstractHorse implements ChestedHorse { +public abstract class GlowChestedHorse + extends GlowAbstractHorse implements ChestedHorse { + + /** + * Null when not carrying a chest; otherwise, a 15-slot container. + */ + @Getter + protected TInventory inventory; public GlowChestedHorse(Location location, EntityType type, double maxHealth) { super(location, type, maxHealth); + createNewInventory(); } @Override @@ -18,6 +31,14 @@ public boolean isCarryingChest() { @Override public void setCarryingChest(boolean carryingChest) { - metadata.set(MetadataIndex.CHESTED_HORSE_HAS_CHEST, carryingChest); + if (carryingChest != isCarryingChest()) { + metadata.set(MetadataIndex.CHESTED_HORSE_HAS_CHEST, carryingChest); + createNewInventory(); + } } + + /** + * Creates and sets a new inventory, and copies equipment over from the existing inventory. + */ + protected abstract void createNewInventory(); } diff --git a/src/main/java/net/glowstone/entity/passive/GlowDonkey.java b/src/main/java/net/glowstone/entity/passive/GlowDonkey.java index b5d4264938..585432d044 100644 --- a/src/main/java/net/glowstone/entity/passive/GlowDonkey.java +++ b/src/main/java/net/glowstone/entity/passive/GlowDonkey.java @@ -6,17 +6,12 @@ import org.bukkit.entity.Donkey; import org.bukkit.entity.EntityType; -public class GlowDonkey extends GlowChestedHorse implements Donkey { +public class GlowDonkey extends GlowChestedHorse implements Donkey { public GlowDonkey(Location location) { super(location, EntityType.DONKEY, 15); } - @Override - public GlowHorseInventory getInventory() { - return null; - } - @Override protected Sound getHurtSound() { return Sound.ENTITY_DONKEY_HURT; @@ -31,4 +26,13 @@ protected Sound getDeathSound() { protected Sound getAmbientSound() { return Sound.ENTITY_DONKEY_AMBIENT; } + + @Override + protected void createNewInventory() { + GlowHorseInventory oldInventory = inventory; + inventory = new GlowHorseInventory(this); + if (oldInventory != null) { + inventory.setSaddle(oldInventory.getSaddle()); + } + } } diff --git a/src/main/java/net/glowstone/entity/passive/GlowLlama.java b/src/main/java/net/glowstone/entity/passive/GlowLlama.java index 5e2eb171c4..f46e45d420 100644 --- a/src/main/java/net/glowstone/entity/passive/GlowLlama.java +++ b/src/main/java/net/glowstone/entity/passive/GlowLlama.java @@ -2,13 +2,13 @@ import java.util.concurrent.ThreadLocalRandom; import net.glowstone.entity.meta.MetadataIndex; +import net.glowstone.inventory.GlowLlamaInventory; import org.bukkit.Location; import org.bukkit.Sound; import org.bukkit.entity.EntityType; import org.bukkit.entity.Llama; -import org.bukkit.inventory.LlamaInventory; -public class GlowLlama extends GlowChestedHorse implements Llama { +public class GlowLlama extends GlowChestedHorse implements Llama { /** * Creates a llama entity. @@ -41,11 +41,6 @@ public void setStrength(int strength) { metadata.set(MetadataIndex.LLAMA_STRENGTH, strength); } - @Override - public LlamaInventory getInventory() { - return null; // todo - } - @Override protected Sound getDeathSound() { return Sound.ENTITY_LLAMA_DEATH; @@ -60,4 +55,14 @@ protected Sound getHurtSound() { protected Sound getAmbientSound() { return Sound.ENTITY_LLAMA_AMBIENT; } + + @Override + protected void createNewInventory() { + GlowLlamaInventory oldInventory = inventory; + inventory = new GlowLlamaInventory(); + if (oldInventory != null) { + inventory.setSaddle(oldInventory.getSaddle()); + inventory.setDecor(oldInventory.getDecor()); + } + } } diff --git a/src/main/java/net/glowstone/entity/passive/GlowMule.java b/src/main/java/net/glowstone/entity/passive/GlowMule.java index 71f8188cb3..5fff7b5e4f 100644 --- a/src/main/java/net/glowstone/entity/passive/GlowMule.java +++ b/src/main/java/net/glowstone/entity/passive/GlowMule.java @@ -5,18 +5,14 @@ import org.bukkit.Sound; import org.bukkit.entity.EntityType; import org.bukkit.entity.Mule; +import org.bukkit.inventory.AbstractHorseInventory; -public class GlowMule extends GlowChestedHorse implements Mule { +public class GlowMule extends GlowChestedHorse implements Mule { public GlowMule(Location location) { super(location, EntityType.MULE, 15); } - @Override - public GlowHorseInventory getInventory() { - return null; // todo - } - @Override protected Sound getDeathSound() { return Sound.ENTITY_MULE_DEATH; @@ -31,4 +27,13 @@ protected Sound getHurtSound() { protected Sound getAmbientSound() { return Sound.ENTITY_MULE_AMBIENT; } + + @Override + protected void createNewInventory() { + GlowHorseInventory oldInventory = inventory; + inventory = new GlowHorseInventory(this); + if (oldInventory != null) { + inventory.setSaddle(oldInventory.getSaddle()); + } + } } diff --git a/src/main/java/net/glowstone/inventory/GlowHorseInventory.java b/src/main/java/net/glowstone/inventory/GlowHorseInventory.java index 05b9b42c12..10911c2b63 100644 --- a/src/main/java/net/glowstone/inventory/GlowHorseInventory.java +++ b/src/main/java/net/glowstone/inventory/GlowHorseInventory.java @@ -1,5 +1,7 @@ package net.glowstone.inventory; +import org.bukkit.entity.AbstractHorse; +import org.bukkit.entity.ChestedHorse; import org.bukkit.entity.Horse; import org.bukkit.event.inventory.InventoryType; import org.bukkit.inventory.HorseInventory; @@ -13,15 +15,19 @@ public class GlowHorseInventory extends GlowInventory implements HorseInventory private ItemStack saddle; private ItemStack armor; - public GlowHorseInventory(Horse owner) { + public GlowHorseInventory(ChestedHorse owner) { this(owner, owner.isCarryingChest() ? 16 : 2); } - public GlowHorseInventory(Horse owner, int size) { + public GlowHorseInventory(Horse owner) { + this(owner, 2); + } + + public GlowHorseInventory(AbstractHorse owner, int size) { this(owner, size, "EntityHorse"); } - public GlowHorseInventory(Horse owner, int size, String title) { + public GlowHorseInventory(AbstractHorse owner, int size, String title) { super(owner, InventoryType.CHEST, size, title); //TODO fix this. } diff --git a/src/main/java/net/glowstone/inventory/GlowLlamaInventory.java b/src/main/java/net/glowstone/inventory/GlowLlamaInventory.java new file mode 100644 index 0000000000..448b536e99 --- /dev/null +++ b/src/main/java/net/glowstone/inventory/GlowLlamaInventory.java @@ -0,0 +1,15 @@ +package net.glowstone.inventory; + +import lombok.Getter; +import lombok.Setter; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.LlamaInventory; + +public class GlowLlamaInventory extends GlowInventory implements LlamaInventory { + @Getter + @Setter + protected ItemStack decor; + @Getter + @Setter + protected ItemStack saddle; +} From 6a7387a1c8f94e9fa9e889649b61929ec7b29b85 Mon Sep 17 00:00:00 2001 From: Chris Hennick <4961925+Pr0methean@users.noreply.github.com> Date: Sat, 10 Mar 2018 17:31:45 -0800 Subject: [PATCH 2/8] Unused imports --- .../java/net/glowstone/entity/passive/GlowChestedHorse.java | 3 --- src/main/java/net/glowstone/entity/passive/GlowMule.java | 1 - 2 files changed, 4 deletions(-) diff --git a/src/main/java/net/glowstone/entity/passive/GlowChestedHorse.java b/src/main/java/net/glowstone/entity/passive/GlowChestedHorse.java index ec5959c119..25daa9dc6c 100644 --- a/src/main/java/net/glowstone/entity/passive/GlowChestedHorse.java +++ b/src/main/java/net/glowstone/entity/passive/GlowChestedHorse.java @@ -2,9 +2,6 @@ import lombok.Getter; import net.glowstone.entity.meta.MetadataIndex; -import net.glowstone.inventory.GlowHorseInventory; -import net.glowstone.inventory.GlowInventory; -import net.glowstone.inventory.GlowLlamaInventory; import org.bukkit.Location; import org.bukkit.entity.ChestedHorse; import org.bukkit.entity.EntityType; diff --git a/src/main/java/net/glowstone/entity/passive/GlowMule.java b/src/main/java/net/glowstone/entity/passive/GlowMule.java index 5fff7b5e4f..97a3fcf743 100644 --- a/src/main/java/net/glowstone/entity/passive/GlowMule.java +++ b/src/main/java/net/glowstone/entity/passive/GlowMule.java @@ -5,7 +5,6 @@ import org.bukkit.Sound; import org.bukkit.entity.EntityType; import org.bukkit.entity.Mule; -import org.bukkit.inventory.AbstractHorseInventory; public class GlowMule extends GlowChestedHorse implements Mule { From 78e053c1b35ffe88218630172d09e23e2f229945 Mon Sep 17 00:00:00 2001 From: Chris Hennick <4961925+Pr0methean@users.noreply.github.com> Date: Sat, 10 Mar 2018 17:35:40 -0800 Subject: [PATCH 3/8] Style fix --- .../net/glowstone/entity/passive/GlowChestedHorse.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/glowstone/entity/passive/GlowChestedHorse.java b/src/main/java/net/glowstone/entity/passive/GlowChestedHorse.java index 25daa9dc6c..0621985ed1 100644 --- a/src/main/java/net/glowstone/entity/passive/GlowChestedHorse.java +++ b/src/main/java/net/glowstone/entity/passive/GlowChestedHorse.java @@ -7,14 +7,19 @@ import org.bukkit.entity.EntityType; import org.bukkit.inventory.AbstractHorseInventory; -public abstract class GlowChestedHorse +/** + * A quadruped whose inventory may include a chest. + * + * @param the inventory class this entity uses + */ +public abstract class GlowChestedHorse extends GlowAbstractHorse implements ChestedHorse { /** * Null when not carrying a chest; otherwise, a 15-slot container. */ @Getter - protected TInventory inventory; + protected InventoryType inventory; public GlowChestedHorse(Location location, EntityType type, double maxHealth) { super(location, type, maxHealth); From ad41d1f0df9641793e75694177dfae13f64a2dc2 Mon Sep 17 00:00:00 2001 From: mastercoms Date: Sat, 17 Mar 2018 17:26:45 -0400 Subject: [PATCH 4/8] InventoryType -> InventoryT --- .../java/net/glowstone/entity/passive/GlowChestedHorse.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/glowstone/entity/passive/GlowChestedHorse.java b/src/main/java/net/glowstone/entity/passive/GlowChestedHorse.java index 0621985ed1..58840e1fcb 100644 --- a/src/main/java/net/glowstone/entity/passive/GlowChestedHorse.java +++ b/src/main/java/net/glowstone/entity/passive/GlowChestedHorse.java @@ -10,16 +10,16 @@ /** * A quadruped whose inventory may include a chest. * - * @param the inventory class this entity uses + * @param the inventory class this entity uses */ -public abstract class GlowChestedHorse +public abstract class GlowChestedHorse extends GlowAbstractHorse implements ChestedHorse { /** * Null when not carrying a chest; otherwise, a 15-slot container. */ @Getter - protected InventoryType inventory; + protected InventoryT inventory; public GlowChestedHorse(Location location, EntityType type, double maxHealth) { super(location, type, maxHealth); From 7f1b3ed4c7432e71e452cd262927a5110bb20396 Mon Sep 17 00:00:00 2001 From: Chris Hennick <4961925+Pr0methean@users.noreply.github.com> Date: Sun, 18 Mar 2018 13:52:26 -0700 Subject: [PATCH 5/8] Address review comments, and preserve chest on GlowLlama.setStrength --- .../entity/passive/GlowChestedHorse.java | 23 +++++++++++++++---- .../glowstone/entity/passive/GlowDonkey.java | 8 ++++--- .../glowstone/entity/passive/GlowLlama.java | 12 ++++++---- .../glowstone/entity/passive/GlowMule.java | 8 ++++--- .../inventory/GlowLlamaInventory.java | 11 +++++++++ 5 files changed, 48 insertions(+), 14 deletions(-) diff --git a/src/main/java/net/glowstone/entity/passive/GlowChestedHorse.java b/src/main/java/net/glowstone/entity/passive/GlowChestedHorse.java index 58840e1fcb..43cf09a59f 100644 --- a/src/main/java/net/glowstone/entity/passive/GlowChestedHorse.java +++ b/src/main/java/net/glowstone/entity/passive/GlowChestedHorse.java @@ -5,10 +5,13 @@ import org.bukkit.Location; import org.bukkit.entity.ChestedHorse; import org.bukkit.entity.EntityType; +import org.bukkit.entity.Item; import org.bukkit.inventory.AbstractHorseInventory; +import org.bukkit.inventory.InventoryHolder; +import org.bukkit.inventory.ItemStack; /** - * A quadruped whose inventory may include a chest. + * A horse or similar mount (donkey, mule, llama...) whose inventory may include a chest. * * @param the inventory class this entity uses */ @@ -23,7 +26,7 @@ public abstract class GlowChestedHorse Date: Sun, 18 Mar 2018 14:06:32 -0700 Subject: [PATCH 6/8] Unused import --- src/main/java/net/glowstone/entity/passive/GlowChestedHorse.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/net/glowstone/entity/passive/GlowChestedHorse.java b/src/main/java/net/glowstone/entity/passive/GlowChestedHorse.java index 43cf09a59f..b158d3bf05 100644 --- a/src/main/java/net/glowstone/entity/passive/GlowChestedHorse.java +++ b/src/main/java/net/glowstone/entity/passive/GlowChestedHorse.java @@ -7,7 +7,6 @@ import org.bukkit.entity.EntityType; import org.bukkit.entity.Item; import org.bukkit.inventory.AbstractHorseInventory; -import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemStack; /** From 1c2de31692b1d181816659207ffed227560976d6 Mon Sep 17 00:00:00 2001 From: Chris Hennick <4961925+Pr0methean@users.noreply.github.com> Date: Sun, 18 Mar 2018 14:08:41 -0700 Subject: [PATCH 7/8] Skip inventory rebuild if not carrying a chest --- src/main/java/net/glowstone/entity/passive/GlowLlama.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/glowstone/entity/passive/GlowLlama.java b/src/main/java/net/glowstone/entity/passive/GlowLlama.java index 1256ba26a2..c8107676bd 100644 --- a/src/main/java/net/glowstone/entity/passive/GlowLlama.java +++ b/src/main/java/net/glowstone/entity/passive/GlowLlama.java @@ -39,7 +39,9 @@ public int getStrength() { @Override public void setStrength(int strength) { metadata.set(MetadataIndex.LLAMA_STRENGTH, strength); - inventory = createNewInventory(); + if (isCarryingChest()) { + inventory = createNewInventory(); + } } @Override From fd5f25215b63354eb2f09c47f32aabd1d366e916 Mon Sep 17 00:00:00 2001 From: Chris Hennick <4961925+Pr0methean@users.noreply.github.com> Date: Thu, 22 Mar 2018 18:22:50 -0700 Subject: [PATCH 8/8] Remove unneeded Javadoc comment --- src/main/java/net/glowstone/inventory/GlowLlamaInventory.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/net/glowstone/inventory/GlowLlamaInventory.java b/src/main/java/net/glowstone/inventory/GlowLlamaInventory.java index 93123c5a33..96b54d4e78 100644 --- a/src/main/java/net/glowstone/inventory/GlowLlamaInventory.java +++ b/src/main/java/net/glowstone/inventory/GlowLlamaInventory.java @@ -12,7 +12,6 @@ * to 15 slots. */ public class GlowLlamaInventory extends GlowInventory implements LlamaInventory { - /** The carpet this llama is wearing. */ @Getter @Setter protected ItemStack decor;