/
alexmakov
/
Minecraft_Java
Обзор
Документация
Войти
/
alexmakov
/
Minecraft_Java
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/main/java/com/mojang/minecraft/level/tile/LiquidBlock.java
168 строк
5 KB
Oliver Yasuna
Fixed walking on water. Close #2.
04 окт 2012, 00:19
04 окт 2012, 00:19
17a47fc
Код
Авторство
О чём код?
package com.mojang.minecraft.level.tile; import com.mojang.minecraft.level.Level; import com.mojang.minecraft.level.liquid.LiquidType; import com.mojang.minecraft.phys.AABB; import com.mojang.minecraft.render.ShapeRenderer; import java.util.Random; public class LiquidBlock extends Block { protected LiquidType type; protected int stillId; protected int movingId; protected LiquidBlock(int var1, LiquidType var2) { super(var1); this.type = var2; this.textureId = 14; if(var2 == LiquidType.LAVA) { this.textureId = 30; } Block.liquid[var1] = true; this.movingId = var1; this.stillId = var1 + 1; float var4 = 0.01F; float var3 = 0.1F; this.setBounds(var4 + 0.0F, 0.0F - var3 + var4, var4 + 0.0F, var4 + 1.0F, 1.0F - var3 + var4, var4 + 1.0F); this.setPhysics(true); if(var2 == LiquidType.LAVA) { this.setTickDelay(16); } } public final boolean isCube() { return false; } public final void onPlace(Level level, int x, int y, int z) { level.addToTickNextTick(x, y, z, this.movingId); } public void update(Level level, int x, int y, int z, Random rand) { boolean var7 = false; z = z; y = y; x = x; level = level; boolean var8 = false; boolean var6; do { --y; if(level.getTile(x, y, z) != 0 || !this.canFlow(level, x, y, z)) { break; } if(var6 = level.setTile(x, y, z, this.movingId)) { var8 = true; } } while(var6 && this.type != LiquidType.LAVA); ++y; if(this.type == LiquidType.WATER || !var8) { var8 = var8 | this.flow(level, x - 1, y, z) | this.flow(level, x + 1, y, z) | this.flow(level, x, y, z - 1) | this.flow(level, x, y, z + 1); } if(!var8) { level.setTileNoUpdate(x, y, z, this.stillId); } else { level.addToTickNextTick(x, y, z, this.movingId); } } private boolean canFlow(Level var1, int var2, int var3, int var4) { if(this.type == LiquidType.WATER) { for(int var7 = var2 - 2; var7 <= var2 + 2; ++var7) { for(int var5 = var3 - 2; var5 <= var3 + 2; ++var5) { for(int var6 = var4 - 2; var6 <= var4 + 2; ++var6) { if(var1.getTile(var7, var5, var6) == Block.SPONGE.id) { return false; } } } } } return true; } private boolean flow(Level var1, int var2, int var3, int var4) { if(var1.getTile(var2, var3, var4) == 0) { if(!this.canFlow(var1, var2, var3, var4)) { return false; } if(var1.setTile(var2, var3, var4, this.movingId)) { var1.addToTickNextTick(var2, var3, var4, this.movingId); } } return false; } protected final float getBrightness(Level level, int x, int y, int z) { return this.type == LiquidType.LAVA?100.0F: level.getBrightness(x, y, z); } public final boolean canRenderSide(Level level, int x, int y, int z, int side) { int var6; return x >= 0 && y >= 0 && z >= 0 && x < level.width && z < level.height?((var6 = level.getTile(x, y, z)) != this.movingId && var6 != this.stillId?(side == 1 && (level.getTile(x - 1, y, z) == 0 || level.getTile(x + 1, y, z) == 0 || level.getTile(x, y, z - 1) == 0 || level.getTile(x, y, z + 1) == 0)?true:super.canRenderSide(level, x, y, z, side)):false):false; } public final void renderInside(ShapeRenderer shapeRenderer, int x, int y, int z, int side) { super.renderInside(shapeRenderer, x, y, z, side); super.renderSide(shapeRenderer, x, y, z, side); } public final boolean isOpaque() { return true; } public final boolean isSolid() { return false; } public final LiquidType getLiquidType() { return this.type; } public void onNeighborChange(Level var1, int var2, int var3, int var4, int var5) { if(var5 != 0) { LiquidType var6 = Block.blocks[var5].getLiquidType(); if(this.type == LiquidType.WATER && var6 == LiquidType.LAVA || var6 == LiquidType.WATER && this.type == LiquidType.LAVA) { var1.setTile(var2, var3, var4, Block.STONE.id); return; } } var1.addToTickNextTick(var2, var3, var4, var5); } public final int getTickDelay() { return this.type == LiquidType.LAVA?5:0; } public final void dropItems(Level var1, int var2, int var3, int var4, float var5) {} public final void onBreak(Level var1, int var2, int var3, int var4) {} public final int getDropCount() { return 0; } public final int getRenderPass() { return this.type == LiquidType.WATER?1:0; } @Override public AABB getCollisionBox(int x, int y, int z) { return null; } }