Advertisement
Guest User

Untitled

a guest
Oct 14th, 2019
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.12 KB | None | 0 0
  1. -- lib/lunajson/src/ is not in default Lua package paths
  2. package.path = 'lib/lunajson/src/?.lua;' .. package.path;
  3.  
  4. ---
  5. -- Put in blockstates to ignore:
  6. local ignore = {
  7. ["minecraft:redstone_wire"] = {
  8. east = "none", -- fix property to value
  9. north = "none",
  10. south = "none",
  11. west = "none",
  12. },
  13. ["minecraft:redstone_ore"] = {
  14. lit = false -- removes whole property
  15. },
  16.  
  17. -- remove complete block (new in 1.13)
  18. ["minecraft:conduit"] = false,
  19. ["minecraft:sea_pickle"] = false,
  20. ["minecraft:turtle_egg"] = false,
  21.  
  22. ["minecraft:kelp"] = false,
  23. ["minecraft:kelp_plant"] = false,
  24. ["minecraft:dried_kelp_block"] = false,
  25.  
  26. ["minecraft:seagrass"] = false,
  27. ["minecraft:tall_seagrass"] = false,
  28.  
  29. ["minecraft:brain_coral"] = false,
  30. ["minecraft:brain_coral_block"] = false,
  31. ["minecraft:brain_coral_fan"] = false,
  32. ["minecraft:brain_coral_wall_fan"] = false,
  33. ["minecraft:bubble_coral"] = false,
  34. ["minecraft:bubble_coral_block"] = false,
  35. ["minecraft:bubble_coral_fan"] = false,
  36. ["minecraft:bubble_coral_wall_fan"] = false,
  37. ["minecraft:fire_coral"] = false,
  38. ["minecraft:fire_coral_block"] = false,
  39. ["minecraft:fire_coral_fan"] = false,
  40. ["minecraft:fire_coral_wall_fan"] = false,
  41. ["minecraft:horn_coral"] = false,
  42. ["minecraft:horn_coral_block"] = false,
  43. ["minecraft:horn_coral_fan"] = false,
  44. ["minecraft:horn_coral_wall_fan"] = false,
  45. ["minecraft:tube_coral"] = false,
  46. ["minecraft:tube_coral_block"] = false,
  47. ["minecraft:tube_coral_fan"] = false,
  48. ["minecraft:tube_coral_wall_fan"] = false,
  49. ["minecraft:dead_brain_coral_block"] = false,
  50. ["minecraft:dead_brain_coral_fan"] = false,
  51. ["minecraft:dead_brain_coral_wall_fan"] = false,
  52. ["minecraft:dead_bubble_coral_block"] = false,
  53. ["minecraft:dead_bubble_coral_fan"] = false,
  54. ["minecraft:dead_bubble_coral_wall_fan"] = false,
  55. ["minecraft:dead_fire_coral_block"] = false,
  56. ["minecraft:dead_fire_coral_fan"] = false,
  57. ["minecraft:dead_fire_coral_wall_fan"] = false,
  58. ["minecraft:dead_horn_coral_block"] = false,
  59. ["minecraft:dead_horn_coral_fan"] = false,
  60. ["minecraft:dead_horn_coral_wall_fan"] = false,
  61. ["minecraft:dead_tube_coral_block"] = false,
  62. ["minecraft:dead_tube_coral_fan"] = false,
  63. ["minecraft:dead_tube_coral_wall_fan"] = false,
  64.  
  65. ["minecraft:dark_prismarine_stairs"] = false,
  66. ["minecraft:prismarine_brick_stairs"] = false,
  67. ["minecraft:prismarine_stairs"] = false,
  68.  
  69. ["minecraft:prismarine_slab"] = false,
  70. ["minecraft:prismarine_brick_slab"] = false,
  71. ["minecraft:dark_prismarine_slab"] = false,
  72.  
  73. ["minecraft:spruce_trapdoor"] = false,
  74. ["minecraft:birch_trapdoor"] = false,
  75. ["minecraft:jungle_trapdoor"] = false,
  76. ["minecraft:acacia_trapdoor"] = false,
  77. ["minecraft:dark_oak_trapdoor"] = false,
  78.  
  79. ["minecraft:spruce_button"] = false,
  80. ["minecraft:birch_button"] = false,
  81. ["minecraft:jungle_button"] = false,
  82. ["minecraft:acacia_button"] = false,
  83. ["minecraft:dark_oak_button"] = false,
  84.  
  85. ["minecraft:stripped_oak_log"] = false,
  86. ["minecraft:stripped_spruce_log"] = false,
  87. ["minecraft:stripped_birch_log"] = false,
  88. ["minecraft:stripped_jungle_log"] = false,
  89. ["minecraft:stripped_acacia_log"] = false,
  90. ["minecraft:stripped_dark_oak_log"] = false,
  91.  
  92. ["minecraft:stripped_oak_wood"] = false,
  93. ["minecraft:stripped_spruce_wood"] = false,
  94. ["minecraft:stripped_birch_wood"] = false,
  95. ["minecraft:stripped_jungle_wood"] = false,
  96. ["minecraft:stripped_acacia_wood"] = false,
  97. ["minecraft:stripped_dark_oak_wood"] = false,
  98. }
  99.  
  100.  
  101. --- Prints usage instructions to stdout.
  102. -- If the optional `message` is passed, output is prepended by message _and_
  103. -- redirected to stderr.
  104. function usage(message)
  105. if message then
  106. io.output(io.stderr);
  107. io.write(message, "\n\n");
  108. end
  109. io.write(
  110. "Usage: lua Generator.lua INPUTFILE OUTPUTFILE\n"..
  111. "Converts the Minecraft blocks.json report format to an upgrade "..
  112. "template from 1.12 to 1.13.\n"..
  113. "\n"..
  114. "INPUTFILE and OUTPUTFILE must point to a valid path. INPUTFILE must "..
  115. "be readable and OUTPUTFILE must be writable. Either can be replaced "..
  116. "with `-` (dash character) to point to standard-input or -output.\n");
  117. os.exit(message and 1 or 0);
  118. end
  119.  
  120.  
  121. -- Test whether the script is run in a path where it can load it's libraries
  122. if not pcall(function() require("lunajson.decoder") end) then
  123. usage("Could not load required libraries, please run `Generator.lua` "..
  124. "within its directory and make sure to run `git submodule update`.");
  125. end
  126.  
  127.  
  128. -- Check/Prepare CLI arguments
  129. local inpath, outpath = ...;
  130. io.input(io.stdin);
  131. io.output(io.stdout);
  132.  
  133. if select("#", ...) ~= 2 then
  134. usage("Incorrect number of arguments.");
  135. end
  136.  
  137. if inpath ~= "-" then
  138. local handle, err = io.open(inpath, "r");
  139. io.input(handle or usage(err));
  140. end
  141.  
  142. if outpath ~= "-" then
  143. local handle, err = io.open(outpath, "w");
  144. io.output(handle or usage(err));
  145. end
  146.  
  147.  
  148. -- Main program starts here
  149. local decode = (require("lunajson.decoder"))();
  150. local encode = (require("lunajson.encoder"))();
  151.  
  152. local input = decode(io.input():read("*a"));
  153. local max_id = -1;
  154. local EMPTY = {};
  155. local blocknames = {};
  156.  
  157. for blockname, _ in pairs(input) do
  158. blocknames[#blocknames+1] = blockname;
  159. end
  160. table.sort(blocknames, function(k1, k2)
  161. return input[k1].states[1].id < input[k2].states[1].id;
  162. end);
  163.  
  164. for _, blockname in ipairs(blocknames) do
  165. local blockdata = input[blockname];
  166. local propnames = {}; -- property name sorting
  167. local lines = {}; -- used for dedup
  168.  
  169. if ignore[blockname] ~= false then
  170. io.stderr:write(("%d - %s\n"):format(#blockdata.states, blockname))
  171.  
  172. for propname, _ in pairs(blockdata.properties or EMPTY) do
  173. propnames[#propnames+1] = propname;
  174. end
  175. table.sort(propnames);
  176.  
  177. for i = 1, #(blockdata.states or {}) do
  178. local state = blockdata.states[i];
  179. local line = ""
  180.  
  181. line = line .. "FIXME" .. "\t" .. "FIXME" .. "\t" .. blockname;
  182.  
  183. for i = 1, #propnames do
  184. local property = propnames[i];
  185. if ignore[blockname] and ignore[blockname][property] ~= nil then
  186. if ignore[blockname][property] then
  187. line = line .. "\t" .. property .. "\t" .. ignore[blockname][property];
  188. end
  189. else
  190. line = line .. "\t" .. property .. "\t" .. state.properties[property];
  191. end
  192. end
  193. if not lines[line] then
  194. lines[line] = true;
  195. -- io.write(state.id, "\t"); -- test
  196. io.write(line, "\n");
  197. end
  198. end
  199. end
  200. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement