private void ExecutePickBlocks(BedrockTraceHandler caller) { var client = caller.Client; int count = 500; int yStart = 100; int x = 0; int z = 0; string fileName = Path.GetTempPath() + "pick_items_" + Guid.NewGuid() + ".json"; var writer = File.AppendText(fileName); var jsonSerializerSettings = new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.None, Formatting = Formatting.None, }; jsonSerializerSettings.Converters.Add(new NbtIntConverter()); jsonSerializerSettings.Converters.Add(new NbtStringConverter()); //BlockPalette palette = client.BlockPalette; BlockPalette palette = BlockFactory.BlockPalette; // only if we have updated it _resetEventPlayerHotbar.Reset(); for (int id = 0; id < count; id++) { try { { var request = new McpeCommandRequest(); request.command = $"/tp TheGrey {x} {150} {z}"; request.unknownUuid = new UUID(Guid.NewGuid().ToString()); client.SendPacket(request); } var block = BlockFactory.GetBlockById(id); if (block.GetType() == typeof(Block)) { continue; } if (block is Cocoa) { continue; // crashes on meta=15 } int y = yStart; for (int meta = 0; meta <= 15; meta++) { var blockstate = palette.FirstOrDefault(b => b.Id == id && b.Data == meta); if (blockstate == null) { continue; } blockstate.ItemInstance = null; // reset to nothing string name = blockstate.Name.Replace("minecraft:", ""); if (name == "double_plant" || name == "air" || name.StartsWith("element")) { break; } var pick = McpeBlockPickRequest.CreateObject(); pick.x = x; pick.y = y; pick.z = z; client.SendPacket(pick); //Thread.Sleep(100); if (!_resetEventPlayerHotbar.WaitOne(300)) { Log.Error($"No picked item for {id}, {meta}, {name}"); _lastSelectedItem = new ItemAir(); continue; //break; } // Investigate last selected item. This should be the one we picked Item item; lock (_lastSelectedItem) { item = _lastSelectedItem; _lastSelectedItem = new ItemAir(); } Log.Warn($"For {id}, {meta} we picked {item}"); blockstate.ItemInstance = new ItemPickInstance() { Id = item.Id, Metadata = item.Metadata, WantNbt = item.ExtraData != null }; string result = JsonConvert.SerializeObject(blockstate, jsonSerializerSettings); writer.WriteLine($"{item}; {result}"); writer.Flush(); if (blockstate.States.Count == 0) { break; } y += 2; } } finally { x += 2; } } writer.Close(); WritePaletteToJson(palette); Log.Warn("Finished!"); }
public void HandleMcpeBlockPickRequest(McpeBlockPickRequest message) { }
public void HandleMcpeBlockPickRequest(McpeBlockPickRequest message) { WritePackage(message); }