// // Decompiled by Procyon v0.5.36 // package com.mojang.minecraft.level.tile; import com.mojang.minecraft.particle.Particle; import com.mojang.minecraft.particle.ParticleEngine; import java.util.Random; import com.mojang.minecraft.phys.AABB; import com.mojang.minecraft.Player; import com.mojang.minecraft.level.Level; import com.mojang.minecraft.renderer.Tesselator; public class Tile { public static final int NOT_LIQUID = 0; public static final int LIQUID_WATER = 1; public static final int LIQUID_LAVA = 2; public static final Tile[] tiles; public static final boolean[] shouldTick; public static final Tile empty; public static final Tile rock; public static final Tile grass; public static final Tile dirt; public static final Tile stoneBrick; public static final Tile wood; public static final Tile bush; public static final Tile unbreakable; public static final Tile water; public static final Tile calmWater; public static final Tile lava; public static final Tile calmLava; public int tex; public final int id; protected float xx0; protected float yy0; protected float zz0; protected float xx1; protected float yy1; protected float zz1; static { tiles = new Tile[256]; shouldTick = new boolean[256]; empty = null; rock = new Tile(1, 1); grass = new GrassTile(2); dirt = new DirtTile(3, 2); stoneBrick = new Tile(4, 16); wood = new Tile(5, 4); bush = new Bush(6); unbreakable = new Tile(7, 17); water = new LiquidTile(8, 1); calmWater = new CalmLiquidTile(9, 1); lava = new LiquidTile(10, 2); calmLava = new CalmLiquidTile(11, 2); } protected Tile(final int id) { Tile.tiles[id] = this; this.id = id; this.setShape(0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f); } protected void setTicking(final boolean tick) { Tile.shouldTick[this.id] = tick; } protected void setShape(final float x0, final float y0, final float z0, final float x1, final float y1, final float z1) { this.xx0 = x0; this.yy0 = y0; this.zz0 = z0; this.xx1 = x1; this.yy1 = y1; this.zz1 = z1; } protected Tile(final int id, final int tex) { this(id); this.tex = tex; } public void render(final Tesselator t, final Level level, final int layer, final int x, final int y, final int z) { final byte c1 = -1; final byte c2 = -52; final byte c3 = -103; if (this.shouldRenderFace(level, x, y - 1, z, layer, 0)) { t.color(c1, c1, c1); this.renderFace(t, x, y, z, 0); } if (this.shouldRenderFace(level, x, y + 1, z, layer, 1)) { t.color(c1, c1, c1); this.renderFace(t, x, y, z, 1); } if (this.shouldRenderFace(level, x, y, z - 1, layer, 2)) { t.color(c2, c2, c2); this.renderFace(t, x, y, z, 2); } if (this.shouldRenderFace(level, x, y, z + 1, layer, 3)) { t.color(c2, c2, c2); this.renderFace(t, x, y, z, 3); } if (this.shouldRenderFace(level, x - 1, y, z, layer, 4)) { t.color(c3, c3, c3); this.renderFace(t, x, y, z, 4); } if (this.shouldRenderFace(level, x + 1, y, z, layer, 5)) { t.color(c3, c3, c3); this.renderFace(t, x, y, z, 5); } } protected boolean shouldRenderFace(final Level level, final int x, final int y, final int z, final int layer, final int face) { boolean layerOk = true; if (layer == 2) { return false; } if (layer >= 0) { layerOk = (level.isLit(x, y, z) ^ layer == 1); } return !level.isSolidTile(x, y, z) && layerOk; } protected int getTexture(final int face) { return this.tex; } public void renderFace(final Tesselator t, final int x, final int y, final int z, final int face) { final int tex = this.getTexture(face); final int xt = tex % 16 * 16; final int yt = tex / 16 * 16; final float u0 = xt / 256.0f; final float u2 = (xt + 15.99f) / 256.0f; final float v0 = yt / 256.0f; final float v2 = (yt + 15.99f) / 256.0f; final float x2 = x + this.xx0; final float x3 = x + this.xx1; final float y2 = y + this.yy0; final float y3 = y + this.yy1; final float z2 = z + this.zz0; final float z3 = z + this.zz1; if (face == 0) { t.vertexUV(x2, y2, z3, u0, v2); t.vertexUV(x2, y2, z2, u0, v0); t.vertexUV(x3, y2, z2, u2, v0); t.vertexUV(x3, y2, z3, u2, v2); return; } if (face == 1) { t.vertexUV(x3, y3, z3, u2, v2); t.vertexUV(x3, y3, z2, u2, v0); t.vertexUV(x2, y3, z2, u0, v0); t.vertexUV(x2, y3, z3, u0, v2); return; } if (face == 2) { t.vertexUV(x2, y3, z2, u2, v0); t.vertexUV(x3, y3, z2, u0, v0); t.vertexUV(x3, y2, z2, u0, v2); t.vertexUV(x2, y2, z2, u2, v2); return; } if (face == 3) { t.vertexUV(x2, y3, z3, u0, v0); t.vertexUV(x2, y2, z3, u0, v2); t.vertexUV(x3, y2, z3, u2, v2); t.vertexUV(x3, y3, z3, u2, v0); return; } if (face == 4) { t.vertexUV(x2, y3, z3, u2, v0); t.vertexUV(x2, y3, z2, u0, v0); t.vertexUV(x2, y2, z2, u0, v2); t.vertexUV(x2, y2, z3, u2, v2); return; } if (face == 5) { t.vertexUV(x3, y2, z3, u0, v2); t.vertexUV(x3, y2, z2, u2, v2); t.vertexUV(x3, y3, z2, u2, v0); t.vertexUV(x3, y3, z3, u0, v0); } } public void renderBackFace(final Tesselator t, final int x, final int y, final int z, final int face) { final int tex = this.getTexture(face); final float u0 = tex % 16 / 16.0f; final float u2 = u0 + 0.0624375f; final float v0 = tex / 16 / 16.0f; final float v2 = v0 + 0.0624375f; final float x2 = x + this.xx0; final float x3 = x + this.xx1; final float y2 = y + this.yy0; final float y3 = y + this.yy1; final float z2 = z + this.zz0; final float z3 = z + this.zz1; if (face == 0) { t.vertexUV(x3, y2, z3, u2, v2); t.vertexUV(x3, y2, z2, u2, v0); t.vertexUV(x2, y2, z2, u0, v0); t.vertexUV(x2, y2, z3, u0, v2); } if (face == 1) { t.vertexUV(x2, y3, z3, u0, v2); t.vertexUV(x2, y3, z2, u0, v0); t.vertexUV(x3, y3, z2, u2, v0); t.vertexUV(x3, y3, z3, u2, v2); } if (face == 2) { t.vertexUV(x2, y2, z2, u2, v2); t.vertexUV(x3, y2, z2, u0, v2); t.vertexUV(x3, y3, z2, u0, v0); t.vertexUV(x2, y3, z2, u2, v0); } if (face == 3) { t.vertexUV(x3, y3, z3, u2, v0); t.vertexUV(x3, y2, z3, u2, v2); t.vertexUV(x2, y2, z3, u0, v2); t.vertexUV(x2, y3, z3, u0, v0); } if (face == 4) { t.vertexUV(x2, y2, z3, u2, v2); t.vertexUV(x2, y2, z2, u0, v2); t.vertexUV(x2, y3, z2, u0, v0); t.vertexUV(x2, y3, z3, u2, v0); } if (face == 5) { t.vertexUV(x3, y3, z3, u0, v0); t.vertexUV(x3, y3, z2, u2, v0); t.vertexUV(x3, y2, z2, u2, v2); t.vertexUV(x3, y2, z3, u0, v2); } } public void renderFaceNoTexture(final Player player, final Tesselator t, final int x, final int y, final int z, final int face) { final float x2 = x + 0.0f; final float x3 = x + 1.0f; final float y2 = y + 0.0f; final float y3 = y + 1.0f; final float z2 = z + 0.0f; final float z3 = z + 1.0f; if (face == 0 && y > player.y) { t.vertex(x2, y2, z3); t.vertex(x2, y2, z2); t.vertex(x3, y2, z2); t.vertex(x3, y2, z3); } if (face == 1 && y < player.y) { t.vertex(x3, y3, z3); t.vertex(x3, y3, z2); t.vertex(x2, y3, z2); t.vertex(x2, y3, z3); } if (face == 2 && z > player.z) { t.vertex(x2, y3, z2); t.vertex(x3, y3, z2); t.vertex(x3, y2, z2); t.vertex(x2, y2, z2); } if (face == 3 && z < player.z) { t.vertex(x2, y3, z3); t.vertex(x2, y2, z3); t.vertex(x3, y2, z3); t.vertex(x3, y3, z3); } if (face == 4 && x > player.x) { t.vertex(x2, y3, z3); t.vertex(x2, y3, z2); t.vertex(x2, y2, z2); t.vertex(x2, y2, z3); } if (face == 5 && x < player.x) { t.vertex(x3, y2, z3); t.vertex(x3, y2, z2); t.vertex(x3, y3, z2); t.vertex(x3, y3, z3); } } public final AABB getTileAABB(final int x, final int y, final int z) { return new AABB((float)x, (float)y, (float)z, (float)(x + 1), (float)(y + 1), (float)(z + 1)); } public AABB getAABB(final int x, final int y, final int z) { return new AABB((float)x, (float)y, (float)z, (float)(x + 1), (float)(y + 1), (float)(z + 1)); } public boolean blocksLight() { return true; } public boolean isSolid() { return true; } public boolean mayPick() { return true; } public void tick(final Level level, final int x, final int y, final int z, final Random random) { } public void destroy(final Level level, final int x, final int y, final int z, final ParticleEngine particleEngine) { for (int SD = 4, xx = 0; xx < SD; ++xx) { for (int yy = 0; yy < SD; ++yy) { for (int zz = 0; zz < SD; ++zz) { final float xp = x + (xx + 0.5f) / SD; final float yp = y + (yy + 0.5f) / SD; final float zp = z + (zz + 0.5f) / SD; particleEngine.add(new Particle(level, xp, yp, zp, xp - x - 0.5f, yp - y - 0.5f, zp - z - 0.5f, this.tex)); } } } } public int getLiquidType() { return 0; } public void neighborChanged(final Level level, final int x, final int y, final int z, final int type) { } }