Beispiel #1
0
        private void SteelSkin(Entity sourceEntity)
        {
            if (Network is BedrockClient bc)
            {
                MiNET.Utils.Skins.Skin skin = null;

                if (sourceEntity is RemotePlayer player)
                {
                    if (player.Skin != null)
                    {
                        skin = player.Skin;
                    }
                }
                else
                {
                    if (sourceEntity?.ModelRenderer?.Model == null)
                    {
                        return;
                    }

                    var model = sourceEntity.ModelRenderer.Model;
                    skin = model.ToSkin();
                }

                if (skin == null)
                {
                    return;
                }

                var texture = sourceEntity.ModelRenderer.Texture;

                if (skin.Data == null || skin.Data.Length == 0)
                {
                    skin = skin.UpdateTexture(texture);
                }

                var packet = McpePlayerSkin.CreateObject();
                packet.skin = skin;

                packet.uuid        = UUID;
                packet.isVerified  = true;
                packet.skinName    = skin.SkinId;
                packet.oldSkinName = "";

                bc.SendPacket(packet);

                Skin = skin;
                Log.Info($"Stole skin from {sourceEntity.NameTag}");

                /* File.WriteAllText(Path.Combine("skins", skin.SkinId + ".json"), skin.GeometryData);
                 *
                 * if (skin.TryGetBitmap(out var bmp))
                 * {
                 *       bmp.SaveAsPng(Path.Combine("skins", skin.SkinId + ".png"));
                 * }*/
            }
        }
        private void PlayerOnTicking(object sender, PlayerEventArgs playerEventArgs)
        {
            {
                var player = (PlayerMob)sender;
                if (player.Level.TickTime % 4 != 0)
                {
                    return;
                }
            }

            using var bmpScreenCapture = new Bitmap(2150, 1519);
            using (var g = Graphics.FromImage(bmpScreenCapture))
            {
                g.CopyFromScreen(1669, 90, 0, 0, bmpScreenCapture.Size, CopyPixelOperation.SourceCopy);
            }

            using var srcBitmap = new Bitmap(bmpScreenCapture, new Size((_width) * 62, (_height) * 62));
            foreach (var mobCoord in mobs)
            {
                PlayerMob mob = mobCoord.Value;
                mob.AddToPlayerList();

                int offsetx = (mobCoord.Key.Item1) * 62;
                int offsety = (_height - mobCoord.Key.Item2 - 1) * 62;
                using Bitmap croppedImage = NiceLobbyPlugin.CropImage(srcBitmap, new Rectangle(offsetx, offsety, 62, 62));
                using Bitmap textureImage = new Bitmap(64, 64);
                var gfx = Graphics.FromImage(textureImage);
                gfx.FillRectangle(Brushes.Black, new Rectangle(0, 0, 64, 64));
                gfx.DrawImageUnscaled(croppedImage, new Point(1, 1));
                //var bytes = NiceLobbyPlugin.BitmapToBytes(textureImage, true);
                var stream = new MemoryStream();
                textureImage.Save(stream, ImageFormat.MemoryBmp);
                var bytes = stream.ToArray();

                string oldSkinId = mob.Skin.SkinId;
                var    skin      = (Skin)mob.Skin.Clone();
                skin.Data   = bytes;
                skin.SkinId = "testing" + new Guid();
                mob.Skin    = skin;

                var updateSkin = McpePlayerSkin.CreateObject();
                updateSkin.uuid        = mob.ClientUuid;
                updateSkin.oldSkinName = oldSkinId;
                updateSkin.skinName    = mob.Skin.SkinId;
                updateSkin.skin        = mob.Skin;
                mob.Level.RelayBroadcast(updateSkin);

                mob.RemoveFromPlayerList();
            }
        }
        private void PlayerOnTicking(object sender, PlayerEventArgs playerEventArgs)
        {
            {
                var player = (PlayerMob)sender;
                if (player.Level.TickTime % 4 != 0)
                {
                    return;
                }
            }

            using (Bitmap bmpScreenCapture = new Bitmap(1118, 801))
            {
                using (Graphics g = Graphics.FromImage(bmpScreenCapture))
                {
                    g.CopyFromScreen(620, 101, 0, 0, bmpScreenCapture.Size, CopyPixelOperation.SourceCopy);
                }

                using (Bitmap srcBitmap = new Bitmap(bmpScreenCapture, new Size((_width) * 64, (_height) * 64)))
                {
                    foreach (var mobCoord in mobs)
                    {
                        PlayerMob mob = mobCoord.Value;
                        mob.AddToPlayerList();

                        int offsetx = (mobCoord.Key.Item1) * 64;
                        int offsety = (_height - mobCoord.Key.Item2 - 1) * 64;
                        using (Bitmap bitmap = NiceLobbyPlugin.CropImage(srcBitmap, new Rectangle(offsetx, offsety, 64, 64)))
                        {
                            var bytes = NiceLobbyPlugin.BitmapToBytes(bitmap, true);

                            var skin = mob.Skin;
                            skin.SkinData = bytes;

                            McpePlayerSkin updateSkin = McpePlayerSkin.CreateObject();
                            updateSkin.uuid          = mob.ClientUuid;
                            updateSkin.skinId        = skin.SkinId + new Guid();
                            updateSkin.skinData      = skin.SkinData;
                            updateSkin.capeData      = skin.CapeData;
                            updateSkin.geometryModel = skin.SkinGeometryName;
                            updateSkin.geometryData  = skin.SkinGeometry;
                            mob.Level.RelayBroadcast(updateSkin);
                        }

                        mob.RemoveFromPlayerList();
                    }
                }
            }
        }
Beispiel #4
0
        private void SkinTick(object state)
        {
            if (!Monitor.TryEnter(_skinSynk))
            {
                return;
            }

            try
            {
                foreach (var player in _players.Values)
                {
                    {
                        if (!player.Username.Equals("gurunx"))
                        {
                            continue;
                        }

                        Log.Debug("Skin tick");

                        if (_image >= 9)
                        {
                            _image = 0;
                        }

                        _image++;
                        _imageCape++;

                        Skin skin = player.Skin;


                        //skin.SkinGeometryName = "";
                        //skin.SkinGeometry = Encoding.UTF8.GetBytes(File.ReadAllText(@"D:\Temp\humanoid.json"));

                        //{
                        //	string file = Path.Combine(@"D:\Development\Other\Smash Heroes 3x6 (128)\Smash Heroes 3x6 (128)", $"Smash Heroes Trailer{_imageCape:D4}.bmp");
                        //	//string file = @"D:\Temp\Smiley\big_smile0" + _image + ".png";
                        //	if (!File.Exists(file))
                        //	{
                        //		_imageCape = 0;
                        //		continue;
                        //	}

                        //	//Bitmap bitmap = new Bitmap((Bitmap)Image.FromFile(file), 12, 18);
                        //	Bitmap bitmap = new Bitmap((Bitmap) Image.FromFile(file), 64, 64);
                        //	int offsetx = 16, offsety = 16;
                        //	bitmap = CropImage(bitmap, new Rectangle(offsetx, offsety, 12, 18));
                        //	byte[] bytes = new byte[32 * 64 * 4];

                        //	int i = 0;
                        //	for (int y = 0; y < 32; y++)
                        //	{
                        //		for (int x = 0; x < 64; x++)
                        //		{
                        //			if (y >= bitmap.Height || x >= bitmap.Width)
                        //			{
                        //				Color color = Color.Yellow;
                        //				bytes[i++] = color.R;
                        //				bytes[i++] = color.G;
                        //				bytes[i++] = color.B;
                        //				bytes[i++] = color.A;
                        //				continue;
                        //			}
                        //			else
                        //			{
                        //				Color color = bitmap.GetPixel(x, y);
                        //				bytes[i++] = color.R;
                        //				bytes[i++] = color.G;
                        //				bytes[i++] = color.B;
                        //				bytes[i++] = color.A;
                        //			}
                        //		}
                        //	}
                        //	skin.Cape = new Cape()
                        //	{
                        //		ImageHeight = 32,
                        //		ImageWidth = 64,
                        //		Data = bytes,
                        //	};
                        //}


                        Level level = player.Level;
                        if (level.TickTime % 10 != 0)
                        {
                            continue;
                        }
                        //player.SetNameTag(player.Username + " " + level.TickTime + " testing");
                        //player.SetDisplayName(player.Username + " " + level.TickTime + " testing");

                        var    texture = skin.Data;
                        byte[] smiley  = GetTextureFromFile(@"C:\Temp\Smiley\big_smile0" + _image + ".png");
                        if (smiley.Length != 8 * 8 * 4)
                        {
                            return;
                        }
                        int s  = 0;
                        int br = 8;
                        int bc = 8;
                        for (int r = 0; r < 8; r++)
                        {
                            for (int c = 0; c < 8; c++)
                            {
                                int i = ((c + bc) * 4) + ((r + br) * 64 * 4);
                                int j = ((c) * 4) + ((r) * 8 * 4);

                                texture[(i) + 0] = smiley[j + 0];
                                texture[(i) + 1] = smiley[j + 1];
                                texture[(i) + 2] = smiley[j + 2];
                                texture[(i) + 3] = smiley[j + 3];
                            }
                        }

                        {
                            var updateSkin = McpePlayerSkin.CreateObject();
                            updateSkin.uuid        = player.ClientUuid;
                            updateSkin.oldSkinName = player.Skin.SkinId;
                            updateSkin.skin        = skin;
                            updateSkin.skinName    = skin.SkinId;
                            level.RelayBroadcast(updateSkin);
                        }

                        {
                            //player.SpawnPosition = player.KnownPosition;

                            //level.DespawnFromAll(player);
                            //level.SpawnToAll(player);

                            //var players = level.GetSpawnedPlayers();

                            //McpePlayerList playerList = McpePlayerList.CreateObject();
                            //playerList.records = new PlayerAddRecords {player};
                            //level.RelayBroadcast(player, players, CreateMcpeBatch(playerList.Encode()));
                            //playerList.records = null;
                            //playerList.PutPool();

                            //player.IsInvisible = true;
                            //player.HideNameTag = true;
                            //player.BroadcastSetEntityData();

                            //player.SpawnToPlayers(players);

                            //Thread.Sleep(100);
                            //player.HideNameTag = false;
                            //player.IsInvisible = false;
                            //player.BroadcastSetEntityData();
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Log.Error("SkinTick", e);
            }
            finally
            {
                Monitor.Exit(_skinSynk);
            }
        }
 public void HandleMcpePlayerSkin(McpePlayerSkin message)
 {
 }
 public abstract void HandleMcpePlayerSkin(McpePlayerSkin message);
Beispiel #7
0
            public void FakeMeltTicking(object sender, PlayerEventArgs playerEventArgs)
            {
                var mob = (PlayerMob)sender;

                //Log.Warn("Done. De-register tick.");
                //mob.Ticking -= FakeMeltTicking;
                //return;

                if (CurrentModel == null)
                {
                    Log.Warn($"No current model set for mob.");
                    return;
                }

                try
                {
                    bool stillMoving = false;
                    foreach (Geometry geometry in CurrentModel.Geometry)
                    {
                        foreach (Bone bone in geometry.Bones)
                        {
                            if (bone.NeverRender)
                            {
                                continue;
                            }
                            if (bone.Cubes == null || bone.Cubes.Count == 0)
                            {
                                continue;
                            }

                            foreach (var cube in bone.Cubes)
                            {
                                if (cube.Origin[1] <= 0.05f && cube.Velocity.Y <= 0.01)
                                {
                                    cube.Origin[1] = 0f;
                                    cube.Velocity  = Vector3.Zero;
                                    continue;
                                }

                                stillMoving = true;

                                float x = cube.Origin[0];
                                float y = cube.Origin[1];
                                float z = cube.Origin[2];

                                cube.Origin    = new[] { x + cube.Velocity.X, Math.Max(0f, y + cube.Velocity.Y), z + cube.Velocity.Z };
                                cube.Velocity -= new Vector3(0, Gravity, 0);
                                cube.Velocity *= 1 - Drag;
                            }
                        }
                    }

                    if (!stillMoving)
                    {
                        Log.Warn("Done. De-register tick.");
                        mob.Ticking -= FakeMeltTicking;

                        // Reset?
                        if (ResetOnEnd)
                        {
                            Skin skin = mob.Skin;

                            var updateSkin = McpePlayerSkin.CreateObject();
                            updateSkin.NoBatch     = true;
                            updateSkin.uuid        = mob.ClientUuid;
                            updateSkin.oldSkinName = mob.Skin.SkinId;
                            updateSkin.skinName    = mob.Skin.SkinId;
                            updateSkin.skin        = skin;
                            mob.Level.RelayBroadcast(updateSkin);
                        }
                    }
                    else
                    {
                        Skin     skin     = mob.Skin;
                        Geometry geometry = CurrentModel.FindGeometry(skin.GeometryName);
                        geometry.Description.Identifier = $"geometry.{DateTime.UtcNow.Ticks}.{mob.ClientUuid}";
                        mob.Skin.SkinResourcePatch      = new SkinResourcePatch()
                        {
                            Geometry = new GeometryIdentifier()
                            {
                                Default = geometry.Description.Identifier
                            }
                        };

                        CurrentModel.Geometry.Clear();
                        CurrentModel.Geometry.Add(geometry);

                        skin.GeometryName = geometry.Description.Identifier;
                        skin.GeometryData = Skin.ToJson(CurrentModel);

                        var updateSkin = McpePlayerSkin.CreateObject();
                        updateSkin.NoBatch     = true;
                        updateSkin.uuid        = mob.ClientUuid;
                        updateSkin.oldSkinName = mob.Skin.SkinId;
                        updateSkin.skinName    = mob.Skin.SkinId;
                        updateSkin.skin        = skin;
                        mob.Level.RelayBroadcast(updateSkin);
                    }
                }
                catch (Exception e)
                {
                    mob.Ticking -= FakeMeltTicking;
                    Log.Error(e);
                }
            }
Beispiel #8
0
 public override void HandleMcpePlayerSkin(McpePlayerSkin message)
 {
 }
Beispiel #9
0
            public void FakeMeltTicking(object sender, PlayerEventArgs playerEventArgs)
            {
                Log.Debug("Ticking ... ");

                PlayerMob mob = (PlayerMob)sender;

                //Log.Warn("Done. De-register tick.");
                //mob.Ticking -= FakeMeltTicking;
                //return;

                if (CurrentModel == null)
                {
                    return;
                }

                try
                {
                    bool stillMoving = false;
                    foreach (var geometry in CurrentModel.Values)
                    {
                        foreach (var bone in geometry.Bones)
                        {
                            if (bone.NeverRender)
                            {
                                continue;
                            }
                            if (bone.Cubes == null || bone.Cubes.Count == 0)
                            {
                                continue;
                            }

                            foreach (var cube in bone.Cubes)
                            {
                                if (cube.Origin[1] <= 0.05f && cube.Velocity.Y <= 0.01)
                                {
                                    cube.Origin[1] = 0f;
                                    cube.Velocity  = Vector3.Zero;
                                    continue;
                                }

                                stillMoving = true;

                                float x = cube.Origin[0];
                                float y = cube.Origin[1];
                                float z = cube.Origin[2];

                                cube.Origin    = new[] { x + cube.Velocity.X, Math.Max(0f, y + cube.Velocity.Y), z + cube.Velocity.Z };
                                cube.Velocity -= new Vector3(0, Gravity, 0);
                                cube.Velocity *= 1 - Drag;
                            }
                        }
                    }

                    if (!stillMoving)
                    {
                        Log.Warn("Done. De-register tick.");
                        mob.Ticking -= FakeMeltTicking;

                        // Reset?
                        if (ResetOnEnd)
                        {
                            Skin skin = mob.Skin;

                            McpePlayerSkin updateSkin = McpePlayerSkin.CreateObject();
                            updateSkin.NoBatch = true;
                            updateSkin.uuid    = mob.ClientUuid;
                            updateSkin.skin    = skin;
                            mob.Level.RelayBroadcast(updateSkin);
                        }
                    }
                    else
                    {
                        Skin skin     = mob.Skin;
                        var  geometry = CurrentModel.FindGeometry(skin.GeometryName);
                        geometry.Name = $"geometry.{DateTime.UtcNow.Ticks}.{mob.ClientUuid}";

                        CurrentModel.Clear();
                        CurrentModel.Add(geometry.Name, geometry);

                        skin.GeometryName = geometry.Name;

                        McpePlayerSkin updateSkin = McpePlayerSkin.CreateObject();
                        updateSkin.NoBatch = true;
                        updateSkin.uuid    = mob.ClientUuid;
                        updateSkin.skin    = skin;
                        mob.Level.RelayBroadcast(updateSkin);
                    }
                }
                catch (Exception e)
                {
                    mob.Ticking -= FakeMeltTicking;
                    Log.Error(e);
                }
            }
Beispiel #10
0
 public override void HandleMcpePlayerSkin(McpePlayerSkin message)
 {
     //TODO: Load skin
     UnhandledPackage(message);
 }