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