diff --git a/legacyver/item_translator.go b/legacyver/item_translator.go index a77a880..03aef62 100644 --- a/legacyver/item_translator.go +++ b/legacyver/item_translator.go @@ -498,7 +498,7 @@ func (t *DefaultItemTranslator) DowngradeItemPackets(pks []packet.Packet, _ *min panic(itemType) } } else { - t.latest.RegisterEntry(entry.Name) + t.latest.RegisterEntryRID(entry.Name, int32(entry.RuntimeID)) entry.RuntimeID = int16(t.mapping.RegisterEntry(entry.Name)) } pk.Items[i] = entry @@ -717,7 +717,7 @@ func (t *DefaultItemTranslator) UpgradeItemPackets(pks []packet.Packet, _ *minec panic(itemType) } } else { - t.latest.RegisterEntry(entry.Name) + t.latest.RegisterEntryRID(entry.Name, int32(entry.RuntimeID)) entry.RuntimeID = int16(t.mapping.RegisterEntry(entry.Name)) } pk.Items[i] = entry diff --git a/mapping/item.go b/mapping/item.go index e3babde..4ec7d86 100644 --- a/mapping/item.go +++ b/mapping/item.go @@ -12,6 +12,7 @@ type Item interface { // ItemNameToRuntimeID converts a string ID to an item runtime ID. ItemNameToRuntimeID(string) (int32, bool) RegisterEntry(string) int32 + RegisterEntryRID(string, int32) Air() int32 ItemVersion() uint16 } @@ -96,6 +97,15 @@ func (m *DefaultItemMapping) RegisterEntry(name string) int32 { return nextRID } +func (m *DefaultItemMapping) RegisterEntryRID(name string, rid int32) { + defer m.mu.Unlock() + m.mu.Lock() + if _, ok := m.itemNamesToRuntimeIDs[name]; !ok { + m.itemNamesToRuntimeIDs[name] = rid + m.itemRuntimeIDsToNames[rid] = name + } +} + func (m *DefaultItemMapping) Air() int32 { defer m.mu.Unlock() m.mu.Lock()