Jump to content

bigMojitos

Members
  • Posts

    28
  • Joined

  • Last visited

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

bigMojitos's Achievements

Tree Puncher

Tree Puncher (2/8)

0

Reputation

  1. It didn't work. Is there any way I could manually call an Event like EntityRenderers.RegisterLayerDefinition() to see if that works?
  2. I tried to do it by running it in debug mode and rebuilding the mod after I edit a value in my Mesh Definition Method but it doesn't work until I actually fully restart the program. I understand this is probably a dumb question but I'm just wondering if anything remotely like this is possible with forge.
  3. Would appreciate a quick outline or pseudocode on how I could do this, that is of course if its possible. I was thinking about using LayerRenderer but I've kindve hit a dead end on code to sift through since I'm using GEOLayerRenderer. Any help would be appreciated!
  4. Ok so how would you go about animating a RenderLayer without using GeckoLib? Just some psuedocode or a github reference would be helpful
  5. Also how do you render animation in your GeoLayerRenderer, does it get its own predicate method like with the GeoEntityRenderer? Or are the animations created and passed to it through its parent Renderer?
  6. Just trying to figure out whether or not I should be using it to animate an entity a lot of stuff I see on GitHub aren't implementing it but the tutorial I watched did so I'm just wondering.
  7. Hi, I'm kind of new to Forge and 3D Rendering in Java and have some questions regarding what a render layer does. If anyone could give any answer no matter the length it would be greatly appreciated! 1. Are you able to have multiple RenderLayers on one mob for which each have their own different animations? 2. Are render layers useful for rendering items in a custom entity's hand? 3. Should a custom RenderLayer class be an extension of its parent EntityRenderer? 4. What are Render Layers mostly used for?
  8. So I did what you told me and put my entity registering method in the EntityRenderersEvent.RegisterRenderers handler and then I moved that Handler, along with the EntityAttributeCreationEvent handler, too a separate client side class. It lead to the error "Entity has no attributes". Since my project is not the big I uploaded that version of it to Github so if you're okay with looking at it heres the link : github.com/bigMojitos/MilMedi . So ater that didn't work I reverted back to registering in the Main Mod class and running debug on the EntityAttributeCreationEvent, heres what I got: https://imgur.com/a/CehO5A3 . It seems like its working but I'm not seeing the affects in game, my mob is still moves and attacks at the same speed no matter how much I adjust those two attributes. What should I do?
  9. empty comment mistake
  10. Hi, I have a custom entity with Attributes which aren't applying. Before when I didn't have an EntityAttributeCreationEvent handler my entity wouldn't event load but, I added one and It now spawns and renders/animates. However, none of the Entity Attribute modifiers are actually applying to my entity. No matte how much I change the Attack Speed or Movement variable it always stays the same. Heres my Entity Class package willh.org.medieval.entity.reus; import net.minecraft.client.Minecraft; import net.minecraft.network.chat.Component; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.PathfinderMob; 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.ai.goal.target.NearestAttackableTargetGoal; import net.minecraft.world.entity.animal.Cow; import net.minecraft.world.entity.monster.Monster; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; import net.minecraftforge.event.entity.player.AttackEntityEvent; 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 ReusEntity extends Monster implements IAnimatable { boolean attacking; public ReusEntity(EntityType<? extends Monster> p_20966_, Level p_20967_) { super(p_20966_, p_20967_); attacking =false; } private AnimationFactory factory = new AnimationFactory(this); @Override public void registerControllers(AnimationData data) { data.addAnimationController(new AnimationController(this, "controller", 0, this::predicate)); } public static void print(String r){ if(Minecraft.getInstance().player != null) { Player p = Minecraft.getInstance().player; p.sendSystemMessage(Component.nullToEmpty(r)); } } @Override public boolean doHurtTarget(Entity p_21372_) { this.level.broadcastEntityEvent(this, (byte)10); return super.doHurtTarget(p_21372_); } @Override public void handleEntityEvent(byte p_21375_) { attacking = p_21375_ == 10; super.handleEntityEvent(p_21375_); } protected void registerGoals() { this.goalSelector.addGoal(0, new MeleeAttackGoal(this, 1.1d, false) {}); this.goalSelector.addGoal(1, new FloatGoal(this)); this.goalSelector.addGoal(2, new PanicGoal(this, 1.25D)); this.goalSelector.addGoal(3, new NearestAttackableTargetGoal(this, Cow.class,true)); this.goalSelector.addGoal(4, new LookAtPlayerGoal(this, Player.class, 8.0F)); this.goalSelector.addGoal(5, new RandomLookAroundGoal(this)); this.targetSelector.addGoal(6, (new HurtByTargetGoal(this)).setAlertOthers()); } private <E extends IAnimatable> PlayState predicate(AnimationEvent<E> event) { if (event.isMoving()) { event.getController().setAnimation(new AnimationBuilder().addAnimation("walkEquipped.model.new", true)); return PlayState.CONTINUE; } event.getController().setAnimation(new AnimationBuilder().addAnimation("idle_equipped.new", true)); return PlayState.CONTINUE; } public static AttributeSupplier setAttributes() { return Mob.createMobAttributes() .add(Attributes.MAX_HEALTH, 20.0D) .add(Attributes.ATTACK_DAMAGE, 3.0f) .add(Attributes.ATTACK_SPEED, 0.9) .add(Attributes.MOVEMENT_SPEED, 0.3f).build(); } @Override public AnimationFactory getFactory() { return this.factory; } } And heres my main mod class where I register my EntityAttributeCreationEvent handler: @Mod(Medieval.MOD_ID) public class Medieval { public static final String MOD_ID = "medi"; private static final Logger LOGGER = LogUtils.getLogger(); public static ResourceLocation modLoc(String name) { return new ResourceLocation(MOD_ID, name); } public Medieval() { IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); // Add to the constructor ItemInit.register(modEventBus); EntityInit.ENTITIES.register(modEventBus); modEventBus.addListener(this::commonSetup); modEventBus.addListener(this::clientSetup); GeckoLib.initialize(); modEventBus.addListener(this::commonSetup); MinecraftForge.EVENT_BUS.register(this); } private void commonSetup(final FMLCommonSetupEvent event) { } private void clientSetup(FMLClientSetupEvent event){ EntityRenderers.register(EntityInit.REUS.get(), ReusRenderer::new); } @Mod.EventBusSubscriber(modid = MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD) public static class ClientModEvents { @SubscribeEvent public static void onClientSetup(FMLClientSetupEvent event) { LOGGER.info("HELLO FROM CLIENT SETUP"); LOGGER.info("MINECRAFT NAME >> {}", Minecraft.getInstance().getUser().getName()); } @SubscribeEvent public static void registerEntityAttributes(EntityAttributeCreationEvent event){ event.put(EntityInit.REUS.get(), ReusEntity.setAttributes()); } } } Any help would be appreciated thanks!
  11. Ok so I got it working and it seems to register fine but I cant spawn my entity. I heard that its supposed to appear with /summon command but I cant find it. Here is my new ClientBus with the working EntityRenderersEvent: @Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.CLIENT) public static class ClientBus { @SubscribeEvent public static void playerRender(RenderPlayerEvent.Pre ev){ print("Event has fired"); //not firing } @SubscribeEvent public static void registerRenderers(EntityRenderersEvent.RegisterRenderers event){ event.registerEntityRenderer(REUS.get(), ReusRenderer::new); } @SubscribeEvent public void entityAttributeCreationEvent(EntityAttributeCreationEvent event) { LOGGER.info("Entity Attribute Event"); event.put(REUS.get(), ReusEntity.setAttributes()); } @SubscribeEvent public static void keyTest(InputEvent.Key key){ if(key.getKey() == InputConstants.KEY_C) print("Test Working"); } } And here is my register: @Mod.EventBusSubscriber(modid =Inceptor.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) public class ModEntityTypes { public static final DeferredRegister<EntityType<?>> ENTITY_TYPES = DeferredRegister.create(ForgeRegistries.ENTITY_TYPES, Inceptor.MODID); // Entity Types public static final RegistryObject<EntityType<ReusEntity>> REUS = ENTITY_TYPES.register("reus", () -> EntityType.Builder.of(ReusEntity::new, MobCategory.CREATURE) .sized(1.0f, 1.0f) // Hitbox Size .build(new ResourceLocation(Inceptor.MODID, "reus").toString())); public static void register(IEventBus eventBus) { ENTITY_TYPES.register(eventBus); } } Is there a better way to check if its registered rather than spawning it?
  12. So do I need to create a new EntityRendererProvider? Sorry most of the tutorial I'm looking at are in 1.18 so I dont know if everything is correct. And what about for the first parameter with ModEntityTypes.Reus.get() but it says its incorrect?
  13. package me.wdh.inceptor.entity.custom; import net.minecraft.world.entity.*; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.level.Level; 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 ReusEntity extends Mob implements IAnimatable { public ReusEntity(EntityType<? extends Mob> p_20966_, Level p_20967_) { super(p_20966_, p_20967_); } private AnimationFactory factory = new AnimationFactory(this); @Override public void registerControllers(AnimationData data) { data.addAnimationController(new AnimationController(this, "controller", 0, this::predicate)); } private <E extends IAnimatable> PlayState predicate(AnimationEvent<E> event) { if (event.isMoving()) { event.getController().setAnimation(new AnimationBuilder().addAnimation("pose.model.new", true)); return PlayState.CONTINUE; } event.getController().setAnimation(new AnimationBuilder().addAnimation("pose.model.new", true)); return PlayState.CONTINUE; } public static AttributeSupplier setAttributes() { return Mob.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(); } @Override public AnimationFactory getFactory() { return this.factory; } } package me.wdh.inceptor.entity.client; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import me.wdh.inceptor.Inceptor; import me.wdh.inceptor.entity.custom.ReusEntity; 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 ReusRenderer extends GeoEntityRenderer<ReusEntity> { public ReusRenderer(EntityRendererProvider.Context renderManager, AnimatedGeoModel<ReusEntity> modelProvider) { super(renderManager, modelProvider); } @Override public ResourceLocation getTextureLocation(ReusEntity instance) { return new ResourceLocation(Inceptor.MODID, "textures/reus.png"); } public RenderType getRenderType(ReusEntity 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); } } public class ModEntityTypes { public static final DeferredRegister<EntityType<?>> ENTITY_TYPES = DeferredRegister.create(ForgeRegistries.ENTITY_TYPES, Inceptor.MODID); // Entity Types public static final RegistryObject<EntityType<ReusEntity>> REUS = ENTITY_TYPES.register("reus", () -> EntityType.Builder.of(ReusEntity::new, MobCategory.CREATURE) .sized(1.0f, 1.0f) // Hitbox Size .build(new ResourceLocation(Inceptor.MODID, "reus").toString())); } @Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.CLIENT) public static class ClientBus { @SubscribeEvent public static void playerRender(RenderPlayerEvent.Pre ev){ print("Event has fired"); //not firing } @SubscribeEvent public static void livingRender(EntityRenderersEvent.RegisterRenderers event){ event.registerEntityRenderer(REUS.get(),ReusRenderer::new); } @SubscribeEvent public static void keyTest(InputEvent.Key key){ if(key.getKey() == InputConstants.KEY_C) print("Test Working"); } } The error im getting at living render event is this --> https://imgur.com/a/3CtbJOM
  14. Hi I'm having trouble understanding what needs to go in the parameters of this method: EntityRenderers.register(ModEntityTypes.REUS.get(), ReusRenderer::new); ^ Both the options I have in those parameters are wrong but I dont know where to get the right objects for the params any help would be appreciated thanks!
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.