StaticInitializerOrder.cpp 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644
  1. #include "BlockType.h"
  2. #include "ItemType.h"
  3. #include "StaticRegistry.h"
  4. // block types
  5. #include "BasicBlocks.h"
  6. #include "Chest.h"
  7. #include "Grass.h"
  8. #include "GrowingPlant.h"
  9. #include "NoBlock.h"
  10. #include "TreeSeblingBlock.h"
  11. // fluid blocks
  12. #include "FluidBlock.h"
  13. // dimensions
  14. #include "OverworldDimension.h"
  15. // entities
  16. #include "ItemEntity.h"
  17. #include "Player.h"
  18. // item skills
  19. #include "Axe.h"
  20. #include "BasicItems.h"
  21. #include "PlayerHand.h"
  22. // world updates
  23. #include "AddEntityUpdate.h"
  24. #include "EntityRemovedUpdate.h"
  25. // Multiblocks
  26. #include "Game.h"
  27. #include "Hoe.h"
  28. #include "LightSources.h"
  29. #include "MultiblockTree.h"
  30. using namespace Framework;
  31. void initializeBlockTypes()
  32. {
  33. new NoBlockBlockType(BlockTypeEnum::NO_BLOCK, &NoBlock::INSTANCE);
  34. new NoBlockBlockType(BlockTypeEnum::AIR, &AirBlock::INSTANCE);
  35. (new BasicBlockType(BlockTypeEnum::DIRT,
  36. ItemTypeEnum::DIRT,
  37. ModelInfo("cube",
  38. {"blocks.ltdb/dirt.png",
  39. "blocks.ltdb/dirt.png",
  40. "blocks.ltdb/dirt.png",
  41. "blocks.ltdb/dirt.png",
  42. "blocks.ltdb/lawn.png",
  43. "blocks.ltdb/dirt.png"}),
  44. "Dirt",
  45. 0xFF3C7C29))
  46. ->initializeDefault();
  47. (new BasicBlockType(BlockTypeEnum::STONE,
  48. ItemTypeEnum::STONE,
  49. ModelInfo("cube", "blocks.ltdb/stone.png", 6),
  50. "Stone",
  51. 0xFF8E8E8D))
  52. ->setHardness(2.f)
  53. ->initializeDefault();
  54. (new BasicBlockType(BlockTypeEnum::SAND,
  55. ItemTypeEnum::SAND,
  56. ModelInfo("cube", "blocks.ltdb/sand.png", 6),
  57. "Sand",
  58. 0xFFAE8558))
  59. ->setHardness(0.5f)
  60. ->initializeDefault();
  61. (new BasicBlockType(BlockTypeEnum::WOOD_OAK,
  62. ItemTypeEnum::WOOD_OAK,
  63. ModelInfo("cube", "blocks.ltdb/oak.png", 6),
  64. "Oak Wood",
  65. 0xFF7F7A70))
  66. ->setHardness(1.5f)
  67. ->initializeDefault();
  68. (new BasicBlockType(
  69. BlockTypeEnum::LEAVES_WOOD_OAK,
  70. ItemTypeEnum::LEAVES_WOOD_OAK,
  71. ModelInfo("cube", "blocks.ltdb/leaves.png", 6),
  72. [](Vec3<int> pos, int dimensionId) {
  73. AdditionalItemSpawningBlock* block
  74. = new AdditionalItemSpawningBlock(
  75. BlockTypeEnum::LEAVES_WOOD_OAK, 0, pos, dimensionId);
  76. block->addSpawn({1, 1, 0.015, ItemTypeEnum::SEBLING_WOOD_OAK});
  77. return (Block*)block;
  78. },
  79. "Oak Wood Leaves",
  80. 0xFF6A7C37))
  81. ->setHardness(0.1f)
  82. ->initializeDefault();
  83. (new BasicBlockType(BlockTypeEnum::GRAVEL,
  84. ItemTypeEnum::GRAVEL,
  85. ModelInfo("cube", "blocks.ltdb/gravel.png", 6),
  86. "Gravel",
  87. 0xFF928D8C))
  88. ->setHardness(0.75f)
  89. ->initializeDefault();
  90. (new BasicBlockType(BlockTypeEnum::STONE_GRANITE,
  91. ItemTypeEnum::STONE_GRANITE,
  92. ModelInfo("cube", "blocks.ltdb/granite.png", 6),
  93. "Granite Stone",
  94. 0xFF3B3A3E))
  95. ->setHardness(3.f)
  96. ->initializeDefault();
  97. (new BasicBlockType(BlockTypeEnum::STONE_COBBLE,
  98. ItemTypeEnum::STONE_COBBLE,
  99. ModelInfo("cube", "blocks.ltdb/cobble.png", 6),
  100. "Cobble Stone",
  101. 0xFF7E7875))
  102. ->setHardness(1.f)
  103. ->initializeDefault();
  104. (new BasicBlockType(BlockTypeEnum::WOOD_BIRCH,
  105. ItemTypeEnum::WOOD_BIRCH,
  106. ModelInfo("cube", "blocks.ltdb/birch.png", 6),
  107. "Birch Wood",
  108. 0xFF99999D))
  109. ->setHardness(1.5f)
  110. ->initializeDefault();
  111. (new BasicBlockType(
  112. BlockTypeEnum::LEAVES_WOOD_BIRCH,
  113. ItemTypeEnum::LEAVES_WOOD_BIRCH,
  114. ModelInfo("cube", "blocks.ltdb/leaves.png", 6),
  115. [](Vec3<int> pos, int dimensionId) {
  116. AdditionalItemSpawningBlock* block
  117. = new AdditionalItemSpawningBlock(
  118. BlockTypeEnum::LEAVES_WOOD_BIRCH, 0, pos, dimensionId);
  119. block->addSpawn({1, 1, 0.03, ItemTypeEnum::SEBLING_WOOD_BIRCH});
  120. return (Block*)block;
  121. },
  122. "Birch Wood Leaves",
  123. 0xFF6A7C37))
  124. ->setHardness(0.1f)
  125. ->initializeDefault();
  126. (new BasicBlockType(BlockTypeEnum::WOOD_BEECH,
  127. ItemTypeEnum::WOOD_BEECH,
  128. ModelInfo("cube", "blocks.ltdb/beech.png", 6),
  129. "Beech Wood",
  130. 0xFF778172))
  131. ->setHardness(1.5f)
  132. ->initializeDefault();
  133. (new BasicBlockType(
  134. BlockTypeEnum::LEAVES_WOOD_BEECH,
  135. ItemTypeEnum::LEAVES_WOOD_BEECH,
  136. ModelInfo("cube", "blocks.ltdb/leaves.png", 6),
  137. [](Vec3<int> pos, int dimensionId) {
  138. AdditionalItemSpawningBlock* block
  139. = new AdditionalItemSpawningBlock(
  140. BlockTypeEnum::LEAVES_WOOD_BEECH, 0, pos, dimensionId);
  141. block->addSpawn({1, 1, 0.02, ItemTypeEnum::SEBLING_WOOD_BEECH});
  142. return (Block*)block;
  143. },
  144. "Beech Wood Leaves",
  145. 0xFF6A7C37))
  146. ->setHardness(0.1f)
  147. ->initializeDefault();
  148. (new BasicBlockType(BlockTypeEnum::STONE_BASALT,
  149. ItemTypeEnum::STONE_BASALT,
  150. ModelInfo("cube", "blocks.ltdb/basalt.png", 6),
  151. "Basalt Stone",
  152. 0xFF595552))
  153. ->setHardness(2.f)
  154. ->initializeDefault();
  155. (new BasicBlockType(BlockTypeEnum::WOOD_PINE,
  156. ItemTypeEnum::WOOD_PINE,
  157. ModelInfo("cube", "blocks.ltdb/pine.png", 6),
  158. "Pine Wood",
  159. 0xFF786C72))
  160. ->setHardness(1.4f)
  161. ->initializeDefault();
  162. (new BasicBlockType(
  163. BlockTypeEnum::LEAVES_WOOD_PINE,
  164. ItemTypeEnum::LEAVES_WOOD_PINE,
  165. ModelInfo("cube", "blocks.ltdb/leaves.png", 6),
  166. [](Vec3<int> pos, int dimensionId) {
  167. AdditionalItemSpawningBlock* block
  168. = new AdditionalItemSpawningBlock(
  169. BlockTypeEnum::LEAVES_WOOD_PINE, 0, pos, dimensionId);
  170. block->addSpawn({1, 1, 0.025, ItemTypeEnum::SEBLING_WOOD_PINE});
  171. return (Block*)block;
  172. },
  173. "Pine Wood Leaves",
  174. 0xFF6A7C37))
  175. ->setHardness(0.1f)
  176. ->initializeDefault();
  177. (new BasicLightSourceBlockType(BlockTypeEnum::TORCH,
  178. ItemTypeEnum::TORCH,
  179. ModelInfo("blocks.m3/torch", "blocks.ltdb/torch.png", 6),
  180. "Torch"))
  181. ->setHardness(0.f)
  182. ->setColor(0x00F69A54)
  183. ->initializeDefault();
  184. (new TreeSeblingBlockType(BlockTypeEnum::SEBLING_WOOD_OAK,
  185. ItemTypeEnum::SEBLING_WOOD_OAK,
  186. ModelInfo("blocks.m3/sebling", "blocks.ltdb/sebling.png", 1),
  187. BlockTypeEnum::WOOD_OAK,
  188. BlockTypeEnum::LEAVES_WOOD_OAK,
  189. "Oak Wood Sebling",
  190. 0xFD6A7B3A))
  191. ->setHardness(0.1f)
  192. ->initializeDefault();
  193. (new TreeSeblingBlockType(BlockTypeEnum::SEBLING_WOOD_BIRCH,
  194. ItemTypeEnum::SEBLING_WOOD_BIRCH,
  195. ModelInfo("blocks.m3/sebling", "blocks.ltdb/sebling.png", 1),
  196. BlockTypeEnum::WOOD_BIRCH,
  197. BlockTypeEnum::LEAVES_WOOD_BIRCH,
  198. "Birch Wood Sebling",
  199. 0xFD6A7B3A))
  200. ->setHardness(0.1f)
  201. ->initializeDefault();
  202. (new TreeSeblingBlockType(BlockTypeEnum::SEBLING_WOOD_BEECH,
  203. ItemTypeEnum::SEBLING_WOOD_BEECH,
  204. ModelInfo("blocks.m3/sebling", "blocks.ltdb/sebling.png", 1),
  205. BlockTypeEnum::WOOD_BEECH,
  206. BlockTypeEnum::LEAVES_WOOD_BEECH,
  207. "Beech Wood Sebling",
  208. 0xFD6A7B3A))
  209. ->setHardness(0.1f)
  210. ->initializeDefault();
  211. (new TreeSeblingBlockType(BlockTypeEnum::SEBLING_WOOD_PINE,
  212. ItemTypeEnum::SEBLING_WOOD_PINE,
  213. ModelInfo("blocks.m3/sebling", "blocks.ltdb/sebling.png", 1),
  214. BlockTypeEnum::WOOD_PINE,
  215. BlockTypeEnum::LEAVES_WOOD_PINE,
  216. "Pine Wood Sebling",
  217. 0xFD6A7B3A))
  218. ->setHardness(0.1f)
  219. ->initializeDefault();
  220. (new GrassBlockType(BlockTypeEnum::GRASS,
  221. ItemTypeEnum::GRASS,
  222. ModelInfo("grass", "blocks.ltdb/grass.png", 16).setTransparent(),
  223. "Grass",
  224. 0x5076C011))
  225. ->initializeDefault();
  226. (new BasicBlockType(BlockTypeEnum::FARMLAND,
  227. ItemTypeEnum::DIRT,
  228. ModelInfo("cube",
  229. {"blocks.ltdb/dirt.png",
  230. "blocks.ltdb/dirt.png",
  231. "blocks.ltdb/dirt.png",
  232. "blocks.ltdb/dirt.png",
  233. "blocks.ltdb/farmland.png",
  234. "blocks.ltdb/dirt.png"}),
  235. "Farmland",
  236. 0xFF5E3819))
  237. ->setTransparent(1)
  238. ->setHardness(0.1f)
  239. ->initializeDefault();
  240. (new GrowingPlantBlockType(BlockTypeEnum::WHEAT_SEED,
  241. ModelInfo("grass", "plants.ltdb/wheatseeds.png", 16).setTransparent(),
  242. "WheatSeeds",
  243. BlockTypeEnum::WHEAT,
  244. "Growing wheat",
  245. 18000,
  246. 0x5076C011))
  247. ->addGrowthState(0.2f,
  248. ModelInfo("grass", "plants.ltdb/wheatseedsa.png", 16)
  249. .setTransparent())
  250. ->addGrowthState(0.4f,
  251. ModelInfo("grass", "plants.ltdb/wheatseedsb.png", 16)
  252. .setTransparent())
  253. ->addGrowthState(0.6f,
  254. ModelInfo("grass", "plants.ltdb/wheatseedsc.png", 16)
  255. .setTransparent())
  256. ->addGrowthState(0.8f,
  257. ModelInfo("grass", "plants.ltdb/wheatseedsd.png", 16)
  258. .setTransparent())
  259. ->initializeDefault();
  260. (new BasicBlockType(
  261. BlockTypeEnum::WHEAT,
  262. ItemTypeEnum::WHEAT,
  263. ModelInfo("grass", "plants.ltdb/wheat.png", 16).setTransparent(),
  264. [](Vec3<int> pos, int dimensionId) {
  265. AdditionalItemSpawningBlock* block
  266. = new AdditionalItemSpawningBlock(
  267. BlockTypeEnum::WHEAT, 0, pos, dimensionId);
  268. block->addSpawn({0, 4, 1.0, ItemTypeEnum::WHEAT});
  269. return (Block*)block;
  270. },
  271. "Wheat",
  272. 0x90A8C011))
  273. ->initializeDefault();
  274. (new FluidBlockType(BlockTypeEnum::WATER,
  275. ModelInfo("fluid", "fluids.ltdb/water.png", 6),
  276. "Water",
  277. 0xFF2323BF))
  278. ->initializeDefault();
  279. (new BasicBlockType(BlockTypeEnum::CRAFTING_TABLE,
  280. ItemTypeEnum::CRAFTING_TABLE,
  281. ModelInfo("cube",
  282. {"blocks.ltdb/woodplanks.png",
  283. "blocks.ltdb/woodplanks.png",
  284. "blocks.ltdb/woodplanks.png",
  285. "blocks.ltdb/woodplanks.png",
  286. "blocks.ltdb/craftingtable.p",
  287. "blocks.ltdb/woodplanks.png"}),
  288. "Crafting Table",
  289. 0xFFC4A783))
  290. ->initializeDefault(); // TODO: implement crafting table block type
  291. (new BasicBlockType(
  292. BlockTypeEnum::CHEST,
  293. ItemTypeEnum::CHEST,
  294. ModelInfo("blocks.m3/chest",
  295. {"blocks.ltdb/chest.png", "blocks.ltdb/chestcover.png"}),
  296. [](Framework::Vec3<int> pos, int dimensionId) {
  297. return new Chest(BlockTypeEnum::CHEST, 0, pos, dimensionId);
  298. },
  299. "Chest",
  300. 0xFFE2C292,
  301. 1))
  302. ->initializeDefault();
  303. }
  304. void initializeItemTypes()
  305. {
  306. (new BasicBlockItemType(ItemTypeEnum::DIRT,
  307. "Dirt",
  308. 0,
  309. 0,
  310. ModelInfo("itemCube", "blocks.ltdb/dirt.png", 6),
  311. BlockTypeEnum::DIRT));
  312. (new BasicBlockItemType(ItemTypeEnum::STONE,
  313. "Stone",
  314. 0,
  315. 0,
  316. ModelInfo("itemCube", "blocks.ltdb/stone.png", 6),
  317. BlockTypeEnum::STONE))
  318. ->setHardness(2.f);
  319. (new BasicBlockItemType(ItemTypeEnum::SAND,
  320. "Sand",
  321. 0,
  322. 0,
  323. ModelInfo("itemCube", "blocks.ltdb/sand.png", 6),
  324. BlockTypeEnum::SAND))
  325. ->setHardness(0.5f);
  326. (new BasicBlockItemType(ItemTypeEnum::WOOD_OAK,
  327. "Oak",
  328. 0,
  329. 0,
  330. ModelInfo("itemCube", "blocks.ltdb/oak.png", 6),
  331. BlockTypeEnum::WOOD_OAK))
  332. ->setHardness(1.5f);
  333. (new BasicBlockItemType(ItemTypeEnum::LEAVES_WOOD_OAK,
  334. "Oak Leaves",
  335. 0,
  336. 0,
  337. ModelInfo("itemCube", "blocks.ltdb/leaves.png", 6),
  338. BlockTypeEnum::LEAVES_WOOD_OAK))
  339. ->setHardness(0.1f);
  340. (new BasicBlockItemType(ItemTypeEnum::SEBLING_WOOD_OAK,
  341. "Oak Sebling",
  342. 0,
  343. 0,
  344. ModelInfo("blocks.m3/sebling", "blocks.ltdb/sebling.png", 1),
  345. BlockTypeEnum::SEBLING_WOOD_OAK))
  346. ->setHardness(0.1f);
  347. (new BasicBlockItemType(ItemTypeEnum::GRAVEL,
  348. "Gravel",
  349. 0,
  350. 0,
  351. ModelInfo("itemCube", "blocks.ltdb/gravel.png", 6),
  352. BlockTypeEnum::GRAVEL))
  353. ->setHardness(0.75f);
  354. (new BasicBlockItemType(ItemTypeEnum::STONE_GRANITE,
  355. "Granite",
  356. 0,
  357. 0,
  358. ModelInfo("itemCube", "blocks.ltdb/granite.png", 6),
  359. BlockTypeEnum::STONE_GRANITE))
  360. ->setHardness(3.f);
  361. (new BasicBlockItemType(ItemTypeEnum::STONE_COBBLE,
  362. "Cobble",
  363. 0,
  364. 0,
  365. ModelInfo("itemCube", "blocks.ltdb/cobble.png", 6),
  366. BlockTypeEnum::STONE_COBBLE))
  367. ->setHardness(1.f);
  368. (new BasicBlockItemType(ItemTypeEnum::WOOD_BIRCH,
  369. "Birch",
  370. 0,
  371. 0,
  372. ModelInfo("itemCube", "blocks.ltdb/birch.png", 6),
  373. BlockTypeEnum::WOOD_BIRCH))
  374. ->setHardness(1.5f);
  375. (new BasicBlockItemType(ItemTypeEnum::LEAVES_WOOD_BIRCH,
  376. "Birch Leaves",
  377. 0,
  378. 0,
  379. ModelInfo("itemCube", "blocks.ltdb/leaves.png", 6),
  380. BlockTypeEnum::LEAVES_WOOD_BIRCH))
  381. ->setHardness(0.1f);
  382. (new BasicBlockItemType(ItemTypeEnum::SEBLING_WOOD_BIRCH,
  383. "Birch Sebling",
  384. 0,
  385. 0,
  386. ModelInfo("blocks.m3/sebling", "blocks.ltdb/sebling.png", 1),
  387. BlockTypeEnum::SEBLING_WOOD_BIRCH))
  388. ->setHardness(0.1f);
  389. (new BasicBlockItemType(ItemTypeEnum::WOOD_BEECH,
  390. "Beech",
  391. 0,
  392. 0,
  393. ModelInfo("itemCube", "blocks.ltdb/beech.png", 6),
  394. BlockTypeEnum::WOOD_BEECH))
  395. ->setHardness(1.5f);
  396. (new BasicBlockItemType(ItemTypeEnum::LEAVES_WOOD_BEECH,
  397. "Beech Leaves",
  398. 0,
  399. 0,
  400. ModelInfo("itemCube", "blocks.ltdb/leaves.png", 6),
  401. BlockTypeEnum::LEAVES_WOOD_BEECH))
  402. ->setHardness(0.1f);
  403. (new BasicBlockItemType(ItemTypeEnum::SEBLING_WOOD_BEECH,
  404. "Beech Sebling",
  405. 0,
  406. 0,
  407. ModelInfo("blocks.m3/sebling", "blocks.ltdb/sebling.png", 1),
  408. BlockTypeEnum::SEBLING_WOOD_BEECH))
  409. ->setHardness(0.1f);
  410. (new BasicBlockItemType(ItemTypeEnum::STONE_BASALT,
  411. "Basalt",
  412. 0,
  413. 0,
  414. ModelInfo("itemCube", "blocks.ltdb/basalt.png", 6),
  415. BlockTypeEnum::STONE_BASALT))
  416. ->setHardness(2.f);
  417. (new BasicBlockItemType(ItemTypeEnum::WOOD_PINE,
  418. "Pine",
  419. 0,
  420. 0,
  421. ModelInfo("itemCube", "blocks.ltdb/pine.png", 6),
  422. BlockTypeEnum::WOOD_PINE))
  423. ->setHardness(1.4f);
  424. (new BasicBlockItemType(ItemTypeEnum::LEAVES_WOOD_PINE,
  425. "Pine Leaves",
  426. 0,
  427. 0,
  428. ModelInfo("itemCube", "blocks.ltdb/leaves.png", 6),
  429. BlockTypeEnum::LEAVES_WOOD_PINE))
  430. ->setHardness(0.1f);
  431. (new BasicBlockItemType(ItemTypeEnum::SEBLING_WOOD_PINE,
  432. "Pine Sebling",
  433. 0,
  434. 0,
  435. ModelInfo("blocks.m3/sebling", "blocks.ltdb/sebling.png", 1),
  436. BlockTypeEnum::SEBLING_WOOD_PINE))
  437. ->setHardness(0.1f);
  438. (new LightSourceItemType(ItemTypeEnum::TORCH,
  439. "Torch",
  440. ModelInfo("items.m3/stick", "blocks.ltdb/torch.png", 6),
  441. BlockTypeEnum::TORCH))
  442. ->setColor(0x00F69A54);
  443. new PlayerHandItemType();
  444. (new NoBlockItemType(ItemTypeEnum::WOOD_STICK,
  445. "WoodenStick",
  446. 0,
  447. 0,
  448. ModelInfo("items.m3/stick", "items.ltdb/stick.png", 1),
  449. []() {
  450. return ItemType::createBasicItem(ItemTypeEnum::WOOD_STICK,
  451. "Wooden Stick",
  452. 1.f,
  453. 1.f,
  454. 10.f,
  455. 10.f,
  456. 0,
  457. 0,
  458. 0,
  459. 1,
  460. 0,
  461. 50);
  462. }));
  463. (new NoBlockItemType(ItemTypeEnum::RESIN,
  464. "Resin",
  465. 0,
  466. 0,
  467. ModelInfo("itemCube", "items.ltdb/resin.png", 6),
  468. []() {
  469. return ItemType::createBasicItem(ItemTypeEnum::RESIN,
  470. "Resin",
  471. 1.f,
  472. 1.f,
  473. 10.f,
  474. 10.f,
  475. 0,
  476. 0,
  477. 0,
  478. 1,
  479. 0,
  480. 50);
  481. }));
  482. new AxeToolItemType();
  483. (new NoBlockItemType(ItemTypeEnum::AXE_BROKEN,
  484. "Broken Axe",
  485. 0,
  486. 0,
  487. ModelInfo("tools.m3/axe", "tools.ltdb/stoneaxe.png", 6),
  488. []() {
  489. return ItemType::createBasicItem(ItemTypeEnum::AXE_BROKEN,
  490. "Broken Axe",
  491. 100.f,
  492. 100.f,
  493. 100.f,
  494. 100.f,
  495. 0,
  496. 0,
  497. 0,
  498. 1,
  499. 0,
  500. 10);
  501. }));
  502. new HoeToolItemType();
  503. new NoBlockItemType(ItemTypeEnum::BROKEN_HOE,
  504. "BrokenHoe",
  505. 0,
  506. 0,
  507. ModelInfo("tools.m3/hoe", "tools.ltdb/stonehoe.png", 1),
  508. []() {
  509. return ItemType::createBasicItem(ItemTypeEnum::BROKEN_HOE,
  510. "Broken Hoe",
  511. 100.f,
  512. 100.f,
  513. 100.f,
  514. 100.f,
  515. 0,
  516. 0,
  517. 0,
  518. 1,
  519. 0,
  520. 10);
  521. });
  522. (new NoBlockItemType(ItemTypeEnum::FLINT,
  523. "Flint",
  524. 0,
  525. 0,
  526. ModelInfo("items.m3/flint", "items.ltdb/flint.png", 1),
  527. []() {
  528. return ItemType::createBasicItem(ItemTypeEnum::FLINT,
  529. "Flint",
  530. 1.f,
  531. 1.f,
  532. 10.f,
  533. 10.f,
  534. 0,
  535. 0,
  536. 0,
  537. 1,
  538. 0,
  539. 50);
  540. }));
  541. (new BasicBlockItemType(ItemTypeEnum::WHEAT_SEED,
  542. "Wheat Seeds",
  543. 0,
  544. 0,
  545. ModelInfo("grass", "plants.ltdb/wheatseeds.png", 16),
  546. BlockTypeEnum::WHEAT_SEED))
  547. ->setHardness(0.1f)
  548. ->setPlacableProof(
  549. [](const Item* self,
  550. int dimensionId,
  551. Framework::Vec3<int> worldPos) {
  552. if (worldPos.z > 0)
  553. {
  554. auto below = Game::INSTANCE->zBlockAt(
  555. worldPos + getDirection(Direction::BOTTOM),
  556. dimensionId);
  557. return (below.isA()
  558. && below.getA()->zBlockType()->getId()
  559. == BlockTypeEnum::FARMLAND)
  560. || (below.isB()
  561. && below.getB() == BlockTypeEnum::FARMLAND);
  562. }
  563. return (bool)0;
  564. },
  565. 1);
  566. (new NoBlockItemType(ItemTypeEnum::WHEAT,
  567. "Wheat",
  568. 0,
  569. 0,
  570. ModelInfo("grass", "plants.ltdb/wheat.png", 16),
  571. []() {
  572. Item* item = ItemType::createBasicItem(ItemTypeEnum::WHEAT,
  573. "Wheat",
  574. 1.f,
  575. 1.f,
  576. 10.f,
  577. 10.f,
  578. 1,
  579. 0,
  580. 0,
  581. 1,
  582. 0,
  583. 50);
  584. item->setFoodEffect([](Entity* zEntity) {
  585. zEntity->setHunger(zEntity->getHunger() + 0.5f);
  586. zEntity->setThirst(
  587. zEntity->getThirst() + 1.f); // TODO: remove thirst addition
  588. // when drinkable water exists
  589. });
  590. return item;
  591. }));
  592. (new BasicBlockItemType(ItemTypeEnum::CRAFTING_TABLE,
  593. "Crafting Table",
  594. 0,
  595. 0,
  596. ModelInfo("itemCube",
  597. {"blocks.ltdb/woodplanks.png",
  598. "blocks.ltdb/woodplanks.png",
  599. "blocks.ltdb/woodplanks.png",
  600. "blocks.ltdb/woodplanks.png",
  601. "blocks.ltdb/craftingtable.p",
  602. "blocks.ltdb/woodplanks.png"}),
  603. BlockTypeEnum::CRAFTING_TABLE)); // TODO: implement crafting table item
  604. // type
  605. (new BasicBlockItemType(ItemTypeEnum::CHEST,
  606. "Chest",
  607. 0,
  608. 0,
  609. ModelInfo("blocks.m3/chest",
  610. {"blocks.ltdb/chest.png", "blocks.ltdb/chestcover.png"}),
  611. BlockTypeEnum::CHEST));
  612. }
  613. void initializeEntityTypes()
  614. {
  615. new PlayerEntityType();
  616. new ItemEntityType();
  617. }
  618. void initializeDimensions()
  619. {
  620. new OverworldDimension();
  621. }
  622. void initializeMultiblockTypes()
  623. {
  624. new MultiblockTreeStructureType();
  625. }