StaticInitializerOrder.cpp 18 KB

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