Skip to content

Instantly share code, notes, and snippets.

@Kaupenjoe
Created April 29, 2022 13:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Kaupenjoe/5f1061426041610397a478a96e2e314e to your computer and use it in GitHub Desktop.
Save Kaupenjoe/5f1061426041610397a478a96e2e314e to your computer and use it in GitHub Desktop.
YT290 - Forge 118 - Entity
maven { url 'https://dl.cloudsmith.io/public/geckolib3/geckolib/maven/' }
implementation fg.deobf('software.bernie.geckolib:geckolib-1.18-forge:3.0.13')
"item.tutorialmod.raccoon_spawn_egg": "Raccoon Spawn Egg",
@SubscribeEvent
public static void entityAttributeEvent(EntityAttributeCreationEvent event) {
event.put(ModEntityTypes.RACCOON.get(), RaccoonEntity.setAttributes());
}
public static final RegistryObject<Item> RACCOON_SPAWN_EGG = ITEMS.register("raccoon_spawn_egg",
() -> new ForgeSpawnEggItem(ModEntityTypes.RACCOON,0x948e8d, 0x3b3635,
new Item.Properties().tab(ModCreativeModeTab.TUTORIAL_TAB)));
ModEntityTypes.register(eventBus);
GeckoLib.initialize();
//clientSetup method
EntityRenderers.register(ModEntityTypes.RACCOON.get(), RaccoonRenderer::new);
import net.kaupenjoe.tutorialmod.TutorialMod;
import net.kaupenjoe.tutorialmod.entity.custom.RaccoonEntity;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.MobCategory;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
public class ModEntityTypes {
public static final DeferredRegister<EntityType<?>> ENTITY_TYPES =
DeferredRegister.create(ForgeRegistries.ENTITIES, TutorialMod.MOD_ID);
public static final RegistryObject<EntityType<RaccoonEntity>> RACCOON =
ENTITY_TYPES.register("raccoon",
() -> EntityType.Builder.of(RaccoonEntity::new, MobCategory.CREATURE)
.sized(0.8f, 0.6f)
.build(new ResourceLocation(TutorialMod.MOD_ID, "raccoon").toString()));
public static void register(IEventBus eventBus) {
ENTITY_TYPES.register(eventBus);
}
}
{
"parent": "minecraft:item/template_spawn_egg"
}
import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.entity.AgeableMob;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.ai.attributes.AttributeSupplier;
import net.minecraft.world.entity.ai.attributes.Attributes;
import net.minecraft.world.entity.ai.goal.*;
import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal;
import net.minecraft.world.entity.animal.Animal;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
import org.jetbrains.annotations.Nullable;
import software.bernie.geckolib3.core.IAnimatable;
import software.bernie.geckolib3.core.PlayState;
import software.bernie.geckolib3.core.builder.AnimationBuilder;
import software.bernie.geckolib3.core.controller.AnimationController;
import software.bernie.geckolib3.core.event.predicate.AnimationEvent;
import software.bernie.geckolib3.core.manager.AnimationData;
import software.bernie.geckolib3.core.manager.AnimationFactory;
public class RaccoonEntity extends Animal implements IAnimatable {
private AnimationFactory factory = new AnimationFactory(this);
public RaccoonEntity(EntityType<? extends Animal> entityType, Level level) {
super(entityType, level);
}
public static AttributeSupplier setAttributes() {
return Animal.createMobAttributes()
.add(Attributes.MAX_HEALTH, 20.0D)
.add(Attributes.ATTACK_DAMAGE, 3.0f)
.add(Attributes.ATTACK_SPEED, 2.0f)
.add(Attributes.MOVEMENT_SPEED, 0.3f).build();
}
protected void registerGoals() {
this.goalSelector.addGoal(1, new FloatGoal(this));
this.goalSelector.addGoal(2, new PanicGoal(this, 1.25D));
this.goalSelector.addGoal(3, new LookAtPlayerGoal(this, Player.class, 8.0F));
this.goalSelector.addGoal(4, new WaterAvoidingRandomStrollGoal(this, 1.0D));
this.goalSelector.addGoal(5, new RandomLookAroundGoal(this));
this.targetSelector.addGoal(6, (new HurtByTargetGoal(this)).setAlertOthers());
}
@Nullable
@Override
public AgeableMob getBreedOffspring(ServerLevel p_146743_, AgeableMob p_146744_) {
return null;
}
private <E extends IAnimatable> PlayState predicate(AnimationEvent<E> event) {
if (event.isMoving()) {
event.getController().setAnimation(new AnimationBuilder().addAnimation("animation.raccoon.walk", true));
return PlayState.CONTINUE;
}
event.getController().setAnimation(new AnimationBuilder().addAnimation("animation.raccoon.idle", true));
return PlayState.CONTINUE;
}
@Override
public void registerControllers(AnimationData data) {
data.addAnimationController(new AnimationController(this, "controller",
0, this::predicate));
}
@Override
public AnimationFactory getFactory() {
return this.factory;
}
protected void playStepSound(BlockPos pos, BlockState blockIn) {
this.playSound(SoundEvents.SWEET_BERRY_BUSH_PICK_BERRIES, 0.15F, 1.0F);
}
protected SoundEvent getAmbientSound() {
return SoundEvents.CAT_STRAY_AMBIENT;
}
protected SoundEvent getHurtSound(DamageSource damageSourceIn) {
return SoundEvents.DOLPHIN_HURT;
}
protected SoundEvent getDeathSound() {
return SoundEvents.DOLPHIN_DEATH;
}
protected float getSoundVolume() {
return 0.2F;
}
}
import net.kaupenjoe.tutorialmod.TutorialMod;
import net.kaupenjoe.tutorialmod.entity.custom.RaccoonEntity;
import net.minecraft.resources.ResourceLocation;
import software.bernie.geckolib3.model.AnimatedGeoModel;
public class RaccoonModel extends AnimatedGeoModel<RaccoonEntity> {
@Override
public ResourceLocation getModelLocation(RaccoonEntity object) {
return new ResourceLocation(TutorialMod.MOD_ID, "geo/raccoon.geo.json");
}
@Override
public ResourceLocation getTextureLocation(RaccoonEntity object) {
return new ResourceLocation(TutorialMod.MOD_ID, "textures/entity/raccoon/raccoon.png");
}
@Override
public ResourceLocation getAnimationFileLocation(RaccoonEntity animatable) {
return new ResourceLocation(TutorialMod.MOD_ID, "animations/raccoon.animation.json");
}
}
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import net.kaupenjoe.tutorialmod.TutorialMod;
import net.kaupenjoe.tutorialmod.entity.custom.RaccoonEntity;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.entity.EntityRendererProvider;
import net.minecraft.resources.ResourceLocation;
import software.bernie.geckolib3.model.AnimatedGeoModel;
import software.bernie.geckolib3.renderers.geo.GeoEntityRenderer;
public class RaccoonRenderer extends GeoEntityRenderer<RaccoonEntity> {
public RaccoonRenderer(EntityRendererProvider.Context renderManager) {
super(renderManager, new RaccoonModel());
this.shadowRadius = 0.3f;
}
@Override
public ResourceLocation getTextureLocation(RaccoonEntity instance) {
return new ResourceLocation(TutorialMod.MOD_ID, "textures/entity/raccoon/raccoon.png");
}
@Override
public RenderType getRenderType(RaccoonEntity animatable, float partialTicks, PoseStack stack,
MultiBufferSource renderTypeBuffer, VertexConsumer vertexBuilder, int packedLightIn,
ResourceLocation textureLocation) {
stack.scale(0.8F, 0.8F, 0.8F);
return super.getRenderType(animatable, partialTicks, stack, renderTypeBuffer, vertexBuilder, packedLightIn, textureLocation);
}
}
@IceStarDragon707
Copy link

IceStarDragon707 commented Oct 10, 2022

Hey Mr. KaupenJoe,
I am sorry, but I failed here with an error.
do you know the reason for this problem ??
my code is correct, but I cannot summon or use spawn_eff to summon the raccoon in the world...
this message will pop up when I try summoning this entity

[11:43:33] [Render thread/INFO] [minecraft/ChatComponent]: [CHAT] Local game hosted on port 54454
[11:43:49] [Server thread/WARN] [minecraft/EntityType]: Exception loading entity: 
java.lang.IllegalArgumentException: Can't find attribute minecraft:generic.follow_range
	at net.minecraft.world.entity.ai.attributes.AttributeSupplier.getAttributeInstance(AttributeSupplier.java:21) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading}
	at net.minecraft.world.entity.ai.attributes.AttributeSupplier.getValue(AttributeSupplier.java:28) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading}
	at net.minecraft.world.entity.ai.attributes.AttributeMap.getValue(AttributeMap.java:65) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading}
	at net.minecraft.world.entity.LivingEntity.getAttributeValue(LivingEntity.java:1938) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading}
	at net.minecraft.world.entity.ai.navigation.PathNavigation.<init>(PathNavigation.java:60) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading}
	at net.minecraft.world.entity.ai.navigation.GroundPathNavigation.<init>(GroundPathNavigation.java:21) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading}
	at net.minecraft.world.entity.Mob.createNavigation(Mob.java:141) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.world.entity.Mob.<init>(Mob.java:123) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.world.entity.PathfinderMob.<init>(PathfinderMob.java:14) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading}
	at net.minecraft.world.entity.AgeableMob.<init>(AgeableMob.java:23) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading}
	at net.minecraft.world.entity.animal.Animal.<init>(Animal.java:40) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading}

	at org.isd.tutorialmod.entity.custom.RaccoonEntity.<init>(RaccoonEntity.java:33) ~[%2380!/:?] {re:classloading}

	at net.minecraft.world.entity.EntityType.create(EntityType.java:463) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading}
	at net.minecraft.world.entity.EntityType.lambda$create$0(EntityType.java:473) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading}
	at java.util.Optional.map(Optional.java:260) ~[?:?] {}
	at net.minecraft.world.entity.EntityType.create(EntityType.java:472) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading}
	at net.minecraft.world.entity.EntityType.loadStaticEntity(EntityType.java:555) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading}
	at net.minecraft.world.entity.EntityType.loadEntityRecursive(EntityType.java:511) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading}
	at net.minecraft.server.commands.SummonCommand.spawnEntity(SummonCommand.java:50) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading}
	at net.minecraft.server.commands.SummonCommand.lambda$register$1(SummonCommand.java:34) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading}
	at com.mojang.brigadier.CommandDispatcher.execute(CommandDispatcher.java:263) ~[brigadier-1.0.18.jar%2338!/:?] {}
	at net.minecraft.commands.Commands.performCommand(Commands.java:237) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading}
	at net.minecraft.server.network.ServerGamePacketListenerImpl.handleCommand(ServerGamePacketListenerImpl.java:1196) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading}
	at net.minecraft.server.network.ServerGamePacketListenerImpl.handleChat(ServerGamePacketListenerImpl.java:1171) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading}
	at net.minecraft.server.network.ServerGamePacketListenerImpl.handleChat(ServerGamePacketListenerImpl.java:1157) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading}
	at net.minecraft.network.protocol.game.ServerboundChatPacket.handle(ServerboundChatPacket.java:33) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading}
	at net.minecraft.network.protocol.game.ServerboundChatPacket.handle(ServerboundChatPacket.java:6) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading}
	at net.minecraft.network.protocol.PacketUtils.lambda$ensureRunningOnSameThread$0(PacketUtils.java:38) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading}
	at net.minecraft.server.TickTask.run(TickTask.java:20) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading}
	at net.minecraft.util.thread.BlockableEventLoop.doRunTask(BlockableEventLoop.java:146) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.util.thread.ReentrantBlockableEventLoop.doRunTask(ReentrantBlockableEventLoop.java:22) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading}
	at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:821) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:164) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.util.thread.BlockableEventLoop.pollTask(BlockableEventLoop.java:116) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.server.MinecraftServer.pollTaskInternal(MinecraftServer.java:804) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.server.MinecraftServer.pollTask(MinecraftServer.java:798) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.util.thread.BlockableEventLoop.managedBlock(BlockableEventLoop.java:129) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.server.MinecraftServer.waitUntilNextTick(MinecraftServer.java:784) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:708) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B}
	at net.minecraft.server.MinecraftServer.lambda$spin$2(MinecraftServer.java:262) ~[forge-1.18.2-40.0.36_mapped_parchment_1.18.1-2022.02.13-1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B}
	at java.lang.Thread.run(Thread.java:833) [?:?] {}
[11:43:49] [Render thread/INFO] [minecraft/ChatComponent]: [CHAT] Unable to summon entity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment