Minecraft world importer for Gamecraft.
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

128 líneas
4.6KB

  1. using System;
  2. using System.IO;
  3. using DataLoader;
  4. using GamecraftModdingAPI;
  5. using GamecraftModdingAPI.Blocks;
  6. using Newtonsoft.Json;
  7. using RobocraftX.Blocks;
  8. using RobocraftX.Blocks.Ghost;
  9. using RobocraftX.Blocks.Scaling;
  10. using RobocraftX.Character;
  11. using RobocraftX.CommandLine.Custom;
  12. using RobocraftX.Common;
  13. using RobocraftX.Common.Input;
  14. using RobocraftX.Common.Utilities;
  15. using RobocraftX.CR.MachineEditing;
  16. using RobocraftX.StateSync;
  17. using Svelto.ECS;
  18. using Svelto.ECS.EntityStructs;
  19. using Unity.Jobs;
  20. using Unity.Mathematics;
  21. using uREPL;
  22. namespace GCMC
  23. {
  24. public class CubePlacerEngine : IQueryingEntitiesEngine, IDeterministicTimeStopped
  25. {
  26. public void Ready()
  27. {
  28. RuntimeCommands.Register<string>("importWorld", ImportWorld, "Imports a Minecraft world.");
  29. }
  30. public EntitiesDB entitiesDB { get; set; }
  31. private void ImportWorld(string name)
  32. {
  33. try
  34. {
  35. Log.Output("Starting...");
  36. var blocksArray = JsonSerializer.Create()
  37. .Deserialize<Blocks[]>(new JsonTextReader(File.OpenText(name)));
  38. int C = 0;
  39. foreach (var blocks in blocksArray)
  40. {
  41. BlockIDs id;
  42. BlockColors color;
  43. byte darkness = 0;
  44. switch (blocks.Material)
  45. {
  46. case "DIRT":
  47. id = BlockIDs.DirtCube;
  48. color = BlockColors.Default;
  49. break;
  50. case "GRASS":
  51. id = BlockIDs.GrassCube;
  52. color = BlockColors.Default;
  53. break;
  54. case "STONE":
  55. case "COAL_ORE":
  56. case "IRON_ORE":
  57. id = BlockIDs.ConcreteCube;
  58. color = BlockColors.White;
  59. darkness = 5;
  60. break;
  61. case "LEAVES":
  62. id = BlockIDs.AluminiumCube;
  63. color = BlockColors.Green;
  64. darkness = 5;
  65. break;
  66. case "AIR":
  67. case "DOUBLE_PLANT":
  68. continue;
  69. case "LOG":
  70. id = BlockIDs.WoodCube;
  71. color = BlockColors.Default;
  72. break;
  73. case "WATER":
  74. id = BlockIDs.AluminiumCube;
  75. color = BlockColors.Blue;
  76. break;
  77. case "SAND":
  78. id = BlockIDs.AluminiumCube;
  79. color = BlockColors.Yellow;
  80. break;
  81. case "LONG_GRASS":
  82. id = BlockIDs.Flower1;
  83. color = BlockColors.Default;
  84. break;
  85. case "YELLOW_FLOWER":
  86. id = BlockIDs.Flower2;
  87. color = BlockColors.Default;
  88. break;
  89. case "GRAVEL":
  90. id = BlockIDs.ConcreteCube;
  91. color = BlockColors.White;
  92. darkness = 7;
  93. break;
  94. case "CLAY":
  95. id = BlockIDs.ConcreteCube;
  96. color = BlockColors.White;
  97. darkness = 4;
  98. break;
  99. default:
  100. Console.WriteLine("Unknown block: " + blocks.Material);
  101. continue;
  102. }
  103. Block.PlaceNew(id, (blocks.Start + blocks.End) / 10 * 3, color: color, darkness: darkness,
  104. scale: (blocks.End - blocks.Start + 1) * 3, rotation: float3.zero);
  105. C++;
  106. }
  107. Log.Output(C + " blocks placed.");
  108. }
  109. catch (Exception e)
  110. {
  111. Console.WriteLine(e);
  112. Log.Error(e.Message);
  113. }
  114. }
  115. public JobHandle SimulatePhysicsStep(in float deltaTime, in PhysicsUtility utility, in PlayerInput[] playerInputs)
  116. {
  117. return new JobHandle();
  118. }
  119. public string name { get; } = "Cube placer engine";
  120. }
  121. }