52 lines
2 KiB
Java
52 lines
2 KiB
Java
package net.mcreator.target.procedures;
|
|
|
|
import net.mcreator.target.init.TargetModMobEffects;
|
|
import net.minecraft.client.CameraType;
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.client.multiplayer.ClientLevel;
|
|
import net.minecraft.util.Mth;
|
|
import net.minecraft.util.RandomSource;
|
|
import net.minecraft.world.entity.Entity;
|
|
import net.minecraft.world.entity.LivingEntity;
|
|
import net.minecraft.world.phys.Vec3;
|
|
import net.minecraftforge.api.distmarker.Dist;
|
|
import net.minecraftforge.client.event.ViewportEvent;
|
|
import net.minecraftforge.eventbus.api.Event;
|
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
|
import net.minecraftforge.fml.common.Mod;
|
|
|
|
import javax.annotation.Nullable;
|
|
|
|
@Mod.EventBusSubscriber(value = Dist.CLIENT)
|
|
public class ShockcameraProcedure {
|
|
private static ViewportEvent.ComputeCameraAngles _provider = null;
|
|
|
|
private static void setAngles(float yaw, float pitch, float roll) {
|
|
_provider.setYaw(yaw);
|
|
_provider.setPitch(pitch);
|
|
_provider.setRoll(roll);
|
|
}
|
|
|
|
@SubscribeEvent
|
|
public static void computeCameraangles(ViewportEvent.ComputeCameraAngles event) {
|
|
_provider = event;
|
|
ClientLevel level = Minecraft.getInstance().level;
|
|
Entity entity = _provider.getCamera().getEntity();
|
|
if (level != null && entity != null) {
|
|
Vec3 entPos = entity.getPosition((float) _provider.getPartialTick());
|
|
execute(_provider, entity);
|
|
}
|
|
}
|
|
|
|
public static void execute(Entity entity) {
|
|
execute(null, entity);
|
|
}
|
|
|
|
private static void execute(@Nullable Event event, Entity entity) {
|
|
if (entity == null)
|
|
return;
|
|
if (entity instanceof LivingEntity _livEnt0 && _livEnt0.hasEffect(TargetModMobEffects.SHOCK.get()) && Minecraft.getInstance().options.getCameraType() == CameraType.FIRST_PERSON) {
|
|
setAngles(Minecraft.getInstance().gameRenderer.getMainCamera().getYRot(), Minecraft.getInstance().gameRenderer.getMainCamera().getXRot(), (float) Mth.nextDouble(RandomSource.create(), 8, 12));
|
|
}
|
|
}
|
|
}
|