1717import net .minecraft .entity .EntityType ;
1818import net .minecraft .entity .data .DataTracker ;
1919import net .minecraft .entity .data .TrackedData ;
20- import net .minecraft .entity .data .TrackedDataHandler ;
2120import net .minecraft .entity .data .TrackedDataHandlerRegistry ;
2221import net .minecraft .nbt .NbtCompound ;
23- import net .minecraft .nbt .NbtElement ;
24- import net .minecraft .network .PacketByteBuf ;
25- import net .minecraft .network .codec .PacketCodecs ;
2622import net .minecraft .network .listener .ClientPlayPacketListener ;
2723import net .minecraft .network .packet .Packet ;
2824import net .minecraft .network .packet .s2c .play .EntitySpawnS2CPacket ;
3228import net .minecraft .world .World ;
3329import org .jetbrains .annotations .Nullable ;
3430
35- import java .util .Optional ;
36-
3731public class EmancipatedBlockEntity extends Entity {
3832
39- public static final TrackedDataHandler <Optional <NbtCompound >> OPTIONAL_NBT = TrackedDataHandler .create (PacketCodecs .optional (PacketCodecs .codec (NbtCompound .CODEC )));
40-
4133 private static final KeyedEndec <Integer > MAX_AGE_KEY = Endec .INT .keyed ("max_age" , 15 );
4234 private static final KeyedEndec <Float > ANIMATION_SCALE_KEY = Endec .FLOAT .keyed ("animation_scale" , 1f );
4335 private static final KeyedEndec <NbtCompound > EMANCIPATED_BLOCK_ENTITY_DATA_KEY = NbtEndec .COMPOUND .keyed ("emancipated_block_entity" , (NbtCompound ) null );
@@ -49,7 +41,8 @@ public class EmancipatedBlockEntity extends Entity {
4941
5042 private static final TrackedData <Integer > MAX_AGE = DataTracker .registerData (EmancipatedBlockEntity .class , TrackedDataHandlerRegistry .INTEGER );
5143 private static final TrackedData <Float > ANIMATION_SCALE = DataTracker .registerData (EmancipatedBlockEntity .class , TrackedDataHandlerRegistry .FLOAT );
52- private static final TrackedData <Optional <NbtCompound >> EMANCIPATED_BLOCK_ENTITY_DATA = DataTracker .registerData (EmancipatedBlockEntity .class , OPTIONAL_NBT );
44+ private static final TrackedData <Boolean > HAS_BLOCK_ENTITY_DATA = DataTracker .registerData (EmancipatedBlockEntity .class , TrackedDataHandlerRegistry .BOOLEAN );
45+ private static final TrackedData <NbtCompound > EMANCIPATED_BLOCK_ENTITY_DATA = DataTracker .registerData (EmancipatedBlockEntity .class , TrackedDataHandlerRegistry .NBT_COMPOUND );
5346 private BlockState emancipatedState = Blocks .AIR .getDefaultState ();
5447
5548 public EmancipatedBlockEntity (EntityType <?> type , World world ) {
@@ -75,7 +68,8 @@ public static EmancipatedBlockEntity spawn(World world, BlockPos emancipatedPos,
7568 protected void initDataTracker (DataTracker .Builder builder ) {
7669 builder .add (MAX_AGE , 15 );
7770 builder .add (ANIMATION_SCALE , 1f );
78- builder .add (EMANCIPATED_BLOCK_ENTITY_DATA , Optional .empty ());
71+ builder .add (HAS_BLOCK_ENTITY_DATA , false );
72+ builder .add (EMANCIPATED_BLOCK_ENTITY_DATA , new NbtCompound ());
7973 }
8074
8175 @ Override
@@ -96,11 +90,16 @@ public void setEmancipatedState(BlockState emancipatedState) {
9690 }
9791
9892 public @ Nullable NbtCompound emancipatedBlockEntityData () {
99- return this .dataTracker .get (EMANCIPATED_BLOCK_ENTITY_DATA ). orElse ( null ) ;
93+ return this .dataTracker .get (HAS_BLOCK_ENTITY_DATA ) ? this . dataTracker . get ( EMANCIPATED_BLOCK_ENTITY_DATA ) : null ;
10094 }
10195
10296 private void setEmancipatedBlockEntityData (@ Nullable NbtCompound emancipatedBlockEntity ) {
103- this .dataTracker .set (EMANCIPATED_BLOCK_ENTITY_DATA , Optional .ofNullable (emancipatedBlockEntity ));
97+ if (emancipatedBlockEntity != null ) {
98+ this .dataTracker .set (HAS_BLOCK_ENTITY_DATA , true );
99+ this .dataTracker .set (EMANCIPATED_BLOCK_ENTITY_DATA , emancipatedBlockEntity );
100+ } else {
101+ this .dataTracker .set (HAS_BLOCK_ENTITY_DATA , false );
102+ }
104103 }
105104
106105 public int maxAge () {
0 commit comments