226 lines
16 KiB
Java
226 lines
16 KiB
Java
package net.mcreator.target.procedures;
|
|
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.client.multiplayer.ClientLevel;
|
|
import net.minecraft.resources.ResourceLocation;
|
|
import net.minecraft.tags.ItemTags;
|
|
import net.minecraft.world.entity.Entity;
|
|
import net.minecraft.world.entity.LivingEntity;
|
|
import net.minecraft.world.item.ItemStack;
|
|
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 WeaponMoveProcedure {
|
|
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 _livEnt ? _livEnt.getMainHandItem() : ItemStack.EMPTY).is(ItemTags.create(new ResourceLocation("target:gun")))) {
|
|
float fps = Minecraft.getInstance().getFps();
|
|
if (fps <= 0) {
|
|
fps = 1f;
|
|
}
|
|
float times = 90f / fps;
|
|
if (entity.getPersistentData().getDouble("move") < 0) {
|
|
entity.getPersistentData().putDouble("move", ((entity.getPersistentData().getDouble("move") + 1 * times * Math.pow(entity.getPersistentData().getDouble("move"), 2) * (1 - 1 * entity.getPersistentData().getDouble("zoomtime")))
|
|
* (1 - 1 * entity.getPersistentData().getDouble("zoomtime"))));
|
|
} else {
|
|
entity.getPersistentData().putDouble("move", ((entity.getPersistentData().getDouble("move") - 1 * times * Math.pow(entity.getPersistentData().getDouble("move"), 2) * (1 - 1 * entity.getPersistentData().getDouble("zoomtime")))
|
|
* (1 - 1 * entity.getPersistentData().getDouble("zoomtime"))));
|
|
}
|
|
if (entity.getPersistentData().getDouble("movel") == 1) {
|
|
entity.getPersistentData().putDouble("move",
|
|
((entity.getPersistentData().getDouble("move") + Math.pow(Math.abs(entity.getPersistentData().getDouble("move")) + 0.05, 2) * 0.2 * times * (1 - 0.1 * entity.getPersistentData().getDouble("zoomtime")))
|
|
* (1 - 0.1 * entity.getPersistentData().getDouble("zoomtime"))));
|
|
} else if (entity.getPersistentData().getDouble("mover") == 1) {
|
|
entity.getPersistentData().putDouble("move",
|
|
((entity.getPersistentData().getDouble("move") - Math.pow(Math.abs(entity.getPersistentData().getDouble("move")) + 0.05, 2) * 0.2 * times * (1 - 0.1 * entity.getPersistentData().getDouble("zoomtime")))
|
|
* (1 - 0.1 * entity.getPersistentData().getDouble("zoomtime"))));
|
|
}
|
|
if (entity.getPersistentData().getDouble("turnr") == 1) {
|
|
entity.getPersistentData().putDouble("turntimeyaw", (entity.getPersistentData().getDouble("turntimeyaw") + 0.08 * times * Math.pow(entity.getPersistentData().getDouble("amplitudeyaw"), 2)));
|
|
}
|
|
if (entity.getPersistentData().getDouble("turnl") == 1) {
|
|
entity.getPersistentData().putDouble("turntimeyaw", (entity.getPersistentData().getDouble("turntimeyaw") - 0.08 * times * Math.pow(entity.getPersistentData().getDouble("amplitudeyaw"), 2)));
|
|
}
|
|
if (entity.getPersistentData().getDouble("turntimeyaw") > 1) {
|
|
entity.getPersistentData().putDouble("turntimeyaw", 1);
|
|
}
|
|
if (entity.getPersistentData().getDouble("turntimeyaw") < -1) {
|
|
entity.getPersistentData().putDouble("turntimeyaw", (-1));
|
|
}
|
|
if (entity.getPersistentData().getDouble("turntimeyaw") >= 0) {
|
|
if (entity.getPersistentData().getDouble("turnr") == 0) {
|
|
entity.getPersistentData().putDouble("turntimeyaw", (entity.getPersistentData().getDouble("turntimeyaw") - 0.02 * times));
|
|
}
|
|
}
|
|
if (entity.getPersistentData().getDouble("turntimeyaw") < 0) {
|
|
if (entity.getPersistentData().getDouble("turnl") == 0) {
|
|
entity.getPersistentData().putDouble("turntimeyaw", (entity.getPersistentData().getDouble("turntimeyaw") + 0.02 * times));
|
|
}
|
|
}
|
|
if (entity.getPersistentData().getDouble("amplitudeyaw") < Math.abs(entity.getPersistentData().getDouble("r1") - entity.getPersistentData().getDouble("r2"))) {
|
|
entity.getPersistentData().putDouble("amplitudeyaw", (entity.getPersistentData().getDouble("amplitudeyaw")
|
|
+ 0.005 * Math.sin(0.5 * Math.PI * (Math.abs(entity.getPersistentData().getDouble("r1") - entity.getPersistentData().getDouble("r2")) - entity.getPersistentData().getDouble("amplitudeyaw")))));
|
|
} else {
|
|
entity.getPersistentData().putDouble("amplitudeyaw", (entity.getPersistentData().getDouble("amplitudeyaw")
|
|
- 0.005 * Math.sin(0.5 * Math.PI * (Math.abs(entity.getPersistentData().getDouble("r1") - entity.getPersistentData().getDouble("r2")) - entity.getPersistentData().getDouble("amplitudeyaw")))));
|
|
}
|
|
if (entity.getPersistentData().getDouble("amplitudeyaw") > 0) {
|
|
entity.getPersistentData().putDouble("amplitudeyaw", (entity.getPersistentData().getDouble("amplitudeyaw") - 0.01 * Math.pow(entity.getPersistentData().getDouble("amplitudeyaw"), 2)));
|
|
} else {
|
|
entity.getPersistentData().putDouble("amplitudeyaw", (entity.getPersistentData().getDouble("amplitudeyaw") + 0.01 * Math.pow(entity.getPersistentData().getDouble("amplitudeyaw"), 2)));
|
|
}
|
|
entity.getPersistentData().putDouble("yaw", (0.04 * Math.tan(0.25 * Math.PI * entity.getPersistentData().getDouble("turntimeyaw")) * (1 - 1 * entity.getPersistentData().getDouble("zoomtime"))));
|
|
if (entity.getPersistentData().getDouble("turnu") == 1) {
|
|
entity.getPersistentData().putDouble("turntimepitch", (entity.getPersistentData().getDouble("turntimepitch") + 0.02 * times));
|
|
}
|
|
if (entity.getPersistentData().getDouble("turnd") == 1) {
|
|
entity.getPersistentData().putDouble("turntimepitch", (entity.getPersistentData().getDouble("turntimepitch") - 0.02 * times));
|
|
}
|
|
if (entity.getPersistentData().getDouble("turntimepitch") > 1) {
|
|
entity.getPersistentData().putDouble("turntimepitch", 1);
|
|
}
|
|
if (entity.getPersistentData().getDouble("turntimepitch") < -1) {
|
|
entity.getPersistentData().putDouble("turntimepitch", (-1));
|
|
}
|
|
if (entity.getPersistentData().getDouble("turntimepitch") >= 0) {
|
|
if (entity.getPersistentData().getDouble("turnu") == 0) {
|
|
entity.getPersistentData().putDouble("turntimepitch", (entity.getPersistentData().getDouble("turntimepitch") - 0.04 * times));
|
|
}
|
|
}
|
|
if (entity.getPersistentData().getDouble("turntimepitch") < 0) {
|
|
if (entity.getPersistentData().getDouble("turnd") == 0) {
|
|
entity.getPersistentData().putDouble("turntimepitch", (entity.getPersistentData().getDouble("turntimepitch") + 0.04 * times));
|
|
}
|
|
}
|
|
if (entity.getPersistentData().getDouble("amplitudepitch") < Math.abs(entity.getPersistentData().getDouble("p1") - entity.getPersistentData().getDouble("p2"))) {
|
|
entity.getPersistentData().putDouble("amplitudepitch", (entity.getPersistentData().getDouble("amplitudepitch")
|
|
+ 0.00001 * Math.pow(Math.abs(entity.getPersistentData().getDouble("p1") - entity.getPersistentData().getDouble("p2")) - entity.getPersistentData().getDouble("amplitudepitch"), 2)));
|
|
} else {
|
|
entity.getPersistentData().putDouble("amplitudepitch", (entity.getPersistentData().getDouble("amplitudepitch")
|
|
- 0.00001 * Math.pow(Math.abs(entity.getPersistentData().getDouble("p1") - entity.getPersistentData().getDouble("p2")) - entity.getPersistentData().getDouble("amplitudepitch"), 2)));
|
|
}
|
|
if (entity.getPersistentData().getDouble("amplitudepitch") > 0) {
|
|
entity.getPersistentData().putDouble("amplitudepitch", (entity.getPersistentData().getDouble("amplitudepitch") - 0.01 * Math.pow(entity.getPersistentData().getDouble("amplitudepitch"), 2)));
|
|
} else {
|
|
entity.getPersistentData().putDouble("amplitudepitch", (entity.getPersistentData().getDouble("amplitudepitch") + 0.01 * Math.pow(entity.getPersistentData().getDouble("amplitudepitch"), 2)));
|
|
}
|
|
entity.getPersistentData().putDouble("gunpitch",
|
|
((0.15 * entity.getPersistentData().getDouble("amplitudepitch") * Math.tan(0.25 * Math.PI * entity.getPersistentData().getDouble("turntimepitch")) * (1 - 0.8 * entity.getPersistentData().getDouble("zoomtime"))
|
|
- 0.05 * entity.getPersistentData().getDouble("vy")) * (1 - 1 * entity.getPersistentData().getDouble("zoomtime"))));
|
|
if (entity.getPersistentData().getDouble("firetime") == 0) {
|
|
entity.getPersistentData().putDouble("rottime", (entity.getPersistentData().getDouble("rottime") + 1));
|
|
if (entity.getPersistentData().getDouble("rottime") >= 3) {
|
|
entity.getPersistentData().putDouble("rottime", 0);
|
|
}
|
|
if (entity.getPersistentData().getDouble("rottime") == 1) {
|
|
entity.getPersistentData().putDouble("r1", (entity.getYRot()));
|
|
entity.getPersistentData().putDouble("p1", (entity.getXRot()));
|
|
}
|
|
if (entity.getPersistentData().getDouble("rottime") == 2) {
|
|
entity.getPersistentData().putDouble("r2", (entity.getYRot()));
|
|
entity.getPersistentData().putDouble("p2", (entity.getXRot()));
|
|
}
|
|
if (0 > entity.getPersistentData().getDouble("r1") - entity.getPersistentData().getDouble("r2")) {
|
|
entity.getPersistentData().putDouble("rot", (entity.getPersistentData().getDouble("rot") - 0.01));
|
|
} else if (0 < entity.getPersistentData().getDouble("r1") - entity.getPersistentData().getDouble("r2")) {
|
|
entity.getPersistentData().putDouble("rot", (entity.getPersistentData().getDouble("rot") + 0.01));
|
|
} else if (0 == entity.getPersistentData().getDouble("r1") - entity.getPersistentData().getDouble("r2")) {
|
|
entity.getPersistentData().putDouble("rot", 0);
|
|
}
|
|
if (0 > entity.getPersistentData().getDouble("p1") - entity.getPersistentData().getDouble("p2")) {
|
|
entity.getPersistentData().putDouble("pit", (entity.getPersistentData().getDouble("pit") - 0.01));
|
|
} else if (0 < entity.getPersistentData().getDouble("p1") - entity.getPersistentData().getDouble("p2")) {
|
|
entity.getPersistentData().putDouble("pit", (entity.getPersistentData().getDouble("pit") + 0.01));
|
|
} else if (0 == entity.getPersistentData().getDouble("p1") - entity.getPersistentData().getDouble("p2")) {
|
|
entity.getPersistentData().putDouble("pit", 0);
|
|
}
|
|
if (entity.getPersistentData().getDouble("rot") < 0) {
|
|
entity.getPersistentData().putDouble("rot", (entity.getPersistentData().getDouble("rot") + 2 * times * Math.pow(entity.getPersistentData().getDouble("rot"), 2)));
|
|
if (entity.getPersistentData().getDouble("rot") < -0.04) {
|
|
entity.getPersistentData().putDouble("turnr", 1);
|
|
entity.getPersistentData().putDouble("turnl", 0);
|
|
}
|
|
} else if (entity.getPersistentData().getDouble("rot") > 0) {
|
|
entity.getPersistentData().putDouble("rot", (entity.getPersistentData().getDouble("rot") - 2 * times * Math.pow(entity.getPersistentData().getDouble("rot"), 2)));
|
|
if (entity.getPersistentData().getDouble("rot") > 0.04) {
|
|
entity.getPersistentData().putDouble("turnl", 1);
|
|
entity.getPersistentData().putDouble("turnr", 0);
|
|
}
|
|
} else {
|
|
entity.getPersistentData().putDouble("rot", 0);
|
|
entity.getPersistentData().putDouble("turnl", 0);
|
|
entity.getPersistentData().putDouble("turnr", 0);
|
|
}
|
|
if (entity.getPersistentData().getDouble("pit") < 0) {
|
|
entity.getPersistentData().putDouble("pit", (entity.getPersistentData().getDouble("pit") + 2 * times * Math.pow(entity.getPersistentData().getDouble("pit"), 2)));
|
|
if (entity.getPersistentData().getDouble("pit") < -0.034) {
|
|
entity.getPersistentData().putDouble("turnu", 1);
|
|
entity.getPersistentData().putDouble("turnd", 0);
|
|
}
|
|
} else if (entity.getPersistentData().getDouble("pit") > 0) {
|
|
entity.getPersistentData().putDouble("pit", (entity.getPersistentData().getDouble("pit") - 2 * times * Math.pow(entity.getPersistentData().getDouble("pit"), 2)));
|
|
if (entity.getPersistentData().getDouble("pit") > 0.034) {
|
|
entity.getPersistentData().putDouble("turnd", 1);
|
|
entity.getPersistentData().putDouble("turnu", 0);
|
|
}
|
|
} else {
|
|
entity.getPersistentData().putDouble("pit", 0);
|
|
entity.getPersistentData().putDouble("turnd", 0);
|
|
entity.getPersistentData().putDouble("turnu", 0);
|
|
}
|
|
} else {
|
|
entity.getPersistentData().putDouble("pit", 0);
|
|
entity.getPersistentData().putDouble("turnl", 0);
|
|
entity.getPersistentData().putDouble("turnr", 0);
|
|
entity.getPersistentData().putDouble("turnd", 0);
|
|
entity.getPersistentData().putDouble("turnu", 0);
|
|
}
|
|
if (-0.8 < entity.getDeltaMovement().y() + 0.078 && entity.getDeltaMovement().y() + 0.078 < 0.8) {
|
|
if (entity.getPersistentData().getDouble("vy") < entity.getDeltaMovement().y() + 0.078) {
|
|
entity.getPersistentData().putDouble("vy",
|
|
((entity.getPersistentData().getDouble("vy") + 2 * Math.pow((entity.getDeltaMovement().y() + 0.078) - entity.getPersistentData().getDouble("vy"), 2)) * (1 - 1 * entity.getPersistentData().getDouble("zoomtime"))));
|
|
} else {
|
|
entity.getPersistentData().putDouble("vy",
|
|
((entity.getPersistentData().getDouble("vy") - 2 * Math.pow((entity.getDeltaMovement().y() + 0.078) - entity.getPersistentData().getDouble("vy"), 2)) * (1 - 1 * entity.getPersistentData().getDouble("zoomtime"))));
|
|
}
|
|
}
|
|
if (entity.getPersistentData().getDouble("vy") > 0.8) {
|
|
entity.getPersistentData().putDouble("vy", 0.8);
|
|
}
|
|
if (entity.getPersistentData().getDouble("vy") < -0.8) {
|
|
entity.getPersistentData().putDouble("vy", (-0.8));
|
|
}
|
|
}
|
|
}
|
|
}
|