
#select version >=
#case 1.20.5:  #remap net.minecraft.network.syncher.SynchedEntityData private final net.minecraft.network.syncher.SyncedDataHolder owner:entity;
#case 1.14.4:  #remap net.minecraft.network.syncher.SynchedEntityData private final net.minecraft.world.entity.Entity owner:entity;
#case 1.10.2:  #remap net.minecraft.network.syncher.SynchedEntityData private final net.minecraft.world.entity.Entity owner:c;
#case 1.9:     #remap net.minecraft.network.syncher.SynchedEntityData private final net.minecraft.world.entity.Entity owner:b;
#case else:    #remap net.minecraft.network.syncher.SynchedEntityData private final net.minecraft.world.entity.Entity owner:a;
#endselect

#if version >= 1.18
    #remap net.minecraft.network.syncher.SynchedEntityData public boolean isDirty();
#else
    #remap net.minecraft.network.syncher.SynchedEntityData public boolean isDirty:a();
#endif

#if version < 1.20.5
  #select version >=
  #case 1.18:  #remap net.minecraft.network.syncher.SynchedEntityData private SynchedEntityData.DataItem<T> getItem(EntityDataAccessor<T> key);
  #case 1.13:  #remap net.minecraft.network.syncher.SynchedEntityData private SynchedEntityData.DataItem<T> getItem:b(EntityDataAccessor<T> key);
  #case 1.9:   #remap net.minecraft.network.syncher.SynchedEntityData private SynchedEntityData.DataItem<T> getItem:c(EntityDataAccessor<T> key);
  #case else:  #remap net.minecraft.network.syncher.SynchedEntityData private SynchedEntityData.DataItem getItem:j(int key);
  #endselect
#endif

#if version < 1.19.3
  #select version >=
  #case 1.17:    #remap net.minecraft.network.syncher.SynchedEntityData private boolean isEmpty;
  #case 1.10.2:  #remap net.minecraft.network.syncher.SynchedEntityData private boolean isEmpty:f;
  #case 1.9:     #remap net.minecraft.network.syncher.SynchedEntityData private boolean isEmpty:e;
  #case else:    #remap net.minecraft.network.syncher.SynchedEntityData private boolean isEmpty:b;
  #endselect
#endif

#select version >=
#case 1.17:    #remap net.minecraft.network.syncher.SynchedEntityData private boolean isDirty;
#case 1.10.2:  #remap net.minecraft.network.syncher.SynchedEntityData private boolean isDirty:g;
#case 1.9:     #remap net.minecraft.network.syncher.SynchedEntityData private boolean isDirty:f;
#case else:    #remap net.minecraft.network.syncher.SynchedEntityData private boolean isDirty:e;
#endselect

#if version >= 1.18
    #remap net.minecraft.network.syncher.SynchedEntityData.DataItem public net.minecraft.network.syncher.EntityDataAccessor<T> getAccessor();
    #remap net.minecraft.network.syncher.SynchedEntityData.DataItem public void setValue(T value);
    #remap net.minecraft.network.syncher.SynchedEntityData.DataItem public T getValue();
    #remap net.minecraft.network.syncher.SynchedEntityData.DataItem public boolean isDirty();
    #remap net.minecraft.network.syncher.SynchedEntityData.DataItem public void setDirty(boolean dirty);
#elseif version >= 1.9
    #remap net.minecraft.network.syncher.SynchedEntityData.DataItem public net.minecraft.network.syncher.EntityDataAccessor<T> getAccessor:a();
    #remap net.minecraft.network.syncher.SynchedEntityData.DataItem public void setValue:a(T value);
    #remap net.minecraft.network.syncher.SynchedEntityData.DataItem public T getValue:b();
    #remap net.minecraft.network.syncher.SynchedEntityData.DataItem public boolean isDirty:c();
    #remap net.minecraft.network.syncher.SynchedEntityData.DataItem public void setDirty:a(boolean dirty);
#else
    #remap net.minecraft.network.syncher.SynchedEntityData.DataItem public int getAccessorId:a();
    #remap net.minecraft.network.syncher.SynchedEntityData.DataItem public void setValue:a(Object value);
    #remap net.minecraft.network.syncher.SynchedEntityData.DataItem public Object getValue:b();
    #remap net.minecraft.network.syncher.SynchedEntityData.DataItem public int getValueTypeId:c();
    #remap net.minecraft.network.syncher.SynchedEntityData.DataItem public boolean isDirty:d();
    #remap net.minecraft.network.syncher.SynchedEntityData.DataItem public void setDirty:a(boolean dirty);
#endif

    // Note: only filters non-default elements on 1.19.3 and later, as this mechanism was absent prior
#select version >=
#case 1.19.3:  #remap net.minecraft.network.syncher.SynchedEntityData public List<SynchedEntityData.DataValue<?>> getNonDefaultValues();
#case 1.17:    #remap net.minecraft.network.syncher.SynchedEntityData public List<SynchedEntityData.DataValue<?>> getNonDefaultValues:getAll();
#case 1.9:     #remap net.minecraft.network.syncher.SynchedEntityData public List<SynchedEntityData.DataValue<?>> getNonDefaultValues:c();
#case else:    #remap net.minecraft.network.syncher.SynchedEntityData public List<SynchedEntityData.DataValue> getNonDefaultValues:c();
#endselect
