9
0
mirror of https://github.com/SparklyPower/SparklyPaper.git synced 2025-12-19 15:09:27 +00:00

Add SparklyPower's LegacyNBTRemapper

This commit is contained in:
MrPowerGamerBR
2025-06-17 13:57:50 -03:00
parent 682ec2f942
commit 627719c3da
7 changed files with 111 additions and 6 deletions

View File

@@ -0,0 +1,10 @@
--- a/ca/spottedleaf/dataconverter/minecraft/converters/itemstack/ConverterItemStackToDataComponents.java
+++ b/ca/spottedleaf/dataconverter/minecraft/converters/itemstack/ConverterItemStackToDataComponents.java
@@ -1220,6 +_,7 @@
ret.setString("id", this.id);
ret.setInt("count", this.count);
if (!this.tag.isEmpty()) {
+ net.sparklypower.sparklypaper.LegacyNBTRemapper.INSTANCE.remap(this.tag); // SparklyPaper - Remap SparklyPower hacky legacy NBT tags
this.components.setMap("minecraft:custom_data", this.tag);
}

View File

@@ -1,6 +1,6 @@
--- a/net/minecraft/server/level/ServerEntity.java
+++ b/net/minecraft/server/level/ServerEntity.java
@@ -205,6 +_,7 @@
@@ -209,6 +_,7 @@
if (this.entity.hasImpulse || this.trackDelta || this.entity instanceof LivingEntity && ((LivingEntity)this.entity).isFallFlying()) {
Vec3 deltaMovement = this.entity.getDeltaMovement();
@@ -8,7 +8,7 @@
double d = deltaMovement.distanceToSqr(this.lastSentMovement);
if (d > 1.0E-7 || d > 0.0 && deltaMovement.lengthSqr() == 0.0) {
this.lastSentMovement = deltaMovement;
@@ -222,6 +_,7 @@
@@ -226,6 +_,7 @@
this.broadcast.accept(new ClientboundSetEntityMotionPacket(this.entity.getId(), this.lastSentMovement));
}
}

View File

@@ -1,6 +1,6 @@
--- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java
@@ -562,6 +_,12 @@
@@ -565,6 +_,12 @@
}
// Paper end - chunk tick iteration

View File

@@ -1,6 +1,6 @@
--- a/net/minecraft/world/entity/Display.java
+++ b/net/minecraft/world/entity/Display.java
@@ -681,7 +_,7 @@
@@ -677,7 +_,7 @@
private static final byte INITIAL_TEXT_OPACITY = -1;
public static final int INITIAL_BACKGROUND = 1073741824;
private static final int INITIAL_LINE_WIDTH = 200;

View File

@@ -1,6 +1,6 @@
--- a/net/minecraft/world/entity/player/Player.java
+++ b/net/minecraft/world/entity/player/Player.java
@@ -2127,6 +_,12 @@
@@ -2146,6 +_,12 @@
if (!(shootable.getItem() instanceof ProjectileWeaponItem)) {
return ItemStack.EMPTY;
} else {

View File

@@ -1,6 +1,6 @@
--- a/net/minecraft/world/level/block/Blocks.java
+++ b/net/minecraft/world/level/block/Blocks.java
@@ -6899,6 +_,52 @@
@@ -6887,6 +_,52 @@
.sound(SoundType.SWEET_BERRY_BUSH)
.pushReaction(PushReaction.DESTROY)
);

View File

@@ -0,0 +1,95 @@
package net.sparklypower.sparklypaper
import ca.spottedleaf.dataconverter.types.MapType
object LegacyNBTRemapper {
/**
* Remaps hacky direct NBT storage used in SparklyPower to proper PersistentDataContainer data
*/
fun remap(tag: MapType) {
val perfectDreamsMap = tag.getMap("PerfectDreams")
if (perfectDreamsMap != null) {
val publicBukkitValuesMap = tag.getOrCreateMap("PublicBukkitValues")
// The "setBoolean" functions do set bytes behind the scenes, just like how we do the things in SparklyPower
perfectDreamsMap.getStringAndRemove("isJetpack")?.let {
publicBukkitValuesMap.setBoolean("sparklypower:is_jetpack", it.toBoolean())
}
perfectDreamsMap.getStringAndRemove("disallowCrafting")?.let {
publicBukkitValuesMap.setBoolean("sparklypower:disallow_crafting", it.toBoolean())
}
perfectDreamsMap.getStringAndRemove("poop")?.let {
publicBukkitValuesMap.setBoolean("sparklypower:is_poop", it.toBoolean())
}
perfectDreamsMap.getStringAndRemove("renamedBySeuZe")?.let {
publicBukkitValuesMap.setBoolean("sparklypower:is_renamed_by_seu_ze", it.toBoolean())
}
perfectDreamsMap.getStringAndRemove("isMonsterPickaxe")?.let {
publicBukkitValuesMap.setBoolean("sparklypower:is_monster_tool", it.toBoolean())
}
perfectDreamsMap.getStringAndRemove("itemOwner")?.let {
publicBukkitValuesMap.setString("sparklypower:item_owner", it)
}
perfectDreamsMap.getStringAndRemove("DreamFusca")?.let {
publicBukkitValuesMap.setString("sparklypower:fusca_info", it)
}
perfectDreamsMap.getStringAndRemove("isFusca")?.let {
publicBukkitValuesMap.setBoolean("sparklypower:is_fusca", it.toBoolean())
}
perfectDreamsMap.getStringAndRemove("fancyLeatherArmor")?.let {
publicBukkitValuesMap.setBoolean("sparklypower:is_fancy_leather_armor", it.toBoolean())
}
perfectDreamsMap.getStringAndRemove("caixaSecretaLevel")?.let {
publicBukkitValuesMap.setInt("sparklypower:caixa_secreta_level", it.toInt())
}
perfectDreamsMap.getStringAndRemove("caixaSecretaWorld")?.let {
publicBukkitValuesMap.setString("sparklypower:caixa_secreta_world", it)
}
perfectDreamsMap.getStringAndRemove("isMoveSpawners")?.let {
publicBukkitValuesMap.setBoolean("sparklypower:is_move_spawners_tool", it.toBoolean())
}
perfectDreamsMap.getStringAndRemove("spawnerType")?.let {
publicBukkitValuesMap.setString("sparklypower:spawner_type", it)
}
perfectDreamsMap.getStringAndRemove("isMochila")?.let {
publicBukkitValuesMap.setBoolean("sparklypower:is_mochila", it.toBoolean())
}
perfectDreamsMap.getStringAndRemove("mochilaId")?.let {
publicBukkitValuesMap.setLong("sparklypower:mochila_id", it.toLong())
}
perfectDreamsMap.getStringAndRemove("customMapOwner")?.let {
publicBukkitValuesMap.setString("sparklypower:map_custom_owner", it)
}
perfectDreamsMap.getStringAndRemove("quickTeleport")?.let {
publicBukkitValuesMap.setBoolean("sparklypower:is_quick_resources_teleport", it.toBoolean())
}
// If it is empty, then it means that we have migrated everything and we can remove the old PerfectDreams tag, yay!
if (perfectDreamsMap.isEmpty)
tag.remove("PerfectDreams")
}
}
private fun MapType.getStringAndRemove(key: String): String? {
val v = getString(key)
remove(key)
return v
}
}