Files
Purpur/patches/server/0134-Apply-display-names-from-item-forms-of-entities-to-e.patch
BillyGalbreath 3d455ff2d5 Updated Upstream (Paper & Tuinity)
Upstream has released updates that appear to apply and compile correctly

Paper Changes:
e4633ca27 [Auto] Updated Upstream (Bukkit/CraftBukkit)
a23be44da [Auto] Updated Upstream (CraftBukkit)
e40ea889d [CI-SKIP] Deprecate the view distance APIs on Player (#4945)
d9fd54e16 Do not crash from invalid ingredient lists in VillagerAcquireTradeEvent
24388381a Fix lead duplication

Tuinity Changes:
09423b6 Update to Starlight 0.0.2-RC3
f06591a Update Upstream (Paper)
d2aa70f Revert special block lookup for chunksection
2020-12-28 01:24:52 -06:00

229 lines
12 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: jmp <jasonpenilla2@me.com>
Date: Tue, 17 Nov 2020 03:23:48 -0800
Subject: [PATCH] Apply display names from item forms of entities to entities
and vice versa
diff --git a/src/main/java/net/minecraft/server/EntityArmorStand.java b/src/main/java/net/minecraft/server/EntityArmorStand.java
index faa221038df6bed02a2433855ed7c7e0f89c6024..6efe59e0385e144c59804e9e5e18e6910b1f6667 100644
--- a/src/main/java/net/minecraft/server/EntityArmorStand.java
+++ b/src/main/java/net/minecraft/server/EntityArmorStand.java
@@ -553,7 +553,13 @@ public class EntityArmorStand extends EntityLiving {
}
private void f(DamageSource damagesource) {
- drops.add(org.bukkit.craftbukkit.inventory.CraftItemStack.asBukkitCopy(new ItemStack(Items.ARMOR_STAND))); // CraftBukkit - add to drops
+ // Purpur start
+ final ItemStack armorStand = new ItemStack(Items.ARMOR_STAND);
+ if (this.world.purpurConfig.persistentDroppableEntityDisplayNames && this.hasCustomName()) {
+ armorStand.setName(this.getCustomName());
+ }
+ drops.add(org.bukkit.craftbukkit.inventory.CraftItemStack.asBukkitCopy(armorStand)); // CraftBukkit - add to drops
+ // Purpur end
this.g(damagesource);
}
diff --git a/src/main/java/net/minecraft/server/EntityBoat.java b/src/main/java/net/minecraft/server/EntityBoat.java
index d53bbe31694c2d88939332691cdf145c46099e22..bc558c54c9e74e2158a5835173e6068cfaeffcc0 100644
--- a/src/main/java/net/minecraft/server/EntityBoat.java
+++ b/src/main/java/net/minecraft/server/EntityBoat.java
@@ -155,7 +155,13 @@ public class EntityBoat extends Entity {
}
// CraftBukkit end
if (!flag && this.world.getGameRules().getBoolean(GameRules.DO_ENTITY_DROPS)) {
- this.a((IMaterial) this.g());
+ // Purpur start
+ final ItemStack boat = new ItemStack(this.getMaterialForType());
+ if (this.world.purpurConfig.persistentDroppableEntityDisplayNames && this.hasCustomName()) {
+ boat.setName(this.getCustomName());
+ }
+ this.dropItem(boat);
+ // Purpur end
}
this.die();
@@ -216,6 +222,7 @@ public class EntityBoat extends Entity {
}
+ public Item getMaterialForType() { return this.g(); } // Purpur - OBFHELPER
public Item g() {
switch (this.getType()) {
case OAK:
diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java
index ace2bb69fcde9af2a1691a25ae945bfe44ce117b..2169de3c4118fca7048f9939a9570939cd287a34 100644
--- a/src/main/java/net/minecraft/server/EntityInsentient.java
+++ b/src/main/java/net/minecraft/server/EntityInsentient.java
@@ -1366,7 +1366,13 @@ public abstract class EntityInsentient extends EntityLiving {
this.by = null;
if (!this.world.isClientSide && flag1) {
this.forceDrops = true; // CraftBukkit
- this.a((IMaterial) Items.LEAD);
+ // Purpur start
+ final ItemStack lead = new ItemStack(Items.LEAD);
+ if (this.world.purpurConfig.persistentDroppableEntityDisplayNames && this.hasCustomName()) {
+ lead.setName(this.getCustomName());
+ }
+ this.dropItem(lead);
+ // Purpur end
this.forceDrops = false; // CraftBukkit
}
@@ -1442,7 +1448,13 @@ public abstract class EntityInsentient extends EntityLiving {
}
if (this.ticksLived > 100) {
- this.a((IMaterial) Items.LEAD);
+ // Purpur start
+ final ItemStack lead = new ItemStack(Items.LEAD);
+ if (this.world.purpurConfig.persistentDroppableEntityDisplayNames && this.hasCustomName()) {
+ lead.setName(this.getCustomName());
+ }
+ this.dropItem(lead);
+ // Purpur end
this.by = null;
}
}
diff --git a/src/main/java/net/minecraft/server/EntityItemFrame.java b/src/main/java/net/minecraft/server/EntityItemFrame.java
index 661db537f6ac2b5a80e2e40a25966a2e3039199d..a43a42aa696994a17dda790d01d09e0abdaade00 100644
--- a/src/main/java/net/minecraft/server/EntityItemFrame.java
+++ b/src/main/java/net/minecraft/server/EntityItemFrame.java
@@ -199,7 +199,13 @@ public class EntityItemFrame extends EntityHanging {
}
if (flag) {
- this.a((IMaterial) Items.ITEM_FRAME);
+ // Purpur start
+ final ItemStack itemFrame = new ItemStack(Items.ITEM_FRAME);
+ if (this.world.purpurConfig.persistentDroppableEntityDisplayNames && this.hasCustomName()) {
+ itemFrame.setName(this.getCustomName());
+ }
+ this.dropItem(itemFrame);
+ // Purpur end
}
if (!itemstack.isEmpty()) {
diff --git a/src/main/java/net/minecraft/server/EntityPainting.java b/src/main/java/net/minecraft/server/EntityPainting.java
index 4b7cd7c59fefbd56d38e0301b08d06ce92c9d8a2..d01fc8b11026536be30c8149aca253280524811f 100644
--- a/src/main/java/net/minecraft/server/EntityPainting.java
+++ b/src/main/java/net/minecraft/server/EntityPainting.java
@@ -92,7 +92,13 @@ public class EntityPainting extends EntityHanging {
}
}
- this.a((IMaterial) Items.PAINTING);
+ // Purpur start
+ final ItemStack painting = new ItemStack(Items.PAINTING);
+ if (this.world.purpurConfig.persistentDroppableEntityDisplayNames && this.hasCustomName()) {
+ painting.setName(this.getCustomName());
+ }
+ this.dropItem(painting);
+ // Purpur end
}
}
diff --git a/src/main/java/net/minecraft/server/ItemArmorStand.java b/src/main/java/net/minecraft/server/ItemArmorStand.java
index c9a5d3b583076cf8f2f32b12c142beb3f5e22dc0..315faee9e35d27071a62ea1d335dfbe5351582ca 100644
--- a/src/main/java/net/minecraft/server/ItemArmorStand.java
+++ b/src/main/java/net/minecraft/server/ItemArmorStand.java
@@ -43,6 +43,14 @@ public class ItemArmorStand extends Item {
return EnumInteractionResult.FAIL;
}
// CraftBukkit end
+ // Purpur start
+ if (itemactioncontext.getWorld().purpurConfig.persistentDroppableEntityDisplayNames && itemactioncontext.getItemStack().hasName()) {
+ entityarmorstand.setCustomName(itemactioncontext.getItemStack().getName());
+ if (itemactioncontext.getWorld().purpurConfig.armorstandSetNameVisible) {
+ entityarmorstand.setCustomNameVisible(true);
+ }
+ }
+ // Purpur end
worldserver.addAllEntities(entityarmorstand); // Paper - moved down
world.playSound((EntityHuman) null, entityarmorstand.locX(), entityarmorstand.locY(), entityarmorstand.locZ(), SoundEffects.ENTITY_ARMOR_STAND_PLACE, SoundCategory.BLOCKS, 0.75F, 0.8F);
}
diff --git a/src/main/java/net/minecraft/server/ItemBoat.java b/src/main/java/net/minecraft/server/ItemBoat.java
index 0580ce55ec945b5bc6ce8c5d0cee13b03ccc7d1a..6183da7ad2a458f4ada288ec82fdaf097d771122 100644
--- a/src/main/java/net/minecraft/server/ItemBoat.java
+++ b/src/main/java/net/minecraft/server/ItemBoat.java
@@ -52,6 +52,11 @@ public class ItemBoat extends Item {
entityboat.setType(this.b);
entityboat.yaw = entityhuman.yaw;
+ // Purpur start
+ if (world.purpurConfig.persistentDroppableEntityDisplayNames && itemstack.hasName()) {
+ entityboat.setCustomName(itemstack.getName());
+ }
+ // Purpur end
if (!world.getCubes(entityboat, entityboat.getBoundingBox().g(-0.1D))) {
return InteractionResultWrapper.fail(itemstack);
} else {
diff --git a/src/main/java/net/minecraft/server/ItemHanging.java b/src/main/java/net/minecraft/server/ItemHanging.java
index a3eaeeda875d96fe4b047bd6bf993018722c96b9..f2f800087adb0238b4b672b9f6f4c8c4836f2891 100644
--- a/src/main/java/net/minecraft/server/ItemHanging.java
+++ b/src/main/java/net/minecraft/server/ItemHanging.java
@@ -26,7 +26,7 @@ public class ItemHanging extends Item {
return EnumInteractionResult.FAIL;
} else {
World world = itemactioncontext.getWorld();
- Object object;
+ Entity object; // Purpur
if (this.a == EntityTypes.PAINTING) {
object = new EntityPainting(world, blockposition1, enumdirection);
@@ -42,6 +42,11 @@ public class ItemHanging extends Item {
if (nbttagcompound != null) {
EntityTypes.a(world, entityhuman, (Entity) object, nbttagcompound);
+ // Purpur start
+ if (itemactioncontext.getWorld().purpurConfig.persistentDroppableEntityDisplayNames && itemactioncontext.getItemStack().hasName()) {
+ object.setCustomName(itemactioncontext.getItemStack().getName());
+ }
+ // Purpur end
}
if (((EntityHanging) object).survives()) {
diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java
index 623bcb93cbdf0f67ee999104936f9d60c5228037..eb115a9c2aac9abe28d36f6284ca84f694a4898d 100644
--- a/src/main/java/net/minecraft/server/ItemStack.java
+++ b/src/main/java/net/minecraft/server/ItemStack.java
@@ -738,6 +738,7 @@ public final class ItemStack {
return this.getItem().h(this);
}
+ public ItemStack setName(@Nullable IChatBaseComponent component) { return this.a(component); } // Purpur - OBFHELPER
public ItemStack a(@Nullable IChatBaseComponent ichatbasecomponent) {
NBTTagCompound nbttagcompound = this.a("display");
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
index 992a0babbed1eee0c0d566612b54adfe2f56f00c..af3f910e639a17dbcade8609a3c8c42b0d138cbb 100644
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
@@ -83,8 +83,10 @@ public class PurpurWorldConfig {
return PurpurConfig.config.getString("world-settings." + worldName + "." + path, PurpurConfig.config.getString("world-settings.default." + path));
}
+ public boolean armorstandSetNameVisible = false;
public float armorstandStepHeight = 0.0F;
private void armorstandSettings() {
+ armorstandSetNameVisible = getBoolean("gameplay-mechanics.armorstand.set-name-visible-when-placing-with-custom-name", armorstandSetNameVisible);
armorstandStepHeight = (float) getDouble("gameplay-mechanics.armorstand.step-height", armorstandStepHeight);
}
@@ -199,6 +201,7 @@ public class PurpurWorldConfig {
public boolean entitiesCanUsePortals = true;
public boolean milkCuresBadOmen = true;
public boolean persistentTileEntityDisplayNames = false;
+ public boolean persistentDroppableEntityDisplayNames = false;
public double tridentLoyaltyVoidReturnHeight = 0.0D;
public double voidDamageHeight = -64.0D;
public int raidCooldownSeconds = 0;
@@ -211,6 +214,7 @@ public class PurpurWorldConfig {
entitiesCanUsePortals = getBoolean("gameplay-mechanics.entities-can-use-portals", entitiesCanUsePortals);
milkCuresBadOmen = getBoolean("gameplay-mechanics.milk-cures-bad-omen", milkCuresBadOmen);
persistentTileEntityDisplayNames = getBoolean("gameplay-mechanics.persistent-tileentity-display-names-and-lore", persistentTileEntityDisplayNames);
+ persistentDroppableEntityDisplayNames = getBoolean("gameplay-mechanics.persistent-droppable-entity-display-names", persistentDroppableEntityDisplayNames);
tridentLoyaltyVoidReturnHeight = getDouble("gameplay-mechanics.trident-loyalty-void-return-height", tridentLoyaltyVoidReturnHeight);
voidDamageHeight = getDouble("gameplay-mechanics.void-damage-height", voidDamageHeight);
raidCooldownSeconds = getInt("gameplay-mechanics.raid-cooldown-seconds", raidCooldownSeconds);