/
alexmakov
/
Minecraft_Java
Обзор
Документация
Войти
/
alexmakov
/
Minecraft_Java
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/main/java/com/mojang/minecraft/level/BlockMap.java
280 строк
10 KB
Oliver Yasuna
Fixed walking on water. Close #2.
04 окт 2012, 00:19
04 окт 2012, 00:19
17a47fc
Код
Авторство
О чём код?
package com.mojang.minecraft.level; import com.mojang.minecraft.Entity; import com.mojang.minecraft.level.BlockMap$Slot; import com.mojang.minecraft.level.SyntheticClass; import com.mojang.minecraft.model.Vec3D; import com.mojang.minecraft.phys.AABB; import com.mojang.minecraft.render.Frustrum; import com.mojang.minecraft.render.TextureManager; import java.io.Serializable; import java.util.ArrayList; import java.util.List; public class BlockMap implements Serializable { public static final long serialVersionUID = 0L; private int width; private int depth; private int height; private BlockMap$Slot slot = new BlockMap$Slot(this, (SyntheticClass)null); private BlockMap$Slot slot2 = new BlockMap$Slot(this, (SyntheticClass)null); public List[] entityGrid; public List all = new ArrayList(); private List tmp = new ArrayList(); public BlockMap(int var1, int var2, int var3) { this.width = var1 / 16; this.depth = var2 / 16; this.height = var3 / 16; if(this.width == 0) { this.width = 1; } if(this.depth == 0) { this.depth = 1; } if(this.height == 0) { this.height = 1; } this.entityGrid = new ArrayList[this.width * this.depth * this.height]; for(var1 = 0; var1 < this.width; ++var1) { for(var2 = 0; var2 < this.depth; ++var2) { for(var3 = 0; var3 < this.height; ++var3) { this.entityGrid[(var3 * this.depth + var2) * this.width + var1] = new ArrayList(); } } } } public void insert(Entity var1) { this.all.add(var1); this.slot.init(var1.x, var1.y, var1.z).add(var1); var1.xOld = var1.x; var1.yOld = var1.y; var1.zOld = var1.z; var1.blockMap = this; } public void remove(Entity var1) { this.slot.init(var1.xOld, var1.yOld, var1.zOld).remove(var1); this.all.remove(var1); } public void moved(Entity var1) { BlockMap$Slot var2 = this.slot.init(var1.xOld, var1.yOld, var1.zOld); BlockMap$Slot var3 = this.slot2.init(var1.x, var1.y, var1.z); if(!var2.equals(var3)) { var2.remove(var1); var3.add(var1); var1.xOld = var1.x; var1.yOld = var1.y; var1.zOld = var1.z; } } public List getEntities(Entity var1, float var2, float var3, float var4, float var5, float var6, float var7) { this.tmp.clear(); return this.getEntities(var1, var2, var3, var4, var5, var6, var7, this.tmp); } public List getEntities(Entity var1, float var2, float var3, float var4, float var5, float var6, float var7, List var8) { BlockMap$Slot var9 = this.slot.init(var2, var3, var4); BlockMap$Slot var10 = this.slot2.init(var5, var6, var7); for(int var11 = BlockMap$Slot.getXSlot(var9) - 1; var11 <= BlockMap$Slot.getXSlot(var10) + 1; ++var11) { for(int var12 = BlockMap$Slot.getYSlot(var9) - 1; var12 <= BlockMap$Slot.getYSlot(var10) + 1; ++var12) { for(int var13 = BlockMap$Slot.getZSlot(var9) - 1; var13 <= BlockMap$Slot.getZSlot(var10) + 1; ++var13) { if(var11 >= 0 && var12 >= 0 && var13 >= 0 && var11 < this.width && var12 < this.depth && var13 < this.height) { List var14 = this.entityGrid[(var13 * this.depth + var12) * this.width + var11]; for(int var15 = 0; var15 < var14.size(); ++var15) { Entity var16; if((var16 = (Entity)var14.get(var15)) != var1 && var16.intersects(var2, var3, var4, var5, var6, var7)) { var8.add(var16); } } } } } } return var8; } public void removeAllNonCreativeModeEntities() { for(int var1 = 0; var1 < this.width; ++var1) { for(int var2 = 0; var2 < this.depth; ++var2) { for(int var3 = 0; var3 < this.height; ++var3) { List var4 = this.entityGrid[(var3 * this.depth + var2) * this.width + var1]; for(int var5 = 0; var5 < var4.size(); ++var5) { if(!((Entity)var4.get(var5)).isCreativeModeAllowed()) { var4.remove(var5--); } } } } } } public void clear() { for(int var1 = 0; var1 < this.width; ++var1) { for(int var2 = 0; var2 < this.depth; ++var2) { for(int var3 = 0; var3 < this.height; ++var3) { this.entityGrid[(var3 * this.depth + var2) * this.width + var1].clear(); } } } } public List getEntities(Entity var1, AABB var2) { this.tmp.clear(); return this.getEntities(var1, var2.x0, var2.y0, var2.z0, var2.x1, var2.y1, var2.z1, this.tmp); } public List getEntities(Entity var1, AABB var2, List var3) { return this.getEntities(var1, var2.x0, var2.y0, var2.z0, var2.x1, var2.y1, var2.z1, var3); } public void tickAll() { for(int var1 = 0; var1 < this.all.size(); ++var1) { Entity var2; (var2 = (Entity)this.all.get(var1)).tick(); if(var2.removed) { this.all.remove(var1--); this.slot.init(var2.xOld, var2.yOld, var2.zOld).remove(var2); } else { int var3 = (int)(var2.xOld / 16.0F); int var4 = (int)(var2.yOld / 16.0F); int var5 = (int)(var2.zOld / 16.0F); int var6 = (int)(var2.x / 16.0F); int var7 = (int)(var2.y / 16.0F); int var8 = (int)(var2.z / 16.0F); if(var3 != var6 || var4 != var7 || var5 != var8) { this.moved(var2); } } } } public void render(Vec3D var1, Frustrum var2, TextureManager var3, float var4) { for(int var5 = 0; var5 < this.width; ++var5) { float var6 = (float)((var5 << 4) - 2); float var7 = (float)((var5 + 1 << 4) + 2); for(int var8 = 0; var8 < this.depth; ++var8) { float var9 = (float)((var8 << 4) - 2); float var10 = (float)((var8 + 1 << 4) + 2); for(int var11 = 0; var11 < this.height; ++var11) { List var12; if((var12 = this.entityGrid[(var11 * this.depth + var8) * this.width + var5]).size() != 0) { float var13 = (float)((var11 << 4) - 2); float var14 = (float)((var11 + 1 << 4) + 2); if(var2.isBoxInFrustrum(var6, var9, var13, var7, var10, var14)) { float var16 = var14; float var17 = var10; float var15 = var7; var14 = var13; var13 = var9; float var18 = var6; Frustrum var19 = var2; int var20 = 0; boolean var10000; while(true) { if(var20 >= 6) { var10000 = true; break; } if(var19.frustrum[var20][0] * var18 + var19.frustrum[var20][1] * var13 + var19.frustrum[var20][2] * var14 + var19.frustrum[var20][3] <= 0.0F) { var10000 = false; break; } if(var19.frustrum[var20][0] * var15 + var19.frustrum[var20][1] * var13 + var19.frustrum[var20][2] * var14 + var19.frustrum[var20][3] <= 0.0F) { var10000 = false; break; } if(var19.frustrum[var20][0] * var18 + var19.frustrum[var20][1] * var17 + var19.frustrum[var20][2] * var14 + var19.frustrum[var20][3] <= 0.0F) { var10000 = false; break; } if(var19.frustrum[var20][0] * var15 + var19.frustrum[var20][1] * var17 + var19.frustrum[var20][2] * var14 + var19.frustrum[var20][3] <= 0.0F) { var10000 = false; break; } if(var19.frustrum[var20][0] * var18 + var19.frustrum[var20][1] * var13 + var19.frustrum[var20][2] * var16 + var19.frustrum[var20][3] <= 0.0F) { var10000 = false; break; } if(var19.frustrum[var20][0] * var15 + var19.frustrum[var20][1] * var13 + var19.frustrum[var20][2] * var16 + var19.frustrum[var20][3] <= 0.0F) { var10000 = false; break; } if(var19.frustrum[var20][0] * var18 + var19.frustrum[var20][1] * var17 + var19.frustrum[var20][2] * var16 + var19.frustrum[var20][3] <= 0.0F) { var10000 = false; break; } if(var19.frustrum[var20][0] * var15 + var19.frustrum[var20][1] * var17 + var19.frustrum[var20][2] * var16 + var19.frustrum[var20][3] <= 0.0F) { var10000 = false; break; } ++var20; } boolean var21 = var10000; for(int var23 = 0; var23 < var12.size(); ++var23) { Entity var22; if((var22 = (Entity)var12.get(var23)).shouldRender(var1)) { if(!var21) { AABB var24 = var22.bb; if(!var2.isBoxInFrustrum(var24.x0, var24.y0, var24.z0, var24.x1, var24.y1, var24.z1)) { continue; } } var22.render(var3, var4); } } } } } } } } // $FF: synthetic method static int getWidth(BlockMap var0) { return var0.width; } // $FF: synthetic method static int getDepth(BlockMap var0) { return var0.depth; } // $FF: synthetic method static int getHeight(BlockMap var0) { return var0.height; } }