Source BoggedInfo - Spiderman31807/Mob_Selector_Mod GitHub Wiki

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();
	}
}
⚠️ **GitHub.com Fallback** ⚠️