Advertisement
Guest User

Hare Armor, onPlayerRendered event is never called

a guest
Mar 31st, 2023
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.94 KB | Gaming | 0 0
  1. package io.github.ziggly001.zigglys_animal_ears.item.custom;
  2.  
  3. import net.minecraft.client.Minecraft;
  4. import net.minecraft.world.entity.EquipmentSlot;
  5. import net.minecraft.world.entity.LivingEntity;
  6. import net.minecraft.world.entity.player.Player;
  7. import net.minecraft.world.item.ArmorMaterial;
  8. import net.minecraftforge.client.event.RenderPlayerEvent;
  9. import net.minecraftforge.common.MinecraftForge;
  10. import net.minecraftforge.eventbus.api.SubscribeEvent;
  11. import net.minecraftforge.fml.common.Mod;
  12. import software.bernie.geckolib3.core.IAnimatable;
  13. import software.bernie.geckolib3.core.PlayState;
  14. import software.bernie.geckolib3.core.builder.AnimationBuilder;
  15. import software.bernie.geckolib3.core.controller.AnimationController;
  16. import software.bernie.geckolib3.core.event.predicate.AnimationEvent;
  17. import software.bernie.geckolib3.core.manager.AnimationData;
  18. import software.bernie.geckolib3.core.manager.AnimationFactory;
  19. import software.bernie.geckolib3.item.GeoArmorItem;
  20. import software.bernie.geckolib3.util.GeckoLibUtil;
  21.  
  22. import static software.bernie.geckolib3.core.builder.ILoopType.EDefaultLoopTypes.LOOP;
  23.  
  24. public class HareArmorItem extends GeoArmorItem implements IAnimatable {
  25.     private final AnimationFactory factory = GeckoLibUtil.createFactory(this);
  26.  
  27.     public HareArmorItem(ArmorMaterial material, EquipmentSlot slot, Properties settings) {
  28.         super(material, slot, settings);
  29.     }
  30.  
  31.     @Override
  32.     public void registerControllers(AnimationData data) {
  33.         data.addAnimationController(new AnimationController<HareArmorItem>(this, "controller",
  34.                 20, this::predicate));
  35.     }
  36.  
  37.     @Override
  38.     public AnimationFactory getFactory() {
  39.         return this.factory;
  40.     }
  41.  
  42.     // gets reference to the player
  43.     /*
  44.     LivingEntity player = Minecraft.getInstance().player;
  45.     */
  46.     Player player;
  47.     // get difference between last coordinates and current coordinates.
  48.     // this gives us the components of the Speed at which the player is travelling this frame.
  49.  
  50.     double bpsPlanarSpeed;
  51.  
  52.     float moveDist;
  53.  
  54.     boolean crouching;
  55.     boolean sprinting;
  56.  
  57.     @SubscribeEvent
  58.     public void onPlayerRendered(RenderPlayerEvent event) {
  59.         player = event.getEntity();
  60.  
  61.         double deltaX;
  62.         double deltaY;
  63.         double deltaZ;
  64.  
  65.         {
  66.             assert player != null;
  67.             deltaX = player.getX() - player.xOld;
  68.             deltaY = player.getY() - player.yOld;
  69.             deltaZ = player.getZ() - player.zOld;
  70.         }
  71.  
  72.  
  73.         // Now, with these axis-aligned components of speed, we can construct the speed vector's magnitude.
  74.         double preCalculationSpeed = Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2) + Math.pow(deltaZ, 2));
  75.         // we multiply by 20 to convert to blocks/second, an actually usable metric.
  76.         // the number 20 is used because that is average ticks per second.
  77.         // getting the actual ticks per second of the frame is both difficult and unnecessary, as-
  78.         // -it requires constant server-client communication, and it is really stable compared to fps.
  79.         double bpsSpeed = preCalculationSpeed * 20;
  80.         // The speed in only x and z, "horizontal speed", is given by the following.
  81.         double preCalcPlanarSpeed = Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaZ, 2));
  82.         bpsPlanarSpeed = preCalcPlanarSpeed * 20;
  83.  
  84.         moveDist = player.moveDist;
  85.  
  86.         crouching = player.isCrouching();
  87.  
  88.         this.sprinting = player.isSprinting();
  89.  
  90.     }
  91.  
  92.  
  93.     private <P extends IAnimatable> PlayState predicate(AnimationEvent<P> event) {
  94.         if( sprinting){
  95.             event.getController().setAnimation(new AnimationBuilder().addAnimation("moving", LOOP));
  96.             return PlayState.CONTINUE;
  97.         }
  98.         else {
  99.             event.getController().setAnimation(new AnimationBuilder().addAnimation("idle", LOOP));
  100.             return PlayState.CONTINUE;
  101.         }
  102.     }
  103. }
  104.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement