/
alexmakov
/
Minecraft_Java
Обзор
Документация
Войти
/
alexmakov
/
Minecraft_Java
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/main/java/com/mojang/minecraft/item/PrimedTnt.java
192 строки
4 KB
Oliver Yasuna
Fixed walking on water. Close #2.
04 окт 2012, 00:19
04 окт 2012, 00:19
17a47fc
Код
Авторство
О чём код?
package com.mojang.minecraft.item; import com.mojang.minecraft.Entity; import com.mojang.minecraft.level.Level; import com.mojang.minecraft.level.tile.Block; import com.mojang.minecraft.particle.SmokeParticle; import com.mojang.minecraft.particle.TerrainParticle; import com.mojang.minecraft.player.Player; import com.mojang.minecraft.render.ShapeRenderer; import com.mojang.minecraft.render.TextureManager; import com.mojang.util.MathHelper; import java.util.Random; import org.lwjgl.opengl.GL11; public class PrimedTnt extends Entity { public PrimedTnt(Level level1, float x, float y, float z) { super(level1); setSize(0.98F, 0.98F); heightOffset = bbHeight / 2.0F; setPos(x, y, z); float unknown0 = (float)(Math.random() * 3.1415927410125732D * 2.0D); xd = -MathHelper.sin(unknown0 * 3.1415927F / 180.0F) * 0.02F; yd = 0.2F; zd = -MathHelper.cos(unknown0 * 3.1415927F / 180.0F) * 0.02F; makeStepSound = false; life = 40; xo = x; yo = y; zo = z; } @Override public void tick() { xo = x; yo = y; zo = z; yd -= 0.04F; move(xd, yd, zd); xd *= 0.98F; yd *= 0.98F; zd *= 0.98F; if(onGround) { xd *= 0.7F; zd *= 0.7F; yd *= -0.5F; } if(!defused) { if(life-- > 0) { SmokeParticle smokeParticle = new SmokeParticle(level, x, y + 0.6F, z); level.particleEngine.spawnParticle(smokeParticle); } else { remove(); Random random = new Random(); float radius = 4.0F; level.explode(null, x, y, z, radius); for(int i = 0; i < 100; i++) { float unknown0 = (float)random.nextGaussian() * radius / 4.0F; float unknown1 = (float)random.nextGaussian() * radius / 4.0F; float unknown2 = (float)random.nextGaussian() * radius / 4.0F; float unknown3 = MathHelper.sqrt(unknown0 * unknown0 + unknown1 * unknown1 + unknown2 * unknown2); float unknown4 = unknown0 / unknown3 / unknown3; float unknown5 = unknown1 / unknown3 / unknown3; unknown3 = unknown2 / unknown3 / unknown3; TerrainParticle terrainParticle = new TerrainParticle(level, x + unknown0, y + unknown1, z + unknown2, unknown4, unknown5, unknown3, Block.TNT); level.particleEngine.spawnParticle(terrainParticle); } } } } @Override public void render(TextureManager textureManager, float unknown0) { int textureID = textureManager.load("/terrain.png"); GL11.glBindTexture(3553, textureID); float brightness = level.getBrightness((int)x, (int)y, (int)z); GL11.glPushMatrix(); GL11.glColor4f(brightness, brightness, brightness, 1.0F); GL11.glTranslatef(xo + (x - xo) * unknown0 - 0.5F, yo + (y - yo) * unknown0 - 0.5F, zo + (z - zo) * unknown0 - 0.5F); GL11.glPushMatrix(); ShapeRenderer shapeRenderer = ShapeRenderer.instance; Block.TNT.renderPreview(shapeRenderer); GL11.glDisable(3553); GL11.glDisable(2896); GL11.glColor4f(1.0F, 1.0F, 1.0F, (float)((life / 4 + 1) % 2) * 0.4F); if(life <= 16) { GL11.glColor4f(1.0F, 1.0F, 1.0F, (float)((life + 1) % 2) * 0.6F); } if(life <= 2) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.9F); } GL11.glEnable(3042); GL11.glBlendFunc(770, 1); Block.TNT.renderPreview(shapeRenderer); GL11.glDisable(3042); GL11.glEnable(3553); GL11.glEnable(2896); GL11.glPopMatrix(); GL11.glPopMatrix(); } @Override public void playerTouch(Entity entity) { if(defused) { Player player = (Player)entity; if(player.addResource(Block.TNT.id)) { TakeEntityAnim takeEntityAnim = new TakeEntityAnim(this.level, this, player); level.addEntity(takeEntityAnim); remove(); } } } @Override public void hurt(Entity entity, int damage) { if(!removed) { super.hurt(entity, damage); if(entity instanceof Player) { remove(); Item item = new Item(level, x, y, z, Block.TNT.id); level.addEntity(item); } } } @Override public boolean isPickable() { return !this.removed; } public static final long serialVersionUID = 0L; private float xd; private float yd; private float zd; public int life = 0; private boolean defused; }