superb-warfare/src/main/java/net/mcreator/target/procedures/WeaponMoveProcedure.java
2024-05-05 15:44:33 +08:00

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));
}
}
}
}