Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package io.github.ziggly001.zigglys_animal_ears.item.custom;
- import net.minecraft.client.Minecraft;
- import net.minecraft.world.entity.EquipmentSlot;
- import net.minecraft.world.entity.LivingEntity;
- import net.minecraft.world.entity.player.Player;
- import net.minecraft.world.item.ArmorMaterial;
- import net.minecraftforge.client.event.RenderPlayerEvent;
- import net.minecraftforge.common.MinecraftForge;
- import net.minecraftforge.eventbus.api.SubscribeEvent;
- import net.minecraftforge.fml.common.Mod;
- 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;
- import software.bernie.geckolib3.item.GeoArmorItem;
- import software.bernie.geckolib3.util.GeckoLibUtil;
- import static software.bernie.geckolib3.core.builder.ILoopType.EDefaultLoopTypes.LOOP;
- public class HareArmorItem extends GeoArmorItem implements IAnimatable {
- private final AnimationFactory factory = GeckoLibUtil.createFactory(this);
- public HareArmorItem(ArmorMaterial material, EquipmentSlot slot, Properties settings) {
- super(material, slot, settings);
- }
- @Override
- public void registerControllers(AnimationData data) {
- data.addAnimationController(new AnimationController<HareArmorItem>(this, "controller",
- 20, this::predicate));
- }
- @Override
- public AnimationFactory getFactory() {
- return this.factory;
- }
- // gets reference to the player
- /*
- LivingEntity player = Minecraft.getInstance().player;
- */
- Player player;
- // get difference between last coordinates and current coordinates.
- // this gives us the components of the Speed at which the player is travelling this frame.
- double bpsPlanarSpeed;
- float moveDist;
- boolean crouching;
- boolean sprinting;
- @SubscribeEvent
- public void onPlayerRendered(RenderPlayerEvent event) {
- player = event.getEntity();
- double deltaX;
- double deltaY;
- double deltaZ;
- {
- assert player != null;
- deltaX = player.getX() - player.xOld;
- deltaY = player.getY() - player.yOld;
- deltaZ = player.getZ() - player.zOld;
- }
- // Now, with these axis-aligned components of speed, we can construct the speed vector's magnitude.
- double preCalculationSpeed = Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2) + Math.pow(deltaZ, 2));
- // we multiply by 20 to convert to blocks/second, an actually usable metric.
- // the number 20 is used because that is average ticks per second.
- // getting the actual ticks per second of the frame is both difficult and unnecessary, as-
- // -it requires constant server-client communication, and it is really stable compared to fps.
- double bpsSpeed = preCalculationSpeed * 20;
- // The speed in only x and z, "horizontal speed", is given by the following.
- double preCalcPlanarSpeed = Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaZ, 2));
- bpsPlanarSpeed = preCalcPlanarSpeed * 20;
- moveDist = player.moveDist;
- crouching = player.isCrouching();
- this.sprinting = player.isSprinting();
- }
- private <P extends IAnimatable> PlayState predicate(AnimationEvent<P> event) {
- if( sprinting){
- event.getController().setAnimation(new AnimationBuilder().addAnimation("moving", LOOP));
- return PlayState.CONTINUE;
- }
- else {
- event.getController().setAnimation(new AnimationBuilder().addAnimation("idle", LOOP));
- return PlayState.CONTINUE;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement