/
alexmakov
/
Minecraft_Java
Обзор
Документация
Войти
/
alexmakov
/
Minecraft_Java
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/main/java/com/mojang/minecraft/mob/ai/BasicAttackAI.java
87 строк
3 KB
Oliver Yasuna
Fixed walking on water. Close #2.
04 окт 2012, 00:19
04 окт 2012, 00:19
17a47fc
Код
Авторство
О чём код?
package com.mojang.minecraft.mob.ai; import com.mojang.minecraft.Entity; import com.mojang.minecraft.item.Arrow; import com.mojang.minecraft.mob.ai.BasicAI; import com.mojang.minecraft.model.Vec3D; import com.mojang.util.MathHelper; public class BasicAttackAI extends BasicAI { public static final long serialVersionUID = 0L; public int damage = 6; protected void update() { super.update(); if(this.mob.health > 0) { this.doAttack(); } } protected void doAttack() { Entity var1 = this.level.getPlayer(); float var2 = 16.0F; if(this.attackTarget != null && this.attackTarget.removed) { this.attackTarget = null; } float var3; float var4; float var5; if(var1 != null && this.attackTarget == null) { var3 = var1.x - this.mob.x; var4 = var1.y - this.mob.y; var5 = var1.z - this.mob.z; if(var3 * var3 + var4 * var4 + var5 * var5 < var2 * var2) { this.attackTarget = var1; } } if(this.attackTarget != null) { var3 = this.attackTarget.x - this.mob.x; var4 = this.attackTarget.y - this.mob.y; var5 = this.attackTarget.z - this.mob.z; float var6; if((var6 = var3 * var3 + var4 * var4 + var5 * var5) > var2 * var2 * 2.0F * 2.0F && this.random.nextInt(100) == 0) { this.attackTarget = null; } if(this.attackTarget != null) { var6 = MathHelper.sqrt(var6); this.mob.yRot = (float)(Math.atan2((double)var5, (double)var3) * 180.0D / 3.1415927410125732D) - 90.0F; this.mob.xRot = -((float)(Math.atan2((double)var4, (double)var6) * 180.0D / 3.1415927410125732D)); if(MathHelper.sqrt(var3 * var3 + var4 * var4 + var5 * var5) < 2.0F && this.attackDelay == 0) { this.attack(this.attackTarget); } } } } public boolean attack(Entity var1) { if(this.level.clip(new Vec3D(this.mob.x, this.mob.y, this.mob.z), new Vec3D(var1.x, var1.y, var1.z)) != null) { return false; } else { this.mob.attackTime = 5; this.attackDelay = this.random.nextInt(20) + 10; int var2 = (int)((this.random.nextFloat() + this.random.nextFloat()) / 2.0F * (float)this.damage + 1.0F); var1.hurt(this.mob, var2); this.noActionTime = 0; return true; } } public void hurt(Entity var1, int var2) { super.hurt(var1, var2); if(var1 instanceof Arrow) { var1 = ((Arrow)var1).getOwner(); } if(var1 != null && !var1.getClass().equals(this.mob.getClass())) { this.attackTarget = var1; } } }