static ItemFactory() { NameToId = BuildNameToId(); var assembly = Assembly.GetAssembly(typeof(Item)); using (var stream = assembly.GetManifestResourceStream(typeof(Item).Namespace + ".itemstates.json")) using (var reader = new StreamReader(stream)) { Itemstates = Itemstates.FromJson(reader.ReadToEnd()); } }
/// <inheritdoc /> public override void Reset() { entityIdSelf = default(long); runtimeEntityId = default(long); playerGamemode = default(int); spawn = default(Vector3); rotation = default(Vector2); seed = default(int); biomeType = default(short); biomeName = default(string); dimension = default(int); generator = default(int); gamemode = default(int); difficulty = default(int); x = default(int); y = default(int); z = default(int); hasAchievementsDisabled = default(bool); time = default(int); eduOffer = default(int); hasEduFeaturesEnabled = default(bool); eduProductUuid = default(string); rainLevel = default(float); lightningLevel = default(float); hasConfirmedPlatformLockedContent = default(bool); isMultiplayer = default(bool); broadcastToLan = default(bool); xboxLiveBroadcastMode = default(int); platformBroadcastMode = default(int); enableCommands = default(bool); isTexturepacksRequired = default(bool); gamerules = default(GameRules); experiments = default(Experiments); bonusChest = default(bool); mapEnabled = default(bool); permissionLevel = default(int); serverChunkTickRange = default(int); hasLockedBehaviorPack = default(bool); hasLockedResourcePack = default(bool); isFromLockedWorldTemplate = default(bool); useMsaGamertagsOnly = default(bool); isFromWorldTemplate = default(bool); isWorldTemplateOptionLocked = default(bool); onlySpawnV1Villagers = default(bool); gameVersion = default(string); limitedWorldWidth = default(int); limitedWorldLength = default(int); isNewNether = default(bool); experimentalGameplayOverride = default(bool); levelId = default(string); worldName = default(string); premiumWorldTemplateId = default(string); isTrial = default(bool); movementType = default(int); movementRewindHistorySize = default(int); enableNewBlockBreakSystem = default(bool); currentTick = default(long); enchantmentSeed = default(int); blockPalette = default(BlockPalette); itemstates = default(Itemstates); multiplayerCorrelationId = default(string); enableNewInventorySystem = default(bool); serverVersion = default(string); base.Reset(); }
public ItemTranslator(Itemstates itemstates) { var internalNameToNetworkName = new Dictionary <string, string>(StringComparer.Ordinal); var legacyTranslations = ResourceUtil.ReadResource <Dictionary <string, short> >("item_id_map.json", typeof(Item), "Data"); var r16Mapping = ResourceUtil.ReadResource <R16ToCurrentMap>("r16_to_current_item_map.json", typeof(Item), "Data"); var simpleMappings = new Dictionary <string, short>(); foreach (var entry in r16Mapping.Simple) { var oldId = entry.Key; var newId = entry.Value; if (simpleMappings.ContainsKey(newId)) { Log.Warn($"Duplicate mapping for StringID. NewId={newId} OldId={oldId}"); continue; } simpleMappings[newId] = legacyTranslations[oldId]; internalNameToNetworkName[oldId] = newId; } foreach (var entry in legacyTranslations) { var stringId = entry.Key; var integerId = entry.Value; if (simpleMappings.ContainsKey(stringId)) { continue; } simpleMappings[stringId] = integerId; } var complexMapping = new Dictionary <string, TranslatedItem>(); foreach (var entry in r16Mapping.Complex) { string oldId = entry.Key; var legacyIntegerId = legacyTranslations[oldId]; foreach (var mappingEntry in entry.Value) { var newId = mappingEntry.Value; if (short.TryParse(mappingEntry.Key, out var meta)) { if (!complexMapping.TryAdd(newId, new TranslatedItem(legacyIntegerId, meta))) { Log.Warn($"Duplicate complex... OldId={oldId} NewId={newId} (IntegerID={legacyIntegerId} Meta={meta})"); } } } } var internalToNetwork = new Dictionary <int, ComplexMappingEntry>(); var simpleInternalToNetwork = new Dictionary <int, int>(); var networkIdToInternal = new Dictionary <int, TranslatedItem>(); var simpleNetworkIdToInternal = new Dictionary <int, int>(); foreach (var state in itemstates) { var stringId = state.Name; var netId = state.Id; if (complexMapping.TryGetValue(stringId, out var translatedItem)) { var internalId = translatedItem.Id; var internalMeta = translatedItem.Meta; ComplexMappingEntry mappingEntry; if (!internalToNetwork.TryGetValue(internalId, out mappingEntry)) { mappingEntry = new ComplexMappingEntry(); internalToNetwork.Add(internalId, mappingEntry); } mappingEntry.Add(internalMeta, netId); internalToNetwork[internalId] = mappingEntry; networkIdToInternal.Add(netId, translatedItem); } else if (simpleMappings.TryGetValue(stringId, out var legacyId)) { simpleNetworkIdToInternal.Add(netId, legacyId); simpleInternalToNetwork.Add(legacyId, netId); } } _internalIdToNetwork = internalToNetwork; _simpleInternalIdToNetwork = simpleInternalToNetwork; _networkIdToInternal = networkIdToInternal; _simpleNetworkIdToInternal = simpleNetworkIdToInternal; _internalNameToNetworkName = internalNameToNetworkName; }
partial void AfterDecode() { entityIdSelf = ReadSignedVarLong(); runtimeEntityId = ReadUnsignedVarLong(); playerGamemode = ReadSignedVarInt(); spawn = ReadVector3(); rotation = ReadVector2(); //Level Settings seed = ReadSignedVarInt(); biomeType = ReadShort(); biomeName = ReadString(); dimension = ReadSignedVarInt(); generator = ReadSignedVarInt(); gamemode = ReadSignedVarInt(); difficulty = ReadSignedVarInt(); x = ReadSignedVarInt(); y = ReadVarInt(); z = ReadSignedVarInt(); hasAchievementsDisabled = ReadBool(); time = ReadSignedVarInt(); eduOffer = ReadSignedVarInt(); hasEduFeaturesEnabled = ReadBool(); eduProductUuid = ReadString(); rainLevel = ReadFloat(); lightningLevel = ReadFloat(); hasConfirmedPlatformLockedContent = ReadBool(); isMultiplayer = ReadBool(); broadcastToLan = ReadBool(); xboxLiveBroadcastMode = ReadVarInt(); platformBroadcastMode = ReadVarInt(); enableCommands = ReadBool(); isTexturepacksRequired = ReadBool(); gamerules = ReadGameRules(); experiments = ReadExperiments(); ReadBool(); bonusChest = ReadBool(); mapEnabled = ReadBool(); permissionLevel = ReadSignedVarInt(); serverChunkTickRange = ReadInt(); hasLockedBehaviorPack = ReadBool(); hasLockedResourcePack = ReadBool(); isFromLockedWorldTemplate = ReadBool(); useMsaGamertagsOnly = ReadBool(); isFromWorldTemplate = ReadBool(); isWorldTemplateOptionLocked = ReadBool(); onlySpawnV1Villagers = ReadBool(); gameVersion = ReadString(); limitedWorldWidth = ReadInt(); limitedWorldLength = ReadInt(); isNewNether = ReadBool(); if (ReadBool()) { experimentalGameplayOverride = ReadBool(); } else { experimentalGameplayOverride = false; } //End of level settings. levelId = ReadString(); worldName = ReadString(); premiumWorldTemplateId = ReadString(); isTrial = ReadBool(); //Player movement settings movementType = ReadSignedVarInt(); movementRewindHistorySize = ReadSignedVarInt(); enableNewBlockBreakSystem = ReadBool(); currentTick = ReadLong(); enchantmentSeed = ReadSignedVarInt(); try { blockPalette = ReadBlockPalette(); } catch (Exception ex) { Log.Warn($"Failed to read complete blockpallete", ex); return; } itemstates = ReadItemstates(); multiplayerCorrelationId = ReadString(); enableNewInventorySystem = ReadBool(); serverVersion = ReadString(); }