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
This commit is contained in:
1 parent
1e659816b8
commit
70eb237d70
56 files changed
+2197
-12
No files matched your search
@@ -0,0 +1,48 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user