Начинающий
- Статус
- Оффлайн
- Регистрация
- 18 Апр 2025
- Сообщения
- 107
- Реакции
- 1
- Выберите загрузчик игры
- Vanilla
Instructions copy CreeperFarm create the CreeperFarm class in Misc or anywhere Ctrl+A + Ctrl+V then follow the path net.minecraft.entity.monster and look for CreeperEntity and add it to the getSwelling code now go to FunctionRegistry and write to the private CreeperFarm creeperFarm;
then we write in init creeperFarm = new CreeperFarm(),
HOORAY we did it all
---------------------------------
then we write in init creeperFarm = new CreeperFarm(),
HOORAY we did it all
Пожалуйста, авторизуйтесь для просмотра ссылки.
CreeperFarm:
package im.expensive.functions.impl.misc;
import com.google.common.eventbus.Subscribe;
import im.expensive.events.EventUpdate;
import im.expensive.functions.api.Category;
import im.expensive.functions.api.Function;
import im.expensive.functions.api.FunctionRegister;
import im.expensive.functions.settings.impl.BooleanSetting;
import im.expensive.functions.settings.impl.ModeSetting;
import im.expensive.functions.settings.impl.SliderSetting;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.ItemEntity;
import net.minecraft.entity.monster.CreeperEntity;
import net.minecraft.item.Items;
import net.minecraft.util.Hand;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.RayTraceContext;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.util.math.vector.Vector3d;
@FunctionRegister(name = "CreeperFarm", type = Category.Misc)
public class CreeperFarm extends Function {
//TechSystem
private final ModeSetting modeSetting = new ModeSetting("Mode", "Usual", "Usual", "Farmilka");
private final SliderSetting distanceSetting = new SliderSetting("Distance", 10.0f, 5.0f, 200.0f, 0.5f);
private final BooleanSetting runModeSetting = new BooleanSetting("Running mode", true);
private final ModeSetting movementMode = new ModeSetting("Type of movement", "Keybinds", "Keybinds", "Move")
.setVisible(() -> runModeSetting.get());
private final BooleanSetting autoReconnectSetting = new BooleanSetting("Auto-Reconnect", false);
private final SliderSetting reconnectIntervalSetting = new SliderSetting("Re-entry interval (min)", 5.0f, 1.0f, 60.0f, 1.0f)
.setVisible(() -> autoReconnectSetting.get());
private final BooleanSetting retreatSetting = new BooleanSetting("Run away from the explosion", true);
private final SliderSetting retreatDistanceSetting = new SliderSetting("Running distance", 7.0f, 3.0f, 15.0f, 0.5f)
.setVisible(() -> retreatSetting.get());
private static final Minecraft mc = Minecraft.getInstance();
private CreeperEntity targetCreeper;
private ItemEntity targetGunpowder;
private long lastReconnectTime = 0;
private long lastAttackTime = 0;
private boolean isRetreating = false;
private int retreatTicks = 0;
public CreeperFarm() {
addSettings(modeSetting, distanceSetting, runModeSetting, movementMode, retreatSetting, retreatDistanceSetting, autoReconnectSetting, reconnectIntervalSetting);
}
//TechSystem
[USER=1474073]@Subscribe[/USER]
public void onUpdate(EventUpdate event) {
if (mc.world == null || mc.player == null) return;
targetGunpowder = findClosestGunpowder();
if (targetGunpowder != null) {
runGunpowder(targetGunpowder);
isRetreating = false;
retreatTicks = 0;
return;
}
targetCreeper = findClosestCreeper();
if (targetCreeper == null) {
resetMovement();
isRetreating = false;
retreatTicks = 0;
return;
}
double distanceSq = mc.player.getDistanceSq(targetCreeper);
if (distanceSq > distanceSetting.get() * distanceSetting.get()) {
resetMovement();
isRetreating = false;
retreatTicks = 0;
return;
}
if (!hasLine(targetCreeper)) {
resetMovement();
return;
}
float swell = targetCreeper.getSwelling(1.0f);
float retreatThreshold = modeSetting.get().equals("Usual") ? 0.2f : 0.5f;
if (retreatSetting.get() && swell > retreatThreshold) {
retFromCreeper(targetCreeper);
isRetreating = true;
retreatTicks++;
if (retreatTicks >= 40) {
isRetreating = false;
retreatTicks = 0;
}
} else {
if (runModeSetting.get()) {
runCreeper(targetCreeper);
} else {
pullCreeper(targetCreeper);
}
attackCreeper(targetCreeper);
isRetreating = false;
}
if (autoReconnectSetting.get()) {
AutoReconnect();
}
}
//TechSystem
private CreeperEntity findClosestCreeper() {
CreeperEntity closestCreeper = null;
double closestDistanceSq = Double.MAX_VALUE;
for (Entity entity : mc.world.getAllEntities()) {
if (entity instanceof CreeperEntity creeper && creeper.isAlive()) {
double distanceSq = mc.player.getDistanceSq(creeper);
if (distanceSq < closestDistanceSq && distanceSq <= distanceSetting.get() * distanceSetting.get() && hasLine(creeper)) {
closestCreeper = creeper;
closestDistanceSq = distanceSq;
}
}
}
return closestCreeper;
}
private ItemEntity findClosestGunpowder() {
ItemEntity closestGunpowder = null;
double closestDistanceSq = Double.MAX_VALUE;
for (Entity entity : mc.world.getAllEntities()) {
if (entity instanceof ItemEntity item && item.getItem().getItem() == Items.GUNPOWDER && item.isAlive()) {
double distanceSq = mc.player.getDistanceSq(item);
if (distanceSq < closestDistanceSq && distanceSq <= distanceSetting.get() * distanceSetting.get() && hasLine(item)) {
closestGunpowder = item;
closestDistanceSq = distanceSq;
}
}
}
return closestGunpowder;
}
private boolean hasLine(Entity entity) {
Vector3d start = mc.player.getEyePosition(1.0F);
Vector3d end = entity.getEyePosition(1.0F);
RayTraceContext context = new RayTraceContext(start, end, RayTraceContext.BlockMode.COLLIDER, RayTraceContext.FluidMode.NONE, mc.player);
RayTraceResult result = mc.world.rayTraceBlocks(context);
return result.getType() == RayTraceResult.Type.MISS;
}
private boolean hasObstacle() {
Vector3d start = mc.player.getEyePosition(1.0F);
Vector3d forward = mc.player.getForward().scale(1.5);
Vector3d end = start.add(forward);
RayTraceContext context = new RayTraceContext(start, end, RayTraceContext.BlockMode.COLLIDER, RayTraceContext.FluidMode.NONE, mc.player);
RayTraceResult result = mc.world.rayTraceBlocks(context);
return result.getType() == RayTraceResult.Type.BLOCK;
}
//TechSystem
private void runCreeper(CreeperEntity creeper) {
float[] rotations = Rotations(creeper);
mc.player.rotationYaw = Rotation(mc.player.rotationYaw, rotations[0], 0.5f);
mc.player.rotationPitch = Rotation(mc.player.rotationPitch, rotations[1], 0.5f);
if (movementMode.get().equals("Keybinds")) {
runCreeperKeybinds(creeper);
} else {
runCreeperKeybinds(creeper);
}
}
private void runCreeperKeybinds(CreeperEntity creeper) {
double dx = creeper.getPosX() - mc.player.getPosX();
double dz = creeper.getPosZ() - mc.player.getPosZ();
double distance = Math.sqrt(dx * dx + dz * dz);
if (distance > 2.0) {
mc.gameSettings.keyBindForward.setPressed(true);
if (mc.player.getFoodStats().getFoodLevel() > 6) {
mc.gameSettings.keyBindSprint.setPressed(true);
}
if (modeSetting.get().equals("Farmilka") || hasObstacle()) {
mc.gameSettings.keyBindJump.setPressed(true);
if (modeSetting.get().equals("Farmilka")) {
mc.player.jumpTicks = 0;
}
adjustedStrafeKeybinds(dx, dz);
} else {
adjustedStrafeKeybinds(dx, dz);
}
} else {
resetMovementKeybinds();
}
}
private void runCreeperMove(CreeperEntity creeper) {
double dx = creeper.getPosX() - mc.player.getPosX();
double dz = creeper.getPosZ() - mc.player.getPosZ();
double distance = Math.sqrt(dx * dx + dz * dz);
if (distance > 2.0) {
double angle = Math.atan2(dz, dx) - Math.toRadians(mc.player.rotationYaw + 90);
double moveX = Math.sin(angle);
double moveZ = Math.cos(angle);
mc.player.moveForward = (float) (0.5 * Math.min(distance, 3.0));
mc.player.moveStrafing = (float) moveX;
if (mc.player.getFoodStats().getFoodLevel() > 6) {
mc.player.setSprinting(true);
} else {
mc.player.setSprinting(false);
}
if ((modeSetting.get().equals("Farmilka") || hasObstacle()) && mc.player.isOnGround()) {
mc.player.jump();
if (modeSetting.get().equals("Farmilka")) {
mc.player.jumpTicks = 0;
}
}
} else {
resetMovementMove();
}
}
private void runGunpowder(ItemEntity gunpowder) {
float[] rotations = Rotations(gunpowder);
mc.player.rotationYaw = Rotation(mc.player.rotationYaw, rotations[0], 0.5f);
mc.player.rotationPitch = Rotation(mc.player.rotationPitch, rotations[1], 0.5f);
if (movementMode.get().equals("Keybinds")) {
runGunpowderKeybinds(gunpowder);
} else {
runGunpowderMove(gunpowder);
}
}
//TechSystem
private void runGunpowderKeybinds(ItemEntity gunpowder) {
double dx = gunpowder.getPosX() - mc.player.getPosX();
double dz = gunpowder.getPosZ() - mc.player.getPosZ();
double distance = Math.sqrt(dx * dx + dz * dz);
if (distance > 1.0) {
mc.gameSettings.keyBindForward.setPressed(true);
if (mc.player.getFoodStats().getFoodLevel() > 6) {
mc.gameSettings.keyBindSprint.setPressed(true);
}
if (modeSetting.get().equals("Farmilka") || hasObstacle()) {
mc.gameSettings.keyBindJump.setPressed(true);
if (modeSetting.get().equals("Farmilka")) {
mc.player.jumpTicks = 0;
}
adjustedStrafeKeybinds(dx, dz);
} else {
adjustedStrafeKeybinds(dx, dz);
}
} else {
resetMovementKeybinds();
}
}
private void runGunpowderMove(ItemEntity gunpowder) {
double dx = gunpowder.getPosX() - mc.player.getPosX();
double dz = gunpowder.getPosZ() - mc.player.getPosZ();
double distance = Math.sqrt(dx * dx + dz * dz);
if (distance > 1.0) {
double angle = Math.atan2(dz, dx) - Math.toRadians(mc.player.rotationYaw + 90);
double moveX = Math.sin(angle);
double moveZ = Math.cos(angle);
mc.player.moveForward = (float) (0.5 * Math.min(distance, 3.0));
mc.player.moveStrafing = (float) moveX;
if (mc.player.getFoodStats().getFoodLevel() > 6) {
mc.player.setSprinting(true);
} else {
mc.player.setSprinting(false);
}
if ((modeSetting.get().equals("Farmilka") || hasObstacle()) && mc.player.isOnGround()) {
mc.player.jump();
if (modeSetting.get().equals("Farmilka")) {
mc.player.jumpTicks = 0;
}
}
} else {
resetMovementMove();
}
}
private void retFromCreeper(CreeperEntity creeper) {
Vector3d playerPos = mc.player.getPositionVec();
Vector3d creeperPos = creeper.getPositionVec();
Vector3d direction = playerPos.subtract(creeperPos).normalize();
float[] rotations = RotationsAway(creeper);
mc.player.rotationYaw = Rotation(mc.player.rotationYaw, rotations[0], 0.8f);
mc.player.rotationPitch = Rotation(mc.player.rotationPitch, rotations[1], 0.8f);
if (movementMode.get().equals("Keybinds")) {
retFromCreeperKeybinds(direction);
} else {
retFromCreeperMove(direction);
}
}
private void retFromCreeperKeybinds(Vector3d direction) {
double retreatX = mc.player.getPosX() + direction.x * retreatDistanceSetting.get();
double retreatZ = mc.player.getPosZ() + direction.z * retreatDistanceSetting.get();
double dx = retreatX - mc.player.getPosX();
double dz = retreatZ - mc.player.getPosZ();
double distance = Math.sqrt(dx * dx + dz * dz);
if (distance > 0.1) {
mc.gameSettings.keyBindForward.setPressed(true);
if (mc.player.getFoodStats().getFoodLevel() > 6) {
mc.gameSettings.keyBindSprint.setPressed(true);
}
if (modeSetting.get().equals("Farmilka") || hasObstacle()) {
mc.gameSettings.keyBindJump.setPressed(true);
if (modeSetting.get().equals("Farmilka")) {
mc.player.jumpTicks = 0;
}
adjustedStrafeKeybinds(dx, dz);
} else {
adjustedStrafeKeybinds(dx, dz);
}
} else {
resetMovementKeybinds();
}
}
//TechSystem
private void retFromCreeperMove(Vector3d direction) {
double retreatX = mc.player.getPosX() + direction.x * retreatDistanceSetting.get();
double retreatZ = mc.player.getPosZ() + direction.z * retreatDistanceSetting.get();
double dx = retreatX - mc.player.getPosX();
double dz = retreatZ - mc.player.getPosZ();
double distance = Math.sqrt(dx * dx + dz * dz);
if (distance > 0.1) {
double angle = Math.atan2(dz, dx) - Math.toRadians(mc.player.rotationYaw + 90);
double moveX = Math.sin(angle);
double moveZ = Math.cos(angle);
mc.player.moveForward = (float) (0.5 * Math.min(distance, 3.0));
mc.player.moveStrafing = (float) moveX;
if (mc.player.getFoodStats().getFoodLevel() > 6) {
mc.player.setSprinting(true);
} else {
mc.player.setSprinting(false);
}
if ((modeSetting.get().equals("Farmilka") || hasObstacle()) && mc.player.isOnGround()) {
mc.player.jump();
if (modeSetting.get().equals("Farmilka")) {
mc.player.jumpTicks = 0;
}
}
} else {
resetMovementMove();
}
}
private void adjustedStrafeKeybinds(double dx, double dz) {
float yaw = mc.player.rotationYaw;
double strafe = 0;
double angleToTarget = Math.toDegrees(Math.atan2(dz, dx)) - 90 - yaw;
angleToTarget = MathHelper.wrapDegrees((float) angleToTarget);
if (Math.abs(angleToTarget) > 45 && Math.abs(angleToTarget) < 135) {
strafe = angleToTarget > 0 ? 1.0 : -1.0;
}
mc.gameSettings.keyBindLeft.setPressed(strafe < -0.1);
mc.gameSettings.keyBindRight.setPressed(strafe > 0.1);
}
private void resetMovementKeybinds() {
mc.gameSettings.keyBindForward.setPressed(false);
mc.gameSettings.keyBindBack.setPressed(false);
mc.gameSettings.keyBindLeft.setPressed(false);
mc.gameSettings.keyBindRight.setPressed(false);
mc.gameSettings.keyBindSprint.setPressed(false);
mc.gameSettings.keyBindJump.setPressed(false);
}
private void resetMovementMove() {
mc.player.moveForward = 0.0f;
mc.player.moveStrafing = 0.0f;
mc.player.setSprinting(false);
}
private void pullCreeper(CreeperEntity creeper) {
float[] rotations = Rotations(creeper);
mc.player.rotationYaw = Rotation(mc.player.rotationYaw, rotations[0], 0.5f);
mc.player.rotationPitch = Rotation(mc.player.rotationPitch, rotations[1], 0.5f);
if (movementMode.get().equals("Keybinds")) {
resetMovementKeybinds();
} else {
resetMovementMove();
}
}
private void resetMovement() {
if (movementMode.get().equals("Keybinds")) {
resetMovementKeybinds();
} else {
resetMovementMove();
}
}
//TechSystem
private void attackCreeper(CreeperEntity creeper) {
long currentTime = System.currentTimeMillis();
if (currentTime - lastAttackTime >= 500) {
double distance = mc.player.getDistance(creeper);
if (distance <= 3.0 && creeper.getSwelling(1.0f) <= 0.5f) {
mc.playerController.attackEntity(mc.player, creeper);
mc.player.swingArm(Hand.MAIN_HAND);
lastAttackTime = currentTime;
}
}
}
private void AutoReconnect() {
long currentTime = System.currentTimeMillis();
float intervalMinutes = reconnectIntervalSetting.get();
long intervalMillis = (long) (intervalMinutes * 60 * 1000);
if (currentTime - lastReconnectTime >= intervalMillis) {
if (mc.player != null) {
mc.player.sendChatMessage(".rct");
lastReconnectTime = currentTime;
}
}
}
private float[] Rotations(Entity entity) {
double x = entity.getPosX() - mc.player.getPosX();
double y = entity.getPosY() - mc.player.getPosY() + entity.getEyeHeight() - mc.player.getEyeHeight();
double z = entity.getPosZ() - mc.player.getPosZ();
double dist = Math.sqrt(x * x + z * z);
float yaw = (float) ((Math.atan2(z, x) * 180 / Math.PI) - 90);
float pitch = (float) (-(Math.atan2(y, dist) * 180 / Math.PI));
return new float[]{yaw, pitch};
}
private float[] RotationsAway(Entity entity) {
double x = mc.player.getPosX() - entity.getPosX();
double y = mc.player.getPosY() - entity.getPosY() + mc.player.getEyeHeight() - entity.getEyeHeight();
double z = mc.player.getPosZ() - entity.getPosZ();
double dist = Math.sqrt(x * x + z * z);
float yaw = (float) ((Math.atan2(z, x) * 180 / Math.PI) - 90);
float pitch = (float) (-(Math.atan2(y, dist) * 180 / Math.PI));
return new float[]{yaw, pitch};
}
private float Rotation(float current, float target, float factor) {
float delta = MathHelper.wrapDegrees(target - current);
return current + delta * factor;
}
[USER=1367676]@override[/USER]
public void onEnable() {
super.onEnable();
lastReconnectTime = System.currentTimeMillis();
lastAttackTime = 0;
isRetreating = false;
retreatTicks = 0;
}
[USER=1367676]@override[/USER]
public void onDisable() {
super.onDisable();
resetMovement();
isRetreating = false;
retreatTicks = 0;
targetCreeper = null;
targetGunpowder = null;
}
}
CreeperEntity:
package net.minecraft.entity.monster;
import java.util.Collection;
import net.minecraft.entity.AreaEffectCloudEntity;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.IChargeableMob;
import net.minecraft.entity.ai.attributes.AttributeModifierMap;
import net.minecraft.entity.ai.attributes.Attributes;
import net.minecraft.entity.ai.goal.AvoidEntityGoal;
import net.minecraft.entity.ai.goal.CreeperSwellGoal;
import net.minecraft.entity.ai.goal.HurtByTargetGoal;
import net.minecraft.entity.ai.goal.LookAtGoal;
import net.minecraft.entity.ai.goal.LookRandomlyGoal;
import net.minecraft.entity.ai.goal.MeleeAttackGoal;
import net.minecraft.entity.ai.goal.NearestAttackableTargetGoal;
import net.minecraft.entity.ai.goal.SwimGoal;
import net.minecraft.entity.ai.goal.WaterAvoidingRandomWalkingGoal;
import net.minecraft.entity.effect.LightningBoltEntity;
import net.minecraft.entity.passive.CatEntity;
import net.minecraft.entity.passive.OcelotEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.network.datasync.DataParameter;
import net.minecraft.network.datasync.DataSerializers;
import net.minecraft.network.datasync.EntityDataManager;
import net.minecraft.potion.EffectInstance;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.DamageSource;
import net.minecraft.util.Hand;
import net.minecraft.util.SoundEvent;
import net.minecraft.util.SoundEvents;
import net.minecraft.util.math.MathHelper;
import net.minecraft.world.Explosion;
import net.minecraft.world.GameRules;
import net.minecraft.world.World;
import net.minecraft.world.server.ServerWorld;
public class CreeperEntity extends MonsterEntity implements IChargeableMob
{
private static final DataParameter<Integer> STATE = EntityDataManager.createKey(CreeperEntity.class, DataSerializers.VARINT);
private static final DataParameter<Boolean> POWERED = EntityDataManager.createKey(CreeperEntity.class, DataSerializers.BOOLEAN);
private static final DataParameter<Boolean> IGNITED = EntityDataManager.createKey(CreeperEntity.class, DataSerializers.BOOLEAN);
private int lastActiveTime;
private int timeSinceIgnited;
private int fuseTime = 30;
private int explosionRadius = 3;
private int droppedSkulls;
public CreeperEntity(EntityType <? extends CreeperEntity > type, World worldIn)
{
super(type, worldIn);
}
protected void registerGoals()
{
this.goalSelector.addGoal(1, new SwimGoal(this));
this.goalSelector.addGoal(2, new CreeperSwellGoal(this));
this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, OcelotEntity.class, 6.0F, 1.0D, 1.2D));
this.goalSelector.addGoal(3, new AvoidEntityGoal<>(this, CatEntity.class, 6.0F, 1.0D, 1.2D));
this.goalSelector.addGoal(4, new MeleeAttackGoal(this, 1.0D, false));
this.goalSelector.addGoal(5, new WaterAvoidingRandomWalkingGoal(this, 0.8D));
this.goalSelector.addGoal(6, new LookAtGoal(this, PlayerEntity.class, 8.0F));
this.goalSelector.addGoal(6, new LookRandomlyGoal(this));
this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, PlayerEntity.class, true));
this.targetSelector.addGoal(2, new HurtByTargetGoal(this));
}
public static AttributeModifierMap.MutableAttribute registerAttributes()
{
return MonsterEntity.func_234295_eP_().createMutableAttribute(Attributes.MOVEMENT_SPEED, 0.25D);
}
public int getMaxFallHeight()
{
return this.getAttackTarget() == null ? 3 : 3 + (int)(this.getHealth() - 1.0F);
}
public boolean onLivingFall(float distance, float damageMultiplier)
{
boolean flag = super.onLivingFall(distance, damageMultiplier);
this.timeSinceIgnited = (int)((float)this.timeSinceIgnited + distance * 1.5F);
if (this.timeSinceIgnited > this.fuseTime - 5)
{
this.timeSinceIgnited = this.fuseTime - 5;
}
return flag;
}
protected void registerData()
{
super.registerData();
this.dataManager.register(STATE, -1);
this.dataManager.register(POWERED, false);
this.dataManager.register(IGNITED, false);
}
public void writeAdditional(CompoundNBT compound)
{
super.writeAdditional(compound);
if (this.dataManager.get(POWERED))
{
compound.putBoolean("powered", true);
}
compound.putShort("Fuse", (short)this.fuseTime);
compound.putByte("ExplosionRadius", (byte)this.explosionRadius);
compound.putBoolean("ignited", this.hasIgnited());
}
public void readAdditional(CompoundNBT compound)
{
super.readAdditional(compound);
this.dataManager.set(POWERED, compound.getBoolean("powered"));
if (compound.contains("Fuse", 99))
{
this.fuseTime = compound.getShort("Fuse");
}
if (compound.contains("ExplosionRadius", 99))
{
this.explosionRadius = compound.getByte("ExplosionRadius");
}
if (compound.getBoolean("ignited"))
{
this.ignite();
}
}
public void tick()
{
if (this.isAlive())
{
this.lastActiveTime = this.timeSinceIgnited;
if (this.hasIgnited())
{
this.setCreeperState(1);
}
int i = this.getCreeperState();
if (i > 0 && this.timeSinceIgnited == 0)
{
this.playSound(SoundEvents.ENTITY_CREEPER_PRIMED, 1.0F, 0.5F);
}
this.timeSinceIgnited += i;
if (this.timeSinceIgnited < 0)
{
this.timeSinceIgnited = 0;
}
if (this.timeSinceIgnited >= this.fuseTime)
{
this.timeSinceIgnited = this.fuseTime;
this.explode();
}
}
super.tick();
}
protected SoundEvent getHurtSound(DamageSource damageSourceIn)
{
return SoundEvents.ENTITY_CREEPER_HURT;
}
protected SoundEvent getDeathSound()
{
return SoundEvents.ENTITY_CREEPER_DEATH;
}
protected void dropSpecialItems(DamageSource source, int looting, boolean recentlyHitIn)
{
super.dropSpecialItems(source, looting, recentlyHitIn);
Entity entity = source.getTrueSource();
if (entity != this && entity instanceof CreeperEntity)
{
CreeperEntity creeperentity = (CreeperEntity)entity;
if (creeperentity.ableToCauseSkullDrop())
{
creeperentity.incrementDroppedSkulls();
this.entityDropItem(Items.CREEPER_HEAD);
}
}
}
public boolean attackEntityAsMob(Entity entityIn)
{
return true;
}
public boolean isCharged()
{
return this.dataManager.get(POWERED);
}
public float getCreeperFlashIntensity(float partialTicks)
{
return MathHelper.lerp(partialTicks, (float)this.lastActiveTime, (float)this.timeSinceIgnited) / (float)(this.fuseTime - 2);
}
public int getCreeperState()
{
return this.dataManager.get(STATE);
}
public void setCreeperState(int state)
{
this.dataManager.set(STATE, state);
}
public void func_241841_a(ServerWorld p_241841_1_, LightningBoltEntity p_241841_2_)
{
super.func_241841_a(p_241841_1_, p_241841_2_);
this.dataManager.set(POWERED, true);
}
protected ActionResultType func_230254_b_(PlayerEntity p_230254_1_, Hand p_230254_2_)
{
ItemStack itemstack = p_230254_1_.getHeldItem(p_230254_2_);
if (itemstack.getItem() == Items.FLINT_AND_STEEL)
{
this.world.playSound(p_230254_1_, this.getPosX(), this.getPosY(), this.getPosZ(), SoundEvents.ITEM_FLINTANDSTEEL_USE, this.getSoundCategory(), 1.0F, this.rand.nextFloat() * 0.4F + 0.8F);
if (!this.world.isRemote)
{
this.ignite();
itemstack.damageItem(1, p_230254_1_, (player) ->
{
player.sendBreakAnimation(p_230254_2_);
});
}
return ActionResultType.func_233537_a_(this.world.isRemote);
}
else
{
return super.func_230254_b_(p_230254_1_, p_230254_2_);
}
}
private void explode()
{
if (!this.world.isRemote)
{
Explosion.Mode explosion$mode = this.world.getGameRules().getBoolean(GameRules.MOB_GRIEFING) ? Explosion.Mode.DESTROY : Explosion.Mode.NONE;
float f = this.isCharged() ? 2.0F : 1.0F;
this.dead = true;
this.world.createExplosion(this, this.getPosX(), this.getPosY(), this.getPosZ(), (float)this.explosionRadius * f, explosion$mode);
this.remove();
this.spawnLingeringCloud();
}
}
private void spawnLingeringCloud()
{
Collection<EffectInstance> collection = this.getActivePotionEffects();
if (!collection.isEmpty())
{
AreaEffectCloudEntity areaeffectcloudentity = new AreaEffectCloudEntity(this.world, this.getPosX(), this.getPosY(), this.getPosZ());
areaeffectcloudentity.setRadius(2.5F);
areaeffectcloudentity.setRadiusOnUse(-0.5F);
areaeffectcloudentity.setWaitTime(10);
areaeffectcloudentity.setDuration(areaeffectcloudentity.getDuration() / 2);
areaeffectcloudentity.setRadiusPerTick(-areaeffectcloudentity.getRadius() / (float)areaeffectcloudentity.getDuration());
for (EffectInstance effectinstance : collection)
{
areaeffectcloudentity.addEffect(new EffectInstance(effectinstance));
}
this.world.addEntity(areaeffectcloudentity);
}
}
public boolean hasIgnited()
{
return this.dataManager.get(IGNITED);
}
public void ignite()
{
this.dataManager.set(IGNITED, true);
}
public boolean ableToCauseSkullDrop()
{
return this.isCharged() && this.droppedSkulls < 1;
}
public void incrementDroppedSkulls()
{
++this.droppedSkulls;
}
public float getSwelling(float partialTicks) {
float previousSwell = (float) this.lastActiveTime;
float currentSwell = (float) this.timeSinceIgnited;
float interpolatedSwell = MathHelper.lerp(partialTicks, previousSwell, currentSwell);
float swell = interpolatedSwell / (float) this.fuseTime;
return MathHelper.clamp(swell, 0.0F, 1.0F);
}
}
Последнее редактирование: