Files
VS--Improved-Aerodynamics/src/main/java/dev/lumareth/improvedAerodynamics/exhaust/AfterburnerToggle.java
T
richard 70eb237d70 Add vectored afterburner nozzle with afterburner key and exhaust style
- Add vectored afterburner nozzle block with AzureLib model, deflection, throttle and afterburner state
- Drive nozzles from the vehicle control node and map pitch, roll and yaw to differential deflection
- Add afterburner toggle key and packet, linked to the control node
- Replace Warium exhaust effect entities with improved flames, particles and sounds when exhaustStyle is improved
- Add /aero seedgen to measure the air ceiling for the air placeholder
- Upgrade Warium VS to 1.1.7 and make the lift use horizontal speed
2026-11-11 18:00:46 +01:00

49 lines
2.2 KiB
Java

package dev.lumareth.improvedAerodynamics.exhaust;
import dev.lumareth.improvedAerodynamics.Config;
import dev.lumareth.improvedAerodynamics.flight.AutoTrimToggle;
import net.mcreator.valkyrienwarium.entity.SeatEntityEntity;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.level.block.entity.BlockEntity;
/**
* Server side of the afterburner key. The switch lives in the control node, like auto trim, so it stays with the
* craft and every nozzle linked to the node follows it. It only lights with enough throttle and goes out for good
* once the throttle falls below that, see {@link NozzleBlockEntity}.
*/
public final class AfterburnerToggle {
/** Tag on the control node that holds the switch. */
public static final String TAG = "improved_aerodynamics_afterburner";
private AfterburnerToggle() {
}
public static void toggle(ServerPlayer player) {
Entity vehicle = player.getVehicle();
if (!(vehicle instanceof SeatEntityEntity)) {
player.displayClientMessage(Component.translatable("message.improved_aerodynamics.afterburner.no_seat"), true);
return;
}
BlockEntity node = AutoTrimToggle.findNode(vehicle.level(), vehicle.blockPosition());
if (node == null) {
player.displayClientMessage(Component.translatable("message.improved_aerodynamics.afterburner.no_node"), true);
return;
}
CompoundTag tag = node.getPersistentData();
double minimum = Config.AFTERBURNER_MIN_THROTTLE.get();
if (!tag.getBoolean(TAG) && tag.getDouble("Throttle") < minimum) {
player.displayClientMessage(Component.translatable("message.improved_aerodynamics.afterburner.throttle", (int) Math.ceil(minimum)), true);
return;
}
boolean enabled = !tag.getBoolean(TAG);
tag.putBoolean(TAG, enabled);
node.setChanged();
player.displayClientMessage(Component.translatable(enabled
? "message.improved_aerodynamics.afterburner.on" : "message.improved_aerodynamics.afterburner.off"), true);
}
}