Fix ItemRegistry & block translation

This commit is contained in:
AkmalFairuz
2025-02-22 09:49:02 +07:00
parent 04ae436a21
commit 50ed6fb5b8
11 changed files with 86 additions and 14 deletions

View File

@@ -43,6 +43,10 @@ type ItemTranslator interface {
DowngradeLegacyItemRegistry(entries []proto.LegacyItemRegistryEntry) []proto.LegacyItemRegistryEntry
// UpgradeLegacyItemRegistry ...
UpgradeLegacyItemRegistry(entries []proto.LegacyItemRegistryEntry) []proto.LegacyItemRegistryEntry
// DowngradeItemEntries ...
DowngradeItemEntries(entries []proto.ItemEntry) []proto.ItemEntry
// UpgradeItemEntries ...
UpgradeItemEntries(entries []proto.ItemEntry) []proto.ItemEntry
}
type DefaultItemTranslator struct {
@@ -562,6 +566,70 @@ func (t *DefaultItemTranslator) UpgradeLegacyItemRegistry(entries []proto.Legacy
return entries
}
func (t *DefaultItemTranslator) DowngradeItemEntries(entries []proto.ItemEntry) []proto.ItemEntry {
for i, entry := range entries {
if !entry.ComponentBased {
itemType := t.DowngradeItemType(protocol.ItemType{
NetworkID: int32(entry.RuntimeID),
MetadataValue: 0,
})
if itemType.NetworkID == t.mapping.Air() {
removeIndex(entries, i)
continue
}
entry.RuntimeID = int16(itemType.NetworkID)
var ok bool
if entry.Name, ok = t.mapping.ItemRuntimeIDToName(int32(entry.RuntimeID)); !ok {
panic(entry)
}
} else {
t.latest.RegisterEntryRID(entry.Name, int32(entry.RuntimeID), 2)
entry.RuntimeID = int16(t.mapping.RegisterEntry(entry.Name))
}
entries[i] = entry
}
for rid, i := range t.CustomItems() {
name, _ := i.EncodeItem()
entries = append(entries, proto.ItemEntry{
Name: name,
RuntimeID: int16(rid),
ComponentBased: true,
})
}
return entries
}
func (t *DefaultItemTranslator) UpgradeItemEntries(entries []proto.ItemEntry) []proto.ItemEntry {
for i, entry := range entries {
if !entry.ComponentBased {
itemType := t.UpgradeItemType(protocol.ItemType{
NetworkID: int32(entry.RuntimeID),
MetadataValue: 0,
})
entry.RuntimeID = int16(itemType.NetworkID)
var ok bool
if entry.Name, ok = t.latest.ItemRuntimeIDToName(int32(entry.RuntimeID)); !ok {
panic(entry)
}
} else {
t.latest.RegisterEntryRID(entry.Name, int32(entry.RuntimeID), 2)
entry.RuntimeID = int16(t.mapping.RegisterEntry(entry.Name))
}
entries[i] = entry
}
for rid, i := range t.CustomItems() {
name, _ := i.EncodeItem()
entries = append(entries, proto.ItemEntry{
Name: name,
RuntimeID: int16(rid),
ComponentBased: true,
})
}
return entries
}
func (t *DefaultItemTranslator) UpgradeItemPackets(pks []packet.Packet, _ *minecraft.Conn) (result []packet.Packet) {
for _, pk := range pks {
switch pk := pk.(type) {