private void onCharacterSelection(IServerPlayer fromPlayer, CharacterSelectionPacket p) { bool didSelectBefore = SerializerUtil.Deserialize(fromPlayer.GetModdata("createCharacter"), false); if (didSelectBefore && fromPlayer.WorldData.CurrentGameMode != EnumGameMode.Creative) { fromPlayer.BroadcastPlayerData(true); fromPlayer.Entity.WatchedAttributes.MarkPathDirty("skinConfig"); return; } if (p.DidSelect) { fromPlayer.SetModdata("createCharacter", SerializerUtil.Serialize <bool>(p.DidSelect)); setCharacterClass(fromPlayer.Entity, p.CharacterClass, !didSelectBefore || fromPlayer.WorldData.CurrentGameMode == EnumGameMode.Creative); var bh = fromPlayer.Entity.GetBehavior <EntityBehaviorExtraSkinnable>(); bh.ApplyVoice(p.VoiceType, p.VoicePitch, false); foreach (var skinpart in p.SkinParts) { bh.selectSkinPart(skinpart.Key, skinpart.Value, false); } } fromPlayer.Entity.WatchedAttributes.MarkPathDirty("skinConfig"); fromPlayer.BroadcastPlayerData(true); }
public override void OnReceivedClientPacket(IPlayer player, int packetid, byte[] data) { if (packetid == (int)EnumAnvilPacket.SelectRecipe) { int recipeid = SerializerUtil.Deserialize <int>(data); SmithingRecipe recipe = api.World.SmithingRecipes.FirstOrDefault(r => r.RecipeId == recipeid); if (recipe == null) { api.World.Logger.Error("Client tried to selected smithing recipe with id {0}, but no such recipe exists!"); return; } selectedRecipeId = recipe.RecipeId; // Tell server to save this chunk to disk again MarkDirty(); api.World.BlockAccessor.GetChunkAtBlockPos(pos.X, pos.Y, pos.Z).MarkModified(); } if (packetid == (int)EnumAnvilPacket.OnUserOver) { Vec3i voxelPos; using (MemoryStream ms = new MemoryStream(data)) { BinaryReader reader = new BinaryReader(ms); voxelPos = new Vec3i(reader.ReadInt32(), reader.ReadInt32(), reader.ReadInt32()); } OnUseOver(player, voxelPos, new BlockSelection() { Position = pos }); } }