1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
|
#pragma once
// #include "Material.h"
// #include "Vec3.h"
// #include "Definitions.h"
// #include "SoundTypes.h"
// using namespace std;
#include "Icon_SPU.h"
#include "Material_SPU.h"
#include <stddef.h>
class ChunkRebuildData;
class GrassTile_SPU;
class LeafTile;
class TallGrass;
class DeadBushTile;
class FireTile;
class PortalTile;
class MycelTile;
class PistonExtensionTile;
class PistonMovingPiece;
class StoneTile;
class stoneBrick;
class Bush;
class StairTile;
class LiquidTile;
class PistonBaseTile;
class ChestTile;
class RedStoneDustTile;
class RepeaterTile;
class CauldronTile;
class TripWireSourceTile;
class Random;
class HitResult;
class Level;
class Player;
class LevelSource;
class Mob;
class TileEntity;
class HalfSlabTile;
class IconRegister;
class TileData_SPU
{
public:
class Bitfield256
{
unsigned int m_data[8];
void setBit(unsigned char i){ m_data[i>>5] |= (1<<(i%32)); }
void clearBit(unsigned char i) { m_data[i>>5] &= ~(1<<(i%32)); }
public:
bool operator[](unsigned char i) { return (m_data[i>>5] & 1<<(i%32)) != 0; }
void set(unsigned char i, bool val){ (val) ? setBit(i) : clearBit(i); }
};
Bitfield256 mipmapEnable;
Bitfield256 solid;
Bitfield256 transculent;
Bitfield256 _sendTileData;
Bitfield256 propagate;
Bitfield256 signalSource;
Bitfield256 cubeShaped;
char lightBlock[256];
char lightEmission[256];
char materialIDs[256];
Material_SPU materials[Material_SPU::num_Ids];
float xx0[256];
float yy0[256];
float zz0[256];
float xx1[256];
float yy1[256];
float zz1[256];
int iconTexWidth;
int iconTexHeight;
Icon_SPU iconData[256];
Icon_SPU grass_iconTop;
Icon_SPU grass_iconSnowSide;
Icon_SPU grass_iconSideOverlay;
Icon_SPU ironFence_EdgeTexture;
Icon_SPU thinGlass_EdgeTexture;
Icon_SPU farmTile_Wet;
Icon_SPU farmTile_Dry;
Icon_SPU doorTile_Icons[8];
Icon_SPU tallGrass_Icons[3];
Icon_SPU sandStone_icons[3];
Icon_SPU sandStone_iconTop;
Icon_SPU sandStone_iconBottom;
Icon_SPU woodTile_icons[4];
Icon_SPU treeTile_icons[4];
Icon_SPU treeTile_iconTop;
Icon_SPU leafTile_icons[2][4];
bool leafTile_allowSame;
int leafTile_fancyTextureSet;
Icon_SPU cropTile_icons[8];
Icon_SPU furnaceTile_iconTop;
Icon_SPU furnaceTile_iconFront;
Icon_SPU furnaceTile_iconFront_lit;
Icon_SPU liquidTile_iconWaterStill;
Icon_SPU liquidTile_iconWaterFlow;
Icon_SPU liquidTile_iconLavaStill;
Icon_SPU liquidTile_iconLavaFlow;
Icon_SPU fireTile_icons[2];
Icon_SPU sapling_icons[4];
bool glassTile_allowSame;
bool iceTile_allowSame;
Icon_SPU dispenserTile_iconTop;
Icon_SPU dispenserTile_iconFront;
Icon_SPU dispenserTile_iconFrontVertical;
Icon_SPU railTile_iconTurn;
Icon_SPU railTile_iconTurnGolden;
Icon_SPU detectorRailTile_icons[2];
Icon_SPU tntTile_iconBottom;
Icon_SPU tntTile_iconTop;
Icon_SPU workBench_iconTop;
Icon_SPU workBench_iconFront;
Icon_SPU cactusTile_iconTop;
Icon_SPU cactusTile_iconBottom;
Icon_SPU recordPlayer_iconTop;
Icon_SPU pumpkinTile_iconTop;
Icon_SPU pumpkinTile_iconFace;
Icon_SPU pumpkinTile_iconFaceLit;
Icon_SPU cakeTile_iconTop;
Icon_SPU cakeTile_iconBottom;
Icon_SPU cakeTile_iconInner;
Icon_SPU smoothStoneBrick_icons[4];
Icon_SPU hugeMushroom_icons[2];
Icon_SPU hugeMushroom_iconStem;
Icon_SPU hugeMushroom_iconInside;
Icon_SPU melonTile_iconTop;
Icon_SPU stemTile_iconAngled;
Icon_SPU mycelTile_iconTop;
Icon_SPU mycelTile_iconSnowSide;
Icon_SPU netherStalk_icons[3];
Icon_SPU enchantmentTable_iconTop;
Icon_SPU enchantmentTable_iconBottom;
Icon_SPU brewingStand_iconBase;
Icon_SPU redStoneDust_iconCross;
Icon_SPU redStoneDust_iconLine;
Icon_SPU redStoneDust_iconCrossOver;
Icon_SPU redStoneDust_iconLineOver;
Icon_SPU clothTile_icons[16];
Icon_SPU stoneSlab_iconSide;
Icon_SPU carrot_icons[4];
Icon_SPU potato_icons[4];
Icon_SPU anvil_icons[3];
Icon_SPU quartzBlock_icons[5];
Icon_SPU quartzBlock_iconChiseledTop;
Icon_SPU quartzBlock_iconLinesTop;
Icon_SPU quartzBlock_iconTop;
Icon_SPU quartzBlock_iconBottom;
int anvilPart; // normally part of the AnvilTile class
unsigned int stemTile_minColour;
unsigned int stemTile_maxColour;
unsigned int waterLily_colour;
unsigned int foliageColor_evergreenColor;
unsigned int foliageColor_birchColor;
protected:
// float destroySpeed;
// float explosionResistance;
// bool isInventoryItem;
// bool collectStatistics;
// int m_iMaterial;
// int m_iBaseItemType;
public:
// const SoundType *soundType;
//
// float gravity;
// Material *material;
// float friction;
private:
// unsigned int descriptionId;
// unsigned int useDescriptionId; // 4J Added
//
// wstring m_textureName;
protected:
// Icon *icon;
public:
int getRenderShape();
void setShape(float x0, float y0, float z0, float x1, float y1, float z1);
float getBrightness(ChunkRebuildData *level, int x, int y, int z);
int getLightColor(ChunkRebuildData *level, int x, int y, int z); // 4J - brought forward from 1.8.2
bool shouldRenderFace(ChunkRebuildData *level, int x, int y, int z, int face);
public:
Icon_SPU *getTexture(ChunkRebuildData *level, int x, int y, int z, int face);
Icon_SPU *getTexture(int face, int data);
Icon_SPU *getTexture(int face);
public:
void updateShape(ChunkRebuildData *level, int x, int y, int z, int forceData = -1, TileEntity* forceEntity = nullptr); // 4J added forceData, forceEntity param
double getShapeX0();
double getShapeX1();
double getShapeY0();
double getShapeY1();
double getShapeZ0();
double getShapeZ1();
// int getColor(int auxData);
int getColor(ChunkRebuildData *level, int x, int y, int z);
float getShadeBrightness(ChunkRebuildData *level, int x, int y, int z); // 4J - brought forward from 1.8.2
bool hasMaterialLiquid() { return false; } // material->isLiquid()
};
class Tile_SPU
{
public:
static const int SHAPE_INVISIBLE = -1;
static const int SHAPE_BLOCK = 0;
static const int SHAPE_CROSS_TEXTURE = 1;
static const int SHAPE_TORCH = 2;
static const int SHAPE_FIRE = 3;
static const int SHAPE_WATER = 4;
static const int SHAPE_RED_DUST = 5;
static const int SHAPE_ROWS = 6;
static const int SHAPE_DOOR = 7;
static const int SHAPE_LADDER = 8;
static const int SHAPE_RAIL = 9;
static const int SHAPE_STAIRS = 10;
static const int SHAPE_FENCE = 11;
static const int SHAPE_LEVER = 12;
static const int SHAPE_CACTUS = 13;
static const int SHAPE_BED = 14;
static const int SHAPE_DIODE = 15;
static const int SHAPE_PISTON_BASE = 16;
static const int SHAPE_PISTON_EXTENSION = 17;
static const int SHAPE_IRON_FENCE = 18;
static const int SHAPE_STEM = 19;
static const int SHAPE_VINE = 20;
static const int SHAPE_FENCE_GATE = 21;
static const int SHAPE_ENTITYTILE_ANIMATED = 22;
static const int SHAPE_LILYPAD = 23;
static const int SHAPE_CAULDRON = 24;
static const int SHAPE_BREWING_STAND = 25;
static const int SHAPE_PORTAL_FRAME = 26;
static const int SHAPE_EGG = 27;
static const int SHAPE_COCOA = 28;
static const int SHAPE_TRIPWIRE_SOURCE = 29;
static const int SHAPE_TRIPWIRE = 30;
static const int SHAPE_TREE = 31;
static const int SHAPE_WALL = 32;
static const int SHAPE_FLOWER_POT = 33;
static const int SHAPE_BEACON = 34;
static const int SHAPE_ANVIL = 35;
static const int SHAPE_QUARTZ = 39;
// 4J - this array of simple constants made so the compiler can optimise references to Ids that were previous of the form Tile_SPU::<whatever>->id, and are now simply Tile_SPU::whatever_Id
static const int rock_Id = 1;
static const int grass_Id = 2;
static const int dirt_Id = 3;
static const int stoneBrick_Id = 4;
static const int wood_Id = 5;
static const int sapling_Id = 6;
static const int unbreakable_Id = 7;
static const int water_Id = 8;
static const int calmWater_Id = 9;
static const int lava_Id = 10;
static const int calmLava_Id = 11;
static const int sand_Id = 12;
static const int gravel_Id = 13;
static const int goldOre_Id = 14;
static const int ironOre_Id = 15;
static const int coalOre_Id = 16;
static const int treeTrunk_Id = 17;
static const int leaves_Id = 18;
static const int sponge_Id = 19;
static const int glass_Id = 20;
static const int lapisOre_Id = 21;
static const int lapisBlock_Id = 22;
static const int dispenser_Id = 23;
static const int sandStone_Id = 24;
static const int musicBlock_Id = 25;
static const int bed_Id = 26;
static const int goldenRail_Id = 27;
static const int detectorRail_Id = 28;
static const int pistonStickyBase_Id = 29;
static const int web_Id = 30;
static const int tallgrass_Id = 31;
static const int deadBush_Id = 32;
static const int pistonBase_Id = 33;
static const int pistonExtensionPiece_Id = 34;
static const int cloth_Id = 35;
static const int pistonMovingPiece_Id = 36;
static const int flower_Id = 37;
static const int rose_Id = 38;
static const int mushroom1_Id = 39;
static const int mushroom2_Id = 40;
static const int goldBlock_Id = 41;
static const int ironBlock_Id = 42;
static const int stoneSlab_Id = 43;
static const int stoneSlabHalf_Id = 44;
static const int redBrick_Id = 45;
static const int tnt_Id = 46;
static const int bookshelf_Id = 47;
static const int mossStone_Id = 48;
static const int obsidian_Id = 49;
static const int torch_Id = 50;
static const int fire_Id = 51;
static const int mobSpawner_Id = 52;
static const int stairs_wood_Id = 53;
static const int chest_Id = 54;
static const int redStoneDust_Id = 55;
static const int diamondOre_Id = 56;
static const int diamondBlock_Id = 57;
static const int workBench_Id = 58;
static const int crops_Id = 59;
static const int farmland_Id = 60;
static const int furnace_Id = 61;
static const int furnace_lit_Id = 62;
static const int sign_Id = 63;
static const int door_wood_Id = 64;
static const int ladder_Id = 65;
static const int rail_Id = 66;
static const int stairs_stone_Id = 67;
static const int wallSign_Id = 68;
static const int lever_Id = 69;
static const int pressurePlate_stone_Id = 70;
static const int door_iron_Id = 71;
static const int pressurePlate_wood_Id = 72;
static const int redStoneOre_Id = 73;
static const int redStoneOre_lit_Id = 74;
static const int notGate_off_Id = 75;
static const int notGate_on_Id = 76;
static const int button_stone_Id = 77;
static const int topSnow_Id = 78;
static const int ice_Id = 79;
static const int snow_Id = 80;
static const int cactus_Id = 81;
static const int clay_Id = 82;
static const int reeds_Id = 83;
static const int recordPlayer_Id = 84;
static const int fence_Id = 85;
static const int pumpkin_Id = 86;
static const int hellRock_Id = 87;
static const int hellSand_Id = 88;
static const int lightGem_Id = 89;
static const int portalTile_Id = 90;
static const int litPumpkin_Id = 91;
static const int cake_Id = 92;
static const int diode_off_Id = 93;
static const int diode_on_Id = 94;
static const int aprilFoolsJoke_Id = 95;
static const int trapdoor_Id = 96;
static const int monsterStoneEgg_Id = 97;
static const int stoneBrickSmooth_Id = 98;
static const int hugeMushroom1_Id = 99;
static const int hugeMushroom2_Id = 100;
static const int ironFence_Id = 101;
static const int thinGlass_Id = 102;
static const int melon_Id = 103;
static const int pumpkinStem_Id = 104;
static const int melonStem_Id = 105;
static const int vine_Id = 106;
static const int fenceGate_Id = 107;
static const int stairs_bricks_Id = 108;
static const int stairs_stoneBrickSmooth_Id = 109;
static const int mycel_Id = 110;
static const int waterLily_Id = 111;
static const int netherBrick_Id = 112;
static const int netherFence_Id = 113;
static const int stairs_netherBricks_Id = 114;
static const int netherStalk_Id = 115;
static const int enchantTable_Id = 116;
static const int brewingStand_Id = 117;
static const int cauldron_Id = 118;
static const int endPortalTile_Id = 119;
static const int endPortalFrameTile_Id = 120;
static const int whiteStone_Id = 121;
static const int dragonEgg_Id = 122;
static const int redstoneLight_Id = 123;
static const int redstoneLight_lit_Id = 124;
static const int woodSlab_Id = 125;
static const int woodSlabHalf_Id = 126;
static const int cocoa_Id = 127;
static const int stairs_sandstone_Id = 128;
static const int stairs_sprucewood_Id = 134;
static const int stairs_birchwood_Id = 135;
static const int stairs_junglewood_Id = 136;
static const int emeraldOre_Id = 129;
static const int enderChest_Id = 130;
static const int tripWireSource_Id = 131;
static const int tripWire_Id = 132;
static const int emeraldBlock_Id = 133;
static const int cobbleWall_Id = 139;
static const int flowerPot_Id = 140;
static const int carrots_Id = 141;
static const int potatoes_Id = 142;
static const int anvil_Id = 145;
static const int button_wood_Id = 143;
static const int skull_Id = 144;
static const int netherQuartz_Id = 153;
static const int quartzBlock_Id = 155;
static const int stairs_quartz_Id = 156;
static const int woolCarpet_Id = 171;
static Tile_SPU m_tiles[256];
Tile_SPU() { id = -1;}
Tile_SPU(int tileID) { id = tileID; }
virtual ~Tile_SPU() {}
double getShapeX0() { return ms_pTileData->xx0[id]; }
double getShapeX1() { return ms_pTileData->xx1[id]; }
double getShapeY0() { return ms_pTileData->yy0[id]; }
double getShapeY1() { return ms_pTileData->yy1[id]; }
double getShapeZ0() { return ms_pTileData->zz0[id]; }
double getShapeZ1() { return ms_pTileData->zz1[id]; }
Material_SPU* getMaterial();
virtual void updateShape(ChunkRebuildData *level, int x, int y, int z, int forceData = -1, TileEntity* forceEntity = nullptr); // 4J added forceData, forceEntity param
virtual void updateDefaultShape();
virtual void setShape(float x0, float y0, float z0, float x1, float y1, float z1);
virtual float getBrightness(ChunkRebuildData *level, int x, int y, int z);
virtual int getLightColor(ChunkRebuildData *level, int x, int y, int z); // 4J - brought forward from 1.8.2
virtual bool shouldRenderFace(ChunkRebuildData *level, int x, int y, int z, int face);
virtual int getRenderShape();
virtual int getColor(ChunkRebuildData *level, int x, int y, int z);
virtual float getShadeBrightness(ChunkRebuildData *level, int x, int y, int z); // 4J - brought forward from 1.8.2
virtual bool isSolidRender(bool isServerLevel = false);
virtual bool isSolidFace(ChunkRebuildData *level, int x, int y, int z, int face);
virtual int getRenderLayer();
virtual Icon_SPU *getTexture(ChunkRebuildData *level, int x, int y, int z, int face);
virtual Icon_SPU *getTexture(int face, int data);
virtual Icon_SPU *getTexture(int face);
bool isSignalSource() { return ms_pTileData->signalSource[id]; }
bool isCubeShaped() { return ms_pTileData->cubeShaped[id]; }
Icon_SPU* icon() { return &ms_pTileData->iconData[id]; }
int id;
static TileData_SPU* ms_pTileData;
static void initTilePointers();
static Tile_SPU* createFromID(int tileID);
};
class TileRef_SPU
{
// because of the way this ref stuff works, we need all the tile classes to be of the same size,
// so make sure no data is added to child classes.
Tile_SPU* m_pTile;
public:
TileRef_SPU(int tileID) { m_pTile = Tile_SPU::createFromID(tileID); }
virtual ~TileRef_SPU() { }
Tile_SPU* operator->() const { return m_pTile; }
Tile_SPU* getPtr() { return m_pTile; }
};
//class stoneBrick : public Tile {};
|