package playasmob;
import net.minecraft.world.level.biome.Biomes;
import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.Level;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.entity.projectile.Arrow;
import net.minecraft.world.entity.projectile.AbstractArrow;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.entity.monster.Bogged;
import net.minecraft.world.entity.Shearable;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.effect.MobEffects;
import net.minecraft.world.effect.MobEffectInstance;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.sounds.SoundSource;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.resources.ResourceKey;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.client.renderer.entity.state.EntityRenderState;
import net.minecraft.client.renderer.entity.state.BoggedRenderState;
import net.minecraft.client.renderer.entity.EntityRenderer;
import net.minecraft.client.renderer.entity.BoggedRenderer;
import java.util.List;
public class BoggedInfo extends AbstractSkeletonInfo implements Shearable {
public static final Synched sheared = Synched.Sheared;
public BoggedInfo(Player player, CompoundTag compound) {
super(EntityType.BOGGED, Bogged.class, player, compound);
}
public BoggedInfo(Player player) {
this(player, null);
}
public BoggedInfo() {
this(null);
}
// Custom Code
@Override
public void reset() {
super.reset();
this.reset(sheared);
}
@Override
public EntityRenderer getRenderer() {
return new BoggedRenderer(Utils.getContext());
}
@Override
public EntityRenderState createState() {
return new BoggedRenderState();
}
@Override
public void modifyState(EntityRenderState state) {
super.modifyState(state);
if (state instanceof BoggedRenderState skeletonState)
skeletonState.isSheared = this.isSheared();
}
@Override
public List<ResourceKey<Biome>> getRespawnBiomes(ResourceKey<Level> dimension) {
return dimension.equals(Level.OVERWORLD) ? List.of(Biomes.SWAMP, Biomes.MANGROVE_SWAMP) : super.getRespawnBiomes(dimension);
}
// Skeleton.class Code
public boolean isSheared() {
return this.get(sheared);
}
public void setSheared(boolean sheared) {
this.set(this.sheared, sheared);
}
@Override
public SoundEvent getAmbientSound() {
return SoundEvents.BOGGED_AMBIENT;
}
@Override
public SoundEvent getHurtSound(SoundEvent original, DamageSource source) {
return SoundEvents.BOGGED_HURT;
}
@Override
public SoundEvent getDeathSound(SoundEvent original) {
return SoundEvents.BOGGED_DEATH;
}
@Override
public SoundEvent getStepSound() {
return SoundEvents.BOGGED_STEP;
}
@Override
public void modifyArrow(AbstractArrow arrow, ItemStack projectileStack, ItemStack weaponStack) {
super.modifyArrow(arrow, projectileStack, weaponStack);
if (weaponStack.is(Items.BOW) && arrow instanceof Arrow arrowPro)
arrowPro.addEffect(new MobEffectInstance(MobEffects.POISON, 100));
}
@Override
public void shear(ServerLevel server, SoundSource source, ItemStack stack) {
server.playSound(null, this.player, SoundEvents.BOGGED_SHEAR, source, 1, 1);
this.spawnShearedMushrooms(server, stack);
this.setSheared(true);
}
public void spawnShearedMushrooms(ServerLevel server, ItemStack stack) {
//this.player.dropFromShearingLootTable(server, BuiltInLootTables.BOGGED_SHEAR, stack, (p_390239_, p_390240_) -> this.spawnAtLocation(p_390239_, p_390240_, this.getBbHeight()));
}
@Override
public boolean readyForShearing() {
return !this.isSheared() && this.isAlive();
}
}