Slime AI upgrase

This commit is contained in:
paulevsGitch 2020-10-24 12:05:19 +03:00
parent 3cefefc409
commit 5412a10204
3 changed files with 59 additions and 0 deletions

View file

@ -4,16 +4,21 @@ import java.util.List;
import java.util.Random; import java.util.Random;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.entity.EntityData; import net.minecraft.entity.EntityData;
import net.minecraft.entity.EntityType; import net.minecraft.entity.EntityType;
import net.minecraft.entity.ItemEntity;
import net.minecraft.entity.LivingEntity; import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.SpawnReason; import net.minecraft.entity.SpawnReason;
import net.minecraft.entity.attribute.DefaultAttributeContainer; import net.minecraft.entity.attribute.DefaultAttributeContainer;
import net.minecraft.entity.attribute.EntityAttributes; import net.minecraft.entity.attribute.EntityAttributes;
import net.minecraft.entity.damage.DamageSource;
import net.minecraft.entity.data.DataTracker; import net.minecraft.entity.data.DataTracker;
import net.minecraft.entity.data.TrackedData; import net.minecraft.entity.data.TrackedData;
import net.minecraft.entity.data.TrackedDataHandlerRegistry; import net.minecraft.entity.data.TrackedDataHandlerRegistry;
import net.minecraft.entity.mob.SlimeEntity; import net.minecraft.entity.mob.SlimeEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.particle.ParticleEffect; import net.minecraft.particle.ParticleEffect;
import net.minecraft.particle.ParticleTypes; import net.minecraft.particle.ParticleTypes;
@ -27,6 +32,7 @@ import net.minecraft.world.World;
import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.Biome;
import ru.betterend.interfaces.ISlime; import ru.betterend.interfaces.ISlime;
import ru.betterend.registry.BiomeRegistry; import ru.betterend.registry.BiomeRegistry;
import ru.betterend.util.MHelper;
public class EntityEndSlime extends SlimeEntity { public class EntityEndSlime extends SlimeEntity {
private static final TrackedData<Boolean> MOSSY = DataTracker.registerData(EntityEndSlime.class, TrackedDataHandlerRegistry.BOOLEAN); private static final TrackedData<Boolean> MOSSY = DataTracker.registerData(EntityEndSlime.class, TrackedDataHandlerRegistry.BOOLEAN);
@ -97,6 +103,22 @@ public class EntityEndSlime extends SlimeEntity {
this.removed = true; this.removed = true;
} }
@Override
protected void dropLoot(DamageSource source, boolean causedByPlayer) {
int maxCount = this.getSize();
int minCount = maxCount >> 1;
if (minCount < 1) {
minCount = 1;
}
if (causedByPlayer && this.attackingPlayer != null) {
int looting = EnchantmentHelper.getLooting(this.attackingPlayer);
minCount += looting;
}
int count = minCount < maxCount ? MHelper.randRange(minCount, maxCount, random) : maxCount;
ItemEntity drop = new ItemEntity(world, getX(), getY(), getZ(), new ItemStack(Items.SLIME_BALL, count));
this.world.spawnEntity(drop);
}
protected void setMossy(boolean mossy) { protected void setMossy(boolean mossy) {
this.dataTracker.set(MOSSY, mossy); this.dataTracker.set(MOSSY, mossy);
} }

View file

@ -0,0 +1,36 @@
package ru.betterend.mixin.common;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import net.minecraft.entity.mob.SlimeEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
import ru.betterend.entity.EntityEndSlime;
import ru.betterend.util.BlocksHelper;
@Mixin(targets = "net.minecraft.entity.mob.SlimeEntity$MoveGoal")
public class SlimeEntityMoveGoalMixin {
@Shadow
@Final
private SlimeEntity slime;
@Inject(method = "canStart", at = @At("HEAD"), cancellable = true)
private void canStart(CallbackInfoReturnable<Boolean> info) {
if (!slime.hasVehicle() && slime instanceof EntityEndSlime) {
float yaw = slime.getHeadYaw();
float speed = slime.getMovementSpeed();
if (speed > 0.1) {
Vec3d dir = Vec3d.fromPolar(0, yaw);
BlockPos pos = slime.getBlockPos().add(dir.getX() * speed * 4, 0, dir.getZ() * speed * 4);
int down = BlocksHelper.downRay(slime.getEntityWorld(), pos, 16);
info.setReturnValue(down < 5);
info.cancel();
}
}
}
}

View file

@ -7,6 +7,7 @@
"ServerPlayNetworkHandlerMixin", "ServerPlayNetworkHandlerMixin",
"CraftingScreenHandlerMixin", "CraftingScreenHandlerMixin",
"GenerationSettingsAccessor", "GenerationSettingsAccessor",
"SlimeEntityMoveGoalMixin",
"AnvilScreenHandlerMixin", "AnvilScreenHandlerMixin",
"ServerPlayerEntityMixin", "ServerPlayerEntityMixin",
"ChorusPlantFeatureMixin", "ChorusPlantFeatureMixin",