mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-18 17:07:43 +01:00
Updated Upstream (Paper)
Upstream has released updates that appear to apply and compile correctly Paper Changes: 98a702c7d [CI-SKIP] [Auto] Rebuild Patches cab361600 Expose LivingEntity hurt direction 7ef05fbd8 Do not perform neighbour updates when using debug stick (Fixes #2134)
This commit is contained in:
@@ -0,0 +1,186 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: jmp <jasonpenilla2@me.com>
|
||||
Date: Wed, 30 Sep 2020 14:32:46 -0700
|
||||
Subject: [PATCH] Persistent TileEntity Lore and DisplayName
|
||||
|
||||
Makes it so that when a TileEntity is placed in the world and then broken,
|
||||
the dropped ItemStack retains any original custom display name/lore.
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/Block.java b/src/main/java/net/minecraft/server/Block.java
|
||||
index d621b11ba9029a732a819e0558d6f8a439990dbe..c276a2896ba73d86e7e18d656903b36d2970ac41 100644
|
||||
--- a/src/main/java/net/minecraft/server/Block.java
|
||||
+++ b/src/main/java/net/minecraft/server/Block.java
|
||||
@@ -207,7 +207,7 @@ public class Block extends BlockBase implements IMaterial {
|
||||
public static void a(IBlockData iblockdata, GeneratorAccess generatoraccess, BlockPosition blockposition, @Nullable TileEntity tileentity) {
|
||||
if (generatoraccess instanceof WorldServer) {
|
||||
a(iblockdata, (WorldServer) generatoraccess, blockposition, tileentity).forEach((itemstack) -> {
|
||||
- a((World) ((WorldServer) generatoraccess), blockposition, itemstack);
|
||||
+ dropItem((WorldServer) generatoraccess, blockposition, applyDisplayNameAndLoreFromTile(itemstack, tileentity)); // Purpur
|
||||
});
|
||||
iblockdata.dropNaturally((WorldServer) generatoraccess, blockposition, ItemStack.b);
|
||||
}
|
||||
@@ -216,14 +216,56 @@ public class Block extends BlockBase implements IMaterial {
|
||||
|
||||
public static void dropItems(IBlockData iblockdata, World world, BlockPosition blockposition, @Nullable TileEntity tileentity, Entity entity, ItemStack itemstack) {
|
||||
if (world instanceof WorldServer) {
|
||||
- getDrops(iblockdata, (WorldServer) world, blockposition, tileentity, entity, itemstack).forEach((itemstack1) -> {
|
||||
- a(world, blockposition, itemstack1);
|
||||
+ // Purpur start
|
||||
+ getDrops(iblockdata, (WorldServer) world, blockposition, tileentity, entity, itemstack).forEach(stackToDrop -> {
|
||||
+ dropItem(world, blockposition, applyDisplayNameAndLoreFromTile(stackToDrop, tileentity));
|
||||
+ // Purpur end
|
||||
});
|
||||
iblockdata.dropNaturally((WorldServer) world, blockposition, itemstack);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+ // Purpur start
|
||||
+ private static ItemStack applyDisplayNameAndLoreFromTile(ItemStack itemStack, TileEntity tile) {
|
||||
+ if (itemStack.getItem() instanceof ItemBlock) {
|
||||
+ if (tile != null && tile.getWorld() instanceof WorldServer && tile.getWorld().purpurConfig.persistentTileEntityDisplayNames) {
|
||||
+ String name = tile.getPersistentDisplayName();
|
||||
+ NBTTagList lore = tile.getPersistentLore();
|
||||
+ if (tile instanceof INamableTileEntity) {
|
||||
+ INamableTileEntity namedTile = (INamableTileEntity) tile;
|
||||
+ if (namedTile.hasCustomName()) {
|
||||
+ name = IChatBaseComponent.ChatSerializer.componentToJson(namedTile.getCustomName());
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (name != null || lore != null) {
|
||||
+ NBTTagCompound display = itemStack.getSubTag("display");
|
||||
+ if (display == null) {
|
||||
+ display = new NBTTagCompound();
|
||||
+ }
|
||||
+
|
||||
+ if (name != null) {
|
||||
+ display.set("Name", NBTTagString.create(name));
|
||||
+ }
|
||||
+ if (lore != null) {
|
||||
+ display.set("Lore", lore);
|
||||
+ }
|
||||
+
|
||||
+ NBTTagCompound tag = itemStack.getTag();
|
||||
+ if (tag == null) {
|
||||
+ tag = new NBTTagCompound();
|
||||
+ }
|
||||
+ tag.set("display", display);
|
||||
+
|
||||
+ itemStack.setTag(tag);
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ return itemStack;
|
||||
+ }
|
||||
+ // Purpur end
|
||||
+
|
||||
public static void a(World world, BlockPosition blockposition, ItemStack itemstack) { dropItem(world, blockposition, itemstack); } public static void dropItem(World world, BlockPosition blockposition, ItemStack itemstack) { // Paper - OBFHELPER
|
||||
if (!world.isClientSide && !itemstack.isEmpty() && world.getGameRules().getBoolean(GameRules.DO_TILE_DROPS)) {
|
||||
float f = 0.5F;
|
||||
diff --git a/src/main/java/net/minecraft/server/ItemBlock.java b/src/main/java/net/minecraft/server/ItemBlock.java
|
||||
index bbb1de7d1adce6e986467db234b27518df4dd87f..d97efe3d4765dcae50afae49d252e710c056337f 100644
|
||||
--- a/src/main/java/net/minecraft/server/ItemBlock.java
|
||||
+++ b/src/main/java/net/minecraft/server/ItemBlock.java
|
||||
@@ -96,7 +96,24 @@ public class ItemBlock extends Item {
|
||||
}
|
||||
|
||||
protected boolean a(BlockPosition blockposition, World world, @Nullable EntityHuman entityhuman, ItemStack itemstack, IBlockData iblockdata) {
|
||||
- return a(world, entityhuman, blockposition, itemstack);
|
||||
+ // Purpur start
|
||||
+ boolean handled = a(world, entityhuman, blockposition, itemstack);
|
||||
+ if (world.purpurConfig.persistentTileEntityDisplayNames && itemstack.hasTag()) {
|
||||
+ NBTTagCompound display = itemstack.getSubTag("display");
|
||||
+ if (display != null) {
|
||||
+ TileEntity tile = world.getTileEntity(blockposition);
|
||||
+ if (tile != null) {
|
||||
+ if (display.hasKeyOfType("Name", 8)) {
|
||||
+ tile.setPersistentDisplayName(display.getString("Name"));
|
||||
+ }
|
||||
+ if (display.hasKeyOfType("Lore", 9)) {
|
||||
+ tile.setPersistentLore(display.getList("Lore", 8));
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ return handled;
|
||||
+ // Purpur end
|
||||
}
|
||||
|
||||
@Nullable
|
||||
diff --git a/src/main/java/net/minecraft/server/TileEntity.java b/src/main/java/net/minecraft/server/TileEntity.java
|
||||
index 58d958a88ac5af5b889d719d9f1ea90ce45cf184..8e8749095427b44e04582593114cae8cf6d00f42 100644
|
||||
--- a/src/main/java/net/minecraft/server/TileEntity.java
|
||||
+++ b/src/main/java/net/minecraft/server/TileEntity.java
|
||||
@@ -90,9 +90,25 @@ public abstract class TileEntity implements KeyedObject { // Paper
|
||||
this.persistentDataContainer.putAll((NBTTagCompound) persistentDataTag);
|
||||
}
|
||||
// CraftBukkit end
|
||||
+ // Purpur start
|
||||
+ if (nbttagcompound.hasKey("Purpur.persistentDisplayName")) {
|
||||
+ this.persistentDisplayName = nbttagcompound.getString("Purpur.persistentDisplayName");
|
||||
+ }
|
||||
+ if (nbttagcompound.hasKey("Purpur.persistentLore")) {
|
||||
+ this.persistentLore = nbttagcompound.getList("Purpur.persistentLore", 8);
|
||||
+ }
|
||||
+ // Purpur end
|
||||
}
|
||||
|
||||
public NBTTagCompound save(NBTTagCompound nbttagcompound) {
|
||||
+ // Purpur start
|
||||
+ if (this.persistentDisplayName != null) {
|
||||
+ nbttagcompound.set("Purpur.persistentDisplayName", NBTTagString.create(this.persistentDisplayName));
|
||||
+ }
|
||||
+ if (this.persistentLore != null) {
|
||||
+ nbttagcompound.set("Purpur.persistentLore", this.persistentLore);
|
||||
+ }
|
||||
+ // Purpur end
|
||||
return this.b(nbttagcompound);
|
||||
}
|
||||
|
||||
@@ -253,4 +269,25 @@ public abstract class TileEntity implements KeyedObject { // Paper
|
||||
return null;
|
||||
}
|
||||
// CraftBukkit end
|
||||
+
|
||||
+ // Purpur start
|
||||
+ private String persistentDisplayName = null;
|
||||
+ private NBTTagList persistentLore = null;
|
||||
+
|
||||
+ public void setPersistentDisplayName(String json) {
|
||||
+ this.persistentDisplayName = json;
|
||||
+ }
|
||||
+
|
||||
+ public void setPersistentLore(NBTTagList lore) {
|
||||
+ this.persistentLore = lore;
|
||||
+ }
|
||||
+
|
||||
+ public String getPersistentDisplayName() {
|
||||
+ return this.persistentDisplayName;
|
||||
+ }
|
||||
+
|
||||
+ public NBTTagList getPersistentLore() {
|
||||
+ return this.persistentLore;
|
||||
+ }
|
||||
+ // Purpur end
|
||||
}
|
||||
diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
index f04e2e562fb07ca0f1b4ac4e25fdb050554b5431..4d97a232351a2a70f8992ff1d8d93b1fb976029a 100644
|
||||
--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
+++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java
|
||||
@@ -182,6 +182,7 @@ public class PurpurWorldConfig {
|
||||
public boolean entitiesPickUpLootBypassMobGriefing = false;
|
||||
public boolean entitiesCanUsePortals = true;
|
||||
public boolean milkCuresBadOmen = true;
|
||||
+ public boolean persistentTileEntityDisplayNames = false;
|
||||
public double tridentLoyaltyVoidReturnHeight = 0.0D;
|
||||
public double voidDamageHeight = -64.0D;
|
||||
public int raidCooldownSeconds = 0;
|
||||
@@ -192,6 +193,7 @@ public class PurpurWorldConfig {
|
||||
entitiesPickUpLootBypassMobGriefing = getBoolean("gameplay-mechanics.entities-pick-up-loot-bypass-mob-griefing", entitiesPickUpLootBypassMobGriefing);
|
||||
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);
|
||||
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);
|
||||
Reference in New Issue
Block a user