mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-21 18:37:42 +01:00
Upstream has released updates that appear to apply and compile correctly Paper Changes: 7232d8f2a EntityLoadCrossbowEvent#shouldConsumeItem 4740bd6c8 Mark PlayerInventory#getItem as nullable bd9ace578 Add a config option to limit the number of entities of each type to load/save in a chunk (#4792) 6bafeb5a9 Move logic from last patch into correct place 9668118fd disable entity ticking flag after watchdog obliteration
221 lines
12 KiB
Diff
221 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 4f95976f9a852fa89cedd1fe81d2077fe5d118ee..0254a9e971b2dd93436a38815bfd1dcca9a2ec67 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.getBoatItem());
|
|
+ if (this.world.purpurConfig.persistentDroppableEntityDisplayNames && this.hasCustomName()) {
|
|
+ boat.setName(this.getCustomName());
|
|
+ }
|
|
+ this.dropItem(boat);
|
|
+ // Purpur end
|
|
}
|
|
|
|
this.die();
|
|
diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java
|
|
index 4b524c2165e95a4d3d78b84b7b15416a4ea7d622..d1ed9856d3362e1bed37d60c268b7e91c404d25d 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityInsentient.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityInsentient.java
|
|
@@ -1367,7 +1367,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
|
|
}
|
|
|
|
@@ -1443,7 +1449,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 f5802f14b84a5b177ddbdb53a6c3ce892ef310f6..d65375f8849dcbcad4f0fbc456a005247145c724 100644
|
|
--- a/src/main/java/net/minecraft/server/ItemStack.java
|
|
+++ b/src/main/java/net/minecraft/server/ItemStack.java
|
|
@@ -733,6 +733,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 ef0c2320780c623df4dd638c9272110a2fb2e530..458aa1882da2015928c334e0f40b14ee36ba667d 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);
|